summaryrefslogtreecommitdiffstats
path: root/nms-patches
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2017-01-31 21:38:55 +1100
committermd_5 <git@md-5.net>2017-01-31 21:38:55 +1100
commited8a073298b9ca89b9b378f2c0308fdd6e02a8a2 (patch)
tree39ec85997e47c29ce2edff7e2b0afc213757160b /nms-patches
parent47c6a368548224611e4039d9619518b68e5e22a3 (diff)
downloadcraftbukkit-ed8a073298b9ca89b9b378f2c0308fdd6e02a8a2.tar
craftbukkit-ed8a073298b9ca89b9b378f2c0308fdd6e02a8a2.tar.gz
craftbukkit-ed8a073298b9ca89b9b378f2c0308fdd6e02a8a2.tar.lz
craftbukkit-ed8a073298b9ca89b9b378f2c0308fdd6e02a8a2.tar.xz
craftbukkit-ed8a073298b9ca89b9b378f2c0308fdd6e02a8a2.zip
SPIGOT-3044: BlockDispenseEvent for shulker boxes
Diffstat (limited to 'nms-patches')
-rw-r--r--nms-patches/DispenserRegistry.patch33
1 files changed, 32 insertions, 1 deletions
diff --git a/nms-patches/DispenserRegistry.patch b/nms-patches/DispenserRegistry.patch
index c53ea444..134423f6 100644
--- a/nms-patches/DispenserRegistry.patch
+++ b/nms-patches/DispenserRegistry.patch
@@ -430,7 +430,38 @@
this.b = true;
if (world.isEmpty(blockposition) && blockpumpkin.b(world, blockposition)) {
if (!world.isClientSide) {
-@@ -456,12 +751,40 @@
+@@ -388,6 +683,30 @@
+ EnumDirection enumdirection = (EnumDirection) isourceblock.e().get(BlockDispenser.FACING);
+ BlockPosition blockposition = isourceblock.getBlockPosition().shift(enumdirection);
+
++ // 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
++
+ this.b = world.a(block, blockposition, false, EnumDirection.DOWN, (Entity) null);
+ if (this.b) {
+ EnumDirection enumdirection1 = world.isEmpty(blockposition.down()) ? enumdirection : EnumDirection.UP;
+@@ -456,12 +775,40 @@
d3 = 0.0D;
}