mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Upstream has released updates that appear to apply and compile correctly Paper Changes: 47d48790d Change return type of ItemStack#editMeta to allow checking for successful vs non-successful edits 7aabe7d56 [CI-SKIP] fix minecart vs minecraft typos (#5713) f775e87b4 [CI-SKIP] ci: update setup-java action (#5710) c58b3b277 ci: replace Java 11 with Java 16 in GH Actions build flow (#5709) 4b72327a6 ItemStack#editMeta 68984b664 Add Unix domain socket support (#5611) 68c67e680 Add Mob#lookAt API (#5633) 4bacecd16 [Auto] Updated Upstream (Bukkit/CraftBukkit) 1f28e6eeb Fix default ChatRenderer when no plugins are installed (#5702) ecb0d32ca Enhance (Async)ChatEvent with per-viewer rendering API (#5684) Airplane Changes: 636dbff0f [ci skip] Cleanup mcdev import files c57932048 [ci skip] Remove icons 7ada9a476 [skip ci] Need to specify 1.16.5 in the README of course 813df1a44 Update README daf3f0b29 Optimize air case for raytracing
212 lines
8.1 KiB
Diff
212 lines
8.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: BillyGalbreath <blake.galbreath@gmail.com>
|
|
Date: Sat, 12 Dec 2020 21:19:05 -0600
|
|
Subject: [PATCH] Implement TPSBar
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/commands/CommandDispatcher.java b/src/main/java/net/minecraft/commands/CommandDispatcher.java
|
|
index 0ea56c863a9a1019b36f7f9f9164301aef12637b..4338b459011bf7a083790b7bb76cf1b24471fd19 100644
|
|
--- a/src/main/java/net/minecraft/commands/CommandDispatcher.java
|
|
+++ b/src/main/java/net/minecraft/commands/CommandDispatcher.java
|
|
@@ -193,6 +193,7 @@ public class CommandDispatcher {
|
|
CommandWhitelist.a(this.b);
|
|
net.pl3x.purpur.command.DemoCommand.register(getDispatcher()); // Purpur
|
|
net.pl3x.purpur.command.PingCommand.register(getDispatcher()); // Purpur
|
|
+ net.pl3x.purpur.command.TPSBarCommand.register(getDispatcher()); // Purpur
|
|
}
|
|
|
|
if (commanddispatcher_servertype.d) {
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 8ba25be0ea59483e824be9afc63d47cb75b5b334..61603bda0d1e305679ab2463188c3f6cf9c8c18d 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -992,6 +992,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
this.safeShutdown(flag, false);
|
|
}
|
|
public void safeShutdown(boolean flag, boolean isRestarting) {
|
|
+ net.pl3x.purpur.task.TPSBarTask.stop(); // Purpur
|
|
this.isRunning = false;
|
|
this.isRestarting = isRestarting;
|
|
this.hasLoggedStop = true; // Paper
|
|
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
index b1ce70267506cde21dbb17d6ff19d13383e8c178..7773f15f4eabb73b16ce971971f0c6c7625998ed 100644
|
|
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
@@ -342,6 +342,8 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
MinecraftServerBeans.a((MinecraftServer) this);
|
|
}
|
|
|
|
+ net.pl3x.purpur.task.TPSBarTask.start(); // Purpur
|
|
+
|
|
return true;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
index 21c51883c73dfaa7ec874fb7f8ed7c284239e0a5..c7dd42c70a3215c57f12336050f78bf5458cce5c 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -598,6 +598,8 @@ public abstract class PlayerList {
|
|
if (entityplayer.didPlayerJoinEvent) cserver.getPluginManager().callEvent(playerQuitEvent); // Paper - if we disconnected before join ever fired, don't fire quit
|
|
entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage());
|
|
|
|
+ net.pl3x.purpur.task.TPSBarTask.removePlayer(cserver.getPlayer(entityplayer)); // Purpur
|
|
+
|
|
if (server.isMainThread()) entityplayer.playerTick(); // SPIGOT-924 // Paper - don't tick during emergency shutdowns (Watchdog)
|
|
// CraftBukkit end
|
|
|
|
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
|
|
index 0000000000000000000000000000000000000000..807f5709af7fd9497633ecfc9e932f0dfd4df231
|
|
--- /dev/null
|
|
+++ b/src/main/java/net/pl3x/purpur/command/TPSBarCommand.java
|
|
@@ -0,0 +1,27 @@
|
|
+package net.pl3x.purpur.command;
|
|
+
|
|
+import net.minecraft.commands.CommandDispatcher;
|
|
+import net.minecraft.commands.CommandListenerWrapper;
|
|
+import net.minecraft.server.level.EntityPlayer;
|
|
+import net.pl3x.purpur.task.TPSBarTask;
|
|
+
|
|
+public class TPSBarCommand {
|
|
+ public static void register(com.mojang.brigadier.CommandDispatcher<CommandListenerWrapper> dispatcher) {
|
|
+ dispatcher.register(CommandDispatcher.literal("tpsbar")
|
|
+ .requires((listener) -> {
|
|
+ return listener.hasPermission(2);
|
|
+ })
|
|
+ .executes((context) -> {
|
|
+ return execute(context.getSource(), context.getSource().getPlayerOrException());
|
|
+ })
|
|
+ ).setPermission("bukkit.command.tpsbar");
|
|
+ }
|
|
+
|
|
+ private static int execute(CommandListenerWrapper sender, EntityPlayer player) {
|
|
+ if (player != null) {
|
|
+ TPSBarTask.togglePlayer(player.getBukkitEntity());
|
|
+ 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
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..a9d71d2b769b8e4e0f5039e997fc5ebc1cc9bfbb
|
|
--- /dev/null
|
|
+++ b/src/main/java/net/pl3x/purpur/task/TPSBarTask.java
|
|
@@ -0,0 +1,116 @@
|
|
+package net.pl3x.purpur.task;
|
|
+
|
|
+import org.bukkit.Bukkit;
|
|
+import org.bukkit.ChatColor;
|
|
+import org.bukkit.NamespacedKey;
|
|
+import org.bukkit.boss.BarColor;
|
|
+import org.bukkit.boss.BarStyle;
|
|
+import org.bukkit.boss.BossBar;
|
|
+import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin;
|
|
+import org.bukkit.entity.Player;
|
|
+import org.bukkit.scheduler.BukkitRunnable;
|
|
+
|
|
+public class TPSBarTask extends BukkitRunnable {
|
|
+ private static TPSBarTask instance;
|
|
+ private final NamespacedKey key;
|
|
+ private BossBar bossbar;
|
|
+
|
|
+ private TPSBarTask() {
|
|
+ this.key = new NamespacedKey("purpur", "tpsbar");
|
|
+ }
|
|
+
|
|
+ private static TPSBarTask instance() {
|
|
+ if (instance == null) {
|
|
+ instance = new TPSBarTask();
|
|
+ }
|
|
+ return instance;
|
|
+ }
|
|
+
|
|
+ private BossBar bossbar() {
|
|
+ if (bossbar == null) {
|
|
+ bossbar = Bukkit.getBossBar(key);
|
|
+ if (bossbar == null) {
|
|
+ bossbar = Bukkit.createBossBar(key, "TPS: 20.0", BarColor.RED, BarStyle.SEGMENTED_20);
|
|
+ }
|
|
+ bossbar.setVisible(true);
|
|
+ bossbar.setProgress(1.0D);
|
|
+ }
|
|
+ return bossbar;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void run() {
|
|
+ BossBar bossbar = bossbar();
|
|
+ if (bossbar.getPlayers().isEmpty()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ double tps = Bukkit.getTPS()[0];
|
|
+ if (tps > 20.0D) {
|
|
+ tps = 20.0D;
|
|
+ } else if (tps < 0.0D) {
|
|
+ tps = 0.0D;
|
|
+ }
|
|
+
|
|
+ bossbar.setVisible(true);
|
|
+ bossbar.setProgress(Math.max(Math.min(tps / 20.0D, 1.0D), 0.0D));
|
|
+
|
|
+ String tpsColor;
|
|
+ if (tps >= 18) {
|
|
+ tpsColor = "&2";
|
|
+ bossbar.setColor(BarColor.GREEN);
|
|
+ } else if (tps >= 15) {
|
|
+ tpsColor = "&e";
|
|
+ bossbar.setColor(BarColor.YELLOW);
|
|
+ } else {
|
|
+ tpsColor = "&4";
|
|
+ bossbar.setColor(BarColor.RED);
|
|
+ }
|
|
+
|
|
+ double mspt = Bukkit.getAverageTickTime();
|
|
+ String msptColor;
|
|
+ if (mspt < 40) {
|
|
+ msptColor = "&2";
|
|
+ } else if (mspt < 50) {
|
|
+ msptColor = "&e";
|
|
+ } else {
|
|
+ msptColor = "&4";
|
|
+ }
|
|
+
|
|
+ bossbar.setTitle(ChatColor.translateAlternateColorCodes('&', "&eTPS&3: " + tpsColor + String.format("%.2f", tps) + " &eMSPT&3: " + msptColor + String.format("%.3f", mspt)));
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void cancel() {
|
|
+ super.cancel();
|
|
+ BossBar bossbar = bossbar();
|
|
+ bossbar.setVisible(false);
|
|
+ bossbar.removeAll();
|
|
+ Bukkit.removeBossBar(key);
|
|
+ }
|
|
+
|
|
+ public static void removePlayer(Player player) {
|
|
+ instance().bossbar().removePlayer(player);
|
|
+ }
|
|
+
|
|
+ public static void togglePlayer(Player player) {
|
|
+ BossBar bossbar = instance().bossbar();
|
|
+ if (bossbar.getPlayers().contains(player)) {
|
|
+ bossbar.removePlayer(player);
|
|
+ } else {
|
|
+ bossbar.addPlayer(player);
|
|
+ instance.run();
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public static void start() {
|
|
+ stop();
|
|
+ instance().runTaskTimerAsynchronously(new MinecraftInternalPlugin(), 20L, 20L);
|
|
+ }
|
|
+
|
|
+ public static void stop() {
|
|
+ if (instance != null) {
|
|
+ instance.cancel();
|
|
+ }
|
|
+ }
|
|
+}
|