promotional bannermobile promotional banner

Overgrown's Apoli

A data-driven power system that's build for custom abilities, mechanics, and entire origin systems from JSON alone.
Back to Files

Apoli (1.29.0)

File nameapoli-1.29.0.jar
Uploader
OvergrownMCOvergrownMC
Uploaded
Aug 8, 2026
Downloads
11
Size
28.4 MB
Mod Loaders
Fabric
File ID
8602393
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

Fabric

modImplementation "curse.maven:apoli-1631826:8602393"

Learn more about Curse Maven

What's new

Added

  • apoli:attack_charge — a damage condition and an entity condition (same id, different kinds) that reads how far the attacker's attack-strength meter had recharged. Aliases: apoli:spam_attack, apoli:attack_cooldown. The defaults (comparison: "<=", compare_to: 0.9) mean "this hit was thrown before the meter refilled" — i.e. the player was click-spamming — and 0.9 is the same threshold vanilla itself uses to decide whether a hit earns a crit or a sweep. Add "inverted": true for the opposite. compare_to accepts an expression, so the threshold can be driven off a resource or attribute.

    Note that the damage-condition flavor is only ever true for player mêlée attacks. Projectiles, fall damage, mob attacks and damage dealt by other powers never record a charge, so it is false for all of them — and therefore true for all of them once inverted. Pair the inverted form with an attacker or damage-type check when you mean "a properly timed mêlée hit".

  • apoli:disable_slot — a power type that makes one or more inventory slots refuse items. It generalises apoli:restrict_armor from the four armour slots to anything in the player's own inventory: hotbar.0hotbar.8, inventory.0inventory.26, armor.head/chest/legs/feet, weapon.mainhand and weapon.offhand. Takes slot and/or slots, plus an optional item_condition — with a condition only matching items are refused, without one the slot is sealed entirely. Alias: apoli:restrict_slot.

    A disabled slot is refused three ways: the GUI will not let you drop an item into it, item pickup routes around it, and anything already sitting there is ejected to the ground on the next tick — the same behaviour apoli:restrict_armor already had for armour. weapon.mainhand tracks the currently selected hotbar slot rather than a fixed index.

  • apoli:change_slot — an entity action that swaps or moves the contents of two slots. Takes slot_a, slot_b and operation (swap, the default, or move). Works on the player inventory or on an apoli:inventory power's container via inventory_type + power. Aliases: apoli:swap_slot, apoli:move_slot.

    move discards whatever was in slot_b. Use swap unless you mean to delete it.

  • apoli:change_selected_slot — an entity action that changes which hotbar slot the player is holding. slot is 08, or an offset when relative: true (-1 cycles left, wrapping around). Alias: apoli:set_selected_slot.

  • override_pose on apoli:modify_model_parts — a list of entity poses whose vanilla animation is thrown away before the power's transformations run, so an author writing, say, a swimming animation starts from the standing pose instead of layering on top of vanilla's swim stroke. Covers the model (swim stroke, crouch offsets, elytra lean, riding legs) and the body rotation the renderer applies for swimming, fall_flying, spin_attack, crouching and sleeping.

  • In-game settings screens for Apoli and Origins, reachable from Mod Menu, Catalogue and Menulogue without editing the config files by hand. Apoli's screen exposes every speech-to-action option (apoli-client.json); Origins' exposes the GUI theme (origins.json). On NeoForge both hook NeoForge's own mod-list config button, which Catalogue also reads. Both mods now carry an icon in the mod list too.

  • 3D Skin Layers compatibility. Its extruded hat/jacket/sleeve/trouser layers now follow apoli:model_color (whole-model and per-part, including alpha), disappear when apoli:custom_model_render or apoli:modify_player_model replaces the skin, honour the hidden transform type of apoli:modify_model_parts, and can be switched off with apoli:prevent_feature_render under the feature name skin_layers_3d.

  • Ears compatibility. Ears, horns, snouts, tails, wings and claws are tinted by apoli:model_color (alpha included, so a fading player fades whole), and are hidden when a custom model replaces the skin, when the model is fully transparent, or via apoli:prevent_feature_render under ears — or per feature, ears_tail, ears_wings, ears_snout and so on.

    Both integrations are compile-time-optional and gated on the mod being present, so nothing changes when they are not installed.

Fixed

  • Delayed actions kept running for entities that no longer exist. apoli:delay and apoli:loop captured the entities they were acting on and never re-checked them, and apoli:loop re-arms itself each interval — so a chain started by a summon carried on firing after that summon died, forever, and nothing could stop it. This is what was behind clones whose damage kept landing after they had visibly been killed, which /kill could not fix because the entity was already gone. Both actions now drop the rest of the chain the moment a participant is removed or changes dimension. Failures inside a delayed action are also logged now instead of being swallowed silently.
  • Summon lifetimes were reset by a chunk reload. max_life_ticks was measured against a counter Minecraft does not save, so a clone or minion that survived its chunk unloading started its clock again and could live indefinitely. The remaining time is now saved with the entity.
  • Clones died instantly on Peaceful. apoli:summon_clone produced an entity Minecraft treats as a monster, and monsters are removed on Peaceful before their "never despawn" flag is even consulted — so on a Peaceful world every clone vanished on its first tick regardless of max_life_ticks. Clones now survive Peaceful.
  • /apoli:clone list now reports each clone's remaining lifetime alongside its configured one.

Changed

  • Suppressed powers are excluded from the tick list when it is built, rather than being skipped one by one every tick. Holding a large number of dormant powers now costs nothing per tick. Added batched suppress/unsuppress and unsuppressAllFromSource to the PowerContainer API for addons.

This mod has no related projects