mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-04 16:34:44 +01:00
6e71f41536
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: 65247583f SPIGOT-7857: Improve ItemMeta block data deserialization 05d80500d SPIGOT-7857: Fix spurious internal NBT tag when deserializing BlockStateMeta cebb58e9a SPIGOT-7804: Fix written book serialization efcdd5d38 SPIGOT-7794: Cancelling InventoryItemMoveEvent destroys items b568ba572 SPIGOT-7789: Fix NPE in CraftMetaFirework applyToItem f057cf449 Remove outdated build delay Spigot Changes: f6a48054 SPIGOT-7835: Fix issue with custom hopper settings bb63b137 Rebuild patches e1142b4d Rebuild patches
89 lines
5.4 KiB
Diff
89 lines
5.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
|
|
Date: Sat, 29 Oct 2022 15:41:56 +0200
|
|
Subject: [PATCH] Call missing BlockDispenseEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
|
index 9507dbbb4b490149b9248c384be5adaccae40c41..5bbadc890a72f1cb22c6881ebcc163b0c06a367a 100644
|
|
--- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
|
+++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
|
@@ -898,6 +898,13 @@ public interface DispenseItemBehavior {
|
|
this.setSuccess(true);
|
|
if (iblockdata.is(Blocks.RESPAWN_ANCHOR)) {
|
|
if ((Integer) iblockdata.getValue(RespawnAnchorBlock.CHARGE) != 4) {
|
|
+ // Paper start - Call missing BlockDispenseEvent
|
|
+ ItemStack result = org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDispenseEvent(pointer, blockposition, stack, this);
|
|
+ if (result != null) {
|
|
+ this.setSuccess(false);
|
|
+ return result;
|
|
+ }
|
|
+ // Paper end - Call missing BlockDispenseEvent
|
|
RespawnAnchorBlock.charge((Entity) null, worldserver, blockposition, iblockdata);
|
|
stack.shrink(1);
|
|
} else {
|
|
@@ -977,6 +984,13 @@ public interface DispenseItemBehavior {
|
|
Optional<BlockState> optional = HoneycombItem.getWaxed(iblockdata);
|
|
|
|
if (optional.isPresent()) {
|
|
+ // Paper start - Call missing BlockDispenseEvent
|
|
+ ItemStack result = org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDispenseEvent(pointer, blockposition, stack, this);
|
|
+ if (result != null) {
|
|
+ this.setSuccess(false);
|
|
+ return result;
|
|
+ }
|
|
+ // Paper end - Call missing BlockDispenseEvent
|
|
worldserver.setBlockAndUpdate(blockposition, (BlockState) optional.get());
|
|
worldserver.levelEvent(3003, blockposition, 0);
|
|
stack.shrink(1);
|
|
@@ -1004,6 +1018,12 @@ public interface DispenseItemBehavior {
|
|
if (!worldserver.getBlockState(blockposition1).is(BlockTags.CONVERTABLE_TO_MUD)) {
|
|
return this.defaultDispenseItemBehavior.dispense(pointer, stack);
|
|
} else {
|
|
+ // Paper start - Call missing BlockDispenseEvent
|
|
+ ItemStack result = org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDispenseEvent(pointer, blockposition1, stack, this);
|
|
+ if (result != null) {
|
|
+ return result;
|
|
+ }
|
|
+ // Paper end - Call missing BlockDispenseEvent
|
|
if (!worldserver.isClientSide) {
|
|
for (int k = 0; k < 5; ++k) {
|
|
worldserver.sendParticles(ParticleTypes.SPLASH, (double) blockposition.getX() + worldserver.random.nextDouble(), (double) (blockposition.getY() + 1), (double) blockposition.getZ() + worldserver.random.nextDouble(), 1, 0.0D, 0.0D, 0.0D, 1.0D);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index f4ca35e044e41b3fd1b83c482a5c19d188ea0bae..16f183c8e81b8c22ca51387e9e35282ed20d651c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -2121,6 +2121,32 @@ public class CraftEventFactory {
|
|
}
|
|
// Paper end
|
|
|
|
+ // Paper start - Call missing BlockDispenseEvent
|
|
+ @Nullable
|
|
+ public static ItemStack handleBlockDispenseEvent(net.minecraft.core.dispenser.BlockSource pointer, BlockPos to, ItemStack itemStack, net.minecraft.core.dispenser.DispenseItemBehavior instance) {
|
|
+ org.bukkit.block.Block bukkitBlock = CraftBlock.at(pointer.level(), pointer.pos());
|
|
+ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemStack.copyWithCount(1));
|
|
+
|
|
+ org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(bukkitBlock, craftItem.clone(), CraftVector.toBukkit(to));
|
|
+ if (!net.minecraft.world.level.block.DispenserBlock.eventFired) {
|
|
+ if (!event.callEvent()) {
|
|
+ return itemStack;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (!event.getItem().equals(craftItem)) {
|
|
+ // Chain to handler for new item
|
|
+ ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem());
|
|
+ net.minecraft.core.dispenser.DispenseItemBehavior itemBehavior = net.minecraft.world.level.block.DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem());
|
|
+ if (itemBehavior != net.minecraft.core.dispenser.DispenseItemBehavior.NOOP && itemBehavior != instance) {
|
|
+ itemBehavior.dispense(pointer, eventStack);
|
|
+ return itemStack;
|
|
+ }
|
|
+ }
|
|
+ return null;
|
|
+ }
|
|
+ // Paper end - Call missing BlockDispenseEvent
|
|
+
|
|
// Paper start - add EntityFertilizeEggEvent
|
|
/**
|
|
* Calls the {@link io.papermc.paper.event.entity.EntityFertilizeEggEvent}.
|