From 0388f340ccb9bc5f8a226e1bebeb44b33e09a339 Mon Sep 17 00:00:00 2001 From: Myles Date: Mon, 30 Jan 2017 17:15:47 +0000 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20support=20older=20versions=20if?= =?UTF-8?q?=20protocol=20support=20is=20installed,=20fixes=20#615?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../us/myles/ViaVersion/ViaVersionPlugin.java | 5 +++++ .../java/us/myles/ViaVersion/BungeePlugin.java | 5 +++++ .../ViaVersion/api/platform/ViaPlatform.java | 8 ++++++++ .../ViaVersion/protocols/base/BaseProtocol.java | 15 +++++++++++++-- .../java/us/myles/ViaVersion/SpongePlugin.java | 5 +++++ 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java b/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java index 3e63582aa..fe9d09438 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java @@ -253,4 +253,9 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { return platformSpecific; } + + @Override + public boolean isOldClientsAllowed() { + return !protocolSupport; // Use protocolsupport for older clients + } } diff --git a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java index 6cd7d8daa..2f22fce64 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java +++ b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java @@ -155,6 +155,11 @@ public class BungeePlugin extends Plugin implements ViaPlatform, Listener { return platformSpecific; } + @Override + public boolean isOldClientsAllowed() { + return true; + } + @EventHandler public void onQuit(PlayerDisconnectEvent e) { Via.getManager().removePortedClient(e.getPlayer().getUniqueId()); diff --git a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaPlatform.java b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaPlatform.java index 9001a24f7..d241dbc03 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/platform/ViaPlatform.java +++ b/common/src/main/java/us/myles/ViaVersion/api/platform/ViaPlatform.java @@ -140,4 +140,12 @@ public interface ViaPlatform { * @return The json data */ JsonObject getDump(); + + /** + * Get if older clients are allowed to be used using ViaVersion. + * (Only 1.9 on 1.9.2 server is supported by ViaVersion alone) + * + * @return True if allowed + */ + boolean isOldClientsAllowed(); } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java b/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java index 15d39a3dc..ce709ba23 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/base/BaseProtocol.java @@ -72,7 +72,12 @@ public class BaseProtocol extends Protocol { ProtocolRegistry.SERVER_PROTOCOL = protocolVersion; int protocol = Via.getManager().getProviders().get(VersionProvider.class).getServerProtocol(wrapper.user()); - List> protocols = ProtocolRegistry.getProtocolPath(info.getProtocolVersion(), protocol); + List> protocols = null; + + // Only allow newer clients or (1.9.2 on 1.9.4 server if the server supports it) + if (info.getProtocolVersion() >= protocol || Via.getPlatform().isOldClientsAllowed()) { + protocols = ProtocolRegistry.getProtocolPath(info.getProtocolVersion(), protocol); + } if (protocols != null) { if (protocolVersion != 9999) { @@ -163,7 +168,13 @@ public class BaseProtocol extends Protocol { info.setProtocolVersion(protVer); // Choose the pipe int protocol = Via.getManager().getProviders().get(VersionProvider.class).getServerProtocol(wrapper.user()); - List> protocols = ProtocolRegistry.getProtocolPath(info.getProtocolVersion(), protocol); + List> protocols = null; + + // Only allow newer clients or (1.9.2 on 1.9.4 server if the server supports it) + if (info.getProtocolVersion() >= protocol || Via.getPlatform().isOldClientsAllowed()) { + protocols = ProtocolRegistry.getProtocolPath(info.getProtocolVersion(), protocol); + } + ProtocolPipeline pipeline = wrapper.user().get(ProtocolInfo.class).getPipeline(); if (protocols != null) { for (Pair prot : protocols) { diff --git a/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java b/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java index 490b6fdd4..15294f8a9 100644 --- a/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java +++ b/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java @@ -199,4 +199,9 @@ public class SpongePlugin implements ViaPlatform { return platformSpecific; } + + @Override + public boolean isOldClientsAllowed() { + return true; + } }