Skip to content

Commit

Permalink
Shields can now be repaired, also vanilla shields now require Iron to…
Browse files Browse the repository at this point in the history
… be repaired
  • Loading branch information
Insane96 committed Aug 11, 2022
1 parent 702e080 commit 0e99e53
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 12 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* Added Copper Shield
* Added recipe to apply banners to shields
* Added Combat Test shield disabling
* Shields can now be repaired, also vanilla shields now require Iron to be repaired
* Fixed (hopefully) vanilla shield recipe not being overridden

## 1.0.3
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.insane96mcp.shieldsplus.mixin;

import com.insane96mcp.shieldsplus.setup.SPShieldMaterials;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.ShieldItem;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(ShieldItem.class)
public abstract class ShieldItemMixin extends Item {

public ShieldItemMixin(Properties p_41383_) {
super(p_41383_);
}

@Inject(at = @At("RETURN"), method = "isValidRepairItem", cancellable = true)
public void isValidRepairItem(ItemStack p_43091_, ItemStack repairingMaterial, CallbackInfoReturnable<Boolean> callbackInfo) {
if (SPShieldMaterials.IRON.repairItem != null) {
callbackInfo.setReturnValue(repairingMaterial.is(SPShieldMaterials.IRON.repairItem));
return;
}
callbackInfo.setReturnValue(repairingMaterial.is(SPShieldMaterials.IRON.repairTag));
}

@Inject(at = @At("RETURN"), method = "getDescriptionId", cancellable = true)
public void getDescriptionId(ItemStack stack, CallbackInfoReturnable<String> callbackInfo) {
callbackInfo.setReturnValue(super.getDescriptionId());
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package com.insane96mcp.shieldsplus.setup;

import com.insane96mcp.shieldsplus.world.item.SPShieldMaterial;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.Rarity;

public class SPShieldMaterials {
public static final SPShieldMaterial WOODEN = new SPShieldMaterial("wooden", 1, 84, Rarity.COMMON);
public static final SPShieldMaterial STONE = new SPShieldMaterial("stone", 2, 112, Rarity.COMMON);
public static final SPShieldMaterial COPPER = new SPShieldMaterial("copper", 3, 134, Rarity.COMMON);
public static final SPShieldMaterial GOLDEN = new SPShieldMaterial("golden", 1, 42, Rarity.COMMON);
public static final SPShieldMaterial IRON = new SPShieldMaterial("iron", 5, 332, Rarity.COMMON);
public static final SPShieldMaterial DIAMOND = new SPShieldMaterial("diamond", 7, 588, Rarity.COMMON);
public static final SPShieldMaterial NETHERITE = new SPShieldMaterial("netherite", 8, 672, Rarity.COMMON);
public static final SPShieldMaterial WOODEN = new SPShieldMaterial("wooden", 1, 84, ItemTags.PLANKS, Rarity.COMMON);
public static final SPShieldMaterial STONE = new SPShieldMaterial("stone", 2, 112, ItemTags.STONE_TOOL_MATERIALS, Rarity.COMMON);
public static final SPShieldMaterial COPPER = new SPShieldMaterial("copper", 3, 134, Items.COPPER_INGOT, Rarity.COMMON);
public static final SPShieldMaterial GOLDEN = new SPShieldMaterial("golden", 1, 42, Items.GOLD_INGOT, Rarity.COMMON);
public static final SPShieldMaterial IRON = new SPShieldMaterial("iron", 5, 332, Items.IRON_INGOT, Rarity.COMMON);
public static final SPShieldMaterial DIAMOND = new SPShieldMaterial("diamond", 7, 588, Items.DIAMOND, Rarity.COMMON);
public static final SPShieldMaterial NETHERITE = new SPShieldMaterial("netherite", 8, 672, Items.NETHERITE_INGOT, Rarity.COMMON);
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public BlockEntityWithoutLevelRenderer getItemStackRenderer() {
}

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

@Override
public boolean isValidRepairItem(ItemStack repaired, ItemStack repairingMaterial) {
return super.isValidRepairItem(repaired, repairingMaterial);
public boolean isValidRepairItem(@NotNull ItemStack repaired, @NotNull ItemStack repairingMaterial) {
if (this.material.repairItem != null)
return repairingMaterial.is(this.material.repairItem);
return repairingMaterial.is(this.material.repairTag);
}

@OnlyIn(Dist.CLIENT)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.insane96mcp.shieldsplus.world.item;

import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Rarity;

public class SPShieldMaterial {
Expand All @@ -8,14 +10,27 @@ public class SPShieldMaterial {
public String materialName;
public double damageBlocked;
public int durability;
public Item repairItem;
public TagKey<Item> repairTag;
public Rarity rarity;

public SPShieldMaterial(String materialName, double damageBlocked, int durability, Rarity rarity) {
public SPShieldMaterial(String materialName, double damageBlocked, int durability, Item repairItem, Rarity rarity) {
//this.material = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield".formatted(material)));
//this.noPatternMaterial = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield_nopattern".formatted(material)));
this.materialName = materialName;
this.damageBlocked = damageBlocked;
this.durability = durability;
this.repairItem = repairItem;
this.rarity = rarity;
}

public SPShieldMaterial(String materialName, double damageBlocked, int durability, TagKey<Item> repairTag, Rarity rarity) {
//this.material = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield".formatted(material)));
//this.noPatternMaterial = new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(ShieldsPlus.MOD_ID, "entity/%s_shield_nopattern".formatted(material)));
this.materialName = materialName;
this.damageBlocked = damageBlocked;
this.durability = durability;
this.repairTag = repairTag;
this.rarity = rarity;
}
}
3 changes: 2 additions & 1 deletion src/main/resources/shieldsplus.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"refmap": "shieldsplus.refmap.json",
"mixins": [
"LivingEntityMixin",
"PlayerMixin"
"PlayerMixin",
"ShieldItemMixin"
],
"minVersion": "0.8"
}

0 comments on commit 0e99e53

Please sign in to comment.