mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-15 07:01:36 +08:00
fb25dc17c6
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: da08d022 SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN 0cef14e4 Remove draft API from selectEntities CraftBukkit Changes:a46fdbc6
Remove outdated build delay.3697519b
SPIGOT-4708: Fix ExactChoice recipes neglecting material9ead7009
SPIGOT-4677: Add minecraft.admin.command_feedback permissionc3749a23
Remove the Damage tag from items when it is 0.f74c7b95
SPIGOT-4706: Can't interact with active item494eef45
Mention requirement of JIRA ticket for bug fixes51d62dec
SPIGOT-4702: Exception when middle clicking certain slotsbe557e69
SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN
60 lines
3.6 KiB
Diff
60 lines
3.6 KiB
Diff
From b023a389347d6f1fdffb80d751e7b4cd82acc382 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 6ae6afa339..07f9b8d2f7 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) {
|
|
@@ -466,7 +471,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.21.0
|
|
|