3
0
Mirror von https://github.com/PaperMC/Paper.git synchronisiert 2024-12-18 20:40:08 +01:00

Don't update physics until after the place event. Fixes BUKKIT-3316

If you cancel a BlockPlaceEvent for a sign the world is updated as if
the block was placed and then destroyed. To avoid this we set the block
without updating physics then apply the update after the event.
Dieser Commit ist enthalten in:
Wizjany 2012-12-27 13:55:32 -05:00 committet von Travis Watkins
Ursprung 49da990ee3
Commit 5963da294f

Datei anzeigen

@ -48,17 +48,23 @@ public class ItemSign extends Item {
if (l == 1) { if (l == 1) {
int i1 = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; int i1 = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15;
world.setTypeIdAndData(i, j, k, Block.SIGN_POST.id, i1); // CraftBukkit start - sign
world.setRawTypeIdAndData(i, j, k, Block.SIGN_POST.id, i1);
} else { } else {
world.setTypeIdAndData(i, j, k, Block.WALL_SIGN.id, l); world.setRawTypeIdAndData(i, j, k, Block.WALL_SIGN.id, l);
} }
// CraftBukkit start - sign
org.bukkit.event.block.BlockPlaceEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ); org.bukkit.event.block.BlockPlaceEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ);
if (event.isCancelled() || !event.canBuild()) { if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false); event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
return false; return false;
} else {
if (l == 1) {
world.update(i, j, k, Block.SIGN_POST.id);
} else {
world.update(i, j, k, Block.WALL_SIGN.id);
}
} }
// CraftBukkit end // CraftBukkit end