From fddbeda81e31a40de19427a02de368f8dae6a62d Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Fri, 20 Dec 2019 16:29:10 +0100 Subject: [PATCH 1/2] Back to snapshot --- bukkit/pom.xml | 2 +- bungee/pom.xml | 2 +- common/pom.xml | 2 +- jar/pom.xml | 2 +- pom.xml | 2 +- sponge-legacy/pom.xml | 2 +- sponge/pom.xml | 2 +- velocity/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bukkit/pom.xml b/bukkit/pom.xml index dd90db8b9..2f9b72580 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.2.2 + 2.2.3-SNAPSHOT 4.0.0 diff --git a/bungee/pom.xml b/bungee/pom.xml index 4510799bf..4ab44f8ed 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.2.2 + 2.2.3-SNAPSHOT 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index fc434bfd4..8702fc7e4 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.2.2 + 2.2.3-SNAPSHOT 4.0.0 diff --git a/jar/pom.xml b/jar/pom.xml index 8b2d6f998..abfd81dcc 100644 --- a/jar/pom.xml +++ b/jar/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.2.2 + 2.2.3-SNAPSHOT 4.0.0 viaversion-jar diff --git a/pom.xml b/pom.xml index 63a138cca..71746bcb6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ us.myles viaversion-parent - 2.2.2 + 2.2.3-SNAPSHOT pom viaversion-parent diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml index 69de92a70..b017da339 100644 --- a/sponge-legacy/pom.xml +++ b/sponge-legacy/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.2.2 + 2.2.3-SNAPSHOT 4.0.0 diff --git a/sponge/pom.xml b/sponge/pom.xml index 88f8e4702..6a804d202 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.2.2 + 2.2.3-SNAPSHOT 4.0.0 diff --git a/velocity/pom.xml b/velocity/pom.xml index fefb13ce8..b2926dc5f 100644 --- a/velocity/pom.xml +++ b/velocity/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.2.2 + 2.2.3-SNAPSHOT 4.0.0 From 5cb5992d446abc34fe3249cfa3a2ae88fce757c8 Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Fri, 20 Dec 2019 16:35:10 +0100 Subject: [PATCH 2/2] Fix Bungee injection on Java 12+ Fixes #1512 --- .../bungee/platform/BungeeViaInjector.java | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaInjector.java b/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaInjector.java index edc66c086..7f0c0d76a 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaInjector.java +++ b/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeViaInjector.java @@ -9,28 +9,43 @@ import us.myles.ViaVersion.bungee.handlers.BungeeChannelInitializer; import us.myles.ViaVersion.util.ReflectionUtil; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.List; public class BungeeViaInjector implements ViaInjector { + @Override public void inject() throws Exception { try { - try { + Class pipelineUtils = Class.forName("net.md_5.bungee.netty.PipelineUtils"); + Field field = pipelineUtils.getDeclaredField("SERVER_CHILD"); + field.setAccessible(true); - Class pipelineUtils = Class.forName("net.md_5.bungee.netty.PipelineUtils"); - Field field = pipelineUtils.getDeclaredField("SERVER_CHILD"); - field.setAccessible(true); - // Remove any final stuff - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); - - BungeeChannelInitializer newInit = new BungeeChannelInitializer((ChannelInitializer) field.get(null)); - field.set(null, newInit); - } catch (NoSuchFieldException e) { - throw new Exception("Unable to find core component 'childHandler', please check your plugins. issue: "); + // Remove the final modifier (unless removed by a fork) + int modifiers = field.getModifiers(); + if (Modifier.isFinal(modifiers)) { + try { + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, modifiers & ~Modifier.FINAL); + } catch (NoSuchFieldException e) { + // Java 12 compatibility *this is fine* + Method getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class); + getDeclaredFields0.setAccessible(true); + Field[] fields = (Field[]) getDeclaredFields0.invoke(Field.class, false); + for (Field classField : fields) { + if ("modifiers".equals(classField.getName())) { + classField.setAccessible(true); + classField.set(field, modifiers & ~Modifier.FINAL); + break; + } + } + } } + + BungeeChannelInitializer newInit = new BungeeChannelInitializer((ChannelInitializer) field.get(null)); + field.set(null, newInit); } catch (Exception e) { Via.getPlatform().getLogger().severe("Unable to inject ViaVersion, please post these details on our GitHub and ensure you're using a compatible server version."); throw e; @@ -62,11 +77,6 @@ public class BungeeViaInjector implements ViaInjector { Class pipelineUtils = Class.forName("net.md_5.bungee.netty.PipelineUtils"); Field field = pipelineUtils.getDeclaredField("SERVER_CHILD"); field.setAccessible(true); - // Remove any final stuff - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); - return (ChannelInitializer) field.get(null); }