From 796d6b2d877ecec6391e2583afcc57037d5704d5 Mon Sep 17 00:00:00 2001 From: Connor Colenso Date: Sat, 21 Oct 2023 19:28:34 +0100 Subject: [PATCH] Initial commit --- dependencies.gradle | 1 + .../java/com/myname/mymodid/ItemStackKey.java | 41 +++++++++++++ .../com/myname/mymodid/MixinItemStack.java | 19 +++++++ src/main/java/com/myname/mymodid/MyMod.java | 8 ++- .../myname/mymodid/PosteaLoadingPlugin.java | 57 +++++++++++++++++++ .../myname/mymodid/ReplacementManager.java | 20 +++++++ src/main/resources/mixins.json | 7 +++ 7 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/myname/mymodid/ItemStackKey.java create mode 100644 src/main/java/com/myname/mymodid/MixinItemStack.java create mode 100644 src/main/java/com/myname/mymodid/PosteaLoadingPlugin.java create mode 100644 src/main/java/com/myname/mymodid/ReplacementManager.java create mode 100644 src/main/resources/mixins.json diff --git a/dependencies.gradle b/dependencies.gradle index 624c487..83bb0ca 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -34,4 +34,5 @@ * For more details, see https://docs.gradle.org/8.0.1/userguide/java_library_plugin.html#sec:java_library_configurations_graph */ dependencies { + api('com.github.GTNewHorizons:SpongePoweredMixin:0.8.5-GTNH-2:dev') } diff --git a/src/main/java/com/myname/mymodid/ItemStackKey.java b/src/main/java/com/myname/mymodid/ItemStackKey.java new file mode 100644 index 0000000..3454c26 --- /dev/null +++ b/src/main/java/com/myname/mymodid/ItemStackKey.java @@ -0,0 +1,41 @@ +package com.myname.mymodid; + + +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.item.ItemStack; + +import java.util.Objects; + +public class ItemStackKey { + private final String modId; + private final String itemName; + private final int meta; + + public ItemStackKey(String modId, String itemName, int meta) { + this.modId = modId; + this.itemName = itemName; + this.meta = meta; + } + + public ItemStackKey(ItemStack stack) { + this(stack.getItem().getUnlocalizedName().substring(4), + GameRegistry.findUniqueIdentifierFor(stack.getItem()).modId, + stack.getItemDamage()); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ItemStackKey that = (ItemStackKey) o; + return meta == that.meta && + Objects.equals(modId, that.modId) && + Objects.equals(itemName, that.itemName); + } + + @Override + public int hashCode() { + return Objects.hash(modId, itemName, meta); + } +} + diff --git a/src/main/java/com/myname/mymodid/MixinItemStack.java b/src/main/java/com/myname/mymodid/MixinItemStack.java new file mode 100644 index 0000000..57bf59d --- /dev/null +++ b/src/main/java/com/myname/mymodid/MixinItemStack.java @@ -0,0 +1,19 @@ +package com.myname.mymodid; + + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +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.CallbackInfo; + +@Mixin(ItemStack.class) +public abstract class MixinItemStack{ + + @Inject(method = "(Lnet/minecraft/item/Item;II)V", at = @At("HEAD")) + private void onConstructorHead(Item item, int stackSize, int metadata, CallbackInfo ci) { + System.out.println(item.getUnlocalizedName() + " " + metadata + " " + stackSize); + } + +} diff --git a/src/main/java/com/myname/mymodid/MyMod.java b/src/main/java/com/myname/mymodid/MyMod.java index 316b563..8dc124f 100644 --- a/src/main/java/com/myname/mymodid/MyMod.java +++ b/src/main/java/com/myname/mymodid/MyMod.java @@ -9,6 +9,8 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; +import org.spongepowered.asm.launch.MixinBootstrap; +import org.spongepowered.asm.mixin.Mixins; @Mod(modid = Tags.MODID, version = Tags.VERSION, name = Tags.MODNAME, acceptedMinecraftVersions = "[1.7.10]") public class MyMod { @@ -19,9 +21,10 @@ public class MyMod { public static CommonProxy proxy; @Mod.EventHandler - // preInit "Run before anything else. Read your config, create blocks, items, etc, and register them with the - // GameRegistry." (Remove if not needed) public void preInit(FMLPreInitializationEvent event) { + MixinBootstrap.init(); + Mixins.addConfiguration("mixins.json"); + proxy.preInit(event); } @@ -43,3 +46,4 @@ public class MyMod { proxy.serverStarting(event); } } + diff --git a/src/main/java/com/myname/mymodid/PosteaLoadingPlugin.java b/src/main/java/com/myname/mymodid/PosteaLoadingPlugin.java new file mode 100644 index 0000000..d060ab9 --- /dev/null +++ b/src/main/java/com/myname/mymodid/PosteaLoadingPlugin.java @@ -0,0 +1,57 @@ +package com.myname.mymodid; + +import com.falsepattern.gasstation.IEarlyMixinLoader; +import cpw.mods.fml.relauncher.FMLLaunchHandler; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; +import jdk.jfr.Name; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@IFMLLoadingPlugin.TransformerExclusions({ "mods.mymod" }) +@Name("mymod") +@IFMLLoadingPlugin.SortingIndex(1500) +@IFMLLoadingPlugin.MCVersion("1.7.10") +public final class PosteaLoadingPlugin implements IEarlyMixinLoader, IFMLLoadingPlugin { + + public static final String ItemStackTransformer = "mods.battlegear2.coremod.transformers.EntityPlayerTransformer"; + + public static File debugOutputLocation; + public static final String[] transformers = new String[] { ItemStackTransformer }; + + @Override + public String[] getASMTransformerClass() { + return transformers; + } + + @Override + public String getAccessTransformerClass() { + return null; + } + + @Override + public String getModContainerClass() { + return null; + } + + @Override + public String getSetupClass() { + return null; + } + + @Override + public void injectData(Map data) { + debugOutputLocation = new File(data.get("mcLocation").toString(), "ItemStack edited classes"); + } + + @Override + public List getMixinConfigs() { + List list = new ArrayList<>(); + list.add("mixins.json" ); + return list; + } + +} diff --git a/src/main/java/com/myname/mymodid/ReplacementManager.java b/src/main/java/com/myname/mymodid/ReplacementManager.java new file mode 100644 index 0000000..504523f --- /dev/null +++ b/src/main/java/com/myname/mymodid/ReplacementManager.java @@ -0,0 +1,20 @@ +package com.myname.mymodid; + + +import net.minecraft.item.ItemStack; + +import java.util.HashMap; +import java.util.Map; + +public class ReplacementManager { + private static final Map replacementMap = new HashMap<>(); + + public static void addReplacement(String modId, String itemName, int meta, ItemStack replacement) { + replacementMap.put(new ItemStackKey(modId, itemName, meta), replacement); + } + + public static ItemStack getReplacement(ItemStack original) { + return replacementMap.getOrDefault(new ItemStackKey(original), original); + } +} + diff --git a/src/main/resources/mixins.json b/src/main/resources/mixins.json new file mode 100644 index 0000000..1dc7a14 --- /dev/null +++ b/src/main/resources/mixins.json @@ -0,0 +1,7 @@ +{ + "required": true, + "package": "com.myname.mymodid", + "mixins": [ + "MixinItemStack" + ] +}