Fix #287 - TPSBarTask NPE (again)

This commit is contained in:
BillyGalbreath
2021-04-15 02:50:29 -05:00
parent 24d9e61d2e
commit 76c35fca99

View File

@@ -17,18 +17,10 @@ index a551636c2c59e68a5abb1cd5611c1d5c7e36f514..b7663a3d64ae5202abb93eabba6ec013
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 45cb8681fd0942084b56eb8d45390c2dbc8a4f3d..966b6e2f9b7c473d8dfcae205d8ef8f08912ded9 100644
index 45cb8681fd0942084b56eb8d45390c2dbc8a4f3d..16c20b3e7dcbbdb08e8c2a15074495eacc001e70 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -584,6 +584,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
this.serverConnection.acceptConnections();
// CraftBukkit end
+ net.pl3x.purpur.task.TPSBarTask.start(); // Purpur
}
protected void updateWorldSettings() {}
@@ -979,6 +980,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
@@ -979,6 +979,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
this.safeShutdown(flag, false);
}
public void safeShutdown(boolean flag, boolean isRestarting) {
@@ -36,6 +28,19 @@ index 45cb8681fd0942084b56eb8d45390c2dbc8a4f3d..966b6e2f9b7c473d8dfcae205d8ef8f0
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 28d47ef97939309ce26b6e4cae14925b510755fd..6d39b777a0f708d61f611d9c16c3b3c48f89d477 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -323,6 +323,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 c316b0468c53825f90d9bc2ad40d655d92857715..d710834422afa1d4336f68e2425aaffd64d444e2 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -84,10 +89,10 @@ index 0000000000000000000000000000000000000000..807f5709af7fd9497633ecfc9e932f0d
+}
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..f9f75d96565ccee9437b7d39a98c9adf97446e51
index 0000000000000000000000000000000000000000..a9d71d2b769b8e4e0f5039e997fc5ebc1cc9bfbb
--- /dev/null
+++ b/src/main/java/net/pl3x/purpur/task/TPSBarTask.java
@@ -0,0 +1,112 @@
@@ -0,0 +1,116 @@
+package net.pl3x.purpur.task;
+
+import org.bukkit.Bukkit;
@@ -105,12 +110,18 @@ index 0000000000000000000000000000000000000000..f9f75d96565ccee9437b7d39a98c9adf
+ private final NamespacedKey key;
+ private BossBar bossbar;
+
+ public TPSBarTask() {
+ instance = this;
+ private TPSBarTask() {
+ this.key = new NamespacedKey("purpur", "tpsbar");
+ }
+
+ public BossBar getBossBar() {
+ 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) {
@@ -124,7 +135,7 @@ index 0000000000000000000000000000000000000000..f9f75d96565ccee9437b7d39a98c9adf
+
+ @Override
+ public void run() {
+ BossBar bossbar = getBossBar();
+ BossBar bossbar = bossbar();
+ if (bossbar.getPlayers().isEmpty()) {
+ return;
+ }
@@ -167,19 +178,18 @@ index 0000000000000000000000000000000000000000..f9f75d96565ccee9437b7d39a98c9adf
+ @Override
+ public void cancel() {
+ super.cancel();
+ BossBar bossbar = getBossBar();
+ BossBar bossbar = bossbar();
+ bossbar.setVisible(false);
+ bossbar.removeAll();
+ Bukkit.removeBossBar(key);
+ }
+
+ public static void removePlayer(Player player) {
+ BossBar bossbar = instance.getBossBar();
+ bossbar.removePlayer(player);
+ instance().bossbar().removePlayer(player);
+ }
+
+ public static void togglePlayer(Player player) {
+ BossBar bossbar = instance.getBossBar();
+ BossBar bossbar = instance().bossbar();
+ if (bossbar.getPlayers().contains(player)) {
+ bossbar.removePlayer(player);
+ } else {
@@ -190,8 +200,7 @@ index 0000000000000000000000000000000000000000..f9f75d96565ccee9437b7d39a98c9adf
+
+ public static void start() {
+ stop();
+ instance = new TPSBarTask();
+ instance.runTaskTimerAsynchronously(new MinecraftInternalPlugin(), 20L, 20L);
+ instance().runTaskTimerAsynchronously(new MinecraftInternalPlugin(), 20L, 20L);
+ }
+
+ public static void stop() {