diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 5d6b7fab4..d1a6bcf2a 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -173,11 +173,13 @@ public class CustomNpcs { proxy.load(); NetworkRegistry.INSTANCE.registerGuiHandler(this, proxy); - MinecraftForge.EVENT_BUS.register(new ScriptController()); - MinecraftForge.EVENT_BUS.register((new ScriptPlayerEventHandler()).registerForgeEvents()); - MinecraftForge.EVENT_BUS.register(new ServerEventsHandler()); - FMLCommonHandler.instance().bus().register(new ServerTickHandler()); + MinecraftForge.EVENT_BUS.register(new ScriptController()); + + ScriptPlayerEventHandler scriptPlayerEventHandler = new ScriptPlayerEventHandler(); + MinecraftForge.EVENT_BUS.register(scriptPlayerEventHandler); + FMLCommonHandler.instance().bus().register(scriptPlayerEventHandler.registerForgeEvents()); + FMLCommonHandler.instance().bus().register(new ServerTickHandler()); registerNpc(EntityNPCHumanMale.class, "npchumanmale"); registerNpc(EntityNPCVillager.class, "npcvillager"); diff --git a/src/main/java/noppes/npcs/DataScript.java b/src/main/java/noppes/npcs/DataScript.java index 6b6bcfdef..4522b5cfd 100644 --- a/src/main/java/noppes/npcs/DataScript.java +++ b/src/main/java/noppes/npcs/DataScript.java @@ -187,11 +187,6 @@ public class DataScript implements IScriptHandler { } - @Override - public void callScript(EnumScriptType var1, Event var2) { - - } - public boolean isClient() { return this.npc.isRemote(); } diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index d880305bf..7833cb110 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -55,42 +55,42 @@ public class EventHooks { public static void onPlayerInit(PlayerDataScript handler) { noppes.npcs.scripted.event.PlayerEvent.InitEvent event = new noppes.npcs.scripted.event.PlayerEvent.InitEvent(handler.getPlayer()); - handler.callScript(EnumScriptType.INIT, event); + handler.callScript(EnumScriptType.INIT, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerTick(PlayerDataScript handler) { noppes.npcs.scripted.event.PlayerEvent.UpdateEvent event = new noppes.npcs.scripted.event.PlayerEvent.UpdateEvent(handler.getPlayer()); - handler.callScript(EnumScriptType.TICK, event); + handler.callScript(EnumScriptType.TICK, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerInteract(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.InteractEvent event) { - handler.callScript(EnumScriptType.INTERACT, event); + handler.callScript(EnumScriptType.INTERACT, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onStartUsingItem(PlayerDataScript handler, int duration, ItemStack item){ PlayerEvent.StartUsingItem event = new PlayerEvent.StartUsingItem(handler.getPlayer(), item, duration); - handler.callScript(EnumScriptType.START_USING_ITEM, event); + handler.callScript(EnumScriptType.START_USING_ITEM, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onUsingItem(PlayerDataScript handler, int duration, ItemStack item){ PlayerEvent.UsingItem event = new PlayerEvent.UsingItem(handler.getPlayer(), item, duration); - handler.callScript(EnumScriptType.USING_ITEM, event); + handler.callScript(EnumScriptType.USING_ITEM, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onStopUsingItem(PlayerDataScript handler, int duration, ItemStack item){ PlayerEvent.StopUsingItem event = new PlayerEvent.StopUsingItem(handler.getPlayer(), item, duration); - handler.callScript(EnumScriptType.STOP_USING_ITEM, event); + handler.callScript(EnumScriptType.STOP_USING_ITEM, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static void onFinishUsingItem(PlayerDataScript handler, int duration, ItemStack item){ PlayerEvent.FinishUsingItem event = new PlayerEvent.FinishUsingItem(handler.getPlayer(), item, duration); - handler.callScript(EnumScriptType.FINISH_USING_ITEM, event); + handler.callScript(EnumScriptType.FINISH_USING_ITEM, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } @@ -99,178 +99,178 @@ public class EventHooks { for(int i = 0; i < entityItems.size(); i++){ items[i] = NpcAPI.Instance().getIItemStack(entityItems.get(i).getEntityItem()); } DropEvent event = new DropEvent(handler.getPlayer(), items); - handler.callScript(EnumScriptType.DROP, event); + handler.callScript(EnumScriptType.DROP, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerPickupXP(PlayerDataScript handler, EntityXPOrb orb) { PlayerEvent.PickupXPEvent event = new PlayerEvent.PickupXPEvent(handler.getPlayer(), orb); - handler.callScript(EnumScriptType.PICKUP_XP, event); + handler.callScript(EnumScriptType.PICKUP_XP, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerToss(PlayerDataScript handler, EntityItem entityItem) { PlayerEvent.TossEvent event = new PlayerEvent.TossEvent(handler.getPlayer(), NpcAPI.Instance().getIItemStack(entityItem.getEntityItem())); - handler.callScript(EnumScriptType.TOSS, event); + handler.callScript(EnumScriptType.TOSS, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerPickUp(PlayerDataScript handler, EntityItem entityItem) { PickUpEvent event = new PickUpEvent(handler.getPlayer(), new ScriptItemStack(entityItem.getEntityItem()));//NpcAPI.Instance().getIItemStack(entityItem.getEntityItem())); - handler.callScript(EnumScriptType.PICKUP, event); + handler.callScript(EnumScriptType.PICKUP, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerContainerOpen(PlayerDataScript handler, Container container) { ContainerOpen event = new ContainerOpen(handler.getPlayer(), NpcAPI.Instance().getIContainer(container)); - handler.callScript(EnumScriptType.CONTAINER_OPEN, event); + handler.callScript(EnumScriptType.CONTAINER_OPEN, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerUseHoe(PlayerDataScript handler, ItemStack hoe, int x, int y, int z) { noppes.npcs.scripted.event.PlayerEvent.UseHoe event = new noppes.npcs.scripted.event.PlayerEvent.UseHoe(handler.getPlayer(), hoe, x, y, z); - handler.callScript(EnumScriptType.USE_HOE, event); + handler.callScript(EnumScriptType.USE_HOE, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerSleep(PlayerDataScript handler, int x, int y, int z) { noppes.npcs.scripted.event.PlayerEvent.Sleep event = new noppes.npcs.scripted.event.PlayerEvent.Sleep(handler.getPlayer(), x, y, z); - handler.callScript(EnumScriptType.SLEEP, event); + handler.callScript(EnumScriptType.SLEEP, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerWakeUp(PlayerDataScript handler, boolean setSpawn) { noppes.npcs.scripted.event.PlayerEvent.WakeUp event = new noppes.npcs.scripted.event.PlayerEvent.WakeUp(handler.getPlayer(), setSpawn); - handler.callScript(EnumScriptType.WAKE_UP, event); + handler.callScript(EnumScriptType.WAKE_UP, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerDeath(PlayerDataScript handler, DamageSource source, Entity entity) { noppes.npcs.scripted.event.PlayerEvent.DiedEvent event = new noppes.npcs.scripted.event.PlayerEvent.DiedEvent(handler.getPlayer(), source, entity); - handler.callScript(EnumScriptType.KILLED, event); + handler.callScript(EnumScriptType.KILLED, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerKills(PlayerDataScript handler, EntityLivingBase entityLiving) { noppes.npcs.scripted.event.PlayerEvent.KilledEntityEvent event = new noppes.npcs.scripted.event.PlayerEvent.KilledEntityEvent(handler.getPlayer(), entityLiving); - handler.callScript(EnumScriptType.KILLS, event); + handler.callScript(EnumScriptType.KILLS, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerDamaged(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.DamagedEvent event) { - handler.callScript(EnumScriptType.DAMAGED, event); + handler.callScript(EnumScriptType.DAMAGED, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerLightning(PlayerDataScript handler) { PlayerEvent.LightningEvent event = new PlayerEvent.LightningEvent(handler.getPlayer()); - handler.callScript(EnumScriptType.LIGHTNING, event); + handler.callScript(EnumScriptType.LIGHTNING, event, "event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerSound(PlayerDataScript handler, String name, float pitch, float volume) { PlayerEvent.SoundEvent event = new PlayerEvent.SoundEvent(handler.getPlayer(), name, pitch, volume); - handler.callScript(EnumScriptType.PLAYSOUND, event); + handler.callScript(EnumScriptType.PLAYSOUND, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerFall(PlayerDataScript handler, float distance) { PlayerEvent.FallEvent event = new PlayerEvent.FallEvent(handler.getPlayer(),distance); - handler.callScript(EnumScriptType.FALL, event); + handler.callScript(EnumScriptType.FALL, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerJump(PlayerDataScript handler) { PlayerEvent.JumpEvent event = new PlayerEvent.JumpEvent(handler.getPlayer()); - handler.callScript(EnumScriptType.JUMP, event); + handler.callScript(EnumScriptType.JUMP, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerLogin(PlayerDataScript handler) { LoginEvent event = new LoginEvent(handler.getPlayer()); - handler.callScript(EnumScriptType.LOGIN, event); + handler.callScript(EnumScriptType.LOGIN, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerAchievement(PlayerDataScript handler, String description) { PlayerEvent.Achievement event = new PlayerEvent.Achievement(handler.getPlayer(), description); - handler.callScript(EnumScriptType.ACHIEVEMENT, event); + handler.callScript(EnumScriptType.ACHIEVEMENT, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerFillBucket(PlayerDataScript handler, ItemStack current, ItemStack result) { PlayerEvent.FillBucket event = new PlayerEvent.FillBucket(handler.getPlayer(), current, result); - handler.callScript(EnumScriptType.FILL_BUCKET, event); + handler.callScript(EnumScriptType.FILL_BUCKET, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerBonemeal(PlayerDataScript handler, int x, int y, int z, World world) { PlayerEvent.Bonemeal event = new PlayerEvent.Bonemeal(handler.getPlayer(), x, y, z, world); - handler.callScript(EnumScriptType.BONEMEAL, event); + handler.callScript(EnumScriptType.BONEMEAL, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerRespawn(PlayerDataScript handler) { PlayerEvent.RespawnEvent event = new PlayerEvent.RespawnEvent(handler.getPlayer()); - handler.callScript(EnumScriptType.RESPAWN, event); + handler.callScript(EnumScriptType.RESPAWN, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerLogout(PlayerDataScript handler) { LogoutEvent event = new LogoutEvent(handler.getPlayer()); - handler.callScript(EnumScriptType.LOGOUT, event); + handler.callScript(EnumScriptType.LOGOUT, event, "event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerChat(PlayerDataScript handler, ChatEvent event) { - handler.callScript(EnumScriptType.CHAT, event); + handler.callScript(EnumScriptType.CHAT, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerBowCharge(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.RangedChargeEvent event) { - handler.callScript(EnumScriptType.RANGED_CHARGE, event); + handler.callScript(EnumScriptType.RANGED_CHARGE, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerRanged(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.RangedLaunchedEvent event) { - handler.callScript(EnumScriptType.RANGED_LAUNCHED, event); + handler.callScript(EnumScriptType.RANGED_LAUNCHED, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerDamagedEntity(PlayerDataScript handler, DamagedEntityEvent event) { - handler.callScript(EnumScriptType.DAMAGED_ENTITY, event); + handler.callScript(EnumScriptType.DAMAGED_ENTITY, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerChangeDim(PlayerDataScript handler, int fromDim, int toDim) { PlayerEvent.ChangedDimension event = new PlayerEvent.ChangedDimension(handler.getPlayer(), fromDim, toDim); - handler.callScript(EnumScriptType.CHANGED_DIM, event); + handler.callScript(EnumScriptType.CHANGED_DIM, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerMouseClicked(EntityPlayerMP player, int button, int mouseWheel, boolean buttonDown) { PlayerDataScript handler = PlayerData.get(player).scriptData; PlayerEvent.MouseClickedEvent event = new PlayerEvent.MouseClickedEvent(handler.getPlayer(), button, mouseWheel, buttonDown); - handler.callScript(EnumScriptType.MOUSE_CLICKED, event); + handler.callScript(EnumScriptType.MOUSE_CLICKED, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerKeyPressed(EntityPlayerMP player, int button, boolean isCtrlPressed, boolean isShiftPressed, boolean isAltPressed, boolean isMetaPressed, boolean buttonDown) { PlayerDataScript handler = PlayerData.get(player).scriptData; KeyPressedEvent event = new KeyPressedEvent(handler.getPlayer(), button, isCtrlPressed, isAltPressed, isShiftPressed, isMetaPressed, buttonDown); - handler.callScript(EnumScriptType.KEY_PRESSED, event); + handler.callScript(EnumScriptType.KEY_PRESSED, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static void onPlayerTimer(PlayerData data, int id) { PlayerDataScript handler = data.scriptData; noppes.npcs.scripted.event.PlayerEvent.TimerEvent event = new noppes.npcs.scripted.event.PlayerEvent.TimerEvent(handler.getPlayer(), id); - handler.callScript(EnumScriptType.TIMER, event); + handler.callScript(EnumScriptType.TIMER, event,"event", event); WrapperNpcAPI.EVENT_BUS.post(event); } public static boolean onPlayerBreak(PlayerDataScript handler, PlayerEvent.BreakEvent event) { - handler.callScript(EnumScriptType.BREAK_BLOCK, event); + handler.callScript(EnumScriptType.BREAK_BLOCK, event,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); } diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index d03bc9389..6e4f42fbb 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -145,11 +145,12 @@ public class PacketHandlerServer{ private void playerScriptPackets(EnumPacketServer type, ByteBuf buffer, EntityPlayerMP player) throws Exception { NBTTagCompound compound; - if (type == EnumPacketServer.ScriptPlayerGet) { - compound = ScriptController.Instance.playerScripts.writeToNBT(new NBTTagCompound()); + if(type == EnumPacketServer.ScriptPlayerGet) { + PlayerDataScript data = ScriptController.Instance.playerScripts; + compound = data.writeToNBT(new NBTTagCompound()); compound.setTag("Languages", ScriptController.Instance.nbtLanguages()); - Server.sendData(player, EnumPacketClient.GUI_DATA, new Object[]{compound}); - } else if (type == EnumPacketServer.ScriptPlayerSave) { + Server.sendData(player, EnumPacketClient.GUI_DATA, compound); + } else if(type == EnumPacketServer.ScriptPlayerSave) { ScriptController.Instance.setPlayerScripts(Server.readNBT(buffer)); } } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index 4669a8784..8aea2035f 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -62,12 +62,11 @@ public class ScriptPlayerEventHandler { } @SubscribeEvent public void onServerTick(TickEvent.PlayerTickEvent event) { - if (event.side == Side.SERVER && event.phase == TickEvent.Phase.START) { + if(event.side == Side.SERVER && event.phase == TickEvent.Phase.START) { EntityPlayer player = event.player; PlayerData data = PlayerData.get(player); - if(player.ticksExisted%10 == 0) { - EventHooks.onPlayerTick(data.scriptData); - } + EventHooks.onPlayerTick(data.scriptData); + if(PlayerDataController.instance != null) { PlayerDataController.instance.getPlayerData(player).scriptData = data.scriptData; PlayerDataController.instance.getPlayerData(player).timers.update(); diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java index 2577fd211..34955b4af 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java @@ -350,7 +350,7 @@ public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallb } if(guibutton.id == 104) { - this.handler.setEnabled(((GuiNpcButton)guibutton).getValue() == 1); + this.handler.setEnabled((((GuiNpcButton)guibutton).getValue() == 1)); } if(guibutton.id == 105) { diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java index 3357b4012..79dd8753c 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java @@ -17,7 +17,7 @@ public class GuiScriptPlayers extends GuiScriptInterface { public GuiScriptPlayers() { this.handler = this.script; - Client.sendData(EnumPacketServer.ScriptPlayerGet, new Object[0]); + Client.sendData(EnumPacketServer.ScriptPlayerGet); } public void setGuiData(NBTTagCompound compound) { @@ -27,6 +27,11 @@ public class GuiScriptPlayers extends GuiScriptInterface { public void save() { super.save(); - Client.sendData(EnumPacketServer.ScriptPlayerSave, new Object[]{this.script.writeToNBT(new NBTTagCompound())}); + Client.sendData(EnumPacketServer.ScriptPlayerSave, script.writeToNBT(new NBTTagCompound())); + } + + public void close() { + super.close(); + ScriptController.Instance.playerScripts.errored.clear(); } } diff --git a/src/main/java/noppes/npcs/controllers/IScriptHandler.java b/src/main/java/noppes/npcs/controllers/IScriptHandler.java index 4ece1fbca..c52b9f852 100644 --- a/src/main/java/noppes/npcs/controllers/IScriptHandler.java +++ b/src/main/java/noppes/npcs/controllers/IScriptHandler.java @@ -11,7 +11,7 @@ import cpw.mods.fml.common.eventhandler.Event; import noppes.npcs.constants.EnumScriptType; public interface IScriptHandler { - void callScript(EnumScriptType var1, Event var2); + void callScript(EnumScriptType var1, Event var2, Object... obs); boolean isClient(); diff --git a/src/main/java/noppes/npcs/controllers/ScriptContainer.java b/src/main/java/noppes/npcs/controllers/ScriptContainer.java index 9a2f68d3e..f252a871f 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptContainer.java +++ b/src/main/java/noppes/npcs/controllers/ScriptContainer.java @@ -20,7 +20,6 @@ import noppes.npcs.CustomNpcs; import noppes.npcs.NBTTags; import noppes.npcs.NoppesUtilServer; import noppes.npcs.constants.EnumScriptType; -import noppes.npcs.scripted.NpcAPI; import scala.Char; public class ScriptContainer { @@ -143,8 +142,6 @@ public class ScriptContainer { this.engine.getContext().setWriter(pw); this.engine.getContext().setErrorWriter(pw); - this.engine.put("API", NpcAPI.Instance()); - try { if (!this.init) { this.engine.eval(this.getFullCode()); diff --git a/src/main/java/noppes/npcs/controllers/ScriptController.java b/src/main/java/noppes/npcs/controllers/ScriptController.java index 8c871ddc4..83415bd1a 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptController.java +++ b/src/main/java/noppes/npcs/controllers/ScriptController.java @@ -114,7 +114,7 @@ public class ScriptController { } private File playerScriptsFile() { - return new File(this.dir, "player_scripts.json"); + return new File(dir, "player_scripts.json"); } public boolean loadPlayerScripts() { @@ -122,10 +122,11 @@ public class ScriptController { File file = this.playerScriptsFile(); try { - if (!file.exists()) { + if(!file.exists()) { return false; } else { this.playerScripts.readFromNBT(NBTJsonUtil.LoadFile(file)); + shouldSave = false; return true; } } catch (Exception var3) { @@ -146,7 +147,6 @@ public class ScriptController { } catch (JsonException var5) { var5.printStackTrace(); } - } private void loadCategories(){ diff --git a/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java b/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java index 59ae206b1..eb831b2f1 100644 --- a/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java @@ -51,7 +51,7 @@ public class ForgeDataScript implements IScriptHandler { } @Override - public void callScript(EnumScriptType var1, Event var2) { + public void callScript(EnumScriptType var1, Event var2, Object... obs) { callScript(var1.function, var2); } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java index 7129dc274..3394672b7 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java @@ -32,24 +32,33 @@ import javax.annotation.CheckForNull; import javax.script.ScriptEngine; public class PlayerDataScript implements IScriptHandler { - private List scripts = new ArrayList(); - private String scriptLanguage = "ECMAScript"; + public List scripts = new ArrayList(); + public String scriptLanguage = "ECMAScript"; private EntityPlayer player; private IPlayer playerAPI; private long lastPlayerUpdate = 0L; public long lastInited = -1L; public boolean hadInteract = true; - private boolean enabled = false; - private static Map console = new TreeMap(); - private static List errored = new ArrayList(); + public boolean enabled = false; + private Map console = new TreeMap(); + public List errored = new ArrayList(); + + public IPlayer dummyPlayer; + public IWorld dummyWorld; public PlayerDataScript(EntityPlayer player) { - this.player = player; + if(player != null) { + this.player = player; + if (player instanceof EntityPlayer) + dummyPlayer = (IPlayer) ScriptController.Instance.getScriptForEntity(this.player); + if (player.worldObj instanceof WorldServer) + dummyWorld = (IWorld) NpcAPI.Instance().getIWorld((WorldServer) this.player.worldObj); + } } public void clear() { - console = new TreeMap(); - errored = new ArrayList(); + this.console = new TreeMap(); + this.errored = new ArrayList(); this.scripts = new ArrayList(); } @@ -57,7 +66,7 @@ public class PlayerDataScript implements IScriptHandler { this.scripts = NBTTags.GetScript(compound.getTagList("Scripts", 10), this); this.scriptLanguage = compound.getString("ScriptLanguage"); this.enabled = compound.getBoolean("ScriptEnabled"); - console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); + this.console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); } public NBTTagCompound writeToNBT(NBTTagCompound compound) { @@ -68,51 +77,72 @@ public class PlayerDataScript implements IScriptHandler { return compound; } - public void callScript(EnumScriptType type, Event event) { - if (this.isEnabled()) { + public void callScript(EnumScriptType type, Event event, Object... obs) { + if(this.isEnabled()) { ScriptContainer script; - if (ScriptController.Instance.lastLoaded > this.lastInited || ScriptController.Instance.lastPlayerUpdate > this.lastPlayerUpdate) { + if(ScriptController.Instance.lastLoaded > this.lastInited || ScriptController.Instance.lastPlayerUpdate > this.lastPlayerUpdate) { this.lastInited = ScriptController.Instance.lastLoaded; - errored.clear(); - if (this.player != null) { + //ScriptController.Instance.playerScripts.errored.clear(); + if(this.player != null) { this.scripts.clear(); - Iterator var3 = ScriptController.Instance.playerScripts.scripts.iterator(); + Iterator i = ScriptController.Instance.playerScripts.scripts.iterator(); - while(var3.hasNext()) { - script = (ScriptContainer)var3.next(); + while(i.hasNext()) { + script = (ScriptContainer)i.next(); ScriptContainer s = new ScriptContainer(this); s.readFromNBT(script.writeToNBT(new NBTTagCompound())); + this.scripts.add(s); } } this.lastPlayerUpdate = ScriptController.Instance.lastPlayerUpdate; - if (type != EnumScriptType.INIT) { + if(type != EnumScriptType.INIT) { EventHooks.onPlayerInit(this); } } - for(int i = 0; i < this.scripts.size(); ++i) { - script = (ScriptContainer)this.scripts.get(i); - if (!errored.contains(i)) { + for(int var7 = 0; var7 < this.scripts.size(); ++var7) { + script = (ScriptContainer)this.scripts.get(var7); + + if(!ScriptController.Instance.playerScripts.errored.contains(Integer.valueOf(var7))) { + if(script == null || script.errored || !script.hasCode()) + return; + script.setEngine(scriptLanguage); + if(script.engine == null) + return; + for(int i = 0; i + 1 < obs.length; i += 2){ + Object ob = obs[i + 1]; + if(ob instanceof Entity) + ob = ScriptController.Instance.getScriptForEntity((Entity)ob); + script.engine.put(obs[i].toString(), ob); + } + + ScriptEngine engine = script.engine; + engine.put("world", dummyWorld); + engine.put("player", dummyPlayer); + PlayerEvent result = (PlayerEvent) engine.get("event"); + if(result == null) + engine.put("event", result = new PlayerEvent(this.getPlayer())); + script.engine.put("API", new WrapperNpcAPI()); script.run(type, event); + if (script.errored) { - errored.add(i); + ScriptController.Instance.playerScripts.errored.add(var7); } Iterator var8 = script.console.entrySet().iterator(); while(var8.hasNext()) { Entry entry = (Entry)var8.next(); - if (!console.containsKey(entry.getKey())) { - console.put(entry.getKey(), " tab " + (i + 1) + ":\n" + (String)entry.getValue()); + if (!ScriptController.Instance.playerScripts.console.containsKey(entry.getKey())) { + ScriptController.Instance.playerScripts.console.put(entry.getKey(), " tab " + (var7 + 1) + ":\n" + (String)entry.getValue()); } } script.console.clear(); } } - } } @@ -130,6 +160,7 @@ public class PlayerDataScript implements IScriptHandler { public void setEnabled(boolean bo) { ScriptController.Instance.playerScripts.enabled = bo; + this.enabled = bo; } public String getLanguage() {