From bd7e36e38c4d4f5c3aa588aba8b0a3d5020164ab Mon Sep 17 00:00:00 2001 From: creeper123123321 Date: Sun, 21 Apr 2019 18:56:01 -0300 Subject: [PATCH 1/3] Check SessionHandler type before getting knownChannels --- .../handlers/VelocityServerHandler.java | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java b/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java index c5931e566..854f686c9 100644 --- a/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java +++ b/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java @@ -34,6 +34,7 @@ public class VelocityServerHandler { private static Method getMinecraftConnection; private static Method getNextProtocolVersion; private static Method getKnownChannels; + private static Class clientPlaySessionHandler; static { try { @@ -45,7 +46,8 @@ public class VelocityServerHandler { .getDeclaredMethod("getMinecraftConnection"); getNextProtocolVersion = Class.forName("com.velocitypowered.proxy.connection.MinecraftConnection") .getDeclaredMethod("getNextProtocolVersion"); - getKnownChannels = Class.forName("com.velocitypowered.proxy.connection.client.ClientPlaySessionHandler") + clientPlaySessionHandler = Class.forName("com.velocitypowered.proxy.connection.client.ClientPlaySessionHandler"); + getKnownChannels = clientPlaySessionHandler .getDeclaredMethod("getKnownChannels"); } catch (NoSuchMethodException | ClassNotFoundException e) { e.printStackTrace(); @@ -144,34 +146,36 @@ public class VelocityServerHandler { pipeline.add(ProtocolRegistry.getBaseProtocol(protocolId)); // Workaround 1.13 server change - Set knownChannels = (Set) getKnownChannels.invoke( - ReflectionUtil.invoke( - getMinecraftConnection.invoke(e.getPlayer()), - "getSessionHandler" - ) + Object sessionHandler = ReflectionUtil.invoke( + getMinecraftConnection.invoke(e.getPlayer()), + "getSessionHandler" ); - if (previousServerProtocol != -1) { - int id1_13 = ProtocolVersion.MINECRAFT_1_13.getProtocol(); - if (previousServerProtocol < id1_13 && protocolId >= id1_13) { - ArrayList newChannels = new ArrayList<>(); - for (String oldChannel : knownChannels) { - String transformed = InventoryPackets.getNewPluginChannelId(oldChannel); - if (transformed != null) { - newChannels.add(transformed); + System.out.println(sessionHandler); + if (clientPlaySessionHandler.isInstance(sessionHandler)) { // It may be InitialConnectSessionHandler on the first server connection + Set knownChannels = (Set) getKnownChannels.invoke(sessionHandler); + if (previousServerProtocol != -1) { + int id1_13 = ProtocolVersion.MINECRAFT_1_13.getProtocol(); + if (previousServerProtocol < id1_13 && protocolId >= id1_13) { + ArrayList newChannels = new ArrayList<>(); + for (String oldChannel : knownChannels) { + String transformed = InventoryPackets.getNewPluginChannelId(oldChannel); + if (transformed != null) { + newChannels.add(transformed); + } } - } - knownChannels.clear(); - knownChannels.addAll(newChannels); - } else if (previousServerProtocol >= id1_13 && protocolId < id1_13) { - ArrayList newChannels = new ArrayList<>(); - for (String oldChannel : knownChannels) { - String transformed = InventoryPackets.getOldPluginChannelId(oldChannel); - if (transformed != null) { - newChannels.add(transformed); + knownChannels.clear(); + knownChannels.addAll(newChannels); + } else if (previousServerProtocol >= id1_13 && protocolId < id1_13) { + ArrayList newChannels = new ArrayList<>(); + for (String oldChannel : knownChannels) { + String transformed = InventoryPackets.getOldPluginChannelId(oldChannel); + if (transformed != null) { + newChannels.add(transformed); + } } + knownChannels.clear(); + knownChannels.addAll(newChannels); } - knownChannels.clear(); - knownChannels.addAll(newChannels); } } From 2cadde118707fbffe2be006dc16160b6e7a0e0f9 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Sun, 21 Apr 2019 18:57:11 -0300 Subject: [PATCH 2/3] Remove debug --- .../ViaVersion/velocity/handlers/VelocityServerHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java b/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java index 854f686c9..d00d2213d 100644 --- a/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java +++ b/velocity/src/main/java/us/myles/ViaVersion/velocity/handlers/VelocityServerHandler.java @@ -150,7 +150,7 @@ public class VelocityServerHandler { getMinecraftConnection.invoke(e.getPlayer()), "getSessionHandler" ); - System.out.println(sessionHandler); + if (clientPlaySessionHandler.isInstance(sessionHandler)) { // It may be InitialConnectSessionHandler on the first server connection Set knownChannels = (Set) getKnownChannels.invoke(sessionHandler); if (previousServerProtocol != -1) { From d699000dc3a8f6ba37dbde9591e923bdc75ae8ec Mon Sep 17 00:00:00 2001 From: Myles Date: Mon, 22 Apr 2019 18:56:05 +0100 Subject: [PATCH 3/3] Default to 'packet' blockconnection method --- .../us/myles/ViaVersion/bukkit/platform/BukkitViaConfig.java | 2 +- common/src/main/resources/assets/viaversion/config.yml | 4 ++-- .../us/myles/ViaVersion/sponge/platform/SpongeViaConfig.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaConfig.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaConfig.java index cd2f7b690..a07d09fb6 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaConfig.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaConfig.java @@ -227,7 +227,7 @@ public class BukkitViaConfig extends Config implements ViaVersionConfig { @Override public String getBlockConnectionMethod() { - return getString("blockconnection-method", "world"); + return getString("blockconnection-method", "packet"); } @Override diff --git a/common/src/main/resources/assets/viaversion/config.yml b/common/src/main/resources/assets/viaversion/config.yml index bd25bdd30..b7464d67f 100644 --- a/common/src/main/resources/assets/viaversion/config.yml +++ b/common/src/main/resources/assets/viaversion/config.yml @@ -121,8 +121,8 @@ fix-low-snow-collision: false # # Enable serverside block-connections for 1.13+ clients serverside-blockconnections: false -# Sets the method for the block connections (world for world-level or packet for packet-level) -blockconnection-method: world +# Sets the method for the block connections (world for highly experimental (USE AT OWN RISK) world-level or packet for packet-level) +blockconnection-method: packet # When activated, only the most important blocks are stored in the blockstorage. (fences, glass panes etc. won't connect to solid blocks) reduce-blockstorage-memory: false # When activated with serverside-blockconnections, flower parts with blocks above will be sent as stems diff --git a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaConfig.java b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaConfig.java index 59fcbffcc..d51152096 100644 --- a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaConfig.java +++ b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeViaConfig.java @@ -233,7 +233,7 @@ public class SpongeViaConfig extends Config implements ViaVersionConfig { @Override public String getBlockConnectionMethod() { - return getString("blockconnection-method", "world"); + return getString("blockconnection-method", "packet"); } @Override