From ccb06943dfedf501f28345d6cf2afbfc8991186b Mon Sep 17 00:00:00 2001 From: Connor Colenso Date: Sat, 21 Oct 2023 20:49:33 +0100 Subject: [PATCH] Works! --- .../java/com/myname/mymodid/ItemStackKey.java | 31 +++++++++---------- src/main/java/com/myname/mymodid/MyMod.java | 2 ++ .../myname/mymodid/ReplacementManager.java | 13 ++++---- .../mymodid/mixins/early/MixinItemStack.java | 19 ++++++++++-- 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/myname/mymodid/ItemStackKey.java b/src/main/java/com/myname/mymodid/ItemStackKey.java index 3454c26..cd82ce6 100644 --- a/src/main/java/com/myname/mymodid/ItemStackKey.java +++ b/src/main/java/com/myname/mymodid/ItemStackKey.java @@ -2,40 +2,39 @@ package com.myname.mymodid; import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.RegistryDelegate; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import java.util.Objects; public class ItemStackKey { - private final String modId; - private final String itemName; + private final Item item; private final int meta; - public ItemStackKey(String modId, String itemName, int meta) { - this.modId = modId; - this.itemName = itemName; + public ItemStackKey(Item item, int meta) { + this.item = item; 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); + return (this.meta == that.meta) && Objects.equals(this.item, that.item); } @Override public int hashCode() { - return Objects.hash(modId, itemName, meta); + return Objects.hash(item, meta); + } + + public int getDamage() { + return meta; + } + + public RegistryDelegate getItem() { + return item.delegate; } } diff --git a/src/main/java/com/myname/mymodid/MyMod.java b/src/main/java/com/myname/mymodid/MyMod.java index 9076847..73f84bc 100644 --- a/src/main/java/com/myname/mymodid/MyMod.java +++ b/src/main/java/com/myname/mymodid/MyMod.java @@ -6,6 +6,7 @@ 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 net.minecraft.init.Items; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -19,6 +20,7 @@ public class MyMod { @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { + ReplacementManager.addReplacement(Items.apple, 0, Items.bow, 10); proxy.preInit(event); } diff --git a/src/main/java/com/myname/mymodid/ReplacementManager.java b/src/main/java/com/myname/mymodid/ReplacementManager.java index 504523f..d8ed2e1 100644 --- a/src/main/java/com/myname/mymodid/ReplacementManager.java +++ b/src/main/java/com/myname/mymodid/ReplacementManager.java @@ -1,20 +1,21 @@ package com.myname.mymodid; -import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; import java.util.HashMap; import java.util.Map; public class ReplacementManager { - private static final Map replacementMap = new HashMap<>(); + 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 void addReplacement(Item itemIn, int metaIn, Item itemOut, int metaOut) { + replacementMap.put(new ItemStackKey(itemIn, metaIn), new ItemStackKey(itemOut, metaOut)); } - public static ItemStack getReplacement(ItemStack original) { - return replacementMap.getOrDefault(new ItemStackKey(original), original); + public static ItemStackKey getReplacement(Item itemIn, int metaIn) { + ItemStackKey stackKey = new ItemStackKey(itemIn, metaIn); + return replacementMap.getOrDefault(stackKey, stackKey); } } diff --git a/src/main/java/com/myname/mymodid/mixins/early/MixinItemStack.java b/src/main/java/com/myname/mymodid/mixins/early/MixinItemStack.java index 076b906..34a0208 100644 --- a/src/main/java/com/myname/mymodid/mixins/early/MixinItemStack.java +++ b/src/main/java/com/myname/mymodid/mixins/early/MixinItemStack.java @@ -1,19 +1,32 @@ package com.myname.mymodid.mixins.early; +import com.myname.mymodid.ItemStackKey; +import com.myname.mymodid.ReplacementManager; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; 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{ +public abstract class MixinItemStack { + + @Shadow + private cpw.mods.fml.common.registry.RegistryDelegate delegate; + @Shadow + private int itemDamage; // Metadata @Inject(method = "(Lnet/minecraft/item/Item;II)V", at = @At("RETURN")) - private void onConstructorHead(Item item, int stackSize, int metadata, CallbackInfo ci) { - System.out.println(item.getUnlocalizedName() + " " + metadata + " " + stackSize); + private void onConstructorHead(Item item, int size, int metadata, CallbackInfo ci) { + ItemStackKey replacement = ReplacementManager.getReplacement(item, metadata); + + // Edit private variables here. + itemDamage = replacement.getDamage(); + delegate = replacement.getItem(); } }