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
69 lines
4.7 KiB
Diff
69 lines
4.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
|
|
Date: Mon, 3 Apr 2023 18:46:49 +0200
|
|
Subject: [PATCH] Fix block place logic
|
|
|
|
Fix several issues when a player interact with a block:
|
|
* the place sound isn't played for the dispensed shulker block
|
|
* desync of the jukebox blocks between bukkit handler and the vanilla interaction
|
|
* poi can desync when the BlockPhysicsEvent is cancelled
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
index 7d76cdc59984b156628273c8357485eb10046007..7180996027f70aef7afe32fb2adfce6431429401 100644
|
|
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
@@ -128,7 +128,7 @@ public class BlockItem extends Item {
|
|
|
|
SoundType soundeffecttype = iblockdata1.getSoundType();
|
|
|
|
- // world.playSound(entityhuman, blockposition, this.getPlaceSound(iblockdata1), SoundCategory.BLOCKS, (soundeffecttype.getVolume() + 1.0F) / 2.0F, soundeffecttype.getPitch() * 0.8F);
|
|
+ if (entityhuman == null) world.playSound(entityhuman, blockposition, this.getPlaceSound(iblockdata1), net.minecraft.sounds.SoundSource.BLOCKS, (soundeffecttype.getVolume() + 1.0F) / 2.0F, soundeffecttype.getPitch() * 0.8F); // Paper - Fix block place logic; reintroduce this for the dispenser (i.e the shulker)
|
|
world.gameEvent((Holder) GameEvent.BLOCK_PLACE, blockposition, GameEvent.Context.of(entityhuman, iblockdata1));
|
|
itemstack.consume(1, entityhuman);
|
|
return InteractionResult.sidedSuccess(world.isClientSide);
|
|
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
index a158642471ab037ea3b99cac09ba5f3bf282e2a7..7450c53f3d43e401e5219d5ff01868a28ee2c05f 100644
|
|
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
@@ -515,13 +515,7 @@ public final class ItemStack implements DataComponentHolder {
|
|
if (tileentity instanceof JukeboxBlockEntity) {
|
|
JukeboxBlockEntity tileentityjukebox = (JukeboxBlockEntity) tileentity;
|
|
|
|
- // There can only be one
|
|
- ItemStack record = this.copy();
|
|
- if (!record.isEmpty()) {
|
|
- record.setCount(1);
|
|
- }
|
|
-
|
|
- tileentityjukebox.setTheItem(record);
|
|
+ tileentityjukebox.setTheItem(this.copy()); // Paper - Fix block place logic; sync this with record item, jukebox has now an inventory
|
|
world.gameEvent(GameEvent.BLOCK_CHANGE, blockposition, GameEvent.Context.of(entityhuman, world.getBlockState(blockposition)));
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
|
index 0fb975d74b8e91617de91dacb206699ff572a38a..61fc08cac437bd5dd6f3ff7561fab3d4c108388d 100644
|
|
--- a/src/main/java/net/minecraft/world/level/Level.java
|
|
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
|
@@ -553,17 +553,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
|
// CraftBukkit start
|
|
iblockdata1.updateIndirectNeighbourShapes(this, blockposition, k, j - 1); // Don't call an event for the old block to limit event spam
|
|
CraftWorld world = ((ServerLevel) this).getWorld();
|
|
+ boolean cancelledUpdates = false; // Paper - Fix block place logic
|
|
if (world != null && ((ServerLevel)this).hasPhysicsEvent) { // Paper - BlockPhysicsEvent
|
|
BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftBlockData.fromData(iblockdata));
|
|
this.getCraftServer().getPluginManager().callEvent(event);
|
|
|
|
- if (event.isCancelled()) {
|
|
- return;
|
|
- }
|
|
+ cancelledUpdates = event.isCancelled(); // Paper - Fix block place logic
|
|
}
|
|
// CraftBukkit end
|
|
+ if (!cancelledUpdates) { // Paper - Fix block place logic
|
|
iblockdata.updateNeighbourShapes(this, blockposition, k, j - 1);
|
|
iblockdata.updateIndirectNeighbourShapes(this, blockposition, k, j - 1);
|
|
+ } // Paper - Fix block place logic
|
|
}
|
|
|
|
// CraftBukkit start - SPIGOT-5710
|