From 80b3c95204304338fa2cbfe5a7f5afe5a6150618 Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 23 Aug 2026 17:33:30 +0300 Subject: [PATCH 1/7] add carrot --- .../resources/assets/gtceu/lang/en_ud.json | 7 ++ .../resources/assets/gtceu/lang/en_us.json | 7 ++ .../gtceu/models/item/entity_spoilable.json | 6 ++ .../models/item/magnetized_golden_carrot.json | 6 ++ .../assets/gtceu/models/item/spoilable_1.json | 6 ++ .../assets/gtceu/models/item/spoilable_2.json | 6 ++ .../assets/gtceu/models/item/spoilable_3.json | 6 ++ .../assets/gtceu/models/item/spoilable_4.json | 6 ++ .../assets/gtceu/models/item/spoilable_5.json | 6 ++ .../gregtechceu/gtceu/common/CommonProxy.java | 33 +++++---- .../gtceu/common/data/GTItems.java | 43 +++++++++++ .../gtceu/common/item/SpoilableItemStack.java | 1 + .../data/recipe/misc/MiscRecipeLoader.java | 5 ++ .../gtceu/textures/item/entity_spoilable.png | Bin 0 -> 1747 bytes .../item/magnetized_golden_carrot.png | Bin 0 -> 487 bytes .../gtceu/textures/item/spoilable_1.png | Bin 0 -> 1982 bytes .../gtceu/textures/item/spoilable_2.png | Bin 0 -> 1747 bytes .../gtceu/textures/item/spoilable_3.png | Bin 0 -> 2921 bytes .../gtceu/textures/item/spoilable_4.png | Bin 0 -> 1982 bytes .../gtceu/textures/item/spoilable_5.png | Bin 0 -> 1747 bytes .../common/item/SpoilableBehaviourTest.java | 70 +++++++++--------- 21 files changed, 159 insertions(+), 49 deletions(-) create mode 100644 src/generated/resources/assets/gtceu/models/item/entity_spoilable.json create mode 100644 src/generated/resources/assets/gtceu/models/item/magnetized_golden_carrot.json create mode 100644 src/generated/resources/assets/gtceu/models/item/spoilable_1.json create mode 100644 src/generated/resources/assets/gtceu/models/item/spoilable_2.json create mode 100644 src/generated/resources/assets/gtceu/models/item/spoilable_3.json create mode 100644 src/generated/resources/assets/gtceu/models/item/spoilable_4.json create mode 100644 src/generated/resources/assets/gtceu/models/item/spoilable_5.json create mode 100644 src/main/resources/assets/gtceu/textures/item/entity_spoilable.png create mode 100644 src/main/resources/assets/gtceu/textures/item/magnetized_golden_carrot.png create mode 100644 src/main/resources/assets/gtceu/textures/item/spoilable_1.png create mode 100644 src/main/resources/assets/gtceu/textures/item/spoilable_2.png create mode 100644 src/main/resources/assets/gtceu/textures/item/spoilable_3.png create mode 100644 src/main/resources/assets/gtceu/textures/item/spoilable_4.png create mode 100644 src/main/resources/assets/gtceu/textures/item/spoilable_5.png diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 370dabb5b6e..1d3a6c36799 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -4292,6 +4292,7 @@ "item.gtceu.engraved_crystal_chip": "dıɥƆ ןɐʇsʎɹƆ pǝʌɐɹbuƎ", "item.gtceu.engraved_crystal_chip.tooltip": "sʇınɔɹıƆ ɹoɟ pǝpǝǝNㄥ§", "item.gtceu.engraved_lapotron_crystal_chip": "dıɥƆ ןɐʇsʎɹƆ uoɹʇodɐꞀ pǝʌɐɹbuƎ", + "item.gtceu.entity_spoilable": "ǝןqɐןıodS ʎʇıʇuƎ", "item.gtceu.epoxy_circuit_board": "pɹɐoᗺ ʇınɔɹıƆ ʎxodƎ", "item.gtceu.epoxy_circuit_board.tooltip": "pɹɐoᗺ pǝɔuɐʌpⱯ uⱯㄥ§", "item.gtceu.epoxy_printed_circuit_board": "pɹɐoᗺ ʇınɔɹıƆ pǝʇuıɹԀ ʎxodƎ", @@ -4535,6 +4536,7 @@ "item.gtceu.machine_memory_card": "pɹɐƆ ʎɹoɯǝW ǝuıɥɔɐW", "item.gtceu.magenta_dye_spray_can": ")ɐʇuǝbɐW( uɐƆ ʎɐɹdS", "item.gtceu.magenta_glass_lens": ")ɐʇuǝbɐW( suǝꞀ ssɐן⅁", + "item.gtceu.magnetized_golden_carrot": "ʇoɹɹɐƆ uǝpןo⅁ ɔıʇǝubɐW", "item.gtceu.maintenance_detector_cover": "ɹoʇɔǝʇǝᗡ ǝɔuɐuǝʇuıɐW", "item.gtceu.mask_filter": "ɹǝʇןıℲ ʞsɐW sɐ⅁", "item.gtceu.matchbox": "xoqɥɔʇɐW", @@ -4847,6 +4849,11 @@ "item.gtceu.solar_panel.tooltip.0": "˙noʎ ɥʇıʍ ǝq unS ǝɥʇ ʎɐWㄥ§", "item.gtceu.solar_panel.tooltip.1": "˙ㄥ§ɹǝʌoƆɟ§ sɐ ㄥ§unSǝ§ ǝɥʇ ɯoɹɟ ㄥ§ʎbɹǝuƎɟ§ sǝɔnpoɹԀ", "item.gtceu.solvent_spray_can": ")ʇuǝʌןoS( uɐƆ ʎɐɹdS", + "item.gtceu.spoilable_1": "Ɩ ǝןqɐןıodS", + "item.gtceu.spoilable_2": "ᄅ ǝןqɐןıodS", + "item.gtceu.spoilable_3": "Ɛ ǝןqɐןıodS", + "item.gtceu.spoilable_4": "ㄣ ǝןqɐןıodS", + "item.gtceu.spoilable_5": "ϛ ǝןqɐןıodS", "item.gtceu.stainless_steel_fluid_cell": "ןןǝƆ ןǝǝʇS ssǝןuıɐʇS %s", "item.gtceu.steel_fluid_cell": "ןןǝƆ ןǝǝʇS %s", "item.gtceu.steel_minecart_wheels": "sןǝǝɥM ʇɹɐɔǝuıW ןǝǝʇS", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 20a7a484b07..8d63daa5068 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -4292,6 +4292,7 @@ "item.gtceu.engraved_crystal_chip": "Engraved Crystal Chip", "item.gtceu.engraved_crystal_chip.tooltip": "§7Needed for Circuits", "item.gtceu.engraved_lapotron_crystal_chip": "Engraved Lapotron Crystal Chip", + "item.gtceu.entity_spoilable": "Entity Spoilable", "item.gtceu.epoxy_circuit_board": "Epoxy Circuit Board", "item.gtceu.epoxy_circuit_board.tooltip": "§7An Advanced Board", "item.gtceu.epoxy_printed_circuit_board": "Epoxy Printed Circuit Board", @@ -4535,6 +4536,7 @@ "item.gtceu.machine_memory_card": "Machine Memory Card", "item.gtceu.magenta_dye_spray_can": "Spray Can (Magenta)", "item.gtceu.magenta_glass_lens": "Glass Lens (Magenta)", + "item.gtceu.magnetized_golden_carrot": "Magnetic Golden Carrot", "item.gtceu.maintenance_detector_cover": "Maintenance Detector", "item.gtceu.mask_filter": "Gas Mask Filter", "item.gtceu.matchbox": "Matchbox", @@ -4847,6 +4849,11 @@ "item.gtceu.solar_panel.tooltip.0": "§7May the Sun be with you.", "item.gtceu.solar_panel.tooltip.1": "Produces §fEnergy§7 from the §eSun§7 as §fCover§7.", "item.gtceu.solvent_spray_can": "Spray Can (Solvent)", + "item.gtceu.spoilable_1": "Spoilable 1", + "item.gtceu.spoilable_2": "Spoilable 2", + "item.gtceu.spoilable_3": "Spoilable 3", + "item.gtceu.spoilable_4": "Spoilable 4", + "item.gtceu.spoilable_5": "Spoilable 5", "item.gtceu.stainless_steel_fluid_cell": "%s Stainless Steel Cell", "item.gtceu.steel_fluid_cell": "%s Steel Cell", "item.gtceu.steel_minecart_wheels": "Steel Minecart Wheels", diff --git a/src/generated/resources/assets/gtceu/models/item/entity_spoilable.json b/src/generated/resources/assets/gtceu/models/item/entity_spoilable.json new file mode 100644 index 00000000000..c5904cfd4d0 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/entity_spoilable.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtceu:item/entity_spoilable" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/magnetized_golden_carrot.json b/src/generated/resources/assets/gtceu/models/item/magnetized_golden_carrot.json new file mode 100644 index 00000000000..684cca68baa --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/magnetized_golden_carrot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtceu:item/magnetized_golden_carrot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/spoilable_1.json b/src/generated/resources/assets/gtceu/models/item/spoilable_1.json new file mode 100644 index 00000000000..6fc43a402ae --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/spoilable_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtceu:item/spoilable_1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/spoilable_2.json b/src/generated/resources/assets/gtceu/models/item/spoilable_2.json new file mode 100644 index 00000000000..e9f5c78795e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/spoilable_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtceu:item/spoilable_2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/spoilable_3.json b/src/generated/resources/assets/gtceu/models/item/spoilable_3.json new file mode 100644 index 00000000000..6c5707ebba4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/spoilable_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtceu:item/spoilable_3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/spoilable_4.json b/src/generated/resources/assets/gtceu/models/item/spoilable_4.json new file mode 100644 index 00000000000..8bfbb40c5a7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/spoilable_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtceu:item/spoilable_4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/spoilable_5.json b/src/generated/resources/assets/gtceu/models/item/spoilable_5.json new file mode 100644 index 00000000000..2ca3ab56947 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/spoilable_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtceu:item/spoilable_5" + } +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 0da1c2c8585..c43e2208c39 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -112,7 +112,6 @@ public CommonProxy() { GTCommandArguments.init(eventBus); GTMobEffects.init(eventBus); GTParticleTypes.init(eventBus); - SpoilableBehavior.init(eventBus); eventBus.addListener(AlloyBlastPropertyAddition::addAlloyBlastProperties); } @@ -173,6 +172,7 @@ public static void init() { CustomBlockRotations.init(); SyncedKeyMappings.init(); MachineOwner.init(); + SpoilableBehavior.init(modBus); FusionReactorMachine.registerFusionTier(GTValues.LuV, " (MKI)"); FusionReactorMachine.registerFusionTier(GTValues.ZPM, " (MKII)"); @@ -235,35 +235,40 @@ public void addSpoilTransferModifier(ModifyMachineEvent event) { @SubscribeEvent public void registerDevSpoilables(RegisterSpoilablesEvent event) { - if (GTCEu.isDev()) { // for testing purposes + if (GTCEu.isDev()) { event.getBuilder() .ticks(10) - .result(Items.DIRT) + .result(GTItems.SPOILABLE_2) .build() - .attachTo(Items.JIGSAW); + .attachTo(GTItems.SPOILABLE_1); event.getBuilder() - .ticks(10) - .result(Items.STRUCTURE_BLOCK) + .ticks(40) + .result(GTItems.SPOILABLE_3) .build() - .attachTo(Items.APPLE); + .attachTo(GTItems.SPOILABLE_2); event.getBuilder() - .ticks(40) - .result(Items.STRUCTURE_VOID) + .ticks(10) + .result(GTItems.SPOILABLE_4) .build() - .attachTo(Items.STRUCTURE_BLOCK); + .attachTo(GTItems.SPOILABLE_3); event.getBuilder() .ticks(10) - .result(Items.JIGSAW) + .result(GTItems.SPOILABLE_5) .build() - .attachTo(Items.STRUCTURE_VOID); + .attachTo(GTItems.SPOILABLE_4); event.getBuilder() .ticks(10) .result(Items.DRAGON_EGG) .result(EntityType.PIG) - .multiplyResult(3) + .multiplyLastResult(3) .build() - .attachTo(Items.EGG); + .attachTo(GTItems.ENTITY_SPOILABLE); } + event.getBuilder() + .ticks(20 * 60 * 30) + .result(Items.GOLDEN_CARROT) + .build() + .attachTo(GTItems.MAGNETIZED_CARROT); } @SubscribeEvent diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java index 3aad8283be2..a649b87c395 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java @@ -51,6 +51,7 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.food.Foods; import net.minecraft.world.item.*; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.LayeredCauldronBlock; @@ -2565,6 +2566,48 @@ public static ItemEntry createFluidCell(Material mat, int capacit .onRegister(attach(new GuiModuleBehaviour())) .register(); + public static ItemEntry SPOILABLE_1; + public static ItemEntry SPOILABLE_2; + public static ItemEntry SPOILABLE_3; + public static ItemEntry SPOILABLE_4; + public static ItemEntry SPOILABLE_5; + public static ItemEntry ENTITY_SPOILABLE; + + static { + if (GTCEu.isDev()) { + SPOILABLE_1 = REGISTRATE.item("spoilable_1", Item::new) + .lang("Spoilable 1") + .register(); + SPOILABLE_2 = REGISTRATE.item("spoilable_2", Item::new) + .lang("Spoilable 2") + .register(); + SPOILABLE_3 = REGISTRATE.item("spoilable_3", Item::new) + .lang("Spoilable 3") + .register(); + SPOILABLE_4 = REGISTRATE.item("spoilable_4", Item::new) + .lang("Spoilable 4") + .register(); + SPOILABLE_5 = REGISTRATE.item("spoilable_5", Item::new) + .lang("Spoilable 5") + .register(); + ENTITY_SPOILABLE = REGISTRATE.item("entity_spoilable", Item::new) + .lang("Entity Spoilable") + .register(); + } + } + + public static ItemEntry MAGNETIZED_CARROT = REGISTRATE + .item("magnetized_golden_carrot", ComponentItem::create) + .lang("Magnetic Golden Carrot") + .onRegister(attach(new FoodStats(new FoodProperties.Builder() + .nutrition(Foods.GOLDEN_CARROT.getNutrition()) + .saturationMod(Foods.GOLDEN_CARROT.getSaturationModifier()) + .effect(() -> new MobEffectInstance(MobEffects.DIG_SPEED, 20 * 60 * 10, 1), 1) + .fast() + .alwaysEat() + .build()))) + .register(); + public static void init() { GTMaterialItems.generateMaterialItems(); GTMaterialItems.generateTools(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java b/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java index 4ab49c4fbb7..9cade9828ad 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java @@ -287,6 +287,7 @@ public void prepareForComparisonWith(INBTSerializable other) { this.setCreationTick(average); spoilable.setCreationTick(average); } + spoilable.setSpoilContext(this.spoilContext); } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java index 26f3effe096..9b185515f5e 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java @@ -631,5 +631,10 @@ public static void init(Consumer provider) { new MaterialEntry(gem, Lazurite)); VanillaRecipeHelper.addShapelessRecipe(provider, "sodalite_to_dye", new ItemStack(Items.BLUE_DYE), new MaterialEntry(gem, Sodalite)); + + POLARIZER_RECIPES.recipeBuilder("magnetize_golden_carrot") + .inputItems(Items.GOLDEN_CARROT) + .outputItems(MAGNETIZED_CARROT) + .duration(100).EUt(8).save(provider); } } diff --git a/src/main/resources/assets/gtceu/textures/item/entity_spoilable.png b/src/main/resources/assets/gtceu/textures/item/entity_spoilable.png new file mode 100644 index 0000000000000000000000000000000000000000..8b532f202344bb6ef854393ab041291b223a6f96 GIT binary patch literal 1747 zcmb7FU1%Id9N%(!*qET=i?t7~8u|?=Zd=P^8pbt_+6cImAEPWH=?0tEa^uvRlot^p3 z@BjOM%>T9)7fw%2JUYQ~+*GwvUSjVDv**4%8y~yAkJ#&QRCzYxxceW@o?3X}Z z{IRos=+aJdd<;&?C?zF90SXj>A}U55DwbZfG~+2yv;gQsYt;3<^>L^wDzMJdt7#U5 zH$hp!xF|(;1iRSsXdEEst{?- z&f5kw4MS8U*ppkUS=BH}QHV*kToPDlB;R+LGoa`=Zc)SzGDWALsiLC+#0E_%C^{qx z^oHll6t}Yi$jkrQZ*>59#%9AFwk{($o5R^v+Iaj z8Ss*k5LCF zA)}62f8PD^3!U}$*Q@2ZdT|^7y}v)3d*Z^DaBXsOat7>vf91t$d*aduAFEfnd_I5i z$n~EddQY7`zJ+e=ZvXzt-rk!tKksZ_`{vK*Uq1K#t5-iil3#vz50gu|%db>kdwgYz z|9Wjx;`8V45publy{FoLO;w)TKl;%{NjrJt%9rgk@4S>#c6N@%hkp2F`{=h-{lXhx b{Wi&+d*Dg?GWqUs_P0}=UnqZg>ip(E2=Xn1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtceu/textures/item/magnetized_golden_carrot.png b/src/main/resources/assets/gtceu/textures/item/magnetized_golden_carrot.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb5d2aeeddefda534f0264f83a3edb1ae2e675a GIT binary patch literal 487 zcmVH>U-6a6pyfCUK+jwy@{?U1 z327UPaU~#2kt-qAD?%0R|2U_u-RkALMK$8-k|000006 dNkl(Xde`cAVDfvEJ&#!`XE9JBEF~(MSKzB?0tEy>4)ONe$D*m z|Ns4e^P8E?h0@81u}8-^j+-dV=gaJUe{$cGV$a8}?_&14H<*7m;<)?vC-(@q{nkN_ zOPzNsi}7OdX_NSkG`4+`nRoBZ3zkT|dz`J%%;S{l55Z|3$22QQP(lDoK+-BmGF9DFw4+crA?!knzU?||!%!JWQbm$X zMKz&u1C$xY#xcGl*e0gqhYifibsM-!#lWiy{6IuA=hyv^C1&j8;r2os$c6$`q9P!xiVX}&R)D6^ zjBObbg}TxopZ7^KF+eiDyB2Jpuo!>SGi*nq4wKAMZ57D6f`H}NghexmPGsa@r1zse z6S{0U;`(sZgq5AJl2rteMu4hn7#NO%0pkLJf;6328H^Ny6VrEmWX`)0o8h(IGCD<9 zdS7*y?^wsgBv}$!fh1m_w$N*K_tN8TGWW)}YLo@NjZ3=OBj1TzIHa>xrrjMpDBg;C zgja7*973pDmaPL~VFOqhMFy4vnQn?AWh50*2|4}3hlw-Kq6*uR6vafS@7aG(yeA2% zVXsQr-YN?Jy_CE2WS8SjrTlaG{a>Ys$%fkXmUy%6I(To5By{xrf3cUH)g@26mS`|XiSKf;$)ykAXD*uq>XfA09w GnZE$IK6K&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtceu/textures/item/spoilable_2.png b/src/main/resources/assets/gtceu/textures/item/spoilable_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b532f202344bb6ef854393ab041291b223a6f96 GIT binary patch literal 1747 zcmb7FU1%Id9N%(!*qET=i?t7~8u|?=Zd=P^8pbt_+6cImAEPWH=?0tEa^uvRlot^p3 z@BjOM%>T9)7fw%2JUYQ~+*GwvUSjVDv**4%8y~yAkJ#&QRCzYxxceW@o?3X}Z z{IRos=+aJdd<;&?C?zF90SXj>A}U55DwbZfG~+2yv;gQsYt;3<^>L^wDzMJdt7#U5 zH$hp!xF|(;1iRSsXdEEst{?- z&f5kw4MS8U*ppkUS=BH}QHV*kToPDlB;R+LGoa`=Zc)SzGDWALsiLC+#0E_%C^{qx z^oHll6t}Yi$jkrQZ*>59#%9AFwk{($o5R^v+Iaj z8Ss*k5LCF zA)}62f8PD^3!U}$*Q@2ZdT|^7y}v)3d*Z^DaBXsOat7>vf91t$d*aduAFEfnd_I5i z$n~EddQY7`zJ+e=ZvXzt-rk!tKksZ_`{vK*Uq1K#t5-iil3#vz50gu|%db>kdwgYz z|9Wjx;`8V45publy{FoLO;w)TKl;%{NjrJt%9rgk@4S>#c6N@%hkp2F`{=h-{lXhx b{Wi&+d*Dg?GWqUs_P0}=UnqZg>ip(E2=Xn1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtceu/textures/item/spoilable_3.png b/src/main/resources/assets/gtceu/textures/item/spoilable_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ad997f1a0ab0c20e0780ea30c6286398fbc2c9d0 GIT binary patch literal 2921 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 T+mJCa00000NkvXXu0mjfS7e7x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtceu/textures/item/spoilable_4.png b/src/main/resources/assets/gtceu/textures/item/spoilable_4.png new file mode 100644 index 0000000000000000000000000000000000000000..defeff13d806c9587b86a6fa43849d304b280e3b GIT binary patch literal 1982 zcmb_dU1%Id9N!RnXiPwD#p;X82C*NR+nN2k-8E;L-lfffcZTahqxg{7+1a}#ce|V2 zz1$@}C=~*E2%;iF(5I>(Xde`cAVDfvEJ&#!`XE9JBEF~(MSKzB?0tEy>4)ONe$D*m z|Ns4e^P8E?h0@81u}8-^j+-dV=gaJUe{$cGV$a8}?_&14H<*7m;<)?vC-(@q{nkN_ zOPzNsi}7OdX_NSkG`4+`nRoBZ3zkT|dz`J%%;S{l55Z|3$22QQP(lDoK+-BmGF9DFw4+crA?!knzU?||!%!JWQbm$X zMKz&u1C$xY#xcGl*e0gqhYifibsM-!#lWiy{6IuA=hyv^C1&j8;r2os$c6$`q9P!xiVX}&R)D6^ zjBObbg}TxopZ7^KF+eiDyB2Jpuo!>SGi*nq4wKAMZ57D6f`H}NghexmPGsa@r1zse z6S{0U;`(sZgq5AJl2rteMu4hn7#NO%0pkLJf;6328H^Ny6VrEmWX`)0o8h(IGCD<9 zdS7*y?^wsgBv}$!fh1m_w$N*K_tN8TGWW)}YLo@NjZ3=OBj1TzIHa>xrrjMpDBg;C zgja7*973pDmaPL~VFOqhMFy4vnQn?AWh50*2|4}3hlw-Kq6*uR6vafS@7aG(yeA2% zVXsQr-YN?Jy_CE2WS8SjrTlaG{a>Ys$%fkXmUy%6I(To5By{xrf3cUH)g@26mS`|XiSKf;$)ykAXD*uq>XfA09w GnZE$IK6K&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtceu/textures/item/spoilable_5.png b/src/main/resources/assets/gtceu/textures/item/spoilable_5.png new file mode 100644 index 0000000000000000000000000000000000000000..8b532f202344bb6ef854393ab041291b223a6f96 GIT binary patch literal 1747 zcmb7FU1%Id9N%(!*qET=i?t7~8u|?=Zd=P^8pbt_+6cImAEPWH=?0tEa^uvRlot^p3 z@BjOM%>T9)7fw%2JUYQ~+*GwvUSjVDv**4%8y~yAkJ#&QRCzYxxceW@o?3X}Z z{IRos=+aJdd<;&?C?zF90SXj>A}U55DwbZfG~+2yv;gQsYt;3<^>L^wDzMJdt7#U5 zH$hp!xF|(;1iRSsXdEEst{?- z&f5kw4MS8U*ppkUS=BH}QHV*kToPDlB;R+LGoa`=Zc)SzGDWALsiLC+#0E_%C^{qx z^oHll6t}Yi$jkrQZ*>59#%9AFwk{($o5R^v+Iaj z8Ss*k5LCF zA)}62f8PD^3!U}$*Q@2ZdT|^7y}v)3d*Z^DaBXsOat7>vf91t$d*aduAFEfnd_I5i z$n~EddQY7`zJ+e=ZvXzt-rk!tKksZ_`{vK*Uq1K#t5-iil3#vz50gu|%db>kdwgYz z|9Wjx;`8V45publy{FoLO;w)TKl;%{NjrJt%9rgk@4S>#c6N@%hkp2F`{=h-{lXhx b{Wi&+d*Dg?GWqUs_P0}=UnqZg>ip(E2=Xn1 literal 0 HcmV?d00001 diff --git a/src/test/java/com/gregtechceu/gtceu/common/item/SpoilableBehaviourTest.java b/src/test/java/com/gregtechceu/gtceu/common/item/SpoilableBehaviourTest.java index 28e9ea1e408..250a04d159a 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/item/SpoilableBehaviourTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/item/SpoilableBehaviourTest.java @@ -53,15 +53,15 @@ public static void prepare(Level ignoredLevel) { LCR_RECIPE_TYPE.getAdditionHandler().beginStaging(); LCR_RECIPE_TYPE.getAdditionHandler().addStaging(LCR_RECIPE_TYPE .recipeBuilder(GTCEu.id("test_spoilage_transfers")) - .inputItems(new ItemStack(Items.JIGSAW)) - .outputItems(new ItemStack(Items.STRUCTURE_BLOCK)) + .inputItems(new ItemStack(GTItems.SPOILABLE_4)) + .outputItems(new ItemStack(GTItems.SPOILABLE_2)) .EUt(GTValues.V[GTValues.HV]) .duration(20) .buildRawRecipe()); LCR_RECIPE_TYPE.getAdditionHandler().addStaging(LCR_RECIPE_TYPE .recipeBuilder(GTCEu.id("test_spoilage_doesnt_transfer")) - .inputItems(new ItemStack(Items.APPLE)) - .outputItems(new ItemStack(Items.STRUCTURE_BLOCK)) + .inputItems(new ItemStack(GTItems.SPOILABLE_1.get())) + .outputItems(new ItemStack(GTItems.SPOILABLE_2)) .EUt(GTValues.V[GTValues.HV]) .duration(20) .keepSpoilingProgress(false) @@ -89,13 +89,13 @@ public static void itemSpoilsInChest(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); helper.setBlock(1, 1, 1, Blocks.CHEST); IItemHandler itemHandler = TestUtils.getItemHandler(helper, new BlockPos(1, 1, 1)); - itemHandler.insertItem(0, Items.JIGSAW.getDefaultInstance().copyWithCount(23), false); + itemHandler.insertItem(0, GTItems.SPOILABLE_4.get().getDefaultInstance().copyWithCount(23), false); TestUtils.getItemHandler(helper, new BlockPos(1, 1, 1)); helper.runAtTickTime(9, () -> { ItemStack stack = TestUtils.getItemHandler(helper, new BlockPos(1, 1, 1)).getStackInSlot(0); helper.assertTrue(TestUtils.isItemStackEqual( - Items.JIGSAW.getDefaultInstance().copyWithCount(23), - stack), "jigsaw spoiled 1 tick earlier"); + GTItems.SPOILABLE_4.get().getDefaultInstance().copyWithCount(23), + stack), "item spoiled 1 tick earlier"); ISpoilableItem spoilable = GTCapabilityHelper.getSpoilable(stack); TestUtils.assertNotNull(helper, spoilable, "spoilable was null when shouldn't have"); helper.assertTrue(spoilable.shouldSpoil(), "shouldSpoil returned false on spoilable item"); @@ -105,9 +105,9 @@ public static void itemSpoilsInChest(GameTestHelper helper) { "spoilable didn't return correct total tick amount"); }); helper.runAtTickTime(10, () -> helper.assertTrue(TestUtils.isItemStackEqual( - Items.DIRT.getDefaultInstance().copyWithCount(23), + GTItems.SPOILABLE_5.get().getDefaultInstance().copyWithCount(23), TestUtils.getItemHandler(helper, new BlockPos(1, 1, 1)).getStackInSlot(0)), - "jigsaw didn't spoil when should have")); + "item didn't spoil when should have")); } @GameTest(template = "empty_5x5", batch = "spoilageTests") @@ -115,7 +115,7 @@ public static void itemSpoilsRecursively(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); helper.setBlock(1, 1, 1, Blocks.CHEST); IItemHandler itemHandler = TestUtils.getItemHandler(helper, new BlockPos(1, 1, 1)); - ItemStack in = Items.APPLE.getDefaultInstance().copyWithCount(41); + ItemStack in = GTItems.SPOILABLE_1.get().getDefaultInstance().copyWithCount(41); SpoilUtils.update(in, new SpoilContext( helper.getLevel(), helper.absolutePos(new BlockPos(1, 1, 1))) @@ -123,9 +123,9 @@ public static void itemSpoilsRecursively(GameTestHelper helper) { .withSlot(0)); itemHandler.insertItem(0, in, false); helper.runAtTickTime(70, () -> helper.assertTrue(TestUtils.isItemStackEqual( - Items.DIRT.getDefaultInstance().copyWithCount(41), + GTItems.SPOILABLE_5.get().getDefaultInstance().copyWithCount(41), itemHandler.getStackInSlot(0)), - "apple didn't spoil recursively (apple -> structure block -> structure void -> jigsaw -> dirt), got " + + "item didn't spoil recursively (expected spoilable 1 -> 2 -> ... -> 5), got " + itemHandler.getStackInSlot(0) + " instead")); } @@ -133,12 +133,12 @@ public static void itemSpoilsRecursively(GameTestHelper helper) { public static void itemSpoilsInCrate(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); CrateMachine crate = (CrateMachine) TestUtils.setMachine(helper, new BlockPos(1, 1, 1), GTMachines.STEEL_CRATE); - crate.inventory.insertItem(0, Items.JIGSAW.getDefaultInstance().copyWithCount(23), false); + crate.inventory.insertItem(0, GTItems.SPOILABLE_4.get().getDefaultInstance().copyWithCount(23), false); helper.runAtTickTime(9, () -> { ItemStack stack = crate.inventory.getStackInSlot(0); helper.assertTrue(TestUtils.isItemStackEqual( - Items.JIGSAW.getDefaultInstance().copyWithCount(23), - stack), "jigsaw spoiled 1 tick earlier"); + GTItems.SPOILABLE_4.get().getDefaultInstance().copyWithCount(23), + stack), "item spoiled 1 tick earlier"); ISpoilableItem spoilable = GTCapabilityHelper.getSpoilable(stack); TestUtils.assertNotNull(helper, spoilable, "spoilable was null when shouldn't have"); helper.assertTrue(spoilable.shouldSpoil(), "shouldSpoil returned false on spoilable item"); @@ -148,15 +148,15 @@ public static void itemSpoilsInCrate(GameTestHelper helper) { "spoilable didn't return correct total tick amount"); }); helper.runAtTickTime(10, () -> helper.assertTrue(TestUtils.isItemStackEqual( - Items.DIRT.getDefaultInstance().copyWithCount(23), - crate.inventory.getStackInSlot(0)), "jigsaw didn't spoil when should have")); + GTItems.SPOILABLE_5.get().getDefaultInstance().copyWithCount(23), + crate.inventory.getStackInSlot(0)), "item didn't spoil when should have")); } @GameTest(template = "empty", batch = "spoilageTests") public static void spoilageFreeze(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); CrateMachine crate = (CrateMachine) TestUtils.setMachine(helper, new BlockPos(1, 1, 1), GTMachines.STEEL_CRATE); - crate.inventory.insertItem(0, Items.JIGSAW.getDefaultInstance().copyWithCount(23), false); + crate.inventory.insertItem(0, GTItems.SPOILABLE_4.get().getDefaultInstance().copyWithCount(23), false); helper.runAtTickTime(4, () -> { ItemStack stack = crate.inventory.getStackInSlot(0); ISpoilableItem spoilable = GTCapabilityHelper.getSpoilable(stack); @@ -185,7 +185,7 @@ public static void spoilageFreeze(GameTestHelper helper) { public static void entitySpoilage(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); CrateMachine crate = (CrateMachine) TestUtils.setMachine(helper, new BlockPos(1, 1, 1), GTMachines.STEEL_CRATE); - crate.inventory.insertItem(0, Items.EGG.getDefaultInstance().copyWithCount(2), false); + crate.inventory.insertItem(0, GTItems.ENTITY_SPOILABLE.get().getDefaultInstance().copyWithCount(2), false); helper.runAtTickTime(10, () -> { TestUtils.assertEqual(helper, crate.inventory.getStackInSlot(0), Items.DRAGON_EGG.getDefaultInstance().copyWithCount(6)); @@ -199,7 +199,7 @@ public static void entitySpoilage(GameTestHelper helper) { public static void spoilageTransfersInRecipe(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); BusHolder busHolder = getBussesAndForm(helper); - ItemStack input = new ItemStack(Items.JIGSAW); + ItemStack input = new ItemStack(GTItems.SPOILABLE_4); SpoilUtils.update(input, new SpoilContext()); Objects.requireNonNull(GTCapabilityHelper.getSpoilable(input)).setTicksUntilSpoiled(8); busHolder.inputBus1.getInventory().setStackInSlot(0, input); @@ -207,9 +207,9 @@ public static void spoilageTransfersInRecipe(GameTestHelper helper) { ItemStack stack = busHolder.outputBus1.getInventory().getStackInSlot(0); helper.assertTrue(TestUtils.isItemStackEqual( stack, - new ItemStack(Items.STRUCTURE_BLOCK)), + new ItemStack(GTItems.SPOILABLE_2)), "incorrect recipe output (%s != %s)".formatted(stack.toString(), - new ItemStack(Items.STRUCTURE_BLOCK).toString())); + new ItemStack(GTItems.SPOILABLE_2).toString())); ISpoilableItem spoilable = GTCapabilityHelper.getSpoilable(stack); TestUtils.assertNotNull(helper, spoilable, "recipe output was not spoilable"); TestUtils.assertBetween(helper, spoilable.getTicksUntilSpoiled(), 26, 30, @@ -221,7 +221,7 @@ public static void spoilageTransfersInRecipe(GameTestHelper helper) { public static void spoilageDoesntTransferInRecipe(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); BusHolder busHolder = getBussesAndForm(helper); - ItemStack input = new ItemStack(Items.APPLE); + ItemStack input = new ItemStack(GTItems.SPOILABLE_1.get()); SpoilUtils.update(input, new SpoilContext()); Objects.requireNonNull(GTCapabilityHelper.getSpoilable(input)).setTicksUntilSpoiled(8); busHolder.inputBus1.getInventory().setStackInSlot(0, input); @@ -229,9 +229,9 @@ public static void spoilageDoesntTransferInRecipe(GameTestHelper helper) { ItemStack stack = busHolder.outputBus1.getInventory().getStackInSlot(0); helper.assertTrue(TestUtils.isItemStackEqual( stack, - new ItemStack(Items.STRUCTURE_BLOCK)), + new ItemStack(GTItems.SPOILABLE_2)), "incorrect recipe output (%s != %s)".formatted(stack.toString(), - new ItemStack(Items.STRUCTURE_BLOCK).toString())); + new ItemStack(GTItems.SPOILABLE_2).toString())); ISpoilableItem spoilable = GTCapabilityHelper.getSpoilable(stack); TestUtils.assertNotNull(helper, spoilable, "recipe output was not spoilable"); TestUtils.assertEqual(helper, spoilable.getTicksUntilSpoiled(), 40, @@ -242,23 +242,23 @@ public static void spoilageDoesntTransferInRecipe(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "spoilageTests") public static void droppedItemSpoils(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); - ItemEntity item = helper.spawnItem(Items.JIGSAW, new BlockPos(1, 1, 1)); + ItemEntity item = helper.spawnItem(GTItems.SPOILABLE_4.asItem(), new BlockPos(1, 1, 1)); helper.runAtTickTime(10, () -> helper.assertTrue(TestUtils.isItemStackEqual( item.getItem(), - Items.DIRT.getDefaultInstance()), "item didn't spoil when dropped")); + GTItems.SPOILABLE_5.get().getDefaultInstance()), "item didn't spoil when dropped")); } @GameTest(template = "empty_5x5", batch = "spoilageTests") public static void itemSpoilsInInventory(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); Player player = helper.makeMockPlayer(); - player.getInventory().setItem(0, Items.JIGSAW.getDefaultInstance()); + player.getInventory().setItem(0, GTItems.SPOILABLE_4.get().getDefaultInstance()); player.tick(); helper.runAtTickTime(10, () -> helper.assertTrue(TestUtils.isItemStackEqual( player.getInventory().getItem(0), - Items.DIRT.getDefaultInstance()), + GTItems.SPOILABLE_5.get().getDefaultInstance()), "item didn't spoil in a player inventory (%s != %s)".formatted(player.getInventory().getItem(0), - Items.DIRT.getDefaultInstance()))); + GTItems.SPOILABLE_5.get().getDefaultInstance()))); } @GameTest(template = "empty_5x5", batch = "spoilageTests") @@ -270,16 +270,16 @@ public static void spoilableFiltering(GameTestHelper helper) { GTMachines.STEEL_CRATE); ConveyorCover cover = (ConveyorCover) TestUtils.placeCover(helper, crate1, GTItems.CONVEYOR_MODULE_HV.asStack(), Direction.UP); - ItemStack filter = SimpleItemFilter.forItems(true, Items.STRUCTURE_BLOCK.getDefaultInstance()) + ItemStack filter = SimpleItemFilter.forItems(true, GTItems.SPOILABLE_2.get().getDefaultInstance()) .getFilterItemStack(); cover.setWorkingEnabled(false); cover.getFilterHandler().setFilterItem(filter); - crate1.inventory.setStackInSlot(0, Items.STRUCTURE_BLOCK.getDefaultInstance()); + crate1.inventory.setStackInSlot(0, GTItems.SPOILABLE_2.get().getDefaultInstance()); helper.runAtTickTime(10, () -> cover.setWorkingEnabled(true)); helper.runAtTickTime(20, () -> { ItemStack stack = crate2.inventory.getStackInSlot(0); ISpoilableItem spoilable = GTCapabilityHelper.getSpoilable(stack); - helper.assertTrue(TestUtils.isItemStackEqual(stack, Items.STRUCTURE_BLOCK.getDefaultInstance()), + helper.assertTrue(TestUtils.isItemStackEqual(stack, GTItems.SPOILABLE_2.get().getDefaultInstance()), "wrong item"); TestUtils.assertNotNull(helper, spoilable, "spoilable was null"); TestUtils.assertEqual(helper, 20, spoilable.getTicksUntilSpoiled(), "wrong ticks until spoiled"); @@ -289,8 +289,8 @@ public static void spoilableFiltering(GameTestHelper helper) { @GameTest(template = "empty_5x5", batch = "spoilageTests") public static void spoilableMerging(GameTestHelper helper) { TestUtils.succeedAfterTest(helper); - ItemStack stack1 = Items.JIGSAW.getDefaultInstance().copyWithCount(9); - ItemStack stack2 = Items.JIGSAW.getDefaultInstance().copyWithCount(5); + ItemStack stack1 = GTItems.SPOILABLE_4.get().getDefaultInstance().copyWithCount(9); + ItemStack stack2 = GTItems.SPOILABLE_4.get().getDefaultInstance().copyWithCount(5); SpoilUtils.update(stack1, new SpoilContext()); SpoilUtils.update(stack2, new SpoilContext()); ISpoilableItem spoilable1 = GTCapabilityHelper.getSpoilable(stack1); From 1040ad694fe8bb930b71a87d032adc7131aaa422 Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 23 Aug 2026 17:39:19 +0300 Subject: [PATCH 2/7] oops --- src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index c43e2208c39..b38b02d10ac 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -260,7 +260,7 @@ public void registerDevSpoilables(RegisterSpoilablesEvent event) { .ticks(10) .result(Items.DRAGON_EGG) .result(EntityType.PIG) - .multiplyLastResult(3) + .multiplyResult(3) .build() .attachTo(GTItems.ENTITY_SPOILABLE); } From be9b03603c08813ab4a8931b7a855f17bc0eacfd Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 23 Aug 2026 18:12:20 +0300 Subject: [PATCH 3/7] remove unused thingy --- .../gtceu/common/item/SpoilableItemStack.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java b/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java index 9cade9828ad..c1f41d91fb8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java @@ -51,14 +51,7 @@ public abstract class SpoilableItemStack implements ISpoilableItem, IAddInformat public static final String SPOIL_CONTEXT_KEY = "spoilContext"; public static final String FROZEN_TICKS_KEY = "frozenRemainingTicks"; public static final String CREATION_TICK_KEY = "creationTick"; - /** - * Consider frozen and non-frozen spoilables equal. This is done to allow filtering by ticks remaining until - * spoiled.
- * If you want the player to have frozen stacks in their inventory, set this to {@code false} to prevent players - * from - * entirely bypassing the spoilage system. - */ - public static boolean FROZEN_EQUALITY = true; + @Getter private final ItemStack stack; From dbc8d8f721c3b263a0deba0cc271c17fbbd4e73b Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 23 Aug 2026 18:13:24 +0300 Subject: [PATCH 4/7] remove unused thingy #2 --- .../com/gregtechceu/gtceu/common/item/SpoilableItemStack.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java b/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java index c1f41d91fb8..cd8f9238a35 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/SpoilableItemStack.java @@ -256,8 +256,7 @@ public void deserializeNBT(Tag nbt) { /** * This method averages the spoil progress of the two stacks (or, more - * accurately, their {@link ISpoilableItem#getCreationTick()}). If {@link SpoilableItemStack#FROZEN_EQUALITY} - * is {@code true}, this method will ignore the frozen/not frozen status of stacks. + * accurately, their {@link ISpoilableItem#getCreationTick()}). * * @implNote This implementation may lead to spoil progress averaging in situations other * than stack merging, though I don't think this will lead to any big user-facing bugs. From c12e010f7480e3f600715e7a0ba00de144829811 Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 23 Aug 2026 18:17:49 +0300 Subject: [PATCH 5/7] rename --- src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index b38b02d10ac..d30e14cbeac 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -234,7 +234,7 @@ public void addSpoilTransferModifier(ModifyMachineEvent event) { } @SubscribeEvent - public void registerDevSpoilables(RegisterSpoilablesEvent event) { + public void registerSpoilables(RegisterSpoilablesEvent event) { if (GTCEu.isDev()) { event.getBuilder() .ticks(10) From dc0dfb2f149e1286ab604395a8e10b2bde6465d0 Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 23 Aug 2026 23:05:37 +0300 Subject: [PATCH 6/7] rename 2 --- .../com/gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../com/gregtechceu/gtceu/common/data/GTItems.java | 4 ++-- .../common/item/behavior/SpoilableBehavior.java | 7 +++---- .../gtceu/data/recipe/misc/MiscRecipeLoader.java | 2 +- ...golden_carrot.png => magnetic_golden_carrot.png} | Bin 5 files changed, 7 insertions(+), 8 deletions(-) rename src/main/resources/assets/gtceu/textures/item/{magnetized_golden_carrot.png => magnetic_golden_carrot.png} (100%) diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index d30e14cbeac..410b9fe2c3e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -268,7 +268,7 @@ public void registerSpoilables(RegisterSpoilablesEvent event) { .ticks(20 * 60 * 30) .result(Items.GOLDEN_CARROT) .build() - .attachTo(GTItems.MAGNETIZED_CARROT); + .attachTo(GTItems.MAGNETIC_GOLDEN_CARROT); } @SubscribeEvent diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java index a649b87c395..a8cca87dc9c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java @@ -2596,8 +2596,8 @@ public static ItemEntry createFluidCell(Material mat, int capacit } } - public static ItemEntry MAGNETIZED_CARROT = REGISTRATE - .item("magnetized_golden_carrot", ComponentItem::create) + public static ItemEntry MAGNETIC_GOLDEN_CARROT = REGISTRATE + .item("magnetic_golden_carrot", ComponentItem::create) .lang("Magnetic Golden Carrot") .onRegister(attach(new FoodStats(new FoodProperties.Builder() .nutrition(Foods.GOLDEN_CARROT.getNutrition()) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/SpoilableBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/SpoilableBehavior.java index e8f39bdab0b..ba2dbbb026e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/SpoilableBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/SpoilableBehavior.java @@ -13,7 +13,6 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraftforge.common.MinecraftForge; @@ -38,7 +37,7 @@ public class SpoilableBehavior { private final Function ticks; private final SpoilResultProvider spoilResult; private final Function spoilsIntoTooltip; - private final List attachedTo = new ArrayList<>(); + private final List attachedTo = new ArrayList<>(); public static void init(IEventBus eventBus) { RegisterSpoilablesEvent event = new RegisterSpoilablesEvent(SpoilableBehavior::builder); @@ -70,14 +69,14 @@ public SpoilableBehavior attachTo(ItemLike item) { if (attachedTo.isEmpty()) { MinecraftForge.EVENT_BUS.register(this); } - attachedTo.add(item.asItem()); + attachedTo.add(item); return this; } @SubscribeEvent public void attachCapability(AttachCapabilitiesEvent event) { ItemStack stack = event.getObject(); - if (attachedTo.stream().anyMatch(stack::is)) { + if (attachedTo.stream().map(ItemLike::asItem).anyMatch(stack::is)) { event.addCapability(GTCEu.id("spoilable"), new SpoilableBehaviourStack(stack)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java index 9b185515f5e..62c29650a1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java @@ -634,7 +634,7 @@ public static void init(Consumer provider) { POLARIZER_RECIPES.recipeBuilder("magnetize_golden_carrot") .inputItems(Items.GOLDEN_CARROT) - .outputItems(MAGNETIZED_CARROT) + .outputItems(MAGNETIC_GOLDEN_CARROT) .duration(100).EUt(8).save(provider); } } diff --git a/src/main/resources/assets/gtceu/textures/item/magnetized_golden_carrot.png b/src/main/resources/assets/gtceu/textures/item/magnetic_golden_carrot.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/item/magnetized_golden_carrot.png rename to src/main/resources/assets/gtceu/textures/item/magnetic_golden_carrot.png From cdc9c43ced227fc2c2c5c6a5a5310cddd366e24e Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 23 Aug 2026 23:07:01 +0300 Subject: [PATCH 7/7] datagen --- src/generated/resources/assets/gtceu/lang/en_ud.json | 2 +- src/generated/resources/assets/gtceu/lang/en_us.json | 2 +- ...agnetized_golden_carrot.json => magnetic_golden_carrot.json} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/generated/resources/assets/gtceu/models/item/{magnetized_golden_carrot.json => magnetic_golden_carrot.json} (54%) diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 1d3a6c36799..3d79ac66315 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -4536,7 +4536,7 @@ "item.gtceu.machine_memory_card": "pɹɐƆ ʎɹoɯǝW ǝuıɥɔɐW", "item.gtceu.magenta_dye_spray_can": ")ɐʇuǝbɐW( uɐƆ ʎɐɹdS", "item.gtceu.magenta_glass_lens": ")ɐʇuǝbɐW( suǝꞀ ssɐן⅁", - "item.gtceu.magnetized_golden_carrot": "ʇoɹɹɐƆ uǝpןo⅁ ɔıʇǝubɐW", + "item.gtceu.magnetic_golden_carrot": "ʇoɹɹɐƆ uǝpןo⅁ ɔıʇǝubɐW", "item.gtceu.maintenance_detector_cover": "ɹoʇɔǝʇǝᗡ ǝɔuɐuǝʇuıɐW", "item.gtceu.mask_filter": "ɹǝʇןıℲ ʞsɐW sɐ⅁", "item.gtceu.matchbox": "xoqɥɔʇɐW", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 8d63daa5068..da6955180b8 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -4536,7 +4536,7 @@ "item.gtceu.machine_memory_card": "Machine Memory Card", "item.gtceu.magenta_dye_spray_can": "Spray Can (Magenta)", "item.gtceu.magenta_glass_lens": "Glass Lens (Magenta)", - "item.gtceu.magnetized_golden_carrot": "Magnetic Golden Carrot", + "item.gtceu.magnetic_golden_carrot": "Magnetic Golden Carrot", "item.gtceu.maintenance_detector_cover": "Maintenance Detector", "item.gtceu.mask_filter": "Gas Mask Filter", "item.gtceu.matchbox": "Matchbox", diff --git a/src/generated/resources/assets/gtceu/models/item/magnetized_golden_carrot.json b/src/generated/resources/assets/gtceu/models/item/magnetic_golden_carrot.json similarity index 54% rename from src/generated/resources/assets/gtceu/models/item/magnetized_golden_carrot.json rename to src/generated/resources/assets/gtceu/models/item/magnetic_golden_carrot.json index 684cca68baa..7d5aa9b3271 100644 --- a/src/generated/resources/assets/gtceu/models/item/magnetized_golden_carrot.json +++ b/src/generated/resources/assets/gtceu/models/item/magnetic_golden_carrot.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "gtceu:item/magnetized_golden_carrot" + "layer0": "gtceu:item/magnetic_golden_carrot" } } \ No newline at end of file