
Overgrown's Apoli
A data-driven power system that's build for custom abilities, mechanics, and entire origin systems from JSON alone.
Список изменений
-
Fixed a hard crash that happened whenever Apoli was installed alongside any version of Thirst. Every Thirst variant — Thirst Was Reclaimed and the original Thirst Mod, on both 1.20.1 and 1.21.1 — redirects the two
Player.healcalls insideFoodData.tickso it can gate natural regeneration on your hydration. Apoli'sdisable_regenpower was redirecting those same two calls without specifying which one it wanted, so it claimed both of them, and Mixin refuses to let two mods redirect the same instruction. Apoli now wraps the calls with a condition instead of redirecting them, which coexists with Thirst's redirect: Thirst's healing logic still replaces the call, and Apoli's condition decides whether that logic runs at all. That also meansapoli:disable_regencorrectly suppresses Thirst's dehydration-gated healing rather than fighting with it. Nothing changes for anyone not running a Thirst mod. -
Fixed
render_armorandrender_outlineonapoli:invisibility, which never did anything. Both fields were read out of the power's JSON and then simply ignored, so an invisible player kept their armor floating in mid-air and kept their glowing outline. Setting"render_armor": falsenow hides the armor layer, and"render_outline": falsenow hides the glow outline. Both flags only take effect while the entity is actually invisible to the person looking at it, so a power that uses abientity_conditionto hide you from only some observers will still show your armor and outline normally to everyone who can see you. This works for any entity with the power, not just players, and it respects power suppression and the power's ownconditionthe same way the rest of invisibility does. -
The
cooldownfield now accepts an expression instead of only a fixed number, onapoli:action_on_key_press,apoli:action_on_key_sequence,apoli:action_on_hit,apoli:action_when_hit,apoli:action_on_kill,apoli:action_on_collision,apoli:fire_projectileandapoli:game_event_listener. Theapoli:cooldownpower already supported this; the rest do now too. Writing"cooldown": 20still works exactly as before, and every existing data pack parses unchanged, but you can also write something like"cooldown": "40 - mypack:haste * 4"to make an ability recharge faster as a resource fills up. The expression is evaluated against the power's holder at the moment the cooldown is applied, so it reflects the holder's state at that instant rather than being frozen when the pack loads. -
Cooldown expressions are also re-evaluated when something asks for the cooldown's maximum, which means the HUD cooldown bar and
apoli:resourcecomparisons against the power'smaxfollow the current value instead of reporting a stale one. A plain number still costs nothing extra — constant expressions are folded when the pack loads.
