hollow-cube/block-interact-ack-fix

(cherry picked from commit 1f1a2bf196)
This commit is contained in:
mworzala 2023-06-15 19:55:05 -04:00 committed by Matt Worzala
parent 969e0d6643
commit a18485e61e
2 changed files with 19 additions and 0 deletions

View File

@ -117,6 +117,23 @@ public class PlayerInit {
})
.addListener(PlayerPacketEvent.class, event -> {
//System.out.println("in " + event.getPacket().getClass().getSimpleName());
})
.addListener(PlayerUseItemOnBlockEvent.class, event -> {
if (event.getHand() != Player.Hand.MAIN) return;
var itemStack = event.getItemStack();
var block = event.getInstance().getBlock(event.getPosition());
if ("false".equals(block.getProperty("waterlogged")) && itemStack.material().equals(Material.WATER_BUCKET)) {
block = block.withProperty("waterlogged", "true");
System.out.println("SET WATERLOGGER");
} else if ("true".equals(block.getProperty("waterlogged")) && itemStack.material().equals(Material.BUCKET)) {
block = block.withProperty("waterlogged", "false");
System.out.println("SET NOT WATERLOGGED");
} else return;
event.getInstance().setBlock(event.getPosition(), block);
});
static {

View File

@ -75,6 +75,8 @@ public class BlockPlacementListener {
// Player didn't try to place a block but interacted with one
PlayerUseItemOnBlockEvent event = new PlayerUseItemOnBlockEvent(player, hand, usedItem, blockPosition, cursorPosition, blockFace);
EventDispatcher.call(event);
// Ack the block change. This is required to reset the client prediction to the server state.
player.sendPacket(new AcknowledgeBlockChangePacket(packet.sequence()));
return;
}