From 1dc76141adc6f17b5cc2c91614d0ddcf55175f86 Mon Sep 17 00:00:00 2001 From: Vincent <79623093+V1nc3ntWasTaken@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:44:17 -0500 Subject: [PATCH 1/6] Added a config option to remove the unsecured chat messages banner --- .../java/me/doclic/noencryption/NoEncryption.java | 2 ++ .../compatibility/CompatiblePacketListener.java | 15 +++++++++++++++ src/main/resources/config.yml | 2 ++ 3 files changed, 19 insertions(+) create mode 100644 src/main/resources/config.yml diff --git a/src/main/java/me/doclic/noencryption/NoEncryption.java b/src/main/java/me/doclic/noencryption/NoEncryption.java index 6d0687e..edc8492 100644 --- a/src/main/java/me/doclic/noencryption/NoEncryption.java +++ b/src/main/java/me/doclic/noencryption/NoEncryption.java @@ -12,6 +12,8 @@ public final class NoEncryption extends JavaPlugin { public void onEnable() { plugin = this; + saveDefaultConfig(); + Compatibility.initialize(plugin); if (Compatibility.checkCompatibility()) { diff --git a/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java b/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java index bad3c54..41bf50c 100644 --- a/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java +++ b/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java @@ -2,10 +2,12 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; +import me.doclic.noencryption.NoEncryption; import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.network.chat.*; import net.minecraft.network.protocol.game.ClientboundPlayerChatHeaderPacket; import net.minecraft.network.protocol.game.ClientboundPlayerChatPacket; +import net.minecraft.network.protocol.game.ClientboundServerDataPacket; import net.minecraft.network.protocol.game.ClientboundSystemChatPacket; import java.util.Optional; @@ -63,6 +65,19 @@ public Object writePacket(ChannelHandlerContext channelHandlerContext, Object pa ); } + if (packet instanceof final ClientboundServerDataPacket clientboundServerDataPacket) { + if (NoEncryption.getPlugin().getConfig().getBoolean("disable-unsecure-banner", true)) { + // recreate a new packet + return new ClientboundServerDataPacket( + clientboundServerDataPacket.getMotd().orElse(null), + clientboundServerDataPacket.getIconBase64().orElse(null), + clientboundServerDataPacket.previewsChat(), + true + ); + } + } + + return packet; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..db95f52 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,2 @@ +# Disables the unsecured message banner for users joining the server +disable-unsecure-banner: true \ No newline at end of file From 6d5a5ac9554271b3214486bc360f05e4b9dc646f Mon Sep 17 00:00:00 2001 From: Vincent <79623093+V1nc3ntWasTaken@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:14:25 -0500 Subject: [PATCH 2/6] Added a plugin readiness system --- .../me/doclic/noencryption/NoEncryption.java | 13 ++- .../doclic/noencryption/PlayerListener.java | 42 ++++--- .../CompatiblePacketListener.java | 105 +++++++++--------- .../compatibility/CompatiblePlayer.java | 11 +- 4 files changed, 101 insertions(+), 70 deletions(-) diff --git a/src/main/java/me/doclic/noencryption/NoEncryption.java b/src/main/java/me/doclic/noencryption/NoEncryption.java index edc8492..7e2b2b1 100644 --- a/src/main/java/me/doclic/noencryption/NoEncryption.java +++ b/src/main/java/me/doclic/noencryption/NoEncryption.java @@ -7,6 +7,7 @@ public final class NoEncryption extends JavaPlugin { static NoEncryption plugin; + static boolean ready; @Override public void onEnable() { @@ -25,17 +26,27 @@ public void onEnable() { getLogger().info("If you used /reload to update NoEncryption, your players need to"); getLogger().info("disconnect and join back"); + ready = true; + } else { getLogger().severe("Failed to setup NoEncryption's compatibility!"); getLogger().severe("Your server version (" + Compatibility.getBukkitVersion() + ") is not compatible with this plugin!"); - Bukkit.getPluginManager().disablePlugin(this); + ready = false; } } public static NoEncryption getPlugin() { + return plugin; + + } + + public static boolean isReady() { + + return ready; + } } diff --git a/src/main/java/me/doclic/noencryption/PlayerListener.java b/src/main/java/me/doclic/noencryption/PlayerListener.java index 24d0914..0cf2d0f 100644 --- a/src/main/java/me/doclic/noencryption/PlayerListener.java +++ b/src/main/java/me/doclic/noencryption/PlayerListener.java @@ -15,36 +15,44 @@ public class PlayerListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerJoin (PlayerJoinEvent e) { - final Player player = e.getPlayer(); - final ChannelPipeline pipeline = new CompatiblePlayer().getChannel(player).pipeline(); - pipeline.addBefore("packet_handler", "no_encryption", new ChannelDuplexHandler() { + if (NoEncryption.isReady()) { - @Override - public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception { + final Player player = e.getPlayer(); + final ChannelPipeline pipeline = new CompatiblePlayer().getChannel(player).pipeline(); + pipeline.addBefore("packet_handler", "no_encryption", new ChannelDuplexHandler() { - Object newPacket = new CompatiblePacketListener().readPacket(channelHandlerContext, packet); - super.channelRead(channelHandlerContext, newPacket); + @Override + public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception { - } + Object newPacket = new CompatiblePacketListener().readPacket(channelHandlerContext, packet); + super.channelRead(channelHandlerContext, newPacket); - @Override - public void write(ChannelHandlerContext channelHandlerContext, Object packet, ChannelPromise promise) throws Exception { + } - Object newPacket = new CompatiblePacketListener().writePacket(channelHandlerContext, packet, promise); - super.write(channelHandlerContext, newPacket, promise); + @Override + public void write(ChannelHandlerContext channelHandlerContext, Object packet, ChannelPromise promise) throws Exception { - } + Object newPacket = new CompatiblePacketListener().writePacket(channelHandlerContext, packet, promise); + super.write(channelHandlerContext, newPacket, promise); - }); + } + + }); + + } } @EventHandler(priority = EventPriority.LOWEST) public void onPlayerQuit (PlayerQuitEvent e) { - final Player player = e.getPlayer(); - final Channel channel = new CompatiblePlayer().getChannel(player); - channel.eventLoop().submit(() -> channel.pipeline().remove("no_encryption")); + if (NoEncryption.isReady()) { + + final Player player = e.getPlayer(); + final Channel channel = new CompatiblePlayer().getChannel(player); + channel.eventLoop().submit(() -> channel.pipeline().remove("no_encryption")); + + } } diff --git a/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java b/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java index 41bf50c..b30e4c0 100644 --- a/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java +++ b/src/main/java/me/doclic/noencryption/compatibility/CompatiblePacketListener.java @@ -18,65 +18,68 @@ public class CompatiblePacketListener { public Object readPacket(ChannelHandlerContext channelHandlerContext, Object packet) { return packet; } public Object writePacket(ChannelHandlerContext channelHandlerContext, Object packet, ChannelPromise promise) { - if (packet instanceof final ClientboundPlayerChatPacket clientboundPlayerChatPacket) { - // Code partially by atenfyr https://github.com/atenfyr - final Optional unsignedContent = clientboundPlayerChatPacket.message().unsignedContent(); - final ChatMessageContent signedContent = clientboundPlayerChatPacket.message().signedContent(); - final SignedMessageBody signedBody = clientboundPlayerChatPacket.message().signedBody(); - final ChatType.BoundNetwork chatType = clientboundPlayerChatPacket.chatType(); + if (NoEncryption.isReady()) { - // recreate a new packet - return new ClientboundPlayerChatPacket( - new PlayerChatMessage( - new SignedMessageHeader( - new MessageSignature(new byte[0]), - new UUID(0,0)), - new MessageSignature(new byte[0]), - new SignedMessageBody( - new ChatMessageContent( - signedContent.plain(), - signedContent.decorated()), - signedBody.timeStamp(), - 0, - signedBody.lastSeen()), - unsignedContent, - new FilterMask(0) - ), - chatType); - } + if (packet instanceof final ClientboundPlayerChatPacket clientboundPlayerChatPacket) { + // Code partially by atenfyr https://github.com/atenfyr + final Optional unsignedContent = clientboundPlayerChatPacket.message().unsignedContent(); + final ChatMessageContent signedContent = clientboundPlayerChatPacket.message().signedContent(); + final SignedMessageBody signedBody = clientboundPlayerChatPacket.message().signedBody(); + final ChatType.BoundNetwork chatType = clientboundPlayerChatPacket.chatType(); - if (packet instanceof final ClientboundSystemChatPacket clientboundSystemChatPacket) { - if (clientboundSystemChatPacket.content() == null) { - return clientboundSystemChatPacket; - } else { - return new ClientboundSystemChatPacket( - ComponentSerializer.parse(clientboundSystemChatPacket.content()), - clientboundSystemChatPacket.overlay()); + // recreate a new packet + return new ClientboundPlayerChatPacket( + new PlayerChatMessage( + new SignedMessageHeader( + new MessageSignature(new byte[0]), + new UUID(0, 0)), + new MessageSignature(new byte[0]), + new SignedMessageBody( + new ChatMessageContent( + signedContent.plain(), + signedContent.decorated()), + signedBody.timeStamp(), + 0, + signedBody.lastSeen()), + unsignedContent, + new FilterMask(0) + ), + chatType); } - } - if (packet instanceof final ClientboundPlayerChatHeaderPacket clientboundPlayerChatHeaderPacket) { - return new ClientboundPlayerChatHeaderPacket( - new SignedMessageHeader( - new MessageSignature(new byte[0]), - new UUID(0,0)), - new MessageSignature(new byte[0]), - clientboundPlayerChatHeaderPacket.bodyDigest() - ); - } + if (packet instanceof final ClientboundSystemChatPacket clientboundSystemChatPacket) { + if (clientboundSystemChatPacket.content() == null) { + return clientboundSystemChatPacket; + } else { + return new ClientboundSystemChatPacket( + ComponentSerializer.parse(clientboundSystemChatPacket.content()), + clientboundSystemChatPacket.overlay()); + } + } - if (packet instanceof final ClientboundServerDataPacket clientboundServerDataPacket) { - if (NoEncryption.getPlugin().getConfig().getBoolean("disable-unsecure-banner", true)) { - // recreate a new packet - return new ClientboundServerDataPacket( - clientboundServerDataPacket.getMotd().orElse(null), - clientboundServerDataPacket.getIconBase64().orElse(null), - clientboundServerDataPacket.previewsChat(), - true + if (packet instanceof final ClientboundPlayerChatHeaderPacket clientboundPlayerChatHeaderPacket) { + return new ClientboundPlayerChatHeaderPacket( + new SignedMessageHeader( + new MessageSignature(new byte[0]), + new UUID(0, 0)), + new MessageSignature(new byte[0]), + clientboundPlayerChatHeaderPacket.bodyDigest() ); } - } + if (packet instanceof final ClientboundServerDataPacket clientboundServerDataPacket) { + if (NoEncryption.getPlugin().getConfig().getBoolean("disable-unsecure-banner", true)) { + // recreate a new packet + return new ClientboundServerDataPacket( + clientboundServerDataPacket.getMotd().orElse(null), + clientboundServerDataPacket.getIconBase64().orElse(null), + clientboundServerDataPacket.previewsChat(), + true + ); + } + } + + } return packet; diff --git a/src/main/java/me/doclic/noencryption/compatibility/CompatiblePlayer.java b/src/main/java/me/doclic/noencryption/compatibility/CompatiblePlayer.java index acf233b..40571af 100644 --- a/src/main/java/me/doclic/noencryption/compatibility/CompatiblePlayer.java +++ b/src/main/java/me/doclic/noencryption/compatibility/CompatiblePlayer.java @@ -1,6 +1,7 @@ package me.doclic.noencryption.compatibility; import io.netty.channel.Channel; +import me.doclic.noencryption.NoEncryption; import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -8,7 +9,15 @@ public class CompatiblePlayer { public Channel getChannel(Player player) { - return ((CraftPlayer) player).getHandle().connection.connection.channel; + if (NoEncryption.isReady()) { + + return ((CraftPlayer) player).getHandle().connection.connection.channel; + + } else { + + return null; + + } } From 372c2705ddbac746e6e01132d9e07b8b04de1ed5 Mon Sep 17 00:00:00 2001 From: Vincent <79623093+V1nc3ntWasTaken@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:24:36 -0500 Subject: [PATCH 3/6] Added a plugin auto-downloader for incompatible installations --- .../me/doclic/noencryption/NoEncryption.java | 37 +++++++ .../noencryption/VersionDownloader.java | 96 +++++++++++++++++++ .../compatibility/Compatibility.java | 11 +++ 3 files changed, 144 insertions(+) create mode 100644 src/main/java/me/doclic/noencryption/VersionDownloader.java diff --git a/src/main/java/me/doclic/noencryption/NoEncryption.java b/src/main/java/me/doclic/noencryption/NoEncryption.java index 7e2b2b1..2719104 100644 --- a/src/main/java/me/doclic/noencryption/NoEncryption.java +++ b/src/main/java/me/doclic/noencryption/NoEncryption.java @@ -4,6 +4,10 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + public final class NoEncryption extends JavaPlugin { static NoEncryption plugin; @@ -34,6 +38,32 @@ public void onEnable() { getLogger().severe("Your server version (" + Compatibility.getBukkitVersion() + ") is not compatible with this plugin!"); ready = false; + + VersionDownloader.downloadVersion(); + + getLogger().info("Downloading the compatible version from https://github.com/V1nc3ntWasTaken/NoEncryption ..."); + getLogger().info("Do not restart the server until the download success message is shown to prevent data loss"); + + } + + } + + public static File getJARFile() { + + try { + + JavaPlugin plugin = (JavaPlugin) getPlugin().getServer().getPluginManager().getPlugin(NoEncryption.getPlugin().getName()); + Method getFileMethod = JavaPlugin.class.getDeclaredMethod("getFile"); + getFileMethod.setAccessible(true); + + return (File) getFileMethod.invoke(plugin); + + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + + e.printStackTrace(); + + return new File("plugins/NoEncryption-v" + getPlugin().getDescription().getVersion() + "--" + Compatibility.getCompatibleVersion() + "_only.jar"); + } } @@ -49,4 +79,11 @@ public static boolean isReady() { return ready; } + + @Override + public void onDisable() { + + VersionDownloader.shutdown(); + + } } diff --git a/src/main/java/me/doclic/noencryption/VersionDownloader.java b/src/main/java/me/doclic/noencryption/VersionDownloader.java new file mode 100644 index 0000000..3167a02 --- /dev/null +++ b/src/main/java/me/doclic/noencryption/VersionDownloader.java @@ -0,0 +1,96 @@ +package me.doclic.noencryption; + +import me.doclic.noencryption.compatibility.Compatibility; +import org.bukkit.Bukkit; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; + +public class VersionDownloader { + + protected static NoEncryption plugin; + + protected static boolean deleteOnShutdown; + + public static void initialize(NoEncryption plugin) { + + VersionDownloader.plugin = plugin; + + } + + public static void downloadVersion() { + + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + + try { + + File saveLocation = new File("plugins/" + plugin.getDescription().getName() + "-v" + plugin.getDescription().getVersion() + "--" + Compatibility.getFormattedBukkitVersion() + "_only.jar"); + String url = "https://github.com/V1nc3ntWasTaken/NoEncryption/releases/download/" + plugin.getDescription().getVersion() + "/" + plugin.getDescription().getName() + "-v" + plugin.getDescription().getVersion() + "--" + Compatibility.getFormattedBukkitVersion() + "_only.jar"; + + ReadableByteChannel byteChannel = Channels.newChannel(new URL(url).openStream()); + FileOutputStream outStream = new FileOutputStream(saveLocation); + FileChannel channel = outStream.getChannel(); + + channel.transferFrom(byteChannel, 0, Long.MAX_VALUE); + + doneDownloading(); + + } catch (IOException e) { + + plugin.getLogger().severe("Failed to reach URL for download."); + e.printStackTrace(); + + } + + }); + + } + + private static void doneDownloading() { + setDeleteOnShutdown(); + + plugin.getLogger().info("plugins/" + plugin.getDescription().getName() + "-v" + plugin.getDescription().getVersion() + "--" + Compatibility.getFormattedBukkitVersion() + "_only.jar" + " successfully downloaded"); + plugin.getLogger().info(NoEncryption.getJARFile().getName() + " (current version) will be deleted automatically upon restart"); + plugin.getLogger().info("It is now safe to restart your server"); + + } + + private static void setDeleteOnShutdown() { + + deleteOnShutdown = true; + + } + + public static boolean getDeleteOnShutdown() { + + return deleteOnShutdown; + + } + + public static void shutdown() { + + try { + + if (getDeleteOnShutdown()) { + + if (NoEncryption.getJARFile().exists() && !NoEncryption.getJARFile().delete()) { + throw new IOException(); + } + + } + + } catch (IOException e) { + + plugin.getLogger().severe("Unable to delete " + NoEncryption.getJARFile().getName() + ". Manual deletion is required"); + e.printStackTrace(); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/me/doclic/noencryption/compatibility/Compatibility.java b/src/main/java/me/doclic/noencryption/compatibility/Compatibility.java index b1f8ff3..9005ca2 100644 --- a/src/main/java/me/doclic/noencryption/compatibility/Compatibility.java +++ b/src/main/java/me/doclic/noencryption/compatibility/Compatibility.java @@ -9,6 +9,7 @@ public class Compatibility { protected static String compatibleVersion; protected static String bukkitVersion; + protected static String formattedBukkitVersion; protected static String minecraftVersion; protected static boolean compatible; @@ -21,10 +22,12 @@ public static void initialize(NoEncryption plugin) { try { bukkitVersion = Bukkit.getBukkitVersion(); // Gets the server version displayable to a user + formattedBukkitVersion = bukkitVersion.split("-")[0]; minecraftVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; // Gets the server version } catch (ArrayIndexOutOfBoundsException exception) { // This should never happen bukkitVersion = null; + formattedBukkitVersion = null; minecraftVersion = null; } @@ -33,6 +36,10 @@ public static void initialize(NoEncryption plugin) { compatible = bukkitVersion.equals(compatibleVersion); } + public static String getCompatibleVersion() { + return compatibleVersion; + } + public static boolean checkCompatibility() { return compatible; } @@ -40,4 +47,8 @@ public static boolean checkCompatibility() { public static String getBukkitVersion() { return bukkitVersion; } + + public static String getFormattedBukkitVersion() { + return formattedBukkitVersion; + } } From b23986737c3dd4319b1cb9553a58edefa0352e7e Mon Sep 17 00:00:00 2001 From: Vincent <79623093+V1nc3ntWasTaken@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:29:53 -0500 Subject: [PATCH 4/6] Added some support for /reload ers --- .../me/doclic/noencryption/NoEncryption.java | 8 +++ .../doclic/noencryption/PlayerListener.java | 49 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/main/java/me/doclic/noencryption/NoEncryption.java b/src/main/java/me/doclic/noencryption/NoEncryption.java index 2719104..74a2839 100644 --- a/src/main/java/me/doclic/noencryption/NoEncryption.java +++ b/src/main/java/me/doclic/noencryption/NoEncryption.java @@ -19,6 +19,8 @@ public void onEnable() { saveDefaultConfig(); + PlayerListener.startup(); + Compatibility.initialize(plugin); if (Compatibility.checkCompatibility()) { @@ -83,6 +85,12 @@ public static boolean isReady() { @Override public void onDisable() { + if (NoEncryption.isReady()) { + + PlayerListener.shutdown(); + + } + VersionDownloader.shutdown(); } diff --git a/src/main/java/me/doclic/noencryption/PlayerListener.java b/src/main/java/me/doclic/noencryption/PlayerListener.java index 0cf2d0f..ea186b0 100644 --- a/src/main/java/me/doclic/noencryption/PlayerListener.java +++ b/src/main/java/me/doclic/noencryption/PlayerListener.java @@ -3,6 +3,7 @@ import io.netty.channel.*; import me.doclic.noencryption.compatibility.CompatiblePacketListener; import me.doclic.noencryption.compatibility.CompatiblePlayer; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -12,6 +13,39 @@ public class PlayerListener implements Listener { + public static void startup() { + + if (NoEncryption.isReady()) { + + for (final Player player : Bukkit.getOnlinePlayers()) { + + final ChannelPipeline pipeline = new CompatiblePlayer().getChannel(player).pipeline(); + pipeline.addBefore("packet_handler", player.getUniqueId().toString(), new ChannelDuplexHandler() { + + @Override + public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception { + + Object newPacket = new CompatiblePacketListener().readPacket(channelHandlerContext, packet); + super.channelRead(channelHandlerContext, newPacket); + + } + + @Override + public void write(ChannelHandlerContext channelHandlerContext, Object packet, ChannelPromise promise) throws Exception { + + Object newPacket = new CompatiblePacketListener().writePacket(channelHandlerContext, packet, promise); + super.write(channelHandlerContext, newPacket, promise); + + } + + }); + + } + + } + + } + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerJoin (PlayerJoinEvent e) { @@ -56,4 +90,19 @@ public void onPlayerQuit (PlayerQuitEvent e) { } + public static void shutdown() { + + if (NoEncryption.isReady()) { + + for (final Player player : Bukkit.getOnlinePlayers()) { + + final Channel channel = new CompatiblePlayer().getChannel(player); + channel.eventLoop().submit(() -> channel.pipeline().remove(player.getUniqueId().toString())); + + } + + } + + } + } From 2bb0e8a77e5e626e8f11b5edc076d34f9cb6217f Mon Sep 17 00:00:00 2001 From: Vincent <79623093+V1nc3ntWasTaken@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:31:33 -0500 Subject: [PATCH 5/6] Changed the packet channel name to be more legible --- .../me/doclic/noencryption/PlayerListener.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/doclic/noencryption/PlayerListener.java b/src/main/java/me/doclic/noencryption/PlayerListener.java index ea186b0..ab0ec92 100644 --- a/src/main/java/me/doclic/noencryption/PlayerListener.java +++ b/src/main/java/me/doclic/noencryption/PlayerListener.java @@ -1,8 +1,11 @@ package me.doclic.noencryption; -import io.netty.channel.*; -import me.doclic.noencryption.compatibility.CompatiblePacketListener; -import me.doclic.noencryption.compatibility.CompatiblePlayer; +import io.netty.channel.Channel; +import io.netty.channel.ChannelDuplexHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPromise; +import me.doclic.noencryption.compatibility.*; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -20,7 +23,7 @@ public static void startup() { for (final Player player : Bukkit.getOnlinePlayers()) { final ChannelPipeline pipeline = new CompatiblePlayer().getChannel(player).pipeline(); - pipeline.addBefore("packet_handler", player.getUniqueId().toString(), new ChannelDuplexHandler() { + pipeline.addBefore("packet_handler", "no_encryption_interceptor", new ChannelDuplexHandler() { @Override public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception { @@ -53,7 +56,7 @@ public void onPlayerJoin (PlayerJoinEvent e) { final Player player = e.getPlayer(); final ChannelPipeline pipeline = new CompatiblePlayer().getChannel(player).pipeline(); - pipeline.addBefore("packet_handler", "no_encryption", new ChannelDuplexHandler() { + pipeline.addBefore("packet_handler", "no_encryption_interceptor", new ChannelDuplexHandler() { @Override public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception { @@ -84,7 +87,7 @@ public void onPlayerQuit (PlayerQuitEvent e) { final Player player = e.getPlayer(); final Channel channel = new CompatiblePlayer().getChannel(player); - channel.eventLoop().submit(() -> channel.pipeline().remove("no_encryption")); + channel.eventLoop().submit(() -> channel.pipeline().remove("no_encryption_interceptor")); } @@ -97,7 +100,7 @@ public static void shutdown() { for (final Player player : Bukkit.getOnlinePlayers()) { final Channel channel = new CompatiblePlayer().getChannel(player); - channel.eventLoop().submit(() -> channel.pipeline().remove(player.getUniqueId().toString())); + channel.eventLoop().submit(() -> channel.pipeline().remove("no_encryption_interceptor")); } From 839183c81e2df0677710b9825cd27c5f49c4f3d6 Mon Sep 17 00:00:00 2001 From: Vincent <79623093+V1nc3ntWasTaken@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:58:15 -0500 Subject: [PATCH 6/6] Bumped version for NoEncryption v4.0 release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index eb6abfe..d4c2632 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.doclic NoEncryption - 3.2 + 4.0 jar NoEncryption