https://legacy.curseforge.com/minecraft/mc-mods/craftics-a-tactical-rpg-mod
Turn-based tactical RPG combat in Minecraft.
Craftics is a Fabric mod that transforms Minecraft into a tactical RPG. Fight through 18 procedurally generated biome arenas across the Overworld, Nether, and End, using vanilla items, crafting, and potions, in a complete turn-based combat system with an isometric camera, grid movement, and 65+ unique enemy AI behaviors.
No new items. No new blocks. (Except the Level Select.) Every item already in the game has a purpose in battle.
- Mod ID:
craftics - Version: 0.1.0
- Minecraft: 1.21.1
- Mod Loader: Fabric (Fabric Loader ≥0.16.0, Fabric API)
- Required: owo-lib, Player Animator, Cardinal Components API
- Java: 21+
- Author: CrackedGames
- License: All Rights Reserved
Full documentation with in-depth guides:
| Page | Description |
|---|---|
| Combat System | Weapons, abilities, armor trims, goat horns, items, damage formula |
| Enemy AI | 65+ mob behaviors, boss phases, on-hit effects |
| Biome Progression | 18 biomes, branching paths, procedural generation |
| Progression & Builds | Stats, leveling, traders, NG+, recommended class builds |
| Modding Guide | Custom arenas, JSON biomes, Java API, addon policy |
- Overview
- Getting Started
- Gameplay
- Biome Progression
- Controls
- Technical Architecture
- Modding & Extensibility
- Development Status
When you create a world with the Craftics world preset, Minecraft generates a void world with a decorative cottage hub at the origin. From the hub, you interact with a Level Select Block to enter procedurally generated grid arenas where combat plays out on a turn-based system.
The camera locks to a fixed isometric angle (55° pitch, 225° yaw), the mouse cursor is freed for point-and-click interaction, and WASD movement is disabled. You click tiles to move, click enemies to attack, and manage a limited pool of Action Points each turn.
Your real Minecraft inventory is your inventory. Equip a diamond sword for more damage. Wear iron armor for defense. Brew potions for combat buffs. Eat food to heal. Everything ties back to vanilla mechanics.
Between combat encounters, you craft, smelt, brew, and trade using emeralds earned from victories. A branching biome progression leads through 18 arenas across three dimensions, culminating in a boss fight against the Ender Dragon and a New Game+ system that resets the world with scaled-up enemies while keeping your stats and currency.
- Java 21 (Eclipse Adoptium JDK 21 recommended)
- Minecraft 1.21.1
- Fabric Loader ≥0.16.0
- Fabric API 0.102.0+1.21.1
- owo-lib 0.12.15+ (UI framework)
- Cardinal Components API 6.1.3+ (entity/world data persistence)
- Player Animator 2.0.4+ (player animations)
git clone <repository-url>
cd Craftics
./gradlew buildThe compiled mod JAR is output to build/libs/.
Development client:
./gradlew runClientManual install: Copy the built JAR from build/libs/ into your .minecraft/mods/ folder alongside the Fabric API JAR.
Select the Craftics world preset when creating a new world. This generates a void world with no terrain, no structures, no natural mob spawning. The hub is built automatically at the world origin and you are teleported there on first join.
A decorated cottage at spawn serves as your base of operations. It contains:
| Block | Purpose |
|---|---|
| Crafting Table | Standard vanilla crafting |
| Furnace | Smelting ores and cooking food |
| Chest | Overflow item storage |
| Brewing Stand | Potion brewing (available from the start) |
| Level Select Block | Opens the biome map to start combat arenas |
| Armor Stand | Display your loadout |
The hub is protected. Blocks in the hub shell cannot be broken.
Right-clicking the Level Select Block opens a map-style GUI with three dimension sections (Overworld, Nether, End). Biomes are displayed as a node graph with connecting lines showing progression paths. Locked biomes are grayed out; the current biome glows. Branching paths let you choose your route through the Overworld.
Each biome contains 5 levels. The last level of each biome is a boss fight. Defeating a boss unlocks the next biome(s) on the path.
When you enter an arena:
- The arena is procedurally generated from the biome template: floor blocks, obstacles, edge terrain, and decorations
- Enemies spawn at randomized positions based on the biome's mob pool
- The camera locks to an isometric view
- The mouse cursor unlocks for point-and-click control
- WASD movement is disabled
- Combat begins on the player's turn
Combat alternates between Player Turn and Enemy Turn until all enemies are defeated or the player dies.
The player gets 3 AP per turn (modified by stats and potions).
| Action | AP Cost | Description |
|---|---|---|
| Move | 0 (uses Speed) | Click a highlighted tile. Speed stat (base 3) determines range. |
| Melee Attack | 1-2 AP | Light weapons (swords, bow, trident) cost 1 AP. Heavy weapons (axes, mace, crossbow) cost 2 AP. |
| Ranged Attack | 1-2 AP | Bow (range 3), Crossbow (unlimited cardinal range), Trident (range 3). |
| Use Item | 1-3 AP | Most items 1 AP. Bell/Jukebox 2 AP. Fishing Rod 3 AP. |
| Block | 1 AP | Shield in offhand. Gain +5 DEF until your next turn. |
| End Turn | 0 AP | Press R to end your turn. Remaining AP is lost. |
rawDamage = Weapon Attack + Stat Bonuses + Damage Type Bonus + Enchantments
actual damage = max(1, rawDamage * (1.0 - min(0.60, targetDefense * 0.05)))
Defense is percentage-based: each point = 5% reduction, capped at 60%.
Weapon Attack Power (from equipped main hand):
| Weapon | Attack | Range | Damage Type |
|---|---|---|---|
| Fist | 2 | 1 | Physical |
| Wooden Sword | 3 | 1 | Sword |
| Stone Sword | 4 | 1 | Sword |
| Iron Sword | 5 | 1 | Sword |
| Diamond Sword | 6 | 1 | Sword |
| Netherite Sword | 7 | 1 | Sword |
| Axes (wood to netherite) | 4-8 | 1 | Cleaving |
| Bow | 4 | 3 | Ranged |
| Crossbow | 4 | Cardinal (unlimited) | Ranged |
| Trident | 5 | 1 / 3 (thrown) | Water |
| Mace | 7 | 1 | Blunt |
Weapon durability: Each attack costs 10 durability. Weapons break during combat.
There are 8 damage types: Sword, Cleaving, Blunt, Water, Magic, Pet, Ranged, and Physical. Bonus damage from damage types stacks from three sources:
Armor Set Classes (full 4-piece set bonus):
| Armor Set | Class | Bonuses | Damage Affinity |
|---|---|---|---|
| Leather | Brawler | +2 Speed, +1 AP, +2 Fist damage, 2x kill streak | Physical +2 |
| Chainmail | Rogue | +1 Speed, attacks cost -1 AP (min 1) | Sword +2 |
| Iron | Guard | +2 Defense, immune to knockback | Cleaving +2 |
| Gold | Gambler | +3 Luck/crit, +1 emerald per kill | Magic +2 |
| Diamond | Knight | +3 Defense, +1 Attack | Blunt +2 |
| Netherite | Juggernaut | +4 Defense, +2 Attack, fire immune | ALL +1 |
| Turtle | Aquatic | Water walkable, +1 HP regen, +1 water range | Water +3 |
Armor Trim Bonuses (per-piece, max +4 from 4 armor pieces):
| Trim Pattern | Bonus |
|---|---|
| Bolt | Sword Power +1 |
| Snout | Cleaving Power +1 |
| Coast | Water Power +1 |
| Rib | Magic Power +1 |
| Sentry | Ranged Power +1 |
| Raiser | Pet/Ally Damage +1 |
| Wild | AP +1 |
| Ward | Defense +1 |
| Dune | Blunt Power +1 |
| Eye | Attack Range +1 |
| Vex | Armor Penetration +1 |
| Tide | HP Regen +1 |
| Spire | Luck +1 |
| Wayfinder | Speed +1 |
| Shaper | Defense +1 |
| Silence | Stealth Range +1 |
| Host | Max HP +1 |
| Flow | Speed +1 |
Wearing 4 pieces with the same trim pattern activates a full-set bonus:
| Trim | Name | Full Set Bonus |
|---|---|---|
| Sentry | Overwatch | Counter-attack ranged enemies |
| Wild | Feral | 1.3x damage per kill streak level |
| Ward | Fortress | 50% less damage when stationary |
| Vex | Ethereal | 20% dodge chance |
| Silence | Phantom | Invisible for first 2 turns |
| Flow | Current | Kills refund 1 AP |
| Bolt | Thunderstrike | Crits stun the target |
| Dune | Sandstorm | Enemies within 2 tiles lose 1 Speed |
| Coast | Tidal | Water tiles heal 1 HP/turn |
| Snout | Brute Force | Melee attacks splash to adjacent |
| Rib | Infernal | Fire attacks deal +3 damage |
| Spire | Fortune's Peak | Double emerald rewards |
| Host | Symbiote | Heal 1 HP per enemy killed |
Templates drop from bosses. See the full trim reference for all 18 patterns, trim material bonuses, and remaining full-set effects.
Combat Effect Bonuses:
| Effect | Bonus |
|---|---|
| Water Breathing | Water +2 |
| Fire Resistance | Magic +1 |
Each weapon type has a unique combat ability:
| Weapon | Ability | Effect |
|---|---|---|
| Swords | Sweeping Edge | Hits the target AND one adjacent enemy for half damage |
| Diamond Sword | Sweep + Crit | 30% chance to deal double damage |
| Netherite Sword | Sweep + Execute | Triple damage on targets below 30% HP |
| Axes | Stun | Target loses 2 AP on their next turn |
| Spears | Pierce | Damage passes through the target to hit the tile behind |
| Mace | Smash | 3×3 AoE damage + knockback |
| Crossbow | Pierce-Through | Bolt passes through the first target to hit a second |
Rare drops from goats (10% chance). 8 variants, each with its own sound and combat effect:
| Horn | AP | Effect |
|---|---|---|
| Ponder | 1 | +2 Defense for 3 turns |
| Sing | 1 | +2 HP regen for 3 turns |
| Seek | 2 | +3 Attack for 3 turns |
| Feel | 1 | +2 Speed for 3 turns |
| Admire | 2 | All enemies −2 Attack for 2 turns |
| Call | 2 | All enemies −1 Speed for 2 turns |
| Yearn | 3 | All enemies Poisoned for 3 turns |
| Dream | 2 | Fire Resistance for 4 turns |
See the full combat reference for strategy tips.
Food: 28 food items can be eaten during combat for HP recovery (1 AP). Examples: steak heals the most, bread and cooked meats offer moderate healing, berries and raw foods heal less.
Potions: Drinking a potion applies a turn-based effect (converted from Minecraft's tick-based system):
| Potion | Combat Effect |
|---|---|
| Strength | +3 attack for duration |
| Swiftness | +1 AP per turn for duration |
| Fire Resistance | Immune to lava and fire tiles |
| Regeneration | Heal 1 HP per turn |
| Healing (Instant) | Restore 4 HP immediately |
Effects can also be frozen. Potions consumed in the hub activate when combat starts.
Throwables:
| Item | Effect |
|---|---|
| Snowball | Knockback 1 tile |
| Egg | 1 damage |
| Ender Pearl | Teleport to target tile (costs 2 HP) |
| Fire Charge | Sets target tile on fire |
| Wind Charge | Knockback 2 tiles + 1 damage |
| TNT | Timed 3×3 AoE explosion |
| Splash Potion | 3×3 area effect (arcs with particles, 4-tile range) |
| Lingering Potion | Creates a poison cloud that ticks damage each turn |
| Cobweb | Stuns target for 1 turn |
| Bell | Stuns all enemies in range |
| Tipped Arrow | Applies potion effect on hit (poison, slowness, harming) |
The mod includes 65 unique AI strategies registered for 78+ mob types. Unregistered mobs default to passive behavior (flee when attacked). Each AI controls movement, targeting, and special mechanics. See the full Enemy AI reference for every mob.
| AI | Mobs | Key Behavior |
|---|---|---|
| PassiveAI | Cow, Pig, Sheep, Chicken, Rabbit | Idle; flees when attacked |
| GoatAI | Goat, Wolf | Passive until hit, then 50% ram (knockback) or flee |
| ZombieAI | Zombie | Beeline melee, speed 1 |
| HuskAI | Husk | Zombie variant with +1 bonus damage (hunger) |
| DrownedAI | Drowned | 50% spawn trident; diagonal throw range ≤3 or melee rush |
| SkeletonAI | Skeleton | Ranged (range 3), seeks cardinal line-of-sight |
| StrayAI | Stray | Ranged + kiting (prefers max distance) |
| PillagerAI | Pillager | Crossbow (range 4), retreats from melee |
| VindicatorAI | Vindicator | Speed 2 aggressive melee rush |
| CreeperAI | Creeper | Approaches → fuse when adjacent → explodes next turn (2× damage, radius 1). Fuse resets if player moves away |
| SpiderAI | Spider | 2×2 body, speed 2, pounce attack over obstacles |
| WitchAI | Witch | Potion throw (range 2–3), random debuffs, keeps distance |
| EndermanAI | Enderman | Teleports behind player to attack; teleports away when damaged |
| PhantomAI | Phantom | Cardinal-line swoops (speed 4), damages all tiles in path |
| OcelotAI | Ocelot | Speed 2 hit-and-run; strikes then flees |
| MountedAI | Camel | Speed 3 charge; dismounts at 50% HP (speed drops to 1) |
| GhastAI | Ghast | Long-range fireball (range 5–6), flees from close range |
| BlazeAI | Blaze | Medium-range fire (range 3–4), applies burning, retreats from melee |
| ShulkerAI | Shulker | Stationary turret, range 4–5, high defense, rarely moves |
| WardenAI | Warden | Boss. Phase 1: slow (speed 1), massive melee. Phase 2 (<50% HP): speed 2, sonic boom (range 3) |
| DragonAI | Ender Dragon | Final boss. Phase 1: arena swoops. Phase 2 (<50% HP): charge + AoE breath |
Enemy types also inflict special effects on hit:
- Wither Skeleton → Wither debuff
- Blaze → Burning
- Husk → Weakness
- Stray → Slowness
Victory: When all enemies in an arena are killed, the player receives:
- Mob drops from each defeated enemy
- Biome loot rolled from the biome's weighted loot table
- Emerald reward (scaled by Resourceful stat)
- Boss kills unlock the next biome and grant a level-up
After a non-boss victory, the player chooses:
- Go Home: Keep loot, return to hub, reset the current biome run
- Continue: Proceed to the next level in the biome (risk/reward; dying loses everything from the run)
There is a 40% chance a trader appears between levels when continuing.
Defeat: If the player dies:
- Inventory is cleared (items from the current run are lost)
- The player is teleported back to the hub
- The biome run resets (must start from level 1 of that biome)
- No permadeath. Progress and stats are kept
Traders appear randomly between combat levels (13% chance, configurable). There are 8 trader types:
| Trader | Specialty |
|---|---|
| Weaponsmith | Weapons (scales wood to netherite by tier) |
| Armorer | Armor sets |
| Provisioner | Food, golden apples, golden carrots |
| Alchemist | Potions and brewing ingredients |
| Supplier | Raw materials (iron, gold, diamond, netherite) |
| Decorator | Hub furnishing (lanterns, paintings, beds) |
| Craftsman | Crafting stations (furnace, anvil, enchanting table) |
| Curiosity Dealer | Rare items (trident, totem, elytra) |
Trades cost emeralds. Each encounter offers 3-5 random trades. Quality scales with biome tier (1-9).
Defeating a biome boss grants a level-up with stat points to allocate. There are 8 stats:
| Stat | Base | Effect |
|---|---|---|
| Speed | 3 | Tiles you can move per turn |
| AP | 3 | Action Points per turn |
| Melee Power | 0 | Bonus melee damage |
| Ranged Power | 0 | Bonus ranged damage |
| Vitality | 0 | Bonus max HP |
| Defense | 0 | Flat damage reduction |
| Luck | 0 | Better loot rolls |
| Resourceful | 0 | Bonus emerald rewards |
Stats are persistent per player (UUID-based, supports multiplayer) and saved with the world. A stat panel is displayed on the right side of the inventory screen showing your current level, all stat values, unspent points, and emerald count.
After defeating the Ender Dragon in Dragon's Nest (the final biome), New Game Plus activates:
- All biome progression resets
- Player stats and emeralds carry over
- Enemies scale by +25% per NG+ cycle (HP, attack, defense)
- The NG+ tier is displayed on the level select screen
See the Recommended Builds guide for class builds optimized for each stage of the game.
The mod features 18 biomes across three dimensions, organized in a branching progression:
A branching path with two choice points:
Plains → Dark Forest → ┬─ Desert ──┬─→ River Delta → ┬─ Stony Peaks ──┬─→ Underground Caverns → Deep Dark
└─ Jungle ──┘ └─ Snowy Tundra ──┘
| Biome | Grid Size | Environment | Boss | Notable Mechanics |
|---|---|---|---|---|
| Plains | 8×8 (+1 width/level) | Grassy hills, flowers | Varies | Tutorial biome, open field |
| Dark Forest | 9×9 | Dense trees, dark atmosphere | Varies | Tree obstacles, low visibility |
| Scorching Desert | 10×10 | Sand dunes, cacti | Varies | Open terrain, cactus damage |
| Dense Jungle | 10×10 (+1 width) | Dense vegetation, vines | Varies | Heavy obstacles, vine cover |
| River Delta | 9×9 | Sandy banks, water features | Varies | Water edge tiles |
| Stony Peaks | 10×10 | Stone terrain | Varies | Minimal cover |
| Snowy Tundra | 9×9 | Snow, ice patches | Varies | Powder snow edges |
| Underground Caverns | 10×10 (+1 both) | Cave structures, ore veins | Varies | Dense obstacles, night mode |
| The Deep Dark | 11×11 (+1 both) | Deepslate, sculk | Warden | Very dark, high danger |
Unlocked after completing The Deep Dark:
| Biome | Grid Size | Environment | Boss | Notable Mechanics |
|---|---|---|---|---|
| Nether Wastes | 10×10 | Netherrack, fire | Varies | Lava edges, fire hazards |
| Soul Sand Valley | 10×10 (+1 width) | Soul sand, soul fire | Varies | Slow terrain |
| Crimson Forest | 11×11 | Crimson nylium, fungi | Varies | Dense fungal obstacles |
| Warped Forest | 11×11 (+1 width) | Warped nylium | Varies | Sparse obstacles |
| Basalt Deltas | 12×12 (+1 both) | Basalt, magma | Boss | Lava edges, dense pillars |
Unlocked after completing Basalt Deltas:
| Biome | Grid Size | Environment | Boss | Notable Mechanics |
|---|---|---|---|---|
| Outer End Islands | 10×10 | End stone, chorus | Varies | Void edges, sparse |
| End City | 11×11 (+1 width) | Purpur, end bricks | Varies | Shulker turrets |
| Chorus Grove | 11×11 (+1 both) | Chorus plants | Varies | Organic obstacles |
| Dragon's Nest | 12×12 (+1 both) | End stone | Ender Dragon | Void edges, final boss |
Each level within a biome is procedurally generated:
- Grid dimensions grow per level based on the biome's growth settings
- Obstacles are placed with increasing density
- Edges are carved with noise-based organic shapes and biome-specific edge blocks (water, lava, void, powder snow)
- Decorative elements are placed around the arena matching the environment style (trees, ferns, snow layers, cave structures, nether vegetation, end pillars)
- An underground base of stone and glowstone lighting is generated below the floor
| Input | Action |
|---|---|
| Left Click (empty/sword) | Move to tile OR melee attack enemy (context-sensitive) |
| Left Click (bow/crossbow/trident) | Ranged attack on enemy in range |
| Left Click (food/potion/throwable) | Use held item |
| R | End turn |
| Scroll Wheel | Zoom camera in/out (±1.5 per notch, range 8–30) |
| Middle Mouse Drag | Pan camera (world-space, accounts for yaw) |
| Shift + Middle Click | Reset camera pan |
| F6 | Toggle debug combat mode |
Standard Minecraft controls. Interact with blocks normally (crafting table, furnace, brewing stand, chest). Right-click the Level Select Block to open the biome map.
src/
├── main/java/com/crackedgames/craftics/
│ ├── CrafticsMod.java : Main mod entrypoint (ModInitializer)
│ ├── api/
│ │ └── CrafticsAPI.java : Public modding API
│ ├── block/
│ │ ├── ModBlocks.java : Block registration
│ │ ├── LevelSelectBlock.java : Interactive block with GUI
│ │ ├── LevelSelectBlockEntity.java : Block entity with screen data
│ │ ├── LevelSelectScreenHandler.java : Screen handler
│ │ └── ModScreenHandlers.java : Screen handler registration
│ ├── combat/
│ │ ├── CombatManager.java : Server-side combat state machine (~14,000 lines)
│ │ ├── CombatEntity.java : Combat enemy data
│ │ ├── CombatPhase.java : Phase enum
│ │ ├── CombatEffects.java : Turn-based effect system (12 effects)
│ │ ├── PlayerCombatStats.java : Equipment → combat stat reader
│ │ ├── PlayerProgression.java : Persistent stat/leveling system
│ │ ├── Pathfinding.java : A* pathfinding + BFS reachability
│ │ ├── WeaponAbility.java : Per-weapon-type abilities
│ │ ├── ItemUseHandler.java : Food, potions, throwables in combat
│ │ ├── TileHighlightManager.java : Carpet-based tile highlights
│ │ ├── LootPool.java : Weighted loot rolling
│ │ ├── TraderSystem.java : 7 trader types, tiered loot pools
│ │ └── ai/
│ │ ├── EnemyAI.java : AI interface
│ │ ├── EnemyAction.java : 13 action types (sealed interface)
│ │ ├── AIRegistry.java : 78+ mob→AI mappings
│ │ ├── AIUtils.java : Shared AI utilities
│ │ └── (65 AI classes) : One per mob behavior archetype (including 17 boss AIs)
│ ├── core/
│ │ ├── GridArena.java : Width×height tile grid with occupants
│ │ ├── GridPos.java : 2D grid coordinate
│ │ ├── GridTile.java : Tile data (type, block, timer)
│ │ └── TileType.java : NORMAL, OBSTACLE, LAVA, FIRE, VOID, EXIT
│ ├── level/
│ │ ├── BiomeTemplate.java : Biome data class
│ │ ├── BiomeRegistry.java : Central biome registry (JSON + API)
│ │ ├── BiomeJsonLoader.java : Datapack JSON parser
│ │ ├── BiomePath.java : Branching progression graph (3 dimensions)
│ │ ├── LevelDefinition.java : Abstract level layout
│ │ ├── LevelGenerator.java : Procedural arena generation
│ │ ├── GeneratedLevelDefinition.java : Concrete generated level
│ │ ├── LevelRegistry.java : Level lookup facade
│ │ ├── ArenaBuilder.java : Places blocks in world from definition
│ │ ├── EnvironmentStyle.java : 13 visual styles enum
│ │ └── MobPoolEntry.java : Enemy pool data record
│ ├── network/
│ │ ├── ModNetworking.java : Registers 10 C2S + 16 S2C payloads
│ │ └── (26 payload record classes) : Individual packet definitions
│ └── world/
│ ├── VoidChunkGenerator.java : Empty void world generation
│ ├── HubRoomBuilder.java : Decorated cottage at spawn
│ └── CrafticsSavedData.java : Persistent world state (progress, emeralds, NG+)
│
├── main/resources/
│ ├── fabric.mod.json
│ ├── craftics.mixins.json
│ ├── assets/craftics/
│ │ ├── lang/en_us.json
│ │ ├── textures/ (icon.png, level_select_block.png)
│ │ ├── blockstates/
│ │ └── models/
│ └── data/craftics/craftics/biomes/
│ └── (18 biome JSON files)
│
├── client/java/com/crackedgames/craftics/
│ ├── CrafticsClient.java : Client entrypoint (ClientModInitializer)
│ ├── client/
│ │ ├── CombatState.java : Client combat state + camera settings
│ │ ├── CombatHudOverlay.java : HUD rendering (HP, AP, enemies, log)
│ │ ├── CombatInputHandler.java : Click-to-move, click-to-attack, pan, zoom
│ │ ├── CombatLog.java : Scrolling combat message log
│ │ ├── CombatTooltips.java : Item tooltip enrichment
│ │ ├── TileRaycast.java : Cursor → grid tile raycasting
│ │ ├── ClientGridHelper.java : Client-side grid utilities
│ │ ├── LevelSelectScreen.java : Biome map GUI
│ │ ├── VictoryChoiceScreen.java : Post-victory Go Home/Continue
│ │ ├── LevelUpScreen.java : Stat allocation GUI
│ │ └── TraderScreen.java : Trading GUI
│ └── mixin/client/
│ ├── AttackSuppressMixin.java : Suppress vanilla attacks in combat
│ ├── CameraLockMixin.java : Isometric camera lock
│ ├── EnderDragonRendererMixin.java: Dragon visibility during combat
│ ├── FovLockMixin.java : Lock FOV during combat
│ ├── HudTransitionMixin.java : HUD transition effects
│ ├── InputAccessor.java : Movement vector accessor
│ ├── InventoryStatsMixin.java : Stat panel in inventory screen
│ ├── MouseUnlockMixin.java : Free cursor in combat
│ ├── MovementDisableMixin.java : Disable WASD in combat
│ ├── OverlayMessageMixin.java : Action bar → combat log
│ ├── PlayerListHudMixin.java : Player list HUD changes
│ ├── PlayerNameTagMixin.java : Player name tag rendering
│ ├── ScrollZoomMixin.java : Scroll wheel → zoom
│ ├── TitleScreenMixin.java : Title screen modifications
│ └── WorldCreatorMixin.java : Default world preset to Craftics
│
└── client/resources/
└── craftics.client.mixins.json : 15 client mixins
Total: 248 Java files, 122 JSON configs.
-
CombatManager: Server-authoritative state machine driving the entire combat lifecycle. Handles player actions, A* pathfinding, animated movement (lerp over 4 ticks), weapon abilities, enemy AI turns (with per-phase delays: DECIDING→MOVING→ATTACKING→DONE), per-turn status effects, environmental hazard damage, victory/defeat conditions, loot distribution, and biome progression.
-
GridArena: 2D tile array with occupant tracking. Supports multi-tile entities (e.g., 2×2 spiders). Arena origins are spaced at
X = level × 1000, Y = 100, Z = 0to prevent collision. -
Pathfinding: A* pathfinding for movement with BFS flood-fill for reachable tile calculation. Respects obstacles, multi-tile entities, and movement speed limits.
-
PlayerProgression: Persistent per-player stat system using Minecraft's
PersistentStateandCodecserialization. UUID-based for multiplayer support. -
CombatEffects: Turn-based effect system replacing Minecraft's tick-based effects. 12 distinct effects with frozen state (apply in hub, activate on combat start).
-
BiomeRegistry: Central registry loading biomes from JSON datapacks (
data/*/craftics/biomes/*.json) and programmatic API registration. Hot-reloadable via/reload.
| Mixin | Target | Purpose |
|---|---|---|
| AttackSuppressMixin | ClientPlayerInteractionManager |
Suppresses vanilla attacks during combat |
| CameraLockMixin | Camera.update |
Locks camera to isometric view (55° pitch, 225° yaw) centered on arena |
| EnderDragonRendererMixin | EnderDragonEntityRenderer |
Hides dragon when off-stage during boss fight |
| FovLockMixin | GameRenderer |
Prevents FOV changes during combat |
| HudTransitionMixin | InGameHud |
Combat HUD transition effects |
| InputAccessor | Input |
Accessor mixin exposing setMovementVector |
| InventoryStatsMixin | InventoryScreen.render |
Renders player stats panel alongside the inventory screen |
| MouseUnlockMixin | Mouse.lockCursor |
Prevents cursor grab during combat for free mouse interaction |
| MovementDisableMixin | KeyboardInput.tick |
Zeroes all movement input during combat |
| OverlayMessageMixin | InGameHud.setOverlayMessage |
Routes action bar messages to the combat log for persistent display |
| PlayerListHudMixin | PlayerListHud |
Customizes player list display |
| PlayerNameTagMixin | EntityRenderer |
Customizes player name tag rendering |
| ScrollZoomMixin | Mouse.onMouseScroll |
Intercepts scroll wheel for zoom control (range 8–30 blocks) |
| TitleScreenMixin | TitleScreen |
Title screen modifications |
| WorldCreatorMixin | WorldCreator |
Defaults world preset to Craftics void world |
10 client-to-server payloads:
| Payload | Purpose |
|---|---|
StartLevelPayload |
Request to start a combat level |
CombatActionPayload |
Player combat action (move, attack, use item, end turn) |
PostLevelChoicePayload |
Go Home vs Continue after victory |
TraderBuyPayload |
Purchase a trade |
TraderDonePayload |
Finish trading |
StatChoicePayload |
Allocate a stat point |
AffinityChoicePayload |
Choose damage affinity |
EventChoicePayload |
Event room choice (shrine/traveler/vault) |
RespecPayload |
Refund and reallocate stat points |
HoverUpdatePayload |
Relay tile hover to party members |
16 server-to-client payloads:
| Payload | Purpose |
|---|---|
EnterCombatPayload |
Combat started, arena dimensions, origin |
CombatEventPayload |
Combat event (damage, movement, effect) |
ExitCombatPayload |
Combat ended |
CombatSyncPayload |
Full combat state sync (phase, AP, HP, enemies) |
VictoryChoicePayload |
Prompt Go Home/Continue screen |
TraderOfferPayload |
Trader encountered, show trades |
LevelUpPayload |
Level up, show stat allocation |
PlayerStatsSyncPayload |
Sync progression data to client |
TileSetPayload |
Dynamic tile state updates |
TeammateHoverPayload |
Relay teammate hover position |
EventRoomPayload |
Event room encounter data |
AchievementUnlockPayload |
Achievement unlock notification |
GuideBookSyncPayload |
Guide book data sync |
AddonBonusSyncPayload |
Addon bonus data sync |
LoadingScreenPayload |
Loading screen state |
ScoreboardSyncPayload |
Scoreboard data sync |
- VoidChunkGenerator: Produces an empty world with no terrain, entities, or structures. Codec-serialized for world preset compatibility.
- HubRoomBuilder: Constructs a decorated cottage at the world origin with cobblestone foundation, oak plank floor, dark oak posts, windows, pitched roof, porch, chimney, furniture, and lighting. Supports versioned rebuilds.
- CrafticsSavedData: Persistent world-level state stored via Minecraft's
PersistentStatesystem. Tracks hub state, biome progression, emerald currency, active biome run, branch choices, discovered biomes, and NG+ level.
All 18 built-in biomes are defined as JSON files in data/craftics/craftics/biomes/. The schema supports:
- Grid dimensions with per-level growth
- Floor and obstacle block lists
- Obstacle density with per-level scaling
- Environment style (13 visual styles)
- Day/night mode
- Passive, hostile, and boss mob pools with full stats
- Weighted loot tables
Biomes are hot-reloadable. Run /reload in-game to reload all biome definitions without restarting.
Craftics supports three levels of modding:
Build arena maps in Minecraft's Structure Block system and export them as .nbt files. Place them in a datapack or the mod's resources at:
data/craftics/structures/arenas/<biome_id>/<number>.nbt
Mark the playable grid area with Gold Block (player start corner) and Emerald Block (opposite corner). Everything outside the markers becomes terrain/decoration. Multiple numbered presets per biome (1.nbt, 2.nbt, etc.) are picked randomly each fight.
See MODDING.md for the full custom maps guide with step-by-step instructions.
Create custom biomes by adding JSON files to a datapack at:
data/<namespace>/craftics/biomes/<biome_name>.json
Override built-in biomes by using the same biome id. Add multiple biome variations by creating separate JSON files with unique IDs. See MODDING.md for the full JSON schema reference, field documentation, and examples.
The CrafticsAPI class provides:
// Register custom AI for a mob type
CrafticsAPI.registerAI("mymod:custom_mob", new MyCustomAI());
// Register a new biome programmatically
CrafticsAPI.registerBiome(myBiomeTemplate);
// Query the total number of levels
int total = CrafticsAPI.getTotalLevels();Custom AI implements the EnemyAI interface with a single method:
EnemyAction decideAction(CombatEntity self, GridArena arena, GridPos playerPos);13 action types are available: Move, Attack, MoveAndAttack, Flee, Teleport, TeleportAndAttack, Pounce, Explode, RangedAttack, Swoop, StartFuse, Detonate, and Idle.
See MODDING.md for complete API documentation, or the online Modding Guide for the full reference with examples.
45+ config options via Mod Menu:
- Combat Balance: Enemy HP/ATK/DEF scaling per biome, boss HP multiplier, critical hit chance, ranged accuracy
- Mob Behavior: Passive mob wander chance, predator hunting toggle, enemy animation speed, auto-end turn
- Difficulty: Permadeath mode, heal between levels, enemy range hints, intention preview
- Accessibility: Colorblind mode, larger UI, camera shake toggle
- Economy: Loot multiplier, trader spawn chance, horn drop rate, emerald rewards
You're free to create addons, datapacks, resource packs, and mods that interact with Craftics through its API. You can also include Craftics in modpacks with credit.
Allowed: Addons via API, datapacks with custom arenas/loot/biomes, resource packs, modpacks on CurseForge/Modrinth (with credit), videos/streams/reviews.
Not allowed: Redistributing Craftics outside modpack launchers, copying source code, re-uploading without permission.
The mod is in active development (v0.1.0). The following systems are implemented:
- Void world generation with Craftics world preset
- Hub cottage with crafting stations and Level Select Block
- Isometric camera lock with zoom and pan
- Mouse cursor unlock and WASD disable during combat
- Full grid data model (GridArena, GridTile, GridPos, TileType)
- Procedural arena generation from biome templates
- Arena building with environment-specific decorations
- Turn-based combat state machine (CombatManager)
- Action Point system
- Click-to-move with A* pathfinding
- Click-to-attack (melee and ranged)
- Weapon abilities (sweep, stun, pierce, smash, crit, execute)
- Equipment-based combat stats
- 65 unique enemy AI strategies for 78+ mob types
- Turn-based status effects (12 effects, frozen effects)
- Food, potion, and throwable item use in combat
- Tile highlights (carpet-based movement/attack display)
- Tile raycasting (cursor → grid position)
- Combat HUD (HP bar, AP pips, turn indicator, enemy list, combat log)
- 18 biome definitions (JSON datapacks)
- Branching biome progression across 3 dimensions
- Level Select map GUI with node graph
- Victory/defeat flow with Go Home/Continue choice
- Trader system (8 types, tier-scaled inventory)
- Player progression (8 stats, level-up screen)
- Emerald economy
- New Game+ system (+25% enemy scaling per cycle)
- Persistent world state (progress, stats, currency)
- Client/server networking (26 packet types)
- Combat tooltips on items
- Stat panel in inventory screen
- Modding API (custom AI + custom biomes)
- Datapack biome loading with hot reload
- CombatHudRenderer (world-space rendering for grid overlay and 3D enemy HP bars) is stubbed, blocked by Minecraft 1.21.1 render pipeline changes
- Legacy hardcoded level definitions (Level1Definition, Level2Definition) remain in the codebase but are superseded by the procedural generation system