From 0911c7a58ae8e90ecaf07697501678558372ba08 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Sun, 19 Mar 2023 14:53:06 -0700 Subject: [PATCH] Remove patches specific for stream Specifically, the /msg and /me command removal and the operator only chat. Additionally, remove the TPA commands. --- patches/server/0004-Threaded-Regions.patch | 371 +----------------- ...ns.patch => 0007-Max-pending-logins.patch} | 0 patches/server/0007-Stream-mode.patch | 79 ---- ...k-system-throughput-counters-to-tps.patch} | 0 ...getHandle-and-overrides-perform-thr.patch} | 0 5 files changed, 2 insertions(+), 448 deletions(-) rename patches/server/{0008-Max-pending-logins.patch => 0007-Max-pending-logins.patch} (100%) delete mode 100644 patches/server/0007-Stream-mode.patch rename patches/server/{0009-Add-chunk-system-throughput-counters-to-tps.patch => 0008-Add-chunk-system-throughput-counters-to-tps.patch} (100%) rename patches/server/{0010-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch => 0009-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch} (100%) diff --git a/patches/server/0004-Threaded-Regions.patch b/patches/server/0004-Threaded-Regions.patch index 4bf2b0e..882ab58 100644 --- a/patches/server/0004-Threaded-Regions.patch +++ b/patches/server/0004-Threaded-Regions.patch @@ -3217,17 +3217,14 @@ index 92154550b41b2e1d03deb1271b71bb3baa735e0a..bc97ad0ae019edb52e189e44d0d69897 return commands.entrySet().stream() diff --git a/src/main/java/io/papermc/paper/command/PaperCommands.java b/src/main/java/io/papermc/paper/command/PaperCommands.java -index d31b5ed47cffc61c90c926a0cd2005b72ebddfc5..9b9c5bda073914a0588d4a6c8b584e5ce23468d8 100644 +index d31b5ed47cffc61c90c926a0cd2005b72ebddfc5..0bc4ba2b8718d399223fdf10b970c0fcf4cf28b7 100644 --- a/src/main/java/io/papermc/paper/command/PaperCommands.java +++ b/src/main/java/io/papermc/paper/command/PaperCommands.java -@@ -17,7 +17,10 @@ public final class PaperCommands { +@@ -17,7 +17,7 @@ public final class PaperCommands { private static final Map COMMANDS = new HashMap<>(); static { COMMANDS.put("paper", new PaperCommand("paper")); - COMMANDS.put("mspt", new MSPTCommand("mspt")); -+ COMMANDS.put("tpa", new io.papermc.paper.threadedregions.commands.CommandsTPA()); // Folia - region threading -+ COMMANDS.put("tpaaccept", new io.papermc.paper.threadedregions.commands.CommandsTPAAccept()); // Folia - region threading -+ COMMANDS.put("tpadeny", new io.papermc.paper.threadedregions.commands.CommandsTPADeny()); // Folia - region threading + COMMANDS.put("tps", new io.papermc.paper.threadedregions.commands.CommandServerHealth()); // Folia - region threading } @@ -8880,370 +8877,6 @@ index 0000000000000000000000000000000000000000..d016294fc7eafbddf6d2a758e5803498 + + private CommandUtil() {} +} -diff --git a/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPA.java b/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPA.java -new file mode 100644 -index 0000000000000000000000000000000000000000..2861e0a2e1182bc8fd142acbf63facbcf6a392dc ---- /dev/null -+++ b/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPA.java -@@ -0,0 +1,138 @@ -+package io.papermc.paper.threadedregions.commands; -+ -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.event.ClickEvent; -+import net.kyori.adventure.text.event.HoverEvent; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.level.ServerPlayer; -+import org.bukkit.command.Command; -+import org.bukkit.command.CommandSender; -+import org.bukkit.craftbukkit.entity.CraftPlayer; -+import java.util.ArrayList; -+import java.util.List; -+import java.util.function.Function; -+ -+public final class CommandsTPA extends Command { -+ -+ public CommandsTPA() { -+ super("tpa"); -+ this.setUsage("/ "); -+ } -+ -+ @Override -+ public boolean testPermissionSilent(final CommandSender target) { -+ return true; -+ } -+ -+ @Override -+ public boolean execute(final CommandSender sender, final String commandLabel, final String[] args) { -+ if (!(sender instanceof CraftPlayer playerSender)) { -+ sender.sendMessage(commandLabel + " only works for players"); -+ return true; -+ } -+ -+ if (args.length != 1) { -+ sender.sendMessage(Component.text("Usage: /" + commandLabel + " ", NamedTextColor.DARK_RED)); -+ return true; -+ } -+ -+ final ServerPlayer target = CommandUtil.getPlayer(args[0]); -+ -+ if (target == null) { -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("Found no such player ", NamedTextColor.DARK_RED)) -+ .append(Component.text(args[0], NamedTextColor.RED)) -+ .build() -+ ); -+ return true; -+ } -+ -+ if (target == playerSender.getHandle()) { -+ sender.sendMessage(Component.text("Cannot tpa to yourself!", NamedTextColor.DARK_RED)); -+ return true; -+ } -+ -+ final String targetName = target.getGameProfile().getName(); -+ -+ if (!target.pendingTpas.add(playerSender.getUniqueId())) { -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("You already have a tpa request to ", NamedTextColor.DARK_RED)) -+ .append(Component.text(targetName, NamedTextColor.RED)) -+ .build() -+ ); -+ return true; -+ } -+ -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("Sent tpa request to ", NamedTextColor.GRAY)) -+ .append(Component.text(targetName, NamedTextColor.RED)) -+ .build() -+ ); -+ target.getBukkitEntity().sendMessage( -+ Component.text() -+ .append(Component.text(playerSender.getName(), NamedTextColor.RED)) -+ .append(Component.text(" has requested to teleport to you!\n", NamedTextColor.GRAY)) -+ .append( -+ Component.text() -+ .append(Component.text("Run or click ", NamedTextColor.GRAY)) -+ .append(Component.text("/tpaaccept ", NamedTextColor.DARK_GREEN)) -+ .append(Component.text(playerSender.getName(), NamedTextColor.GREEN)) -+ .append(Component.text(" to accept\n", NamedTextColor.GRAY)) -+ .build() -+ .clickEvent(ClickEvent.runCommand("/tpaaccept " + playerSender.getName())) -+ .hoverEvent( -+ HoverEvent.showText( -+ Component.text() -+ .append(Component.text("Click to accept tpa request from ", NamedTextColor.DARK_GREEN)) -+ .append(Component.text(playerSender.getName(), NamedTextColor.GREEN)) -+ ) -+ ) -+ ) -+ .append( -+ Component.text() -+ .append(Component.text("Run or click ", NamedTextColor.GRAY)) -+ .append(Component.text("/tpadeny ", NamedTextColor.DARK_RED)) -+ .append(Component.text(playerSender.getName(), NamedTextColor.RED)) -+ .append(Component.text(" to deny", NamedTextColor.GRAY)) -+ .build() -+ .clickEvent(ClickEvent.runCommand("/tpadeny " + playerSender.getName())) -+ .hoverEvent( -+ HoverEvent.showText( -+ Component.text() -+ .append(Component.text("Click to reject tpa request from ", NamedTextColor.DARK_RED)) -+ .append(Component.text(playerSender.getName(), NamedTextColor.RED)) -+ ) -+ ) -+ ) -+ .build() -+ ); -+ -+ return true; -+ } -+ -+ @Override -+ public List tabComplete(final CommandSender sender, final String alias, -+ final String[] args) throws IllegalArgumentException { -+ if (!(sender instanceof CraftPlayer)) { -+ return new ArrayList<>(); -+ } -+ -+ final List players = MinecraftServer.getServer().getPlayerList().players; -+ -+ final Function playerToName = (final ServerPlayer value) -> { -+ return value.getGameProfile().getName(); -+ }; -+ -+ if (args.length == 0) { -+ return CommandUtil.getSortedList(players, playerToName); -+ } else if (args.length == 1) { -+ return CommandUtil.getSortedList(players, playerToName, args[0]); -+ } -+ -+ return new ArrayList<>(); -+ } -+} -diff --git a/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPAAccept.java b/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPAAccept.java -new file mode 100644 -index 0000000000000000000000000000000000000000..b648d67f3ade11172af4ed76d6d14de7ca39c5d6 ---- /dev/null -+++ b/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPAAccept.java -@@ -0,0 +1,109 @@ -+package io.papermc.paper.threadedregions.commands; -+ -+import io.papermc.paper.threadedregions.TeleportUtils; -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.level.ServerPlayer; -+import net.minecraft.world.entity.Entity; -+import org.bukkit.command.Command; -+import org.bukkit.command.CommandSender; -+import org.bukkit.craftbukkit.entity.CraftPlayer; -+import org.bukkit.event.player.PlayerTeleportEvent; -+import java.util.ArrayList; -+import java.util.List; -+import java.util.function.Function; -+ -+public final class CommandsTPAAccept extends Command { -+ -+ public CommandsTPAAccept() { -+ super("tpaaccept"); -+ this.setUsage("/ "); -+ } -+ -+ @Override -+ public boolean testPermissionSilent(final CommandSender target) { -+ return true; -+ } -+ -+ @Override -+ public boolean execute(final CommandSender sender, final String commandLabel, final String[] args) { -+ if (!(sender instanceof CraftPlayer playerSender)) { -+ sender.sendMessage(commandLabel + " only works for players"); -+ return true; -+ } -+ -+ if (args.length != 1) { -+ sender.sendMessage(Component.text("Usage: /" + commandLabel + " ", NamedTextColor.DARK_RED)); -+ return true; -+ } -+ -+ final ServerPlayer target = CommandUtil.getPlayer(args[0]); -+ -+ if (target == null) { -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("Found no such player ", NamedTextColor.DARK_RED)) -+ .append(Component.text(args[0], NamedTextColor.RED)) -+ .build() -+ ); -+ return true; -+ } -+ -+ if (!playerSender.getHandle().pendingTpas.remove(target.getUUID())) { -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("No tpa request to accept from ", NamedTextColor.DARK_RED)) -+ .append(Component.text(args[0], NamedTextColor.RED)) -+ .build() -+ ); -+ return true; -+ } -+ -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("Accepted tpa request from ", NamedTextColor.GRAY)) -+ .append(Component.text(target.getGameProfile().getName(), NamedTextColor.GREEN)) -+ .build() -+ ); -+ target.getBukkitEntity().sendMessage( -+ Component.text() -+ .append(Component.text(playerSender.getName(), NamedTextColor.GREEN)) -+ .append(Component.text(" accepted", NamedTextColor.DARK_GREEN)) -+ .append(Component.text(" your tpa request!", NamedTextColor.GRAY)) -+ .build() -+ ); -+ -+ TeleportUtils.teleport( -+ target, true, playerSender.getHandle(), -+ Float.valueOf(playerSender.getHandle().getYRot()), Float.valueOf(playerSender.getHandle().getXRot()), -+ Entity.TELEPORT_FLAG_LOAD_CHUNK | Entity.TELEPORT_FLAG_TELEPORT_PASSENGERS, -+ PlayerTeleportEvent.TeleportCause.COMMAND, null -+ ); -+ -+ return true; -+ } -+ -+ @Override -+ public List tabComplete(final CommandSender sender, final String alias, -+ final String[] args) throws IllegalArgumentException { -+ if (!(sender instanceof CraftPlayer playerSender)) { -+ return new ArrayList<>(); -+ } -+ -+ final List players = MinecraftServer.getServer().getPlayerList().players; -+ -+ // The laziest implementation possible. -+ final Function playerToName = (final ServerPlayer value) -> { -+ return playerSender.getHandle().pendingTpas.contains(value.getUUID()) ? value.getGameProfile().getName() : null; -+ }; -+ -+ if (args.length == 0) { -+ return CommandUtil.getSortedList(players, playerToName); -+ } else if (args.length == 1) { -+ return CommandUtil.getSortedList(players, playerToName, args[0]); -+ } -+ -+ return new ArrayList<>(); -+ } -+} -diff --git a/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPADeny.java b/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPADeny.java -new file mode 100644 -index 0000000000000000000000000000000000000000..5bf205d8c0a03ba932be85cc1a63d6cea304b517 ---- /dev/null -+++ b/src/main/java/io/papermc/paper/threadedregions/commands/CommandsTPADeny.java -@@ -0,0 +1,99 @@ -+package io.papermc.paper.threadedregions.commands; -+ -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.level.ServerPlayer; -+import org.bukkit.command.Command; -+import org.bukkit.command.CommandSender; -+import org.bukkit.craftbukkit.entity.CraftPlayer; -+import java.util.ArrayList; -+import java.util.List; -+import java.util.function.Function; -+ -+public final class CommandsTPADeny extends Command { -+ -+ public CommandsTPADeny() { -+ super("tpadeny"); -+ this.setUsage("/ "); -+ } -+ -+ @Override -+ public boolean testPermissionSilent(final CommandSender target) { -+ return true; -+ } -+ -+ @Override -+ public boolean execute(final CommandSender sender, final String commandLabel, final String[] args) { -+ if (!(sender instanceof CraftPlayer playerSender)) { -+ sender.sendMessage(commandLabel + " only works for players"); -+ return true; -+ } -+ -+ if (args.length != 1) { -+ sender.sendMessage(Component.text("Usage: /" + commandLabel + " ", NamedTextColor.DARK_RED)); -+ return true; -+ } -+ -+ final ServerPlayer target = CommandUtil.getPlayer(args[0]); -+ -+ if (target == null) { -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("Found no such player ", NamedTextColor.DARK_RED)) -+ .append(Component.text(args[0], NamedTextColor.RED)) -+ .build() -+ ); -+ return true; -+ } -+ -+ if (!playerSender.getHandle().pendingTpas.remove(target.getUUID())) { -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("No tpa request to reject from ", NamedTextColor.DARK_RED)) -+ .append(Component.text(args[0], NamedTextColor.RED)) -+ .build() -+ ); -+ return true; -+ } -+ -+ sender.sendMessage( -+ Component.text() -+ .append(Component.text("Rejected tpa request from ", NamedTextColor.GRAY)) -+ .append(Component.text(target.getGameProfile().getName(), NamedTextColor.GREEN)) -+ .build() -+ ); -+ target.getBukkitEntity().sendMessage( -+ Component.text() -+ .append(Component.text(playerSender.getName(), NamedTextColor.RED)) -+ .append(Component.text(" rejected", NamedTextColor.DARK_RED)) -+ .append(Component.text(" your tpa request!", NamedTextColor.GRAY)) -+ .build() -+ ); -+ -+ return true; -+ } -+ -+ @Override -+ public List tabComplete(final CommandSender sender, final String alias, -+ final String[] args) throws IllegalArgumentException { -+ if (!(sender instanceof CraftPlayer playerSender)) { -+ return new ArrayList<>(); -+ } -+ -+ final List players = MinecraftServer.getServer().getPlayerList().players; -+ -+ // The laziest implementation possible. -+ final Function playerToName = (final ServerPlayer value) -> { -+ return playerSender.getHandle().pendingTpas.contains(value.getUUID()) ? value.getGameProfile().getName() : null; -+ }; -+ -+ if (args.length == 0) { -+ return CommandUtil.getSortedList(players, playerToName); -+ } else if (args.length == 1) { -+ return CommandUtil.getSortedList(players, playerToName, args[0]); -+ } -+ -+ return new ArrayList<>(); -+ } -+} diff --git a/src/main/java/io/papermc/paper/threadedregions/scheduler/FoliaEntityScheduler.java b/src/main/java/io/papermc/paper/threadedregions/scheduler/FoliaEntityScheduler.java new file mode 100644 index 0000000000000000000000000000000000000000..c0b9f43fc53a5c9b3d9788f080e4fd3f4f94ebfe diff --git a/patches/server/0008-Max-pending-logins.patch b/patches/server/0007-Max-pending-logins.patch similarity index 100% rename from patches/server/0008-Max-pending-logins.patch rename to patches/server/0007-Max-pending-logins.patch diff --git a/patches/server/0007-Stream-mode.patch b/patches/server/0007-Stream-mode.patch deleted file mode 100644 index dd560cd..0000000 --- a/patches/server/0007-Stream-mode.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Thu, 9 Mar 2023 19:46:04 -0800 -Subject: [PATCH] Stream mode - -We need to disable chat for the public test, because people -will want to play "get x banned from twitch any %" - -diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 22f06033a731c3ba1b815842be7a9d575fa820f2..93262f2ade2e9f70377bbf9acfe1a02e741e68d4 100644 ---- a/src/main/java/net/minecraft/commands/Commands.java -+++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -138,7 +138,7 @@ public class Commands { - this(); // CraftBukkit - AdvancementCommands.register(this.dispatcher); - AttributeCommand.register(this.dispatcher, commandRegistryAccess); -- ExecuteCommand.register(this.dispatcher, commandRegistryAccess); -+ ExecuteCommand.register(this.dispatcher, commandRegistryAccess); // Folia - stream mode - //BossBarCommands.register(this.dispatcher); // Folia - region threading - TODO - ClearInventoryCommands.register(this.dispatcher, commandRegistryAccess); - //CloneCommands.register(this.dispatcher, commandRegistryAccess); // Folia - region threading - TODO -@@ -148,7 +148,7 @@ public class Commands { - DefaultGameModeCommands.register(this.dispatcher); - DifficultyCommand.register(this.dispatcher); - EffectCommands.register(this.dispatcher, commandRegistryAccess); -- EmoteCommands.register(this.dispatcher); -+ //EmoteCommands.register(this.dispatcher); // Folia - stream mode - EnchantCommand.register(this.dispatcher, commandRegistryAccess); - ExperienceCommand.register(this.dispatcher); - FillCommand.register(this.dispatcher, commandRegistryAccess); -@@ -165,7 +165,7 @@ public class Commands { - ListPlayersCommand.register(this.dispatcher); - LocateCommand.register(this.dispatcher, commandRegistryAccess); - //LootCommand.register(this.dispatcher, commandRegistryAccess); // Folia - region threading - TODO later -- MsgCommand.register(this.dispatcher); -+ //MsgCommand.register(this.dispatcher); // Folia - stream mode - ParticleCommand.register(this.dispatcher, commandRegistryAccess); - PlaceCommand.register(this.dispatcher); - PlaySoundCommand.register(this.dispatcher); -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 19b7bcb7a773d48580842cbd33e022c57f08f019..5f01b0c09df6ebcb32e076581e33075835deda35 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2222,7 +2222,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - this.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper - add cause - // Folia - region threading - } else { -- Optional optional = this.tryHandleChat(packet.message(), packet.timeStamp(), packet.lastSeenMessages()); -+ // Folia - stream mode -+ Optional optional = this.tryHandleChat(packet.message(), packet.timeStamp(), packet.lastSeenMessages(), true); // Folia - disable chat - - if (optional.isPresent()) { - // this.server.submit(() -> { // CraftBukkit - async chat -@@ -2258,7 +2259,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - this.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper - // Folia - region threading - } else { -- Optional optional = this.tryHandleChat(packet.command(), packet.timeStamp(), packet.lastSeenMessages()); -+ Optional optional = this.tryHandleChat(packet.command(), packet.timeStamp(), packet.lastSeenMessages(), false); // Folia - disable chat - - if (optional.isPresent()) { - this.player.getBukkitEntity().taskScheduler.schedule((ServerPlayer player) -> { // Folia - region threading -@@ -2335,14 +2336,14 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - return com_mojang_brigadier_commanddispatcher.parse(command, this.player.createCommandSourceStack()); - } - -- private Optional tryHandleChat(String message, Instant timestamp, LastSeenMessages.Update acknowledgment) { -+ private Optional tryHandleChat(String message, Instant timestamp, LastSeenMessages.Update acknowledgment, boolean chat) { // Folia - stream mode - if (!this.updateChatOrder(timestamp)) { - ServerGamePacketListenerImpl.LOGGER.warn("{} sent out-of-order chat: '{}': {} > {}", this.player.getName().getString(), message, this.lastChatTimeStamp.get().getEpochSecond(), timestamp.getEpochSecond()); // Paper - // Folia - region threading - this.disconnect(Component.translatable("multiplayer.disconnect.out_of_order_chat"), org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event ca - // Folia - region threading - return Optional.empty(); -- } else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales -+ } else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN || (chat && !this.player.getBukkitEntity().isOp())) { // CraftBukkit - dead men tell no tales // Folia - stream mode - this.send(new ClientboundSystemChatPacket(Component.translatable("chat.disabled.options").withStyle(ChatFormatting.RED), false)); - return Optional.empty(); - } else { diff --git a/patches/server/0009-Add-chunk-system-throughput-counters-to-tps.patch b/patches/server/0008-Add-chunk-system-throughput-counters-to-tps.patch similarity index 100% rename from patches/server/0009-Add-chunk-system-throughput-counters-to-tps.patch rename to patches/server/0008-Add-chunk-system-throughput-counters-to-tps.patch diff --git a/patches/server/0010-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch b/patches/server/0009-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch similarity index 100% rename from patches/server/0010-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch rename to patches/server/0009-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch