2021-10-11 06:49:30 -05:00
|
|
|
package noppes.npcs;
|
|
|
|
|
|
|
|
|
|
import cpw.mods.fml.common.eventhandler.EventPriority;
|
|
|
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
|
|
|
|
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
|
|
|
|
import cpw.mods.fml.common.gameevent.TickEvent;
|
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
2025-10-28 00:44:41 -04:00
|
|
|
import kamkeel.npcs.addon.DBCAddon;
|
2026-02-18 05:13:51 -05:00
|
|
|
import kamkeel.npcs.controllers.AbilityController;
|
2025-03-13 17:14:45 -04:00
|
|
|
import kamkeel.npcs.controllers.AttributeController;
|
2026-03-03 04:06:34 -05:00
|
|
|
import kamkeel.npcs.controllers.data.attribute.tracker.PlayerAttributeTracker;
|
2025-01-30 09:26:10 -05:00
|
|
|
import kamkeel.npcs.controllers.SyncController;
|
2026-02-14 03:50:28 -05:00
|
|
|
import kamkeel.npcs.controllers.data.ability.Ability;
|
2026-03-01 00:09:57 -05:00
|
|
|
import kamkeel.npcs.controllers.data.ability.type.AbilityCounter;
|
|
|
|
|
import kamkeel.npcs.controllers.data.ability.type.AbilityDefend;
|
|
|
|
|
import kamkeel.npcs.controllers.data.ability.type.AbilityDodge;
|
|
|
|
|
import kamkeel.npcs.controllers.data.ability.type.AbilityGuard;
|
2026-02-23 21:46:23 -05:00
|
|
|
import kamkeel.npcs.network.packets.data.ability.PlayerAbilitySyncPacket;
|
2026-02-22 21:19:44 -05:00
|
|
|
import kamkeel.npcs.controllers.data.ability.enums.AbilityPhase;
|
2025-03-13 17:14:45 -04:00
|
|
|
import kamkeel.npcs.util.AttributeAttackUtil;
|
2021-10-12 02:57:32 -05:00
|
|
|
import net.minecraft.entity.Entity;
|
2026-03-01 00:09:57 -05:00
|
|
|
import net.minecraft.entity.EntityLivingBase;
|
2021-10-11 06:49:30 -05:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2022-05-27 14:32:24 -05:00
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
2021-12-03 18:17:52 -06:00
|
|
|
import net.minecraft.inventory.ContainerPlayer;
|
2023-03-29 21:23:09 -05:00
|
|
|
import net.minecraft.item.ItemStack;
|
2021-10-11 06:49:30 -05:00
|
|
|
import net.minecraft.util.ChatComponentTranslation;
|
|
|
|
|
import net.minecraft.world.WorldServer;
|
|
|
|
|
import net.minecraftforge.common.ForgeHooks;
|
2024-04-06 21:38:46 -04:00
|
|
|
import net.minecraftforge.common.util.FakePlayer;
|
2021-10-15 09:17:31 -05:00
|
|
|
import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.PlaySoundAtEntityEvent;
|
2021-10-18 22:01:15 -05:00
|
|
|
import net.minecraftforge.event.entity.item.ItemTossEvent;
|
2025-07-23 14:22:52 -04:00
|
|
|
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
|
|
|
|
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.AchievementEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.ArrowNockEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.BonemealEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.EntityInteractEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.FillBucketEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerDropsEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerOpenContainerEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerPickupXpEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerUseItemEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerWakeUpEvent;
|
|
|
|
|
import net.minecraftforge.event.entity.player.UseHoeEvent;
|
2023-01-12 21:33:06 -05:00
|
|
|
import net.minecraftforge.event.world.BlockEvent;
|
2025-06-02 14:56:29 -04:00
|
|
|
import noppes.npcs.api.IWorld;
|
2023-01-12 21:33:06 -05:00
|
|
|
import noppes.npcs.api.entity.IPlayer;
|
2025-02-17 16:02:56 -05:00
|
|
|
import noppes.npcs.api.item.IItemCustomizable;
|
2025-12-30 19:41:02 -05:00
|
|
|
import noppes.npcs.api.item.IItemStack;
|
2025-02-27 13:47:09 -05:00
|
|
|
import noppes.npcs.config.ConfigMain;
|
2025-07-23 14:22:52 -04:00
|
|
|
import noppes.npcs.config.ConfigScript;
|
2023-05-14 19:14:43 -05:00
|
|
|
import noppes.npcs.constants.EnumQuestType;
|
2025-02-10 18:12:58 -05:00
|
|
|
import noppes.npcs.controllers.CustomEffectController;
|
2024-04-06 21:38:46 -04:00
|
|
|
import noppes.npcs.controllers.PartyController;
|
2023-01-12 21:33:06 -05:00
|
|
|
import noppes.npcs.controllers.PlayerDataController;
|
|
|
|
|
import noppes.npcs.controllers.ScriptController;
|
2025-07-23 14:22:52 -04:00
|
|
|
import noppes.npcs.controllers.data.Party;
|
|
|
|
|
import noppes.npcs.controllers.data.PlayerData;
|
|
|
|
|
import noppes.npcs.controllers.data.PlayerDataScript;
|
|
|
|
|
import noppes.npcs.controllers.data.PlayerQuestData;
|
|
|
|
|
import noppes.npcs.controllers.data.Quest;
|
2021-10-11 06:49:30 -05:00
|
|
|
import noppes.npcs.entity.EntityNPCInterface;
|
2025-02-23 16:15:00 -05:00
|
|
|
import noppes.npcs.items.ItemNpcTool;
|
2024-04-06 21:38:46 -04:00
|
|
|
import noppes.npcs.quests.QuestItem;
|
2022-05-11 22:08:31 -05:00
|
|
|
import noppes.npcs.scripted.NpcAPI;
|
2025-12-30 19:41:02 -05:00
|
|
|
import noppes.npcs.scripted.item.ScriptCustomizableItem;
|
2021-10-11 06:49:30 -05:00
|
|
|
|
2023-05-15 15:55:41 -04:00
|
|
|
import static noppes.npcs.config.ConfigMain.TrackedQuestUpdateFrequency;
|
|
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
public class ScriptPlayerEventHandler {
|
|
|
|
|
public ScriptPlayerEventHandler() {
|
|
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void onServerTick(TickEvent.PlayerTickEvent event) {
|
2022-06-12 05:52:07 -05:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2022-06-12 05:52:07 -05:00
|
|
|
if (event.side == Side.SERVER && event.phase == TickEvent.Phase.START) {
|
2021-10-11 06:49:30 -05:00
|
|
|
EntityPlayer player = event.player;
|
2021-12-16 21:54:05 -06:00
|
|
|
|
2025-02-25 16:46:05 -05:00
|
|
|
if (player.ticksExisted % 10 == 0) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(player);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerTick(handler, scriptPlayer);
|
2023-03-29 21:23:09 -05:00
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
|
2023-03-29 21:23:09 -05:00
|
|
|
ItemStack item = player.inventory.getStackInSlot(i);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (item != null && NoppesUtilServer.isScriptableItem(item.getItem())) {
|
2025-02-17 16:02:56 -05:00
|
|
|
IItemCustomizable isw = (IItemCustomizable) NpcAPI.Instance().getIItemStack(item);
|
2023-03-29 21:23:09 -05:00
|
|
|
EventHooks.onScriptItemUpdate(isw, player);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-25 16:46:05 -05:00
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (ConfigMain.AttributesEnabled)
|
2025-02-27 13:47:09 -05:00
|
|
|
AttributeController.getTracker(player).updateIfChanged(player);
|
2021-12-18 08:34:30 -06:00
|
|
|
}
|
2021-12-16 04:05:05 -06:00
|
|
|
|
2023-06-05 19:35:06 -04:00
|
|
|
if (PlayerDataController.Instance != null) {
|
2025-04-08 22:48:32 -04:00
|
|
|
PlayerData playerData = PlayerData.get(player);
|
2025-07-03 18:29:53 +03:00
|
|
|
playerData.actionManager.tick();
|
2026-01-30 05:01:54 -05:00
|
|
|
playerData.abilityData.tick(player);
|
|
|
|
|
|
|
|
|
|
// Lock player movement during ability phases that require it
|
2026-02-14 03:50:28 -05:00
|
|
|
// Skip zeroing if the ability has its own movement (Charge/Dash/Slam)
|
2026-01-30 05:01:54 -05:00
|
|
|
if (playerData.abilityData.isMovementLocked()) {
|
2026-02-14 03:50:28 -05:00
|
|
|
Ability current = playerData.abilityData.getCurrentAbility();
|
2026-02-22 21:19:44 -05:00
|
|
|
if (current == null || !current.hasAbilityMovement()
|
|
|
|
|
|| current.getPhase() != AbilityPhase.ACTIVE) {
|
2026-02-19 03:12:59 -05:00
|
|
|
boolean sFlying = playerData.abilityData.wasFlyingAtLock()
|
|
|
|
|
|| AbilityController.Instance.isPlayerFlying(player);
|
|
|
|
|
|
2026-02-14 03:50:28 -05:00
|
|
|
player.motionX = 0;
|
2026-02-19 03:12:59 -05:00
|
|
|
if (!sFlying) {
|
2026-02-16 01:15:52 -05:00
|
|
|
player.motionY = Math.min(player.motionY, 0);
|
2026-02-19 03:12:59 -05:00
|
|
|
} else {
|
|
|
|
|
player.motionY = 0;
|
2026-02-16 01:15:52 -05:00
|
|
|
}
|
2026-02-14 03:50:28 -05:00
|
|
|
player.motionZ = 0;
|
|
|
|
|
player.velocityChanged = true;
|
|
|
|
|
}
|
2026-01-30 05:01:54 -05:00
|
|
|
}
|
2022-06-12 05:52:07 -05:00
|
|
|
|
2026-02-22 21:19:44 -05:00
|
|
|
// Zero WASD input during ability-controlled movement to prevent
|
|
|
|
|
// moveEntityWithHeading from interfering with ability velocity
|
|
|
|
|
{
|
|
|
|
|
Ability current = playerData.abilityData.getCurrentAbility();
|
|
|
|
|
if (current != null && current.hasAbilityMovement()
|
|
|
|
|
&& current.getPhase() == AbilityPhase.ACTIVE) {
|
|
|
|
|
player.moveForward = 0;
|
|
|
|
|
player.moveStrafing = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (playerData.updateClient) {
|
|
|
|
|
SyncController.syncPlayerData((EntityPlayerMP) player, true);
|
2024-03-07 22:22:39 -05:00
|
|
|
playerData.updateClient = false;
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-12 05:52:07 -05:00
|
|
|
if (playerData.timers.size() > 0) {
|
2022-02-02 07:18:33 -06:00
|
|
|
playerData.timers.update();
|
2022-06-12 05:52:07 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-23 21:46:23 -05:00
|
|
|
if (player.ticksExisted % 10 == 0) {
|
|
|
|
|
EntityPlayerMP mp = (EntityPlayerMP) player;
|
|
|
|
|
SyncController.syncEffects(mp);
|
|
|
|
|
SyncController.syncAbilityCooldowns(mp);
|
2026-02-24 18:20:57 -05:00
|
|
|
PlayerAbilitySyncPacket.sendToPlayer(mp);
|
2026-02-23 21:46:23 -05:00
|
|
|
playerData.abilityData.ensureLockStateClear();
|
|
|
|
|
}
|
2025-02-10 21:41:54 -05:00
|
|
|
|
2025-02-10 18:12:58 -05:00
|
|
|
if (player.ticksExisted % 10 == 0)
|
|
|
|
|
CustomEffectController.Instance.runEffects(player);
|
|
|
|
|
|
|
|
|
|
if (player.ticksExisted % 20 == 0)
|
|
|
|
|
CustomEffectController.Instance.decrementEffects(player);
|
2024-03-15 15:43:29 -04:00
|
|
|
|
|
|
|
|
Party party = playerData.getPlayerParty();
|
|
|
|
|
boolean trackingPartyQuest = playerData.questData.getTrackedQuest() != null && party != null && party.getQuest() != null && party.getQuest().getId() == playerData.questData.getTrackedQuest().getId();
|
|
|
|
|
if (playerData.questData.getTrackedQuest() != null && !playerData.questData.activeQuests.containsKey(playerData.questData.getTrackedQuest().getId()) && !trackingPartyQuest) {
|
2025-04-08 22:48:32 -04:00
|
|
|
PlayerData.get(player).questData.untrackQuest();
|
2022-06-12 05:52:07 -05:00
|
|
|
}
|
2022-06-15 05:03:31 -05:00
|
|
|
|
2025-04-08 22:48:32 -04:00
|
|
|
if (player.ticksExisted % 20 == 0 && !PlayerData.get(player).skinOverlays.overlayList.isEmpty()) {
|
|
|
|
|
PlayerData.get(player).skinOverlays.updateClient();
|
2022-06-15 05:03:31 -05:00
|
|
|
}
|
2023-05-14 19:14:43 -05:00
|
|
|
|
2023-05-15 15:55:41 -04:00
|
|
|
if (player.ticksExisted % (TrackedQuestUpdateFrequency * 20) == 0) {
|
2023-05-14 19:14:43 -05:00
|
|
|
PlayerQuestData questData = playerData.questData;
|
2025-03-13 17:14:45 -04:00
|
|
|
if (questData != null) {
|
2023-05-15 15:55:41 -04:00
|
|
|
if (questData.getTrackedQuest() != null && ((Quest) questData.getTrackedQuest()).type == EnumQuestType.Item) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (trackingPartyQuest) {
|
2024-03-15 15:43:29 -04:00
|
|
|
NoppesUtilPlayer.sendPartyTrackedQuestData((EntityPlayerMP) event.player, party);
|
2025-03-13 17:14:45 -04:00
|
|
|
} else {
|
2024-03-15 15:43:29 -04:00
|
|
|
NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player);
|
|
|
|
|
}
|
2023-05-15 15:55:41 -04:00
|
|
|
}
|
2023-05-14 19:14:43 -05:00
|
|
|
}
|
|
|
|
|
}
|
2022-02-02 07:18:33 -06:00
|
|
|
}
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
2021-10-12 02:57:32 -05:00
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(EntityInteractEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2025-06-02 14:56:29 -04:00
|
|
|
IPlayer ip = NoppesUtilServer.getIPlayer(event.entityPlayer);
|
|
|
|
|
|
|
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 1, NpcAPI.Instance().getIEntity(event.target));
|
|
|
|
|
boolean rightClick = EventHooks.onPlayerRightClick(handler, rightClickEvent);
|
|
|
|
|
|
|
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent(ip, 1, NpcAPI.Instance().getIEntity(event.target));
|
|
|
|
|
boolean interact = EventHooks.onPlayerInteract(handler, ev);
|
|
|
|
|
|
|
|
|
|
event.setCanceled(rightClick || interact);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(PlayerInteractEvent event) {
|
|
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null || event.entityPlayer.worldObj.isRemote || !(event.entityPlayer instanceof EntityPlayerMP))
|
|
|
|
|
return;
|
|
|
|
|
|
2025-07-23 14:22:52 -04:00
|
|
|
if (event.action == PlayerInteractEvent.Action.LEFT_CLICK_BLOCK)
|
2025-06-02 15:09:24 -04:00
|
|
|
return;
|
|
|
|
|
|
2025-06-02 14:56:29 -04:00
|
|
|
IPlayer ip = NoppesUtilServer.getIPlayer(event.entityPlayer);
|
|
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
|
|
|
|
PlayerData pd = PlayerData.get(event.entityPlayer);
|
|
|
|
|
if (pd == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-23 14:22:52 -04:00
|
|
|
if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_AIR) {
|
2025-06-02 14:56:29 -04:00
|
|
|
if (pd.hadInteract) {
|
|
|
|
|
pd.hadInteract = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 0, null);
|
|
|
|
|
event.setCanceled(EventHooks.onPlayerRightClick(handler, rightClickEvent));
|
2025-07-23 14:22:52 -04:00
|
|
|
} else if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) {
|
2025-06-02 14:56:29 -04:00
|
|
|
pd.hadInteract = true;
|
|
|
|
|
IWorld iw = (IWorld) NpcAPI.Instance().getIWorld(event.world);
|
|
|
|
|
Object blockCtx = NpcAPI.Instance().getIBlock(iw, event.x, event.y, event.z);
|
|
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 2, blockCtx);
|
|
|
|
|
event.setCanceled(EventHooks.onPlayerRightClick(handler, rightClickEvent));
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-18 20:50:54 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(ArrowNockEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.RangedChargeEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.RangedChargeEvent(scriptPlayer);
|
2021-10-18 20:50:54 -05:00
|
|
|
EventHooks.onPlayerBowCharge(handler, ev);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(ArrowLooseEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.RangedLaunchedEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.RangedLaunchedEvent(scriptPlayer, event.bow, event.charge);
|
2021-10-12 02:57:32 -05:00
|
|
|
EventHooks.onPlayerRanged(handler, ev);
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(BlockEvent.BreakEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.getPlayer() == null || event.getPlayer().worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.getPlayer().getHeldItem() != null && event.getPlayer().getHeldItem().getItem() instanceof ItemNpcTool) {
|
2025-02-23 16:15:00 -05:00
|
|
|
event.setCanceled(true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (!event.getPlayer().worldObj.isRemote && event.world instanceof WorldServer && event.getPlayer() instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.getPlayer());
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.getPlayer());
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.BreakEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.BreakEvent(scriptPlayer, NpcAPI.Instance().getIBlock(NpcAPI.Instance().getIWorld(event.world), NpcAPI.Instance().getIPos(event.x, event.y, event.z)), event.getExpToDrop());
|
2021-10-12 02:57:32 -05:00
|
|
|
event.setCanceled(EventHooks.onPlayerBreak(handler, ev));
|
|
|
|
|
event.setExpToDrop(ev.exp);
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerUseItemEvent.Start event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
event.setCanceled(EventHooks.onStartUsingItem(handler, scriptPlayer, event.duration, event.item));
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerUseItemEvent.Tick event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
event.setCanceled(EventHooks.onUsingItem(handler, scriptPlayer, event.duration, event.item));
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerUseItemEvent.Stop event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
event.setCanceled(EventHooks.onStopUsingItem(handler, scriptPlayer, event.duration, event.item));
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerUseItemEvent.Finish event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onFinishUsingItem(handler, scriptPlayer, event.duration, event.item);
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerDropsEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
event.setCanceled(EventHooks.onPlayerDropItems(handler, scriptPlayer, event.drops));
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerPickupXpEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerPickupXP(handler, scriptPlayer, event.orb);
|
2021-10-12 02:57:32 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-15 09:17:31 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(PlayerEvent.PlayerChangedDimensionEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) {
|
2026-02-18 14:10:55 -05:00
|
|
|
// Fully reset ability state on dimension change (no cooldown rollover)
|
2026-02-15 23:15:50 -05:00
|
|
|
PlayerData playerData = PlayerData.get(event.player);
|
|
|
|
|
if (playerData != null) {
|
2026-02-18 14:10:55 -05:00
|
|
|
playerData.abilityData.resetOnDimensionChange();
|
2026-02-15 23:15:50 -05:00
|
|
|
}
|
|
|
|
|
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerChangeDim(handler, scriptPlayer, event.fromDim, event.toDim);
|
2021-10-15 09:17:31 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-12 02:57:32 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(PlayerEvent.ItemPickupEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (!event.player.worldObj.isRemote && !(event.player instanceof FakePlayer)) {
|
2025-04-08 22:48:32 -04:00
|
|
|
PlayerData playerData = PlayerData.get(event.player);
|
2024-04-06 21:38:46 -04:00
|
|
|
PlayerQuestData questData = playerData.questData;
|
|
|
|
|
QuestItem.pickedUp = event.pickedUp.getEntityItem();
|
|
|
|
|
|
|
|
|
|
Party playerParty = playerData.getPlayerParty();
|
2025-03-13 17:14:45 -04:00
|
|
|
if (playerParty != null) {
|
2024-04-06 21:38:46 -04:00
|
|
|
QuestItem.pickedUpParty = event.pickedUp.getEntityItem();
|
|
|
|
|
QuestItem.pickedUpPlayer = event.player;
|
|
|
|
|
PartyController.Instance().checkQuestCompletion(playerParty, EnumQuestType.Item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
questData.checkQuestCompletion(playerData, EnumQuestType.Item);
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerPickUp(handler, scriptPlayer, event.pickedUp);
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerOpenContainerEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && !(event.entityPlayer.openContainer instanceof ContainerPlayer) && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerContainerOpen(handler, scriptPlayer, event.entityPlayer.openContainer);
|
2021-10-12 02:57:32 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-18 20:50:54 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(UseHoeEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerUseHoe(handler, scriptPlayer, event.current, event.x, event.y, event.z);
|
2021-10-18 20:50:54 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(PlayerSleepInBedEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerSleep(handler, scriptPlayer, event.x, event.y, event.z);
|
2021-10-18 20:50:54 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(PlayerWakeUpEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerWakeUp(handler, scriptPlayer, event.setSpawn);
|
2021-10-18 20:50:54 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(FillBucketEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerFillBucket(handler, scriptPlayer, event.current, event.result);
|
2021-10-18 20:50:54 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(BonemealEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerBonemeal(handler, scriptPlayer, event.x, event.y, event.z, event.world);
|
2021-10-18 20:50:54 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(AchievementEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityPlayer == null || event.entityPlayer.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerAchievement(handler, scriptPlayer, CustomNpcs.proxy.getAchievementDesc(event.achievement));
|
2021-10-18 20:50:54 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-18 22:01:15 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(ItemTossEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player);
|
2023-05-29 23:57:45 -05:00
|
|
|
event.setCanceled(EventHooks.onPlayerToss(handler, scriptPlayer, event.entityItem));
|
2021-10-18 22:01:15 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-12 02:57:32 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(LivingFallEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving == null || event.entityLiving.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving.worldObj instanceof WorldServer) {
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityLiving instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityLiving);
|
2022-11-24 14:36:09 -06:00
|
|
|
event.setCanceled(EventHooks.onPlayerFall(handler, scriptPlayer, event.distance));
|
2021-10-12 02:57:32 -05:00
|
|
|
}
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-18 20:50:54 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(LivingEvent.LivingJumpEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving == null || event.entityLiving.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving.worldObj instanceof WorldServer) {
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityLiving instanceof EntityPlayerMP) {
|
2026-02-15 23:15:50 -05:00
|
|
|
// Cancel jump if movement is locked by an ability
|
|
|
|
|
PlayerData playerData = PlayerData.get((EntityPlayer) event.entityLiving);
|
|
|
|
|
if (playerData != null && playerData.abilityData.isMovementLocked()) {
|
|
|
|
|
event.entityLiving.motionY = 0;
|
|
|
|
|
event.entityLiving.velocityChanged = true;
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityLiving);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerJump(handler, scriptPlayer);
|
2021-10-18 20:50:54 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-15 09:17:31 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(EntityStruckByLightningEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entity == null || event.entity.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entity.worldObj instanceof WorldServer) {
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entity instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entity);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entity);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerLightning(handler, scriptPlayer);
|
2021-10-15 09:17:31 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(PlaySoundAtEntityEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entity == null || event.entity.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entity.worldObj instanceof WorldServer) {
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entity instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entity);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entity);
|
2025-03-13 17:14:45 -04:00
|
|
|
EventHooks.onPlayerSound(handler, scriptPlayer, event.name, event.pitch, event.volume);
|
2021-10-15 09:17:31 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(LivingDeathEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving == null || event.entityLiving.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving.worldObj instanceof WorldServer) {
|
2024-01-30 21:50:19 -05:00
|
|
|
Entity source = NoppesUtilServer.GetDamageSource(event.source);
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityLiving instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving);
|
2022-10-03 22:48:18 -04:00
|
|
|
try {
|
2025-02-10 18:12:58 -05:00
|
|
|
CustomEffectController.getInstance().killEffects((EntityPlayer) event.entityLiving);
|
|
|
|
|
|
2022-10-03 22:48:18 -04:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityLiving);
|
2025-03-13 17:14:45 -04:00
|
|
|
EventHooks.onPlayerDeath(handler, scriptPlayer, event.source, source);
|
|
|
|
|
} catch (Exception ignored) {
|
|
|
|
|
}
|
2025-04-26 20:52:08 -04:00
|
|
|
|
|
|
|
|
EntityPlayer player = (EntityPlayer) event.entityLiving;
|
|
|
|
|
PlayerData playerData = PlayerData.get(player);
|
2026-02-15 23:15:50 -05:00
|
|
|
// Cancel any executing ability on death
|
|
|
|
|
playerData.abilityData.interruptCurrentAbility();
|
2025-06-29 14:40:49 -04:00
|
|
|
if (ConfigScript.ClearActionsOnDeath)
|
|
|
|
|
playerData.actionManager.clear();
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.source.getEntity() instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.source.getEntity());
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.source.getEntity());
|
2025-03-13 17:14:45 -04:00
|
|
|
EventHooks.onPlayerKills(handler, scriptPlayer, event.entityLiving);
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-07 12:49:30 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(LivingAttackEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving == null || event.entityLiving.worldObj == null)
|
2022-07-07 12:49:30 -05:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving.worldObj instanceof WorldServer) {
|
2024-10-23 21:16:59 -04:00
|
|
|
boolean cancel = event.isCanceled();
|
2024-01-30 21:50:19 -05:00
|
|
|
Entity source = NoppesUtilServer.GetDamageSource(event.source);
|
2026-02-28 23:23:52 -05:00
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityLiving instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving);
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.AttackedEvent pevent = new noppes.npcs.scripted.event.player.PlayerEvent.AttackedEvent((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayer) event.entityLiving), source, event.ammount, event.source);
|
2024-10-23 21:16:59 -04:00
|
|
|
cancel = EventHooks.onPlayerAttacked(handler, pevent);
|
2022-07-07 12:49:30 -05:00
|
|
|
}
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.source.getEntity() instanceof EntityPlayerMP) {
|
2025-12-30 19:41:02 -05:00
|
|
|
EntityPlayerMP playerMP = (EntityPlayerMP) event.source.getEntity();
|
2026-01-22 23:07:38 -05:00
|
|
|
if (playerMP.getHeldItem() != null) {
|
2025-12-30 19:41:02 -05:00
|
|
|
IItemStack itemStack = NpcAPI.Instance().getIItemStack(playerMP.getHeldItem());
|
|
|
|
|
if (itemStack instanceof ScriptCustomizableItem) {
|
|
|
|
|
ScriptCustomizableItem sci = (ScriptCustomizableItem) itemStack;
|
|
|
|
|
int attackSpeed = sci.getAttackSpeed();
|
2025-12-31 00:52:06 +00:00
|
|
|
if (event.entityLiving.hurtResistantTime <= event.entityLiving.maxHurtResistantTime - attackSpeed) {
|
2025-12-31 00:45:26 +00:00
|
|
|
event.entityLiving.hurtResistantTime = 0;
|
|
|
|
|
}
|
2025-12-30 19:41:02 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.source.getEntity());
|
2025-02-27 13:47:09 -05:00
|
|
|
float attackAmount = event.ammount;
|
2026-03-03 04:06:34 -05:00
|
|
|
AttributeAttackUtil.lastAttackCritted = null;
|
|
|
|
|
if (ConfigMain.AttributesEnabled && !DBCAddon.IsAvailable()) {
|
|
|
|
|
EntityPlayer attackPlayer = (EntityPlayer) event.source.getEntity();
|
|
|
|
|
attackAmount = AttributeAttackUtil.calculateOutgoing(attackPlayer, attackAmount);
|
|
|
|
|
// For vanilla/modded mob targets, roll crit once and store for LivingHurtEvent
|
|
|
|
|
if (!(event.entityLiving instanceof EntityPlayerMP) && !(event.entityLiving instanceof EntityNPCInterface)) {
|
|
|
|
|
PlayerAttributeTracker tracker = AttributeController.getTracker(attackPlayer);
|
|
|
|
|
if (AttributeAttackUtil.rollCrit(tracker)) {
|
|
|
|
|
AttributeAttackUtil.lastAttackCritted = true;
|
|
|
|
|
attackAmount = AttributeAttackUtil.applyCritDamage(attackAmount, tracker);
|
|
|
|
|
} else {
|
|
|
|
|
AttributeAttackUtil.lastAttackCritted = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-27 13:47:09 -05:00
|
|
|
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.AttackEvent pevent1 = new noppes.npcs.scripted.event.player.PlayerEvent.AttackEvent((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayer) event.source.getEntity()), event.entityLiving, attackAmount, event.source);
|
2024-10-23 21:16:59 -04:00
|
|
|
cancel = cancel || EventHooks.onPlayerAttack(handler, pevent1);
|
2022-07-07 12:49:30 -05:00
|
|
|
}
|
2026-03-01 00:09:57 -05:00
|
|
|
|
|
|
|
|
// Dodge & Counter: cancel attack entirely
|
|
|
|
|
if (!cancel && event.entityLiving instanceof EntityPlayerMP) {
|
|
|
|
|
PlayerData pData = PlayerData.get((EntityPlayer) event.entityLiving);
|
|
|
|
|
if (pData != null && pData.abilityData != null) {
|
|
|
|
|
AbilityDefend defend = pData.abilityData.getActiveDefend();
|
|
|
|
|
if (defend instanceof AbilityDodge || defend instanceof AbilityCounter) {
|
|
|
|
|
EntityLivingBase attacker = source instanceof EntityLivingBase ? (EntityLivingBase) source : null;
|
|
|
|
|
float result = defend.onDefend(attacker, event.source, event.ammount);
|
|
|
|
|
if (result != event.ammount) {
|
|
|
|
|
cancel = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-23 21:16:59 -04:00
|
|
|
event.setCanceled(cancel);
|
2022-07-07 12:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-22 00:36:14 -04:00
|
|
|
@SubscribeEvent(priority = EventPriority.LOWEST)
|
2021-10-11 06:49:30 -05:00
|
|
|
public void invoke(LivingHurtEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving == null || event.entityLiving.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.entityLiving.worldObj instanceof WorldServer) {
|
2024-10-23 21:16:59 -04:00
|
|
|
boolean cancel = event.isCanceled();
|
2024-01-30 21:50:19 -05:00
|
|
|
Entity source = NoppesUtilServer.GetDamageSource(event.source);
|
2025-02-27 13:47:09 -05:00
|
|
|
// Player to Player Interaction
|
2025-10-28 00:44:41 -04:00
|
|
|
if (ConfigMain.AttributesEnabled && !DBCAddon.IsAvailable()) {
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityLiving instanceof EntityPlayerMP && source instanceof EntityPlayerMP) {
|
2025-04-26 05:10:25 -04:00
|
|
|
event.ammount = AttributeAttackUtil.calculateDamagePlayerToPlayer((EntityPlayer) source, (EntityPlayer) event.entityLiving, event.ammount);
|
2025-03-13 17:14:45 -04:00
|
|
|
} else if (!(event.entityLiving instanceof EntityNPCInterface) && source instanceof EntityPlayer) {
|
2025-03-03 16:12:30 -05:00
|
|
|
event.ammount = AttributeAttackUtil.calculateOutgoing((EntityPlayer) source, event.ammount);
|
2026-03-03 04:06:34 -05:00
|
|
|
if (AttributeAttackUtil.lastAttackCritted != null) {
|
|
|
|
|
// Use the crit decision from LivingAttackEvent
|
|
|
|
|
if (AttributeAttackUtil.lastAttackCritted)
|
|
|
|
|
event.ammount = AttributeAttackUtil.applyCritDamage(event.ammount, AttributeController.getTracker((EntityPlayer) source));
|
|
|
|
|
AttributeAttackUtil.lastAttackCritted = null;
|
|
|
|
|
} else {
|
|
|
|
|
// Fallback: roll independently (no preceding LivingAttackEvent)
|
|
|
|
|
event.ammount = AttributeAttackUtil.applyCrit(event.ammount, AttributeController.getTracker((EntityPlayer) source));
|
|
|
|
|
}
|
2025-02-27 13:47:09 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.entityLiving instanceof EntityPlayerMP) {
|
2026-02-28 23:23:52 -05:00
|
|
|
// Handle ability damage interactions
|
2026-02-12 18:53:40 -05:00
|
|
|
PlayerData pData = PlayerData.get((EntityPlayer) event.entityLiving);
|
|
|
|
|
if (pData != null && pData.abilityData != null && pData.abilityData.isExecutingAbility()) {
|
2026-02-22 16:33:01 -05:00
|
|
|
if (pData.abilityData.isCurrentAbilityInvulnerable()) {
|
|
|
|
|
event.ammount = 0;
|
|
|
|
|
cancel = true;
|
|
|
|
|
} else {
|
2026-03-01 00:09:57 -05:00
|
|
|
// Guard: reduce damage
|
|
|
|
|
AbilityDefend defend = pData.abilityData.getActiveDefend();
|
|
|
|
|
if (defend instanceof AbilityGuard) {
|
|
|
|
|
EntityLivingBase attacker = source instanceof EntityLivingBase ? (EntityLivingBase) source : null;
|
|
|
|
|
event.ammount = defend.onDefend(attacker, event.source, event.ammount);
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-28 23:23:52 -05:00
|
|
|
float modified = pData.abilityData.onDamage(event.source, event.ammount);
|
|
|
|
|
event.ammount = modified;
|
2026-02-22 16:33:01 -05:00
|
|
|
}
|
2026-02-12 18:53:40 -05:00
|
|
|
}
|
|
|
|
|
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) event.entityLiving);
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.DamagedEvent pevent = new noppes.npcs.scripted.event.player.PlayerEvent.DamagedEvent((IPlayer) NpcAPI.Instance().getIEntity((EntityPlayer) event.entityLiving), source, event.ammount, event.source);
|
2026-02-28 23:23:52 -05:00
|
|
|
cancel = cancel || EventHooks.onPlayerDamaged(handler, pevent);
|
2021-10-12 02:57:32 -05:00
|
|
|
event.ammount = pevent.damage;
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (source instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts((EntityPlayer) source);
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.DamagedEntityEvent pevent1 = new noppes.npcs.scripted.event.player.PlayerEvent.DamagedEntityEvent((IPlayer) NpcAPI.Instance().getIEntity(source), event.entityLiving, event.ammount, event.source);
|
2024-10-23 21:16:59 -04:00
|
|
|
cancel = cancel || EventHooks.onPlayerDamagedEntity(handler, pevent1);
|
2021-10-12 02:57:32 -05:00
|
|
|
event.ammount = pevent1.damage;
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
2024-10-23 21:16:59 -04:00
|
|
|
|
|
|
|
|
event.setCanceled(cancel);
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-15 09:17:31 -05:00
|
|
|
@SubscribeEvent
|
|
|
|
|
public void invoke(PlayerEvent.PlayerRespawnEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) {
|
2026-02-18 23:16:01 -05:00
|
|
|
// Reset ability state for reconstructed entity and re-sync to client.
|
|
|
|
|
// The death handler already interrupted the ability (with events/cooldowns),
|
|
|
|
|
// so this just cleans up transient state and syncs the new entity.
|
2026-02-15 23:15:50 -05:00
|
|
|
PlayerData playerData = PlayerData.get(event.player);
|
|
|
|
|
if (playerData != null) {
|
2026-02-18 23:16:01 -05:00
|
|
|
playerData.abilityData.resetOnRespawn();
|
2026-02-15 23:15:50 -05:00
|
|
|
}
|
|
|
|
|
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerRespawn(handler, scriptPlayer);
|
2021-10-15 09:17:31 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-11 06:49:30 -05:00
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerEvent.PlayerLoggedInEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-04-08 21:09:18 -04:00
|
|
|
if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player);
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerLogin(handler, scriptPlayer);
|
2022-05-27 14:32:24 -05:00
|
|
|
|
2025-04-08 22:48:32 -04:00
|
|
|
PlayerData playerData = PlayerData.get(event.player);
|
2024-03-15 15:43:29 -04:00
|
|
|
Quest quest = (Quest) playerData.questData.getTrackedQuest();
|
2022-05-27 14:32:24 -05:00
|
|
|
if (quest != null) {
|
2024-03-15 15:43:29 -04:00
|
|
|
Party party = playerData.getPlayerParty();
|
2025-03-13 17:14:45 -04:00
|
|
|
if (party != null && party.getQuest() != null && party.getQuest().getId() == quest.getId()) {
|
2024-03-15 15:43:29 -04:00
|
|
|
NoppesUtilPlayer.sendPartyTrackedQuestData((EntityPlayerMP) event.player, party);
|
2025-03-13 17:14:45 -04:00
|
|
|
} else {
|
2024-03-15 15:43:29 -04:00
|
|
|
NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player);
|
|
|
|
|
}
|
2022-05-27 14:32:24 -05:00
|
|
|
}
|
2022-06-15 01:38:51 -05:00
|
|
|
|
2025-04-08 22:48:32 -04:00
|
|
|
PlayerData.get(event.player).skinOverlays.updateClient();
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(PlayerEvent.PlayerLoggedOutEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-05-20 13:53:26 -04:00
|
|
|
if (event.player.worldObj instanceof WorldServer && event.player instanceof EntityPlayerMP) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player);
|
2025-04-26 05:46:54 -04:00
|
|
|
AttributeController.removeTracker(event.player.getUniqueID());
|
2021-12-18 08:34:30 -06:00
|
|
|
EventHooks.onPlayerLogout(handler, scriptPlayer);
|
2021-10-11 06:49:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubscribeEvent(
|
2025-03-13 17:14:45 -04:00
|
|
|
priority = EventPriority.HIGHEST
|
2021-10-11 06:49:30 -05:00
|
|
|
)
|
2021-10-12 02:57:32 -05:00
|
|
|
public void invoke(net.minecraftforge.event.ServerChatEvent event) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player == null || event.player.worldObj == null)
|
2022-01-15 22:49:07 -06:00
|
|
|
return;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (event.player.worldObj instanceof WorldServer && !event.player.equals(EntityNPCInterface.chateventPlayer)) {
|
2025-04-09 01:55:34 -04:00
|
|
|
PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.player);
|
2022-05-11 22:08:31 -05:00
|
|
|
IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player);
|
2021-10-11 06:49:30 -05:00
|
|
|
String message = event.message;
|
2025-04-08 22:37:26 -04:00
|
|
|
noppes.npcs.scripted.event.player.PlayerEvent.ChatEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.ChatEvent(scriptPlayer, event.message);
|
2021-10-11 06:49:30 -05:00
|
|
|
EventHooks.onPlayerChat(handler, ev);
|
|
|
|
|
event.setCanceled(ev.isCanceled());
|
2025-03-13 17:14:45 -04:00
|
|
|
if (!message.equals(ev.message)) {
|
2021-10-11 06:49:30 -05:00
|
|
|
ChatComponentTranslation chat = new ChatComponentTranslation("", new Object[0]);
|
|
|
|
|
chat.appendSibling(ForgeHooks.newChatWithLinks(ev.message));
|
|
|
|
|
event.component = chat;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-07 22:22:39 -05:00
|
|
|
}
|