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); + } + } }