Bridge: изменение настроек сервера в реальном времени (onlinemode)
В виду того, что задействуется рефлексия, а spigot не валяется ни на одном репозитарии, для корректной компиляции приходится лепить фейковые классы. Надеюсь в будующем я придумаю как избавится от такого костыля.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user