Staff Casting Requirements and Troubleshooting 1.12.2 - Herbertofury/Advent-of-Ascension GitHub Wiki
Home · Staff rune costs and hand safety
Why a historical staff will not cast
Minecraft 1.12.2 / AoA 3.3.6. Before spending runes, the base staff path calls a precondition method. 29 of 57 staves customize that gate. The remaining 28 use the base non-null result; that does not bypass rune payment or establish that every later spell action succeeds.

Diagnose a failed cast in order
- Check the release, the exact staff, and the hand-pairing and rune-payment warnings.
- For a staff below, satisfy its specific gate before assuming it is broken or crafting more supplies.
- Put all required rune types in ordinary inventory slots. A precondition passing does not establish that rune payment passes.
- A null precondition returns failure before the base method's payment, cooldown and wear. A failure inside the later cast function is a separate situation that can happen after those changes.
- If the gate and supplies are correct, investigate the actual cast/projectile path and mod compatibility. This guide does not certify those later stages.
Exact gate by staff
Open each weapon for its portrait, rune quantities and direct recipe/drop searches.
| Staff | Entry requirement | Practical check |
|---|---|---|
| Atlantic Staff | At least one IMob-matching target in the caster bounding box expanded by 10 on each axis. | Move close to an eligible hostile mob. The 10 value expands a box, not a spherical radius; this precondition does not add a line-of-sight test. |
| Candy Staff | At least one IMob-matching target in the caster bounding box expanded by 10 on each axis. | Move close to an eligible hostile mob. The 10 value expands a box, not a spherical radius; this precondition does not add a line-of-sight test. |
| Celestial Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Concussion Staff | At least one IMob-matching target in the caster bounding box expanded by 8 on each axis. | Move close to an eligible hostile mob. The 8 value expands a box, not a spherical radius; this precondition does not add a line-of-sight test. |
| Coral Staff | The selected surrounding shell positions contain exact vanilla AIR and pass the selected player mining-permission check. | This is not a universal claim/protection compatibility check. The later spell places blocks, so test it away from valuable builds. |
| Crystal Staff | At least one eligible vulnerable player in a box expanded by 20 whose health differs from max health. | The predicate excludes spectator, Creative and damage-disabled players. The check is health != max, not an explicit team/friendship check; success returns the whole eligible player list. |
| Crystik Staff | At least one IMob-matching target without the checked MAGIC_IMMUNE property, in a box expanded by 10. | A nearby mob can still fail this predicate because of its explicit magic immunity property; no promise about all other defenses. |
| Cryston Staff | At least one IMob-matching target in the caster bounding box expanded by 10 on each axis. | Move close to an eligible hostile mob. The 10 value expands a box, not a spherical radius; this precondition does not add a line-of-sight test. |
| Everfight Staff | Caster health / max health is strictly greater than 0 and strictly less than 1. | At full health the precondition returns null; the fraction is tested before rune payment. |
| Evermight Staff | Caster health / max health is strictly greater than 0 and strictly less than 1. | At full health the precondition returns null; the fraction is tested before rune payment. |
| Firestorm Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Fungal Staff | The sampled 5×5×5 offsets around caster coordinates include grass or a BlockMushroom. | The collected entries distinguish grass from mushrooms. This only establishes a workable list, not successful growth or placement. |
| Joker Staff | At least one IMob-matching target in the caster bounding box expanded by 10 on each axis. | Move close to an eligible hostile mob. The 10 value expands a box, not a spherical radius; this precondition does not add a line-of-sight test. |
| Lightning Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Lightshine | At least one IMob-matching target in the caster bounding box expanded by 10 on each axis. | Move close to an eligible hostile mob. The 10 value expands a box, not a spherical radius; this precondition does not add a line-of-sight test. |
| Lunar Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Lyonic Staff | At least one alive IMob in a box expanded by 10 horizontally and 1 vertically. | Large vertical separation can exclude a target even if it looks nearby horizontally. |
| Meteor Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Moonlight Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Nature Staff | A block in the caster box expanded by 10 implements IGrowable and its canGrow(..., false) returns true. | A fully grown crop can fail the growth predicate. Each block owns its growability rule. |
| Nightmare Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Reef Staff | The caster reports being in water. | Rain, an ocean biome label or water nearby alone is not this check. |
| Runic Staff | Caster is an EntityPlayer. | The precondition itself adds no target check. This is not proof that every later cast action succeeds. |
| Show Staff | At least one IMob-matching target in the caster bounding box expanded by 30 on each axis. | Move close to an eligible hostile mob. The 30 value expands a box, not a spherical radius; this precondition does not add a line-of-sight test. |
| Sky Staff | The caster onGround flag is true. | Try from a grounded position; the check does not prove clear airspace for what the spell does next. |
| Striker Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Tangle Staff | Player caster with a non-null block ray trace using distance input 70. | Aim at a reachable block rather than empty sky. This does not check a clear overhead path for the later spell. |
| Warlock Staff | Caster is an EntityPlayer. | The precondition itself adds no target check. This is not proof that every later cast action succeeds. |
| Web Staff | At least one active potion whose isBadEffect flag is true. | This checks the game potion flag, not every possible harmful condition. Fire, hunger or a mod custom status is not automatically included. |
Boxes are not spherical ranges
The hostile-area gates expand the caster's existing axis-aligned bounding box. Their 8, 10, 20 or 30 inputs are not a Euclidean sphere centered on a point. Lyonic is especially different: its expansion is 10, 1, 10. The selected hostile predicates also do not perform a line-of-sight check themselves. Do not turn these input values into universal combat ranges or claim all effects pass through walls.
The nine block-aiming gates
Celestial, Firestorm, Lightning, Lunar, Meteor, Moonlight, Nightmare, Striker and Tangle call the same aiming helper with 70. The helper starts at the player's eye position, constructs an endpoint from yaw/pitch and that distance, then calls the world's block ray trace with the three boolean flags true, true, false. A null trace produces a null gate.
This is a block trace, not a creature-target selector. It is not a proof of clear sky, chunk readiness, projectile impact or an exact maximum damage distance. Any additional spell restrictions must be documented from the cast path separately.
Coral's shell is a bounded placement search
Coral checks selected faces around the caster's block position using offsets −2 through 2, with different loop bounds for the face passes. Candidates must be exact vanilla AIR; for a player it also calls the provider's canMineBlock check. This does not establish full compatibility with arbitrary claim or protection mods, nor does it promise the later placement succeeds.
Restoration tests worth preserving
- For all 29 custom gates, test one accepted and one rejected situation and verify no rune/wear/cooldown change on a rejected gate.
- Compare empty sky and block hits for all nine shared aiming cases.
- Test box corners and vertical separation instead of only straight-line distances.
- Check full, partial and zero health, effect-free players, Creative/spectator players and mod-specific immunity flags separately.
- Separate entry-gate behavior from cast effects, projectile spawns, healing, protection handling and multiplayer synchronization.
29 exact preconditions and supporting method evidence · Per-staff reviewed gate summaries.