72e87abc2d
Co-authored-by: Paul Sauve <paul@technove.co>
69 Zeilen
4.5 KiB
Diff
69 Zeilen
4.5 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 b0204af850ee182773ad458208cccd946ad148d5..ebee8de2ed831755b6fd154f6cc77ac993839bb9 100644
|
|
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
|
|
@@ -131,7 +131,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 - reintroduce this for the dispenser (i.e the shulker)
|
|
world.gameEvent(GameEvent.BLOCK_PLACE, blockposition, GameEvent.Context.of(entityhuman, iblockdata1));
|
|
if ((entityhuman == null || !entityhuman.getAbilities().instabuild) && itemstack != ItemStack.EMPTY) { // CraftBukkit
|
|
itemstack.shrink(1);
|
|
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
index c9363f01b3c2369d5c63e50977c28a3fa760bae1..6f00794aec16db3e7a466f4b446d38bdb2623e8b 100644
|
|
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
@@ -467,13 +467,7 @@ public final class ItemStack {
|
|
if (tileentity instanceof JukeboxBlockEntity) {
|
|
JukeboxBlockEntity tileentityjukebox = (JukeboxBlockEntity) tileentity;
|
|
|
|
- // There can only be one
|
|
- ItemStack record = this.copy();
|
|
- if (!record.isEmpty()) {
|
|
- record.setCount(1);
|
|
- }
|
|
-
|
|
- tileentityjukebox.setFirstItem(record);
|
|
+ tileentityjukebox.setFirstItem(this.copy()); // Paper - 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 c24944d24d6e40e853823e6e2653275553157b1f..773bfdd3ed457a352b5329f280c0d10297d579ba 100644
|
|
--- a/src/main/java/net/minecraft/world/level/Level.java
|
|
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
|
@@ -730,17 +730,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
|
|
if (world != null && ((ServerLevel)this).hasPhysicsEvent) { // Paper
|
|
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
|
|
}
|
|
// CraftBukkit end
|
|
+ if (!cancelledUpdates) { // Paper
|
|
iblockdata.updateNeighbourShapes(this, blockposition, k, j - 1);
|
|
iblockdata.updateIndirectNeighbourShapes(this, blockposition, k, j - 1);
|
|
+ } // Paper
|
|
}
|
|
|
|
// CraftBukkit start - SPIGOT-5710
|