From 541e9fdb844fbebfdd1e978e27bf7c370e1ce656 Mon Sep 17 00:00:00 2001
From: ZeroEpoch1969 <13510767+ZeroEpoch1969@users.noreply.github.com>
Date: Sun, 29 Mar 2020 23:05:25 -0700
Subject: [PATCH] ZTC stuff
---
pom.xml | 14 ++--
.../bukkittelnet/PlayerEventListener.java | 73 +++++++++++++++++++
.../bukkittelnet/SocketListener.java | 14 ++++
.../api/TelnetRequestUsageEvent.java | 22 ++++++
.../bukkittelnet/session/ClientSession.java | 28 ++++++-
5 files changed, 143 insertions(+), 8 deletions(-)
create mode 100644 src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestUsageEvent.java
diff --git a/pom.xml b/pom.xml
index 29fd90b..10621d6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,10 +39,9 @@
spigot
https://hub.spigotmc.org/nexus/content/groups/public/
-
- maven-central
- https://repo1.maven.org/maven2/
+ ess-repo
+ https://ci.ender.zone/plugin/repository/everything/
@@ -50,7 +49,7 @@
org.spigotmc
spigot-api
- 1.15.2-R0.1-SNAPSHOT
+ 1.15-R0.1-SNAPSHOT
compile
@@ -69,9 +68,10 @@
- com.googlecode.json-simple
- json-simple
- 1.1.1
+ net.ess3
+ EssentialsX
+ 2.16.1
+ provided
diff --git a/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java b/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java
index e9d3b7a..dd77535 100644
--- a/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java
+++ b/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java
@@ -1,9 +1,12 @@
package me.totalfreedom.bukkittelnet;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
+import me.totalfreedom.bukkittelnet.api.TelnetRequestUsageEvent;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -12,14 +15,18 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
+import com.earth2me.essentials.Essentials;
public class PlayerEventListener implements Listener
{
+ private static Essentials essentials = null;
+
private final BukkitTelnet plugin;
public PlayerEventListener(BukkitTelnet plugin)
@@ -39,6 +46,18 @@ public class PlayerEventListener implements Listener
triggerPlayerListUpdates();
}
+ public static Essentials getEssentials()
+ {
+ Plugin ess = Bukkit.getPluginManager().getPlugin("Essentials");
+ if (ess instanceof Essentials)
+ {
+ essentials = (Essentials)ess;
+ return essentials;
+ }
+ return null;
+
+ }
+
private static BukkitTask updateTask = null;
public void triggerPlayerListUpdates()
@@ -99,4 +118,58 @@ public class PlayerEventListener implements Listener
return response.toJSONString();
}
+
+ private static BukkitTask usageUpdateTask = null;
+
+ // Just putting this stuff here
+ public void triggerUsageUpdates()
+ {
+ if (usageUpdateTask != null)
+ {
+ return;
+ }
+
+ usageUpdateTask= new BukkitRunnable()
+ {
+ @Override
+ public void run()
+ {
+ final SocketListener socketListener = plugin.telnet.getSocketListener();
+ if (socketListener != null)
+ {
+ final TelnetRequestUsageEvent event = new TelnetRequestUsageEvent();
+ Bukkit.getServer().getPluginManager().callEvent(event);
+ socketListener.triggerDataUsageUpdates(generateUsageStats());
+ }
+ }
+ }.runTaskTimer(plugin, 100L, 100L); // every 5 seconds
+ }
+
+
+ @SuppressWarnings("unchecked")
+ private static String generateUsageStats()
+ {
+ if (essentials == null)
+ {
+ essentials = getEssentials();
+ }
+
+ final HashMap info = new HashMap<>();
+
+ String cpuUsage = null;
+ String ramUsage = null;
+ String tps = null;
+
+ if (essentials != null)
+ {
+ tps = String.valueOf(String.valueOf(new BigDecimal(essentials.getTimer().getAverageTPS()).setScale(1, RoundingMode.CEILING)));
+ }
+
+ info.put("tps", tps);
+
+ final JSONObject data = new JSONObject();
+ data.putAll(info);
+
+ return data.toJSONString();
+ }
}
diff --git a/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java b/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java
index 57ad292..3c97ba9 100644
--- a/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java
+++ b/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java
@@ -131,6 +131,20 @@ public class SocketListener extends Thread
}
}
+ public void triggerDataUsageUpdates(final String usageData)
+ {
+ final Iterator it = clientSessions.iterator();
+
+ while (it.hasNext())
+ {
+ final ClientSession session = it.next();
+ if (session != null)
+ {
+ session.syncUsageUpdate(usageData);
+ }
+ }
+ }
+
public void stopServer()
{
try
diff --git a/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestUsageEvent.java b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestUsageEvent.java
new file mode 100644
index 0000000..55187ea
--- /dev/null
+++ b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestUsageEvent.java
@@ -0,0 +1,22 @@
+package me.totalfreedom.bukkittelnet.api;
+
+import org.bukkit.Bukkit;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+
+public class TelnetRequestUsageEvent extends Event
+{
+
+ private static final HandlerList handlers = new HandlerList();
+
+ public TelnetRequestUsageEvent()
+ {
+ super(!Bukkit.getServer().isPrimaryThread());
+ }
+
+ @Override
+ public HandlerList getHandlers()
+ {
+ return handlers;
+ }
+}
diff --git a/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java b/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java
index 7b75993..5ccbf0d 100644
--- a/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java
+++ b/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java
@@ -39,7 +39,8 @@ public final class ClientSession extends Thread
private String username = "";
private volatile boolean terminated = false;
private volatile boolean authenticated = false;
- private volatile boolean enhancedMode = false;
+ private boolean enhancedMode = false;
+ private boolean enhancedPlusMode = false;
public ClientSession(TelnetServer telnet, Socket clientSocket)
{
@@ -84,6 +85,8 @@ public final class ClientSession extends Thread
mainLoop();
syncTerminateSession();
+
+ telnet.getPlugin().listener.triggerUsageUpdates();
}
public boolean syncIsAuthenticated()
@@ -472,6 +475,11 @@ public final class ClientSession extends Thread
telnet.getPlugin().listener.triggerPlayerListUpdates();
}
}
+ else if ("telnet.enhancedplus".equalsIgnoreCase(command))
+ {
+ enhancedPlusMode = !enhancedPlusMode;
+ writeLine((enhancedPlusMode ? "A" : "Dea") + "ctivated enhanced+ mode.");
+ }
else
{
writeLine("Invalid telnet command, use \"telnet.help\" to view help.");
@@ -495,4 +503,22 @@ public final class ClientSession extends Thread
writeLine("playerList~" + playerListData);
}
}
+
+ public void syncUsageUpdate(String usageData)
+ {
+ if (!enhancedPlusMode)
+ {
+ return;
+ }
+
+ synchronized (clientSocket)
+ {
+ if (clientSocket.isClosed())
+ {
+ return;
+ }
+
+ writeLine("usage~" + usageData);
+ }
+ }
}