diff --git a/client/net/minecraft/src/BaseMod.java b/client/net/minecraft/src/BaseMod.java index 2793aa2581..21a7924047 100644 --- a/client/net/minecraft/src/BaseMod.java +++ b/client/net/minecraft/src/BaseMod.java @@ -195,9 +195,10 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr * @param item * @return */ - public boolean dispenseEntity(World world, double x, double y, double z, int xVel, int zVel, ItemStack item) + @Override + public int dispenseEntity(World world, ItemStack item, Random rnd, double x, double y, double z, int xVel, int zVel, double entX, double entY, double entZ) { - return false; + return -1; } /** diff --git a/common/cpw/mods/fml/common/IDispenseHandler.java b/common/cpw/mods/fml/common/IDispenseHandler.java index 900d3d9eb1..dcb053d2c0 100644 --- a/common/cpw/mods/fml/common/IDispenseHandler.java +++ b/common/cpw/mods/fml/common/IDispenseHandler.java @@ -12,6 +12,8 @@ */ package cpw.mods.fml.common; +import java.util.Random; + import net.minecraft.src.ItemStack; import net.minecraft.src.World; @@ -21,13 +23,19 @@ public interface IDispenseHandler /** * Return -1 if you don't want to dispense anything. the other values seem to have specific meanings * to blockdispenser. + * * @param x * @param y * @param z * @param xVelocity * @param zVelocity - * @param data + * @param world + * @param item + * @param random + * @param entX + * @param entY + * @param entZ * @return */ - int dispense(double x, double y, double z, int xVelocity, int zVelocity, World world, ItemStack item); + int dispense(double x, double y, double z, int xVelocity, int zVelocity, World world, ItemStack item, Random random, double entX, double entY, double entZ); } diff --git a/common/cpw/mods/fml/common/modloader/BaseModProxy.java b/common/cpw/mods/fml/common/modloader/BaseModProxy.java index cf8e460351..eac3732b40 100644 --- a/common/cpw/mods/fml/common/modloader/BaseModProxy.java +++ b/common/cpw/mods/fml/common/modloader/BaseModProxy.java @@ -85,4 +85,7 @@ public interface BaseModProxy public abstract void receiveChatPacket(String text); public abstract void onItemPickup(EntityPlayer player, ItemStack item); + + public abstract int dispenseEntity(World world, ItemStack item, Random rnd, double x, double y, double z, int xVel, int zVel, double entX, + double entY, double entZ); } diff --git a/common/cpw/mods/fml/common/modloader/ModLoaderDispenseHelper.java b/common/cpw/mods/fml/common/modloader/ModLoaderDispenseHelper.java new file mode 100644 index 0000000000..0efb28e3d5 --- /dev/null +++ b/common/cpw/mods/fml/common/modloader/ModLoaderDispenseHelper.java @@ -0,0 +1,26 @@ +package cpw.mods.fml.common.modloader; + +import java.util.Random; + +import net.minecraft.src.ItemStack; +import net.minecraft.src.World; +import cpw.mods.fml.common.IDispenseHandler; + +public class ModLoaderDispenseHelper implements IDispenseHandler +{ + + private BaseModProxy mod; + + public ModLoaderDispenseHelper(BaseModProxy mod) + { + this.mod = mod; + } + + @Override + public int dispense(double x, double y, double z, int xVelocity, int zVelocity, World world, ItemStack item, Random random, double entX, double entY, + double entZ) + { + return mod.dispenseEntity(world, item, random, x, y, z, xVelocity, zVelocity, entX, entY, entZ); + } + +} diff --git a/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java b/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java index e208678335..df1bca1392 100644 --- a/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java +++ b/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java @@ -24,6 +24,7 @@ import net.minecraft.src.Container; import net.minecraft.src.EntityPlayer; import cpw.mods.fml.common.FMLCommonHandler; 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; @@ -145,4 +146,9 @@ public class ModLoaderHelper } return null; } + + public static IDispenseHandler buildDispenseHelper(BaseModProxy mod) + { + return new ModLoaderDispenseHelper(mod); + } } diff --git a/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java b/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java index ca86c6e841..8b7c3cace1 100644 --- a/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java +++ b/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java @@ -514,6 +514,7 @@ public class ModLoaderModContainer implements ModContainer GameRegistry.registerFuelHandler(ModLoaderHelper.buildFuelHelper(mod)); GameRegistry.registerCraftingHandler(ModLoaderHelper.buildCraftingHelper(mod)); GameRegistry.registerPickupHandler(ModLoaderHelper.buildPickupHelper(mod)); + GameRegistry.registerDispenserHandler(ModLoaderHelper.buildDispenseHelper(mod)); NetworkRegistry.instance().registerConnectionHandler(ModLoaderHelper.buildConnectionHelper(mod)); } catch (Exception e) diff --git a/common/cpw/mods/fml/common/registry/GameRegistry.java b/common/cpw/mods/fml/common/registry/GameRegistry.java index d4999993f1..384a0527bc 100644 --- a/common/cpw/mods/fml/common/registry/GameRegistry.java +++ b/common/cpw/mods/fml/common/registry/GameRegistry.java @@ -104,11 +104,11 @@ public class GameRegistry * @param item * @return */ - public static int tryDispense(World world, double x, double y, double z, int xVelocity, int zVelocity, ItemStack item) + public static int tryDispense(World world, double x, double y, double z, int xVelocity, int zVelocity, ItemStack item, Random random, double entX, double entY, double entZ) { for (IDispenseHandler handler : dispenserHandlers) { - int dispensed = handler.dispense(x, y, z, xVelocity, zVelocity, world, item); + int dispensed = handler.dispense(x, y, z, xVelocity, zVelocity, world, item, random, entX, entY, entZ); if (dispensed>-1) { return dispensed; diff --git a/patches/common/net/minecraft/src/BlockDispenser.java.patch b/patches/common/net/minecraft/src/BlockDispenser.java.patch index d2ebd34132..de49d8a1e8 100644 --- a/patches/common/net/minecraft/src/BlockDispenser.java.patch +++ b/patches/common/net/minecraft/src/BlockDispenser.java.patch @@ -14,7 +14,7 @@ float var15 = 1.1F; byte var16 = 6; - -+ int modDispense = GameRegistry.tryDispense(p_72283_1_, p_72283_9_, p_72283_11_, p_72283_13_, p_72283_7_, p_72283_8_, p_72283_2_); ++ int modDispense = GameRegistry.tryDispense(p_72283_1_, p_72283_9_, p_72283_11_, p_72283_13_, p_72283_7_, p_72283_8_, p_72283_2_, p_72283_3_, p_72283_9_, p_72283_11_, p_72283_13_); + if (modDispense > -1) + { + return modDispense;