geforkt von Mirrors/Paper
8ed2992da9
Portion of diff was dropped in the mappings update commit. Also remove the option to remove invalid statistics. The server will automatically do this now as of... 1.13?, our option wasn't even doing anything.
60 Zeilen
3.6 KiB
Diff
60 Zeilen
3.6 KiB
Diff
From 72636b631f801d3c4b26d04d911d471581daceb7 Mon Sep 17 00:00:00 2001
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
Date: Sun, 11 Feb 2018 10:43:46 +0000
|
|
Subject: [PATCH] Extend Player Interact cancellation
|
|
|
|
GUIs are opened on the client, meaning that the server cannot block them from opening,
|
|
However, it is possible to close these GUIs from the server.
|
|
|
|
Flower pots are also not updated on the client when interaction is cancelled, this patch
|
|
also resolves this.
|
|
|
|
Update adjacent blocks of doors, double plants, pistons and beds
|
|
when cancelling interaction.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
|
index aa7780eff..23223e89d 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
|
@@ -111,6 +111,11 @@ public class PlayerInteractManager {
|
|
if (event.isCancelled()) {
|
|
// Let the client know the block still exists
|
|
((EntityPlayer) this.player).playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition));
|
|
+ // Paper start - brute force neighbor blocks for any attached blocks
|
|
+ for (EnumDirection dir : EnumDirection.values()) {
|
|
+ ((EntityPlayer) this.player).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, blockposition.shift(dir)));
|
|
+ }
|
|
+ // Paper end
|
|
// Update any tile entity data for this block
|
|
TileEntity tileentity = this.world.getTileEntity(blockposition);
|
|
if (tileentity != null) {
|
|
@@ -465,7 +470,25 @@ public class PlayerInteractManager {
|
|
((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, bottom ? blockposition.up() : blockposition.down()));
|
|
} else if (iblockdata.getBlock() instanceof BlockCake) {
|
|
((EntityPlayer) entityhuman).getBukkitEntity().sendHealthUpdate(); // SPIGOT-1341 - reset health for cake
|
|
+ // Paper start - extend Player Interact cancellation // TODO: consider merging this into the extracted method
|
|
+ } else if (iblockdata.getBlock() instanceof BlockStructure) {
|
|
+ ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutCloseWindow());
|
|
+ } else if (iblockdata.getBlock() instanceof BlockCommand) {
|
|
+ ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutCloseWindow());
|
|
+ } else if (iblockdata.getBlock() instanceof BlockFlowerPot) {
|
|
+ // Send a block change to air and then send back the correct block, just to make the client happy
|
|
+ PacketPlayOutBlockChange packet = new PacketPlayOutBlockChange(this.world, blockposition);
|
|
+ packet.block = Blocks.AIR.getBlockData();
|
|
+ this.player.playerConnection.sendPacket(packet);
|
|
+
|
|
+ this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition));
|
|
+
|
|
+ TileEntity tileentity = this.world.getTileEntity(blockposition);
|
|
+ if (tileentity != null) {
|
|
+ player.playerConnection.sendPacket(tileentity.getUpdatePacket());
|
|
+ }
|
|
}
|
|
+ // Paper end - extend Player Interact cancellation
|
|
((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); // SPIGOT-2867
|
|
enuminteractionresult = (event.useItemInHand() != Event.Result.ALLOW) ? EnumInteractionResult.SUCCESS : EnumInteractionResult.PASS;
|
|
} else if (this.gamemode == EnumGamemode.SPECTATOR) {
|
|
--
|
|
2.20.0
|
|
|