promotional bannermobile promotional banner

Horse Powered

Hand-cranked and animal-powered machinery focusing on early game grinding, chopping, pressing, drying, and crushing. Leash horses, donkeys, or llamas to automate the line or generate Forge Energy. Data-driven recipes with full JEI, EMI, and Jade support.

File Details

HorsePowered 1.20.1-1.4.0

  • R
  • May 18, 2026
  • 302.34 KB
  • 21
  • 1.20.1
  • Forge

File Name

horsepowered-1.20.1-1.4.0.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:horse-powered-1408330:8111087")
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

Horse Powered 1.4.0

New Content

  • Horse Powered Generator: new horse-powered machine that converts worker labor directly into Forge Energy. Generates 80 FE/tick while a worker walks, buffers up to 100,000 FE, and pushes power to any adjacent FE consumer. Requires a redstone signal to run, so it can be toggled by a lever inside the working ring.
  • Work Saddle: right-click any valid worker (horse, donkey, mule, llama, trader llama) to capture it into the saddle, then right-click any block to release it elsewhere. Carrying saddle shows a tooltip listing the stored mob. Crafted shapelessly from a saddle and a lead.
  • Creative Battery: creative-only block for testing energy setups. Holds up to Integer.MAX_VALUE FE, accepts and outputs power at the same rate, and pushes stored energy to adjacent FE consumers every tick. Bedrock-grade hardness and no loot table — only obtainable in creative.
  • Drying Rack: passive 2x2 multiblock that dries 8 items in a 4x2 grid. Each slot ticks independently with its own progress, supports hopper automation (insert from any side, extract only finished items), and shows per-slot progress in Jade via raycast hit detection. Comes with 6 vanilla recipes: kelp to dried kelp, wet sponge to sponge, rotten flesh to leather, mud to dirt, clay to terracotta, and saplings to dead bush. New JEI and EMI "Drying" categories show recipe time centered under the arrow.
  • Granite Anvil: stone-tier crushing station for rock-cycle conversions. Place a granite anvil (granite over polished_deepslate, 3+3 pattern) and right-click a valid input with any stone-tier-or-better pickaxe to crush. Each successful strike consumes pickaxe durability (toggle via shouldDamageGraniteAnvilPickaxe) and applies food exhaustion (graniteAnvilExhaustion plus per-recipe hungerCost). Total strikes per recipe are time × crushingMultiplier. By default the result is dropped on top of the anvil; flip graniteAnvilDrop to false to keep the output in an internal slot instead. Ships with 10 recipes: stone, deepslate, basalt, blackstone, tuff, cobblestone, cobbled_deepslate, gravel, sandstone (4 sand), red_sandstone (4 red_sand). New JEI and EMI "Crushing" categories show the strike count and (when set) hunger per recipe. Jade shows input/output items and remaining strikes when looking at the block.

New Recipe Feature

  • Optional hungerCost on chopping and grinding recipes: float field (default 0.0). On manual stations it is added to the player's food exhaustion every chop or turn, on top of the existing config baseline. Has no effect on horse-powered stations. JEI and EMI show a "Hunger" line on the manual category when the value is greater than zero.

Recipe Viewer Improvements

  • Manual Chopping now displays the actual chop count (time × choppingMultiplier) in JEI and EMI instead of the raw recipe time.
  • Manual Grinding now displays the number of turns required (⌈time / pointsPerRotation⌉) instead of raw time.
  • Sort priority is ascending now: JEI and EMI list recipes from lowest priority value to highest, so priority: 1 displays above priority: 2.
  • Press fluid amount no longer overflows: the "mB" label is right-justified to the recipe background width so values like 1000 mB no longer run off the right edge in JEI and EMI.
  • Redundant input count text removed from the Press recipe: the count is already drawn on the slot by JEI/EMI.
  • JEI arrows now render: switched from the deprecated hardcoded gui_vanilla.png path to IGuiHelper#getRecipeArrow(), fixing the missing-arrow visuals on the chopping, grinding, and pressing categories.
  • EMI arrow no longer flickers: the filling-arrow cycle is in milliseconds (not ticks); the previous 200 value flickered ~5 times per second. Now 10000 ms.

Visual Fixes

  • Horse Chopper top no longer renders dark: the filler block above the chopper now propagates skylight and has zero light attenuation, so the crossbeam and handle on top are lit correctly.

Manual Station Display

  • Hand Grindstone displays input/output sides based on facing: output renders on the player's right and input renders on the player's left (in addition to the spinning input on top), so the pickup zones always line up with the visible items regardless of how the block was placed.

Multi-Block Fixes

  • Horse Chopper upper half now has a hitbox: adjacent blocks (hoppers, scaffolding, etc.) can be placed against the upper block again. Vanilla hoppers placed on any side of the upper half feed into the chopper through the existing filler container delegation.
  • Working-area validation: horse-powered blocks now also require a sturdy floor under the walking ring, so workers can't float over missing blocks. Levers placed inside the ring are allowed, so the area can host wall levers for redstone toggles (used by the Generator's on/off control).

Virtual Workers

  • Attached workers are now virtual renders (parity with 1.21.1 / 26.1.x): when a worker is captured by a horse-powered block, the real entity is despawned and its full NBT is stored on the block. A client-side ghost entity is reconstructed from that NBT purely for visualization (no AI, no physics, no health, no collision). The work cycle runs on a step timer (default 25 ticks/step, scaled by the captured mob's MOVEMENT_SPEED attribute) instead of waiting for the entity to physically reach each path point. Breaking the block respawns the original mob from its stored NBT at the block position; releasing via right-click leashes the mob to the player as before.

Bug Fixes

  • Worker attach no longer drops the lead instantly: setWorker previously called getClosestTarget, which invoked the side-effecting hasWorker check. When the horse was attached from near the edge of the 7-block search radius it failed the < ~6.7 block distance check, dropped a lead, and cleared the worker — making it look like the lead "popped off" on the Generator (where no canWork ticks ever pull the worker in). The worker is now snapped to the closest path point on attach, and the closest-target computation no longer triggers the invalidation drop.
  • Lead duping fixed: every attach→release→attach cycle was producing a free lead because BlockHPBase.use() gave the player a LEAD item on attach as a "refund" while setWorkerToPlayer re-leashed on release without consuming one. The attach refund has been removed — the leash investment now stays in the worker state across the cycle and is only returned as a LEAD item when the block is broken or the worker dies / wanders off. Affects all four horse-powered blocks (Chopper, Grindstone, Press, Generator).
  • Generator lead visual: the Generator now has a BlockEntityRenderer that calls the shared LeadRenderer, so the rope between the attached worker and the block actually draws (matching the Chopper / Grindstone / Press).
  • Work Saddle now renders the captured mob: the saddle uses a horsepowered:carrying item-property override. When empty, the item uses the regular vanilla saddle 2D sprite. When carrying, the override switches to a builtin/entity-parented model backed by a BlockEntityWithoutLevelRenderer that draws the vanilla saddle sprite as the base and overlays a scaled 3D preview of the carried mob on top (entity cached by UUID).

Datapack / API

  • tier, priority, and hungerCost are all optional fields on grinding and chopping recipes. Defaults preserve previous behavior.
  • horsepowered:valid_worker entity-type tag governs both worker attachment and Work Saddle pickup.