Tactical RPG: Turn-based Tactics Game

Turn Minecraft encounters into block-based, turn-driven tactical battles
Back to Files

tactical-neoforge-1.21.1-0.27.0.jar

File nametactical-neoforge-1.21.1-0.27.0.jar
Uploader
DxEVILDxEVIL
Uploaded
Nov 4, 2026
Downloads
12
Size
1.8 MB
Mod Loaders
NeoForge
File ID
9432088
Type
B
Beta
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:tactical-rpg-minecraft-turn-based-tactics-mod-1766445:9432088"

Learn more about Curse Maven

What's new

0.27.0 — Ranged monsters that really fire what they carry, a witch who drinks and throws on her own turn, and a vindicator who takes the door apart

Build: 0.27.0, Minecraft 1.21.1 / NeoForge 21.1.216; artifact tactical-neoforge-1.21.1-0.27.0.jar. Protocols unchanged from 0.26.0: Tactical 12, Skill 4, BattleLog 2. All three approved stages and their scoped automated, server and single-client acceptance checks are complete; this does not authorize a public release.

  • Three more monster types are recognised by entity id. minecraft:pillager, minecraft:stray and minecraft:bogged are now registered exactly, next to the existing creeper, skeleton and phantom. Everything else still falls back to the original generic melee adapter, so no other mob changes behaviour.

  • The weapon decides the ranged action, not the mob type. A held bow and a held crossbow are detected in the main or off hand with the same hand rule vanilla uses, so planning, the quoted price and the hand that really fires are one decision. The quote is the bow's 15 AP or the crossbow's 20 AP from the shared ruleset, and an actor holding neither keeps its original melee: nothing is equipped by entity type.

  • A crossbow reloads and fires inside a single own turn. An empty crossbow is loaded through the vanilla item path (releaseUsing at full charge), which draws the monster's own getProjectile ammunition - never a player inventory - and then fires in the same turn for one paid action. A crossbow that is already charged uses its real ChargedProjectiles instead of being reloaded.

  • The salvo is one action, the arrows are all real. Multishot, piercing and durability are the vanilla ones, the whole salute costs one 20 AP action once, the turn stays with the shooter until every projectile has settled, and a later miss, block or cancelled hit refunds nothing.

  • Unsupported ammunition is refused, not faked. A crossbow loaded with a firework rocket is declined with a recorded reason and keeps its real load and its AP; the crossbow arrow profile is 3.15 speed, so an arrow is never fired on bow numbers and rocket ballistics are not pretended.

  • Tipped arrows stay vanilla. Stray and bogged reuse the bow adapter and nothing else: the real entity's own performRangedAttack -> getArrow produces the arrow, so slowness 600 ticks and poison 100 ticks arrive with their native values and then age on the affected participant's own-turn effect clock.

  • One opponent per own turn. The turn locks the opponent's UUID; execution re-validates that same entity instead of looking up the nearest one again, and a lost target allows exactly one bounded replan before the turn ends.

  • Bilingual wording for the two new journal structures (lost-target replan, unsupported rocket) in zh_cn and en_us.

  • A witch drinks for herself on her own turn only. Vanilla picks and counts down a potion inside Witch#aiStep, outside the goal system, so no-AI alone was never enough to stop her from healing on somebody else's turn. While an encounter controls her, that one server-side segment is skipped with a targeted injection (her own super.aiStep and every other entity hook still run), and a potion she was already drinking when she joined is taken out of the entity: it cannot settle on wall-clock time, and it has to be paid for on her next own turn or be given back untouched when she leaves. A self-drink is a real, bounded presentation rather than a single instant: the borrowed hand gets the bottle, vanilla's own drinking flag, countdown and slowdown are used, the turn stays busy for that window and exactly one settlement at the end applies the dose, charges the action and gives the borrowed item back. Only a drink that really happened is paid for - an instant heal goes through vanilla's own instant outlet and a refused or cancelled one costs nothing and starts no cooldown - and merely holding a bottle or an axe is never treated as a drink.

  • One self-drink per own turn, on one shared 3-own-turn cooldown. Every self-brew draws from the same cooldown, so she cannot dodge it by switching to swiftness, and the cooldown is counted in her own turns: with a gap of 3 she may drink on her 1st own turn, not on the 2nd or 3rd, and again on the 4th. Wall-clock time, other units acting and a reopened menu never advance or reset it, and two witches never share one.

  • Deterministic self-drink order. Emergency healing at 25% health first, then water breathing while her eyes are in water, fire resistance while she burns, then ordinary healing below the configured threshold (default 50%) and only when at least one whole dose would land, then swiftness past 11 blocks, otherwise nothing. A drink that would be wasted or duplicated is not taken, and a heal never writes health directly: the real potion effect goes through the existing own-turn effect clock.

  • One thrown bottle per own turn at the opponent she locked. Slowness at 8+ blocks without one, poison against a target that can still lose 8 health, weakness in the target's face, otherwise instant harming - and never harming against a target it would heal. Planning reserves the bottle's own 15 AP and works for a legal throwing position inside 10 horizontal blocks, preferring 4-8, so she steps back out of reach, closes in, or moves sideways instead of throwing through cover.

  • The bottle is a real vanilla splash potion. She creates a real ThrownPotion carrying the registry potion her decision named, thrown with a potion's own flight (0.75 speed, 0.05 gravity, 0.99 air / 0.8 water drag) rather than a bow's or a crossbow's, with vanilla's own splash application, distance falloff and level event. Creating the bottle is the paid event: a bottle that never joins the world costs nothing and leaves nothing behind, while a bottle that exists is final even if it misses.

  • Its splash only reaches this encounter's opposed participants. The bottle is marked when it is created and the candidate list is narrowed once, before vanilla's per-entity loop, so one rule covers instant damage and every periodic effect alike: the throwing witch herself, a same-side raider, a bystander and any other encounter's unit are untouched, while ordinary potions outside a battle and a player's own potions keep vanilla behaviour.

  • Two new journal structures for a paid drink and a thrown bottle, plus a no-throw refusal, with the brew name carried as structure, in zh_cn and en_us. Four new settings (witch.drinkCost, witch.throwCost, witch.drinkCooldownTurns, witch.healThreshold) default to the ruled 25 / 15 / 3 / 0.5.

  • A vindicator keeps the vanilla axe and gains only a route. minecraft:vindicator is registered exactly, reusing the native melee outlet: the real iron axe, its real item attributes, its enchantments and vanilla's own doHurtTarget, sound, swing and knockback are what hurt the target, and there is no second hit and no hard-coded damage. It picks its opponent from the same approved pool as every other hostile (this battle's players and controlled companions) - a Johnny name does not widen that pool to villagers, golems or animals.

  • A door is the last resort, not the first idea. Each own turn the vindicator asks two separate questions of the same authoritative terrain: is there a complete route that needs no door broken, and - only if that answer is a proven "no" - is there a complete route if exactly the closed wooden doors on it were gone. A detour is always walked first, even when this turn's AP cannot finish it. The search reports FOUND / UNREACHABLE / LIMIT_REACHED separately, so a budget or loaded-area limit is never read as "the only way is a door".

  • Walking through an open doorway is real collision, not a special case. The battle's plain terrain adapter refuses any non-empty collision shape, which also refuses the thin leaf of an already open door. A door-capable actor therefore asks a

(truncated for upload)

This mod has no additional files