From 3c58c05c8c7db2ddef606c541b662d2f5fcc76cb Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Tue, 22 Jun 2021 20:00:11 +0100 Subject: [PATCH] Ensure disconnect for book edit is called on main --- ...nect-for-book-edit-is-called-on-main.patch | 19 ++++++++++ ...ck-event-being-fired-off-main-thread.patch | 37 ------------------- 2 files changed, 19 insertions(+), 37 deletions(-) create mode 100644 patches/server/0719-Ensure-disconnect-for-book-edit-is-called-on-main.patch delete mode 100644 patches/server/0719-Fix-kick-event-being-fired-off-main-thread.patch diff --git a/patches/server/0719-Ensure-disconnect-for-book-edit-is-called-on-main.patch b/patches/server/0719-Ensure-disconnect-for-book-edit-is-called-on-main.patch new file mode 100644 index 000000000..9a84f362c --- /dev/null +++ b/patches/server/0719-Ensure-disconnect-for-book-edit-is-called-on-main.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Shane Freeder +Date: Tue, 22 Jun 2021 19:58:53 +0100 +Subject: [PATCH] Ensure disconnect for book edit is called on main + + +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 0c295854f31422cf3ad699d229805c5881a65eed..8708eb173fbb17cf84a0c6d9a42623750472f650 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -1101,7 +1101,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser + // Paper end + // CraftBukkit start + if (this.lastBookTick + 20 > MinecraftServer.currentTick) { +- this.disconnect("Book edited too quickly!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause ++ server.scheduleOnMain(() -> this.disconnect("Book edited too quickly!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause // Paper - Also ensure this is called on main + return; + } + this.lastBookTick = MinecraftServer.currentTick; diff --git a/patches/server/0719-Fix-kick-event-being-fired-off-main-thread.patch b/patches/server/0719-Fix-kick-event-being-fired-off-main-thread.patch deleted file mode 100644 index 579beb829..000000000 --- a/patches/server/0719-Fix-kick-event-being-fired-off-main-thread.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Shane Freeder -Date: Tue, 22 Jun 2021 19:32:19 +0100 -Subject: [PATCH] Fix kick event being fired off main thread - - -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 0c295854f31422cf3ad699d229805c5881a65eed..c4fcab527c35eee94f88c7e499b9d2959d704808 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -108,6 +108,7 @@ import net.minecraft.network.protocol.game.ServerboundTeleportToEntityPacket; - import net.minecraft.network.protocol.game.ServerboundUseItemOnPacket; - import net.minecraft.network.protocol.game.ServerboundUseItemPacket; - import net.minecraft.resources.ResourceLocation; -+import net.minecraft.server.MCUtil; - import net.minecraft.server.MinecraftServer; - import net.minecraft.server.level.ServerLevel; - import net.minecraft.server.level.ServerPlayer; -@@ -440,11 +441,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser - } - net.kyori.adventure.text.Component leaveMessage = net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, this.player.getBukkitEntity().displayName()); // Paper - Adventure - -- PlayerKickEvent event = new PlayerKickEvent(this.player.getBukkitEntity(), reason, leaveMessage, cause); // Paper - Adventure & kick event reason -+ // Paper start - ensire kick event is fired on main -+ final PlayerKickEvent event = MCUtil.ensureMain(() -> { -+ PlayerKickEvent playerKickEvent = new PlayerKickEvent(this.player.getBukkitEntity(), reason, leaveMessage, cause); // Paper - Adventure & kick event reason - - if (this.cserver.getServer().isRunning()) { -- this.cserver.getPluginManager().callEvent(event); -+ this.cserver.getPluginManager().callEvent(playerKickEvent); - } -+ return playerKickEvent; -+ }); -+ // Paper end - - if (event.isCancelled()) { - // Do not kick the player