薛定谔的钱10086
如题,想做出如ESSXCHAT的[item]展示物品效果,现在稍微有了点头绪,但是还缺关键的一点,望大佬指正代码部分如下:
  1. /**
  2. * [url=home.php?mod=space&uid=1231151]@author[/url] Hueihuea
  3. * [url=home.php?mod=space&uid=2203813]@VERSION[/url] 2020.01.24.00.27
  4. */

  5. /**
  6. * 枚举优先级
  7. * @enum {*} BukkitEventPriority.LOWEST  最低;
  8. * @enum {*} BukkitEventPriority.LOW     较低;
  9. * @enum {*} BukkitEventPriority.NORMAL  正常;
  10. * @enum {*} BukkitEventPriority.HIGH    较高;
  11. * @enum {*} BukkitEventPriority.HIGHEST 很高;
  12. * @enum {*} BukkitEventPriority.MONITOR 最高;
  13. * @description 注意 在MONITOR优先级下 您不应该对事件进行任何操作 它仅仅是为监听而存在。
  14. */
  15. //修改自 灰佬的1.7.10监听bukkit
  16. function init (e){
  17.         var has =e.npc.world.getTempdata().has("lt")
  18. function BukkitEventPriority() {
  19.   BukkitEventPriority.LOWEST;
  20.   BukkitEventPriority.LOW;
  21.   BukkitEventPriority.NORMAL;
  22.   BukkitEventPriority.HIGH;
  23.   BukkitEventPriority.HIGHEST;
  24.   BukkitEventPriority.MONITOR;
  25. }
  26. {
  27.   var EventPriority = Java.type("org.bukkit.event.EventPriority");
  28.   BukkitEventPriority.LOWEST = EventPriority.LOWEST;
  29.   BukkitEventPriority.LOW = EventPriority.LOW;
  30.   BukkitEventPriority.NORMAL = EventPriority.NORMAL;
  31.   BukkitEventPriority.HIGH = EventPriority.HIGH;
  32.   BukkitEventPriority.HIGHEST = EventPriority.HIGHEST;
  33.   BukkitEventPriority.MONITOR = EventPriority.MONITOR;
  34. }
  35. /**
  36. * 用于构建一个监听器对象
  37. * @param {String} event 要监听的事件
  38. * @param {"org.bukkit.event.EventPriority"} priority 优先级
  39. * @param {Function} executeFunction 执行函数
  40. * @param {Boolean} ignoreCancelled 可空,是否跳过已撤销的事件
  41. * @param {"org.bukkit.event.Listener"} listener 可空,监听器对象
  42. * @param {"org.bukkit.plugin.Plugin"} plugin 可空,插件对象
  43. * [url=home.php?mod=space&uid=109629]@See[/url] BukkitEventPriority
  44. */
  45. function BukkitEventListener(event, priority, executeFunction, ignoreCancelled, listener, plugin) {
  46.   var server = Java.type("org.bukkit.Bukkit").getServer();
  47.   var Class = Java.type("java.lang.Class");
  48.   var eventType = Class.forName(event);
  49.   if (!Class.forName("org.bukkit.event.Event").isAssignableFrom(eventType)) {
  50.     throw new Error("The event isn't a bukkit event.");
  51.   }
  52.   var RegisteredListener = Java.type("org.bukkit.plugin.RegisteredListener");
  53.   ignoreCancelled = (ignoreCancelled == null) ? false : ignoreCancelled;
  54.   listener = Java.extend(Java.type("org.bukkit.event.Listener"), {});
  55.   listener = new listener();
  56.   plugin = Java.extend(Java.type("org.bukkit.plugin.Plugin"), {
  57.     getDescription: function () {
  58.       var PluginDescriptionFile = Java.type("org.bukkit.plugin.PluginDescriptionFile");
  59.       return new PluginDescriptionFile("FakePlugin", "1.0", "null")
  60.     },
  61.     isEnabled: function () {
  62.       return true;
  63.     }
  64.   });
  65.   plugin = new plugin();
  66.   var executor = Java.extend(Java.type("org.bukkit.plugin.EventExecutor"), {
  67.     execute: function (paramListener, paramEvent) {
  68.       try {
  69.         var Class = Java.type("java.lang.Class");
  70.         if (!eventType.isAssignableFrom(paramEvent.getClass())) {
  71.           return;
  72.         }
  73.         var CustomTimingsHandler = Java.type("org.spigotmc.CustomTimingsHandler");
  74.         var timings = new CustomTimingsHandler("World:DIM" + e.npc.world.getMCWorld().field_73011_w.field_149088_a
  75.           + ",Pos:" + e.npc.x + "," + e.npc.y + "," + e.npc.z
  76.           + ",NPCEntityUUID:" + e.npc.getMCEntity().func_110124_au()
  77.           + ",Engine:" + engine
  78.           + ",Context:" + context);
  79.         var isAsync = paramEvent.isAsynchronous();
  80.         if (!isAsync) {
  81.           timings.startTiming();
  82.         }
  83.         executeFunction.call(null, paramEvent);
  84.         if (!isAsync) {
  85.           timings.stopTiming();
  86.         }
  87.       } catch (err) {
  88.         var InvocationTargetException = Java.type("java.lang.reflect.InvocationTargetException");
  89.         var EventException = Java.type("org.bukkit.event.EventException");
  90.         if (err instanceof InvocationTargetException) {
  91.           throw new EventException(err.getCause());
  92.         }
  93.         throw new EventException(err);
  94.       }
  95.     }
  96.   });
  97.   executor = new executor();
  98.   var registeredListener = new RegisteredListener(listener, executor, priority, plugin, ignoreCancelled);
  99.   /**
  100.    * 用于注册这个监听器
  101.    */
  102.   this.register = function () {
  103.     this.getEventListeners().register(registeredListener);
  104.   }
  105.   /**
  106.    * 用于撤销这个监听器
  107.    */
  108.   this.unregister = function () {
  109.     this.getEventListeners().unregister(registeredListener);
  110.   }
  111.   this.getEventListeners = function () {
  112.     var manager = server.getPluginManager();
  113.     var getEventListeners = manager.getClass().getDeclaredMethod("getEventListeners", Class.forName("java.lang.Class"));
  114.     getEventListeners.setAccessible(true);
  115.     return getEventListeners.invoke(manager, eventType);
  116.   }
  117. }
  118. function isOp(name,world){
  119. var ops = world.getMCWorld().func_73046_m().func_184103_al().func_152606_n();
  120. for(var i in ops){
  121. if (ops[i] == name) {
  122.       return true;
  123.     }
  124. }
  125. return false;
  126. }
  127. if(has == null || has == undefined || has == false){
  128. new BukkitEventListener(
  129.     "org.bukkit.event.player.PlayerChatEvent",
  130.     EventPriority.NORMAL,
  131.     function (event) {
  132.                 event.setCancelled(true)
  133.       var asfgw =Java.type("org.bukkit.Bukkit")
  134.                 var allplayer =asfgw.getOnlinePlayers();
  135.                 var world =e.API.getIWorld(0);
  136.                 var w1 =e.API.getIWorld(2);
  137.                 var message =event.getMessage()
  138.                 var name =event.getPlayer().getName()
  139.                 if(event.getMessage() == "[item]" && event.getPlayer().getInventory().getItemInMainHand() != "ItemStack{AIR x 0}"){
  140.                 var selfplayer =world.getPlayer(event.getPlayer().getName())
  141.                 var selfplayer1 =w1.getPlayer(event.getPlayer().getName())
  142.                 for(var i in allplayer){
  143.                   if(allplayer[i].getName() != event.getPlayer().getName()){
  144.                           var as =""
  145.                           var scplayer =world.getPlayer(allplayer[i].getName());
  146.                           var scplayer1 =w1.getPlayer(allplayer[i].getName());
  147.                           if(scplayer != undefined && scplayer != null && selfplayer != undefined && selfplayer != null){
  148.                                   scplayer.getMCEntity().func_145747_a(selfplayer.getMainhandItem().getMCItemStack().func_151000_E())
  149.                                   }
  150.                                   if(scplayer1 != undefined && scplayer1 != null && selfplayer != undefined && selfplayer != null){
  151.                                   scplayer1.getMCEntity().func_145747_a(selfplayer.getMainhandItem().getMCItemStack().func_151000_E())
  152.                                   }
  153.                                   if(scplayer != undefined && scplayer != null && selfplayer1 != undefined && selfplayer1 != null){
  154.                                   scplayer.getMCEntity().func_145747_a(selfplayer1.getMainhandItem().getMCItemStack().func_151000_E())
  155.                                   }
  156.                                   if(scplayer1 != undefined && scplayer1 != null && selfplayer1 != undefined && selfplayer1 != null){
  157.                                   scplayer1.getMCEntity().func_145747_a(selfplayer1.getMainhandItem().getMCItemStack().func_151000_E())
  158.                                   }
  159.           }
  160.                 }
  161.           if(selfplayer != undefined && selfplayer != null){
  162.                   selfplayer.getMCEntity().func_145747_a(selfplayer.getMainhandItem().getMCItemStack().func_151000_E())
  163.           }else if(selfplayer1 != undefined && selfplayer1 != null){
  164.                   selfplayer1.getMCEntity().func_145747_a(selfplayer1.getMainhandItem().getMCItemStack().func_151000_E())//发送TextComponent
  165.           }
  166.         }
  167.         }
  168.   ).register()
  169. }
  170. }
