From 1af7f1efdef25866909e746c5f127eacfb8c6e58 Mon Sep 17 00:00:00 2001 From: Dylan Keir Date: Tue, 28 Jun 2022 03:29:13 +0100 Subject: [PATCH] 2.6.0, too many changes to list, will be in release readme --- build.gradle | 4 ++-- .../tcpshield/bukkit/BukkitConfig.java | 3 ++- .../tcpshield/bukkit/TCPShieldBukkit.java | 16 +++++++++------- .../tcpshield/bukkit/paper/BukkitPaper.java | 1 - .../paper/handler/PaperHandshakeHandler.java | 3 ++- .../bukkit/paper/handler/PaperPacket.java | 1 - .../bukkit/paper/handler/PaperPlayer.java | 1 - .../bukkit/protocollib/BukkitProtocolLib.java | 1 - .../handler/ProtocolLibHandshakeHandler.java | 1 - .../protocollib/handler/ProtocolLibPacket.java | 1 - .../protocollib/handler/ProtocolLibPlayer.java | 9 ++++----- .../tcpshield/provider/ConfigProvider.java | 18 +++++++++++++++--- .../tcpshield/velocity/VelocityConfig.java | 3 ++- .../handler/VelocityHandshakeHandler.java | 4 ++++ src/main/resources/bungee.yml | 2 +- src/main/resources/config.toml | 3 +++ src/main/resources/config.yml | 3 +++ src/main/resources/plugin.yml | 2 +- src/main/resources/velocity-plugin.json | 2 +- 19 files changed, 49 insertions(+), 29 deletions(-) diff --git a/build.gradle b/build.gradle index baa2522..3614d57 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ plugins { // -- // Variables // -- -version = '2.5.6' +version = '2.6.0' group = 'net.tcpshield.tcpshield' archivesBaseName = 'TCPShield' @@ -95,7 +95,7 @@ repositories { dependencies { // Bukkit compileOnly group: 'org.spigotmc', name: 'spigot-api', version: '1.11-R0.1-SNAPSHOT' - compileOnly group: 'com.comphenix.protocol', name: 'ProtocolLib', version: '4.4.0' + compileOnly group: 'com.comphenix.protocol', name: 'ProtocolLib', version: '5.0.0-SNAPSHOT' // Paper compileOnly group: 'com.destroystokyo.paper', name: 'paper-api', version: '1.15.2-R0.1-SNAPSHOT' diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/BukkitConfig.java b/src/main/java/net/tcpshield/tcpshield/bukkit/BukkitConfig.java index 1ed432e..7cfbce0 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/BukkitConfig.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/BukkitConfig.java @@ -66,12 +66,13 @@ protected void load() throws ConfigLoadException { try { loadedConfiguration = YamlConfiguration.loadConfiguration(configFile); - checkNodes("only-allow-proxy-connections", "timestamp-validation", "debug-mode"); + checkNodes("only-allow-proxy-connections", "timestamp-validation", "debug-mode", "enable-geyser-support", "prefer-protocollib"); this.onlyProxy = loadedConfiguration.getBoolean("only-allow-proxy-connections"); this.timestampValidationMode = loadedConfiguration.getString("timestamp-validation"); this.doDebug = loadedConfiguration.getBoolean("debug-mode"); this.geyser = loadedConfiguration.getBoolean("enable-geyser-support"); + this.preferProtocolLib = loadedConfiguration.getBoolean("prefer-protocollib"); } catch (Exception e) { throw new ConfigLoadException(e); } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java b/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java index 0e5ef64..e439db7 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/TCPShieldBukkit.java @@ -29,15 +29,16 @@ public void onEnable() { debugger = Debugger.createDebugger(this); packetHandler = new TCPShieldPacketHandler(this); - if (BukkitImplProvider.hasPaperEvent()) + // check force plib option -> paper -> plib -> error + if (this.configProvider.preferProtocolLib() && getServer().getPluginManager().getPlugin("ProtocolLib") != null) { + bukkitImpl = new BukkitProtocolLib(this); + } else if (BukkitImplProvider.hasPaperEvent()) { bukkitImpl = new BukkitPaper(this); - else { - if (getServer().getPluginManager().getPlugin("ProtocolLib") == null) { - getLogger().severe("TCPShield not loading because ProtocolLib is not installed. Either use Paper to enable native compatibility or install ProtocolLib."); - return; - } - + } else if (getServer().getPluginManager().getPlugin("ProtocolLib") != null) { bukkitImpl = new BukkitProtocolLib(this); + } else { + getLogger().severe("TCPShield not loading because ProtocolLib is not installed. Either use Paper to enable native compatibility or install ProtocolLib."); + return; } bukkitImpl.load(); @@ -48,6 +49,7 @@ public void onEnable() { } catch (Exception e) { throw new InitializationException(e); } + } diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/BukkitPaper.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/BukkitPaper.java index a6a40bc..ed8ec23 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/BukkitPaper.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/BukkitPaper.java @@ -13,7 +13,6 @@ public BukkitPaper(TCPShieldBukkit bukkitPlugin) { super(bukkitPlugin); } - @Override public void load() { PaperHandshakeHandler packetHandler = new PaperHandshakeHandler(this); diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperHandshakeHandler.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperHandshakeHandler.java index 5615db8..6905b28 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperHandshakeHandler.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperHandshakeHandler.java @@ -19,7 +19,6 @@ public PaperHandshakeHandler(BukkitImplProvider bukkitProvider) { this.bukkitProvider = bukkitProvider; } - @EventHandler(priority = EventPriority.LOWEST) public void onHandshake(PlayerHandshakeEvent e) { PaperPacket packet = new PaperPacket(e); @@ -36,6 +35,8 @@ public void onHandshake(PlayerHandshakeEvent e) { public void onServerPing(PaperServerListPingEvent e) { if (e.getClient().isLegacy()) e.setCancelled(true); + + } } \ No newline at end of file diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPacket.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPacket.java index bc5f48e..568d3a7 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPacket.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPacket.java @@ -15,7 +15,6 @@ public PaperPacket(PlayerHandshakeEvent handshakeEvent) { this.handshakeEvent = handshakeEvent; } - @Override public String getPayloadString() { return handshakeEvent.getOriginalHandshake(); diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPlayer.java b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPlayer.java index fc770f8..df7925a 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPlayer.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/paper/handler/PaperPlayer.java @@ -18,7 +18,6 @@ public PaperPlayer(PlayerHandshakeEvent handshakeEvent) { this.handshakeEvent = handshakeEvent; } - /** * Trys to grab the UUID of the handshake * @return If found, the corrosponding uuid, if not, unknown diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/BukkitProtocolLib.java b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/BukkitProtocolLib.java index b322d64..e8c2ef2 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/BukkitProtocolLib.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/BukkitProtocolLib.java @@ -13,7 +13,6 @@ public BukkitProtocolLib(TCPShieldBukkit bukkitPlugin) { super(bukkitPlugin); } - @Override public void load() { ProtocolLibHandshakeHandler packetHandler = new ProtocolLibHandshakeHandler(this); diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibHandshakeHandler.java b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibHandshakeHandler.java index 6499a18..c2c1416 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibHandshakeHandler.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibHandshakeHandler.java @@ -19,7 +19,6 @@ public ProtocolLibHandshakeHandler(BukkitImplProvider bukkitProvider) { this.bukkitProvider = bukkitProvider; } - @Override public void onPacketReceiving(PacketEvent e) { ProtocolLibPacket packet = new ProtocolLibPacket(e.getPacket()); diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPacket.java b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPacket.java index c72f14f..04573d3 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPacket.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPacket.java @@ -17,7 +17,6 @@ public ProtocolLibPacket(PacketContainer packetContainer) { this.rawPayload = packetContainer.getStrings().read(0); } - @Override public String getPayloadString() { return rawPayload; diff --git a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPlayer.java b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPlayer.java index 79e89fd..4bdc59f 100644 --- a/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPlayer.java +++ b/src/main/java/net/tcpshield/tcpshield/bukkit/protocollib/handler/ProtocolLibPlayer.java @@ -1,7 +1,7 @@ package net.tcpshield.tcpshield.bukkit.protocollib.handler; -import com.comphenix.protocol.injector.server.SocketInjector; -import com.comphenix.protocol.injector.server.TemporaryPlayerFactory; +import com.comphenix.protocol.injector.temporary.MinimalInjector; +import com.comphenix.protocol.injector.temporary.TemporaryPlayerFactory; import net.tcpshield.tcpshield.provider.PlayerProvider; import net.tcpshield.tcpshield.util.ReflectionUtil; import net.tcpshield.tcpshield.util.exception.manipulate.PlayerManipulationException; @@ -34,7 +34,6 @@ public class ProtocolLibPlayer implements PlayerProvider { } } - private final Player player; private String ip; @@ -72,13 +71,13 @@ public void setIP(InetSocketAddress ip) throws PlayerManipulationException { try { this.ip = ip.getAddress().getHostAddress(); - SocketInjector ignored = TemporaryPlayerFactory.getInjectorFromPlayer(player); + MinimalInjector ignored = TemporaryPlayerFactory.getInjectorFromPlayer(player); Object injector = ReflectionUtil.getObjectInPrivateField(ignored, "injector"); Object networkManager = ReflectionUtil.getObjectInPrivateField(injector, "networkManager"); ReflectionUtil.setFinalField(networkManager, ReflectionUtil.searchFieldByClass(networkManager.getClass(), SocketAddress.class), ip); - Object channel = ReflectionUtil.getObjectInPrivateField(injector, "originalChannel"); + Object channel = ReflectionUtil.getObjectInPrivateField(injector, "wrappedChannel"); ReflectionUtil.setFinalField(channel, ReflectionUtil.getDeclaredField(abstractChannelClass, "remoteAddress"), ip); } catch (Exception e) { throw new PlayerManipulationException(e); diff --git a/src/main/java/net/tcpshield/tcpshield/provider/ConfigProvider.java b/src/main/java/net/tcpshield/tcpshield/provider/ConfigProvider.java index 3370939..85c35be 100644 --- a/src/main/java/net/tcpshield/tcpshield/provider/ConfigProvider.java +++ b/src/main/java/net/tcpshield/tcpshield/provider/ConfigProvider.java @@ -19,16 +19,24 @@ public abstract class ConfigProvider { protected String timestampValidationMode = "htpdate"; protected boolean doDebug = true; // Fail-safe default set to true protected boolean geyser = false; + protected boolean velocityHandlePreLoginEvent = true; + + // spigot/paper only option + protected boolean preferProtocolLib; protected File dataFolder; protected File configFile; public boolean isOnlyProxy() { - return onlyProxy; + return this.onlyProxy; } public boolean isGeyser() { - return geyser; + return this.geyser; + } + + public boolean handlePreLoginEvent() { + return this.velocityHandlePreLoginEvent; } public String getTimestampValidationMode() { @@ -36,7 +44,11 @@ public String getTimestampValidationMode() { } public boolean doDebug() { - return doDebug; + return this.doDebug; + } + + public boolean preferProtocolLib() { + return this.preferProtocolLib; } public File getDataFolder() { diff --git a/src/main/java/net/tcpshield/tcpshield/velocity/VelocityConfig.java b/src/main/java/net/tcpshield/tcpshield/velocity/VelocityConfig.java index b87d402..1177b1c 100644 --- a/src/main/java/net/tcpshield/tcpshield/velocity/VelocityConfig.java +++ b/src/main/java/net/tcpshield/tcpshield/velocity/VelocityConfig.java @@ -65,12 +65,13 @@ protected void load() throws ConfigLoadException { try { loadedToml = new Toml().read(configFile); - checkNodes("only-allow-proxy-connections", "timestamp-validation", "debug-mode"); + checkNodes("only-allow-proxy-connections", "timestamp-validation", "debug-mode", "enable-geyser-support", "pre-login-event"); this.onlyProxy = loadedToml.getBoolean("only-allow-proxy-connections"); this.timestampValidationMode = loadedToml.getString("timestamp-validation"); this.doDebug = loadedToml.getBoolean("debug-mode"); this.geyser = loadedToml.getBoolean("enable-geyser-support"); + this.velocityHandlePreLoginEvent = loadedToml.getBoolean("pre-login-event"); } catch (Exception e) { throw new ConfigLoadException(e); } diff --git a/src/main/java/net/tcpshield/tcpshield/velocity/handler/VelocityHandshakeHandler.java b/src/main/java/net/tcpshield/tcpshield/velocity/handler/VelocityHandshakeHandler.java index bdeae64..1efe571 100644 --- a/src/main/java/net/tcpshield/tcpshield/velocity/handler/VelocityHandshakeHandler.java +++ b/src/main/java/net/tcpshield/tcpshield/velocity/handler/VelocityHandshakeHandler.java @@ -25,6 +25,10 @@ public VelocityHandshakeHandler(TCPShieldPlugin plugin) { // issues with the verification process. @Subscribe(order = PostOrder.FIRST) public void onPreLogin(PreLoginEvent e) { + if (!this.plugin.getConfigProvider().handlePreLoginEvent()) { + return; + } + InboundConnection connection = e.getConnection(); handleEvent(connection, "onPreLogin"); } diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml index aef9f77..dae6e73 100644 --- a/src/main/resources/bungee.yml +++ b/src/main/resources/bungee.yml @@ -1,5 +1,5 @@ name: TCPShield -version: 2.5.6 +version: 2.6.0 main: net.tcpshield.tcpshield.bungee.TCPShieldBungee author: https://tcpshield.com softdepends: diff --git a/src/main/resources/config.toml b/src/main/resources/config.toml index 7d416e5..958476c 100644 --- a/src/main/resources/config.toml +++ b/src/main/resources/config.toml @@ -9,3 +9,6 @@ debug-mode = false # Toggle to enable support for Geyser/Floodgate v2 enable-geyser-support = false + +# enable handling handshake on PreLoginEvent +pre-login-event = true diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7d55b0b..324b63b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,3 +9,6 @@ debug-mode: false # Toggle to enable support for Geyser/Floodgate v2 enable-geyser-support: false + +# Spigot/Paper option only, does not affect bungeecord +prefer-protocollib: true diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d2aacc1..7eb0066 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: TCPShield -version: 2.5.6 +version: 2.6.0 main: net.tcpshield.tcpshield.bukkit.TCPShieldBukkit softdepend: - ProtocolLib diff --git a/src/main/resources/velocity-plugin.json b/src/main/resources/velocity-plugin.json index 18f8bb7..99dabfa 100644 --- a/src/main/resources/velocity-plugin.json +++ b/src/main/resources/velocity-plugin.json @@ -1,7 +1,7 @@ { "id": "tcpshield", "name": "TCPShield", - "version": "2.5.6", + "version": "2.6.0", "description": "TCPShield IP parsing capabilities for Velocity", "authors": [ "TCPShield"