summaryrefslogtreecommitdiffstats
path: root/nms-patches
diff options
context:
space:
mode:
authorFabian Faßbender <fabian.fassbender42@googlemail.com>2014-12-06 22:13:04 +0100
committerFabian Faßbender <fabian.fassbender42@googlemail.com>2014-12-06 22:13:04 +0100
commit86eaec03f1a339fe282f16b83e6041796c722875 (patch)
tree4f2b5494c57c9c1508ae8c307e6702418ec4d6be /nms-patches
parentc4129c259b5913333efed76975c345d2afff6acd (diff)
downloadcraftbukkit-86eaec03f1a339fe282f16b83e6041796c722875.tar
craftbukkit-86eaec03f1a339fe282f16b83e6041796c722875.tar.gz
craftbukkit-86eaec03f1a339fe282f16b83e6041796c722875.tar.lz
craftbukkit-86eaec03f1a339fe282f16b83e6041796c722875.tar.xz
craftbukkit-86eaec03f1a339fe282f16b83e6041796c722875.zip
Add missing DispenseBehavior for Fireworks. Fixes SPIGOT-135
Diffstat (limited to 'nms-patches')
-rw-r--r--nms-patches/DispenseBehaviorFireworks.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/nms-patches/DispenseBehaviorFireworks.patch b/nms-patches/DispenseBehaviorFireworks.patch
new file mode 100644
index 00000000..b4896bbb
--- /dev/null
+++ b/nms-patches/DispenseBehaviorFireworks.patch
@@ -0,0 +1,52 @@
+--- ../work/decompile-8eb82bde//net/minecraft/server/DispenseBehaviorFireworks.java Sat Dec 6 21:12:00 2014
++++ src/main/java/net/minecraft/server/DispenseBehaviorFireworks.java Sat Dec 6 21:11:47 2014
+@@ -1,5 +1,8 @@
+ package net.minecraft.server;
+
++import org.bukkit.craftbukkit.inventory.CraftItemStack;
++import org.bukkit.event.block.BlockDispenseEvent;
++
+ final class DispenseBehaviorFireworks extends DispenseBehaviorItem {
+
+ DispenseBehaviorFireworks() {}
+@@ -9,10 +12,38 @@
+ double d0 = isourceblock.getX() + (double) enumdirection.getAdjacentX();
+ double d1 = (double) ((float) isourceblock.getBlockPosition().getY() + 0.2F);
+ double d2 = isourceblock.getZ() + (double) enumdirection.getAdjacentZ();
+- EntityFireworks entityfireworks = new EntityFireworks(isourceblock.i(), d0, d1, d2, itemstack);
+
++ // CraftBukkit start
++ World world = isourceblock.i();
++ ItemStack itemstack1 = itemstack.a(1);
++ org.bukkit.block.Block block = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
++ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack1);
++
++ BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(d0, d1, d2));
++ if (!BlockDispenser.eventFired) {
++ world.getServer().getPluginManager().callEvent(event);
++ }
++
++ if (event.isCancelled()) {
++ itemstack.count++;
++ return itemstack;
++ }
++
++ if (!event.getItem().equals(craftItem)) {
++ itemstack.count++;
++ // Chain to handler for new item
++ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
++ IDispenseBehavior idispensebehavior = (IDispenseBehavior) BlockDispenser.M.get(eventStack.getItem());
++ if (idispensebehavior != IDispenseBehavior.a && idispensebehavior != this) {
++ idispensebehavior.a(isourceblock, eventStack);
++ return itemstack;
++ }
++ }
++
++ EntityFireworks entityfireworks = new EntityFireworks(isourceblock.i(), d0, d1, d2, itemstack);
+ isourceblock.i().addEntity(entityfireworks);
+- itemstack.a(1);
++ // itemstack.a(1); // Handled during event processing
++ // CraftBukkit end
+ return itemstack;
+ }
+