diff --git a/pom.xml b/pom.xml index d89d92f..87c5994 100644 --- a/pom.xml +++ b/pom.xml @@ -160,6 +160,33 @@ kotlin-maven-plugin org.jetbrains.kotlin 1.9.23 + + + compile + compile + + compile + + + + ${project.basedir}/src/main/java + + + + + test-compile + test-compile + + test-compile + + + + + + -Xjvm-default=all + + 1.8 + @@ -286,9 +313,9 @@ ${kotlin.version} - com.comphenix.protocol + net.dmulloy2 ProtocolLib - 4.4.0 + 5.4.0 provided @@ -297,16 +324,10 @@ 1.6 provided - - lk.vexview - VexView - 2.6 - provided - me.clip placeholderapi - 2.10.9 + 2.11.6 provided diff --git a/src/main/java/Br/API/ActionBar.java b/src/main/java/Br/API/ActionBar.java index ea04ff3..c69bcc8 100644 --- a/src/main/java/Br/API/ActionBar.java +++ b/src/main/java/Br/API/ActionBar.java @@ -25,11 +25,7 @@ public static void sendActionBar(Player p, String msg) { } catch (Throwable e) { pc.getBytes().write(0, (byte) 2); } - try { - pm.sendServerPacket(p, pc); - } catch (InvocationTargetException ex) { - Logger.getLogger(ActionBar.class.getName()).log(Level.SEVERE, null, ex); - } + pm.sendServerPacket(p, pc); } } diff --git a/src/main/java/Br/API/Data/ProxyUtil.java b/src/main/java/Br/API/Data/ProxyUtil.java index 17c98e7..d51a355 100644 --- a/src/main/java/Br/API/Data/ProxyUtil.java +++ b/src/main/java/Br/API/Data/ProxyUtil.java @@ -6,7 +6,6 @@ */ package Br.API.Data; -import Br.API.Scripts.ScriptLoader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -26,7 +25,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.script.ScriptException; -import jdk.nashorn.api.scripting.NashornScriptEngine; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; @@ -94,94 +92,6 @@ public static void addProxy(Plugin plugin, Class cls) { list.add(cls); } - public static void proxy(Plugin plugin) { - List> list = Proxied.get(plugin.getName()); - if (list == null) { - return; - } - File folder = new File(plugin.getDataFolder(), File.separator + "Proxy" + File.separator); - if (!folder.exists()) { - folder.mkdirs(); - } - for (Class cls : list) { - if (!cls.isAnnotationPresent(ProxyInfo.class)) { - continue; - } - ProxyInfo pi = cls.getAnnotation(ProxyInfo.class); - File file = Util.getFile(folder, pi.value()); - YamlConfiguration config; - if (!file.exists()) { - config = new YamlConfiguration(); - } else { - config = YamlConfiguration.loadConfiguration(file); - } - String[] patharr = pi.value().split("\\."); - String root = patharr[patharr.length - 1]; - boolean edit = false; - for (Field f : Util.getAllDeclaredFields(cls)) { - if (!Modifier.isStatic(f.getModifiers())) { - continue; - } - f.setAccessible(true); - if (f.isAnnotationPresent(ProxyScript.class)) { - if (!ProxiedScript.class.isAssignableFrom(f.getType())) { - continue; - } - ProxyScript ps = f.getAnnotation(ProxyScript.class); - File jsFile = Util.getJsFile(folder, ps.file()); - if (!jsFile.exists()) { - try { - Util.OutputFile(plugin, ps.fromJarFile(), jsFile); - } catch (IOException ex) { - Logger.getLogger(ProxyUtil.class.getName()).log(Level.SEVERE, null, ex); - } - } - ProxiedScript pds = new ProxiedScript() { - private String Function = ps.function(); - private NashornScriptEngine Engine = ScriptLoader.evalAsUTF8(plugin, jsFile); - - @Override - public Object proxy(Object... args) { - try { - return Engine.invokeFunction(Function, args); - } catch (ScriptException | NoSuchMethodException ex) { - Logger.getLogger(ProxyUtil.class.getName()).log(Level.SEVERE, null, ex); - } - return null; - } - }; - try { - f.set(pds, null); - } catch (IllegalArgumentException | IllegalAccessException ex) { - Logger.getLogger(ProxyUtil.class.getName()).log(Level.SEVERE, null, ex); - } - continue; - } - if (!f.isAnnotationPresent(Proxy.class)) { - continue; - } - Proxy p = f.getAnnotation(Proxy.class); - String path = root + '.' + (p.value().isEmpty() ? f.getName() : p.value()); - try { - if (config.contains(path)) { - f.set(config.get(path), null); - } else { - config.set(path, f.get(null)); - edit = true; - } - } catch (IllegalArgumentException | IllegalAccessException ex) { - Logger.getLogger(ProxyUtil.class.getName()).log(Level.SEVERE, null, ex); - } - } - if (edit) { - try { - config.save(file); - } catch (IOException ex) { - Logger.getLogger(ProxyUtil.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - } static class Util { diff --git a/src/main/java/Br/API/Scripts/ScriptListener.java b/src/main/java/Br/API/Scripts/ScriptListener.java deleted file mode 100644 index 21ae6c0..0000000 --- a/src/main/java/Br/API/Scripts/ScriptListener.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 开发者:Bryan_lzh - * QQ:390807154 - * 保留一切所有权 - * 若为Bukkit插件 请前往plugin.yml查看剩余协议 - */ -package Br.API.Scripts; - -import org.bukkit.event.Event; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -/** - * - * @author Bryan_lzh - * @version 1.0 - * @param - */ -public interface ScriptListener extends Listener { - - public void onEvent(E e); - - public String getEventName(); - - public default void castEvent(E evt){ - if(this.getEventClass().isInstance(evt)){ - this.onEvent(evt); - } - } - - public default Class getEventClass(){ - try { - return (Class) 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