Curios API Forge — community port
This is an unofficial derivative work — a port of the original Curios API, not the original project itself.
Original project: Curios API by C4 (TheIllusiveC4)
- CurseForge: https://www.curseforge.com/minecraft/mc-mods/curios
- Source code: https://github.com/TheIllusiveC4/Curios
- License: GNU LGPL-3.0-or-later (open source)
Port author and maintainer: Fitals
All credit for the original mod, its design, code and API belongs to C4. This project is not affiliated with, sponsored by, or endorsed by the original author. It is not a reupload of the original jar — it is a separate build with a Forge-specific platform layer.
How this project differs from the original
The gameplay content and the public API are the same as upstream Curios 9.5.1. The differences are the loader port itself and a set of bug fixes.
Platform port: NeoForge → Forge
- Rebuilt the loader-specific layer for Forge: entity and item capabilities, networking (
SimpleChannel), configuration (ForgeConfigSpec), event hooks, menu and screen registration. - Mixin configs are declared through the
MixinConfigsmanifest attribute, because Forge does not read[[mixins]]frommods.toml. - Access transformers use SRG names, as required by Forge.
- Datapack slot conditions accept both
forge:conditionandneoforge:conditions, so existing NeoForge datapacks work without changes. - JEI integration is kept. EMI and REI integrations are removed because those mods have no Forge 1.21.1 builds; their screen-exclusion hooks are therefore absent.
Bug fixes included in this port (these bugs also exist in upstream 9.5.1)
- Fixed item loss when loading a curio inventory with an occupied slot — the saved item is now returned to its owner instead of disappearing.
- Fixed cosmetic items being destroyed when slots are removed or resized.
- Fixed Enderman anger checks ignoring the player's mask for the rest of the tick.
- Fixed an NPE in
CurioSlot#isActiveStatefor slots without active states. - Fixed the wrong NBT node being read for
SizeinCurioStacksHandler#deserializeNBT. - Fixed client disconnects ("Curios Networking Failure") caused by out-of-range slot indices.
- Hardened server-side packet checks:
CPacketDestroyis creative-only, render toggles reject invalid slots. - Fixed
findCuriosleaking its cached list; empty cache keys are no longer stored. - Fixed
show_in_tooltipbeing ignored forcurios:attribute_modifiers. CurioCanUnequipEvent#getUnequipResultno longer returnsnull.- Made the predicate registry and the
SlotAttributecache thread-safe. - Fixed "+N slots" tooltip selection and non-deterministic slot order.
- Fixed
itemCacheKeycontainingOptional[...]. - Fixed the test advancement path for 1.21.
Features
- Expandable slots through a central registry — identical slot identifiers merge automatically, so multiple mods can share one slot type.
- Slots are created on demand — nothing is added by default, no unused slots in the GUI.
- Fully customizable slots — custom backgrounds, sizes, rendering, and default enabled/disabled or hidden states.
- Tag-driven item assignment — which items fit into a slot is defined with vanilla tags in datapacks.
- Vanilla mechanics integration — Mending, Curses, attribute modifiers and tooltips work for equipped curios.
- Single in-game GUI — all available slots in one screen, opened with the G key by default.
Supported versions
Every build and the exact Minecraft / loader version it targets are listed in the Files tab.
Credits and license
- Original mod, design, code and API: C4 (TheIllusiveC4) — https://www.curseforge.com/minecraft/mc-mods/curios — https://github.com/TheIllusiveC4/Curios
- Forge port and maintenance: Fitals
- Original Curios API is open source under LGPL-3.0-or-later; this port's own changes are distributed under the MIT license. Original copyright notices are retained in the source headers.

