) Class.forName(this.getEventName());
- } catch (ClassNotFoundException e) {
- }
- return null;
- }
-
- public default EventPriority getPriority() {
- return EventPriority.NORMAL;
- }
-
- public default boolean ignoreCancelled(){
- return true;
- }
-}
diff --git a/src/main/java/Br/API/Scripts/ScriptListenerManager.java b/src/main/java/Br/API/Scripts/ScriptListenerManager.java
deleted file mode 100644
index 12c19c9..0000000
--- a/src/main/java/Br/API/Scripts/ScriptListenerManager.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 开发者:Bryan_lzh
- * QQ:390807154
- * 保留一切所有权
- * 若为Bukkit插件 请前往plugin.yml查看剩余协议
- */
-package Br.API.Scripts;
-
-import java.nio.charset.Charset;
-import org.bukkit.Bukkit;
-import org.bukkit.event.HandlerList;
-import org.bukkit.plugin.Plugin;
-
-/**
- *
- * @author Bryan_lzh
- * @version 1.0
- */
-public class ScriptListenerManager {
-
- public static void RegisterListener(Plugin p, ScriptListener listener) {
- Class cls = listener.getEventClass();
- if (cls != null) {
- Bukkit.getPluginManager().registerEvent(cls, listener, listener.getPriority(), (l, e) -> listener.castEvent(e), p, listener.ignoreCancelled());
- }
- }
-
- public static void UnregisterListener(ScriptListener l) {
- HandlerList.unregisterAll(l);
- }
-
- private ScriptListenerManager() {
- }
-}
diff --git a/src/main/java/Br/API/Scripts/ScriptLoader.java b/src/main/java/Br/API/Scripts/ScriptLoader.java
deleted file mode 100644
index ee0a7f6..0000000
--- a/src/main/java/Br/API/Scripts/ScriptLoader.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 开发者:Bryan_lzh
- * QQ:390807154
- * 保留一切所有权
- * 若为Bukkit插件 请前往plugin.yml查看剩余协议
- */
-package Br.API.Scripts;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.util.function.Consumer;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.script.ScriptEngineManager;
-import javax.script.ScriptException;
-import jdk.nashorn.api.scripting.NashornScriptEngine;
-import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
-import org.bukkit.plugin.Plugin;
-
-/**
- * nashorn脚本引擎存在一个明显的BUG
- * 位于
- * jdk.nashorn.api.scripting.NashornScriptEngineFactory:431的静态方法getAppClassLoader
- * 其中字节码描述如下:
- *
- *
- * 0: invokestatic java/lang/Thread.currentThread:()Ljava/lang/Thread;
- * 3: invokevirtual
- * java/lang/Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
- * 6: astore_0
- * 7: aload_0
- * 8: ifnonnull 19
- * 11: ldc jdk/nashorn/api/scripting/NashornScriptEngineFactory
- * 13: invokevirtual
- * java/lang/Class.getClassLoader:()Ljava/lang/ClassLoader;
- * 16: goto 20
- * 19: aload_0
- * 20: areturn
- * 显然
- * 代码返回的类加载器首先选取当前线程的类加载器(位于Thread.currentThread().getContextClassLoader())
- * 若返回null则返回NashornScriptEngineFactory的类加载器(NashornScriptEngineFactory.class.getClassLoader())
- * 这意味着 通过构造ScriptEngineManager所传入的类加载器没有任何用处 导致返回的ScriptEngine不使用所指定的类加载
- *
- * @author Bryan_lzh
- * @version 1.0
- */
-public class ScriptLoader {
-
- public static NashornScriptEngine eval(Plugin p, Reader fr) {
- return eval(p, (t) -> {
- try {
- t.eval(fr);
- } catch (ScriptException ex) {
- Logger.getLogger(ScriptLoader.class.getName()).log(Level.SEVERE, null, ex);
- }
- });
- }
-
- public static NashornScriptEngine evalAsUTF8(Plugin p, File f) {
- return eval(p, (t) -> {
- try {
- t.eval(new InputStreamReader(new FileInputStream(f), "UTF-8"));
- } catch (ScriptException ex) {
- Logger.getLogger(ScriptLoader.class.getName()).log(Level.SEVERE, null, ex);
- } catch (FileNotFoundException ex) {
- Logger.getLogger(ScriptLoader.class.getName()).log(Level.SEVERE, null, ex);
- } catch (UnsupportedEncodingException ex) {
- Logger.getLogger(ScriptLoader.class.getName()).log(Level.SEVERE, null, ex);
- }
- });
- }
-
- public static NashornScriptEngine eval(Plugin p, String fr) {
- return eval(p, (t) -> {
- try {
- t.eval(fr);
- } catch (ScriptException ex) {
- Logger.getLogger(ScriptLoader.class.getName()).log(Level.SEVERE, null, ex);
- }
- });
- }
-
- public static NashornScriptEngine eval(Plugin p, Consumer c) {
- ClassLoader backup = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(p.getClass().getClassLoader());
- ScriptEngineManager EngineManager = new ScriptEngineManager(p.getClass().getClassLoader());
- NashornScriptEngine ns = (NashornScriptEngine) EngineManager.getEngineByName("nashorn");
- if(ns == null){
- NashornScriptEngineFactory nsef = new NashornScriptEngineFactory();
- ns = (NashornScriptEngine) nsef.getScriptEngine();
- }
- c.accept(ns);
- Thread.currentThread().setContextClassLoader(backup);
- return ns;
- }
-}
diff --git a/src/main/java/Br/API/SignUtils.java b/src/main/java/Br/API/SignUtils.java
index ec8e565..4336385 100644
--- a/src/main/java/Br/API/SignUtils.java
+++ b/src/main/java/Br/API/SignUtils.java
@@ -51,11 +51,7 @@ public void sendSignRequest(Player p, String id) {
PacketContainer pc = new PacketContainer(PacketType.Play.Server.OPEN_SIGN_EDITOR);
Location loc = p.getLocation();
pc.getBlockPositionModifier().write(0, new BlockPosition(loc.getBlockX(), loc.getBlockY() + 1, loc.getBlockZ()));
- try {
- pm.sendServerPacket(p, pc, false);
- } catch (InvocationTargetException ex) {
- Logger.getLogger(SignUtils.class.getName()).log(Level.SEVERE, null, ex);
- }
+ pm.sendServerPacket(p, pc, false);
}
private static Map>> Callbacks = new HashMap<>();
diff --git a/src/main/java/com/github/bryanser/brapi/Main.kt b/src/main/java/com/github/bryanser/brapi/Main.kt
index 718d10c..968f3a1 100644
--- a/src/main/java/com/github/bryanser/brapi/Main.kt
+++ b/src/main/java/com/github/bryanser/brapi/Main.kt
@@ -3,8 +3,6 @@ package com.github.bryanser.brapi
import Br.API.EventListener
import Br.API.Main.*
import com.github.bryanser.brapi.kview.KViewHandler
-import com.github.bryanser.brapi.test.TestManager
-import com.github.bryanser.brapi.vview.VViewHandler
import org.bukkit.Bukkit
import org.bukkit.ChatColor
import org.bukkit.command.Command
@@ -47,11 +45,7 @@ class Main : JavaPlugin() {
makeKotlinLoader()
PLGUIN = this
compOld()
- ScriptManager.checkClass()
- TestManager.init()
KViewHandler.init()
- ScriptManager.loadScript()
- VViewHandler.init()
}
override fun onDisable() {
@@ -91,32 +85,12 @@ class Main : JavaPlugin() {
return true
}
if (args[1].equals("reload", true)) {
- ScriptManager.loadScript()
sender.sendMessage("§6重载成功")
return true
}
sender.sendMessage("§6/$label script reload >> 重载所有脚本")
return true
}
- if (args[0].equals("test", true) && args.size > 1 && sender.isOp) {
- TestManager.init()
- if (!TestManager.enable) {
- return true
- }
- val test = TestManager.tests[args[1]]
- if (test == null) {
- sender.sendMessage("§c找不到名为${args[1]}的测试脚本")
- return true
- }
- val sargs = if (args.size <= 2) arrayOf() else args.copyOfRange(2, args.size)
- val r = test.test(sender, *sargs)
- if (r.isEmpty()) {
- sender.sendMessage("§6测试脚本执行成功")
- } else {
- sender.sendMessage("§c测试脚本执行失败: $r")
- }
- return true
- }
return true
}
diff --git a/src/main/java/com/github/bryanser/brapi/ScriptManager.kt b/src/main/java/com/github/bryanser/brapi/ScriptManager.kt
deleted file mode 100644
index ea4e61c..0000000
--- a/src/main/java/com/github/bryanser/brapi/ScriptManager.kt
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.github.bryanser.brapi
-
-import com.github.bryanser.brapi.test.Script
-import jdk.nashorn.api.scripting.NashornScriptEngine
-import jdk.nashorn.api.scripting.NashornScriptEngineFactory
-import jdk.nashorn.api.scripting.ScriptObjectMirror
-import org.bukkit.Bukkit
-import org.bukkit.event.Event
-import org.bukkit.event.EventPriority
-import org.bukkit.event.Listener
-import org.bukkit.plugin.Plugin
-import java.io.File
-import java.net.URL
-import java.net.URLClassLoader
-import java.util.logging.Level
-
-interface ScriptListenerRegister {
- fun getPlugin(): Main
-
- fun registerListener(listener: ScriptObjectMirror, event: String): Listener?
- fun registerListener(listener: ScriptObjectMirror, event: String, priority: EventPriority): Listener?
- fun registerListener(listener: ScriptObjectMirror, event: String, ignoreCancel: Boolean): Listener?
- fun registerListener(listener: ScriptObjectMirror, event: String, ignoreCancel: Boolean, priority: EventPriority): Listener?
-}
-
-object ScriptManager : ScriptListenerRegister {
- var hasNashorn: Boolean = false
-
- class ScriptListener(
- val script: ScriptObjectMirror
- ) : Listener {
- fun call(evt: Event) {
- script.call(script, evt)
- }
- }
-
- override fun getPlugin(): Main = Main.getPlugin()
-
- override fun registerListener(listener: ScriptObjectMirror, event: String): Listener? {
- if (listener.isFunction) {
- val evt = Class.forName(event) ?: return null
- val targetevt = evt.asSubclass(Event::class.java) ?: return null
- val ler = ScriptListener(listener)
- Bukkit.getPluginManager().registerEvent(targetevt, ler, EventPriority.NORMAL, { listener, event ->
- ler.call(event)
- }, Main.getPlugin())
- return ler
- }
- return null
- }
-
- override fun registerListener(listener: ScriptObjectMirror, event: String, priority: EventPriority): Listener? {
- if (listener.isFunction) {
- val evt = Class.forName(event) ?: return null
- val targetevt = evt.asSubclass(Event::class.java) ?: return null
- val ler = ScriptListener(listener)
- Bukkit.getPluginManager().registerEvent(targetevt, ler, priority, { listener, event ->
- ler.call(event)
- }, Main.getPlugin())
- return ler
- }
- return null
- }
-
- override fun registerListener(listener: ScriptObjectMirror, event: String, ignoreCancel: Boolean): Listener? {
- if (listener.isFunction) {
- val evt = Class.forName(event) ?: return null
- val targetevt = evt.asSubclass(Event::class.java) ?: return null
- val ler = ScriptListener(listener)
- Bukkit.getPluginManager().registerEvent(targetevt, ler, EventPriority.NORMAL, { listener, event ->
- ler.call(event)
- }, Main.getPlugin(), ignoreCancel)
- return ler
- }
- return null
- }
-
- override fun registerListener(listener: ScriptObjectMirror, event: String, ignoreCancel: Boolean, priority: EventPriority): Listener? {
- if (listener.isFunction) {
- val evt = Class.forName(event) ?: return null
- val targetevt = evt.asSubclass(Event::class.java) ?: return null
- val ler = ScriptListener(listener)
- Bukkit.getPluginManager().registerEvent(targetevt, ler, priority, { listener, event ->
- ler.call(event)
- }, Main.getPlugin(), ignoreCancel)
- return ler
- }
- return null
- }
-
- fun checkClass() {
- try {
- Class.forName("jdk.nashorn.api.scripting.NashornScriptEngine")
- hasNashorn = true
- return
- } catch (e: ClassNotFoundException) {
- val folder = Main.getPlugin().dataFolder
- val f = File(folder, "nashorn.jar")
- if (f.exists()) {
- val method = URLClassLoader::class.java.getDeclaredMethod("addURL", URL::class.java)
- method.isAccessible = true
- val classLoader = this.javaClass.classLoader as URLClassLoader
- val url = f.toURI().toURL()
- method.invoke(classLoader, url);
- hasNashorn = true
- return
- }
- val log = Bukkit.getLogger()
- log.log(Level.WARNING, "=================================================================")
- log.log(Level.WARNING, " 未找到Nashorn脚本引擎 若无需求请忽略本提示 ")
- log.log(Level.WARNING, " 若需要脚本引擎支持 请下载")
- log.log(Level.WARNING, "https://github.com/BryanSer/BrAPI/raw/ver-kotlin/lib/nashorn.jar")
- log.log(Level.WARNING, "并将jar放入 /plugins/BrAPI 目录下")
- log.log(Level.WARNING, "=================================================================")
- }
- }
-
- fun createScriptEngine(plugin: Plugin): NashornScriptEngine {
- val factory = NashornScriptEngineFactory()
- val eng = factory.getScriptEngine(plugin.javaClass.classLoader) as NashornScriptEngine
- return eng
- }
-
- val scripts = mutableListOf