Skip to content

Commit 0e99e53

Browse files
committed
Shields can now be repaired, also vanilla shields now require Iron to be repaired
1 parent 702e080 commit 0e99e53

File tree

6 files changed

+65
-12
lines changed

6 files changed

+65
-12
lines changed

changelog.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Added Copper Shield
55
* Added recipe to apply banners to shields
66
* Added Combat Test shield disabling
7+
* Shields can now be repaired, also vanilla shields now require Iron to be repaired
78
* Fixed (hopefully) vanilla shield recipe not being overridden
89

910
## 1.0.3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.insane96mcp.shieldsplus.mixin;
2+
3+
import com.insane96mcp.shieldsplus.setup.SPShieldMaterials;
4+
import net.minecraft.world.item.Item;
5+
import net.minecraft.world.item.ItemStack;
6+
import net.minecraft.world.item.ShieldItem;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
11+
12+
@Mixin(ShieldItem.class)
13+
public abstract class ShieldItemMixin extends Item {
14+
15+
public ShieldItemMixin(Properties p_41383_) {
16+
super(p_41383_);
17+
}
18+
19+
@Inject(at = @At("RETURN"), method = "isValidRepairItem", cancellable = true)
20+
public void isValidRepairItem(ItemStack p_43091_, ItemStack repairingMaterial, CallbackInfoReturnable<Boolean> callbackInfo) {
21+
if (SPShieldMaterials.IRON.repairItem != null) {
22+
callbackInfo.setReturnValue(repairingMaterial.is(SPShieldMaterials.IRON.repairItem));
23+
return;
24+
}
25+
callbackInfo.setReturnValue(repairingMaterial.is(SPShieldMaterials.IRON.repairTag));
26+
}
27+
28+
@Inject(at = @At("RETURN"), method = "getDescriptionId", cancellable = true)
29+
public void getDescriptionId(ItemStack stack, CallbackInfoReturnable<String> callbackInfo) {
30+
callbackInfo.setReturnValue(super.getDescriptionId());
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package com.insane96mcp.shieldsplus.setup;
22

33
import com.insane96mcp.shieldsplus.world.item.SPShieldMaterial;
4+
import net.minecraft.tags.ItemTags;
5+
import net.minecraft.world.item.Items;
46
import net.minecraft.world.item.Rarity;
57

68
public class SPShieldMaterials {
7-
public static final SPShieldMaterial WOODEN = new SPShieldMaterial("wooden", 1, 84, Rarity.COMMON);
8-
public static final SPShieldMaterial STONE = new SPShieldMaterial("stone", 2, 112, Rarity.COMMON);
9-
public static final SPShieldMaterial COPPER = new SPShieldMaterial("copper", 3, 134, Rarity.COMMON);
10-
public static final SPShieldMaterial GOLDEN = new SPShieldMaterial("golden", 1, 42, Rarity.COMMON);
11-
public static final SPShieldMaterial IRON = new SPShieldMaterial("iron", 5, 332, Rarity.COMMON);
12-
public static final SPShieldMaterial DIAMOND = new SPShieldMaterial("diamond", 7, 588, Rarity.COMMON);
13-
public static final SPShieldMaterial NETHERITE = new SPShieldMaterial("netherite", 8, 672, Rarity.COMMON);
9+
public static final SPShieldMaterial WOODEN = new SPShieldMaterial("wooden", 1, 84, ItemTags.PLANKS, Rarity.COMMON);
10+
public static final SPShieldMaterial STONE = new SPShieldMaterial("stone", 2, 112, ItemTags.STONE_TOOL_MATERIALS, Rarity.COMMON);
11+
public static final SPShieldMaterial COPPER = new SPShieldMaterial("copper", 3, 134, Items.COPPER_INGOT, Rarity.COMMON);
12+
public static final SPShieldMaterial GOLDEN = new SPShieldMaterial("golden", 1, 42, Items.GOLD_INGOT, Rarity.COMMON);
13+
public static final SPShieldMaterial IRON = new SPShieldMaterial("iron", 5, 332, Items.IRON_INGOT, Rarity.COMMON);
14+
public static final SPShieldMaterial DIAMOND = new SPShieldMaterial("diamond", 7, 588, Items.DIAMOND, Rarity.COMMON);
15+
public static final SPShieldMaterial NETHERITE = new SPShieldMaterial("netherite", 8, 672, Items.NETHERITE_INGOT, Rarity.COMMON);
1416
}

src/main/java/com/insane96mcp/shieldsplus/world/item/SPShieldItem.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public BlockEntityWithoutLevelRenderer getItemStackRenderer() {
5959
}
6060

6161
@Override
62-
public void appendHoverText(ItemStack itemStack, @Nullable Level level, List<Component> components, TooltipFlag tooltipFlag) {
62+
public void appendHoverText(@NotNull ItemStack itemStack, @Nullable Level level, @NotNull List<Component> components, @NotNull TooltipFlag tooltipFlag) {
6363
super.appendHoverText(itemStack, level, components, tooltipFlag);
6464
addDamageBlockedText(components, this.getBlockedDamage());
6565
}
@@ -69,8 +69,10 @@ public static void addDamageBlockedText(List<Component> components, double block
6969
}
7070

7171
@Override
72-
public boolean isValidRepairItem(ItemStack repaired, ItemStack repairingMaterial) {
73-
return super.isValidRepairItem(repaired, repairingMaterial);
72+
public boolean isValidRepairItem(@NotNull ItemStack repaired, @NotNull ItemStack repairingMaterial) {
73+
if (this.material.repairItem != null)
74+
return repairingMaterial.is(this.material.repairItem);
75+
return repairingMaterial.is(this.material.repairTag);
7476
}
7577

7678
@OnlyIn(Dist.CLIENT)
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.insane96mcp.shieldsplus.world.item;
22

3+
import net.minecraft.tags.TagKey;
4+
import net.minecraft.world.item.Item;
35
import net.minecraft.world.item.Rarity;
46

57
public class SPShieldMaterial {
@@ -8,14 +10,27 @@ public class SPShieldMaterial {
810
public String materialName;
911
public double damageBlocked;
1012
public int durability;
13+
public Item repairItem;
14+
public TagKey<Item> repairTag;
1115
public Rarity rarity;
1216

13-
public SPShieldMaterial(String materialName, double damageBlocked, int durability, Rarity rarity) {
17+
public SPShieldMaterial(String materialName, double damageBlocked, int durability, Item repairItem, Rarity rarity) {
1418
//this.material = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield".formatted(material)));
1519
//this.noPatternMaterial = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield_nopattern".formatted(material)));
1620
this.materialName = materialName;
1721
this.damageBlocked = damageBlocked;
1822
this.durability = durability;
23+
this.repairItem = repairItem;
24+
this.rarity = rarity;
25+
}
26+
27+
public SPShieldMaterial(String materialName, double damageBlocked, int durability, TagKey<Item> repairTag, Rarity rarity) {
28+
//this.material = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield".formatted(material)));
29+
//this.noPatternMaterial = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield_nopattern".formatted(material)));
30+
this.materialName = materialName;
31+
this.damageBlocked = damageBlocked;
32+
this.durability = durability;
33+
this.repairTag = repairTag;
1934
this.rarity = rarity;
2035
}
2136
}

src/main/resources/shieldsplus.mixins.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"refmap": "shieldsplus.refmap.json",
66
"mixins": [
77
"LivingEntityMixin",
8-
"PlayerMixin"
8+
"PlayerMixin",
9+
"ShieldItemMixin"
910
],
1011
"minVersion": "0.8"
1112
}

0 commit comments

Comments
 (0)