From d15fa9760f04a6e58b4cd5ce8774ca3cb6c6cbec Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:31:13 +0200 Subject: [PATCH 01/30] Remove ProtocolCommand enum. --- .../com/comphenix/protocol/ProtocolLib.java | 77 +++++++------------ 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/ProtocolLib.java b/src/main/java/com/comphenix/protocol/ProtocolLib.java index 6909c160..07418b9d 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolLib.java +++ b/src/main/java/com/comphenix/protocol/ProtocolLib.java @@ -16,12 +16,7 @@ package com.comphenix.protocol; import com.comphenix.protocol.async.AsyncFilterManager; -import com.comphenix.protocol.error.BasicErrorReporter; -import com.comphenix.protocol.error.DelegatedErrorReporter; -import com.comphenix.protocol.error.DetailedErrorReporter; -import com.comphenix.protocol.error.ErrorReporter; -import com.comphenix.protocol.error.Report; -import com.comphenix.protocol.error.ReportType; +import com.comphenix.protocol.error.*; import com.comphenix.protocol.injector.InternalManager; import com.comphenix.protocol.injector.PacketFilterManager; import com.comphenix.protocol.metrics.Statistics; @@ -31,14 +26,22 @@ import com.comphenix.protocol.scheduler.ProtocolScheduler; import com.comphenix.protocol.scheduler.Task; import com.comphenix.protocol.updater.Updater; import com.comphenix.protocol.updater.Updater.UpdateType; -import com.comphenix.protocol.utility.*; +import com.comphenix.protocol.utility.ByteBuddyFactory; +import com.comphenix.protocol.utility.ChatExtensions; +import com.comphenix.protocol.utility.MinecraftVersion; +import com.comphenix.protocol.utility.Util; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; +import org.bukkit.Server; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.PluginCommand; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; import java.util.HashSet; -import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Handler; @@ -48,13 +51,6 @@ import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.bukkit.Server; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.PluginCommand; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.java.JavaPlugin; - /** * The main entry point for ProtocolLib. * @@ -201,35 +197,28 @@ public class ProtocolLib extends JavaPlugin { */ private void initializeCommands() { // Initialize command handlers - for (ProtocolCommand command : ProtocolCommand.values()) { - try { - switch (command) { - case PROTOCOL: - this.commandProtocol = new CommandProtocol(reporter, this, this.updater, config); - break; - case FILTER: - this.commandFilter = new CommandFilter(reporter, this, config); - break; - case PACKET: - this.commandPacket = new CommandPacket(reporter, this, logger, this.commandFilter, protocolManager); - break; - case LOGGING: - this.packetLogging = new PacketLogging(this, protocolManager); - break; - } - } catch (OutOfMemoryError e) { - throw e; - } catch (LinkageError e) { - logger.warning("Failed to register command " + command.name() + ": " + e); - } catch (Throwable e) { - reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_REGISTER_COMMAND) - .messageParam(command.name(), e.getMessage()).error(e)); - } + String commandName = ""; + try { + commandName = "PROTOCOL"; + this.commandProtocol = new CommandProtocol(reporter, this, this.updater, config); + commandName = "FILTER"; + this.commandFilter = new CommandFilter(reporter, this, config); + commandName = "PACKET"; + this.commandPacket = new CommandPacket(reporter, this, logger, this.commandFilter, protocolManager); + commandName = "LOGGING"; + this.packetLogging = new PacketLogging(this, protocolManager); + } catch (OutOfMemoryError e) { + throw e; + } catch (LinkageError e) { + logger.warning("Failed to register command " + commandName + ": " + e); + } catch (Throwable e) { + reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_REGISTER_COMMAND) + .messageParam(commandName, e.getMessage()).error(e)); } } /** - * Retrieve a error reporter that may be filtered by the configuration. + * Retrieve an error reporter that may be filtered by the configuration. * * @return The new default error reporter. */ @@ -614,12 +603,4 @@ public class ProtocolLib extends JavaPlugin { public ProtocolScheduler getScheduler() { return scheduler; } - - // Different commands - private enum ProtocolCommand { - FILTER, - PACKET, - PROTOCOL, - LOGGING - } } From 1709b62023ca69a334f7016ea9960c584239490c Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:37:19 +0200 Subject: [PATCH 02/30] Lazy init of filteredReporter, use ImmutableSet. --- src/main/java/com/comphenix/protocol/ProtocolLib.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/ProtocolLib.java b/src/main/java/com/comphenix/protocol/ProtocolLib.java index 07418b9d..72bb9673 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolLib.java +++ b/src/main/java/com/comphenix/protocol/ProtocolLib.java @@ -31,6 +31,7 @@ import com.comphenix.protocol.utility.ChatExtensions; import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.utility.Util; import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import org.bukkit.Server; import org.bukkit.command.CommandExecutor; @@ -41,7 +42,6 @@ import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; -import java.util.HashSet; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Handler; @@ -225,17 +225,17 @@ public class ProtocolLib extends JavaPlugin { private ErrorReporter getFilteredReporter(ErrorReporter reporter) { return new DelegatedErrorReporter(reporter) { private int lastModCount = -1; - private Set reports = new HashSet<>(); + private Set reports; @Override protected Report filterReport(Object sender, Report report, boolean detailed) { try { - String canonicalName = ReportType.getReportName(sender, report.getType()); - String reportName = Iterables.getLast(Splitter.on("#").split(canonicalName)).toUpperCase(); + final String canonicalName = ReportType.getReportName(sender, report.getType()); + final String reportName = Iterables.getLast(Splitter.on("#").split(canonicalName)).toUpperCase(); if (config != null && config.getModificationCount() != this.lastModCount) { // Update our cached set again - this.reports = new HashSet<>(config.getSuppressedReports()); + this.reports = ImmutableSet.copyOf(config.getSuppressedReports()); this.lastModCount = config.getModificationCount(); } From 1fe43f7e77266b6eec79bc5620c135fcda26f0c5 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:40:21 +0200 Subject: [PATCH 03/30] Rename parameter to not be the "record" keyword. --- src/main/java/com/comphenix/protocol/ProtocolLib.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/ProtocolLib.java b/src/main/java/com/comphenix/protocol/ProtocolLib.java index 72bb9673..36669f7d 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolLib.java +++ b/src/main/java/com/comphenix/protocol/ProtocolLib.java @@ -277,10 +277,10 @@ public class ProtocolLib extends JavaPlugin { // Broadcast information to every user too this.redirectHandler = new Handler() { @Override - public void publish(LogRecord record) { + public void publish(LogRecord logRecord) { // Only display warnings and above - if (record.getLevel().intValue() >= Level.WARNING.intValue()) { - ProtocolLib.this.commandPacket.broadcastMessageSilently(record.getMessage(), permission); + if (logRecord.getLevel().intValue() >= Level.WARNING.intValue()) { + ProtocolLib.this.commandPacket.broadcastMessageSilently(logRecord.getMessage(), permission); } } From 1abb0d01e577635f7da5521a2241112f0cf7c125 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:41:37 +0200 Subject: [PATCH 04/30] Simple cleanup. --- .../java/com/comphenix/protocol/ProtocolConfig.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/ProtocolConfig.java b/src/main/java/com/comphenix/protocol/ProtocolConfig.java index 9aa8cba7..35a15331 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolConfig.java +++ b/src/main/java/com/comphenix/protocol/ProtocolConfig.java @@ -56,7 +56,7 @@ public class ProtocolConfig { // Defaults private static final long DEFAULT_UPDATER_DELAY = 43200; - private Plugin plugin; + private final Plugin plugin; private Configuration config; private boolean loadingSections; @@ -145,7 +145,7 @@ public class ProtocolConfig { /** * Load data sections. * - * @param copyDefaults - whether or not to copy configuration defaults. + * @param copyDefaults - whether to copy configuration defaults. */ private void loadSections(boolean copyDefaults) { if (config != null) { @@ -231,7 +231,7 @@ public class ProtocolConfig { } /** - * Retrieve whether or not ProtocolLib should determine if a new version has been released. + * Retrieve whether ProtocolLib should determine if a new version has been released. * * @return TRUE if it should do this automatically, FALSE otherwise. */ @@ -240,7 +240,7 @@ public class ProtocolConfig { } /** - * Retrieve whether or not ProtocolLib should automatically download the new version. + * Retrieve whether ProtocolLib should automatically download the new version. * * @return TRUE if it should, FALSE otherwise. */ @@ -249,7 +249,7 @@ public class ProtocolConfig { } /** - * Determine whether or not debug mode is enabled. + * Determine whether debug mode is enabled. *

* This grants access to the filter command. * @@ -260,7 +260,7 @@ public class ProtocolConfig { } /** - * Set whether or not debug mode is enabled. + * Set whether debug mode is enabled. * * @param value - TRUE if it is enabled, FALSE otherwise. */ From 5b702cedf435d9a0bbe229da5f13c3858e939cb9 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:52:03 +0200 Subject: [PATCH 05/30] Faster getFirst lookup. --- .../comphenix/protocol/PacketTypeLookup.java | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/PacketTypeLookup.java b/src/main/java/com/comphenix/protocol/PacketTypeLookup.java index 8277b255..d6d582bb 100644 --- a/src/main/java/com/comphenix/protocol/PacketTypeLookup.java +++ b/src/main/java/com/comphenix/protocol/PacketTypeLookup.java @@ -1,10 +1,5 @@ package com.comphenix.protocol; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - import com.comphenix.protocol.PacketType.Protocol; import com.comphenix.protocol.PacketType.Sender; import com.comphenix.protocol.collections.IntegerMap; @@ -12,6 +7,11 @@ import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + /** * Retrieve a packet type based on its version and ID, optionally with protocol and sender too. * @author Kristian @@ -27,7 +27,7 @@ class PacketTypeLookup { public final IntegerMap STATUS_SERVER = new IntegerMap<>(); public final IntegerMap LOGIN_CLIENT = new IntegerMap<>(); public final IntegerMap LOGIN_SERVER = new IntegerMap<>(); - + /** * Retrieve the correct integer map for a specific protocol and sender. * @param protocol - the protocol. @@ -36,7 +36,7 @@ class PacketTypeLookup { */ public IntegerMap getMap(Protocol protocol, Sender sender) { switch (protocol) { - case HANDSHAKING: + case HANDSHAKING: return sender == Sender.CLIENT ? HANDSHAKE_CLIENT : HANDSHAKE_SERVER; case PLAY: return sender == Sender.CLIENT ? GAME_CLIENT : GAME_SERVER; @@ -60,7 +60,7 @@ class PacketTypeLookup { public final Map STATUS_SERVER = new ConcurrentHashMap<>(); public final Map LOGIN_CLIENT = new ConcurrentHashMap<>(); public final Map LOGIN_SERVER = new ConcurrentHashMap<>(); - + /** * Retrieve the correct integer map for a specific protocol and sender. * @param protocol - the protocol. @@ -69,7 +69,7 @@ class PacketTypeLookup { */ public Map getMap(Protocol protocol, Sender sender) { switch (protocol) { - case HANDSHAKING: + case HANDSHAKING: return sender == Sender.CLIENT ? HANDSHAKE_CLIENT : HANDSHAKE_SERVER; case PLAY: return sender == Sender.CLIENT ? GAME_CLIENT : GAME_SERVER; @@ -82,12 +82,12 @@ class PacketTypeLookup { } } } - + // Packet IDs from 1.6.4 and below private final IntegerMap legacyLookup = new IntegerMap<>(); private final IntegerMap serverLookup = new IntegerMap<>(); private final IntegerMap clientLookup = new IntegerMap<>(); - + // Packets for 1.7.2 private final ProtocolSenderLookup idLookup = new ProtocolSenderLookup(); @@ -103,7 +103,7 @@ class PacketTypeLookup { */ public PacketTypeLookup addPacketTypes(Iterable types) { Preconditions.checkNotNull(types, "types cannot be NULL"); - + for (PacketType type : types) { // Skip unknown current packets if (type.getCurrentId() != PacketType.UNKNOWN_PACKET) { @@ -114,7 +114,7 @@ class PacketTypeLookup { } return this; } - + /** * Retrieve a packet type from a legacy (1.6.4 and below) packet ID. * @param packetId - the legacy packet ID. @@ -123,7 +123,7 @@ class PacketTypeLookup { public PacketType getFromLegacy(int packetId) { return legacyLookup.get(packetId); } - + /** * Retrieve an unmodifiable view of all the packet types with this name. * @param name - the name. @@ -132,28 +132,27 @@ class PacketTypeLookup { public Collection getFromName(String name) { return Collections.unmodifiableCollection(nameLookup.get(name)); } - + /** * Retrieve a packet type from a legacy (1.6.4 and below) packet ID. * @param packetId - the legacy packet ID. * @param preference - which packet type to look for first. * @return The corresponding packet type, or NULL if not found. */ - public PacketType getFromLegacy(int packetId, Sender preference) { + public PacketType getFromLegacy(int packetId, Sender preference) { if (preference == Sender.CLIENT) return getFirst(packetId, clientLookup, serverLookup); else return getFirst(packetId, serverLookup, clientLookup); } - + // Helper method for looking up in two sets private T getFirst(int packetId, IntegerMap first, IntegerMap second) { - if (first.containsKey(packetId)) - return first.get(packetId); - else - return second.get(packetId); + T value = first.get(packetId); + if (value == null) value = second.get(packetId); + return value; } - + /** * Retrieve a packet type from a protocol, sender and packet ID. * @param protocol - the current protocol. From 3ea61b0a14449561a468b9149b80f560b7f26e2c Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:54:07 +0200 Subject: [PATCH 06/30] Simple cleanup. --- .../comphenix/protocol/MultipleLinesPrompt.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java b/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java index 64690e35..971570e3 100644 --- a/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java +++ b/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java @@ -1,11 +1,6 @@ package com.comphenix.protocol; -import org.bukkit.conversations.Conversation; -import org.bukkit.conversations.ConversationCanceller; -import org.bukkit.conversations.ConversationContext; -import org.bukkit.conversations.ExactMatchConversationCanceller; -import org.bukkit.conversations.Prompt; -import org.bukkit.conversations.StringPrompt; +import org.bukkit.conversations.*; /** * Represents a conversation prompt that accepts a list of lines. @@ -17,9 +12,9 @@ class MultipleLinesPrompt extends StringPrompt { * Represents a canceller that determines if the multiple lines prompt is finished. * @author Kristian */ - public static interface MultipleConversationCanceller extends ConversationCanceller { + public interface MultipleConversationCanceller extends ConversationCanceller { @Override - public boolean cancelBasedOnInput(ConversationContext context, String currentLine); + boolean cancelBasedOnInput(ConversationContext context, String currentLine); /** * Determine if the current prompt is done based on the context, last @@ -31,7 +26,7 @@ class MultipleLinesPrompt extends StringPrompt { * @param lineCount - number of lines. * @return TRUE if we are done, FALSE otherwise. */ - public boolean cancelBasedOnInput(ConversationContext context, String currentLine, + boolean cancelBasedOnInput(ConversationContext context, String currentLine, StringBuilder lines, int lineCount); } @@ -40,7 +35,7 @@ class MultipleLinesPrompt extends StringPrompt { * @author Kristian */ private static class MultipleWrapper implements MultipleConversationCanceller { - private ConversationCanceller canceller; + private final ConversationCanceller canceller; public MultipleWrapper(ConversationCanceller canceller) { this.canceller = canceller; From a30e1dd80f6c8e4aee6416562139548e0683c93b Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:57:42 +0200 Subject: [PATCH 07/30] switch case instead of equalsIgnoreCase chain. --- .../comphenix/protocol/CommandProtocol.java | 72 ++++++++++--------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/CommandProtocol.java b/src/main/java/com/comphenix/protocol/CommandProtocol.java index 2de1aaf3..083177b5 100644 --- a/src/main/java/com/comphenix/protocol/CommandProtocol.java +++ b/src/main/java/com/comphenix/protocol/CommandProtocol.java @@ -16,6 +16,19 @@ */ package com.comphenix.protocol; +import com.comphenix.protocol.error.DetailedErrorReporter; +import com.comphenix.protocol.error.ErrorReporter; +import com.comphenix.protocol.events.PacketListener; +import com.comphenix.protocol.timing.TimedListenerManager; +import com.comphenix.protocol.timing.TimingReportGenerator; +import com.comphenix.protocol.updater.Updater; +import com.comphenix.protocol.updater.Updater.UpdateType; +import com.comphenix.protocol.utility.Closer; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginDescriptionFile; + import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -27,20 +40,6 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Level; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginDescriptionFile; - -import com.comphenix.protocol.error.DetailedErrorReporter; -import com.comphenix.protocol.error.ErrorReporter; -import com.comphenix.protocol.events.PacketListener; -import com.comphenix.protocol.timing.TimedListenerManager; -import com.comphenix.protocol.timing.TimingReportGenerator; -import com.comphenix.protocol.updater.Updater; -import com.comphenix.protocol.updater.Updater.UpdateType; -import com.comphenix.protocol.utility.Closer; - /** * Handles the "protocol" administration command. * @@ -65,27 +64,34 @@ class CommandProtocol extends CommandBase { @Override protected boolean handleCommand(CommandSender sender, String[] args) { - String subCommand = args[0]; - // Only return TRUE if we executed the correct command - if (subCommand.equalsIgnoreCase("config") || subCommand.equalsIgnoreCase("reload")) { - reloadConfiguration(sender); - } else if (subCommand.equalsIgnoreCase("check")) { - checkVersion(sender, true); - } else if (subCommand.equalsIgnoreCase("update")) { - updateVersion(sender, true); - } else if (subCommand.equalsIgnoreCase("timings")) { - toggleTimings(sender, args); - } else if (subCommand.equalsIgnoreCase("listeners")) { - printListeners(sender); - } else if (subCommand.equalsIgnoreCase("version")) { - printVersion(sender); - } else if (subCommand.equalsIgnoreCase("dump")) { - dump(sender); - } else { - return false; + switch (args[0].toLowerCase()) + { + case "config": + case "reload": + reloadConfiguration(sender); + break; + case "check": + checkVersion(sender, true); + break; + case "update": + updateVersion(sender, true); + break; + case "timings": + toggleTimings(sender, args); + break; + case "listeners": + printListeners(sender); + break; + case "version": + printVersion(sender); + break; + case "dump": + dump(sender); + break; + default: + return false; } - return true; } From 994ec37446c6db59a131e26c4711640211939c44 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Fri, 14 Jul 2023 23:59:08 +0200 Subject: [PATCH 08/30] Simple cleanup. --- src/main/java/com/comphenix/protocol/CommandProtocol.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/CommandProtocol.java b/src/main/java/com/comphenix/protocol/CommandProtocol.java index 083177b5..d628524b 100644 --- a/src/main/java/com/comphenix/protocol/CommandProtocol.java +++ b/src/main/java/com/comphenix/protocol/CommandProtocol.java @@ -51,9 +51,9 @@ class CommandProtocol extends CommandBase { */ public static final String NAME = "protocol"; - private Plugin plugin; - private Updater updater; - private ProtocolConfig config; + private final Plugin plugin; + private final Updater updater; + private final ProtocolConfig config; public CommandProtocol(ErrorReporter reporter, Plugin plugin, Updater updater, ProtocolConfig config) { super(reporter, CommandBase.PERMISSION_ADMIN, NAME, 1); From 1525536f61ba1b7a6e99033395d966a4934f95b9 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:08:12 +0200 Subject: [PATCH 09/30] Simple cleanup. --- .../com/comphenix/protocol/CommandPacket.java | 12 +---- .../protocol/async/AsyncFilterManager.java | 17 ++++--- .../protocol/async/AsyncListenerHandler.java | 34 +++++++------- .../comphenix/protocol/async/AsyncMarker.java | 45 +++++++++---------- .../protocol/async/AsyncRunnable.java | 6 +-- .../protocol/async/NullPacketListener.java | 7 ++- .../protocol/async/PacketEventHolder.java | 2 +- .../protocol/async/PacketProcessingQueue.java | 24 +++++----- .../protocol/async/PacketSendingQueue.java | 27 ++++++----- 9 files changed, 78 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/CommandPacket.java b/src/main/java/com/comphenix/protocol/CommandPacket.java index 73a2d909..3777becb 100644 --- a/src/main/java/com/comphenix/protocol/CommandPacket.java +++ b/src/main/java/com/comphenix/protocol/CommandPacket.java @@ -32,15 +32,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Deque; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.WeakHashMap; +import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; @@ -76,7 +68,7 @@ class CommandPacket extends CommandBase { private final PacketTypeParser typeParser = new PacketTypeParser(); // Paged message - private final Map> pagedMessage = new WeakHashMap>(); + private final Map> pagedMessage = new WeakHashMap<>(); // Current registered packet types private final PacketTypeSet packetTypes = new PacketTypeSet(); diff --git a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java index 1c74bea3..f7da2337 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java @@ -17,12 +17,6 @@ package com.comphenix.protocol.async; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; - import com.comphenix.protocol.AsynchronousManager; import com.comphenix.protocol.PacketStream; import com.comphenix.protocol.PacketType; @@ -37,10 +31,15 @@ import com.comphenix.protocol.scheduler.ProtocolScheduler; import com.google.common.base.Objects; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; - import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + /** * Represents a filter manager for asynchronous packets. *

@@ -163,7 +162,7 @@ public class AsyncFilterManager implements AsynchronousManager { * If you already have a synchronous event, call this method with autoInject set to FALSE. * * @param listener - the packet listener that will receive these asynchronous events. - * @param autoInject - whether or not to automatically create the corresponding synchronous listener, + * @param autoInject - whether to automatically create the corresponding synchronous listener, * @return An asynchronous handler. */ public AsyncListenerHandler registerAsyncHandler(PacketListener listener, boolean autoInject) { @@ -460,7 +459,7 @@ public class AsyncFilterManager implements AsynchronousManager { /** * Send any due packets, or clean up packets that have expired. * @param tickCounter Tick counter - * @param onMainThread Whether or not to execute on the main thread + * @param onMainThread Whether to execute on the main thread */ public void sendProcessedPackets(int tickCounter, boolean onMainThread) { // The server queue is unlikely to need checking that often diff --git a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java index fdddaa3b..7e23c915 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java @@ -17,13 +17,6 @@ package com.comphenix.protocol.async; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.error.Report; import com.comphenix.protocol.error.ReportType; @@ -37,9 +30,15 @@ import com.comphenix.protocol.timing.TimedListenerManager.ListenerType; import com.comphenix.protocol.timing.TimedTracker; import com.google.common.base.Function; import com.google.common.base.Joiner; - import org.bukkit.plugin.Plugin; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + /** * Represents a handler for an asynchronous event. *

@@ -78,30 +77,30 @@ public class AsyncListenerHandler { private final AtomicInteger started = new AtomicInteger(); // The packet listener - private PacketListener listener; + private final PacketListener listener; // The filter manager - private AsyncFilterManager filterManager; + private final AsyncFilterManager filterManager; private NullPacketListener nullPacketListener; // List of queued packets - private ArrayBlockingQueue queuedPackets = new ArrayBlockingQueue(DEFAULT_CAPACITY); + private final ArrayBlockingQueue queuedPackets = new ArrayBlockingQueue<>(DEFAULT_CAPACITY); // List of cancelled tasks - private final Set stoppedTasks = new HashSet(); + private final Set stoppedTasks = new HashSet<>(); private final Object stopLock = new Object(); // Processing task on the main thread private Task syncTask = null; // Minecraft main thread - private Thread mainThread; + private final Thread mainThread; // Warn plugins that the async listener handler must be started private Task warningTask; // Timing manager - private TimedListenerManager timedManager = TimedListenerManager.getInstance(); + private final TimedListenerManager timedManager = TimedListenerManager.getInstance(); /** * Construct a manager for an asynchronous packet handler. @@ -354,10 +353,7 @@ public class AsyncListenerHandler { * @return A comma separated list of packet IDs in the whitelist, or the emtpy string. */ private String fromWhitelist(ListeningWhitelist whitelist) { - if (whitelist == null) - return ""; - else - return Joiner.on(", ").join(whitelist.getTypes()); + return whitelist == null ? "" : Joiner.on(", ").join(whitelist.getTypes()); } /** @@ -634,7 +630,7 @@ public class AsyncListenerHandler { // Now, get the next non-cancelled listener if (!marker.hasExpired()) { - for (; marker.getListenerTraversal().hasNext(); ) { + while (marker.getListenerTraversal().hasNext()) { AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener(); if (!handler.isCancelled()) { diff --git a/src/main/java/com/comphenix/protocol/async/AsyncMarker.java b/src/main/java/com/comphenix/protocol/async/AsyncMarker.java index 23c16fa4..a39d09e2 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncMarker.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncMarker.java @@ -17,15 +17,6 @@ package com.comphenix.protocol.async; -import java.io.IOException; -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Level; - import com.comphenix.protocol.PacketStream; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLogger; @@ -38,6 +29,15 @@ import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftVersion; import com.google.common.primitives.Longs; +import java.io.IOException; +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; + /** * Contains information about the packet that is being processed by asynchronous listeners. *

@@ -53,7 +53,7 @@ public class AsyncMarker implements Serializable, Comparable { private static final long serialVersionUID = -2621498096616187384L; /** - * Default number of milliseconds until a packet will rejected. + * Default number of milliseconds until a packet will be rejected. */ public static final int DEFAULT_TIMEOUT_DELTA = 1800 * 1000; @@ -83,16 +83,16 @@ public class AsyncMarker implements Serializable, Comparable { // Used to determine if a packet must be reordered in the sending queue private Long queuedSendingIndex; - // Whether or not the packet has been processed by the listeners + // Whether the packet has been processed by the listeners private volatile boolean processed; - // Whether or not the packet has been sent + // Whether the packet has been sent private volatile boolean transmitted; - // Whether or not the asynchronous processing itself should be cancelled + // Whether the asynchronous processing itself should be cancelled private volatile boolean asyncCancelled; - // Whether or not to delay processing + // Whether to delay processing private AtomicInteger processingDelay = new AtomicInteger(); // Used to synchronize processing on the shared PacketEvent @@ -103,11 +103,11 @@ public class AsyncMarker implements Serializable, Comparable { private transient int workerID; // Determine if Minecraft processes this packet asynchronously - private volatile static Method isMinecraftAsync; - private volatile static boolean alwaysSync; + private static volatile Method isMinecraftAsync; + private static volatile boolean alwaysSync; /** - * Create a container for asyncronous packets. + * Create a container for asynchronous packets. * @param initialTime - the current time in milliseconds since 01.01.1970 00:00. */ AsyncMarker(PacketStream packetStream, long sendingIndex, long initialTime, long timeoutDelta) { @@ -194,7 +194,7 @@ public class AsyncMarker implements Serializable, Comparable { } /** - * Retrieve whether or not this packet has been processed by the async listeners. + * Retrieve whether this packet has been processed by the async listeners. * @return TRUE if it has been processed, FALSE otherwise. */ public boolean isProcessed() { @@ -202,7 +202,7 @@ public class AsyncMarker implements Serializable, Comparable { } /** - * Sets whether or not this packet has been processed by the async listeners. + * Sets whether this packet has been processed by the async listeners. * @param processed - TRUE if it has, FALSE otherwise. */ void setProcessed(boolean processed) { @@ -315,7 +315,7 @@ public class AsyncMarker implements Serializable, Comparable { } /** - * Set whether or not the asynchronous handling should be cancelled. + * Set whether the asynchronous handling should be cancelled. *

* This is only relevant during the synchronous processing. Asynchronous * listeners should use the normal cancel-field to cancel a PacketEvent. @@ -457,10 +457,7 @@ public class AsyncMarker implements Serializable, Comparable { @Override public int compareTo(AsyncMarker o) { - if (o == null) - return 1; - else - return Longs.compare(getNewSendingIndex(), o.getNewSendingIndex()); + return o == null ? 1 : Longs.compare(getNewSendingIndex(), o.getNewSendingIndex()); } @Override diff --git a/src/main/java/com/comphenix/protocol/async/AsyncRunnable.java b/src/main/java/com/comphenix/protocol/async/AsyncRunnable.java index 7b16aad5..b63f7aa3 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncRunnable.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncRunnable.java @@ -28,7 +28,7 @@ public interface AsyncRunnable extends Runnable { * Retrieve a unique worker ID. * @return Unique worker ID. */ - public int getID(); + int getID(); /** * Stop the given runnable. @@ -37,13 +37,13 @@ public interface AsyncRunnable extends Runnable { * @return TRUE if the thread was stopped, FALSE if it was already stopped. * @throws InterruptedException if it is interrupted */ - public boolean stop() throws InterruptedException; + boolean stop() throws InterruptedException; /** * Determine if we're running or not. * @return TRUE if we're running, FALSE otherwise. */ - public boolean isRunning(); + boolean isRunning(); /** * Determine if this runnable has already run its course. diff --git a/src/main/java/com/comphenix/protocol/async/NullPacketListener.java b/src/main/java/com/comphenix/protocol/async/NullPacketListener.java index 6f627d62..39d9b3ef 100644 --- a/src/main/java/com/comphenix/protocol/async/NullPacketListener.java +++ b/src/main/java/com/comphenix/protocol/async/NullPacketListener.java @@ -18,7 +18,6 @@ package com.comphenix.protocol.async; import com.comphenix.protocol.events.*; - import org.bukkit.plugin.Plugin; /** @@ -28,9 +27,9 @@ import org.bukkit.plugin.Plugin; */ class NullPacketListener implements PacketListener { - private ListeningWhitelist sendingWhitelist; - private ListeningWhitelist receivingWhitelist; - private Plugin plugin; + private final ListeningWhitelist sendingWhitelist; + private final ListeningWhitelist receivingWhitelist; + private final Plugin plugin; /** * Create a no-op listener with the same whitelist and plugin as the given listener. diff --git a/src/main/java/com/comphenix/protocol/async/PacketEventHolder.java b/src/main/java/com/comphenix/protocol/async/PacketEventHolder.java index 16b6e32a..52363286 100644 --- a/src/main/java/com/comphenix/protocol/async/PacketEventHolder.java +++ b/src/main/java/com/comphenix/protocol/async/PacketEventHolder.java @@ -29,7 +29,7 @@ import com.google.common.primitives.Longs; */ class PacketEventHolder implements Comparable { - private PacketEvent event; + private final PacketEvent event; private long sendingIndex = 0; /** diff --git a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java index d0c8da01..c8495964 100644 --- a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java +++ b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java @@ -17,12 +17,6 @@ package com.comphenix.protocol.async; -import java.util.Collection; -import java.util.Iterator; -import java.util.PriorityQueue; -import java.util.Queue; -import java.util.concurrent.Semaphore; - import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.concurrency.AbstractConcurrentListenerMultimap; import com.comphenix.protocol.error.Report; @@ -31,6 +25,12 @@ import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.injector.PrioritizedListener; import com.google.common.collect.MinMaxPriorityQueue; +import java.util.Collection; +import java.util.Iterator; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.concurrent.Semaphore; + /** * Handles the processing of every packet type. @@ -58,13 +58,13 @@ class PacketProcessingQueue extends AbstractConcurrentListenerMultimap processingQueue; // Packets for sending - private PlayerSendingHandler sendingHandler; + private final PlayerSendingHandler sendingHandler; public PacketProcessingQueue(PlayerSendingHandler sendingHandler) { this(sendingHandler, INITIAL_CAPACITY, DEFAULT_QUEUE_LIMIT, DEFAULT_MAXIMUM_CONCURRENCY); @@ -77,7 +77,7 @@ class PacketProcessingQueue extends AbstractConcurrentListenerMultimapcreate(), null); + create(), null); } catch (IncompatibleClassChangeError e) { // Print in the console ProtocolLibrary.getErrorReporter().reportWarning( @@ -96,8 +96,8 @@ class PacketProcessingQueue extends AbstractConcurrentListenerMultimap sendingQueue; // Asynchronous packet sending private final Executor asynchronousSender; - // Whether or not we've run the cleanup procedure + // Whether we've run the cleanup procedure private boolean cleanedUp = false; /** * Create a packet sending queue. * - * @param notThreadSafe - whether or not to synchronize with the main thread or a background thread. + * @param notThreadSafe - whether to synchronize with the main thread or a background thread. */ public PacketSendingQueue(boolean notThreadSafe, Executor asynchronousSender) { this.sendingQueue = new PriorityBlockingQueue<>(INITIAL_CAPACITY); @@ -79,7 +78,7 @@ abstract class PacketSendingQueue { * Invoked when one of the packets have finished processing. * * @param packetUpdated - the packet that has now been updated. - * @param onMainThread - whether or not this is occuring on the main thread. + * @param onMainThread - whether this is occurring on the main thread. */ public synchronized void signalPacketUpdate(PacketEvent packetUpdated, boolean onMainThread) { @@ -105,7 +104,7 @@ abstract class PacketSendingQueue { /*** * Invoked when a list of packet IDs are no longer associated with any listeners. * @param packetsRemoved - packets that no longer have any listeners. - * @param onMainThread - whether or not this is occurring on the main thread. + * @param onMainThread - whether this is occurring on the main thread. */ public synchronized void signalPacketUpdate(List packetsRemoved, boolean onMainThread) { Set lookup = new HashSet<>(packetsRemoved); @@ -126,10 +125,10 @@ abstract class PacketSendingQueue { /** * Attempt to send any remaining packets. * - * @param onMainThread - whether or not this is occuring on the main thread. + * @param onMainThread - whether this is occurring on the main thread. */ public void trySendPackets(boolean onMainThread) { - // Whether or not to continue sending packets + // Whether to continue sending packets boolean sending = true; // Transmit as many packets as we can @@ -255,7 +254,7 @@ abstract class PacketSendingQueue { } /** - * Whether or not the packet transmission must synchronize with the main thread. + * Whether the packet transmission must synchronize with the main thread. * * @return TRUE if it must, FALSE otherwise. */ From 58f311e5b770e69236c9191de1d2923e3137d843 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:11:18 +0200 Subject: [PATCH 10/30] Use streams for mapping. --- .../protocol/async/PlayerSendingHandler.java | 33 ++++++++----------- .../protocol/async/Synchronization.java | 7 ++-- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java b/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java index c2a3abb9..5e68399f 100644 --- a/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java +++ b/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java @@ -17,22 +17,21 @@ package com.comphenix.protocol.async; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.concurrency.ConcurrentPlayerMap; import com.comphenix.protocol.error.ErrorReporter; import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.injector.SortedPacketListenerList; import com.google.common.util.concurrent.ThreadFactoryBuilder; - import org.bukkit.entity.Player; +import java.util.List; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.stream.Collectors; + /** * Contains every sending queue for every player. * @@ -49,7 +48,7 @@ class PlayerSendingHandler { // Asynchronous packet sending private Executor asynchronousSender; - // Whether or not we're currently cleaning up + // Whether we're currently cleaning up private volatile boolean cleaningUp; /** @@ -221,11 +220,9 @@ class PlayerSendingHandler { * @return Every sever packet queue. */ public List getServerQueues() { - List result = new ArrayList<>(); - - for (QueueContainer queue : playerSendingQueues.values()) - result.add(queue.getServerQueue()); - return result; + return playerSendingQueues.values().stream() + .map(QueueContainer::getServerQueue) + .collect(Collectors.toList()); } /** @@ -233,11 +230,9 @@ class PlayerSendingHandler { * @return Every client packet queue. */ public List getClientQueues() { - List result = new ArrayList<>(); - - for (QueueContainer queue : playerSendingQueues.values()) - result.add(queue.getClientQueue()); - return result; + return playerSendingQueues.values().stream() + .map(QueueContainer::getClientQueue) + .collect(Collectors.toList()); } /** diff --git a/src/main/java/com/comphenix/protocol/async/Synchronization.java b/src/main/java/com/comphenix/protocol/async/Synchronization.java index b33b3377..5b1f0bbc 100644 --- a/src/main/java/com/comphenix/protocol/async/Synchronization.java +++ b/src/main/java/com/comphenix/protocol/async/Synchronization.java @@ -17,14 +17,14 @@ package com.comphenix.protocol.async; +import com.google.common.base.Preconditions; + import javax.annotation.Nullable; import java.io.Serializable; import java.util.Collection; import java.util.Iterator; import java.util.Queue; -import com.google.common.base.Preconditions; - /** * Synchronization views copied from Google Guava. * @@ -43,8 +43,7 @@ class Synchronization { */ public static Queue queue(Queue queue, @Nullable Object mutex) { return (queue instanceof SynchronizedQueue) ? - queue : - new SynchronizedQueue(queue, mutex); + queue : new SynchronizedQueue<>(queue, mutex); } private static class SynchronizedObject implements Serializable { From 0d6ac32bb99d2fd4517f1a6e007cc5ccdc8a3cca Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:15:01 +0200 Subject: [PATCH 11/30] Reduce nesting. --- .../protocol/async/PacketProcessingQueue.java | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java index c8495964..77520891 100644 --- a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java +++ b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java @@ -128,39 +128,38 @@ class PacketProcessingQueue extends AbstractConcurrentListenerMultimap> list = getListener(packet.getPacketType()); - - marker.incrementProcessingDelay(); - - // Yes, removing the marker will cause the chain to stop - if (list != null) { - Iterator> iterator = list.iterator(); - - if (iterator.hasNext()) { - marker.setListenerTraversal(iterator); - iterator.next().getListener().enqueuePacket(packet); - continue; - } - } - - // The packet has no further listeners. Just send it. - if (marker.decrementProcessingDelay() == 0) { - PacketSendingQueue sendingQueue = sendingHandler.getSendingQueue(packet, false); - - // In case the player has logged out - if (sendingQueue != null) - sendingQueue.signalPacketUpdate(packet, onMainThread); - } - signalProcessingDone(); - - } else { + if (holder == null) { // No more queued packets. signalProcessingDone(); return; } + + PacketEvent packet = holder.getEvent(); + AsyncMarker marker = packet.getAsyncMarker(); + Collection> list = getListener(packet.getPacketType()); + + marker.incrementProcessingDelay(); + + // Yes, removing the marker will cause the chain to stop + if (list != null) { + Iterator> iterator = list.iterator(); + + if (iterator.hasNext()) { + marker.setListenerTraversal(iterator); + iterator.next().getListener().enqueuePacket(packet); + continue; + } + } + + // The packet has no further listeners. Just send it. + if (marker.decrementProcessingDelay() == 0) { + PacketSendingQueue sendingQueue = sendingHandler.getSendingQueue(packet, false); + + // In case the player has logged out + if (sendingQueue != null) + sendingQueue.signalPacketUpdate(packet, onMainThread); + } + signalProcessingDone(); } } From edd2e42cda52a51a18dcc932f416261304f7d636 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:19:36 +0200 Subject: [PATCH 12/30] Faster cache lookup. --- .../protocol/injector/BukkitUnwrapper.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java b/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java index 1b466d84..02048982 100644 --- a/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java +++ b/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java @@ -27,13 +27,14 @@ import com.comphenix.protocol.reflect.accessors.FieldAccessor; import com.comphenix.protocol.reflect.instances.DefaultInstances; import com.comphenix.protocol.utility.MinecraftReflection; import com.google.common.primitives.Primitives; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collection; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; +import java.util.concurrent.ConcurrentMap; /** * Represents an object capable of converting wrapped Bukkit objects into NMS objects. @@ -53,7 +54,7 @@ public class BukkitUnwrapper implements Unwrapper { public static final ReportType REPORT_CANNOT_FIND_UNWRAP_METHOD = new ReportType("Cannot find method."); public static final ReportType REPORT_CANNOT_READ_FIELD_HANDLE = new ReportType("Cannot read field 'handle'."); - private static final Map, Unwrapper> UNWRAPPER_CACHE = new ConcurrentHashMap, Unwrapper>(); + private static final ConcurrentMap, Unwrapper> UNWRAPPER_CACHE = new ConcurrentHashMap<>(); private static BukkitUnwrapper DEFAULT; // The current error reporter @@ -154,11 +155,10 @@ public class BukkitUnwrapper implements Unwrapper { * @return An unwrapper for the given class. */ private Unwrapper getSpecificUnwrapper(final Class type) { - // See if we're already determined this - if (UNWRAPPER_CACHE.containsKey(type)) { - // We will never remove from the cache, so this ought to be thread safe - return UNWRAPPER_CACHE.get(type); - } + // See if we've already determined this + // We will never remove from the cache, so this ought to be thread safe + final Unwrapper cached = UNWRAPPER_CACHE.get(type); + if (cached != null) return cached; try { final Method find = type.getMethod("getHandle"); From ba73098ee7d41e71bca98b3f735205dd92e1ea04 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:21:27 +0200 Subject: [PATCH 13/30] Reduce nesting. --- .../protocol/injector/BukkitUnwrapper.java | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java b/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java index 02048982..ee50ce73 100644 --- a/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java +++ b/src/main/java/com/comphenix/protocol/injector/BukkitUnwrapper.java @@ -253,36 +253,33 @@ public class BukkitUnwrapper implements Unwrapper { */ private Unwrapper getFieldUnwrapper(final Class type) { // See if we succeeded - FieldAccessor accessor = Accessors.getFieldAccessorOrNull(type, "handle", null); - if (accessor != null) { - Unwrapper fieldUnwrapper = new Unwrapper() { - @Override - public Object unwrapItem(Object wrappedObject) { - try { - if (wrappedObject instanceof Class) { - return checkClass((Class) wrappedObject, type, accessor.getField().getType()); - } - - return accessor.get(wrappedObject); - } catch (IllegalStateException e) { - reporter.reportDetailed(this, - Report.newBuilder(REPORT_CANNOT_READ_FIELD_HANDLE).error(e) - .callerParam(wrappedObject, accessor.getField()) - ); - return null; - } - } - }; - - UNWRAPPER_CACHE.put(type, fieldUnwrapper); - return fieldUnwrapper; - - } else { + final FieldAccessor accessor = Accessors.getFieldAccessorOrNull(type, "handle", null); + if (accessor == null) { // Inform about this too - reporter.reportDetailed(this, - Report.newBuilder(REPORT_CANNOT_READ_FIELD_HANDLE).callerParam(type) - ); + reporter.reportDetailed(this, Report.newBuilder(REPORT_CANNOT_READ_FIELD_HANDLE).callerParam(type)); return null; } + + Unwrapper fieldUnwrapper = new Unwrapper() { + @Override + public Object unwrapItem(Object wrappedObject) { + try { + if (wrappedObject instanceof Class) { + return checkClass((Class) wrappedObject, type, accessor.getField().getType()); + } + + return accessor.get(wrappedObject); + } catch (IllegalStateException e) { + reporter.reportDetailed(this, + Report.newBuilder(REPORT_CANNOT_READ_FIELD_HANDLE).error(e) + .callerParam(wrappedObject, accessor.getField()) + ); + return null; + } + } + }; + + UNWRAPPER_CACHE.put(type, fieldUnwrapper); + return fieldUnwrapper; } } From 8acbede56ad894f69e4f13784317c36758471c2c Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:24:47 +0200 Subject: [PATCH 14/30] Faster mapping with streams. --- .../protocol/injector/EntityUtilities.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/EntityUtilities.java b/src/main/java/com/comphenix/protocol/injector/EntityUtilities.java index 442c25cc..3760a3ca 100644 --- a/src/main/java/com/comphenix/protocol/injector/EntityUtilities.java +++ b/src/main/java/com/comphenix/protocol/injector/EntityUtilities.java @@ -29,6 +29,10 @@ import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.utility.Util; import com.comphenix.protocol.wrappers.WrappedIntHashMap; +import org.apache.commons.lang.Validate; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -38,11 +42,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - -import org.apache.commons.lang.Validate; -import org.bukkit.World; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; +import java.util.stream.Collectors; /** * Used to perform certain operations on entities. @@ -287,9 +287,9 @@ class EntityUtilities { } private List getPlayerConnections(List nmsPlayers) { - List connections = new ArrayList<>(nmsPlayers.size()); - nmsPlayers.forEach(nmsPlayer -> connections.add(MinecraftFields.getPlayerConnection(nmsPlayer))); - return connections; + return nmsPlayers.stream() + .map(MinecraftFields::getPlayerConnection) + .collect(Collectors.toList()); } private List unwrapBukkit(List players) { From f5f2b5c6f8d8a2329ba742cb65972688e8b98f7e Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:26:03 +0200 Subject: [PATCH 15/30] Simple cleanup. --- .../com/comphenix/protocol/injector/PacketConstructor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java b/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java index 6a32b4e3..8a6f2f5e 100644 --- a/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java +++ b/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java @@ -243,7 +243,7 @@ public class PacketConstructor { * * @author Kristian */ - public static interface Unwrapper { + public interface Unwrapper { /** * Convert the given wrapped object to the equivalent net.minecraft.server object. @@ -254,6 +254,6 @@ public class PacketConstructor { * @param wrappedObject - wrapped object or class. * @return The equivalent net.minecraft.server object or class. */ - public Object unwrapItem(Object wrappedObject); + Object unwrapItem(Object wrappedObject); } } From 384e61d6ef43dbf53b662efdab8e5bcbee512084 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:34:23 +0200 Subject: [PATCH 16/30] Faster temporaryPlayer method lookup. --- .../temporary/TemporaryPlayerFactory.java | 71 +++++++++---------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/temporary/TemporaryPlayerFactory.java b/src/main/java/com/comphenix/protocol/injector/temporary/TemporaryPlayerFactory.java index bae2f582..de7fee30 100644 --- a/src/main/java/com/comphenix/protocol/injector/temporary/TemporaryPlayerFactory.java +++ b/src/main/java/com/comphenix/protocol/injector/temporary/TemporaryPlayerFactory.java @@ -20,8 +20,6 @@ package com.comphenix.protocol.injector.temporary; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.utility.ByteBuddyFactory; import com.comphenix.protocol.utility.ChatExtensions; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; import net.bytebuddy.description.ByteCodeElement; import net.bytebuddy.description.modifier.Visibility; import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; @@ -29,16 +27,15 @@ import net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy; import net.bytebuddy.implementation.FieldAccessor; import net.bytebuddy.implementation.MethodCall; import net.bytebuddy.implementation.MethodDelegation; -import net.bytebuddy.implementation.bind.annotation.AllArguments; -import net.bytebuddy.implementation.bind.annotation.FieldValue; -import net.bytebuddy.implementation.bind.annotation.Origin; -import net.bytebuddy.implementation.bind.annotation.RuntimeType; -import net.bytebuddy.implementation.bind.annotation.This; +import net.bytebuddy.implementation.bind.annotation.*; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; import org.bukkit.Server; import org.bukkit.entity.Player; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; + /** * Create fake player instances that represents pre-authenticated clients. */ @@ -86,38 +83,36 @@ public class TemporaryPlayerFactory { throw new IllegalStateException("Unable to find injector."); } - // Use the socket to get the address - else if (methodName.equals("getPlayer")) { - return injector.getPlayer(); - } else if (methodName.equals("getAddress")) { - return injector.getAddress(); - } else if (methodName.equals("getServer")) { - return server; - } + switch (methodName) + { + case "getPlayer": + return injector.getPlayer(); + case "getAddress": + // Use the socket to get the address + return injector.getAddress(); + case "getServer": + return server; + case "chat": + case "sendMessage": + try { + Object argument = args[0]; - // Handle send message methods - if (methodName.equals("chat") || methodName.equals("sendMessage")) { - try { - Object argument = args[0]; - - // Dynamic overloading - if (argument instanceof String) { - return sendMessage(injector, (String) argument); - } else if (argument instanceof String[]) { - for (String message : (String[]) argument) { - sendMessage(injector, message); + // Dynamic overloading + if (argument instanceof String) { + return sendMessage(injector, (String) argument); + } else if (argument instanceof String[]) { + for (String message : (String[]) argument) { + sendMessage(injector, message); + } + return null; } - return null; + } catch (Exception exception) { + throw exception.getCause(); } - } catch (Exception exception) { - throw exception.getCause(); - } - } - - // Also, handle kicking - if (methodName.equals("kickPlayer")) { - injector.disconnect((String) args[0]); - return null; + return null; + case "kickPlayer": + injector.disconnect((String) args[0]); + return null; } // The fallback instance @@ -127,9 +122,9 @@ public class TemporaryPlayerFactory { } // Methods that are supported in the fallback instance - if (methodName.equals("isOnline")) { + if ("isOnline".equals(methodName)) { return injector.isConnected(); - } else if (methodName.equals("getName")) { + } else if ("getName".equals(methodName)) { return "UNKNOWN[" + injector.getAddress() + "]"; } From 129aa5d6a800ba89a28dd680eaa4f4b7b9e73aeb Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:34:40 +0200 Subject: [PATCH 17/30] Make final. --- .../protocol/injector/SortedPacketListenerList.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/SortedPacketListenerList.java b/src/main/java/com/comphenix/protocol/injector/SortedPacketListenerList.java index f7959adb..8b69d898 100644 --- a/src/main/java/com/comphenix/protocol/injector/SortedPacketListenerList.java +++ b/src/main/java/com/comphenix/protocol/injector/SortedPacketListenerList.java @@ -17,11 +17,6 @@ package com.comphenix.protocol.injector; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.logging.Level; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.concurrency.AbstractConcurrentListenerMultimap; @@ -35,6 +30,10 @@ import com.comphenix.protocol.timing.TimedListenerManager.ListenerType; import com.comphenix.protocol.timing.TimedTracker; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.logging.Level; /** * Registry of synchronous packet listeners. @@ -43,7 +42,7 @@ import javax.annotation.Nullable; */ public final class SortedPacketListenerList extends AbstractConcurrentListenerMultimap { // The current listener manager - private TimedListenerManager timedManager = TimedListenerManager.getInstance(); + private final TimedListenerManager timedManager = TimedListenerManager.getInstance(); public SortedPacketListenerList() { super(); From c4375b8d412af75137a95e8d1c969cf7b47b9d66 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:52:11 +0200 Subject: [PATCH 18/30] Fast range parsing. --- .../com/comphenix/protocol/RangeParser.java | 70 ++++++++----------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/RangeParser.java b/src/main/java/com/comphenix/protocol/RangeParser.java index 096c0e02..b5d0d306 100644 --- a/src/main/java/com/comphenix/protocol/RangeParser.java +++ b/src/main/java/com/comphenix/protocol/RangeParser.java @@ -21,15 +21,11 @@ import com.google.common.collect.ContiguousSet; import com.google.common.collect.DiscreteDomain; import com.google.common.collect.Range; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.List; +import java.util.*; /** * Used to parse ranges in CommandPacket. - * + * * @author Kristian */ final class RangeParser { @@ -44,7 +40,7 @@ final class RangeParser { public static List> getRanges(String text, Range legalRange) { return getRanges(new ArrayDeque<>(Collections.singletonList(text)), legalRange); } - + /** * Parse ranges from an array of elements. * @param input the input to parse the ranges from @@ -54,12 +50,12 @@ final class RangeParser { public static List> getRanges(Deque input, Range legalRange) { List tokens = tokenizeInput(input); List> ranges = new ArrayList<>(); - + for (int i = 0; i < tokens.size(); i++) { Range range; String current = tokens.get(i); String next = i + 1 < tokens.size() ? tokens.get(i + 1) : null; - + // Yoda equality is done for null-safety if ("-".equals(current)) { throw new IllegalArgumentException("A hyphen must appear between two numbers."); @@ -70,25 +66,25 @@ final class RangeParser { // This is a proper range range = Range.closed(Integer.parseInt(current), Integer.parseInt(tokens.get(i + 2))); ranges.add(range); - + // Skip the two next tokens i += 2; - + } else { // Just a single number range = Range.singleton(Integer.parseInt(current)); ranges.add(range); } - + // Validate ranges if (!legalRange.encloses(range)) { throw new IllegalArgumentException(range + " is not in the range " + range.toString()); } } - + return simplify(ranges, legalRange.upperEndpoint()); } - + /** * Simplify a list of ranges by assuming a maximum value. * @param ranges - the list of ranges to simplify. @@ -96,45 +92,39 @@ final class RangeParser { * @return A simplified list of ranges. */ private static List> simplify(List> ranges, int maximum) { - List> result = new ArrayList<>(); - boolean[] set = new boolean[maximum + 1]; - int start = -1; - + final List> result = new ArrayList<>(); + final BitSet bitSet = new BitSet(maximum + 1); + // Set every ID for (Range range : ranges) { for (int id : ContiguousSet.create(range, DiscreteDomain.integers())) { - set[id] = true; + bitSet.set(id); } } - - // Generate ranges from this set - for (int i = 0; i <= set.length; i++) { - if (i < set.length && set[i]) { - if (start < 0) { - start = i; - } - } else { - if (start >= 0) { - result.add(Range.closed(start, i - 1)); - start = -1; - } - } + + int start = 0; + int end = 0; + while (start >= 0) { + start = bitSet.nextSetBit(end); + end = bitSet.nextClearBit(start); + + result.add(Range.closed(start, end)); } - + return result; } - + private static List tokenizeInput(Deque input) { List tokens = new ArrayList<>(); - + // Tokenize the input while (!input.isEmpty()) { StringBuilder number = new StringBuilder(); String text = input.peek(); - + for (int j = 0; j < text.length(); j++) { char current = text.charAt(j); - + if (Character.isDigit(current)) { number.append(current); } else if (Character.isWhitespace(current)) { @@ -145,20 +135,20 @@ final class RangeParser { tokens.add(number.toString()); number.setLength(0); } - + tokens.add(Character.toString(current)); } else { // We're no longer dealing with integers - quit return tokens; } } - + // Add the number token, if it hasn't already if (number.length() > 0) tokens.add(number.toString()); input.poll(); } - + return tokens; } } From 39174d2e4e94e63864faf06f3ebd7118f2591f52 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 00:58:29 +0200 Subject: [PATCH 19/30] Default command "?" --- src/main/java/com/comphenix/protocol/ProtocolLib.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/comphenix/protocol/ProtocolLib.java b/src/main/java/com/comphenix/protocol/ProtocolLib.java index 36669f7d..57a19f21 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolLib.java +++ b/src/main/java/com/comphenix/protocol/ProtocolLib.java @@ -197,7 +197,7 @@ public class ProtocolLib extends JavaPlugin { */ private void initializeCommands() { // Initialize command handlers - String commandName = ""; + String commandName = "?"; try { commandName = "PROTOCOL"; this.commandProtocol = new CommandProtocol(reporter, this, this.updater, config); From 3230c5a41fc6c87b90eaa3f6cb45867d27a045c1 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 01:00:12 +0200 Subject: [PATCH 20/30] Bugfix. --- src/main/java/com/comphenix/protocol/RangeParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/comphenix/protocol/RangeParser.java b/src/main/java/com/comphenix/protocol/RangeParser.java index b5d0d306..f21f7139 100644 --- a/src/main/java/com/comphenix/protocol/RangeParser.java +++ b/src/main/java/com/comphenix/protocol/RangeParser.java @@ -108,7 +108,7 @@ final class RangeParser { start = bitSet.nextSetBit(end); end = bitSet.nextClearBit(start); - result.add(Range.closed(start, end)); + result.add(Range.closed(start, end - 1)); } return result; From 9f787c6b1a191ebf3e541dcbe491e70b5944b564 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 01:04:05 +0200 Subject: [PATCH 21/30] Actually limit the range. --- src/main/java/com/comphenix/protocol/RangeParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/comphenix/protocol/RangeParser.java b/src/main/java/com/comphenix/protocol/RangeParser.java index f21f7139..088375e0 100644 --- a/src/main/java/com/comphenix/protocol/RangeParser.java +++ b/src/main/java/com/comphenix/protocol/RangeParser.java @@ -97,7 +97,7 @@ final class RangeParser { // Set every ID for (Range range : ranges) { - for (int id : ContiguousSet.create(range, DiscreteDomain.integers())) { + for (int id : ContiguousSet.create(range, DiscreteDomain.integers()).headSet(maximum + 1)) { bitSet.set(id); } } From 73aa45f2662dd080bd88f789776f8b318dde9326 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 23:47:50 +0200 Subject: [PATCH 22/30] Improve RangeParser. --- .../java/com/comphenix/protocol/RangeParser.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/RangeParser.java b/src/main/java/com/comphenix/protocol/RangeParser.java index 088375e0..2b9384a3 100644 --- a/src/main/java/com/comphenix/protocol/RangeParser.java +++ b/src/main/java/com/comphenix/protocol/RangeParser.java @@ -17,8 +17,6 @@ package com.comphenix.protocol; -import com.google.common.collect.ContiguousSet; -import com.google.common.collect.DiscreteDomain; import com.google.common.collect.Range; import java.util.*; @@ -86,26 +84,26 @@ final class RangeParser { } /** - * Simplify a list of ranges by assuming a maximum value. + * Simplify a list of ranges by assuming that no range exceeds a certain maximum value. * @param ranges - the list of ranges to simplify. * @param maximum - the maximum value (minimum value is always 0). * @return A simplified list of ranges. */ private static List> simplify(List> ranges, int maximum) { final List> result = new ArrayList<>(); + // + 1 to make sure we always have one bit in the end that is not set. final BitSet bitSet = new BitSet(maximum + 1); // Set every ID for (Range range : ranges) { - for (int id : ContiguousSet.create(range, DiscreteDomain.integers()).headSet(maximum + 1)) { - bitSet.set(id); - } + bitSet.set(range.lowerEndpoint(), range.upperEndpoint() + 1); } int start = 0; int end = 0; - while (start >= 0) { + while (true) { start = bitSet.nextSetBit(end); + if(start == -1) break; end = bitSet.nextClearBit(start); result.add(Range.closed(start, end - 1)); From 8a98382c144f1ed080272c008edca012eca63e87 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 23:52:37 +0200 Subject: [PATCH 23/30] Improve documentation. --- src/main/java/com/comphenix/protocol/RangeParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/comphenix/protocol/RangeParser.java b/src/main/java/com/comphenix/protocol/RangeParser.java index 2b9384a3..16f3c57c 100644 --- a/src/main/java/com/comphenix/protocol/RangeParser.java +++ b/src/main/java/com/comphenix/protocol/RangeParser.java @@ -84,7 +84,7 @@ final class RangeParser { } /** - * Simplify a list of ranges by assuming that no range exceeds a certain maximum value. + * Simplify a list of closed ranges by assuming that no range exceeds a certain maximum value. * @param ranges - the list of ranges to simplify. * @param maximum - the maximum value (minimum value is always 0). * @return A simplified list of ranges. From 73d29ca0d7800a7e08c2c8ab012a1b50f564fe48 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 23:57:08 +0200 Subject: [PATCH 24/30] Make enum field final. --- .../protocol/wrappers/BukkitConverters.java | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java b/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java index 0be6e768..45cdc8ea 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java +++ b/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java @@ -16,29 +16,11 @@ */ package com.comphenix.protocol.wrappers; -import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.wrappers.Either.Left; -import com.comphenix.protocol.wrappers.Either.Right; -import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData; -import java.lang.ref.WeakReference; -import java.lang.reflect.*; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Supplier; -import java.util.stream.Collectors; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLogger; import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.injector.BukkitUnwrapper; import com.comphenix.protocol.injector.PacketConstructor; import com.comphenix.protocol.injector.PacketConstructor.Unwrapper; @@ -54,21 +36,18 @@ import com.comphenix.protocol.reflect.fuzzy.FuzzyFieldContract; import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract; import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftVersion; +import com.comphenix.protocol.wrappers.Either.Left; +import com.comphenix.protocol.wrappers.Either.Right; import com.comphenix.protocol.wrappers.EnumWrappers.Dimension; import com.comphenix.protocol.wrappers.EnumWrappers.FauxEnumConverter; +import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData; import com.comphenix.protocol.wrappers.nbt.NbtBase; import com.comphenix.protocol.wrappers.nbt.NbtFactory; - import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.World; -import org.bukkit.WorldType; +import org.bukkit.*; import org.bukkit.advancement.Advancement; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -79,6 +58,14 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; +import java.lang.ref.WeakReference; +import java.lang.reflect.*; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; +import java.util.stream.Collectors; + import static com.comphenix.protocol.utility.MinecraftReflection.getCraftBukkitClass; import static com.comphenix.protocol.utility.MinecraftReflection.getMinecraftClass; import static com.comphenix.protocol.wrappers.Converters.handle; @@ -1458,7 +1445,7 @@ public class BukkitConverters { THE_NETHER_IMPL(-1), THE_END_IMPL(1); - int id; + final int id; DimensionImpl(int id) { this.id = id; } From 96fd3f0b0d9ebd663c4d2b5c90345c2838a7a200 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sat, 15 Jul 2023 23:59:30 +0200 Subject: [PATCH 25/30] Simple cleanup. --- .../protocol/events/PacketContainer.java | 37 +++++++------------ .../player/PlayerInjectionHandler.java | 6 +-- .../reflect/instances/InstanceProvider.java | 2 +- .../protocol/timing/TimedListenerManager.java | 11 +++--- .../protocol/wrappers/BlockPosition.java | 17 ++++----- .../wrappers/WrappedAttributeModifier.java | 3 +- .../protocol/wrappers/nbt/NbtType.java | 2 +- 7 files changed, 31 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/events/PacketContainer.java b/src/main/java/com/comphenix/protocol/events/PacketContainer.java index db7d2af3..033087a8 100644 --- a/src/main/java/com/comphenix/protocol/events/PacketContainer.java +++ b/src/main/java/com/comphenix/protocol/events/PacketContainer.java @@ -17,21 +17,6 @@ package com.comphenix.protocol.events; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.function.Function; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.injector.StructureCache; import com.comphenix.protocol.reflect.FuzzyReflection; @@ -40,15 +25,8 @@ import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.reflect.accessors.Accessors; import com.comphenix.protocol.reflect.accessors.ConstructorAccessor; import com.comphenix.protocol.reflect.accessors.MethodAccessor; -import com.comphenix.protocol.reflect.cloning.AggregateCloner; +import com.comphenix.protocol.reflect.cloning.*; import com.comphenix.protocol.reflect.cloning.AggregateCloner.BuilderParameters; -import com.comphenix.protocol.reflect.cloning.BukkitCloner; -import com.comphenix.protocol.reflect.cloning.Cloner; -import com.comphenix.protocol.reflect.cloning.CollectionCloner; -import com.comphenix.protocol.reflect.cloning.FieldCloner; -import com.comphenix.protocol.reflect.cloning.GuavaOptionalCloner; -import com.comphenix.protocol.reflect.cloning.ImmutableDetector; -import com.comphenix.protocol.reflect.cloning.JavaOptionalCloner; import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract; import com.comphenix.protocol.reflect.instances.DefaultInstances; import com.comphenix.protocol.reflect.instances.MinecraftGenerator; @@ -59,7 +37,18 @@ import com.comphenix.protocol.wrappers.Converters; import com.google.common.collect.Sets; import io.netty.buffer.ByteBuf; import io.netty.util.ReferenceCountUtil; + import javax.annotation.Nullable; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.function.Function; /** * Represents a Minecraft packet indirectly. @@ -270,7 +259,7 @@ public class PacketContainer extends AbstractStructure implements Serializable { modifierDest.write(fieldIndex, modifierSource.read(fieldIndex)); else defaultTransform(modifierSource, modifierDest, getDefaultCloner(), fieldIndex); - }; + } }; }}; } diff --git a/src/main/java/com/comphenix/protocol/injector/player/PlayerInjectionHandler.java b/src/main/java/com/comphenix/protocol/injector/player/PlayerInjectionHandler.java index 199ee506..3f1ec60e 100644 --- a/src/main/java/com/comphenix/protocol/injector/player/PlayerInjectionHandler.java +++ b/src/main/java/com/comphenix/protocol/injector/player/PlayerInjectionHandler.java @@ -1,7 +1,5 @@ package com.comphenix.protocol.injector.player; -import java.util.Set; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerOptions; import com.comphenix.protocol.events.NetworkMarker; @@ -10,6 +8,8 @@ import com.comphenix.protocol.events.PacketListener; import io.netty.channel.Channel; import org.bukkit.entity.Player; +import java.util.Set; + public interface PlayerInjectionHandler { /** @@ -144,6 +144,6 @@ public interface PlayerInjectionHandler { /** * Immediately exit. */ - BAIL_OUT; + BAIL_OUT } } diff --git a/src/main/java/com/comphenix/protocol/reflect/instances/InstanceProvider.java b/src/main/java/com/comphenix/protocol/reflect/instances/InstanceProvider.java index 419a07b9..5ebf8594 100644 --- a/src/main/java/com/comphenix/protocol/reflect/instances/InstanceProvider.java +++ b/src/main/java/com/comphenix/protocol/reflect/instances/InstanceProvider.java @@ -31,5 +31,5 @@ public interface InstanceProvider { * @return The instance, or NULL if the type cannot be created. * @throws NotConstructableException Thrown to indicate that this type cannot or should never be constructed. */ - public abstract Object create(@Nullable Class type); + Object create(@Nullable Class type); } diff --git a/src/main/java/com/comphenix/protocol/timing/TimedListenerManager.java b/src/main/java/com/comphenix/protocol/timing/TimedListenerManager.java index 0ddff11f..0a6da61e 100644 --- a/src/main/java/com/comphenix/protocol/timing/TimedListenerManager.java +++ b/src/main/java/com/comphenix/protocol/timing/TimedListenerManager.java @@ -1,5 +1,9 @@ package com.comphenix.protocol.timing; +import com.comphenix.protocol.events.PacketListener; +import com.google.common.collect.ImmutableMap; +import org.bukkit.plugin.Plugin; + import java.util.Calendar; import java.util.Date; import java.util.Set; @@ -7,11 +11,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicBoolean; -import org.bukkit.plugin.Plugin; - -import com.comphenix.protocol.events.PacketListener; -import com.google.common.collect.ImmutableMap; - /** * Represents a system for recording the time spent by each packet listener. * @author Kristian @@ -21,7 +20,7 @@ public class TimedListenerManager { ASYNC_SERVER_SIDE, ASYNC_CLIENT_SIDE, SYNC_SERVER_SIDE, - SYNC_CLIENT_SIDE; + SYNC_CLIENT_SIDE } // The shared manager diff --git a/src/main/java/com/comphenix/protocol/wrappers/BlockPosition.java b/src/main/java/com/comphenix/protocol/wrappers/BlockPosition.java index 1a0db5c3..45e36bd2 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/BlockPosition.java +++ b/src/main/java/com/comphenix/protocol/wrappers/BlockPosition.java @@ -16,17 +16,16 @@ */ package com.comphenix.protocol.wrappers; -import java.lang.reflect.Constructor; - -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.util.Vector; - import com.comphenix.protocol.reflect.EquivalentConverter; import com.comphenix.protocol.reflect.FieldAccessException; import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.utility.MinecraftReflection; import com.google.common.base.Objects; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.util.Vector; + +import java.lang.reflect.Constructor; /** * Copies a immutable net.minecraft.server.BlockPosition, which represents a integer 3D vector. @@ -176,8 +175,7 @@ public class BlockPosition { // Construct the underlying BlockPosition try { - Object result = blockPositionConstructor.newInstance(specific.x, specific.y, specific.z); - return result; + return blockPositionConstructor.newInstance(specific.x, specific.y, specific.z); } catch (Exception e) { throw new RuntimeException("Cannot construct BlockPosition.", e); } @@ -197,8 +195,7 @@ public class BlockPosition { if (intModifier.size() >= 3) { try { StructureModifier instance = intModifier.withTarget(generic); - BlockPosition result = new BlockPosition(instance.read(0), instance.read(1), instance.read(2)); - return result; + return new BlockPosition(instance.read(0), instance.read(1), instance.read(2)); } catch (FieldAccessException e) { // This is an exeptional work-around, so we don't want to burden the caller with the messy details throw new RuntimeException("Field access error.", e); diff --git a/src/main/java/com/comphenix/protocol/wrappers/WrappedAttributeModifier.java b/src/main/java/com/comphenix/protocol/wrappers/WrappedAttributeModifier.java index 89023e7e..51cf2441 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/WrappedAttributeModifier.java +++ b/src/main/java/com/comphenix/protocol/wrappers/WrappedAttributeModifier.java @@ -182,8 +182,7 @@ public class WrappedAttributeModifier extends AbstractWrapper { StructureModifier stringMod = modifier.withType(String.class); if (stringMod.size() == 0) { - Supplier supplier = (Supplier) modifier.withType(Supplier.class).read(0); - this.name = supplier; + this.name = (Supplier) modifier.withType(Supplier.class).read(0); } else { this.name = () -> stringMod.read(0); } diff --git a/src/main/java/com/comphenix/protocol/wrappers/nbt/NbtType.java b/src/main/java/com/comphenix/protocol/wrappers/nbt/NbtType.java index 154586d5..b5002926 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/nbt/NbtType.java +++ b/src/main/java/com/comphenix/protocol/wrappers/nbt/NbtType.java @@ -123,7 +123,7 @@ public enum NbtType { classLookup.put(NbtCompound.class, TAG_COMPOUND); } - private NbtType(int rawID, Class valueType) { + NbtType(int rawID, Class valueType) { this.rawID = rawID; this.valueType = valueType; } From e7cf2b54c0b21006e87bb92be720e3bb8147176a Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sun, 16 Jul 2023 00:04:53 +0200 Subject: [PATCH 26/30] Simple cleanup. --- .../protocol/MultipleLinesPrompt.java | 2 +- .../comphenix/protocol/ProtocolConfig.java | 2 +- .../comphenix/protocol/ProtocolLibrary.java | 4 +- .../protocol/async/AsyncListenerHandler.java | 6 +-- .../protocol/async/PacketProcessingQueue.java | 3 +- .../AbstractConcurrentListenerMultimap.java | 3 +- .../protocol/concurrency/BlockingHashMap.java | 2 +- .../protocol/error/DetailedErrorReporter.java | 38 +++++++++---------- .../comphenix/protocol/error/ReportType.java | 10 ++--- .../protocol/injector/PacketConstructor.java | 4 +- .../protocol/injector/PluginVerifier.java | 13 +++---- .../netty/channel/NettyChannelInjector.java | 24 ++++++------ .../netty/manager/NetworkManagerInjector.java | 15 ++++---- .../protocol/reflect/ObjectWriter.java | 2 +- .../protocol/reflect/PrettyPrinter.java | 5 +-- .../accessors/DefaultFieldAccessor.java | 5 +-- .../accessors/DefaultMethodAccessor.java | 1 - .../reflect/instances/ExistingGenerator.java | 13 ++++--- .../protocol/scheduler/DefaultTask.java | 1 - .../protocol/scheduler/ProtocolScheduler.java | 3 -- .../protocol/timing/HistogramStream.java | 8 ++-- .../protocol/updater/SpigotUpdater.java | 1 - .../comphenix/protocol/updater/Updater.java | 5 ++- .../protocol/utility/ClassSource.java | 1 - .../protocol/utility/SafeCacheBuilder.java | 10 ++--- .../protocol/wrappers/TroveWrapper.java | 16 ++++---- .../WrappedRemoteChatSessionData.java | 1 - .../wrappers/nbt/TileEntityAccessor.java | 16 ++------ .../protocol/wrappers/nbt/WrappedElement.java | 6 +-- .../nbt/io/NbtConfigurationSerializer.java | 23 +++-------- .../wrappers/ping/LegacyServerPing.java | 8 ---- 31 files changed, 101 insertions(+), 150 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java b/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java index 971570e3..eb1d60d2 100644 --- a/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java +++ b/src/main/java/com/comphenix/protocol/MultipleLinesPrompt.java @@ -137,7 +137,7 @@ class MultipleLinesPrompt extends StringPrompt { // Save the last line as well context.setSessionData(KEY_LAST, in); context.setSessionData(KEY_LINES, ++count); - result.append(in + "\n"); + result.append(in).append("\n"); // And we're done if (endMarker.cancelBasedOnInput(context, in, result, count)) diff --git a/src/main/java/com/comphenix/protocol/ProtocolConfig.java b/src/main/java/com/comphenix/protocol/ProtocolConfig.java index 35a15331..d38481cf 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolConfig.java +++ b/src/main/java/com/comphenix/protocol/ProtocolConfig.java @@ -275,7 +275,7 @@ public class ProtocolConfig { * @return Every suppressed report type. */ public ImmutableList getSuppressedReports() { - return ImmutableList.copyOf(getGlobalValue(SUPPRESSED_REPORTS, new ArrayList())); + return ImmutableList.copyOf(getGlobalValue(SUPPRESSED_REPORTS, new ArrayList<>())); } /** diff --git a/src/main/java/com/comphenix/protocol/ProtocolLibrary.java b/src/main/java/com/comphenix/protocol/ProtocolLibrary.java index 25424dd7..bfb52c43 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolLibrary.java +++ b/src/main/java/com/comphenix/protocol/ProtocolLibrary.java @@ -17,12 +17,12 @@ package com.comphenix.protocol; import com.comphenix.protocol.error.BasicErrorReporter; import com.comphenix.protocol.error.ErrorReporter; import com.comphenix.protocol.scheduler.ProtocolScheduler; -import com.comphenix.protocol.utility.MinecraftVersion; -import java.util.List; import com.google.common.collect.ImmutableList; import org.apache.commons.lang.Validate; import org.bukkit.plugin.Plugin; +import java.util.List; + /** * The main entry point for ProtocolLib. * @author dmulloy2 diff --git a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java index 7e23c915..4572bc9e 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java @@ -619,9 +619,7 @@ public class AsyncListenerHandler { } } - } catch (OutOfMemoryError e) { - throw e; - } catch (ThreadDeath e) { + } catch (OutOfMemoryError | ThreadDeath e) { throw e; } catch (Throwable e) { // Minecraft doesn't want your Exception. @@ -665,7 +663,7 @@ public class AsyncListenerHandler { } /** - * Use the poision pill method to stop every worker thread. + * Use the poison pill method to stop every worker thread. */ private void stopThreads() { // Poison Pill Shutdown diff --git a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java index 77520891..31ce926a 100644 --- a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java +++ b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java @@ -84,8 +84,7 @@ class PacketProcessingQueue extends AbstractConcurrentListenerMultimap(), null); + this.processingQueue = Synchronization.queue(new PriorityQueue<>(), null); } this.maximumConcurrency = maximumConcurrency; diff --git a/src/main/java/com/comphenix/protocol/concurrency/AbstractConcurrentListenerMultimap.java b/src/main/java/com/comphenix/protocol/concurrency/AbstractConcurrentListenerMultimap.java index e85256f4..cb99edf9 100644 --- a/src/main/java/com/comphenix/protocol/concurrency/AbstractConcurrentListenerMultimap.java +++ b/src/main/java/com/comphenix/protocol/concurrency/AbstractConcurrentListenerMultimap.java @@ -21,6 +21,7 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListeningWhitelist; import com.comphenix.protocol.injector.PrioritizedListener; import com.google.common.collect.Iterables; + import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -95,7 +96,7 @@ public abstract class AbstractConcurrentListenerMultimap { // Remove any listeners // Remove this listener. Note that priority is generally ignored. - list.remove(new PrioritizedListener(listener, whitelist.getPriority())); + list.remove(new PrioritizedListener<>(listener, whitelist.getPriority())); if (list.isEmpty()) { this.mapListeners.remove(type); diff --git a/src/main/java/com/comphenix/protocol/concurrency/BlockingHashMap.java b/src/main/java/com/comphenix/protocol/concurrency/BlockingHashMap.java index 725db00f..c0e490e5 100644 --- a/src/main/java/com/comphenix/protocol/concurrency/BlockingHashMap.java +++ b/src/main/java/com/comphenix/protocol/concurrency/BlockingHashMap.java @@ -77,7 +77,7 @@ public class BlockingHashMap { } } }). - build(BlockingHashMap. newInvalidCacheLoader()); + build(BlockingHashMap.newInvalidCacheLoader()); // Normal concurrent hash map locks = new ConcurrentHashMap<>(); diff --git a/src/main/java/com/comphenix/protocol/error/DetailedErrorReporter.java b/src/main/java/com/comphenix/protocol/error/DetailedErrorReporter.java index 0d7299ab..f62f38f5 100644 --- a/src/main/java/com/comphenix/protocol/error/DetailedErrorReporter.java +++ b/src/main/java/com/comphenix/protocol/error/DetailedErrorReporter.java @@ -17,6 +17,20 @@ package com.comphenix.protocol.error; +import com.comphenix.protocol.ProtocolConfig; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolLogger; +import com.comphenix.protocol.collections.ExpireHashMap; +import com.comphenix.protocol.error.Report.ReportBuilder; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.reflect.PrettyPrinter; +import com.google.common.base.Preconditions; +import com.google.common.primitives.Primitives; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + import java.io.PrintWriter; import java.io.StringWriter; import java.lang.ref.WeakReference; @@ -30,22 +44,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; -import com.comphenix.protocol.ProtocolConfig; -import com.comphenix.protocol.ProtocolLib; -import com.comphenix.protocol.ProtocolLibrary; -import com.comphenix.protocol.ProtocolLogger; -import com.comphenix.protocol.collections.ExpireHashMap; -import com.comphenix.protocol.error.Report.ReportBuilder; -import com.comphenix.protocol.events.PacketAdapter; -import com.comphenix.protocol.reflect.PrettyPrinter; -import com.google.common.base.Preconditions; -import com.google.common.primitives.Primitives; - -import org.apache.commons.lang.builder.ToStringBuilder; -import org.apache.commons.lang.builder.ToStringStyle; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; - /** * Internal class used to handle exceptions. * @@ -68,7 +66,7 @@ public class DetailedErrorReporter implements ErrorReporter { public static final int DEFAULT_MAX_ERROR_COUNT = 20; // Prevent spam per plugin too - private ConcurrentMap warningCount = new ConcurrentHashMap(); + private ConcurrentMap warningCount = new ConcurrentHashMap<>(); protected String prefix; protected String supportURL; @@ -88,10 +86,10 @@ public class DetailedErrorReporter implements ErrorReporter { protected boolean detailedReporting; // Map of global objects - protected Map globalParameters = new HashMap(); + protected Map globalParameters = new HashMap<>(); // Reports to ignore - private ExpireHashMap rateLimited = new ExpireHashMap(); + private ExpireHashMap rateLimited = new ExpireHashMap<>(); private final Object rateLock = new Object(); /** @@ -124,7 +122,7 @@ public class DetailedErrorReporter implements ErrorReporter { if (plugin == null) throw new IllegalArgumentException("Plugin cannot be NULL."); - this.pluginReference = new WeakReference(plugin); + this.pluginReference = new WeakReference<>(plugin); this.pluginName = getNameSafely(plugin); this.prefix = prefix; this.supportURL = supportURL; diff --git a/src/main/java/com/comphenix/protocol/error/ReportType.java b/src/main/java/com/comphenix/protocol/error/ReportType.java index 4e604ef3..0ba95750 100644 --- a/src/main/java/com/comphenix/protocol/error/ReportType.java +++ b/src/main/java/com/comphenix/protocol/error/ReportType.java @@ -1,14 +1,14 @@ package com.comphenix.protocol.error; +import com.comphenix.protocol.reflect.FieldAccessException; +import com.comphenix.protocol.reflect.FuzzyReflection; +import com.comphenix.protocol.reflect.fuzzy.FuzzyFieldContract; + import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; -import com.comphenix.protocol.reflect.FieldAccessException; -import com.comphenix.protocol.reflect.FuzzyReflection; -import com.comphenix.protocol.reflect.fuzzy.FuzzyFieldContract; - /** * Represents a strongly-typed report. Subclasses should be immutable. *

@@ -118,7 +118,7 @@ public class ReportType { public static ReportType[] getReports(Class sender) { if (sender == null) throw new IllegalArgumentException("sender cannot be NULL."); - List result = new ArrayList(); + List result = new ArrayList<>(); // Go through all the fields for (Field field : getReportFields(sender)) { diff --git a/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java b/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java index 8a6f2f5e..4ec9fe23 100644 --- a/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java +++ b/src/main/java/com/comphenix/protocol/injector/PacketConstructor.java @@ -170,9 +170,7 @@ public class PacketConstructor { try { result = unwrapper.unwrapItem(values[i]); - } catch (OutOfMemoryError e) { - throw e; - } catch (ThreadDeath e) { + } catch (OutOfMemoryError | ThreadDeath e) { throw e; } catch (Throwable e) { lastException = e; diff --git a/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java b/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java index be2e4cac..93cff2ab 100644 --- a/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java +++ b/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java @@ -1,17 +1,16 @@ package com.comphenix.protocol.injector; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginLoadOrder; + import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; -import com.google.common.collect.ImmutableSet; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginLoadOrder; - -import com.google.common.collect.Sets; - /** * Determine if a plugin using ProtocolLib is correct. * @@ -188,7 +187,7 @@ class PluginVerifier { * @return TRUE if the plugin has the given dependency, FALSE otherwise. */ private boolean hasDependency(Plugin plugin, Plugin dependency) { - return hasDependency(plugin, dependency, Sets.newHashSet()); + return hasDependency(plugin, dependency, Sets.newHashSet()); } /** diff --git a/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java b/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java index eaa1a898..161d4a68 100644 --- a/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java +++ b/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java @@ -1,18 +1,5 @@ package com.comphenix.protocol.injector.netty.channel; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.NoSuchElementException; -import java.util.Set; -import java.util.WeakHashMap; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ThreadLocalRandom; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType.Protocol; import com.comphenix.protocol.ProtocolLibrary; @@ -38,6 +25,17 @@ import io.netty.util.AttributeKey; import org.bukkit.Server; import org.bukkit.entity.Player; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Map; +import java.util.Map.Entry; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.WeakHashMap; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadLocalRandom; + public class NettyChannelInjector implements Injector { // an accessor used when we're unable to retrieve the actual packet field in an outbound packet send diff --git a/src/main/java/com/comphenix/protocol/injector/netty/manager/NetworkManagerInjector.java b/src/main/java/com/comphenix/protocol/injector/netty/manager/NetworkManagerInjector.java index 68ed9762..1db7b97b 100644 --- a/src/main/java/com/comphenix/protocol/injector/netty/manager/NetworkManagerInjector.java +++ b/src/main/java/com/comphenix/protocol/injector/netty/manager/NetworkManagerInjector.java @@ -1,12 +1,5 @@ package com.comphenix.protocol.injector.netty.manager; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLogger; import com.comphenix.protocol.concurrency.PacketTypeSet; @@ -28,12 +21,18 @@ import com.comphenix.protocol.reflect.accessors.FieldAccessor; import com.comphenix.protocol.reflect.fuzzy.FuzzyFieldContract; import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract; import com.comphenix.protocol.utility.MinecraftReflection; -import com.comphenix.protocol.utility.Util; import com.comphenix.protocol.wrappers.Pair; import io.netty.channel.ChannelFuture; import org.bukkit.Server; import org.bukkit.plugin.Plugin; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + public class NetworkManagerInjector implements ChannelListener { private static final String INBOUND_INJECT_HANDLER_NAME = "protocol_lib_inbound_inject"; diff --git a/src/main/java/com/comphenix/protocol/reflect/ObjectWriter.java b/src/main/java/com/comphenix/protocol/reflect/ObjectWriter.java index 0df5e37c..679e18bc 100644 --- a/src/main/java/com/comphenix/protocol/reflect/ObjectWriter.java +++ b/src/main/java/com/comphenix/protocol/reflect/ObjectWriter.java @@ -21,7 +21,7 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.injector.StructureCache; import com.comphenix.protocol.injector.packet.PacketRegistry; import com.comphenix.protocol.utility.MinecraftReflection; -import com.comphenix.protocol.utility.StreamSerializer; + import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.HashMap; diff --git a/src/main/java/com/comphenix/protocol/reflect/PrettyPrinter.java b/src/main/java/com/comphenix/protocol/reflect/PrettyPrinter.java index 1524149b..4da966ac 100644 --- a/src/main/java/com/comphenix/protocol/reflect/PrettyPrinter.java +++ b/src/main/java/com/comphenix/protocol/reflect/PrettyPrinter.java @@ -189,10 +189,7 @@ public class PrettyPrinter { // Handle exceptions try { printValue(output, Array.get(array, i), component, stop, previous, hierachyIndex - 1, printer); - } catch (ArrayIndexOutOfBoundsException e) { - e.printStackTrace(); - break; - } catch (IllegalArgumentException e) { + } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException e) { e.printStackTrace(); break; } diff --git a/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultFieldAccessor.java b/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultFieldAccessor.java index ed3fb37e..2c4ff49f 100644 --- a/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultFieldAccessor.java +++ b/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultFieldAccessor.java @@ -1,10 +1,9 @@ package com.comphenix.protocol.reflect.accessors; +import com.google.common.base.Preconditions; + import java.lang.invoke.MethodHandle; import java.lang.reflect.Field; -import java.lang.reflect.Modifier; - -import com.google.common.base.Preconditions; final class DefaultFieldAccessor implements FieldAccessor { diff --git a/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultMethodAccessor.java b/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultMethodAccessor.java index ac04080e..ab10c18f 100644 --- a/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultMethodAccessor.java +++ b/src/main/java/com/comphenix/protocol/reflect/accessors/DefaultMethodAccessor.java @@ -2,7 +2,6 @@ package com.comphenix.protocol.reflect.accessors; import java.lang.invoke.MethodHandle; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; final class DefaultMethodAccessor implements MethodAccessor { diff --git a/src/main/java/com/comphenix/protocol/reflect/instances/ExistingGenerator.java b/src/main/java/com/comphenix/protocol/reflect/instances/ExistingGenerator.java index 17b15634..430aeaad 100644 --- a/src/main/java/com/comphenix/protocol/reflect/instances/ExistingGenerator.java +++ b/src/main/java/com/comphenix/protocol/reflect/instances/ExistingGenerator.java @@ -17,14 +17,15 @@ package com.comphenix.protocol.reflect.instances; +import com.comphenix.protocol.reflect.FuzzyReflection; import com.comphenix.protocol.reflect.accessors.Accessors; + +import javax.annotation.Nullable; import java.lang.reflect.Field; -import java.util.Collection; import java.util.ArrayDeque; +import java.util.Collection; import java.util.HashMap; import java.util.Map; -import javax.annotation.Nullable; -import com.comphenix.protocol.reflect.FuzzyReflection; /** * Provides instance constructors using a list of existing values. @@ -45,7 +46,7 @@ public class ExistingGenerator implements InstanceProvider { private int level; public Node(Class key, Object value, int level) { - this.children = new HashMap, Node>(); + this.children = new HashMap<>(); this.key = key; this.value = value; this.level = level; @@ -168,8 +169,8 @@ public class ExistingGenerator implements InstanceProvider { Class[] path = getHierachy(type); Node current = start; - for (int i = 0; i < path.length; i++) { - Node next = getNext(current, path[i], readOnly); + for (Class clazz : path) { + Node next = getNext(current, clazz, readOnly); // Try every interface too if (next == null && readOnly) { diff --git a/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java b/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java index 8662d80d..1146adda 100644 --- a/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java +++ b/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java @@ -1,7 +1,6 @@ package com.comphenix.protocol.scheduler; import org.bukkit.scheduler.BukkitScheduler; -import org.bukkit.scheduler.BukkitTask; public class DefaultTask implements Task { private final int taskId; diff --git a/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java b/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java index 4f6b25ac..838b8a7b 100644 --- a/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java +++ b/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java @@ -1,8 +1,5 @@ package com.comphenix.protocol.scheduler; -import com.comphenix.protocol.ProtocolLib; -import org.bukkit.plugin.Plugin; - public interface ProtocolScheduler { Task scheduleSyncRepeatingTask(Runnable task, long delay, long period); diff --git a/src/main/java/com/comphenix/protocol/timing/HistogramStream.java b/src/main/java/com/comphenix/protocol/timing/HistogramStream.java index 7b7ed72a..4aeb5123 100644 --- a/src/main/java/com/comphenix/protocol/timing/HistogramStream.java +++ b/src/main/java/com/comphenix/protocol/timing/HistogramStream.java @@ -1,11 +1,11 @@ package com.comphenix.protocol.timing; -import java.util.ArrayList; -import java.util.List; - import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.List; + /** * Represents an online algortihm of computing histograms over time. * @author Kristian @@ -36,7 +36,7 @@ public class HistogramStream extends OnlineComputation { * @param binWidth - maximum number of observations in each bin. */ public HistogramStream(int binWidth) { - this(new ArrayList(), new StatisticsStream(), binWidth); + this(new ArrayList<>(), new StatisticsStream(), binWidth); } /** diff --git a/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java b/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java index 46e45178..b03b6499 100644 --- a/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java +++ b/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java @@ -19,7 +19,6 @@ package com.comphenix.protocol.updater; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.error.Report; import com.comphenix.protocol.utility.Closer; -import com.comphenix.protocol.utility.SchedulerUtil; import org.bukkit.plugin.Plugin; import java.io.BufferedReader; diff --git a/src/main/java/com/comphenix/protocol/updater/Updater.java b/src/main/java/com/comphenix/protocol/updater/Updater.java index 37ec3cd9..1d898037 100644 --- a/src/main/java/com/comphenix/protocol/updater/Updater.java +++ b/src/main/java/com/comphenix/protocol/updater/Updater.java @@ -18,10 +18,11 @@ import com.comphenix.protocol.error.ReportType; import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.utility.Util; import com.google.common.base.Preconditions; +import org.bukkit.plugin.Plugin; + import java.io.File; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -import org.bukkit.plugin.Plugin; /** * @author dmulloy2 @@ -40,7 +41,7 @@ public abstract class Updater { protected boolean announce; protected Thread thread; protected UpdateResult result = UpdateResult.SUCCESS; - protected List listeners = new CopyOnWriteArrayList(); + protected List listeners = new CopyOnWriteArrayList<>(); protected Updater(Plugin plugin, UpdateType type, boolean announce) { this.plugin = plugin; diff --git a/src/main/java/com/comphenix/protocol/utility/ClassSource.java b/src/main/java/com/comphenix/protocol/utility/ClassSource.java index 6a980751..4d9b0493 100644 --- a/src/main/java/com/comphenix/protocol/utility/ClassSource.java +++ b/src/main/java/com/comphenix/protocol/utility/ClassSource.java @@ -3,7 +3,6 @@ package com.comphenix.protocol.utility; import java.util.Collections; import java.util.Map; import java.util.Optional; -import java.util.function.Supplier; /** * Represents an abstract class loader that can only retrieve classes by their canonical name. diff --git a/src/main/java/com/comphenix/protocol/utility/SafeCacheBuilder.java b/src/main/java/com/comphenix/protocol/utility/SafeCacheBuilder.java index 89ac8f3e..e6b9cafe 100644 --- a/src/main/java/com/comphenix/protocol/utility/SafeCacheBuilder.java +++ b/src/main/java/com/comphenix/protocol/utility/SafeCacheBuilder.java @@ -1,15 +1,15 @@ package com.comphenix.protocol.utility; -import java.lang.reflect.Method; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.TimeUnit; - import com.comphenix.protocol.reflect.FieldAccessException; import com.google.common.base.Ticker; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.RemovalListener; +import java.lang.reflect.Method; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; + /** * Represents a Guava CacheBuilder that is compatible with both Guava 10 and 13. * @@ -34,7 +34,7 @@ public class SafeCacheBuilder { * @return A new cache builder. */ public static SafeCacheBuilder newBuilder() { - return new SafeCacheBuilder(); + return new SafeCacheBuilder<>(); } /** diff --git a/src/main/java/com/comphenix/protocol/wrappers/TroveWrapper.java b/src/main/java/com/comphenix/protocol/wrappers/TroveWrapper.java index 8101a7d3..8366e3fe 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/TroveWrapper.java +++ b/src/main/java/com/comphenix/protocol/wrappers/TroveWrapper.java @@ -1,14 +1,5 @@ package com.comphenix.protocol.wrappers; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -import javax.annotation.Nonnull; - import com.comphenix.protocol.reflect.FieldAccessException; import com.comphenix.protocol.reflect.accessors.FieldAccessor; import com.comphenix.protocol.reflect.fuzzy.AbstractFuzzyMatcher; @@ -16,6 +7,13 @@ import com.comphenix.protocol.reflect.fuzzy.FuzzyMatchers; import com.comphenix.protocol.utility.ClassSource; import com.google.common.base.Function; +import javax.annotation.Nonnull; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * Wrap a GNU Trove Collection class with an equivalent Java Collection class. * @author Kristian diff --git a/src/main/java/com/comphenix/protocol/wrappers/WrappedRemoteChatSessionData.java b/src/main/java/com/comphenix/protocol/wrappers/WrappedRemoteChatSessionData.java index a248637f..2b99285a 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/WrappedRemoteChatSessionData.java +++ b/src/main/java/com/comphenix/protocol/wrappers/WrappedRemoteChatSessionData.java @@ -1,6 +1,5 @@ package com.comphenix.protocol.wrappers; -import com.comphenix.protocol.reflect.ExactReflection; import com.comphenix.protocol.reflect.FuzzyReflection; import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.reflect.accessors.Accessors; diff --git a/src/main/java/com/comphenix/protocol/wrappers/nbt/TileEntityAccessor.java b/src/main/java/com/comphenix/protocol/wrappers/nbt/TileEntityAccessor.java index 4d3935c1..c76785c7 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/nbt/TileEntityAccessor.java +++ b/src/main/java/com/comphenix/protocol/wrappers/nbt/TileEntityAccessor.java @@ -6,24 +6,16 @@ import com.comphenix.protocol.reflect.accessors.Accessors; import com.comphenix.protocol.reflect.accessors.FieldAccessor; import com.comphenix.protocol.reflect.accessors.MethodAccessor; import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract; -import com.comphenix.protocol.utility.ByteBuddyFactory; -import com.comphenix.protocol.utility.MinecraftMethods; import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftVersion; +import net.bytebuddy.jar.asm.*; +import org.bukkit.block.BlockState; + import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map; -import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; -import net.bytebuddy.implementation.InvocationHandlerAdapter; -import net.bytebuddy.jar.asm.ClassReader; -import net.bytebuddy.jar.asm.ClassVisitor; -import net.bytebuddy.jar.asm.MethodVisitor; -import net.bytebuddy.jar.asm.Opcodes; -import net.bytebuddy.jar.asm.Type; -import net.bytebuddy.matcher.ElementMatchers; -import org.bukkit.block.BlockState; /** * Manipulate tile entities. @@ -91,7 +83,7 @@ class TileEntityAccessor { created = EMPTY_ACCESSOR; } if (field != null) { - created = new TileEntityAccessor(field, state); + created = new TileEntityAccessor<>(field, state); } accessor = cachedAccessors.putIfAbsent(craftBlockState, created); diff --git a/src/main/java/com/comphenix/protocol/wrappers/nbt/WrappedElement.java b/src/main/java/com/comphenix/protocol/wrappers/nbt/WrappedElement.java index e7e8bdd9..c44c11b0 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/nbt/WrappedElement.java +++ b/src/main/java/com/comphenix/protocol/wrappers/nbt/WrappedElement.java @@ -113,7 +113,7 @@ class WrappedElement implements NbtWrapper { if (modifier == null) { synchronized (this) { if (MODIFIERS[index] == null) { - MODIFIERS[index] = new StructureModifier(handle.getClass(), MinecraftReflection.getNBTBaseClass(), false); + MODIFIERS[index] = new StructureModifier<>(handle.getClass(), MinecraftReflection.getNBTBaseClass(), false); } modifier = (StructureModifier) MODIFIERS[index]; } @@ -241,13 +241,13 @@ class WrappedElement implements NbtWrapper { result.append("{"); if (name != null && name.length() > 0) - result.append("name: '" + name + "', "); + result.append("name: '").append(name).append("', "); result.append("value: "); // Wrap quotation marks if (getType() == NbtType.TAG_STRING) - result.append("'" + getValue() + "'"); + result.append("'").append(getValue()).append("'"); else result.append(getValue()); diff --git a/src/main/java/com/comphenix/protocol/wrappers/nbt/io/NbtConfigurationSerializer.java b/src/main/java/com/comphenix/protocol/wrappers/nbt/io/NbtConfigurationSerializer.java index cfb9af7e..65096843 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/nbt/io/NbtConfigurationSerializer.java +++ b/src/main/java/com/comphenix/protocol/wrappers/nbt/io/NbtConfigurationSerializer.java @@ -1,24 +1,13 @@ package com.comphenix.protocol.wrappers.nbt.io; -import java.nio.ByteBuffer; -import java.nio.IntBuffer; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - +import com.comphenix.protocol.wrappers.nbt.*; +import com.google.common.primitives.Ints; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; -import com.comphenix.protocol.wrappers.nbt.NbtBase; -import com.comphenix.protocol.wrappers.nbt.NbtCompound; -import com.comphenix.protocol.wrappers.nbt.NbtFactory; -import com.comphenix.protocol.wrappers.nbt.NbtList; -import com.comphenix.protocol.wrappers.nbt.NbtType; -import com.comphenix.protocol.wrappers.nbt.NbtVisitor; -import com.comphenix.protocol.wrappers.nbt.NbtWrapper; -import com.google.common.primitives.Ints; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.*; /** * Serialize and deserialize NBT information from a configuration section. @@ -237,7 +226,7 @@ public class NbtConfigurationSerializer { // Read everything in order for (String key : sorted) { - NbtBase base = (NbtBase) readNode(section, key.toString()); + NbtBase base = (NbtBase) readNode(section, key); base.setName(NbtList.EMPTY_NAME); list.getValue().add(base); } diff --git a/src/main/java/com/comphenix/protocol/wrappers/ping/LegacyServerPing.java b/src/main/java/com/comphenix/protocol/wrappers/ping/LegacyServerPing.java index e258a7d7..590b51ce 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/ping/LegacyServerPing.java +++ b/src/main/java/com/comphenix/protocol/wrappers/ping/LegacyServerPing.java @@ -1,7 +1,6 @@ package com.comphenix.protocol.wrappers.ping; import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.injector.BukkitUnwrapper; import com.comphenix.protocol.reflect.EquivalentConverter; import com.comphenix.protocol.reflect.accessors.Accessors; import com.comphenix.protocol.reflect.accessors.ConstructorAccessor; @@ -14,16 +13,9 @@ import com.comphenix.protocol.wrappers.AbstractWrapper; import com.comphenix.protocol.wrappers.BukkitConverters; import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedGameProfile; -import com.comphenix.protocol.wrappers.WrappedServerPing; - import com.google.common.collect.ImmutableList; - import org.bukkit.Bukkit; import org.bukkit.Server; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; /** * Represents a server ping packet data. From 1b860f7e35f6b4b139671a8e6bff8ba8e45f7fae Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sun, 16 Jul 2023 00:09:16 +0200 Subject: [PATCH 27/30] Simplify return value. --- .../com/comphenix/protocol/injector/PluginVerifier.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java b/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java index 93cff2ab..41baac90 100644 --- a/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java +++ b/src/main/java/com/comphenix/protocol/injector/PluginVerifier.java @@ -173,11 +173,8 @@ class PluginVerifier { } // No dependency - check the load order - if (beforePlugin.getDescription().getLoad() == PluginLoadOrder.STARTUP && - afterPlugin.getDescription().getLoad() == PluginLoadOrder.POSTWORLD) { - return true; - } - return false; + return beforePlugin.getDescription().getLoad() == PluginLoadOrder.STARTUP && + afterPlugin.getDescription().getLoad() == PluginLoadOrder.POSTWORLD; } /** From b234c6d5e1abbc6a59c79bdbe9d24f98ba267e07 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sun, 16 Jul 2023 00:17:12 +0200 Subject: [PATCH 28/30] Make some values final. --- .../protocol/async/AsyncFilterManager.java | 6 +++--- .../com/comphenix/protocol/async/AsyncMarker.java | 2 +- .../comphenix/protocol/wrappers/AutoWrapper.java | 13 ++++++------- .../protocol/wrappers/WrappedDataWatcher.java | 9 ++++----- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java index f7da2337..d081a9b6 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java @@ -51,10 +51,10 @@ public class AsyncFilterManager implements AsynchronousManager { private SortedPacketListenerList serverTimeoutListeners; private SortedPacketListenerList clientTimeoutListeners; - private Set timeoutListeners; + private final Set timeoutListeners; - private PacketProcessingQueue serverProcessingQueue; - private PacketProcessingQueue clientProcessingQueue; + private final PacketProcessingQueue serverProcessingQueue; + private final PacketProcessingQueue clientProcessingQueue; // Sending queues private final PlayerSendingHandler playerSendingHandler; diff --git a/src/main/java/com/comphenix/protocol/async/AsyncMarker.java b/src/main/java/com/comphenix/protocol/async/AsyncMarker.java index a39d09e2..753fb996 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncMarker.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncMarker.java @@ -93,7 +93,7 @@ public class AsyncMarker implements Serializable, Comparable { private volatile boolean asyncCancelled; // Whether to delay processing - private AtomicInteger processingDelay = new AtomicInteger(); + private final AtomicInteger processingDelay = new AtomicInteger(); // Used to synchronize processing on the shared PacketEvent private Object processingLock = new Object(); diff --git a/src/main/java/com/comphenix/protocol/wrappers/AutoWrapper.java b/src/main/java/com/comphenix/protocol/wrappers/AutoWrapper.java index 60855be3..ce02fe15 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/AutoWrapper.java +++ b/src/main/java/com/comphenix/protocol/wrappers/AutoWrapper.java @@ -16,9 +16,11 @@ */ package com.comphenix.protocol.wrappers; +import com.comphenix.protocol.reflect.EquivalentConverter; import com.comphenix.protocol.reflect.accessors.Accessors; import com.comphenix.protocol.reflect.accessors.ConstructorAccessor; import com.comphenix.protocol.reflect.accessors.FieldAccessor; +import com.comphenix.protocol.utility.MinecraftReflection; import com.google.common.base.Defaults; import com.google.common.base.Preconditions; @@ -28,9 +30,6 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Function; -import com.comphenix.protocol.reflect.EquivalentConverter; -import com.comphenix.protocol.utility.MinecraftReflection; - /** * Automatically wraps an internal NMS class to a non-versioned, deofbuscated class. * Requirements: @@ -48,8 +47,8 @@ import com.comphenix.protocol.utility.MinecraftReflection; public class AutoWrapper implements EquivalentConverter { private static final Object[] NO_ARGS = new Object[0]; - private Map> wrappers = new HashMap<>(); - private Map> unwrappers = new HashMap<>(); + private final Map> wrappers = new HashMap<>(); + private final Map> unwrappers = new HashMap<>(); // lazy private FieldAccessor[] nmsAccessors; @@ -58,8 +57,8 @@ public class AutoWrapper implements EquivalentConverter { private Object[] nmsDefaultArgs; private ConstructorAccessor nmsInstanceCreator; - private Class wrapperClass; - private Class nmsClass; + private final Class wrapperClass; + private final Class nmsClass; private AutoWrapper(Class wrapperClass, Class nmsClass) { this.wrapperClass = wrapperClass; diff --git a/src/main/java/com/comphenix/protocol/wrappers/WrappedDataWatcher.java b/src/main/java/com/comphenix/protocol/wrappers/WrappedDataWatcher.java index 8757749a..324bfd5b 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/WrappedDataWatcher.java +++ b/src/main/java/com/comphenix/protocol/wrappers/WrappedDataWatcher.java @@ -16,9 +16,6 @@ */ package com.comphenix.protocol.wrappers; -import java.lang.reflect.*; -import java.util.*; - import com.comphenix.protocol.injector.BukkitUnwrapper; import com.comphenix.protocol.reflect.FieldAccessException; import com.comphenix.protocol.reflect.FuzzyReflection; @@ -33,12 +30,14 @@ import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.wrappers.collection.ConvertedMap; import com.google.common.base.Optional; import com.google.common.collect.ImmutableBiMap; - import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.*; +import java.util.*; + /** * Represents a DataWatcher * @author dmulloy2 @@ -912,7 +911,7 @@ public class WrappedDataWatcher extends AbstractWrapper implements Iterable REGISTRY = new ArrayList<>(); + private static final List REGISTRY = new ArrayList<>(); /** * Gets the first serializer associated with a given class. From 3a30fe9669ea1a5a8a9c37d25e4f24119d235c66 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sun, 16 Jul 2023 00:24:24 +0200 Subject: [PATCH 29/30] Use Java's BiFunction. --- .../wrappers/collection/BiFunction.java | 12 ---------- .../wrappers/collection/ConvertedMap.java | 23 ++++++++++--------- 2 files changed, 12 insertions(+), 23 deletions(-) delete mode 100644 src/main/java/com/comphenix/protocol/wrappers/collection/BiFunction.java diff --git a/src/main/java/com/comphenix/protocol/wrappers/collection/BiFunction.java b/src/main/java/com/comphenix/protocol/wrappers/collection/BiFunction.java deleted file mode 100644 index b552b55b..00000000 --- a/src/main/java/com/comphenix/protocol/wrappers/collection/BiFunction.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.comphenix.protocol.wrappers.collection; - -/** - * Represents a function that accepts two parameters. - * @author Kristian - * @param - type of the first parameter. - * @param - type of the second parameter. - * @param - type of the return value. - */ -public interface BiFunction { - TResult apply(T1 arg1, T2 arg2); -} diff --git a/src/main/java/com/comphenix/protocol/wrappers/collection/ConvertedMap.java b/src/main/java/com/comphenix/protocol/wrappers/collection/ConvertedMap.java index 2b1b4a6d..1ceb52e9 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/collection/ConvertedMap.java +++ b/src/main/java/com/comphenix/protocol/wrappers/collection/ConvertedMap.java @@ -23,10 +23,11 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; +import java.util.function.BiFunction; /** * Represents a map that wraps another map by transforming the entries going in and out. - * + * * @author Kristian * * @param - type of the value in the entries in the inner invisible map. @@ -34,14 +35,14 @@ import java.util.Set; */ public abstract class ConvertedMap extends AbstractConverted implements Map { // Inner map - private Map inner; + private final Map inner; // Inner conversion private final BiFunction innerConverter = this::toInner; - + // Outer conversion private final BiFunction outerConverter = this::toOuter; - + public ConvertedMap(Map inner) { if (inner == null) throw new IllegalArgumentException("Inner map cannot be NULL."); @@ -78,7 +79,7 @@ public abstract class ConvertedMap extends AbstractConverte protected VOuter toOuter(Key key, VInner inner) { return toOuter(inner); } - + /** * Convert a value from the outer map to the internal inner map. * @param key - unused value. @@ -88,7 +89,7 @@ public abstract class ConvertedMap extends AbstractConverte protected VInner toInner(Key key, VOuter outer) { return toInner(outer); } - + @SuppressWarnings("unchecked") @Override public VOuter get(Object key) { @@ -165,7 +166,7 @@ public abstract class ConvertedMap extends AbstractConverte sb.append(", "); } } - + /** * Convert a collection of entries. * @param entries - the collection of entries. @@ -177,7 +178,7 @@ public abstract class ConvertedMap extends AbstractConverte final Collection> entries, final BiFunction innerFunction, final BiFunction outerFunction) { - + return new ConvertedSet, Entry>(entries) { @Override protected Entry toInner(final Entry outer) { @@ -196,14 +197,14 @@ public abstract class ConvertedMap extends AbstractConverte public VInner setValue(VInner value) { return innerFunction.apply(getKey(), outer.setValue(outerFunction.apply(getKey(), value))); } - + @Override public String toString() { return String.format("\"%s\": %s", getKey(), getValue()); } }; } - + @Override protected Entry toOuter(final Entry inner) { return new Entry() { @@ -222,7 +223,7 @@ public abstract class ConvertedMap extends AbstractConverte final VInner converted = innerFunction.apply(getKey(), value); return outerFunction.apply(getKey(), inner.setValue(converted)); } - + @Override public String toString() { return String.format("\"%s\": %s", getKey(), getValue()); From 700012c92c0ec9292a4fc11bfcc8f7e29eef2ad0 Mon Sep 17 00:00:00 2001 From: Photon-GitHub Date: Sun, 16 Jul 2023 00:24:38 +0200 Subject: [PATCH 30/30] Simple cleanup. --- .../protocol/reflect/fuzzy/AbstractFuzzyMember.java | 5 +++-- .../protocol/reflect/cloning/AggregateClonerTest.java | 11 ++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/reflect/fuzzy/AbstractFuzzyMember.java b/src/main/java/com/comphenix/protocol/reflect/fuzzy/AbstractFuzzyMember.java index ff349c52..fba00b3d 100644 --- a/src/main/java/com/comphenix/protocol/reflect/fuzzy/AbstractFuzzyMember.java +++ b/src/main/java/com/comphenix/protocol/reflect/fuzzy/AbstractFuzzyMember.java @@ -1,12 +1,13 @@ package com.comphenix.protocol.reflect.fuzzy; import com.google.common.collect.Maps; + +import javax.annotation.Nonnull; import java.lang.reflect.Member; import java.lang.reflect.Modifier; import java.util.Map; import java.util.Objects; import java.util.regex.Pattern; -import javax.annotation.Nonnull; /** * Represents a matcher that matches members. @@ -186,7 +187,7 @@ public abstract class AbstractFuzzyMember implements AbstractF * * @author Kristian */ - public static abstract class Builder> { + public abstract static class Builder> { protected T member = this.initialMember(); diff --git a/src/test/java/com/comphenix/protocol/reflect/cloning/AggregateClonerTest.java b/src/test/java/com/comphenix/protocol/reflect/cloning/AggregateClonerTest.java index ef67af03..7d8c39ba 100644 --- a/src/test/java/com/comphenix/protocol/reflect/cloning/AggregateClonerTest.java +++ b/src/test/java/com/comphenix/protocol/reflect/cloning/AggregateClonerTest.java @@ -1,18 +1,19 @@ package com.comphenix.protocol.reflect.cloning; -import static org.junit.jupiter.api.Assertions.assertEquals; - import com.comphenix.protocol.BukkitInitialization; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; -import java.util.Arrays; -import java.util.List; import net.minecraft.core.NonNullList; import net.minecraft.world.item.ItemStack; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + public class AggregateClonerTest { @BeforeAll @@ -21,7 +22,7 @@ public class AggregateClonerTest { } @Test - public void testArrays() { + void testArrays() { List input = Arrays.asList(1, 2, 3); assertEquals(input, AggregateCloner.DEFAULT.clone(input)); }