Repository navigation
Library Candidates
github-actions[bot] edited this page Nov 3, 2026
·
3 revisions
Policy: where a maintained NeoForge 1.21.1 library already solves something the layer re-implements, depend on the library (like
Baubles -> Curios, Waila -> Jade, NEI -> JEI; see Bridges). This page is a survey (Modrinth API, filter versions:1.21.1 +
categories:neoforge, 2026-10-31) of the layer's use cases and what could replace the hand-rolled code. Downloads and dates come from Modrinth.
Check a licence and the nesting rules before bundling anything; "bundle" means jar-in-jar like Pehkui and the Scala libraries in build.gradle.
| Use case | Hand-rolled before | Library | Decision |
|---|---|---|---|
Entity and player size (Entity.setSize, eyeHeight, Fisk's Heroes shrink/grow) |
EntitySizes1710 side table + LivingEntityDimensionsMixin + client pose-stack scale hook |
Pehkui 3.8.3+1.21-neoforge, MIT, 10.8 M downloads, last build 2024-06 |
Adopted, bundled jar-in-jar (no install step; a separately installed newer Pehkui wins). EntitySizes1710 maps sizes to HITBOX_WIDTH/HEIGHT, MODEL_WIDTH/HEIGHT, EYE_HEIGHT; poses (sneak, swim) stay proportional. Risk: no release since 2024, but it still works on NeoForge 21.1.258 |
| Use case | What we hand-roll today | Candidate (Modrinth slug) | 1.21.1 NeoForge version, licence, downloads, state | Recommendation |
|---|---|---|---|---|
Player/entity pose animation (ModelBiped rotation hooks, first-person arm pose, client/FirstPersonPose, Fisk animations) |
Legacy ModelBase/ModelBiped classes in the shim plus pose hooks applied to the modern player model |
player-animation-library (Player Animator) |
1.1.6 (2026-08), MIT, 3.5 M, active | Later: useful for Fisk-style whole-body animation layers, not for plain ModelBiped rotations (legacy model code sets the angles itself every frame) |
| Animated entity/item models | Legacy ModelBase renderers run as is (LegacyEntityRenderer) |
geckolib |
4.9.3 (2026-09), MIT, 78.7 M, active | No: legacy mods ship Java models, not GeckoLib assets. Only relevant for an addon that re-skins a legacy entity |
Camera roll/shake (Fisk CameraHandler.orient, ViewportEvent.ComputeCameraAngles in FiskHeroesClient) |
Own proxy of the legacy GL calls onto the camera event | handycam |
2.1.0+1.21.1 (2026-10), LGPL-3.0-only, 35 K, active | No: its API is for new effects; our case is translating arbitrary GL matrix calls, which a shake library cannot express |
| Gravity / jump / step / reach | Vanilla attributes (Attributes.GRAVITY, STEP_HEIGHT, ENTITY_INTERACTION_RANGE) in the shim, Entity.mcc$set$stepHeight
|
vanilla 1.21.1 attributes; Pehkui also has STEP_HEIGHT, JUMP_HEIGHT, MOTION, REACH scale types |
n/a | Already vanilla. Consider Pehkui STEP_HEIGHT for size-coupled step height (Fisk) if the attribute proves insufficient |
Config screens (client/LegacyConfigScreens, GuiConfig/ConfigElement in the 1.12 shim) |
Own screens rendering legacy Configuration categories |
cloth-config (15.0.140+neoforge, LGPL-3.0-only, 189 M, last build 2024-09; the NeoForge-native Configured has no 1.21.1 NeoForge build on Modrinth) |
Works but the 1.12 FML config-GUI API (IConfigElement, GuiConfig) maps poorly to its builder model |
Later, optional: only if players ask for nicer screens; keep ours as the fallback |
Dimension sky, fog, clouds (LegacyDimensionEffects, LegacyFog, LegacyHorizon) |
Own DimensionSpecialEffects
|
vanilla DimensionSpecialEffects + NeoForge render-stage events |
n/a | No library needed |
Custom shaders / post effects (legacy GL20 shader code, Fisk glow) |
Legacy GL emulation in LegacyGlTexture/DisplayLists
|
veil (4.5.2, 2026-10, LGPL-3.0-only, 530 K, active) |
Powerful render framework, but heavy and shaders in legacy mods are GLSL 1.20 strings, which need translation anyway | No for now; revisit when a legacy shader mod has to work |
Particles (legacy EffectRenderer, EntityFX, 1.12 Particle) |
Shim particle classes drawing through modern sprites | vanilla Particle + registry; no library found |
n/a | No |
Multipart blocks (Forge Multipart / CCL / Chicken Bones' cb-multipart) |
Legacy mods ship their own ForgeMultipart; the layer translates it like any mod |
cb-multipart 3.5.0.155 (2025-12), LGPL-2.1-only, 214 K |
Native 1.21.1 multipart for modern mods; unrelated to the legacy API classes the old jar calls | No (a bridge would map TMultiPart to it: large, only if multipart mods (ProjectRed, EnderIO conduits) prove common) |
Tinkers' Construct / Mantle (legacy mantle/tconstruct libs) |
Mods using Mantle load their own jar |
hexa-tinkers-construct-unofficial-port (not an API) |
Mantle itself is not on Modrinth for 1.21.1 NeoForge in the search | No |
| Fluid tanks, item and energy handlers |
CapabilityRules/BuiltinAdapters map legacy tanks onto NeoForge capabilities |
NeoForge's own capabilities (IFluidHandler, IItemHandler, IEnergyStorage) |
n/a | Already the modern API; no extra library |
Entity data / capabilities attached to entities (our EntityBridge, ExtendedEntityProperties, 1.12 capabilities) |
NeoForge data attachments | NeoForge data attachments (vanilla of NeoForge); cardinal-components has no NeoForge 1.21.1 build |
n/a | Already done with attachments |
| Item animations / item model overrides |
LegacyItemRenderer, IsbrhBlockModel
|
none suitable (tiny-item-animations is a resource-pack tweak, LPUL licence) |
n/a | No |
Key rebinding and conflicts (client/LegacyKeys, LegacyKeyConflicts) |
Own mapping of LWJGL 2 key codes to vanilla KeyMapping
|
controlling (19.0.5, MIT, 43 M, 2025-03) is a search UI over the vanilla controls screen |
Complements; no API we depend on | No |
Worldgen helpers (biome modifiers, structure sets for mod dimensions, worldgen/ generators) |
Own chunk generators, features hooked on events |
lithostitched (1.8.1, MIT, 26 M, 2026-10, active): data-driven worldgen modifiers |
Aimed at datapack authors; our generators run legacy code per chunk, no overlap | No |
Armor models (LegacyArmorLayer renders ModelBiped armor) |
Own layer |
armor-model-api (1.1.0+1.21.1-neoforge, MIT, 219 K, 2026-09) |
Small and recent; would replace the layer's registration plumbing, not the legacy model drawing | Later: evaluate when armor rendering is next touched |
| First-person model / skin layers |
FirstPersonPose, arm render hooks |
first-person-model, 3dskinlayers (custom licence) |
Client features, no API to build on | No |
Utility libraries many mods bundle (kotlin-for-forge 5.12.0 LGPL-2.1, owo-lib MIT, puzzles-lib MPL-2.0, bookshelf-lib LGPL-2.1, lithostitched) |
Not used by the layer | Needed only when a bridged modern mod needs them | n/a | No; leave to the user's pack |
- Gradle: Modrinth maven is already declared with the
maven.modrinthcontent filter; add the version togradle.properties. - Required and tiny (MIT/Apache, a few hundred KB): bundle with
jarJar(implementation(...)), as for Pehkui. - Optional and big:
compileOnly, soft-load through the bridge pattern inLibraryBridges.java(class presence check, no direct references in always-loaded classes) and say so in the README config table. - Never commit jars; list the licence in the PR.