From 6e2176de0ea1f3f966f4b42cdad971d1bcc8f326 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 22 Apr 2025 18:53:07 -0400 Subject: [PATCH] Add a Pre Event --- .../tracker/AttributeRecalcEvent.java | 40 +++++++++++-------- .../tracker/PlayerAttributeTracker.java | 4 +- .../assets/customnpcs/lang/en_US.lang | 1 + 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/AttributeRecalcEvent.java b/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/AttributeRecalcEvent.java index d82b266a2..ac8e48da6 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/AttributeRecalcEvent.java +++ b/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/AttributeRecalcEvent.java @@ -5,24 +5,32 @@ import net.minecraft.entity.player.EntityPlayer; import java.util.ArrayList; import java.util.List; -public class AttributeRecalcEvent { - private static final List listeners = new ArrayList<>(); - - /** - * Allows other mods to register a listener that is called after attribute recalculation. - */ - public static void registerListener(IAttributeRecalcListener listener) { - if (listener != null && !listeners.contains(listener)) { - listeners.add(listener); - } +public final class AttributeRecalcEvent { + @FunctionalInterface + public interface PreListener { + void onPre(EntityPlayer player, PlayerAttributeTracker tracker); } - /** - * Posts an event to all registered listeners. - */ + private static final List preListeners = new ArrayList<>(); + private static final List postListeners = new ArrayList<>(); + + public static void pre(EntityPlayer player, PlayerAttributeTracker tracker) { + for (PreListener l : preListeners) l.onPre(player, tracker); + } + + @FunctionalInterface + public interface Listener { + void onPost(EntityPlayer player, PlayerAttributeTracker tracker); + } + + public static void registerListener(Listener l) { + postListeners.add(l); + } public static void post(EntityPlayer player, PlayerAttributeTracker tracker) { - for (IAttributeRecalcListener listener : listeners) { - listener.onAttributesRecalculated(player, tracker); - } + for (Listener l : postListeners) l.onPost(player, tracker); + } + + public static void registerPreListener(PreListener l) { + preListeners.add(l); } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/PlayerAttributeTracker.java b/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/PlayerAttributeTracker.java index 5a10af4e5..c888434b5 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/PlayerAttributeTracker.java +++ b/src/main/java/kamkeel/npcs/controllers/data/attribute/tracker/PlayerAttributeTracker.java @@ -31,7 +31,7 @@ public class PlayerAttributeTracker implements IPlayerAttributes { public static UUID knockbackResUUID = UUID.fromString("b2f261e8-34f0-4140-9828-b56c1f6e0ff2"); private final UUID playerId; - private PlayerAttributeMap playerAttributes = new PlayerAttributeMap(); + public PlayerAttributeMap playerAttributes = new PlayerAttributeMap(); public float extraHealth = 0; public float extraHealthBoost = 0; @@ -61,6 +61,8 @@ public class PlayerAttributeTracker implements IPlayerAttributes { magicDefense.clear(); magicResistance.clear(); if (player != null) { + AttributeRecalcEvent.pre(player, this); + // Update equipment tracker. PlayerEquipmentTracker currentEquip = new PlayerEquipmentTracker(); currentEquip.updateFrom(player); diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index f401aa922..92f6c1c8e 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -579,6 +579,7 @@ menu.tags=Tags menu.general=General menu.magics=Magics menu.cycles=Cycles +menu.attributes=Attributes cloner.tagFilters=Tag Filters cloner.tagVisibility=Tag Visibility