From 08e17004fc691ade3cb27a559d74a0a0aa5e6c21 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Tue, 23 May 2017 13:03:21 +0300 Subject: [PATCH] =?UTF-8?q?Bridge:=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BA=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=20=D0=B2=D1=80?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8=20(onlinemode)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В виду того, что задействуется рефлексия, а spigot не валяется ни на одном репозитарии, для корректной компиляции приходится лепить фейковые классы. Надеюсь в будующем я придумаю как избавится от такого костыля. --- bridge-mcserver-fake/build.gradle | 14 +++++++ .../craftbukkit/v1_8_R3/CraftServer.java | 11 +++++ bridge/build.gradle | 4 +- .../java/asys/bridge/bukkit/BridgePlugin.java | 6 +++ .../java/asys/bridge/bukkit/SpigotServer.java | 42 +++++++++++++++++++ settings.gradle | 1 + 6 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 bridge-mcserver-fake/build.gradle create mode 100644 bridge-mcserver-fake/src/main/java/org/bukkit/craftbukkit/v1_8_R3/CraftServer.java create mode 100644 bridge/src/main/java/asys/bridge/bukkit/SpigotServer.java diff --git a/bridge-mcserver-fake/build.gradle b/bridge-mcserver-fake/build.gradle new file mode 100644 index 0000000..edb1a8a --- /dev/null +++ b/bridge-mcserver-fake/build.gradle @@ -0,0 +1,14 @@ +group = 'asys' +version = '0.1-SNAPSHOT' + +repositories { + maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' } +} + +task jar(type: Jar, overwrite: true) { + // не собирать jar +} + +dependencies { + compile group: 'org.bukkit', name: 'bukkit', version: '1.8.8-R0.1-SNAPSHOT' +} \ No newline at end of file diff --git a/bridge-mcserver-fake/src/main/java/org/bukkit/craftbukkit/v1_8_R3/CraftServer.java b/bridge-mcserver-fake/src/main/java/org/bukkit/craftbukkit/v1_8_R3/CraftServer.java new file mode 100644 index 0000000..ad00dc5 --- /dev/null +++ b/bridge-mcserver-fake/src/main/java/org/bukkit/craftbukkit/v1_8_R3/CraftServer.java @@ -0,0 +1,11 @@ +/* + * DmitriyMX + * 2017-05-23 + */ +package org.bukkit.craftbukkit.v1_8_R3; + +public class CraftServer { + public boolean getOnlineMode() { + return false; + } +} diff --git a/bridge/build.gradle b/bridge/build.gradle index cd42b01..bacb543 100644 --- a/bridge/build.gradle +++ b/bridge/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.5.3-SNAPSHOT' +version = '0.5.4-SNAPSHOT' repositories { maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' } @@ -18,6 +18,7 @@ configurations { compileJava { dependsOn ':bridge-protocol:compileJava' + dependsOn ':bridge-mcserver-fake:compileJava' } jar { @@ -32,6 +33,7 @@ ext { dependencies { include files(project(':bridge-protocol').sourceSets.main.output.classesDir) + compile files(project(':bridge-mcserver-fake').sourceSets.main.output.classesDir) compile (group: 'org.bukkit', name: 'bukkit', version: '1.8.8-R0.1-SNAPSHOT') { exclude group: 'junit' exclude group: 'commons-lang' diff --git a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java index be638d7..854409c 100644 --- a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java +++ b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java @@ -20,6 +20,7 @@ public class BridgePlugin extends JavaPlugin { private int tryConnect = 0; private BridgeLoggerAppender loggerAppender; private boolean needReconnect = true; + private SpigotServer spigotServer; @Override public void onLoad() { @@ -30,6 +31,8 @@ public class BridgePlugin extends JavaPlugin { @Override public void onEnable() { if (INSTANCE == null) { + spigotServer = new SpigotServer(getServer()); + INSTANCE = this; saveDefaultConfig(); @@ -54,6 +57,9 @@ public class BridgePlugin extends JavaPlugin { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { sender.sendMessage("ASys Bridge by DmitriyMX"); + sender.sendMessage("[DEBUG] Onlinemode-1: " + spigotServer.getOnlineMode()); + spigotServer.setOnlineMode(!spigotServer.getOnlineMode()); + sender.sendMessage("[DEBUG] Onlinemode-2: " + spigotServer.getOnlineMode()); return true; } diff --git a/bridge/src/main/java/asys/bridge/bukkit/SpigotServer.java b/bridge/src/main/java/asys/bridge/bukkit/SpigotServer.java new file mode 100644 index 0000000..3cd1d1b --- /dev/null +++ b/bridge/src/main/java/asys/bridge/bukkit/SpigotServer.java @@ -0,0 +1,42 @@ +/* + * DmitriyMX + * 2017-05-23 + */ +package asys.bridge.bukkit; + +import org.bukkit.Server; +import org.bukkit.craftbukkit.v1_8_R3.CraftServer; + +import java.lang.reflect.Field; + + +class SpigotServer { + private CraftServer craftServer; + private Object booleanWrapper; + private Field booleanWrapperValueField; + + SpigotServer(Server server) { + craftServer = (CraftServer)server; + try { + Field onlineField = craftServer.getClass().getDeclaredField("online"); + onlineField.setAccessible(true); + booleanWrapper = onlineField.get(craftServer); + booleanWrapperValueField = booleanWrapper.getClass().getDeclaredField("value"); + booleanWrapperValueField.setAccessible(true); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + boolean getOnlineMode() { + return craftServer.getOnlineMode(); + } + + void setOnlineMode(boolean value) { + try { + booleanWrapperValueField.set(booleanWrapper, value); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } +} diff --git a/settings.gradle b/settings.gradle index df0ccb4..0c9f3c2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,3 +4,4 @@ include 'webinterface' include 'mcserver-manager' include 'bridge-protocol' include 'bridge' +include 'bridge-mcserver-fake'