From feeef71b5ae99a1fcb4855b40d7be4e1b7eceeb3 Mon Sep 17 00:00:00 2001 From: luisc Date: Mon, 18 Oct 2021 20:50:54 -0500 Subject: [PATCH] Added more player events. --- src/main/java/noppes/npcs/EventHooks.java | 48 ++++++++++ .../noppes/npcs/ScriptPlayerEventHandler.java | 69 +++++++++++++++ .../client/gui/script/GuiScriptInterface.java | 23 +++-- .../noppes/npcs/constants/EnumScriptType.java | 8 ++ .../npcs/scripted/event/PlayerEvent.java | 87 +++++++++++++++++++ .../assets/customnpcs/lang/en_US.lang | 13 ++- 6 files changed, 238 insertions(+), 10 deletions(-) diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index d9d5a7d5e..7e6975e9b 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -6,6 +6,7 @@ package noppes.npcs; import cpw.mods.fml.common.eventhandler.Event; +import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -14,6 +15,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; +import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.world.WorldEvent; @@ -113,6 +115,24 @@ public class EventHooks { 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,"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,"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,"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,"event", event); @@ -148,12 +168,35 @@ public class EventHooks { WrapperNpcAPI.EVENT_BUS.post(event); } + public static void onPlayerJump(PlayerDataScript handler) { + PlayerEvent.JumpEvent event = new PlayerEvent.JumpEvent(handler.getPlayer()); + 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, "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, "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, "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, "event", event); + WrapperNpcAPI.EVENT_BUS.post(event); + } public static void onPlayerRespawn(PlayerDataScript handler) { PlayerEvent.RespawnEvent event = new PlayerEvent.RespawnEvent(handler.getPlayer()); @@ -172,6 +215,11 @@ public class EventHooks { WrapperNpcAPI.EVENT_BUS.post(event); } + public static boolean onPlayerBowCharge(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.RangedChargeEvent 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,"event", event); return WrapperNpcAPI.EVENT_BUS.post(event); diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index a65adefad..30c74504a 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -37,6 +37,7 @@ import net.minecraftforge.event.entity.EntityEvent.EntityConstructing; import net.minecraftforge.event.entity.EntityStruckByLightningEvent; import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.*; @@ -77,6 +78,15 @@ public class ScriptPlayerEventHandler { } } + @SubscribeEvent + public void invoke(ArrowNockEvent event) { + if(!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer) { + PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData; + noppes.npcs.scripted.event.PlayerEvent.RangedChargeEvent ev = new noppes.npcs.scripted.event.PlayerEvent.RangedChargeEvent(handler.getPlayer()); + EventHooks.onPlayerBowCharge(handler, ev); + } + } + @SubscribeEvent public void invoke(ArrowLooseEvent event) { if(!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer) { @@ -165,6 +175,54 @@ public class ScriptPlayerEventHandler { } } + @SubscribeEvent + public void invoke(UseHoeEvent event) { + if(event.entityPlayer.worldObj instanceof WorldServer) { + PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData; + EventHooks.onPlayerUseHoe(handler, event.current, event.x, event.y, event.z); + } + } + + @SubscribeEvent + public void invoke(PlayerSleepInBedEvent event) { + if(event.entityPlayer.worldObj instanceof WorldServer) { + PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData; + EventHooks.onPlayerSleep(handler, event.x, event.y, event.z); + } + } + + @SubscribeEvent + public void invoke(PlayerWakeUpEvent event) { + if(event.entityPlayer.worldObj instanceof WorldServer) { + PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData; + EventHooks.onPlayerWakeUp(handler, event.setSpawn); + } + } + + @SubscribeEvent + public void invoke(FillBucketEvent event) { + if(event.entityPlayer.worldObj instanceof WorldServer) { + PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData; + EventHooks.onPlayerFillBucket(handler, event.current, event.result); + } + } + + @SubscribeEvent + public void invoke(BonemealEvent event) { + if(event.entityPlayer.worldObj instanceof WorldServer) { + PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData; + EventHooks.onPlayerBonemeal(handler, event.x, event.y, event.z, event.world); + } + } + + @SubscribeEvent + public void invoke(AchievementEvent event) { + if(event.entityPlayer.worldObj instanceof WorldServer) { + PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData; + EventHooks.onPlayerAchievement(handler, event.achievement.getDescription()); + } + } + @SubscribeEvent public void invoke(LivingFallEvent event) { if(event.entityLiving.worldObj instanceof WorldServer) { @@ -176,6 +234,17 @@ public class ScriptPlayerEventHandler { } } + @SubscribeEvent + public void invoke(LivingEvent.LivingJumpEvent event) { + if(event.entityLiving.worldObj instanceof WorldServer) { + PlayerDataScript handler; + if (event.entityLiving instanceof EntityPlayer) { + handler = PlayerData.get((EntityPlayer)event.entityLiving).scriptData; + EventHooks.onPlayerJump(handler); + } + } + } + @SubscribeEvent public void invoke(EntityStruckByLightningEvent event) { if(event.entity.worldObj instanceof WorldServer) { 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 9330a8f7c..d731c2685 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java @@ -86,32 +86,39 @@ public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallb hookList.add("playerscript.init"); hookList.add("playerscript.tick"); hookList.add("playerscript.interact"); + hookList.add("playerscript.damagedEntity"); hookList.add("playerscript.damaged"); - hookList.add("playerscript.killed"); hookList.add("playerscript.kills"); - hookList.add("playerscript.chat"); + hookList.add("playerscript.killed"); hookList.add("playerscript.drop"); - hookList.add("playerscript.containerOpen"); + hookList.add("playerscript.respawn"); + hookList.add("playerscript.break"); + hookList.add("playerscript.chat"); hookList.add("playerscript.login"); hookList.add("playerscript.logout"); - hookList.add("playerscript.chat"); - hookList.add("playerscript.damagedentity"); hookList.add("playerscript.keyPressed"); hookList.add("playerscript.mouseClicked"); hookList.add("playerscript.pickUp"); - hookList.add("playerscript.rangedLaunched"); hookList.add("playerscript.pickupXP"); + hookList.add("playerscript.rangedCharge"); + hookList.add("playerscript.rangedLaunched"); hookList.add("playerscript.timer"); hookList.add("playerscript.startItem"); hookList.add("playerscript.usingItem"); hookList.add("playerscript.stopItem"); hookList.add("playerscript.finishItem"); + hookList.add("playerscript.containerOpen"); + hookList.add("playerscript.useHoe"); + hookList.add("playerscript.bonemeal"); + hookList.add("playerscript.fillBucket"); + hookList.add("playerscript.jump"); hookList.add("playerscript.fall"); + hookList.add("playerscript.wakeUp"); + hookList.add("playerscript.sleep"); hookList.add("playerscript.playSound"); hookList.add("playerscript.lightning"); - hookList.add("playerscript.break"); hookList.add("playerscript.changedDim"); - hookList.add("playerscript.respawn"); + hookList.add("playerscript.achievement"); addLabel(new GuiNpcLabel(0, "script.hooks", guiLeft + 4, guiTop + 5)); GuiCustomScroll hooks = new GuiCustomScroll(this, 1); diff --git a/src/main/java/noppes/npcs/constants/EnumScriptType.java b/src/main/java/noppes/npcs/constants/EnumScriptType.java index 10c242b09..a45721633 100644 --- a/src/main/java/noppes/npcs/constants/EnumScriptType.java +++ b/src/main/java/noppes/npcs/constants/EnumScriptType.java @@ -14,6 +14,7 @@ public enum EnumScriptType { DIALOG_OPTION("dialogOption"), TARGET_LOST("targetLost"), ROLE("role"), + RANGED_CHARGE("rangedCharge"), RANGED_LAUNCHED("rangedLaunched"), CLICKED("clicked"), FALLEN_UPON("fallenUpon"), @@ -59,7 +60,14 @@ public enum EnumScriptType { USING_ITEM("usingItem"), STOP_USING_ITEM("stopItem"), FINISH_USING_ITEM("finishItem"), + USE_HOE("useHoe"), + SLEEP("sleep"), + WAKE_UP("wakeUp"), + FILL_BUCKET("fillBucket"), + BONEMEAL("bonemeal"), + ACHIEVEMENT("achievement"), FALL("fall"), + JUMP("jump"), LIGHTNING("lightning"), PLAYSOUND("playSound"), RESPAWN("respawn"), diff --git a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java index 4c14e8bf2..2b4db24dd 100644 --- a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java @@ -6,11 +6,14 @@ package noppes.npcs.scripted.event; import cpw.mods.fml.common.eventhandler.Cancelable; +import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import noppes.npcs.scripted.*; import noppes.npcs.scripted.entity.ScriptLivingBase; import noppes.npcs.scripted.entity.ScriptPlayer; @@ -162,6 +165,12 @@ public class PlayerEvent extends CustomNPCsEvent { } } + public static class JumpEvent extends PlayerEvent { + public JumpEvent(IPlayer player){ + super(player); + } + } + public static class KilledEntityEvent extends PlayerEvent { public final IEntityLivingBase entity; @@ -341,4 +350,82 @@ public class PlayerEvent extends CustomNPCsEvent { this.exp = exp; } } + + public static class UseHoe extends PlayerEvent { + public final IItemStack hoe; + public final int x; + public final int y; + public final int z; + + public UseHoe(IPlayer player, ItemStack item, int x, int y, int z) { + super(player); + this.hoe = new ScriptItemStack(item); + this.x = x; + this.y = y; + this.z = z; + } + } + + public static class WakeUp extends PlayerEvent{ + public final boolean setSpawn; + + public WakeUp(IPlayer player, boolean setSpawn) { + super(player); + this.setSpawn = setSpawn; + } + } + + public static class Sleep extends PlayerEvent { + public final int x; + public final int y; + public final int z; + + public Sleep(ScriptPlayer player, int x, int y, int z) { + super(player); + this.x = x; + this.y = y; + this.z = z; + } + } + + public static class Achievement extends PlayerEvent { + public final String description; + + public Achievement(IPlayer player, String description) { + super(player); + this.description = description; + } + } + + public static class FillBucket extends PlayerEvent { + public final IItemStack current; + public final IItemStack result; + + public FillBucket(IPlayer player, ItemStack current, ItemStack result) { + super(player); + this.current = new ScriptItemStack(current); + this.result = new ScriptItemStack(result); + } + } + + public static class Bonemeal extends PlayerEvent { + public final IBlock block; + public final int x; + public final int y; + public final int z; + + public Bonemeal(IPlayer player, int x, int y, int z, World world) { + super(player); + this.block = API.getIBlock(world, x, y, z); + this.x = x; + this.y = y; + this.z = z; + } + } + + public static class RangedChargeEvent extends PlayerEvent { + public RangedChargeEvent(ScriptPlayer player) { + super(player); + } + } } diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index cd66b129d..8be11f8ff 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -469,7 +469,7 @@ playerscript.break=Break playerscript.chat=Chat playerscript.containerclosed=Closed Container playerscript.containerOpen=Open Container -playerscript.damagedentity=Damaged Entity +playerscript.damagedEntity=Damaged Entity playerscript.damaged=Hurt playerscript.killed=Killed playerscript.factionupdate=Faction Updated @@ -481,7 +481,8 @@ playerscript.levelUp=Level Up playerscript.login=Login playerscript.logout=Logout playerscript.pickUp=Pickup -playerscript.rangedLaunched=Range Launched +playerscript.rangedCharge=Arrow Charge +playerscript.rangedLaunched=Arrow Launched playerscript.drop=Drop Items playerscript.tick=Update playerscript.pickupXP=Pickup XP @@ -494,8 +495,16 @@ playerscript.finishItem=Item Finish playerscript.playSound=Play Sound playerscript.lightning=Lightning Struck playerscript.fall=Fall +playerscript.jump=Jump playerscript.respawn=Respawn playerscript.changedDim=Dimension Change +playerscript.useHoe=Use Hoe +playerscript.sleep=Sleep +playerscript.wakeUp=Wake Up +playerscript.fillBucket=Fill Bucket +playerscript.bonemeal=Bonemeal +playerscript.achievement=Achievement + forgescript.forgeInit=Init