
Overgrown's Apoli
A data-driven power system that's build for custom abilities, mechanics, and entire origin systems from JSON alone.
Оцените первым
826
4
Список изменений
1.6.0
Added
Power engine
- Data-driven engine with 90+ built-in power types and full coverage of entity, bi-entity, block, item, damage, and biome conditions and actions, backed by a large data-type library (Expression, Attribute Modifier, Space, Vector, Nbt, ItemStack, Ingredient, Hand, Text Component, Particle Effect, Shape, Model Part Transformation, Stat, and more).
apoli:multiplepower expansion (sub-powers,*:*wildcard) and per-type / per-field aliasing so legacy ids and field names (amount→value,modify_damage_dealt/_taken,self_action_on_hit, …) resolve automatically.- Universal
inverted: trueon every condition wrapper, plus theapoli:invertbi-entity meta (actor/target swap).
Resources, attributes & expressions
apoli:resource/apoli:cooldownpower types with values that persist across restarts, HUD bars, andapoli:modify_resource/apoli:trigger_cooldownactions; anapoli:resourceentity condition; and a/apoli:resourcecommand.apoli:attributepower with per-tick expression re-evaluation, condition gating, and correct max-health / heart syncing.- In-house Expression engine (compile-once, allocation-free) replacing mXparser.
Variables include position, rotation, velocity, health, armor, air, fall distance,
saturation, moon phase, and a
damagevariable bound during hit actions, plus a full math / logic function set. Expressions are accepted by chance, status-effect duration / amplifier, velocity, and damage / heal / feed / xp amounts. Invalid expressions now fail at pack load instead of silently defaulting.
Combat & interaction
apoli:modify_damage(dealt / taken),apoli:action_on_hit/apoli:action_when_hit,apoli:action_on_kill, and damage conditions (amount / type / tag / attacker / projectile / name).- The full
action_on_*family (use, item use, land, death, callback, block break / place / use, item pickup, wake up, …) wired to real runtime hooks. apoli:fire_projectilewith a custom textured projectile entity (texture_location) and per-tick projectile actions.
Movement & body
- Rope / grappling subsystem — ropes anchored to entities or blocks, verlet-simulated rendering, reeling, and omnidirectional air control.
apoli:grab/apoli:release_grab— hold a target in front of the camera with collision-aware movement and axis locks.apoli:pose(per-hand posing), phasing (see-through + client-side block removal), climbing hold, elytra flight,apoli:modify_falling, and the flag / state powers (invulnerability, freeze, shaking, effect_immunity, keep_inventory, starting_equipment, grounded, restrict_armor, disable_regen, …).
Appearance
apoli:entity_texture_overlay,apoli:modify_model_parts, per-partapoli:model_color(including first person), and theapoli:disguisesystem (disguise_as / remove_disguise / disguised) — which also overrides name-tag, chat, and tab-list names.apoli:modify_player_model— addon models and Figura avatars.apoli:custom_model_render— merged texture + geometry via a built-in Blockbench.geo.jsonparser (no GeckoLib required). (Fabric 1.21.1 & NeoForge 1.21.1; Fabric 1.20.1 port in progress.)
Summons & entity data
apoli:summon_clone/apoli:summon_minion/apoli:set_summon_max_life, andapoli:modify_entity_data(gravity, invulnerable, silent, glowing, no-AI, fire, air, …).
UI, text & progression
- Skill Tree system —
skill_treesJSON + in-powerskilldata, an in-game tree screen (defaultK), point costs, refunds, per-skill conditions, and a/apoli:skill_treecommand. apoli:text(title / subtitle / action-bar and custom-anchored text bars),apoli:modify_label_render(name-tag / chat / tab overrides), and theapoli:statcondition + stat actions.- Data-driven keybinds, the
key_pressedcondition,apoli:action_on_key_sequence, andapoli:radial_menu.
Items & world
- Items with powers —
add_power/remove_powerloot functions plus the item power conditions. apoli:game_event_listener(react to vanilla game events),apoli:inventorymenu power,apoli:recipe/ crafting powers,apoli:conjure_equipment, and the loot / particle / tooltip powers.apoli:loopmeta action.
Power management
- Power suppression (
suppress_power/unsuppress_power/prevent_powers),grant_all_powers/revoke_all_powers, and a full/apoli:powercommand. Powers can now be granted to and ticked on any entity type, not just living entities.
Commands
/apoli:power,/apoli:resource,/apoli:skill_tree,/apoli:accessory, and/apoli:disguise— all with configurable permission nodes (falling back to op level 2).
Mod compatibility (each auto-gated on the mod being present)
- Icarus —
apoli:wingsflight. - Figura — avatars through
modify_player_model. - Trinkets / Accessories / Curios — one unified accessory type set (change / equip / slot conditions and actions, equip / unequip prevention, slot-count modifiers).
- Hardcore Revival — knockout / revive conditions and actions.
- Simple Voice Chat — voice conditions (speaking / loudness / listeners / disabled),
action_on_speak/action_on_reply, chat magic-word actions, andapoli:action_on_speechbrowser-based speech-to-action (multi-language). (Fabric 1.21.1 & NeoForge 1.21.1; Fabric 1.20.1 port in progress.)
Platforms
- NeoForge 1.21.1 support added alongside Fabric 1.20.1 and Fabric 1.21.1.
Changed
- Speech-to-action is now opt-in. The in-game browser page and chat link only open
when enabled in
config/apoli-client.json(speechToAction, default off), so players without Simple Voice Chat / speech-to-text aren't prompted. - Addon authors: the voice-chat compat types moved to
dev.overgrown.apoli.compat.voicechat(matching the Icarus / Figura layout). Data packs are unaffected — the type ids are unchanged. apoli:if_else_listnow runs every branch whose condition passes (was first-match-only).apoli:change_statfolded intoapoli:modify_stat; several unused stub power types removed;apoli:textno longer carries redundant color fields (text components style themselves).apoli:loopsupportsticks: 0(all iterations fire the same tick, capped for safety).- Legacy upper-case
Handvalues (MAIN_HAND,OFF_HAND, …) accepted alongside the lower-case forms.
Fixed
- action_on_speech — repeated trigger words register again, language matching is
lenient (
en↔en-US), and detection latency is lower. - action_on_land no longer lets landing explosions damage the entity that landed.
- conjure_equipment (Fabric 1.21.1 only) — the equipment lock and drop-deletion now work (two mixins were unregistered on this loader only).
- Attribute modifiers no longer vanish on death / respawn, and max-health changes no longer leave empty hearts on join.
- Power sync no longer kicks players on servers with very large power sets (oversize packet → chunked, gzipped sync), and non-player entities no longer silently lose their powers on restart.
- Network protocol handshake added so version-mismatched clients / servers degrade gracefully instead of crashing on join.
- NBT conditions now match numeric fields correctly (value-based comparison).
- Rope ghost-strand render, reel speed, and resegmentation fixes.
- Figura equip crash, Polymorph crafting bootstrap crash, and a Pehkui / mixin startup crash all fixed.
- Powers now fire on vanilla keybinds (
key.use,key.attack), not onlykey.apoli.*.
Performance
- Major server-thread overhaul: O(1) power-type lookups, pre-resolved tick lists, cached save NBT (no per-save DFU encode), interned ids, and empty-container fast-outs.
apoli:nbtno longer serializes a player's whole recipe book per check —Tagspredicates are answered with zero serialization, plus a per-tick cache.apoli:action_over_timesamples once per interval (staggered across ticks) instead of evaluating its condition every tick.- Expression evaluation is allocation-free on hot paths (HUD, resource ticks, modifiers).
Файлы
apoli-1.6.0.jar(27.98 MiB)
ОсновнойМетаданные
Канал релиза
Beta
Номер версии
1.6.0
Загрузчики
NeoForge
Версии игры
1.21.1
Загрузок
24
Дата публикации
26.07.2026
