- var ScriptPlayer = Java.type("noppes.npcs.scripted.entity.ScriptPlayer")
- var api =API
- function Listener(eventType, listener, bus) {
- var MinecraftForge = Java.type("net.minecraftforge.common.MinecraftForge");
- this.eventType = eventType;
- this.listener = listener;
- this.bus = (bus == null) ? MinecraftForge.EVENT_BUS : bus;
- this.getEventType = function () {
- return this.eventType;
- }
- this.getListener = function () {
- return this.listener;
- }
- this.getBus = function () {
- return this.bus;
- }
- }
- function listenEvent(eventType, priority, listener, bus) {
- var Event = Java.type(eventType);
- try {
- var IEventListener = Java.type("net.minecraftforge.fml.common.eventhandler.IEventListener");
- var EventPriority = Java.type("net.minecraftforge.fml.common.eventhandler.EventPriority");
- } catch (err) {
- var IEventListener = Java.type("cpw.mods.fml.common.eventhandler.IEventListener");
- var EventPriority = Java.type("cpw.mods.fml.common.eventhandler.EventPriority");
- }
- var MinecraftForge = Java.type("net.minecraftforge.common.MinecraftForge");
- var event = new Event();
- if (priority == "LOW") {
- priority = EventPriority.LOW;
- }
- if (priority == "HIGH") {
- priority = EventPriority.HIGH;
- }
- if (priority == "NORMAL") {
- priority = EventPriority.NORMAL;
- }
- if (priority == "LOWEST") {
- priority = EventPriority.LOWEST;
- }
- if (priority == "HIGHEST") {
- priority = EventPriority.HIGHEST;
- }
- var EventListener = Java.extend(IEventListener, {
- invoke: listener
- });
- listener = new EventListener();
- var bus = (bus == null) ? MinecraftForge.EVENT_BUS : bus;
- var busID = bus.class.getDeclaredField("busID");
- busID.setAccessible(true);
- busID = busID.getInt(bus);
- event.getListenerList().register(busID, priority, listener);
- return new Listener(eventType, listener, bus);
- }
- function unListenEvent(eventType, listener, bus) {
- var Event = Java.type(eventType);
- var MinecraftForge = Java.type("net.minecraftforge.common.MinecraftForge");
- var event = new Event();
- var bus = (bus == null) ? MinecraftForge.EVENT_BUS : bus;
- var busID = bus.class.getDeclaredField("busID");
- busID.setAccessible(true);
- busID = busID.getInt(bus);
- event.getListenerList().unregister(busID, listener);
- }
- function init(e){
- var temp =e.npc.getTempData("load")
- listenEvent("net.minecraftforge.event.ServerChatEvent","HIGH",function(event){
- event.setCanceled(true);
- try{
- var player = new ScriptPlayer(event.player);
- var name = player.getDisplayName()
- var jy =player.getStoredData("jy");
- var dj =player.getExpLevel()
- var lvl="§e[lv."+dj+"]§r";
- var col="§r"
- var time=Date.now()
- if(isOp(name)){col="§b§l"}
- var message = col+event.message
- message = lvl+col+name+"§b >>> "+message
- if(isOp(name) != true){
- if(jy == null){
- sendChatMessage(player,col,message,e.npc);
- }
- if(jy !=null){
- if(time<jy){
- player.sendMessage("§b§l[系统]:您已被禁言,请等待"+Math.round(((jy-time)/1000))+"秒后再发言");
- }
- if(time >= jy){
- player.removeStoredData("jy")
- player.sendMessage("§b§l[系统]:您的禁言时间已到");
- sendChatMessage(player,col,message,e.npc);
- }
- }
- }else{sendChatMessage(player,col,message,e.npc);
- }
- e.npc.setTempData("load","ok")
- }catch(err){print(err+err.lineNumber)}})
- }
- function sendChatMessage(player,col,message,npc) {
- message = message.replaceAll("\\\","").replaceAll("'","\\\'").replaceAll('"',"''")
- var str1 = message.split("[i]");
- var lt = str1.length;
- var str2 = "";
- for(var x = 0;x<lt;x++){
- if(x == lt-1){
- str1[x] = "{text:""+col+str1[x]+""}";
- str2 = str2 + str1[x];
- break;
- }
- str1[x] = "{text:""+col+str1[x]+""},";
- str2 = str2+str1[x];
- if(player.getHeldItem()!=null){
- var tag=String(player.getHeldItem().getMCItemStack().field_77990_d);
- var Item = Java.type("net.minecraft.item.Item");
- var id = Item.func_150891_b(player.getHeldItem().getMCItemStack().func_77973_b())
- tag=tag.replaceAll('"','');
- var name=player.getHeldItem().getDisplayName()
- str2 = str2+'{text:"§f['+name+'§f]","hoverEvent":{"action":"show_item","value":"{id:'+id+',tag:'+tag+'}"}},';
- }
- }
- npc.executeCommand('tellraw @a ['+str2+']')
- }
- function isOp(playerName) {
- var MinecraftServer = Java.type("net.minecraft.server.MinecraftServer");
- var ops = MinecraftServer.func_71276_C().func_71203_ab().func_152606_n();
- for (var x in ops) {
- if (ops[x] == playerName) {
- return true;
- }
- }
- return false;
- }
复制代码使用npc.say,npc中台词attack皆会触发,注意到其他人做的类似脚本都有一个判断,但是我不是很理解,希望大佬解释一下事件中username和player,这个player貌似不仅必然是玩家,且username有可能是npc名