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 0ad72570f0..67505129b8 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/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java index f7b7c9e1d2..6379663d75 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -134,6 +134,7 @@ public class PurpurConfig { public static String afkBroadcastBack = "§e§o%s is no longer AFK"; public static String afkTabListPrefix = "[AFK] "; public static String afkTabListSuffix = ""; + public static String demoCommandOutput = "§a%s has been shown the demo screen"; public static String pingCommandOutput = "§a%s's ping is %sms"; public static String cannotRideMob = "§cYou cannot mount that mob"; private static void messages() { @@ -141,6 +142,7 @@ public class PurpurConfig { afkBroadcastBack = getString("settings.messages.afk-broadcast-back", afkBroadcastBack); afkTabListPrefix = getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix); afkTabListSuffix = getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix); + demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput); pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); } diff --git a/src/main/java/net/pl3x/purpur/command/DemoCommand.java b/src/main/java/net/pl3x/purpur/command/DemoCommand.java new file mode 100644 index 0000000000..e478a59eb8 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/command/DemoCommand.java @@ -0,0 +1,39 @@ +package net.pl3x.purpur.command; + +import java.util.Collection; +import java.util.Collections; +import net.minecraft.server.ArgumentEntity; +import net.minecraft.server.CommandDispatcher; +import net.minecraft.server.CommandListenerWrapper; +import net.minecraft.server.EntityPlayer; +import net.minecraft.server.PacketPlayOutGameStateChange; +import net.pl3x.purpur.PurpurConfig; +import org.bukkit.craftbukkit.util.CraftChatMessage; + +public class DemoCommand { + public static void register(com.mojang.brigadier.CommandDispatcher dispatcher) { + dispatcher.register(CommandDispatcher.register("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.f, 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(); + } +}