From 68548afbbc0492ed209e80b00e217648724bf0c5 Mon Sep 17 00:00:00 2001 From: Sam Kirby Date: Wed, 28 Feb 2024 10:54:20 +0000 Subject: [PATCH] fix(gc/slimelings): change favourite food list Wooden hoes are unobtainable, so slimeling's must have their diet modified - these slimelings now eat Prismarine Shards fixes DarkPacks/SevTech-Ages#2066 --- gradle.properties | 2 +- .../core/SevPatchesLoadingPlugin.java | 6 +++ .../core/SevPatchesTransformer.java | 2 + .../patches/PatchGalacticraftSlimeling.java | 38 +++++++++++++++++++ src/main/resources/mcmod.info | 2 +- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/main/java/tv/darkosto/sevpatches/core/patches/PatchGalacticraftSlimeling.java diff --git a/gradle.properties b/gradle.properties index 96954a1..ff72872 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version_base = 1.11.1 +version_base = 1.12.0 # Sets default memory used for gradle commands. Can be overridden by user or command line properties. # This is required to provide enough memory for the Minecraft decompilation process. diff --git a/src/main/java/tv/darkosto/sevpatches/core/SevPatchesLoadingPlugin.java b/src/main/java/tv/darkosto/sevpatches/core/SevPatchesLoadingPlugin.java index 56bd110..fab1a47 100644 --- a/src/main/java/tv/darkosto/sevpatches/core/SevPatchesLoadingPlugin.java +++ b/src/main/java/tv/darkosto/sevpatches/core/SevPatchesLoadingPlugin.java @@ -52,6 +52,9 @@ public class SevPatchesLoadingPlugin implements IFMLLoadingPlugin { public static String IS_EMPTY; + public static String WOODEN_HOE; + public static String PRISMARINE_SHARD; + public SevPatchesLoadingPlugin() { LOGGER.info("setting up mixin environment"); MixinBootstrap.init(); @@ -115,6 +118,9 @@ public void injectData(Map data) { SevPatchesLoadingPlugin.MATERIAL_WOOD = dev ? "WOOD" : "field_151575_d"; SevPatchesLoadingPlugin.IS_EMPTY = dev ? "isEmpty" : "func_191420_l"; + + SevPatchesLoadingPlugin.WOODEN_HOE = dev ? "WOODEN_HOE" : "field_151017_I"; + SevPatchesLoadingPlugin.PRISMARINE_SHARD = dev ? "PRISMARINE_SHARD" : "field_179562_cC"; } @Override diff --git a/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java b/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java index 9ffd700..139bc78 100644 --- a/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java +++ b/src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java @@ -38,6 +38,8 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) return new PatchPrimalDrying(basicClass).apply(); case "micdoodle8.mods.galacticraft.core.tile.TileEntityInventory": return new PatchGalacticraftInventories(basicClass).apply(); + case "micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling": + return new PatchGalacticraftSlimeling(basicClass).apply(); default: return basicClass; } diff --git a/src/main/java/tv/darkosto/sevpatches/core/patches/PatchGalacticraftSlimeling.java b/src/main/java/tv/darkosto/sevpatches/core/patches/PatchGalacticraftSlimeling.java new file mode 100644 index 0000000..21fc2ef --- /dev/null +++ b/src/main/java/tv/darkosto/sevpatches/core/patches/PatchGalacticraftSlimeling.java @@ -0,0 +1,38 @@ +package tv.darkosto.sevpatches.core.patches; + +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.MethodNode; +import tv.darkosto.sevpatches.core.SevPatchesLoadingPlugin; +import tv.darkosto.sevpatches.core.utils.AsmUtils; + +import java.util.Optional; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +public class PatchGalacticraftSlimeling extends Patch { + public PatchGalacticraftSlimeling(byte[] inputClass) { + super(inputClass); + } + + @Override + protected boolean patch() { + MethodNode favFoodSetter = AsmUtils.findMethod(this.classNode, "setRandomFavFood"); + + if (favFoodSetter == null) + return false; + + Iterable insnsIter = () -> favFoodSetter.instructions.iterator(); + Stream insns = StreamSupport.stream(insnsIter.spliterator(), false); + + Optional fieldInsn = insns + .filter(insn -> insn instanceof FieldInsnNode) + .map(insn -> (FieldInsnNode) insn) + .filter(fieldInsnNode -> fieldInsnNode.desc.equals("Lnet/minecraft/item/Item;") && fieldInsnNode.name.equals(SevPatchesLoadingPlugin.WOODEN_HOE)) + .findAny(); + + fieldInsn.ifPresent(insn -> insn.name = SevPatchesLoadingPlugin.PRISMARINE_SHARD); + + return fieldInsn.isPresent(); + } +} diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 248ffbe..dea9c29 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "sevpatches", "name": "SevPatches", "description": "Consolidated patches for mods that are EOL used in SevTech: Ages", - "version": "1.9", + "version": "1.12.0", "mcversion": "1.12.2", "url": "https://www.curseforge.com/minecraft/mc-mods/sevpatches", "updateUrl": "",