Initial commit (Forge 1291).
This commit is contained in:
@ -0,0 +1,101 @@
|
||||
--- ../src-base/minecraft/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java
|
||||
+++ ../src-work/minecraft/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java
|
||||
@@ -6,6 +6,11 @@
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
+import org.bukkit.event.block.BlockDispenseEvent;
|
||||
+// CraftBukkit end
|
||||
+
|
||||
public class BehaviorDefaultDispenseItem implements IBehaviorDispenseItem
|
||||
{
|
||||
private static final String __OBFID = "CL_00001195";
|
||||
@@ -23,10 +28,17 @@
|
||||
EnumFacing enumfacing = BlockDispenser.func_149937_b(p_82487_1_.getBlockMetadata());
|
||||
IPosition iposition = BlockDispenser.func_149939_a(p_82487_1_);
|
||||
ItemStack itemstack1 = p_82487_2_.splitStack(1);
|
||||
- doDispense(p_82487_1_.getWorld(), itemstack1, 6, enumfacing, iposition);
|
||||
+ // CraftBukkit start
|
||||
+ if (!doDispense(p_82487_1_.getWorld(), itemstack1, 6, enumfacing, p_82487_1_))
|
||||
+ {
|
||||
+ p_82487_2_.stackSize++;
|
||||
+ }
|
||||
+
|
||||
+ // CraftBukkit end
|
||||
return p_82487_2_;
|
||||
}
|
||||
|
||||
+ // Cauldron start - vanilla compatibility
|
||||
public static void doDispense(World p_82486_0_, ItemStack p_82486_1_, int p_82486_2_, EnumFacing p_82486_3_, IPosition p_82486_4_)
|
||||
{
|
||||
double d0 = p_82486_4_.getX();
|
||||
@@ -42,7 +54,67 @@
|
||||
entityitem.motionZ += p_82486_0_.rand.nextGaussian() * 0.007499999832361937D * (double)p_82486_2_;
|
||||
p_82486_0_.spawnEntityInWorld(entityitem);
|
||||
}
|
||||
+ // Cauldron end
|
||||
|
||||
+ // CraftBukkit start - void -> boolean return, IPosition -> ISourceBlock last argument
|
||||
+ public static boolean doDispense(World world, ItemStack itemstack, int i, EnumFacing enumfacing, IBlockSource iblocksource)
|
||||
+ {
|
||||
+ IPosition iposition = BlockDispenser.func_149939_a(iblocksource);
|
||||
+ // CraftBukkit end
|
||||
+ double d0 = iposition.getX();
|
||||
+ double d1 = iposition.getY();
|
||||
+ double d2 = iposition.getZ();
|
||||
+ EntityItem entityitem = new EntityItem(world, d0, d1 - 0.3D, d2, itemstack);
|
||||
+ double d3 = world.rand.nextDouble() * 0.1D + 0.2D;
|
||||
+ entityitem.motionX = (double) enumfacing.getFrontOffsetX() * d3;
|
||||
+ entityitem.motionY = 0.20000000298023224D;
|
||||
+ entityitem.motionZ = (double) enumfacing.getFrontOffsetZ() * d3;
|
||||
+ entityitem.motionX += world.rand.nextGaussian() * 0.007499999832361937D * (double) i;
|
||||
+ entityitem.motionY += world.rand.nextGaussian() * 0.007499999832361937D * (double) i;
|
||||
+ entityitem.motionZ += world.rand.nextGaussian() * 0.007499999832361937D * (double) i;
|
||||
+ // CraftBukkit start
|
||||
+ org.bukkit.block.Block block = world.getWorld().getBlockAt(iblocksource.getXInt(), iblocksource.getYInt(), iblocksource.getZInt());
|
||||
+ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack);
|
||||
+ BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(entityitem.motionX, entityitem.motionY, entityitem.motionZ));
|
||||
+
|
||||
+ if (!BlockDispenser.eventFired)
|
||||
+ {
|
||||
+ world.getServer().getPluginManager().callEvent(event);
|
||||
+ }
|
||||
+
|
||||
+ if (event.isCancelled())
|
||||
+ {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ entityitem.setEntityItemStack(CraftItemStack.asNMSCopy(event.getItem()));
|
||||
+ entityitem.motionX = event.getVelocity().getX();
|
||||
+ entityitem.motionY = event.getVelocity().getY();
|
||||
+ entityitem.motionZ = event.getVelocity().getZ();
|
||||
+
|
||||
+ if (!event.getItem().equals(craftItem))
|
||||
+ {
|
||||
+ // Chain to handler for new item
|
||||
+ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
|
||||
+ IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem());
|
||||
+
|
||||
+ if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem.getClass() != BehaviorDefaultDispenseItem.class)
|
||||
+ {
|
||||
+ ibehaviordispenseitem.dispense(iblocksource, eventStack);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ world.spawnEntityInWorld(entityitem);
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ world.spawnEntityInWorld(entityitem);
|
||||
+ return true;
|
||||
+ // CraftBukkit end
|
||||
+ }
|
||||
+
|
||||
protected void playDispenseSound(IBlockSource p_82485_1_)
|
||||
{
|
||||
p_82485_1_.getWorld().playAuxSFX(1000, p_82485_1_.getXInt(), p_82485_1_.getYInt(), p_82485_1_.getZInt(), 0);
|
@ -0,0 +1,59 @@
|
||||
--- ../src-base/minecraft/net/minecraft/dispenser/BehaviorProjectileDispense.java
|
||||
+++ ../src-work/minecraft/net/minecraft/dispenser/BehaviorProjectileDispense.java
|
||||
@@ -7,6 +7,12 @@
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import net.minecraft.tileentity.TileEntityDispenser;
|
||||
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
+import org.bukkit.event.block.BlockDispenseEvent;
|
||||
+// CraftBukkit end
|
||||
+
|
||||
public abstract class BehaviorProjectileDispense extends BehaviorDefaultDispenseItem
|
||||
{
|
||||
private static final String __OBFID = "CL_00001394";
|
||||
@@ -17,9 +23,42 @@
|
||||
IPosition iposition = BlockDispenser.func_149939_a(p_82487_1_);
|
||||
EnumFacing enumfacing = BlockDispenser.func_149937_b(p_82487_1_.getBlockMetadata());
|
||||
IProjectile iprojectile = this.getProjectileEntity(world, iposition);
|
||||
+ // CraftBukkit start
|
||||
+ ItemStack itemstack1 = p_82487_2_.splitStack(1);
|
||||
+ org.bukkit.block.Block block = world.getWorld().getBlockAt(p_82487_1_.getXInt(), p_82487_1_.getYInt(), p_82487_1_.getZInt());
|
||||
+ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack1);
|
||||
+ BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector((double) enumfacing.getFrontOffsetX(), (double)((float) enumfacing.getFrontOffsetY() + 0.1F), (double) enumfacing.getFrontOffsetZ()));
|
||||
+
|
||||
+ if (!BlockDispenser.eventFired)
|
||||
+ {
|
||||
+ world.getServer().getPluginManager().callEvent(event);
|
||||
+ }
|
||||
+
|
||||
+ if (event.isCancelled())
|
||||
+ {
|
||||
+ p_82487_2_.stackSize++;
|
||||
+ return p_82487_2_;
|
||||
+ }
|
||||
+
|
||||
+ if (!event.getItem().equals(craftItem))
|
||||
+ {
|
||||
+ p_82487_2_.stackSize++;
|
||||
+ // Chain to handler for new item
|
||||
+ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
|
||||
+ IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem());
|
||||
+
|
||||
+ if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem != this)
|
||||
+ {
|
||||
+ ibehaviordispenseitem.dispense(p_82487_1_, eventStack);
|
||||
+ return p_82487_2_;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
iprojectile.setThrowableHeading((double)enumfacing.getFrontOffsetX(), (double)((float)enumfacing.getFrontOffsetY() + 0.1F), (double)enumfacing.getFrontOffsetZ(), this.func_82500_b(), this.func_82498_a());
|
||||
+ ((Entity) iprojectile).projectileSource = new org.bukkit.craftbukkit.projectiles.CraftBlockProjectileSource((TileEntityDispenser) p_82487_1_.getBlockTileEntity());
|
||||
+ // CraftBukkit end
|
||||
world.spawnEntityInWorld((Entity)iprojectile);
|
||||
- p_82487_2_.splitStack(1);
|
||||
+ // p_82487_2_.splitStack(1); // CraftBukkit - Handled during event processing
|
||||
return p_82487_2_;
|
||||
}
|
||||
|
Reference in New Issue
Block a user