diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIConfig.java b/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIConfig.java index e494004065..33be710b99 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIConfig.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIConfig.java @@ -21,9 +21,6 @@ package dev.jorel.commandapi; import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; /** * A class to contain information about how to configure the CommandAPI during its loading step. @@ -45,6 +42,9 @@ public abstract class CommandAPIConfig String getRawArgumentInput(CommandContext FIELDS = new HashMap<>(); final CommandAPIPlatform platform; - private CommandAPIMessenger messenger; + private CommandAPIMessenger messenger = null; final TreeMap registeredPermissions = new TreeMap<>(); final List registeredCommands; // Keep track of what has been registered for type checking @@ -154,13 +154,17 @@ private void checkDependencies() { public void onEnable() { platform.onEnable(); - // Setting up the network messenger usually requires registering - // events, which often does not work until onEnable - messenger = platform.setupMessenger(); + + if (CommandAPI.getConfiguration().isNetworkingEnabled()) { + // Setting up the network messenger usually requires registering + // events, which often does not work until onEnable + messenger = platform.setupMessenger(); + } } public void onDisable() { - messenger.close(); + if (messenger != null) messenger.close(); + platform.onDisable(); CommandAPIHandler.resetInstance(); } diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/InternalConfig.java b/commandapi-core/src/main/java/dev/jorel/commandapi/InternalConfig.java index c80339ec5b..3d5f538f9f 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/InternalConfig.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/InternalConfig.java @@ -21,8 +21,6 @@ package dev.jorel.commandapi; import java.io.File; -import java.util.List; -import java.util.function.Function; /** * Configuration wrapper class. The config.yml file used by the CommandAPI is @@ -46,6 +44,12 @@ public class InternalConfig { // The default command namespace private final String namespace; + // Whether we should turn on networking + private final boolean enableNetworking; + + // Whether we should log networking exceptions as warnings + private final boolean makeNetworkingExceptionsWarnings; + /** * Creates an {@link InternalConfig} from a {@link CommandAPIConfig} * @@ -57,6 +61,8 @@ public InternalConfig(CommandAPIConfig config) { this.messageMissingExecutorImplementation = config.missingExecutorImplementationMessage; this.dispatcherFile = config.dispatcherFile; this.namespace = config.namespace; + this.enableNetworking = config.enableNetworking; + this.makeNetworkingExceptionsWarnings = config.makeNetworkingExceptionsWarnings; } /** @@ -95,4 +101,18 @@ public File getDispatcherFile() { public String getNamespace() { return namespace; } + + /** + * @return Whether networking should be enabled + */ + public boolean isNetworkingEnabled() { + return enableNetworking; + } + + /** + * @return Whether networking exceptions are logged as warnings + */ + public boolean makeNetworkingExceptionsWarnings() { + return this.makeNetworkingExceptionsWarnings; + } } \ No newline at end of file diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/exceptions/ProtocolVersionTooOldException.java b/commandapi-core/src/main/java/dev/jorel/commandapi/exceptions/ProtocolVersionTooOldException.java index 7dd3b45785..ab9f1a4626 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/exceptions/ProtocolVersionTooOldException.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/exceptions/ProtocolVersionTooOldException.java @@ -7,7 +7,7 @@ public static ProtocolVersionTooOldException whileSending(Object target, int pro return new ProtocolVersionTooOldException( "Tried to send a packet to " + target + ", which is using protocol version " + protocolVersion + ". " + "This system is using version " + CommandAPIProtocol.PROTOCOL_VERSION + ". " + - "That version is too old to receive the packet. " + + "That version is too old to receive the packet, or CommandAPI networking is not enabled. " + reason, protocolVersion, reason ); diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/network/CommandAPIMessenger.java b/commandapi-core/src/main/java/dev/jorel/commandapi/network/CommandAPIMessenger.java index d9c4b06b13..effa95f8ac 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/network/CommandAPIMessenger.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/network/CommandAPIMessenger.java @@ -4,7 +4,7 @@ import dev.jorel.commandapi.network.packets.ProtocolVersionTooOldPacket; import dev.jorel.commandapi.network.packets.SetVersionPacket; -import java.util.Arrays; +import java.util.HexFormat; /** * Handles sending and receiving {@link CommandAPIPacket}s between instances of the CommandAPI plugin on different servers. @@ -41,6 +41,8 @@ protected CommandAPIMessenger(CommandAPIPacketHandlerProvider pack */ public abstract int getConnectionProtocolVersion(OutputChannel target); + private final static HexFormat byteArrayFormat = HexFormat.ofDelimiter(", ").withUpperCase(); + /** * Handles a message sent to this plugin. The given byte array will be decoded into a {@link CommandAPIPacket} * according to the given {@link CommandAPIProtocol}, then handled appropriately. Nothing happens if the given byte @@ -59,28 +61,27 @@ protected void messageReceived(CommandAPIProtocol protocol, InputChannel sender, FriendlyByteBuffer buffer = new FriendlyByteBuffer(input); - int id; - CommandAPIPacket packet; try { // Read the id - id = buffer.readVarInt(); + int id = buffer.readVarInt(); // Use the id and protocol to find and use the correct deserialize method - packet = protocol.createPacket(id, buffer); - } catch (IllegalStateException e) { - throw new IllegalStateException("Exception while reading packet", e); - } - if (packet == null) throw new IllegalStateException("Unknown packet id: " + id); - - if (buffer.countReadableBytes() != 0) { - // If the packet didn't read all the bytes it was given, we have a strange miscommunication - throw new IllegalStateException( - "Packet was larger than expected! " + buffer.countReadableBytes() + " extra byte(s) found after deserializing.\n" + - "Given: " + Arrays.toString(input) + ", Read: " + packet - ); + CommandAPIPacket packet = protocol.createPacket(id, buffer); + + if (packet == null) throw new IllegalStateException("Unknown packet id: " + id + " for channel: " + protocol.getChannelIdentifier()); + + if (buffer.countReadableBytes() != 0) { + // If the packet didn't read all the bytes it was given, we have a strange miscommunication + throw new IllegalStateException( + "Packet was larger than expected! " + buffer.countReadableBytes() + " extra byte(s) found after deserializing.\n" + + "Read: " + packet + ); + } + + // Handle the packet + packetHandlerProvider.getHandlerForProtocol(protocol).handlePacket(sender, packet); + } catch (Throwable throwable) { + handlePacketException(new IllegalStateException("Exception while reading packet [" + byteArrayFormat.formatHex(input) + "]", throwable)); } - - // Handle the packet - packetHandlerProvider.getHandlerForProtocol(protocol).handlePacket(sender, packet); } /** @@ -119,7 +120,8 @@ public void sendPacket(OutputChannel target, CommandAPIPacket packet) { } catch (ProtocolVersionTooOldException exception) { // Send the exception to the other side too, so they know to update their protocol version this.sendPacket(target, new ProtocolVersionTooOldPacket(CommandAPIProtocol.PROTOCOL_VERSION, exception.getReason())); - throw exception; + handlePacketException(exception); + return; } // Send the bytes @@ -134,4 +136,12 @@ public void sendPacket(OutputChannel target, CommandAPIPacket packet) { * @param bytes The array of bytes to send. */ protected abstract void sendRawBytes(CommandAPIProtocol protocol, OutputChannel target, byte[] bytes); + + /** + * Called when there is an exception while sending or receiving a packet. + * May rethrow the exception or log it in another manner. + * + * @param exception The exception that was thrown. + */ + protected abstract void handlePacketException(RuntimeException exception); } diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/network/HandshakePacketHandler.java b/commandapi-core/src/main/java/dev/jorel/commandapi/network/HandshakePacketHandler.java index 9adf73bb1a..32adfd2da2 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/network/HandshakePacketHandler.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/network/HandshakePacketHandler.java @@ -28,7 +28,6 @@ else throw new IllegalStateException("Tried to handle " + packet + " with Handsh */ void handleSetVersionPacket(InputChannel sender, SetVersionPacket packet); - /** * Handles a {@link ProtocolVersionTooOldPacket}. * diff --git a/commandapi-core/src/main/java/dev/jorel/commandapi/network/packets/UpdateRequirementsPacket.java b/commandapi-core/src/main/java/dev/jorel/commandapi/network/packets/UpdateRequirementsPacket.java index af0591c656..862cefb1f7 100644 --- a/commandapi-core/src/main/java/dev/jorel/commandapi/network/packets/UpdateRequirementsPacket.java +++ b/commandapi-core/src/main/java/dev/jorel/commandapi/network/packets/UpdateRequirementsPacket.java @@ -35,7 +35,7 @@ public static UpdateRequirementsPacket deserialize(FriendlyByteBuffer ignored) { public void write(FriendlyByteBuffer buffer, Object target, int protocolVersion) throws ProtocolVersionTooOldException { if (protocolVersion == 0) { throw ProtocolVersionTooOldException.whileSending(target, protocolVersion, - "CommandAPI version 10.0.0 or greater is required to receive UpdateRequirementsPacket" + "CommandAPI version 10.0.0 or greater is required to receive UpdateRequirementsPacket." ); } // Nothing to write diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java index 7c2fafef65..9b85b13ac9 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java @@ -48,7 +48,7 @@ public abstract class CommandAPIBukkit implements BukkitPlatform // References to utility classes private static CommandAPIBukkit bukkit; protected static InternalBukkitConfig config; - private BukkitCommandAPIMessenger messenger; + private BukkitCommandAPIMessenger messenger = null; protected JavaPlugin plugin; protected NMS nms; @@ -391,7 +391,13 @@ public BukkitCommandAPIMessenger setupMessenger() { @Override public BukkitCommandAPIMessenger getMessenger() { - return messenger; + if (messenger != null) { + return messenger; + } else { + throw new IllegalStateException("Tried to access the plugin messenger, but it was null." + + " Plugin messages are only possible after calling CommandAPI#onEnable." + + " Also ensure that the \"enable-networking\" config option is \"true\"."); + } } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/network/BukkitCommandAPIMessenger.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/network/BukkitCommandAPIMessenger.java index f67241ea26..1730aed440 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/network/BukkitCommandAPIMessenger.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/network/BukkitCommandAPIMessenger.java @@ -1,5 +1,6 @@ package dev.jorel.commandapi.network; +import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.network.packets.SetVersionPacket; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -104,4 +105,13 @@ public void onPluginMessageReceived(@NotNull String channel, @NotNull Player pla public void sendRawBytes(CommandAPIProtocol protocol, Player target, byte[] bytes) { target.sendPluginMessage(this.plugin, protocol.getChannelIdentifier(), bytes); } + + @Override + protected void handlePacketException(RuntimeException exception) { + if (CommandAPI.getConfiguration().makeNetworkingExceptionsWarnings()) { + CommandAPI.logWarning(exception.getMessage()); + } else { + throw exception; + } + } } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-networking-plugin/src/main/java/dev/jorel/commandapi/network/BukkitNetworkingCommandAPIMessenger.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-networking-plugin/src/main/java/dev/jorel/commandapi/network/BukkitNetworkingCommandAPIMessenger.java index baeac63f07..a2d32890cb 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-networking-plugin/src/main/java/dev/jorel/commandapi/network/BukkitNetworkingCommandAPIMessenger.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-networking-plugin/src/main/java/dev/jorel/commandapi/network/BukkitNetworkingCommandAPIMessenger.java @@ -103,4 +103,10 @@ public void onPluginMessageReceived(String channel, Player player, byte[] messag public void sendRawBytes(CommandAPIProtocol protocol, Player target, byte[] bytes) { target.sendPluginMessage(this.plugin, protocol.getChannelIdentifier(), bytes); } + + @Override + protected void handlePacketException(RuntimeException exception) { + // No config file or logger yet for the networking plugin + throw exception; + } } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-plugin-common/src/main/java/dev/jorel/commandapi/config/DefaultBukkitConfig.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-plugin-common/src/main/java/dev/jorel/commandapi/config/DefaultBukkitConfig.java index 5238ff6043..cc8fe4d6e1 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-plugin-common/src/main/java/dev/jorel/commandapi/config/DefaultBukkitConfig.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-plugin-common/src/main/java/dev/jorel/commandapi/config/DefaultBukkitConfig.java @@ -72,6 +72,8 @@ public static DefaultBukkitConfig createDefaultPaperConfig() { options.put("fallback-to-latest-nms", FALLBACK_TO_LATEST_NMS(true)); options.put("skip-initial-datapack-reload", SKIP_RELOAD_DATAPACKS); // TODO: Remove once the Paper plugin utilizes the bootstrapper options.put("hook-paper-reload", HOOK_PAPER_RELOAD); // TODO: Remove once the Paper plugin utilizes the bootstrapper + options.put("enable-networking", ENABLE_NETWORKING); + options.put("make-networking-exceptions-warnings", MAKE_NETWORKING_EXCEPTIONS_WARNINGS); options.put("plugins-to-convert", PLUGINS_TO_CONVERT); options.put("other-commands-to-convert", OTHER_COMMANDS_TO_CONVERT); options.put("skip-sender-proxy", SKIP_SENDER_PROXY); @@ -90,6 +92,8 @@ public static DefaultBukkitConfig createDefaultSpigotConfig() { options.put("create-dispatcher-json", CREATE_DISPATCHER_JSON); options.put("fallback-to-latest-nms", FALLBACK_TO_LATEST_NMS(false)); options.put("skip-initial-datapack-reload", SKIP_RELOAD_DATAPACKS); + options.put("enable-networking", ENABLE_NETWORKING); + options.put("make-networking-exceptions-warnings", MAKE_NETWORKING_EXCEPTIONS_WARNINGS); options.put("plugins-to-convert", PLUGINS_TO_CONVERT); options.put("other-commands-to-convert", OTHER_COMMANDS_TO_CONVERT); options.put("skip-sender-proxy", SKIP_SENDER_PROXY); diff --git a/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java b/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java index 601b05b37e..410314ff27 100644 --- a/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java +++ b/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java @@ -53,7 +53,9 @@ public void onLoad() { .missingExecutorImplementationMessage(fileConfig.getString("messages.missing-executor-implementation")) .dispatcherFile(fileConfig.getBoolean("create-dispatcher-json") ? new File(getDataFolder(), "command_registration.json") : null) .hookPaperReload(fileConfig.getBoolean("hook-paper-reload")) // TODO: Remove once this utilizes the bootstrapper - .skipInitialDatapackReload(fileConfig.getBoolean("skip-initial-datapack-reload")); // TODO: Remove once this utilizes the bootstrapper + .skipInitialDatapackReload(fileConfig.getBoolean("skip-initial-datapack-reload")) // TODO: Remove once this utilizes the bootstrapper + .enableNetworking(fileConfig.getBoolean("enable-networking")) + .makeNetworkingExceptionsWarnings(fileConfig.getBoolean("make-networking-exceptions-warnings")); for (String pluginName : fileConfig.getStringList("skip-sender-proxy")) { if (Bukkit.getPluginManager().getPlugin(pluginName) != null) { diff --git a/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/resources/plugin.yml b/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/resources/plugin.yml index c31f8ced83..288f0a6893 100644 --- a/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/resources/plugin.yml +++ b/commandapi-platforms/commandapi-paper/commandapi-paper-plugin/src/main/resources/plugin.yml @@ -9,5 +9,7 @@ authors: website: https://www.jorel.dev/CommandAPI/ softdepend: - NBTAPI +provides: + - CommandAPINetworking api-version: 1.13 folia-supported: true diff --git a/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java b/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java index e4c75adb6d..bcbd86b763 100644 --- a/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java +++ b/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java @@ -52,7 +52,9 @@ public void onLoad() { .fallbackToLatestNMS(fileConfig.getBoolean("fallback-to-latest-nms")) .missingExecutorImplementationMessage(fileConfig.getString("messages.missing-executor-implementation")) .dispatcherFile(fileConfig.getBoolean("create-dispatcher-json") ? new File(getDataFolder(), "command_registration.json") : null) - .skipReloadDatapacks(fileConfig.getBoolean("skip-initial-datapack-reload")); + .skipReloadDatapacks(fileConfig.getBoolean("skip-initial-datapack-reload")) + .enableNetworking(fileConfig.getBoolean("enable-networking")) + .makeNetworkingExceptionsWarnings(fileConfig.getBoolean("make-networking-exceptions-warnings")); for (String pluginName : fileConfig.getStringList("skip-sender-proxy")) { if (Bukkit.getPluginManager().getPlugin(pluginName) != null) { diff --git a/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/resources/plugin.yml b/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/resources/plugin.yml index c31f8ced83..f13c4a9faf 100644 --- a/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/resources/plugin.yml +++ b/commandapi-platforms/commandapi-spigot/commandapi-spigot-plugin/src/main/resources/plugin.yml @@ -9,5 +9,7 @@ authors: website: https://www.jorel.dev/CommandAPI/ softdepend: - NBTAPI +provides: + - CommandAPINetworking api-version: 1.13 folia-supported: true diff --git a/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/CommandAPIVelocity.java b/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/CommandAPIVelocity.java index 13caf6255d..3d9010b60d 100644 --- a/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/CommandAPIVelocity.java +++ b/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/CommandAPIVelocity.java @@ -42,7 +42,7 @@ public class CommandAPIVelocity implements CommandAPIPlatform, Comma private static CommandAPIVelocity instance; private static InternalVelocityConfig config; - private VelocityCommandAPIMessenger messenger; + private VelocityCommandAPIMessenger messenger = null; private CommandManager commandManager; private CommandDispatcher dispatcher; @@ -105,14 +105,20 @@ public void unregister(String commandName, boolean unregisterNamespaces) { @Override public VelocityCommandAPIMessenger setupMessenger() { messenger = new VelocityCommandAPIMessenger( - getConfiguration().getPlugin(), - getConfiguration().getServer() + config.getPlugin(), + config.getServer() ); return messenger; } public VelocityCommandAPIMessenger getMessenger() { - return messenger; + if (messenger != null) { + return messenger; + } else { + throw new IllegalStateException("Tried to access the plugin messenger, but it was null." + + " Plugin messages are only possible after calling CommandAPI#onEnable." + + " Also ensure that the \"enable-networking\" config option is \"true\"."); + } } @Override diff --git a/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityCommandAPIMessenger.java b/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityCommandAPIMessenger.java index 91e06359ee..8775fbd732 100644 --- a/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityCommandAPIMessenger.java +++ b/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityCommandAPIMessenger.java @@ -9,6 +9,7 @@ import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.messages.*; +import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.network.packets.SetVersionPacket; import java.util.HashMap; @@ -147,4 +148,13 @@ public void onPluginMessageEvent(PluginMessageEvent event) { public void sendRawBytes(CommandAPIProtocol protocol, ChannelMessageSink target, byte[] bytes) { target.sendPluginMessage(MinecraftChannelIdentifier.from(protocol.getChannelIdentifier()), bytes); } + + @Override + protected void handlePacketException(RuntimeException exception) { + if (CommandAPI.getConfiguration().makeNetworkingExceptionsWarnings()) { + CommandAPI.logWarning(exception.getMessage()); + } else { + throw exception; + } + } } diff --git a/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityHandshakePacketHandler.java b/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityHandshakePacketHandler.java index a606089a0a..9d8b1af0bb 100644 --- a/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityHandshakePacketHandler.java +++ b/commandapi-platforms/commandapi-velocity/commandapi-velocity-core/src/main/java/dev/jorel/commandapi/network/VelocityHandshakePacketHandler.java @@ -20,7 +20,7 @@ public void handleSetVersionPacket(ChannelMessageSource sender, SetVersionPacket VelocityCommandAPIMessenger messenger = CommandAPIVelocity.get().getMessenger(); // Incoming messages are from ChannelMessageSource, while outgoing messages are ChannelMessageSink - // We actually want to set the version of a ChannelMessageSink. These istanceofs safely down-cast, + // We actually want to set the version of a ChannelMessageSink. These instanceofs safely down-cast, // then the method call up-casts. if (sender instanceof ServerConnection server) messenger.setServerProtocolVersion(server, protocolVersion); if (sender instanceof Player player) messenger.setPlayerProtocolVersion(player, protocolVersion); diff --git a/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java b/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java index 856e197f7b..d340a0eb36 100644 --- a/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java +++ b/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/CommandAPIMain.java @@ -61,7 +61,9 @@ public CommandAPIMain(ProxyServer server, Logger logger, @DataDirectory Path dat .verboseOutput(configYAML.node("verbose-outputs").getBoolean()) .silentLogs(configYAML.node("silent-logs").getBoolean()) .missingExecutorImplementationMessage(configYAML.node("messages", "missing-executor-implementation").getString()) - .dispatcherFile(configYAML.node("create-dispatcher-json").getBoolean() ? new File(dataDirectory.toFile(), "command_registration.json") : null); + .dispatcherFile(configYAML.node("create-dispatcher-json").getBoolean() ? new File(dataDirectory.toFile(), "command_registration.json") : null) + .enableNetworking(configYAML.node("enable-networking").getBoolean()) + .makeNetworkingExceptionsWarnings(configYAML.node("make-networking-exceptions-warnings").getBoolean()); // Load CommandAPI.setLogger(CommandAPILogger.fromJavaLogger(logger)); diff --git a/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/config/DefaultVelocityConfig.java b/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/config/DefaultVelocityConfig.java index 99ad76b490..169ba500eb 100644 --- a/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/config/DefaultVelocityConfig.java +++ b/commandapi-platforms/commandapi-velocity/commandapi-velocity-plugin/src/main/java/dev/jorel/commandapi/config/DefaultVelocityConfig.java @@ -13,6 +13,8 @@ public static DefaultVelocityConfig createDefault() { options.put("silent-logs", SILENT_LOGS); options.put("messages.missing-executor-implementation", MISSING_EXECUTOR_IMPLEMENTATION); options.put("create-dispatcher-json", CREATE_DISPATCHER_JSON); + options.put("enable-networking", ENABLE_NETWORKING); + options.put("make-networking-exceptions-warnings", MAKE_NETWORKING_EXCEPTIONS_WARNINGS); Map sections = new LinkedHashMap<>(); sections.put("messages", SECTION_MESSAGE); diff --git a/commandapi-plugin/src/main/java/dev/jorel/commandapi/config/DefaultConfig.java b/commandapi-plugin/src/main/java/dev/jorel/commandapi/config/DefaultConfig.java index 67216db0eb..e62cfdd893 100644 --- a/commandapi-plugin/src/main/java/dev/jorel/commandapi/config/DefaultConfig.java +++ b/commandapi-plugin/src/main/java/dev/jorel/commandapi/config/DefaultConfig.java @@ -41,6 +41,26 @@ public abstract class DefaultConfig { }, false ); + public static final CommentedConfigOption ENABLE_NETWORKING = new CommentedConfigOption<>( + new String[]{ + "Turn on the CommandAPI's plugin messaging functionality (default: false)", + "If \"false\", the CommandAPI will not listen to incoming plugin messages", + "and attempts to send plugin messages will fail. Enabling networking by", + "setting this to \"true\" is currently only useful for allowing command", + "requirements on Velocity." + }, false + ); + + public static final CommentedConfigOption MAKE_NETWORKING_EXCEPTIONS_WARNINGS = new CommentedConfigOption<>( + new String[]{ + "Turn exceptions while sending and receiving packets into warnings (default: false)", + "If \"false\", the CommandAPI will throw an exception when receiving malformed packets", + "or if it tries to send a packet but cannot. If \"true\", these problems will be logged", + "as a warning, which does not include the stacktrace. Additionally, warnings can be hidden", + "by setting silent logs to \"true\"." + }, false + ); + public static final CommentedSection SECTION_MESSAGE = new CommentedSection( new String[]{ "Messages",