Bridge: изменение настроек сервера в реальном времени (onlinemode)
В виду того, что задействуется рефлексия, а spigot не валяется ни на одном репозитарии, для корректной компиляции приходится лепить фейковые классы. Надеюсь в будующем я придумаю как избавится от такого костыля.
This commit is contained in:
14
bridge-mcserver-fake/build.gradle
Normal file
14
bridge-mcserver-fake/build.gradle
Normal file
@@ -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'
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2017-05-23
|
||||
*/
|
||||
package org.bukkit.craftbukkit.v1_8_R3;
|
||||
|
||||
public class CraftServer {
|
||||
public boolean getOnlineMode() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -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'
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
42
bridge/src/main/java/asys/bridge/bukkit/SpigotServer.java
Normal file
42
bridge/src/main/java/asys/bridge/bukkit/SpigotServer.java
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,3 +4,4 @@ include 'webinterface'
|
||||
include 'mcserver-manager'
|
||||
include 'bridge-protocol'
|
||||
include 'bridge'
|
||||
include 'bridge-mcserver-fake'
|
||||
|
||||
Reference in New Issue
Block a user