mirror of https://github.com/PaperMC/Paper.git
62 lines
3.0 KiB
Diff
62 lines
3.0 KiB
Diff
--- a/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java
|
|
+++ b/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java
|
|
@@ -12,6 +12,11 @@
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraft.world.level.block.DispenserBlock;
|
|
import net.minecraft.world.phys.Vec3;
|
|
+// CraftBukkit start
|
|
+import org.bukkit.craftbukkit.block.CraftBlock;
|
|
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
+import org.bukkit.event.block.BlockDispenseEvent;
|
|
+// CraftBukkit end
|
|
|
|
public class BoatDispenseItemBehavior extends DefaultDispenseItemBehavior {
|
|
|
|
@@ -52,13 +56,41 @@
|
|
d4 = 0.0D;
|
|
}
|
|
|
|
- Object object = this.isChestBoat ? new ChestBoat(serverlevel, d1, d2 + d4, d3) : new Boat(serverlevel, d1, d2 + d4, d3);
|
|
+ // Object object = this.isChestBoat ? new ChestBoat(worldserver, d1, d2 + d4, d3) : new EntityBoat(worldserver, d1, d2 + d4, d3);
|
|
+ // CraftBukkit start
|
|
+ ItemStack itemstack1 = itemstack.split(1);
|
|
+ org.bukkit.block.Block block = CraftBlock.at(worldserver, sourceblock.pos());
|
|
+ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack1);
|
|
|
|
- EntityType.createDefaultStackConfig(serverlevel, itemstack, (Player) null).accept(object);
|
|
+ BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(d1, d2 + d4, d3));
|
|
+ if (!DispenserBlock.eventFired) {
|
|
+ worldserver.getCraftServer().getPluginManager().callEvent(event);
|
|
+ }
|
|
+
|
|
+ if (event.isCancelled()) {
|
|
+ itemstack.grow(1);
|
|
+ return itemstack;
|
|
+ }
|
|
+
|
|
+ if (!event.getItem().equals(craftItem)) {
|
|
+ itemstack.grow(1);
|
|
+ // Chain to handler for new item
|
|
+ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
|
|
+ DispenseItemBehavior idispensebehavior = (DispenseItemBehavior) DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem());
|
|
+ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != this) {
|
|
+ idispensebehavior.dispense(sourceblock, eventStack);
|
|
+ return itemstack;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ Boat object = this.isChestBoat ? new ChestBoat(worldserver, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ()) : new Boat(worldserver, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ());
|
|
+ // CraftBukkit end
|
|
+
|
|
+ EntityType.createDefaultStackConfig(worldserver, itemstack, (Player) null).accept(object);
|
|
((Boat) object).setVariant(this.type);
|
|
- ((Boat) object).setYRot(direction.toYRot());
|
|
- serverlevel.addFreshEntity((Entity) object);
|
|
- itemstack.shrink(1);
|
|
+ ((Boat) object).setYRot(enumdirection.toYRot());
|
|
+ if (!worldserver.addFreshEntity((Entity) object)) itemstack.grow(1); // CraftBukkit
|
|
+ // itemstack.shrink(1); // CraftBukkit - handled during event processing
|
|
return itemstack;
|
|
}
|
|
|