Add a Pre Event

This commit is contained in:
Kam committed 2025-04-22 18:53:07 -04:00
1 parent 7e15c598a2
commit 6e2176de0e
3 files changed
+28 -17

No files matched your search

@@ -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<IAttributeRecalcListener> 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<PreListener> preListeners = new ArrayList<>();
private static final List<Listener> 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);
}
}
@@ -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);