feat: add bungee support & ProxyClass
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
parent
1c21792572
commit
0b0cea9e50
14
pom.xml
14
pom.xml
@ -3,7 +3,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>pw.yumc</groupId>
|
<groupId>pw.yumc</groupId>
|
||||||
<artifactId>MiaoScript</artifactId>
|
<artifactId>MiaoScript</artifactId>
|
||||||
<version>0.1.0</version>
|
<version>0.1.1</version>
|
||||||
<developers>
|
<developers>
|
||||||
<developer>
|
<developer>
|
||||||
<id>502647092</id>
|
<id>502647092</id>
|
||||||
@ -54,6 +54,8 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<env.GIT_COMMIT>DEV</env.GIT_COMMIT>
|
<env.GIT_COMMIT>DEV</env.GIT_COMMIT>
|
||||||
<update.changes>
|
<update.changes>
|
||||||
|
§620-01-14 §afeat: 新增 Bungee 支持;
|
||||||
|
§afeat: 新增 instance 实例获取;
|
||||||
§619-09-24 §cremove: 移除 okhttp3 类库;
|
§619-09-24 §cremove: 移除 okhttp3 类库;
|
||||||
§afeat: 新增require自动下载模块功能;
|
§afeat: 新增require自动下载模块功能;
|
||||||
§619-09-21 §afeat: 新增 okhttp3 类库;
|
§619-09-21 §afeat: 新增 okhttp3 类库;
|
||||||
@ -175,5 +177,15 @@
|
|||||||
<artifactId>spongeapi</artifactId>
|
<artifactId>spongeapi</artifactId>
|
||||||
<version>7.1.0</version>
|
<version>7.1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.md-5</groupId>
|
||||||
|
<artifactId>bungeecord-api</artifactId>
|
||||||
|
<version>1.12-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.nukkit</groupId>
|
||||||
|
<artifactId>nukkit</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
@ -15,10 +15,24 @@ import lombok.val;
|
|||||||
* Created on 2017/10/9 12:40.
|
* Created on 2017/10/9 12:40.
|
||||||
*/
|
*/
|
||||||
public class Base {
|
public class Base {
|
||||||
|
private Object instance;
|
||||||
|
|
||||||
|
public Base(Object instance) {
|
||||||
|
this.instance = instance;
|
||||||
|
}
|
||||||
|
|
||||||
public Class getClass(String name) throws ClassNotFoundException {
|
public Class getClass(String name) throws ClassNotFoundException {
|
||||||
return Class.forName(name);
|
return Class.forName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object getInstance() {
|
||||||
|
return this.instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class getProxyClass() {
|
||||||
|
return ProxyClass.class;
|
||||||
|
}
|
||||||
|
|
||||||
public String read(String path) throws IOException {
|
public String read(String path) throws IOException {
|
||||||
return new String(Files.readAllBytes(new File(path).toPath()), "UTF-8");
|
return new String(Files.readAllBytes(new File(path).toPath()), "UTF-8");
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package pw.yumc.MiaoScript;
|
|||||||
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import java.lang.Thread;
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,7 +17,7 @@ public class MiaoScript extends JavaPlugin {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Thread.currentThread().setContextClassLoader(getClassLoader());
|
Thread.currentThread().setContextClassLoader(getClassLoader());
|
||||||
engine = new ScriptEngine(getDataFolder().getCanonicalPath(), getLogger());
|
engine = new ScriptEngine(getDataFolder().getCanonicalPath(), getLogger(), this);
|
||||||
engine.enableEngine();
|
engine.enableEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
src/main/java/pw/yumc/MiaoScript/MiaoScriptBungee.java
Normal file
26
src/main/java/pw/yumc/MiaoScript/MiaoScriptBungee.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package pw.yumc.MiaoScript;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA
|
||||||
|
*
|
||||||
|
* @author MiaoWoo
|
||||||
|
* Created on 2020/1/14 16:02.
|
||||||
|
*/
|
||||||
|
public class MiaoScriptBungee extends Plugin {
|
||||||
|
private ScriptEngine engine;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SneakyThrows
|
||||||
|
public void onEnable() {
|
||||||
|
engine = new ScriptEngine(getDataFolder().getCanonicalPath(), getLogger(), this);
|
||||||
|
engine.enableEngine();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
engine.disableEngine();
|
||||||
|
}
|
||||||
|
}
|
23
src/main/java/pw/yumc/MiaoScript/MiaoScriptNukkit.java
Normal file
23
src/main/java/pw/yumc/MiaoScript/MiaoScriptNukkit.java
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package pw.yumc.MiaoScript;
|
||||||
|
|
||||||
|
import cn.nukkit.plugin.PluginBase;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author MiaoWoo
|
||||||
|
*/
|
||||||
|
public class MiaoScriptNukkit extends PluginBase {
|
||||||
|
private ScriptEngine engine;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SneakyThrows
|
||||||
|
public void onEnable() {
|
||||||
|
engine = new ScriptEngine(getDataFolder().getCanonicalPath(), getLogger(), this);
|
||||||
|
engine.enableEngine();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
engine.disableEngine();
|
||||||
|
}
|
||||||
|
}
|
@ -5,9 +5,9 @@ import java.io.File;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.spongepowered.api.config.ConfigDir;
|
import org.spongepowered.api.config.ConfigDir;
|
||||||
import org.spongepowered.api.event.Listener;
|
import org.spongepowered.api.event.Listener;
|
||||||
|
import org.spongepowered.api.event.game.GameReloadEvent;
|
||||||
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
|
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
|
||||||
import org.spongepowered.api.event.game.state.GameStoppingServerEvent;
|
import org.spongepowered.api.event.game.state.GameStoppingServerEvent;
|
||||||
import org.spongepowered.api.event.game.GameReloadEvent;
|
|
||||||
import org.spongepowered.api.plugin.Plugin;
|
import org.spongepowered.api.plugin.Plugin;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@ -32,7 +32,7 @@ public class MiaoScriptSponge {
|
|||||||
@Listener
|
@Listener
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void onStart(GameStartedServerEvent event) {
|
public void onStart(GameStartedServerEvent event) {
|
||||||
engine = new ScriptEngine(pluginConfigDir.getCanonicalPath(), logger);
|
engine = new ScriptEngine(pluginConfigDir.getCanonicalPath(), logger, this);
|
||||||
engine.enableEngine();
|
engine.enableEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ public class MiaoScriptSponge {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void reload(GameReloadEvent event) {
|
public void reload(GameReloadEvent event) {
|
||||||
engine.disableEngine();
|
engine.disableEngine();
|
||||||
engine = new ScriptEngine(pluginConfigDir.getCanonicalPath(), logger);
|
engine = new ScriptEngine(pluginConfigDir.getCanonicalPath(), logger, this);
|
||||||
engine.enableEngine();
|
engine.enableEngine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
51
src/main/java/pw/yumc/MiaoScript/ProxyClass.java
Normal file
51
src/main/java/pw/yumc/MiaoScript/ProxyClass.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package pw.yumc.MiaoScript;
|
||||||
|
|
||||||
|
import javax.script.Bindings;
|
||||||
|
import javax.script.ScriptEngine;
|
||||||
|
import javax.script.ScriptException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA
|
||||||
|
*
|
||||||
|
* @author MiaoWoo
|
||||||
|
* Created on 2020/1/16 9:04.
|
||||||
|
*/
|
||||||
|
public class ProxyClass {
|
||||||
|
private ScriptEngine engine;
|
||||||
|
private String script;
|
||||||
|
private Bindings bindings;
|
||||||
|
|
||||||
|
public ProxyClass(ScriptEngine engine, String script, Bindings bindings) {
|
||||||
|
this.engine = engine;
|
||||||
|
this.script = script;
|
||||||
|
this.bindings = bindings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object method(Object args) throws ScriptException {
|
||||||
|
bindings.put("args", args);
|
||||||
|
return engine.eval(script, bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object one(Object arg1) throws ScriptException {
|
||||||
|
bindings.put("arg1", arg1);
|
||||||
|
return engine.eval(script, bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object two(Object arg1, Object arg2) throws ScriptException {
|
||||||
|
bindings.put("arg1", arg1);
|
||||||
|
bindings.put("arg2", arg2);
|
||||||
|
return engine.eval(script, bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object three(Object arg1, Object arg2, Object arg3) throws ScriptException {
|
||||||
|
bindings.put("arg1", arg1);
|
||||||
|
bindings.put("arg2", arg2);
|
||||||
|
bindings.put("arg3", arg3);
|
||||||
|
return engine.eval(script, bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object args(Object... args) throws ScriptException {
|
||||||
|
bindings.put("args", args);
|
||||||
|
return engine.eval(script, bindings);
|
||||||
|
}
|
||||||
|
}
|
@ -8,6 +8,7 @@ import java.nio.file.Paths;
|
|||||||
import javax.script.ScriptEngineManager;
|
import javax.script.ScriptEngineManager;
|
||||||
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created with IntelliJ IDEA
|
* Created with IntelliJ IDEA
|
||||||
*
|
*
|
||||||
@ -17,19 +18,21 @@ import lombok.SneakyThrows;
|
|||||||
public class ScriptEngine {
|
public class ScriptEngine {
|
||||||
private String root;
|
private String root;
|
||||||
private Object logger;
|
private Object logger;
|
||||||
|
private Base base;
|
||||||
private MiaoScriptEngine engine;
|
private MiaoScriptEngine engine;
|
||||||
private ScriptEngineManager manager;
|
private ScriptEngineManager manager;
|
||||||
|
|
||||||
public ScriptEngine(String root, Object logger) {
|
public ScriptEngine(String root, Object logger, Object instance) {
|
||||||
this.root = root;
|
this.root = root;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
this.base = new Base(instance);
|
||||||
this.manager = new ScriptEngineManager();
|
this.manager = new ScriptEngineManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void enableEngine() {
|
public void enableEngine() {
|
||||||
this.engine = new MiaoScriptEngine(manager, "nashorn");
|
this.engine = new MiaoScriptEngine(manager, "nashorn");
|
||||||
this.engine.put("base", new Base());
|
this.engine.put("base", this.base);
|
||||||
this.engine.put("ScriptEngineContextHolder", this);
|
this.engine.put("ScriptEngineContextHolder", this);
|
||||||
Path bios = Paths.get(root, "bios.js");
|
Path bios = Paths.get(root, "bios.js");
|
||||||
// 如果存在自定义bios就加载自定义的
|
// 如果存在自定义bios就加载自定义的
|
||||||
|
5
src/main/resources/bungee.yml
Normal file
5
src/main/resources/bungee.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
name: ${project.artifactId}
|
||||||
|
description: ${project.description}
|
||||||
|
main: ${project.groupId}.${project.artifactId}.${project.artifactId}Bungee
|
||||||
|
version: ${project.version}
|
||||||
|
author: MiaoWoo
|
Loading…
Reference in New Issue
Block a user