From 2948df261d473ef02293d6de9c1b11f277011dd3 Mon Sep 17 00:00:00 2001 From: SuperSoupr <26164930+SuperSoupr@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:45:29 +0300 Subject: [PATCH 1/6] attempt --- .../common/items/ItemInvertedIngot.java | 23 ++++++++++++------- .../common/recipe/RecipeInvertedIngot.java | 14 ----------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java index b56dc4f89..ca1b48dd3 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java @@ -41,9 +41,15 @@ public ItemInvertedIngot() { @Override public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, boolean p_77663_5_) { - if (stack.getItemDamage() != 0 || !stack.hasTagCompound()) return; + if (stack.getItemDamage() != 0) return; if (!(entityIn instanceof EntityPlayer player)) return; + if (!stack.hasTagCompound()) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setLong("CraftedAt", worldIn.getTotalWorldTime()); + stack.setTagCompound(nbt); + } + if (!(player.openContainer instanceof ContainerWorkbench) || checkImplosion(stack, worldIn)) { player.inventory.setInventorySlotContents(slot, null); player.closeScreen(); @@ -56,10 +62,8 @@ public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, public static boolean checkImplosion(ItemStack item, World world) { if (item.getItemDamage() == 0 && item.hasTagCompound()) { NBTTagCompound tag = item.getTagCompound(); - int remaining = tag.getInteger("ImplosionTimer"); - if (remaining > 0) { - tag.setInteger("ImplosionTimer", remaining - 1); - } else { + long passed = world.getTotalWorldTime() - tag.getLong("CraftedAt"); + if (passed > InversionConfig.invertedIngotImplosionTimer) { return (world.isRemote); } } @@ -82,12 +86,15 @@ public void addInformation(ItemStack stack, EntityPlayer player, List to } else { tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.1")); if (stack.hasTagCompound()) { - double time = (double) stack.getTagCompound() - .getInteger("ImplosionTimer") / 20; + long time = player.worldObj.getTotalWorldTime(); + + double passed = time - tag.getLong("CraftedAt"); + + double timeLeft = (InversionConfig.invertedIngotImplosionTimer - passed) / 20D; tooltip.add( StatCollector.translateToLocalFormatted( "item.inverted_ingot.desc.2", - formatNumber(Math.max(0, time)))); + formatNumber(Math.max(0, timeLeft)))); } else { tooltip.add(StatCollector.translateToLocalFormatted("item.inverted_ingot.desc.2", 10)); } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java index 4784dde82..114d19265 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java @@ -3,11 +3,8 @@ import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.ShapedRecipes; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -import com.fouristhenumber.utilitiesinexcess.config.items.InversionConfig; - public class RecipeInvertedIngot extends ShapedRecipes { public RecipeInvertedIngot(int width, int height, ItemStack[] input, ItemStack output) { @@ -24,15 +21,4 @@ public boolean matches(InventoryCrafting inv, World world) { return super.matches(inv, world); } - - @Override - public ItemStack getRecipeOutput() { - ItemStack output = super.getRecipeOutput().copy(); - if (InversionConfig.invertedIngotsImplode) { - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setInteger("ImplosionTimer", InversionConfig.invertedIngotImplosionTimer); - output.setTagCompound(nbt); - } - return output; - } } From cd15e10aceb9abad4dfbd98c2c01998d4936a64c Mon Sep 17 00:00:00 2001 From: SuperSoupr <26164930+SuperSoupr@users.noreply.github.com> Date: Mon, 29 Jun 2026 18:08:02 +0300 Subject: [PATCH 2/6] cleanup --- .../common/items/ItemInvertedIngot.java | 16 ++++++++-------- .../common/renderers/InvertedIngotRenderer.java | 5 +++-- .../assets/utilitiesinexcess/lang/en_US.lang | 3 ++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java index ca1b48dd3..413f8b703 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java @@ -43,6 +43,7 @@ public ItemInvertedIngot() { public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, boolean p_77663_5_) { if (stack.getItemDamage() != 0) return; if (!(entityIn instanceof EntityPlayer player)) return; + if (player.capabilities.isCreativeMode) return; if (!stack.hasTagCompound()) { NBTTagCompound nbt = new NBTTagCompound(); @@ -80,23 +81,22 @@ public String getUnlocalizedName(ItemStack stack) { public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean p_77624_4_) { if (stack.getItemDamage() == 0) { if (InversionConfig.invertedIngotsImplode) { - NBTTagCompound tag = stack.getTagCompound(); - if (tag == null) { + boolean hasTag = stack.hasTagCompound(); + if (player.capabilities.isCreativeMode && !hasTag) { tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.c")); + tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.c2")); } else { tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.1")); - if (stack.hasTagCompound()) { - long time = player.worldObj.getTotalWorldTime(); - - double passed = time - tag.getLong("CraftedAt"); - + if (hasTag) { + double passed = player.worldObj.getTotalWorldTime() - stack.getTagCompound() + .getLong("CraftedAt"); double timeLeft = (InversionConfig.invertedIngotImplosionTimer - passed) / 20D; tooltip.add( StatCollector.translateToLocalFormatted( "item.inverted_ingot.desc.2", formatNumber(Math.max(0, timeLeft)))); } else { - tooltip.add(StatCollector.translateToLocalFormatted("item.inverted_ingot.desc.2", 10)); + tooltip.add(StatCollector.translateToLocalFormatted("item.inverted_ingot.desc.2", 15)); } tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.3")); tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.4")); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/renderers/InvertedIngotRenderer.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/renderers/InvertedIngotRenderer.java index 4fdd6d57a..cc3489bb2 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/renderers/InvertedIngotRenderer.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/renderers/InvertedIngotRenderer.java @@ -45,12 +45,13 @@ public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { .getIconFromDamageForRenderPass(stack.getItemDamage(), 0); NBTTagCompound tag = stack.getTagCompound(); - if (tag != null && tag.hasKey("ImplosionTimer")) { + if (tag != null && tag.hasKey("CraftedAt")) { World world = Minecraft.getMinecraft().theWorld; if (world == null) return; - int remaining = tag.getInteger("ImplosionTimer"); + double passed = world.getTotalWorldTime() - tag.getLong("CraftedAt"); + int remaining = (int) (InversionConfig.invertedIngotImplosionTimer - passed); float progress = MathHelper .clamp_float((float) remaining / InversionConfig.invertedIngotImplosionTimer, 0f, 1f); diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index eb24c580c..bba264375 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -110,7 +110,8 @@ item.inverted_ingot.desc.2=Will implode in %s seconds! item.inverted_ingot.desc.3=Will also implode if thrown or the crafting table is closed. item.inverted_ingot.desc.4=Does not stack. item.inverted_ingot.desc.5=Cannot be crafted outside of a vanilla crafting table. -item.inverted_ingot.desc.c=Creatively spawned. Will not implode. +item.inverted_ingot.desc.c=You are in creative. Will not implode... +item.inverted_ingot.desc.c2=Yet nei.infopage.uie.inverted_ingot.1=Channeling a diamond into an Awakened Inversion Sigil allows you to invert iron into this strange and highly unstable substance. Many powerful tools and items can be made through inversion... nei.infopage.uie.inverted_ingot.2=The process of creating inverted ingots is quite dangerous. Firstly, they can only be created in vanilla crafting tables. Once crafted, you have a limited time to use them. From a66811e0f2b64f6db78a758fd8d161ec13e6bd43 Mon Sep 17 00:00:00 2001 From: SuperSoupr <26164930+SuperSoupr@users.noreply.github.com> Date: Tue, 30 Jun 2026 10:39:21 +0300 Subject: [PATCH 3/6] Update description for inverted ingot item --- src/main/resources/assets/utilitiesinexcess/lang/en_US.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index bba264375..8e4f2f40b 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -111,7 +111,7 @@ item.inverted_ingot.desc.3=Will also implode if thrown or the crafting table is item.inverted_ingot.desc.4=Does not stack. item.inverted_ingot.desc.5=Cannot be crafted outside of a vanilla crafting table. item.inverted_ingot.desc.c=You are in creative. Will not implode... -item.inverted_ingot.desc.c2=Yet +item.inverted_ingot.desc.c2=For now nei.infopage.uie.inverted_ingot.1=Channeling a diamond into an Awakened Inversion Sigil allows you to invert iron into this strange and highly unstable substance. Many powerful tools and items can be made through inversion... nei.infopage.uie.inverted_ingot.2=The process of creating inverted ingots is quite dangerous. Firstly, they can only be created in vanilla crafting tables. Once crafted, you have a limited time to use them. From c73acf76c00a31a0ec8e3913ea6637cb478bb059 Mon Sep 17 00:00:00 2001 From: SuperSoupr <26164930+SuperSoupr@users.noreply.github.com> Date: Tue, 30 Jun 2026 11:42:13 +0300 Subject: [PATCH 4/6] Implode only crafted ingots --- .../common/items/ItemInvertedIngot.java | 21 ++++++++----------- .../common/recipe/RecipeInvertedIngot.java | 14 +++++++++++++ .../assets/utilitiesinexcess/lang/en_US.lang | 3 +-- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java index 413f8b703..185ccf45f 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java @@ -41,14 +41,13 @@ public ItemInvertedIngot() { @Override public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, boolean p_77663_5_) { - if (stack.getItemDamage() != 0) return; + if (stack.getItemDamage() != 0 || !stack.hasTagCompound()) return; if (!(entityIn instanceof EntityPlayer player)) return; - if (player.capabilities.isCreativeMode) return; - if (!stack.hasTagCompound()) { - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setLong("CraftedAt", worldIn.getTotalWorldTime()); - stack.setTagCompound(nbt); + NBTTagCompound tag = stack.getTagCompound(); + if (tag.getBoolean("Crafted") && !tag.hasKey("CraftedAt")) { + tag.setLong("CraftedAt", worldIn.getTotalWorldTime()); + stack.setTagCompound(tag); } if (!(player.openContainer instanceof ContainerWorkbench) || checkImplosion(stack, worldIn)) { @@ -81,15 +80,13 @@ public String getUnlocalizedName(ItemStack stack) { public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean p_77624_4_) { if (stack.getItemDamage() == 0) { if (InversionConfig.invertedIngotsImplode) { - boolean hasTag = stack.hasTagCompound(); - if (player.capabilities.isCreativeMode && !hasTag) { + if (!stack.hasTagCompound()) { tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.c")); - tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.c2")); } else { tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.1")); - if (hasTag) { - double passed = player.worldObj.getTotalWorldTime() - stack.getTagCompound() - .getLong("CraftedAt"); + NBTTagCompound tag = stack.getTagCompound(); + if (tag.hasKey("CraftedAt")) { + double passed = player.worldObj.getTotalWorldTime() - tag.getLong("CraftedAt"); double timeLeft = (InversionConfig.invertedIngotImplosionTimer - passed) / 20D; tooltip.add( StatCollector.translateToLocalFormatted( diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java index 114d19265..5e9b19534 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/recipe/RecipeInvertedIngot.java @@ -3,8 +3,11 @@ import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import com.fouristhenumber.utilitiesinexcess.config.items.InversionConfig; + public class RecipeInvertedIngot extends ShapedRecipes { public RecipeInvertedIngot(int width, int height, ItemStack[] input, ItemStack output) { @@ -21,4 +24,15 @@ public boolean matches(InventoryCrafting inv, World world) { return super.matches(inv, world); } + + @Override + public ItemStack getRecipeOutput() { + ItemStack output = super.getRecipeOutput().copy(); + if (InversionConfig.invertedIngotsImplode) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setBoolean("Crafted", true); + output.setTagCompound(nbt); + } + return output; + } } diff --git a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang index 8e4f2f40b..eb24c580c 100644 --- a/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang +++ b/src/main/resources/assets/utilitiesinexcess/lang/en_US.lang @@ -110,8 +110,7 @@ item.inverted_ingot.desc.2=Will implode in %s seconds! item.inverted_ingot.desc.3=Will also implode if thrown or the crafting table is closed. item.inverted_ingot.desc.4=Does not stack. item.inverted_ingot.desc.5=Cannot be crafted outside of a vanilla crafting table. -item.inverted_ingot.desc.c=You are in creative. Will not implode... -item.inverted_ingot.desc.c2=For now +item.inverted_ingot.desc.c=Creatively spawned. Will not implode. nei.infopage.uie.inverted_ingot.1=Channeling a diamond into an Awakened Inversion Sigil allows you to invert iron into this strange and highly unstable substance. Many powerful tools and items can be made through inversion... nei.infopage.uie.inverted_ingot.2=The process of creating inverted ingots is quite dangerous. Firstly, they can only be created in vanilla crafting tables. Once crafted, you have a limited time to use them. From 4744545ecfc0f4df2e5ff4488e77e77caf5870a0 Mon Sep 17 00:00:00 2001 From: SuperSoupr <26164930+SuperSoupr@users.noreply.github.com> Date: Tue, 30 Jun 2026 11:46:31 +0300 Subject: [PATCH 5/6] oops --- .../utilitiesinexcess/common/items/ItemInvertedIngot.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java index 185ccf45f..49db8f301 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java @@ -93,7 +93,7 @@ public void addInformation(ItemStack stack, EntityPlayer player, List to "item.inverted_ingot.desc.2", formatNumber(Math.max(0, timeLeft)))); } else { - tooltip.add(StatCollector.translateToLocalFormatted("item.inverted_ingot.desc.2", 15)); + tooltip.add(StatCollector.translateToLocalFormatted("item.inverted_ingot.desc.2", InversionConfig.invertedIngotImplosionTimer / 20)); } tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.3")); tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.4")); From 49fad9f5424a11468bae51bad86f368339c35536 Mon Sep 17 00:00:00 2001 From: SuperSoupr <26164930+SuperSoupr@users.noreply.github.com> Date: Tue, 30 Jun 2026 15:07:53 +0300 Subject: [PATCH 6/6] move timestamping to checkImplosion --- .../common/items/ItemInvertedIngot.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java index 49db8f301..611c4578b 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInvertedIngot.java @@ -44,12 +44,6 @@ public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, if (stack.getItemDamage() != 0 || !stack.hasTagCompound()) return; if (!(entityIn instanceof EntityPlayer player)) return; - NBTTagCompound tag = stack.getTagCompound(); - if (tag.getBoolean("Crafted") && !tag.hasKey("CraftedAt")) { - tag.setLong("CraftedAt", worldIn.getTotalWorldTime()); - stack.setTagCompound(tag); - } - if (!(player.openContainer instanceof ContainerWorkbench) || checkImplosion(stack, worldIn)) { player.inventory.setInventorySlotContents(slot, null); player.closeScreen(); @@ -62,6 +56,11 @@ public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, public static boolean checkImplosion(ItemStack item, World world) { if (item.getItemDamage() == 0 && item.hasTagCompound()) { NBTTagCompound tag = item.getTagCompound(); + if (tag.getBoolean("Crafted") && !tag.hasKey("CraftedAt")) { + tag.setLong("CraftedAt", world.getTotalWorldTime()); + item.setTagCompound(tag); + } + long passed = world.getTotalWorldTime() - tag.getLong("CraftedAt"); if (passed > InversionConfig.invertedIngotImplosionTimer) { return (world.isRemote); @@ -93,7 +92,10 @@ public void addInformation(ItemStack stack, EntityPlayer player, List to "item.inverted_ingot.desc.2", formatNumber(Math.max(0, timeLeft)))); } else { - tooltip.add(StatCollector.translateToLocalFormatted("item.inverted_ingot.desc.2", InversionConfig.invertedIngotImplosionTimer / 20)); + tooltip.add( + StatCollector.translateToLocalFormatted( + "item.inverted_ingot.desc.2", + InversionConfig.invertedIngotImplosionTimer / 20)); } tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.3")); tooltip.add(StatCollector.translateToLocal("item.inverted_ingot.desc.4"));