薛定谔的钱10086
  1. var ScriptPlayer = Java.type("noppes.npcs.scripted.entity.ScriptPlayer")
  2. var api =API
  3. function Listener(eventType, listener, bus) {
  4.   var MinecraftForge = Java.type("net.minecraftforge.common.MinecraftForge");
  5.   this.eventType = eventType;
  6.   this.listener = listener;
  7.   this.bus = (bus == null) ? MinecraftForge.EVENT_BUS : bus;
  8.   this.getEventType = function () {
  9.     return this.eventType;
  10.   }
  11.   this.getListener = function () {
  12.     return this.listener;
  13.   }
  14.   this.getBus = function () {
  15.     return this.bus;
  16.   }
  17. }
  18. function listenEvent(eventType, priority, listener, bus) {
  19.   var Event = Java.type(eventType);
  20.   try {
  21.     var IEventListener = Java.type("net.minecraftforge.fml.common.eventhandler.IEventListener");
  22.     var EventPriority = Java.type("net.minecraftforge.fml.common.eventhandler.EventPriority");
  23.   } catch (err) {
  24.     var IEventListener = Java.type("cpw.mods.fml.common.eventhandler.IEventListener");
  25.     var EventPriority = Java.type("cpw.mods.fml.common.eventhandler.EventPriority");
  26.   }
  27.   var MinecraftForge = Java.type("net.minecraftforge.common.MinecraftForge");
  28.   var event = new Event();
  29.   if (priority == "LOW") {
  30.     priority = EventPriority.LOW;
  31.   }
  32.   if (priority == "HIGH") {
  33.     priority = EventPriority.HIGH;
  34.   }
  35.   if (priority == "NORMAL") {
  36.     priority = EventPriority.NORMAL;
  37.   }
  38.   if (priority == "LOWEST") {
  39.     priority = EventPriority.LOWEST;
  40.   }
  41.   if (priority == "HIGHEST") {
  42.     priority = EventPriority.HIGHEST;
  43.   }
  44.   var EventListener = Java.extend(IEventListener, {
  45.     invoke: listener
  46.   });
  47.   listener = new EventListener();
  48.   var bus = (bus == null) ? MinecraftForge.EVENT_BUS : bus;
  49.   var busID = bus.class.getDeclaredField("busID");
  50.   busID.setAccessible(true);
  51.   busID = busID.getInt(bus);
  52.   event.getListenerList().register(busID, priority, listener);
  53.   return new Listener(eventType, listener, bus);
  54. }
  55. function unListenEvent(eventType, listener, bus) {
  56.   var Event = Java.type(eventType);
  57.   var MinecraftForge = Java.type("net.minecraftforge.common.MinecraftForge");
  58.   var event = new Event();
  59.   var bus = (bus == null) ? MinecraftForge.EVENT_BUS : bus;
  60.   var busID = bus.class.getDeclaredField("busID");
  61.   busID.setAccessible(true);
  62.   busID = busID.getInt(bus);
  63.   event.getListenerList().unregister(busID, listener);
  64. }
  65. function init(e){
  66.         var temp =e.npc.getTempData("load")
  67. listenEvent("net.minecraftforge.event.ServerChatEvent","HIGH",function(event){
  68. event.setCanceled(true);
  69. try{
  70. var player = new ScriptPlayer(event.player);
  71.           var name = player.getDisplayName()
  72.           var jy =player.getStoredData("jy");
  73.           var dj =player.getExpLevel()
  74.           var lvl="§e[lv."+dj+"]§r";
  75.           var col="§r"
  76.           var time=Date.now()
  77.           if(isOp(name)){col="§b§l"}
  78.           var message = col+event.message
  79.       message = lvl+col+name+"§b >>> "+message
  80.           if(isOp(name) != true){
  81.           if(jy == null){
  82.       sendChatMessage(player,col,message,e.npc);
  83.           }
  84.           if(jy !=null){
  85.                   if(time<jy){
  86.                   player.sendMessage("§b§l[系统]:您已被禁言,请等待"+Math.round(((jy-time)/1000))+"秒后再发言");
  87.                   }
  88.                   if(time >= jy){
  89.                           player.removeStoredData("jy")
  90.                           player.sendMessage("§b§l[系统]:您的禁言时间已到");
  91.                   sendChatMessage(player,col,message,e.npc);
  92.                   }
  93.           }
  94.           }else{sendChatMessage(player,col,message,e.npc);
  95.          }
  96.           e.npc.setTempData("load","ok")
  97.         }catch(err){print(err+err.lineNumber)}})
  98. }
  99. function sendChatMessage(player,col,message,npc) {
  100. message = message.replaceAll("\\\","").replaceAll("'","\\\'").replaceAll('"',"''")
  101. var str1 = message.split("[i]");
  102. var lt = str1.length;
  103. var str2 = "";
  104. for(var x = 0;x<lt;x++){
  105.   if(x == lt-1){
  106.    str1[x] = "{text:""+col+str1[x]+""}";
  107.    str2 = str2 + str1[x];
  108.    break;
  109.   }
  110.   str1[x] = "{text:""+col+str1[x]+""},";
  111.   str2 = str2+str1[x];
  112.   if(player.getHeldItem()!=null){
  113.    var tag=String(player.getHeldItem().getMCItemStack().field_77990_d);
  114.    var Item = Java.type("net.minecraft.item.Item");
  115.    var id = Item.func_150891_b(player.getHeldItem().getMCItemStack().func_77973_b())
  116.    tag=tag.replaceAll('"','');
  117.    var name=player.getHeldItem().getDisplayName()
  118.    str2 = str2+'{text:"§f['+name+'§f]","hoverEvent":{"action":"show_item","value":"{id:'+id+',tag:'+tag+'}"}},';
  119.   }
  120. }
  121. npc.executeCommand('tellraw @a ['+str2+']')
  122. }
  123. function isOp(playerName) {
  124.   var MinecraftServer = Java.type("net.minecraft.server.MinecraftServer");
  125.   var ops = MinecraftServer.func_71276_C().func_71203_ab().func_152606_n();
  126.   for (var x in ops) {
  127.     if (ops[x] == playerName) {
  128.       return true;
  129.     }
  130.   }
  131.   return false;
  132. }
复制代码
使用npc.say,npc中台词attack皆会触发,注意到其他人做的类似脚本都有一个判断,但是我不是很理解,希望大佬解释一下事件中username和player,这个player貌似不仅必然是玩家,且username有可能是npc名

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