diff --git a/fml/common/cpw/mods/fml/common/IPickupNotifier.java b/fml/common/cpw/mods/fml/common/IPickupNotifier.java index d29a36325f..9f3d721f35 100644 --- a/fml/common/cpw/mods/fml/common/IPickupNotifier.java +++ b/fml/common/cpw/mods/fml/common/IPickupNotifier.java @@ -13,7 +13,10 @@ */ package cpw.mods.fml.common; +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityPlayer; + public interface IPickupNotifier { - void notifyPickup(Object... pickupData); + void notifyPickup(EntityItem item, EntityPlayer player); } diff --git a/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java b/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java index a18b61ae8c..04fcc49ac5 100644 --- a/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java +++ b/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java @@ -80,4 +80,6 @@ public interface BaseModProxy public abstract void receiveCustomPacket(Packet250CustomPayload packet); public abstract void receiveChatPacket(String text); + + public abstract void onItemPickup(EntityPlayer player, ItemStack item); } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java index f22f926faa..c4c09d1fe4 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java @@ -22,6 +22,7 @@ import net.minecraft.src.BaseMod; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ICraftingHandler; import cpw.mods.fml.common.IFuelHandler; +import cpw.mods.fml.common.IPickupNotifier; import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.TickType; @@ -137,4 +138,9 @@ public class ModLoaderHelper { return new ModLoaderConnectionHandler(mod); } + + public static IPickupNotifier buildPickupHelper(BaseModProxy mod) + { + return new ModLoaderPickupNotifier(mod); + } } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java index 57ee1a71e9..3fe2d310af 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java @@ -505,6 +505,7 @@ public class ModLoaderModContainer implements ModContainer GameRegistry.registerWorldGenerator(ModLoaderHelper.buildWorldGenHelper(mod)); GameRegistry.registerFuelHandler(ModLoaderHelper.buildFuelHelper(mod)); GameRegistry.registerCraftingHandler(ModLoaderHelper.buildCraftingHelper(mod)); + GameRegistry.registerPickupHandler(ModLoaderHelper.buildPickupHelper(mod)); NetworkRegistry.instance().registerConnectionHandler(ModLoaderHelper.buildConnectionHelper(mod)); } catch (Exception e) diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderPickupNotifier.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderPickupNotifier.java new file mode 100644 index 0000000000..3c4a0e75be --- /dev/null +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderPickupNotifier.java @@ -0,0 +1,23 @@ +package cpw.mods.fml.common.modloader; + +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityPlayer; +import cpw.mods.fml.common.IPickupNotifier; + +public class ModLoaderPickupNotifier implements IPickupNotifier +{ + + private BaseModProxy mod; + + public ModLoaderPickupNotifier(BaseModProxy mod) + { + this.mod = mod; + } + + @Override + public void notifyPickup(EntityItem item, EntityPlayer player) + { + mod.onItemPickup(player, item.field_70294_a); + } + +} diff --git a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java index 4d4c871388..d4999993f1 100644 --- a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java +++ b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java @@ -7,6 +7,7 @@ import java.util.logging.Level; import net.minecraft.src.BiomeGenBase; import net.minecraft.src.CraftingManager; +import net.minecraft.src.EntityItem; import net.minecraft.src.EntityPlayer; import net.minecraft.src.FurnaceRecipes; import net.minecraft.src.IChunkProvider; @@ -27,6 +28,7 @@ import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.ICraftingHandler; import cpw.mods.fml.common.IDispenseHandler; import cpw.mods.fml.common.IFuelHandler; +import cpw.mods.fml.common.IPickupNotifier; import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.LoaderException; @@ -42,6 +44,7 @@ public class GameRegistry private static List fuelHandlers = Lists.newArrayList(); private static List craftingHandlers = Lists.newArrayList(); private static List dispenserHandlers = Lists.newArrayList(); + private static List pickupHandlers = Lists.newArrayList(); /** * Register a world generator - something that inserts new block types into the world @@ -244,4 +247,16 @@ public class GameRegistry } } + public static void registerPickupHandler(IPickupNotifier handler) + { + pickupHandlers.add(handler); + } + + public static void onPickupNotification(EntityPlayer player, EntityItem item) + { + for (IPickupNotifier notify : pickupHandlers) + { + notify.notifyPickup(item, player); + } + } } diff --git a/fml/patches/common/net/minecraft/src/EntityItem.java.patch b/fml/patches/common/net/minecraft/src/EntityItem.java.patch new file mode 100644 index 0000000000..d1956160b2 --- /dev/null +++ b/fml/patches/common/net/minecraft/src/EntityItem.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/common/net/minecraft/src/EntityItem.java ++++ ../src-work/common/net/minecraft/src/EntityItem.java +@@ -1,6 +1,8 @@ + package net.minecraft.src; + + import java.util.Iterator; ++ ++import cpw.mods.fml.common.registry.GameRegistry; + + public class EntityItem extends Entity + { +@@ -225,6 +227,8 @@ + p_70100_1_.func_71029_a(AchievementList.field_76027_z); + } + ++ GameRegistry.onPickupNotification(p_70100_1_, this); ++ + this.field_70170_p.func_72956_a(this, "random.pop", 0.2F, ((this.field_70146_Z.nextFloat() - this.field_70146_Z.nextFloat()) * 0.7F + 1.0F) * 2.0F); + p_70100_1_.func_71001_a(this, var2); +