mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-20 01:47:42 +01:00
Add compass command
This commit is contained in:
@@ -17,26 +17,26 @@ index a5712108fbbe5ddc61cdfd390f667ab013ba609d..73953ea69776bfe1dcb1504cd14a0f00
|
|||||||
|
|
||||||
if (environment.includeIntegrated) {
|
if (environment.includeIntegrated) {
|
||||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
index 214b25f57f15e2127b92ec88117c36d4b2096477..652e596c37bf8d865c954b31ad7d2562b9e95c46 100644
|
index 214b25f57f15e2127b92ec88117c36d4b2096477..fbb0840010443facb66b8e538c4fde035704896e 100644
|
||||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -1119,6 +1119,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1119,6 +1119,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
this.safeShutdown(flag, false);
|
this.safeShutdown(flag, false);
|
||||||
}
|
}
|
||||||
public void safeShutdown(boolean flag, boolean isRestarting) {
|
public void safeShutdown(boolean flag, boolean isRestarting) {
|
||||||
+ net.pl3x.purpur.task.TPSBarTask.stop(); // Purpur
|
+ net.pl3x.purpur.task.BossBarTask.stopAll(); // Purpur
|
||||||
this.isRestarting = isRestarting;
|
this.isRestarting = isRestarting;
|
||||||
this.hasLoggedStop = true; // Paper
|
this.hasLoggedStop = true; // Paper
|
||||||
if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper
|
if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper
|
||||||
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
index fc6a6e88486c5c2dca1b10bfeae24124690d7b8d..4a3226b58ee3c11830dabba988b0665dc069559a 100644
|
index fc6a6e88486c5c2dca1b10bfeae24124690d7b8d..7b66b301b10158e9c715834b24bdfab1610f4a94 100644
|
||||||
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
@@ -349,6 +349,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
@@ -349,6 +349,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||||
DedicatedServer.LOGGER.info("JMX monitoring enabled");
|
DedicatedServer.LOGGER.info("JMX monitoring enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
+ net.pl3x.purpur.task.TPSBarTask.start(); // Purpur
|
+ net.pl3x.purpur.task.BossBarTask.startAll(); // Purpur
|
||||||
+
|
+
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -84,14 +84,14 @@ index b520d4980180462628ede1383ee1826bbd6a6ad2..21696b7a35cabca1c470304573c01557
|
|||||||
// Purpur end
|
// Purpur end
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
index 29043f9354b29f7766f1d6d8e793e2ea23883fa0..54db0206bbeea62525ada78b0f9cd99b4f9fddff 100644
|
index 29043f9354b29f7766f1d6d8e793e2ea23883fa0..9a0065bd8eeb758daeb49d82ba8f2c09a6e4f533 100644
|
||||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -483,6 +483,7 @@ public abstract class PlayerList {
|
@@ -483,6 +483,7 @@ public abstract class PlayerList {
|
||||||
scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam);
|
scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam);
|
||||||
}
|
}
|
||||||
// Paper end
|
// Paper end
|
||||||
+ if (player.tpsBar()) net.pl3x.purpur.task.TPSBarTask.addPlayer(player.getBukkitEntity()); // Purpur
|
+ net.pl3x.purpur.task.BossBarTask.addToAll(player); // Purpur
|
||||||
// CraftBukkit - Moved from above, added world
|
// CraftBukkit - Moved from above, added world
|
||||||
PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ());
|
PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ());
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ index 29043f9354b29f7766f1d6d8e793e2ea23883fa0..54db0206bbeea62525ada78b0f9cd99b
|
|||||||
}
|
}
|
||||||
public net.kyori.adventure.text.Component disconnect(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
|
public net.kyori.adventure.text.Component disconnect(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
|
||||||
// Paper end
|
// Paper end
|
||||||
+ net.pl3x.purpur.task.TPSBarTask.removePlayer(entityplayer.getBukkitEntity()); // Purpur
|
+ net.pl3x.purpur.task.BossBarTask.removeFromAll(entityplayer.getBukkitEntity()); // Purpur
|
||||||
+
|
+
|
||||||
ServerLevel worldserver = entityplayer.getLevel();
|
ServerLevel worldserver = entityplayer.getLevel();
|
||||||
|
|
||||||
@@ -140,10 +140,10 @@ index e1701ab4bd6eccb9a525fa3eb8b35a1bf6f7ffcd..7ed1d5b2aab3442f80532c62a398353e
|
|||||||
public static boolean enderChestPermissionRows = false;
|
public static boolean enderChestPermissionRows = false;
|
||||||
diff --git a/src/main/java/net/pl3x/purpur/command/TPSBarCommand.java b/src/main/java/net/pl3x/purpur/command/TPSBarCommand.java
|
diff --git a/src/main/java/net/pl3x/purpur/command/TPSBarCommand.java b/src/main/java/net/pl3x/purpur/command/TPSBarCommand.java
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..5ed9d779fbdd9da1010f5f31ceec6b46496a21bb
|
index 0000000000000000000000000000000000000000..2eca7b78907007be9683d87bf2346c87816ec3f0
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/main/java/net/pl3x/purpur/command/TPSBarCommand.java
|
+++ b/src/main/java/net/pl3x/purpur/command/TPSBarCommand.java
|
||||||
@@ -0,0 +1,25 @@
|
@@ -0,0 +1,21 @@
|
||||||
+package net.pl3x.purpur.command;
|
+package net.pl3x.purpur.command;
|
||||||
+
|
+
|
||||||
+import com.mojang.brigadier.CommandDispatcher;
|
+import com.mojang.brigadier.CommandDispatcher;
|
||||||
@@ -156,32 +156,25 @@ index 0000000000000000000000000000000000000000..5ed9d779fbdd9da1010f5f31ceec6b46
|
|||||||
+ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
|
+ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
|
||||||
+ dispatcher.register(Commands.literal("tpsbar")
|
+ dispatcher.register(Commands.literal("tpsbar")
|
||||||
+ .requires(listener -> listener.hasPermission(2))
|
+ .requires(listener -> listener.hasPermission(2))
|
||||||
+ .executes(context -> execute(context.getSource(), context.getSource().getPlayerOrException()))
|
+ .executes(context -> {
|
||||||
|
+ ServerPlayer player = context.getSource().getPlayerOrException();
|
||||||
|
+ boolean result = TPSBarTask.instance().togglePlayer(player.getBukkitEntity());
|
||||||
|
+ player.tpsBar(result);
|
||||||
|
+ return 1;
|
||||||
|
+ })
|
||||||
+ ).setPermission("bukkit.command.tpsbar");
|
+ ).setPermission("bukkit.command.tpsbar");
|
||||||
+ }
|
+ }
|
||||||
+
|
|
||||||
+ private static int execute(CommandSourceStack source, ServerPlayer player) {
|
|
||||||
+ if (player != null) {
|
|
||||||
+ boolean result = TPSBarTask.togglePlayer(player.getBukkitEntity());
|
|
||||||
+ player.tpsBar(result);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+}
|
+}
|
||||||
diff --git a/src/main/java/net/pl3x/purpur/task/TPSBarTask.java b/src/main/java/net/pl3x/purpur/task/TPSBarTask.java
|
diff --git a/src/main/java/net/pl3x/purpur/task/BossBarTask.java b/src/main/java/net/pl3x/purpur/task/BossBarTask.java
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..b81a0e3b54d2e2261069dc282aea412ab0840eec
|
index 0000000000000000000000000000000000000000..1f55902eb8367b4d980a66f23ac2b57709ae78cf
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/main/java/net/pl3x/purpur/task/TPSBarTask.java
|
+++ b/src/main/java/net/pl3x/purpur/task/BossBarTask.java
|
||||||
@@ -0,0 +1,202 @@
|
@@ -0,0 +1,105 @@
|
||||||
+package net.pl3x.purpur.task;
|
+package net.pl3x.purpur.task;
|
||||||
+
|
+
|
||||||
+import net.kyori.adventure.bossbar.BossBar;
|
+import net.kyori.adventure.bossbar.BossBar;
|
||||||
+import net.kyori.adventure.text.Component;
|
+import net.minecraft.server.level.ServerPlayer;
|
||||||
+import net.kyori.adventure.text.minimessage.MiniMessage;
|
|
||||||
+import net.kyori.adventure.text.minimessage.Template;
|
|
||||||
+import net.pl3x.purpur.PurpurConfig;
|
|
||||||
+import org.bukkit.Bukkit;
|
+import org.bukkit.Bukkit;
|
||||||
+import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin;
|
+import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin;
|
||||||
+import org.bukkit.entity.Player;
|
+import org.bukkit.entity.Player;
|
||||||
@@ -193,30 +186,16 @@ index 0000000000000000000000000000000000000000..b81a0e3b54d2e2261069dc282aea412a
|
|||||||
+import java.util.Map;
|
+import java.util.Map;
|
||||||
+import java.util.UUID;
|
+import java.util.UUID;
|
||||||
+
|
+
|
||||||
+public class TPSBarTask extends BukkitRunnable {
|
+public abstract class BossBarTask extends BukkitRunnable {
|
||||||
+ private static TPSBarTask instance;
|
|
||||||
+ private final Map<UUID, BossBar> bossbars = new HashMap<>();
|
+ private final Map<UUID, BossBar> bossbars = new HashMap<>();
|
||||||
+ private double tps = 20.0D;
|
+ private boolean started;
|
||||||
+ private double mspt = 0.0D;
|
|
||||||
+ private int tick = 0;
|
|
||||||
+
|
+
|
||||||
+ private static TPSBarTask instance() {
|
+ abstract BossBar createBossBar();
|
||||||
+ if (instance == null) {
|
+
|
||||||
+ instance = new TPSBarTask();
|
+ abstract void updateBossBar(BossBar bossbar, Player player);
|
||||||
+ }
|
|
||||||
+ return instance;
|
|
||||||
+ }
|
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public void run() {
|
+ public void run() {
|
||||||
+ if (++tick < PurpurConfig.commandTPSBarTickInterval) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ tick = 0;
|
|
||||||
+
|
|
||||||
+ this.tps = Math.max(Math.min(Bukkit.getTPS()[0], 20.0D), 0.0D);
|
|
||||||
+ this.mspt = Bukkit.getAverageTickTime();
|
|
||||||
+
|
|
||||||
+ Iterator<Map.Entry<UUID, BossBar>> iter = bossbars.entrySet().iterator();
|
+ Iterator<Map.Entry<UUID, BossBar>> iter = bossbars.entrySet().iterator();
|
||||||
+ while (iter.hasNext()) {
|
+ while (iter.hasNext()) {
|
||||||
+ Map.Entry<UUID, BossBar> entry = iter.next();
|
+ Map.Entry<UUID, BossBar> entry = iter.next();
|
||||||
@@ -229,7 +208,110 @@ index 0000000000000000000000000000000000000000..b81a0e3b54d2e2261069dc282aea412a
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ private void updateBossBar(BossBar bossbar, Player player) {
|
+ @Override
|
||||||
|
+ public void cancel() {
|
||||||
|
+ super.cancel();
|
||||||
|
+ new HashSet<>(this.bossbars.keySet()).forEach(uuid -> {
|
||||||
|
+ Player player = Bukkit.getPlayer(uuid);
|
||||||
|
+ if (player != null) {
|
||||||
|
+ removePlayer(player);
|
||||||
|
+ }
|
||||||
|
+ });
|
||||||
|
+ this.bossbars.clear();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public boolean removePlayer(Player player) {
|
||||||
|
+ BossBar bossbar = this.bossbars.remove(player.getUniqueId());
|
||||||
|
+ if (bossbar != null) {
|
||||||
|
+ player.hideBossBar(bossbar);
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void addPlayer(Player player) {
|
||||||
|
+ removePlayer(player);
|
||||||
|
+ BossBar bossbar = createBossBar();
|
||||||
|
+ this.bossbars.put(player.getUniqueId(), bossbar);
|
||||||
|
+ this.updateBossBar(bossbar, player);
|
||||||
|
+ player.showBossBar(bossbar);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public boolean togglePlayer(Player player) {
|
||||||
|
+ if (removePlayer(player)) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ addPlayer(player);
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void start() {
|
||||||
|
+ stop();
|
||||||
|
+ this.runTaskTimerAsynchronously(new MinecraftInternalPlugin(), 1, 1);
|
||||||
|
+ started = true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void stop() {
|
||||||
|
+ if (started) {
|
||||||
|
+ cancel();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void startAll() {
|
||||||
|
+ TPSBarTask.instance().start();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void stopAll() {
|
||||||
|
+ TPSBarTask.instance().stop();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void addToAll(ServerPlayer player) {
|
||||||
|
+ Player bukkit = player.getBukkitEntity();
|
||||||
|
+ if (player.tpsBar()) {
|
||||||
|
+ TPSBarTask.instance().addPlayer(bukkit);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void removeFromAll(Player player) {
|
||||||
|
+ TPSBarTask.instance().removePlayer(player);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/src/main/java/net/pl3x/purpur/task/TPSBarTask.java b/src/main/java/net/pl3x/purpur/task/TPSBarTask.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..cafb140ff57e5697d7c3705ff9be6411c0ad82d9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/net/pl3x/purpur/task/TPSBarTask.java
|
||||||
|
@@ -0,0 +1,142 @@
|
||||||
|
+package net.pl3x.purpur.task;
|
||||||
|
+
|
||||||
|
+import net.kyori.adventure.bossbar.BossBar;
|
||||||
|
+import net.kyori.adventure.text.Component;
|
||||||
|
+import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
+import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
+import net.pl3x.purpur.PurpurConfig;
|
||||||
|
+import org.bukkit.Bukkit;
|
||||||
|
+import org.bukkit.entity.Player;
|
||||||
|
+
|
||||||
|
+public class TPSBarTask extends BossBarTask {
|
||||||
|
+ private static TPSBarTask instance;
|
||||||
|
+ private double tps = 20.0D;
|
||||||
|
+ private double mspt = 0.0D;
|
||||||
|
+ private int tick = 0;
|
||||||
|
+
|
||||||
|
+ public static TPSBarTask instance() {
|
||||||
|
+ if (instance == null) {
|
||||||
|
+ instance = new TPSBarTask();
|
||||||
|
+ }
|
||||||
|
+ return instance;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ BossBar createBossBar() {
|
||||||
|
+ return BossBar.bossBar(Component.text(""), 0.0F, instance().getBossBarColor(), PurpurConfig.commandTPSBarProgressOverlay);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ void updateBossBar(BossBar bossbar, Player player) {
|
||||||
+ bossbar.progress(getBossBarProgress());
|
+ bossbar.progress(getBossBarProgress());
|
||||||
+ bossbar.color(getBossBarColor());
|
+ bossbar.color(getBossBarColor());
|
||||||
+ bossbar.name(MiniMessage.get().parse(PurpurConfig.commandTPSBarTitle,
|
+ bossbar.name(MiniMessage.get().parse(PurpurConfig.commandTPSBarTitle,
|
||||||
@@ -239,6 +321,19 @@ index 0000000000000000000000000000000000000000..b81a0e3b54d2e2261069dc282aea412a
|
|||||||
+ ));
|
+ ));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void run() {
|
||||||
|
+ if (++tick < PurpurConfig.commandTPSBarTickInterval) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ tick = 0;
|
||||||
|
+
|
||||||
|
+ this.tps = Math.max(Math.min(Bukkit.getTPS()[0], 20.0D), 0.0D);
|
||||||
|
+ this.mspt = Bukkit.getAverageTickTime();
|
||||||
|
+
|
||||||
|
+ super.run();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ private float getBossBarProgress() {
|
+ private float getBossBarProgress() {
|
||||||
+ if (PurpurConfig.commandTPSBarProgressFillMode == FillMode.MSPT) {
|
+ if (PurpurConfig.commandTPSBarProgressFillMode == FillMode.MSPT) {
|
||||||
+ return Math.max(Math.min((float) mspt / 50.0F, 1.0F), 0.0F);
|
+ return Math.max(Math.min((float) mspt / 50.0F, 1.0F), 0.0F);
|
||||||
@@ -325,54 +420,6 @@ index 0000000000000000000000000000000000000000..b81a0e3b54d2e2261069dc282aea412a
|
|||||||
+ return MiniMessage.get().parse(color, Template.of("text", String.format("%s", ping)));
|
+ return MiniMessage.get().parse(color, Template.of("text", String.format("%s", ping)));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
|
||||||
+ public void cancel() {
|
|
||||||
+ super.cancel();
|
|
||||||
+ new HashSet<>(this.bossbars.keySet()).forEach(uuid -> {
|
|
||||||
+ Player player = Bukkit.getPlayer(uuid);
|
|
||||||
+ if (player != null) {
|
|
||||||
+ removePlayer(player);
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
+ this.bossbars.clear();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public static boolean removePlayer(Player player) {
|
|
||||||
+ BossBar bossbar = instance().bossbars.remove(player.getUniqueId());
|
|
||||||
+ if (bossbar != null) {
|
|
||||||
+ player.hideBossBar(bossbar);
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public static void addPlayer(Player player) {
|
|
||||||
+ removePlayer(player);
|
|
||||||
+ BossBar bossbar = BossBar.bossBar(Component.text(""), 0.0F, instance().getBossBarColor(), PurpurConfig.commandTPSBarProgressOverlay);
|
|
||||||
+ instance().bossbars.put(player.getUniqueId(), bossbar);
|
|
||||||
+ instance().updateBossBar(bossbar, player);
|
|
||||||
+ player.showBossBar(bossbar);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public static boolean togglePlayer(Player player) {
|
|
||||||
+ if (removePlayer(player)) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ addPlayer(player);
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public static void start() {
|
|
||||||
+ stop();
|
|
||||||
+ instance().runTaskTimerAsynchronously(new MinecraftInternalPlugin(), 1, 1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public static void stop() {
|
|
||||||
+ if (instance != null) {
|
|
||||||
+ instance.cancel();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public enum FillMode {
|
+ public enum FillMode {
|
||||||
+ TPS, MSPT, PING
|
+ TPS, MSPT, PING
|
||||||
+ }
|
+ }
|
||||||
|
|||||||
206
patches/server/0236-Add-compass-command.patch
Normal file
206
patches/server/0236-Add-compass-command.patch
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||||
|
Date: Sat, 24 Jul 2021 00:07:31 -0500
|
||||||
|
Subject: [PATCH] Add compass command
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
|
||||||
|
index 528fd87ae1c1c01e13885d88fc8056b0f932fb61..bfad241892b8280d261ab8301245b91b5403b51a 100644
|
||||||
|
--- a/src/main/java/net/minecraft/commands/Commands.java
|
||||||
|
+++ b/src/main/java/net/minecraft/commands/Commands.java
|
||||||
|
@@ -203,6 +203,7 @@ public class Commands {
|
||||||
|
net.pl3x.purpur.command.PingCommand.register(this.dispatcher); // Purpur
|
||||||
|
net.pl3x.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur
|
||||||
|
net.pl3x.purpur.command.TPSBarCommand.register(this.dispatcher); // Purpur
|
||||||
|
+ net.pl3x.purpur.command.CompassCommand.register(this.dispatcher); // Purpur
|
||||||
|
}
|
||||||
|
|
||||||
|
if (environment.includeIntegrated) {
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
index cd26d6c8ba2d5d6b3b56e484e6e642ab646341e1..11786d686ed1734f8f41f6127b3499cb094ab528 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||||
|
@@ -260,6 +260,7 @@ public class ServerPlayer extends Player {
|
||||||
|
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
||||||
|
public boolean acceptingResourcePack = false; // Purpur
|
||||||
|
private boolean tpsBar = false; // Purpur
|
||||||
|
+ private boolean compassBar = false; // Purpur
|
||||||
|
|
||||||
|
public double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks
|
||||||
|
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
|
||||||
|
@@ -483,6 +484,7 @@ public class ServerPlayer extends Player {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur
|
||||||
|
+ if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@@ -544,6 +546,7 @@ public class ServerPlayer extends Player {
|
||||||
|
this.getBukkitEntity().setExtraData(nbt); // CraftBukkit
|
||||||
|
|
||||||
|
nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur
|
||||||
|
+ nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur
|
||||||
|
}
|
||||||
|
|
||||||
|
// CraftBukkit start - World fallback code, either respawn location or global spawn
|
||||||
|
@@ -2532,5 +2535,13 @@ public class ServerPlayer extends Player {
|
||||||
|
public void tpsBar(boolean tpsBar) {
|
||||||
|
this.tpsBar = tpsBar;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ public boolean compassBar() {
|
||||||
|
+ return this.compassBar;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void compassBar(boolean compassBar) {
|
||||||
|
+ this.compassBar = compassBar;
|
||||||
|
+ }
|
||||||
|
// Purpur end
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||||
|
index 8244f362f551ed2bdef4df8e6b83cb176b4a4e59..2fd0c87b31d2f7ca939a6212c68008232baafbe2 100644
|
||||||
|
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||||
|
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||||
|
@@ -362,6 +362,11 @@ public class PurpurConfig {
|
||||||
|
public static String commandTPSBarTextColorMedium = "<gradient:#ffff55:#ffaa00><text></gradient>";
|
||||||
|
public static String commandTPSBarTextColorLow = "<gradient:#ff5555:#aa0000><text></gradient>";
|
||||||
|
public static int commandTPSBarTickInterval = 20;
|
||||||
|
+ public static String commandCompassBarTitle = "S \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 SW \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 W \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 NW \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 N \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 NE \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 E \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 SE \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 S \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 SW \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 W \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 NW \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 N \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 NE \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 E \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 SE \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 \u25C8 \u00B7 ";
|
||||||
|
+ public static BossBar.Overlay commandCompassBarProgressOverlay = BossBar.Overlay.PROGRESS;
|
||||||
|
+ public static BossBar.Color commandCompassBarProgressColor = BossBar.Color.BLUE;
|
||||||
|
+ public static float commandCompassBarProgressPercent = 1.0F;
|
||||||
|
+ public static int commandCompassBarTickInterval = 5;
|
||||||
|
public static boolean commandGamemodeRequiresPermission = false;
|
||||||
|
public static boolean hideHiddenPlayersFromEntitySelector = false;
|
||||||
|
public static String uptimeFormat = "<days><hours><minutes><seconds>";
|
||||||
|
@@ -384,6 +389,13 @@ public class PurpurConfig {
|
||||||
|
commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium);
|
||||||
|
commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow);
|
||||||
|
commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval);
|
||||||
|
+
|
||||||
|
+ commandCompassBarTitle = getString("settings.command.compass.title", commandCompassBarTitle);
|
||||||
|
+ commandCompassBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.compass.overlay", commandCompassBarProgressOverlay.name()));
|
||||||
|
+ commandCompassBarProgressColor = BossBar.Color.valueOf(getString("settings.command.compass.progress-color.good", commandCompassBarProgressColor.name()));
|
||||||
|
+ commandCompassBarProgressPercent = (float) getDouble("settings.command.compass.percent", commandCompassBarProgressPercent);
|
||||||
|
+ commandCompassBarTickInterval = getInt("settings.command.compass.tick-interval", commandCompassBarTickInterval);
|
||||||
|
+
|
||||||
|
commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission);
|
||||||
|
hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector);
|
||||||
|
uptimeFormat = getString("settings.command.uptime.format", uptimeFormat);
|
||||||
|
diff --git a/src/main/java/net/pl3x/purpur/command/CompassCommand.java b/src/main/java/net/pl3x/purpur/command/CompassCommand.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..5381dfa162dae02c93afcf28d7c6dfb2170ab175
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/net/pl3x/purpur/command/CompassCommand.java
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+package net.pl3x.purpur.command;
|
||||||
|
+
|
||||||
|
+import com.mojang.brigadier.CommandDispatcher;
|
||||||
|
+import net.minecraft.commands.CommandSourceStack;
|
||||||
|
+import net.minecraft.commands.Commands;
|
||||||
|
+import net.minecraft.server.level.ServerPlayer;
|
||||||
|
+import net.pl3x.purpur.task.CompassTask;
|
||||||
|
+
|
||||||
|
+public class CompassCommand {
|
||||||
|
+ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
|
||||||
|
+ dispatcher.register(Commands.literal("compass")
|
||||||
|
+ .requires(listener -> listener.hasPermission(2))
|
||||||
|
+ .executes(context -> {
|
||||||
|
+ ServerPlayer player = context.getSource().getPlayerOrException();
|
||||||
|
+ boolean result = CompassTask.instance().togglePlayer(player.getBukkitEntity());
|
||||||
|
+ player.compassBar(result);
|
||||||
|
+ return 1;
|
||||||
|
+ })
|
||||||
|
+ ).setPermission("bukkit.command.compass");
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/src/main/java/net/pl3x/purpur/task/BossBarTask.java b/src/main/java/net/pl3x/purpur/task/BossBarTask.java
|
||||||
|
index 1f55902eb8367b4d980a66f23ac2b57709ae78cf..173805ec9beae96a120d3501d1cf597c93aa6bd9 100644
|
||||||
|
--- a/src/main/java/net/pl3x/purpur/task/BossBarTask.java
|
||||||
|
+++ b/src/main/java/net/pl3x/purpur/task/BossBarTask.java
|
||||||
|
@@ -86,10 +86,12 @@ public abstract class BossBarTask extends BukkitRunnable {
|
||||||
|
|
||||||
|
public static void startAll() {
|
||||||
|
TPSBarTask.instance().start();
|
||||||
|
+ CompassTask.instance().start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void stopAll() {
|
||||||
|
TPSBarTask.instance().stop();
|
||||||
|
+ CompassTask.instance().stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addToAll(ServerPlayer player) {
|
||||||
|
@@ -97,9 +99,13 @@ public abstract class BossBarTask extends BukkitRunnable {
|
||||||
|
if (player.tpsBar()) {
|
||||||
|
TPSBarTask.instance().addPlayer(bukkit);
|
||||||
|
}
|
||||||
|
+ if (player.compassBar()) {
|
||||||
|
+ CompassTask.instance().addPlayer(bukkit);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeFromAll(Player player) {
|
||||||
|
TPSBarTask.instance().removePlayer(player);
|
||||||
|
+ CompassTask.instance().removePlayer(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/net/pl3x/purpur/task/CompassTask.java b/src/main/java/net/pl3x/purpur/task/CompassTask.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..556ac7b6127a3827b686627364a7db9c853a2abd
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/net/pl3x/purpur/task/CompassTask.java
|
||||||
|
@@ -0,0 +1,52 @@
|
||||||
|
+package net.pl3x.purpur.task;
|
||||||
|
+
|
||||||
|
+import net.kyori.adventure.bossbar.BossBar;
|
||||||
|
+import net.kyori.adventure.text.Component;
|
||||||
|
+import net.pl3x.purpur.PurpurConfig;
|
||||||
|
+import org.bukkit.entity.Player;
|
||||||
|
+
|
||||||
|
+public class CompassTask extends BossBarTask {
|
||||||
|
+ private static CompassTask instance;
|
||||||
|
+
|
||||||
|
+ private int tick = 0;
|
||||||
|
+
|
||||||
|
+ public static CompassTask instance() {
|
||||||
|
+ if (instance == null) {
|
||||||
|
+ instance = new CompassTask();
|
||||||
|
+ }
|
||||||
|
+ return instance;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void run() {
|
||||||
|
+ if (++tick < PurpurConfig.commandCompassBarTickInterval) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ tick = 0;
|
||||||
|
+
|
||||||
|
+ super.run();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ BossBar createBossBar() {
|
||||||
|
+ return BossBar.bossBar(Component.text(""), PurpurConfig.commandCompassBarProgressPercent, PurpurConfig.commandCompassBarProgressColor, PurpurConfig.commandCompassBarProgressOverlay);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ void updateBossBar(BossBar bossbar, Player player) {
|
||||||
|
+ float yaw = player.getLocation().getYaw();
|
||||||
|
+ int length = PurpurConfig.commandCompassBarTitle.length();
|
||||||
|
+ int pos = (int) ((normalize(yaw) * (length / 720F)) + (length / 2F));
|
||||||
|
+ bossbar.name(Component.text(PurpurConfig.commandCompassBarTitle.substring(pos - 25, pos + 25)));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private float normalize(float yaw) {
|
||||||
|
+ while (yaw < -180.0F) {
|
||||||
|
+ yaw += 360.0F;
|
||||||
|
+ }
|
||||||
|
+ while (yaw > 180.0F) {
|
||||||
|
+ yaw -= 360.0F;
|
||||||
|
+ }
|
||||||
|
+ return yaw;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
Reference in New Issue
Block a user