tactical-neoforge-1.21.1-0.28.0.jar
Curse Maven Snippet
What's new
0.28.0 — A blaze that charges, fires its own three native fireballs, and keeps them inside the encounter
Build: 0.28.0, Minecraft 1.21.1 / NeoForge 21.1.216; artifact tactical-neoforge-1.21.1-0.28.0.jar. Protocols unchanged from 0.27.0: Tactical 12, Skill 4, BattleLog 2. The blaze stage and its scoped automated, server, regression and real-client checks are complete; this does not authorize a public release.
- One more monster type is recognised, by exact entity id.
minecraft:blazejoins the registry next to creeper, skeleton, stray, bogged, pillager, witch, vindicator and phantom. No superclass is matched, so no other monster inherits the fireball adapter or the air movement. - The fireball is the real vanilla fireball, built the way vanilla builds it. A blaze is not a
RangedAttackMoband has no callable ranged method, so the salvo creates a genuineSmallFireballwith the entity as its owner, the vanilla spawn point (getY(0.5) + 0.5), the vanillaMth.trianglespread on the two horizontal axes only, the vanillanormalize()launch, and therefore the vanilla 0.1 initial speed, +0.1 per-tick acceleration, 0.95 inertia, no gravity, 5.0 direct fire damage, post-attack enchantment effects and five seconds of ignition. Nothing is faked, no bow is equipped and noperformRangedAttackis invented. - The vanilla charge is the entity's own bit. A minimal mixin invoker exposes
Blaze#setCharged/isCharged, so the presentation is the game'sisOnFire()and not a second flag. The bit is cleared on every exit: normal hand-back, a lost target, a refused salvo, death, removal, an abandoned fall and encounter end. - One own turn is one bounded salvo. 60 ticks of charge, then up to three fireballs six ticks apart, then the turn goes back only after every projectile has settled - a hard ceiling of 160 server ticks. Vanilla's own 100-tick wall-clock cooldown becomes "once per own turn": this is a turn-based adaptation and is stated as such, not simulated.
- Exactly one paid action, committed by reality. The price is frozen before anything happens (base 20 AP, configurable as
ap.blazeVolleyCost, plus the shared +25% per prior paid action of the same turn). Nothing is charged until a fireball really joined the world; a salvo whose joins were all cancelled or refused charges nothing and leaves no residue; a salvo whose first fireball exists and whose later shot fails pays once, refunds nothing and never retries. - Only this encounter's marked fireballs obey this encounter's rule. The collision entry refuses a same-side unit, the shooter itself, a bystander, another encounter's unit and any non-living body - and it refuses a block hit too - by cancelling and removing the projectile before vanilla's hit code runs. The legal target keeps the untouched vanilla path. A blaze in the wild and every other projectile are unchanged.
- A controlled blaze never sets the world on fire, because the projectile never reaches
onHitBlock:EntityMobGriefingEventis also denied for a controlled blaze, while the gamerule itself, other mobs and fire that already existed are left alone. - The blaze carries itself through the encounter's existing air movement. Exact
minecraft:blazesupport inAerialMovementreuses the whole-body clearance, swept collision, 26-neighbour search budget, real movement cost and fractional altitude offset. It keeps its last real position on release; nothing teleports it back or drops it to the ground. - Melee needs real reach, not grid adjacency. In vanilla's own
distanceToSqr < 4.0band with a clear sight line the blaze uses the nativedoHurtTarget; otherwise it fires from where it stands, and only if neither is legal does it move - within the AP it really has - to a cell it can really shoot from. Shooting is capped at the ruleset's 16 blocks and further clamped by the entity's real follow range; the comfortable band is 6-12 blocks. An under-priced actor keeps its resources and ends its turn instead of walking forever.
Verified: :common:test 86 and :neoforge-1.21.1:test 789 Java tests (the new BlazeTacticalAiTest and BlazeVolleyTest included, 11 cases more than 0.27.0) with zero failures/errors/skips, and dedicated-server fixtures run one at a time to completion on the reviewed integration builds: the new blaze fixture (vanilla charge bit really set and really cleared, three real small fireballs six ticks apart for one paid action inside the 160-tick deadline with the turn held until every one settled, a member's AP and inventory constant for the whole enemy action, zero fireballs and zero charge when every join was cancelled, one frozen price and no refund when a later join threw, a volley that stopped when its target left and was not refunded, real collisions with real bystander bodies refused before vanilla ran with no health and no fire ticks on them, real block impacts that created no fire while mobGriefing stayed untouched, a configured price that the server really spends with no surcharge carried between own turns, a fireball that stayed under this encounter's rule after an unrelated listener cancelled its legal impact and was still refused at the very next body, a projectile whose impacts were all cancelled reclaimed by the tracker with its mark released, a vanilla charge bit taken out of the entity at admission and shown only in its own turn, a native melee that really hurt the member for its own price and created no fireball, a real ignition frozen at 100 ticks until the member's own start clock settled it with one pulse, and a same-side participant left untouched by real fireball collisions), then ranged_mobs, witch, flight, effects, teams, companion, multi_battle and block_terrain as regressions. No other fixture was re-run: no other path changed.
Real-client checks (limited): a literal development runClient with Dungeons Perspective 3.6.3 connected to an isolated dedicated server. Real End-turn and facing clicks handed control to the blaze. Server-thread observations confirmed the charge, three real small fireballs, one 20 AP payment and an easy-difficulty hit of 3.5 with real ignition; an occluded start led to two paid air-grid steps before a paid salvo; a non-participant iron golem kept its health and fire ticks, and a sampled wall impact created no terrain fire. Sol inspected the key original frames, including the charge, two fireballs visibly in flight, the movement/charge log and post-hit journal. The executor made no visual claim. These development runs use source-set outputs; a matching packaged artifact is a build reference, not proof that the standalone JAR was run. No full historical UI/multiplayer matrix was repeated, and no public upload is implied.
This mod has no additional files

