File Details
horsepowered 2.5.0
- R
- May 20, 2026
- 457.33 KB
- 12
- 1.21.1
- NeoForge
File Name
horsepowered-2.5.0.jar
Supported Versions
- 1.21.1
Curse Maven Snippet
Horse Powered 2.5.0
New Content
- Animal Trap: wooden-retextured mob-spawner block that catches passive animals over time. Right-click bait into the empty trap, wait, and the trap rolls a 5% chance per second after the minimum wait elapses. Once an animal is caught it is stored on the BlockEntity as NBT (not as a live entity) and renders inside the cage spinning the way a vanilla mob spawner does. Every 2.5 minutes the captured entity rolls its vanilla death loot table and the drops land in the trap's internal inventory. Hoppers below the trap pull drops out; hoppers above only insert valid bait. Sneak+right-click releases the captured animal back into the world. Right-click with an empty hand drops all stored items on the ground. Mining the trap with a stone-tier-or-better axe drops it with full NBT preserved (bait, drops, captured entity) so a working farm can be relocated. Crafted with 4 wooden slabs, 2 iron chains, 2 smooth stone, and a wooden pressure plate.
- Flint and Tinder: low-durability flint-and-steel alternative. Crafted from 8 dead bush surrounding a piece of flint. Behaves like flint and steel for fire/campfire/candle lighting but only has 16 durability. Pair it with the Drying Rack's saplings-to-dead-bush recipe for a renewable fire-starter loop.
Animal Trap Details
Data-driven recipes (horsepowered:trapping)
Pack makers add their own bait → entity mappings at data/<ns>/recipe/trapping/*.json. Recipe fields:
bait— Ingredient (required)entity— entity type ResourceLocation (required)time— minimum wait in ticks before the dice roll begins (default 1200)priority— sort order in recipe viewers (default 0, lowest displays first)biome— optional biome tag the trap must sit inside before the dice roll countswaterlogged— optional boolean; when true the trap must be waterlogged before the dice roll counts
When biome or waterlogged conditions are not met the bait stays, the timer keeps running, and Jade shows "Wrong biome" or "Needs water" in red so you know to relocate or waterlog the trap.
Built-in recipes
| Animal | Bait | Wait | Extra conditions |
|---|---|---|---|
| Cow | Wheat | 60s | — |
| Pig | Carrot | 60s | — |
| Sheep | Short Grass | 60s | — |
| Chicken | Wheat Seeds | 45s | — |
| Rabbit | Dandelion | 75s | — |
| Goat | Apple | 75s | — |
| Mooshroom | Red Mushroom | 90s | — |
| Strider | Nether Wart | 90s | Biome: #minecraft:is_nether |
| Salmon | Kelp | 75s | Biome: #horsepowered:fish_habitat, waterlogged |
The horsepowered:fish_habitat biome tag bundles #minecraft:is_river, #minecraft:is_ocean, and #minecraft:is_deep_ocean, so it works for future fish recipes too.
Recipe Viewer Improvements
- Trapping category added to JEI and EMI showing the bait, the trap as the catalyst, and the captured animal's spawn egg as the result. Each recipe lists the minimum wait, "5% Chance/sec" after, and any biome or waterlogged gate.
- Drying Rack cross-fade: during the last 30% of a drying recipe the input item smoothly fades out as the output fades in, instead of snapping at completion. Fade is partial-tick interpolated for buttery smoothness.
Visual / Rendering Fixes
- JEI count text now renders:
GuiGraphicsExtractor.text()in 1.21.x silently drops text when the color's alpha byte is zero. All Horse Powered JEI categories used0x808080(alpha 0) for the strike/chop/turn/hunger labels, so those lines never showed up. Switched to0xFF808080across every category so the counts and hunger costs actually display. - Granite Anvil swing animation: right-clicking the anvil to crush now plays the player's arm-swing animation. The original
useItemOngatedInteractionResult.SUCCESSbehind a client-sidecanWork()check that always returned false (recipe lookup requiresServerLevel), so the client never predicted a successful interaction and skipped the swing. Now the swing is triggered explicitly on the server.
Jade Improvements
- Granite Anvil tooltip: now shows input/output items and remaining strikes when looking at the block, matching the Drying Rack's progress display.
- Animal Trap tooltip: shows bait/drops, "Trapping... Xs", "Trap set", "Caught: ⟨entity⟩", and "Next drop: 2:30" countdown that ticks down live via a server-data provider. Red warnings appear when bait is loaded but biome or waterlogged conditions aren't satisfied.
Datapack / API
horsepowered:trappingrecipe type — see Animal Trap Details above for fields.horsepowered:fish_habitatbiome tag — aggregates rivers + oceans + deep oceans for waterlogged-fish recipes.- Trap drops use the captured entity's vanilla loot table with
LootContextParams.DAMAGE_SOURCE = damageSources().generic(), giving raw drops (e.g. raw porkchop, not cooked). - Trap state is preserved across mining via
DataComponents.BLOCK_ENTITY_DATA, so the dropped item carries the captured entity NBT + inventory contents.
Sneaky Bug Fixes Worth Calling Out
- Drying rack progress no longer steps in 50 ms chunks: the renderer's progress ratio now interpolates with
partialTick, and the BE has a client-side ticker that advancesprogress[slot]per client tick (with a defensiveif (!level.isClientSide) return;guard so it can never run on the server). - Trap drops actually go into the trap inventory (caught during this release): an early version of
depositDroprouted throughItemStackHandler.insertItemwhich short-circuits onisItemValid— drop slots returned false to keep hoppers out of them, so loot was falling out the top of the trap. Now uses a direct two-passsetStackInSlotmerge that bypasses the validity check while still keeping hoppers locked out of insertion via the publicisItemValidcontract. - Trap drops can be hopper-extracted (caught during this release): the
Capabilities.ItemHandler.BLOCKcapability was never registered for the trap BE, so hoppers couldn't see the inventory at all. Now wired inHorsePowerMod.registerCapabilities.

