Add new advancements, weapon scaling tooltips, passive agility API, and attribute scaling logic
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package net.fretux.ascend.api;
|
||||
|
||||
import net.fretux.ascend.api.event.PassiveAgilityEvent;
|
||||
import net.fretux.ascend.player.AttributeScaling;
|
||||
import net.fretux.ascend.player.PlayerStatsProvider;
|
||||
import net.fretux.ascend.player.StatEffects;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
/** Public entry point for Ascend's passive Agility integration. */
|
||||
public final class PassiveAgilityApi {
|
||||
private PassiveAgilityApi() {}
|
||||
|
||||
/** Collects all passive Agility contributions registered for this player. */
|
||||
public static int getPassiveAgility(Player player, int investedAgility) {
|
||||
PassiveAgilityEvent event = new PassiveAgilityEvent(player, investedAgility);
|
||||
MinecraftForge.EVENT_BUS.post(event);
|
||||
return event.getPassiveAgility();
|
||||
}
|
||||
|
||||
/** Returns invested and passive Agility, saturating safely at the integer limit. */
|
||||
public static int getTotalAgility(Player player, int investedAgility) {
|
||||
long total = (long) Math.max(0, investedAgility) + getPassiveAgility(player, investedAgility);
|
||||
return (int) Math.min(Integer.MAX_VALUE, total);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Agility normalized against the normal investment cap. Values may
|
||||
* exceed {@code 1.0} when integrations supply passive points above that cap.
|
||||
*/
|
||||
public static double getNormalizedAgility(Player player, int investedAgility) {
|
||||
return AttributeScaling.getExtendedNormalizedAttributeValue(getTotalAgility(player, investedAgility));
|
||||
}
|
||||
|
||||
/** Recalculates the player's movement-speed modifier after passive Agility changes. */
|
||||
public static void refresh(Player player) {
|
||||
player.getCapability(PlayerStatsProvider.PLAYER_STATS).ifPresent(stats ->
|
||||
StatEffects.applyAgility(player, stats.getAttributeLevel("agility")));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user