From 2c4ad8df025c13e82bdedee45e64521443aaf159 Mon Sep 17 00:00:00 2001 From: Nathan Curran <30569566+Focusvity@users.noreply.github.com> Date: Thu, 24 Jun 2021 21:25:56 +1000 Subject: [PATCH] Optimising BukkitTelnet --- .gitignore | 1 + pom.xml | 40 ++++++++++++---- .../bukkittelnet/PlayerEventListener.java | 47 ++++++++----------- .../bukkittelnet/SocketListener.java | 34 ++------------ .../bukkittelnet/TelnetLogAppender.java | 5 +- .../totalfreedom/bukkittelnet/api/Server.java | 13 ++--- .../api/TelnetRequestDataTagsEvent.java | 2 +- .../bukkittelnet/session/ClientSession.java | 23 ++++----- .../bukkittelnet/session/FilterMode.java | 2 +- 9 files changed, 77 insertions(+), 90 deletions(-) diff --git a/.gitignore b/.gitignore index 27af358..398cee9 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ manifest.mf .Trashes ehthumbs.db Thumbs.db +dependency-reduced-pom.xml diff --git a/pom.xml b/pom.xml index 9665ea2..7f490b4 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 me.totalfreedom @@ -56,38 +57,59 @@ org.projectlombok lombok - 1.16.16 + 1.18.20 provided org.apache.logging.log4j log4j-core - 2.13.2 + 2.14.1 compile net.ess3 EssentialsX - 2.16.1 + 2.18.2 provided - + + org.json + json + 20210307 + compile + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + org.apache.maven.plugins maven-compiler-plugin - 3.3 + 3.8.1 - 1.7 - 1.7 - 1.7 + 11 + 11 diff --git a/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java b/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java index dd77535..b068548 100644 --- a/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java @@ -1,10 +1,6 @@ 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 com.earth2me.essentials.Essentials; import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent; import me.totalfreedom.bukkittelnet.api.TelnetRequestUsageEvent; import org.apache.commons.lang.StringUtils; @@ -18,9 +14,13 @@ 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; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashMap; +import java.util.Map; public class PlayerEventListener implements Listener { @@ -51,7 +51,7 @@ public class PlayerEventListener implements Listener Plugin ess = Bukkit.getPluginManager().getPlugin("Essentials"); if (ess instanceof Essentials) { - essentials = (Essentials)ess; + essentials = (Essentials) ess; return essentials; } return null; @@ -88,35 +88,30 @@ public class PlayerEventListener implements Listener { final JSONArray players = new JSONArray(); - final Iterator>> dataTagsIt = dataTags.entrySet().iterator(); - while (dataTagsIt.hasNext()) + for (Map.Entry> playerMapEntry : dataTags.entrySet()) { final HashMap info = new HashMap<>(); - final Map.Entry> dataTagsEntry = dataTagsIt.next(); - final Player player = dataTagsEntry.getKey(); - final Map playerTags = dataTagsEntry.getValue(); + final Player player = playerMapEntry.getKey(); + final Map playerTags = playerMapEntry.getValue(); info.put("name", player.getName()); info.put("ip", player.getAddress().getAddress().getHostAddress()); info.put("displayName", StringUtils.trimToEmpty(player.getDisplayName())); info.put("uuid", player.getUniqueId().toString()); - final Iterator> playerTagsIt = playerTags.entrySet().iterator(); - while (playerTagsIt.hasNext()) + for (Map.Entry playerTagsEntry : playerTags.entrySet()) { - final Map.Entry playerTagsEntry = playerTagsIt.next(); final Object value = playerTagsEntry.getValue(); info.put(playerTagsEntry.getKey(), value != null ? value.toString() : "null"); } - players.add(info); + players.put(info); } final JSONObject response = new JSONObject(); response.put("players", players); - - return response.toJSONString(); + return response.toString(); } private static BukkitTask usageUpdateTask = null; @@ -129,7 +124,7 @@ public class PlayerEventListener implements Listener return; } - usageUpdateTask= new BukkitRunnable() + usageUpdateTask = new BukkitRunnable() { @Override public void run() @@ -154,7 +149,7 @@ public class PlayerEventListener implements Listener essentials = getEssentials(); } - final HashMap info = new HashMap<>(); + final JSONObject info = new JSONObject(); String cpuUsage = null; String ramUsage = null; @@ -162,14 +157,10 @@ public class PlayerEventListener implements Listener if (essentials != null) { - tps = String.valueOf(String.valueOf(new BigDecimal(essentials.getTimer().getAverageTPS()).setScale(1, RoundingMode.CEILING))); + tps = String.valueOf(String.valueOf(BigDecimal.valueOf(essentials.getTimer().getAverageTPS()).setScale(1, RoundingMode.CEILING))); } info.put("tps", tps); - - final JSONObject data = new JSONObject(); - data.putAll(info); - - return data.toJSONString(); + return info.toString(); } } diff --git a/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java b/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java index 3c97ba9..a0efd3e 100644 --- a/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java @@ -48,14 +48,7 @@ public class SocketListener extends Thread } // Remove old entries - final Iterator> it = recentIPs.entrySet().iterator(); - while (it.hasNext()) - { - if (it.next().getValue() + LISTEN_THRESHOLD_MILLIS < System.currentTimeMillis()) - { - it.remove(); - } - } + recentIPs.entrySet().removeIf(inetAddressLongEntry -> inetAddressLongEntry.getValue() + LISTEN_THRESHOLD_MILLIS < System.currentTimeMillis()); final InetAddress addr = clientSocket.getInetAddress(); if (addr == null) @@ -94,7 +87,6 @@ public class SocketListener extends Thread final ClientSession clientSession = new ClientSession(telnet, clientSocket); clientSessions.add(clientSession); clientSession.start(); - removeDisconnected(); } @@ -119,30 +111,14 @@ public class SocketListener extends Thread public void triggerPlayerListUpdates(final String playerListData) { - final Iterator it = clientSessions.iterator(); - - while (it.hasNext()) - { - final ClientSession session = it.next(); - if (session != null) - { - session.syncTriggerPlayerListUpdate(playerListData); - } - } + clientSessions.forEach(session -> + session.syncTriggerPlayerListUpdate(playerListData)); } 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); - } - } + clientSessions.forEach(session -> + session.syncUsageUpdate(usageData)); } public void stopServer() diff --git a/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogAppender.java b/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogAppender.java index 697728f..dcc1bf5 100644 --- a/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogAppender.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogAppender.java @@ -13,6 +13,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.appender.AbstractAppender; +import org.apache.logging.log4j.core.config.Property; public class TelnetLogAppender extends AbstractAppender { @@ -23,7 +24,7 @@ public class TelnetLogAppender extends AbstractAppender public TelnetLogAppender() { - super("BukkitTelnet", null, null); + super("BukkitTelnet", null, null, true, Property.EMPTY_ARRAY); this.sessions = new HashSet<>(); this.dateFormat = new SimpleDateFormat("HH:mm:ss"); @@ -74,7 +75,7 @@ public class TelnetLogAppender extends AbstractAppender continue; } - if (session.getFilterMode() == FilterMode.NONCHAT_ONLY && chat) + if (session.getFilterMode() == FilterMode.NON_CHAT_ONLY && chat) { continue; } diff --git a/src/main/java/me/totalfreedom/bukkittelnet/api/Server.java b/src/main/java/me/totalfreedom/bukkittelnet/api/Server.java index 4755fbe..1fda918 100644 --- a/src/main/java/me/totalfreedom/bukkittelnet/api/Server.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/api/Server.java @@ -1,22 +1,23 @@ package me.totalfreedom.bukkittelnet.api; -import java.util.List; import me.totalfreedom.bukkittelnet.SocketListener; import me.totalfreedom.bukkittelnet.TelnetConfigLoader.TelnetConfig; import me.totalfreedom.bukkittelnet.session.ClientSession; +import java.util.List; + public interface Server { - public void startServer(); + void startServer(); - public void stopServer(); + void stopServer(); @Deprecated - public SocketListener getSocketListener(); + SocketListener getSocketListener(); - public TelnetConfig getConfig(); + TelnetConfig getConfig(); - public List getSessions(); + List getSessions(); } diff --git a/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestDataTagsEvent.java b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestDataTagsEvent.java index a196af6..5238766 100644 --- a/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestDataTagsEvent.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestDataTagsEvent.java @@ -18,7 +18,7 @@ public class TelnetRequestDataTagsEvent extends Event super(!Bukkit.getServer().isPrimaryThread()); for (final Player player : Bukkit.getServer().getOnlinePlayers()) { - dataTags.put(player, new HashMap()); + dataTags.put(player, new HashMap<>()); } } diff --git a/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java b/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java index 5ccbf0d..51777be 100644 --- a/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java @@ -23,9 +23,9 @@ import org.bukkit.scheduler.BukkitRunnable; public final class ClientSession extends Thread { - public static final Pattern NONASCII_FILTER = Pattern.compile("[^\\x20-\\x7E]"); + public static final Pattern NON_ASCII_FILTER = Pattern.compile("[^\\x20-\\x7E]"); public static final Pattern AUTH_INPUT_FILTER = Pattern.compile("[^_a-zA-Z0-9]"); - public static final Pattern COMMAND_INPUT_FILTER = Pattern.compile("^[^_a-zA-Z0-9/\\?!\\.]+"); + public static final Pattern COMMAND_INPUT_FILTER = Pattern.compile("^[^_a-zA-Z0-9/?!.]+"); // private final TelnetServer telnet; private final Socket clientSocket; @@ -121,17 +121,12 @@ public final class ClientSession extends Thread synchronized (clientSocket) { - if (clientSocket == null) - { - return; - } - writeLine("Closing connection..."); try { clientSocket.close(); } - catch (IOException ex) + catch (IOException ignored) { } } @@ -174,7 +169,7 @@ public final class ClientSession extends Thread writer.write(":" + ChatColor.stripColor(message) + "\r\n"); writer.flush(); } - catch (IOException ex) + catch (IOException ignored) { } } @@ -190,7 +185,7 @@ public final class ClientSession extends Thread { writer.flush(); } - catch (IOException ex) + catch (IOException ignored) { } } @@ -361,7 +356,7 @@ public final class ClientSession extends Thread { Thread.sleep(2000); } - catch (InterruptedException ex) + catch (InterruptedException ignored) { } } @@ -404,7 +399,7 @@ public final class ClientSession extends Thread continue; } - command = COMMAND_INPUT_FILTER.matcher(NONASCII_FILTER.matcher(command).replaceAll("")).replaceFirst("").trim(); + command = COMMAND_INPUT_FILTER.matcher(NON_ASCII_FILTER.matcher(command).replaceAll("")).replaceFirst("").trim(); if (command.isEmpty()) { continue; @@ -449,11 +444,11 @@ public final class ClientSession extends Thread } case CHAT_ONLY: { - filterMode = FilterMode.NONCHAT_ONLY; + filterMode = FilterMode.NON_CHAT_ONLY; writeLine("Showing only non-chat logs."); break; } - case NONCHAT_ONLY: + case NON_CHAT_ONLY: { filterMode = FilterMode.NONE; writeLine("Showing all logs."); diff --git a/src/main/java/me/totalfreedom/bukkittelnet/session/FilterMode.java b/src/main/java/me/totalfreedom/bukkittelnet/session/FilterMode.java index 023555f..9adbdfb 100644 --- a/src/main/java/me/totalfreedom/bukkittelnet/session/FilterMode.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/session/FilterMode.java @@ -4,6 +4,6 @@ public enum FilterMode { NONE, - NONCHAT_ONLY, + NON_CHAT_ONLY, CHAT_ONLY; }