diff --git a/patches/minecraft/net/minecraft/item/Item.java.patch b/patches/minecraft/net/minecraft/item/Item.java.patch index 6b5c959a50..46db5beb91 100644 --- a/patches/minecraft/net/minecraft/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/item/Item.java.patch @@ -53,7 +53,7 @@ public boolean func_77616_k(ItemStack p_77616_1_) { - return this.func_77639_j() == 1 && this.func_77645_m(); -+ return this.getItemStackLimit(p_77616_1_) == 1 && this.func_77645_m(); ++ return this.getItemStackLimit(p_77616_1_) == 1 && this.isDamageable(p_77616_1_); } protected static BlockRayTraceResult func_219968_a(World p_219968_0_, PlayerEntity p_219968_1_, RayTraceContext.FluidMode p_219968_2_) { @@ -93,7 +93,7 @@ + + @Override + public boolean isRepairable(ItemStack stack) { -+ return canRepair && func_77645_m(); ++ return canRepair && isDamageable(stack); + } + + @Override diff --git a/patches/minecraft/net/minecraft/item/ItemStack.java.patch b/patches/minecraft/net/minecraft/item/ItemStack.java.patch index 56ebe81191..9c6194c20e 100644 --- a/patches/minecraft/net/minecraft/item/ItemStack.java.patch +++ b/patches/minecraft/net/minecraft/item/ItemStack.java.patch @@ -19,7 +19,7 @@ private static final Logger field_199558_c = LogManager.getLogger(); public static final ItemStack field_190927_a = new ItemStack((Item)null); public static final DecimalFormat field_111284_a = Util.func_200696_a(new DecimalFormat("#.##"), (p_234699_0_) -> { -@@ -109,7 +112,10 @@ +@@ -109,14 +112,18 @@ p_i231596_3_.ifPresent(this::func_77982_d); } @@ -30,8 +30,9 @@ + this.capNBT = capNBT; this.field_151002_e = p_i48204_1_ == null ? null : p_i48204_1_.func_199767_j(); this.field_77994_a = p_i48204_2_; - if (this.field_151002_e != null && this.field_151002_e.func_77645_m()) { -@@ -117,6 +123,7 @@ +- if (this.field_151002_e != null && this.field_151002_e.func_77645_m()) { ++ if (this.field_151002_e != null && this.field_151002_e.isDamageable(this)) { + this.func_196085_b(this.func_77952_i()); } this.func_190923_F(); @@ -48,7 +49,13 @@ this.field_151002_e = Registry.field_212630_s.func_82594_a(new ResourceLocation(p_i47263_1_.func_74779_i("id"))); this.field_77994_a = p_i47263_1_.func_74771_c("Count"); if (p_i47263_1_.func_150297_b("tag", 10)) { -@@ -137,6 +146,7 @@ +@@ -132,11 +141,12 @@ + this.func_77973_b().func_179215_a(p_i47263_1_); + } + +- if (this.func_77973_b().func_77645_m()) { ++ if (this.func_77973_b().isDamageable(this)) { + this.func_196085_b(this.func_77952_i()); } this.func_190923_F(); @@ -118,7 +125,7 @@ public boolean func_77984_f() { - if (!this.field_190928_g && this.func_77973_b().func_77612_l() > 0) { -+ if (!this.field_190928_g && this.func_77973_b().getMaxDamage(this) > 0) { ++ if (!this.field_190928_g && this.func_77973_b().isDamageable(this)) { CompoundNBT compoundnbt = this.func_77978_p(); return compoundnbt == null || !compoundnbt.func_74767_n("Unbreakable"); } else { @@ -190,6 +197,15 @@ } } +@@ -479,7 +502,7 @@ + + public void func_77982_d(@Nullable CompoundNBT p_77982_1_) { + this.field_77990_d = p_77982_1_; +- if (this.func_77973_b().func_77645_m()) { ++ if (this.func_77973_b().isDamageable(this)) { + this.func_196085_b(this.func_77952_i()); + } + @@ -673,6 +696,7 @@ } } diff --git a/patches/minecraft/net/minecraft/item/MerchantOffer.java.patch b/patches/minecraft/net/minecraft/item/MerchantOffer.java.patch new file mode 100644 index 0000000000..c6b128193c --- /dev/null +++ b/patches/minecraft/net/minecraft/item/MerchantOffer.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/item/MerchantOffer.java ++++ b/net/minecraft/item/MerchantOffer.java +@@ -178,7 +178,7 @@ + return true; + } else { + ItemStack itemstack = p_222201_1_.func_77946_l(); +- if (itemstack.func_77973_b().func_77645_m()) { ++ if (itemstack.func_77973_b().isDamageable(itemstack)) { + itemstack.func_196085_b(itemstack.func_77952_i()); + } + diff --git a/patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch b/patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch index 5cefb4e98b..d666bb6d9d 100644 --- a/patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch +++ b/patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch @@ -20,7 +20,7 @@ this.field_199807_b = p_i49381_1_.toArray((p_209360_0_) -> { return new Ingredient.IItemList[p_209360_0_]; }); -+ this.isSimple = !net.minecraftforge.fml.ModLoader.isDataGenRunning() && !Arrays.stream(field_199807_b).anyMatch(list -> list.func_199799_a().stream().anyMatch(stack -> stack.func_77973_b().func_77645_m())); ++ this.isSimple = !net.minecraftforge.fml.ModLoader.isDataGenRunning() && !Arrays.stream(field_199807_b).anyMatch(list -> list.func_199799_a().stream().anyMatch(stack -> stack.func_77973_b().isDamageable(stack))); + Ingredient.INSTANCES.add(this); } diff --git a/patches/minecraft/net/minecraft/network/PacketBuffer.java.patch b/patches/minecraft/net/minecraft/network/PacketBuffer.java.patch index 5dcae1c501..59774b7615 100644 --- a/patches/minecraft/net/minecraft/network/PacketBuffer.java.patch +++ b/patches/minecraft/net/minecraft/network/PacketBuffer.java.patch @@ -25,11 +25,13 @@ if (p_150788_1_.func_190926_b()) { this.writeBoolean(false); } else { -@@ -301,7 +310,7 @@ +@@ -300,7 +309,7 @@ + this.func_150787_b(Item.func_150891_b(item)); this.writeByte(p_150788_1_.func_190916_E()); CompoundNBT compoundnbt = null; - if (item.func_77645_m() || item.func_77651_p()) { +- if (item.func_77645_m() || item.func_77651_p()) { - compoundnbt = p_150788_1_.func_77978_p(); ++ if (item.isDamageable(p_150788_1_) || item.func_77651_p()) { + compoundnbt = limitedTag ? p_150788_1_.getShareTag() : p_150788_1_.func_77978_p(); } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java index 659b661344..3897f10b87 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java @@ -848,4 +848,15 @@ public interface IForgeItem { return false; } + + /** + * Used to test if this item can be damaged, but with the ItemStack in question. + * Please note that in some cases no ItemStack is available, so the stack-less method will be used. + * + * @param stack ItemStack in the Chest slot of the entity. + */ + default boolean isDamageable(ItemStack stack) + { + return this.getItem().isDamageable(); + } }