From 9ab883543f4a375884df9df6efc62832f7a6e6b0 Mon Sep 17 00:00:00 2001 From: cheaterpaul Date: Sun, 17 Mar 2024 13:46:17 +0100 Subject: [PATCH] fix skill tree unlock check in FactionPlayerHandler construction --- .../api/entity/factions/IFactionPlayerHandler.java | 8 ++++++++ .../vampirism/entity/factions/FactionPlayerHandler.java | 5 ++--- .../vampirism/entity/player/ModPlayerEventHandler.java | 5 +++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/api/java/de/teamlapen/vampirism/api/entity/factions/IFactionPlayerHandler.java b/src/api/java/de/teamlapen/vampirism/api/entity/factions/IFactionPlayerHandler.java index e9f923ef1..73d55c1bd 100755 --- a/src/api/java/de/teamlapen/vampirism/api/entity/factions/IFactionPlayerHandler.java +++ b/src/api/java/de/teamlapen/vampirism/api/entity/factions/IFactionPlayerHandler.java @@ -119,4 +119,12 @@ public interface IFactionPlayerHandler extends ILordPlayer, IPlayer { * @param die Whether to attack the player with deadly damage */ void leaveFaction(boolean die); + + /** + * Checks which skill trees are unlocked. + * It locks and unlocks the skill trees accordingly. + *

+ * It is called when the player level or lord level changes as well as when the player respawns. But it can be called at any time. + */ + void checkSkillTreeLocks(); } diff --git a/src/main/java/de/teamlapen/vampirism/entity/factions/FactionPlayerHandler.java b/src/main/java/de/teamlapen/vampirism/entity/factions/FactionPlayerHandler.java index 1fd163cd2..60e9a39d3 100755 --- a/src/main/java/de/teamlapen/vampirism/entity/factions/FactionPlayerHandler.java +++ b/src/main/java/de/teamlapen/vampirism/entity/factions/FactionPlayerHandler.java @@ -401,7 +401,8 @@ private void loadBoundActions(@NotNull CompoundTag nbt) { } } - private void checkSkillTreeLocks() { + @Override + public void checkSkillTreeLocks() { if (this.player.level() instanceof ServerLevel level) { Registry registryAccess = this.player.level().registryAccess().registryOrThrow(VampirismRegistries.Keys.SKILL_TREE); getCurrentFactionPlayer().ifPresent(factionPlayer -> { @@ -509,8 +510,6 @@ public void deserializeNBT(@NotNull CompoundTag nbt) { } else { currentLevel = Math.min(nbt.getInt("level"), this.currentFaction.getHighestReachableLevel()); currentLordLevel = Math.min(nbt.getInt("lord_level"), this.currentFaction.getHighestLordLevel()); - this.checkSkillTreeLocks(); - updateCache(); notifyFaction(null, 0); } } diff --git a/src/main/java/de/teamlapen/vampirism/entity/player/ModPlayerEventHandler.java b/src/main/java/de/teamlapen/vampirism/entity/player/ModPlayerEventHandler.java index ef7f22be6..49a59a308 100755 --- a/src/main/java/de/teamlapen/vampirism/entity/player/ModPlayerEventHandler.java +++ b/src/main/java/de/teamlapen/vampirism/entity/player/ModPlayerEventHandler.java @@ -512,4 +512,9 @@ public void onPlayerGameMode(PlayerEvent.PlayerChangeGameModeEvent event) { FactionPlayerHandler.getCurrentFactionPlayer(event.getEntity()).ifPresent(factionPlayer -> factionPlayer.getActionHandler().deactivateAllActions()); } } + + @SubscribeEvent + public void onRespawn(PlayerEvent.PlayerRespawnEvent event) { + FactionPlayerHandler.get(event.getEntity()).checkSkillTreeLocks(); + } }