From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Mon, 30 Nov 2020 03:12:04 -0600 Subject: [PATCH] Add demo command diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java index d080bf58ebc9c1dc9d41fae7d515547bc3f26d54..b5cc099746e9f05ea69bc438bda22a5ac3ebc3c5 100644 --- a/src/main/java/net/minecraft/server/CommandDispatcher.java +++ b/src/main/java/net/minecraft/server/CommandDispatcher.java @@ -107,6 +107,7 @@ public class CommandDispatcher { CommandIdleTimeout.a(this.b); CommandStop.a(this.b); CommandWhitelist.a(this.b); + net.pl3x.purpur.command.DemoCommand.register(getDispatcher()); // Purpur net.pl3x.purpur.command.PingCommand.register(getDispatcher()); // Purpur } diff --git a/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java b/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java index 08cbc787e2bf6587878bdeffa7248e5d23cdcf98..57d39ed441ec7be933f4fce48225f527db7e6a3c 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java @@ -11,7 +11,7 @@ public class PacketPlayOutGameStateChange implements Packet dispatcher) { + dispatcher.register(CommandDispatcher.literal("demo") + .requires((listener) -> { + return listener.hasPermission(2); + }) + .executes((context) -> { + return execute(context.getSource(), Collections.singleton(context.getSource().getPlayerOrException())); + }) + .then(CommandDispatcher.argument("targets", ArgumentEntity.players()) + .executes((context) -> { + return execute(context.getSource(), ArgumentEntity.getPlayers(context, "targets")); + }) + ) + ).setPermission("bukkit.command.demo"); + } + + private static int execute(CommandListenerWrapper sender, Collection targets) { + for (EntityPlayer player : targets) { + PacketPlayOutGameStateChange packet = new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.demo(), 0); + player.playerConnection.sendPacket(packet); + String output = String.format(PurpurConfig.demoCommandOutput, player.getProfile().getName(), player.ping); + sender.sendMessage(CraftChatMessage.fromStringOrNull(output), false); + } + return targets.size(); + } +}