72 materials sourced from Create, Mekanism, Ice and Fire, Iron's Spells, Create: The Air War, Create: Cosmonautics and Aeronautics: Interstellar Expansion. Stats follow Tinkers' Construct 3 re-scaled onto MIAPI's vanilla-derived numbers; materials with no Tinkers counterpart are built from what the material actually is and then fitted to the nearest tier band. Palettes are not hand-picked. tools/generate_materials.py reads each material's texture out of the source mod's jar and samples it into MIAPI's seven-stop grayscale_map, reproducing MIAPI's own hand-authored copper palette to within ~2% per channel. MIAPI's material loader honours no datapack conditions, and a material whose ingredient item is missing fails to parse, so each mod's materials ship as a built-in datapack registered only when that mod is installed. Titanium is shared by both aerospace addons and so sources its ingredients from c:ingots/titanium instead of an item id. Cinder essence grants fire immunity through an attribute this mod registers and watches itself, rather than coupling to MIAPI internals. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| gradle/wrapper | ||
| src/main | ||
| tools | ||
| .gitignore | ||
| README.md | ||
| build.gradle | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| settings.gradle | ||
README.md
Create/Mekanism Modular
A Truly Modular addon for Minecraft 1.21.1 / NeoForge. It adds 72 materials drawn from Create, Mekanism, Ice and Fire, Iron's Spells 'n Spellbooks, Create: The Air War, Create: Cosmonautics and Aeronautics: Interstellar Expansion, so those mods' metals, gems, scales and essences can be used to build modular tools and armour.
Every source mod is optional. Install any subset - the materials for mods you do not have are never registered.
How it is put together
Almost all of this mod is data: MIAPI material JSON under
src/main/resources/packs/<mod>/data/cmmodular/miapi/materials/.
The small amount of Java exists for two reasons.
Conditional loading. MIAPI reads materials with its own loader, which does
not honour neoforge:conditions or anything else that could switch a file off,
and a material whose ingredient item is missing fails to parse. So each source
mod's materials are a separate built-in datapack, registered in
CMModular.java only when that mod is present.
Titanium is the exception: Air War and Cosmonautics both add a titanium ingot,
so one material covers both and draws its ingredients from c:ingots/titanium
rather than an item id. Cosmonautics already declares that tag; the tag files in
data/c/ fill it in for Air War, which ships no common tags, using optional
entries so a missing mod is not an error.
Fire immunity. Cinder essence grants immunity to fire, which is not an
attribute the game has and not a property MIAPI offers. Instead of coupling to
MIAPI's internals, FireImmunity.java registers a cmmodular:fire_immunity
attribute, the material grants it like any other attribute, and a damage handler
watches for it. Neither side knows about the other.
Stats
Tinkers' Construct 3 is the reference, re-scaled onto MIAPI's vanilla-derived numbers (iron 235 durability, diamond 1546, netherite 2016). Materials with no Tinkers counterpart are built from what the material actually is, then fitted to the nearest tier band:
| Tinkers | here | shape |
|---|---|---|
| cobalt | titanium | light, fast, durable, unremarkable damage |
| steel | steel | balanced workhorse, poor enchantability |
| hepatizon | brass, bronze | copper alloys - quick and enchantable, not durable |
| manyullyn | dragonsteel | top damage, endgame gate |
| rose gold | refined glowstone, pixie dust | fragile, huge enchantability |
| ancient hide | dragon scales, chitin | armour-first, high toughness |
Tiers 6 and 7 sit above netherite: 6 is refined obsidian, shadow steel, refined radiance, atomic alloy and the two Iron's Spells essences; 7 is the three dragonsteels and antimatter.
Real-material character does the rest of the work - lead is the heaviest thing here and swings slowest, osmium is dense and tough, HDPE weighs nothing and cannot cut rock, silver smites the undead.
All of it lives in tools/materials.py, one entry per material with the
reasoning in comments next to the numbers.
Palettes
Colours are not hand-picked. tools/generate_materials.py opens the source
mods' jars, resolves each material's item model to its texture, and samples that
texture to build MIAPI's seven-stop grayscale_map.
The sampling deliberately does not normalise a stop's colour to its brightness
number. A stop key is the brightness of MIAPI's grayscale template; its value is
whatever the material looks like at that point in its own shading, which is why
MIAPI's own netherite tops out at a murky 847a84 while iron runs to white.
Samples are taken at percentiles of the texture's brightness order, so a texture
with four shades still yields a full ramp and any hue drift between shadow and
highlight survives. Pure-black outline pixels are excluded - they are not a
shade of the material - and the darkest stop is extrapolated below the texture,
which is what MIAPI's own palettes do.
The sample points were tuned against MIAPI's hand-authored copper palette and reproduce it to within about 2% per channel.
Building
./gradlew build
Needs nothing but NeoForge - Truly Modular is a runtime dependency only, since this mod talks to it purely through datapack JSON.
Regenerating materials
Only needed after editing tools/materials.py or when a source mod changes its
textures. The generated JSON is committed, so a plain build does not need this.
python3 tools/generate_materials.py --jars ~/path/to/mod/jars
The folder needs one jar per source mod. Every item id in materials.py is
checked against those jars and the run fails on a typo, rather than shipping a
material that silently refuses to load.
Requires pillow and numpy.
Notes
- Titanium's palette comes from Cosmonautics' ingot, which is violet. Air War's
is blue-white; swap
palette_fromon the titanium entry to prefer it. - Cinder essence is nearly black, because its texture is a charred ember. It is emissive, so it still reads as fire in game.
- Dragon scales are one material per colour (12 dragon, 7 sea serpent, 3 death worm chitin). Colours within an element share stats and differ only in palette.
- Interstellar Expansion is mostly machinery. Only three of its items are a material rather than a component; solid E-710 is left out because it is rocket fuel.