复制代码



无敌三脚猫
兄啊,你不觉得这个写法过于繁杂了吗,你能写到这种程度,也差不多会写插件了,写这个还不如直接去写插件呢
一定要用cnpc的话,监听forge事件简单得多,不过我还是不能用脚本魔杖里的forge事件,只能写这种
  1. var MinecraftForge=Java.type("net.minecraftforge.common.MinecraftForge")
  2. var EventPriority=Java.type("net.minecraftforge.fml.common.eventhandler.EventPriority")
  3. var ServerChatEvent=Java.type("net.minecraftforge.event.ServerChatEvent")
  4. var busID=MinecraftForge.EVENT_BUS.class.getDeclaredField("busID")
  5. busID.setAccessible(true)
  6. new ServerChatEvent().getListenerList().register(busID.getInt(MinecraftForge.EVENT_BUS),EventPriority.LOW,function(event){
  7. if(event.getMessage()=="[item]"){
  8. var item=event.getPlayer().func_184614_ca()
  9. if(item.func_190926_b()){event.setCanceled(true);return}
  10. var formatArgs=event.getComponent().func_150271_j()
  11. formatArgs[formatArgs.length-1]=item.func_151000_E()
  12. }
  13. })
复制代码
虽然cnpc的player事件里也自带了一个chat事件,但听说这个事件在混合端不触发,除非加https://www.mcbbs.net/thread-1081290-1-1.html,如果你能触发的话就用下面这种
  1. var TextComponentTranslation=Java.type("net.minecraft.util.text.TextComponentTranslation")
  2. function chat(e){
  3. if(e.message=="[item]"){
  4. e.setCanceled(true)
  5. var player=e.player.getMCEntity()
  6. var item=player.func_184614_ca()
  7. if(item.func_190926_b())return
  8. player.func_184102_h().func_184103_al().func_148544_a(new TextComponentTranslation("chat.type.text",player.func_145748_c_(),item.func_151000_E()),false)
  9. }
  10. }
复制代码

薛定谔的钱10086
无敌三脚猫 发表于 2023-4-16 14:16
兄啊,你不觉得这个写法过于繁杂了吗,你能写到这种程度,也差不多会写插件了,写这个还不如直接去写插件呢 ...

其实用监听bukkit是因为essxchat导致我用serverchat的优先级不够 然后现在把essxchat删了以后我看我写这么多我也懒得用forge写了 感谢大佬~

第一页 上一页 下一页 最后一页