summaryrefslogtreecommitdiffstats
path: root/nms-patches
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2016-09-19 18:20:15 +1000
committermd_5 <git@md-5.net>2016-09-19 18:20:15 +1000
commitc1b529eddc72b313fcc81c9d55b6b06200d4becb (patch)
tree02c649a64a726b8303d62793ce42d47ec676c917 /nms-patches
parent6af9f5b84a18f0c40e1ad3893a5de27fb3c35fd3 (diff)
downloadcraftbukkit-c1b529eddc72b313fcc81c9d55b6b06200d4becb.tar
craftbukkit-c1b529eddc72b313fcc81c9d55b6b06200d4becb.tar.gz
craftbukkit-c1b529eddc72b313fcc81c9d55b6b06200d4becb.tar.lz
craftbukkit-c1b529eddc72b313fcc81c9d55b6b06200d4becb.tar.xz
craftbukkit-c1b529eddc72b313fcc81c9d55b6b06200d4becb.zip
SPIGOT-2683: Missing BlockDispenseEvents
Diffstat (limited to 'nms-patches')
-rw-r--r--nms-patches/DispenserRegistry.patch64
1 files changed, 63 insertions, 1 deletions
diff --git a/nms-patches/DispenserRegistry.patch b/nms-patches/DispenserRegistry.patch
index 3fde6543..35438f17 100644
--- a/nms-patches/DispenserRegistry.patch
+++ b/nms-patches/DispenserRegistry.patch
@@ -361,7 +361,69 @@
return itemstack;
}
});
-@@ -437,12 +677,40 @@
+@@ -296,6 +536,30 @@
+ BlockPosition blockposition = isourceblock.getBlockPosition().shift(enumdirection);
+ BlockSkull blockskull = Blocks.SKULL;
+
++ // CraftBukkit start
++ org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
++ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack);
++
++ BlockDispenseEvent event = new BlockDispenseEvent(bukkitBlock, craftItem.clone(), new org.bukkit.util.Vector(blockposition.getX(), blockposition.getY(), blockposition.getZ()));
++ if (!BlockDispenser.eventFired) {
++ world.getServer().getPluginManager().callEvent(event);
++ }
++
++ if (event.isCancelled()) {
++ return itemstack;
++ }
++
++ if (!event.getItem().equals(craftItem)) {
++ // Chain to handler for new item
++ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
++ IDispenseBehavior idispensebehavior = (IDispenseBehavior) BlockDispenser.REGISTRY.get(eventStack.getItem());
++ if (idispensebehavior != IDispenseBehavior.NONE && idispensebehavior != this) {
++ idispensebehavior.a(isourceblock, eventStack);
++ return itemstack;
++ }
++ }
++ // CraftBukkit end
++
+ if (world.isEmpty(blockposition) && blockskull.b(world, blockposition, itemstack)) {
+ if (!world.isClientSide) {
+ world.setTypeAndData(blockposition, blockskull.getBlockData().set(BlockSkull.FACING, EnumDirection.UP), 3);
+@@ -354,6 +618,30 @@
+ BlockPosition blockposition = isourceblock.getBlockPosition().shift((EnumDirection) isourceblock.e().get(BlockDispenser.FACING));
+ BlockPumpkin blockpumpkin = (BlockPumpkin) Blocks.PUMPKIN;
+
++ // CraftBukkit start
++ org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
++ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack);
++
++ BlockDispenseEvent event = new BlockDispenseEvent(bukkitBlock, craftItem.clone(), new org.bukkit.util.Vector(blockposition.getX(), blockposition.getY(), blockposition.getZ()));
++ if (!BlockDispenser.eventFired) {
++ world.getServer().getPluginManager().callEvent(event);
++ }
++
++ if (event.isCancelled()) {
++ return itemstack;
++ }
++
++ if (!event.getItem().equals(craftItem)) {
++ // Chain to handler for new item
++ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
++ IDispenseBehavior idispensebehavior = (IDispenseBehavior) BlockDispenser.REGISTRY.get(eventStack.getItem());
++ if (idispensebehavior != IDispenseBehavior.NONE && idispensebehavior != this) {
++ idispensebehavior.a(isourceblock, eventStack);
++ return itemstack;
++ }
++ }
++ // CraftBukkit end
++
+ if (world.isEmpty(blockposition) && blockpumpkin.b(world, blockposition)) {
+ if (!world.isClientSide) {
+ world.setTypeAndData(blockposition, blockpumpkin.getBlockData(), 3);
+@@ -437,12 +725,40 @@
d3 = 0.0D;
}