diff --git a/src/main/java/kamkeel/npcs/network/packets/data/ability/AbilityCooldownSyncPacket.java b/src/main/java/kamkeel/npcs/network/packets/data/ability/AbilityCooldownSyncPacket.java index 484cc602c..aa7dd62aa 100644 --- a/src/main/java/kamkeel/npcs/network/packets/data/ability/AbilityCooldownSyncPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/data/ability/AbilityCooldownSyncPacket.java @@ -10,6 +10,7 @@ import kamkeel.npcs.network.enums.EnumDataPacket; import kamkeel.npcs.util.ByteBufUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.client.ClientCacheHandler; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.data.PlayerData; @@ -86,7 +87,7 @@ public final class AbilityCooldownSyncPacket extends AbstractPacket { perDurations.put(key, duration); } - PlayerData data = PlayerData.get(player); + PlayerData data = ClientCacheHandler.playerData; if (data != null && data.abilityData != null) { data.abilityData.applyCooldownSync(globalEndTime, globalDuration, perEndTimes, perDurations); } diff --git a/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java b/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java index 08df836aa..2353623b2 100644 --- a/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/data/ability/PlayerAbilitySyncPacket.java @@ -11,6 +11,7 @@ import kamkeel.npcs.util.ByteBufUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.client.ClientCacheHandler; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.data.PlayerData; @@ -53,7 +54,7 @@ public final class PlayerAbilitySyncPacket extends AbstractPacket { NBTTagCompound nbt = ByteBufUtils.readNBT(in); if (nbt == null) return; - PlayerData data = PlayerData.get(player); + PlayerData data = ClientCacheHandler.playerData; if (data != null) { data.abilityData.readFromNBT(nbt); } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index 05d6b0889..3da3ccc56 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -147,10 +147,7 @@ public class ScriptPlayerEventHandler { EntityPlayerMP mp = (EntityPlayerMP) player; SyncController.syncEffects(mp); SyncController.syncAbilityCooldowns(mp); - if (playerData.abilityData.needsSync) { - PlayerAbilitySyncPacket.sendToPlayer(mp); - playerData.abilityData.needsSync = false; - } + PlayerAbilitySyncPacket.sendToPlayer(mp); playerData.abilityData.ensureLockStateClear(); } diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index 170d706cf..cd889fa5b 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -417,7 +417,8 @@ public class ClientProxy extends CommonProxy { @Override public PlayerData getPlayerData(EntityPlayer player) { - if (player.getUniqueID() == Minecraft.getMinecraft().thePlayer.getUniqueID()) { + EntityPlayer local = Minecraft.getMinecraft().thePlayer; + if (local != null && player.getUniqueID().equals(local.getUniqueID())) { if (ClientCacheHandler.playerData != null) { if (ClientCacheHandler.playerData.player != player) { ClientCacheHandler.playerData.player = player; diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java b/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java index 2230e18c4..f5a36e836 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerAbilityData.java @@ -91,14 +91,6 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA */ private transient byte lastSyncedFlags = 0; - /** - * Dirty flag: set when ability data changes (unlock/lock/select/toggle). - * Checked by the periodic 10-tick sync handler, which sends an ability - * data packet and clears the flag. Avoids scattering sync calls across - * every mutation method. - */ - public transient boolean needsSync = false; - /** * World time when the last ability was activated (for double-press cancel detection). */ @@ -497,7 +489,6 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA @Override protected void onToggleStateChanged(String key, boolean active, int state) { - needsSync = true; } @Override @@ -534,20 +525,17 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA public void setSelectedIndex(int index) { if (index == -1 || (index >= 0 && index < unlockedAbilities.size())) { this.selectedIndex = index; - needsSync = true; } } public void selectNext() { if (unlockedAbilities.isEmpty()) return; selectedIndex = (selectedIndex + 1) % unlockedAbilities.size(); - needsSync = true; } public void selectPrevious() { if (unlockedAbilities.isEmpty()) return; selectedIndex = (selectedIndex - 1 + unlockedAbilities.size()) % unlockedAbilities.size(); - needsSync = true; } public String getSelectedAbilityKey() { @@ -576,13 +564,11 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA if (selectedIndex >= unlockedAbilities.size()) { selectedIndex = Math.max(0, unlockedAbilities.size() - 1); } - needsSync = true; } public void unlockAbility(String key) { if (key != null && !key.isEmpty() && !unlockedAbilities.contains(key)) { unlockedAbilities.add(key); - needsSync = true; } } @@ -591,7 +577,6 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA if (selectedIndex >= unlockedAbilities.size()) { selectedIndex = Math.max(0, unlockedAbilities.size() - 1); } - needsSync = true; } public boolean hasUnlockedAbility(String key) { @@ -837,7 +822,6 @@ public class PlayerAbilityData extends AbstractDataAbilities implements IPlayerA // Reset sync tracking so next sync sends fresh state lastSyncedFlags = 0; - needsSync = true; } /**