Files
Purpur/patches/server/0143-Add-demo-command.patch
BillyGalbreath 391f9addfd Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
fb36f15d6 Let some more packets be send immediately, closes #4140 (#4896)
ede41fe16 Emancipate more features to PlayerHandshakeEvent
3fdeba1f5 [CI-SKIP] [Auto] Rebuild Patches
5fc07bd63 Maded Title-Objects directy sendable to targets
e7b9a478e Player Chunk Load/Unload Events
1d0cfc0cc MC-4 Fix item position desync
458db6206 Limit auto recipe packets
2020-12-16 18:05:35 -06:00

97 lines
5.8 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
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 1a13eb47e07776a53fab4ca38dcb48e55fb77b21..ccd0be059f4d7b95d4ec58c0d4fc744a94fec3fd 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<PacketListenerPlayOu
public static final PacketPlayOutGameStateChange.a c = new PacketPlayOutGameStateChange.a(2);
public static final PacketPlayOutGameStateChange.a d = new PacketPlayOutGameStateChange.a(3);
public static final PacketPlayOutGameStateChange.a e = new PacketPlayOutGameStateChange.a(4);
- public static final PacketPlayOutGameStateChange.a f = new PacketPlayOutGameStateChange.a(5);
+ public static final PacketPlayOutGameStateChange.a f = new PacketPlayOutGameStateChange.a(5); public static PacketPlayOutGameStateChange.a demo() { return f; } // Purpur - OBFHELPER
public static final PacketPlayOutGameStateChange.a g = new PacketPlayOutGameStateChange.a(6);
public static final PacketPlayOutGameStateChange.a h = new PacketPlayOutGameStateChange.a(7);
public static final PacketPlayOutGameStateChange.a i = new PacketPlayOutGameStateChange.a(8);
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
index bb434bafc9ffd660096e53b5245adef9201117d2..64a8b4375b48417c2e34f0089bcf0f676faab055 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 0000000000000000000000000000000000000000..7640ce18b8c853aad96397ed2f752a401392d5b3
--- /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<CommandListenerWrapper> 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<EntityPlayer> 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();
+ }
+}