From 5828bbfb0182ed5c350fcced9a5810f4cd87a055 Mon Sep 17 00:00:00 2001 From: The_miro Date: Wed, 12 Aug 2026 19:40:16 +0200 Subject: [PATCH] Treat every mod's version of a material as the same material Silver comes from Ice and Fire, Immersive Engineering, Occultism and Superb Warfare; steel from Mekanism, Immersive Engineering and Superb Warfare. Picking one provider meant the other mods' ingots were not recognised as that material at all - they simply could not be used. Each material now also accepts the c: common tag that every provider registers into, on top of the primary provider's own items, so any mod's silver ingot is just silver. 43 materials unify this way. No origin is recorded, because there is nothing to record: MIAPI stores only the material id on the item. The primary provider's item stays first in the ingredient list, so anywhere a single representative item is read back out it resolves to the default rather than to whichever variant was used. Tags are also the safe half of the pair - an unknown tag resolves to nothing while an unknown item id fails the whole material - which is why the material still lives in its primary provider's pack, where its icon and first ingredient are guaranteed to exist. MIAPI's own wood material mixes items and tags the same way. Create: The Air War ships no common tags, so its titanium is added to c:ingots/titanium with optional entries. Co-Authored-By: Claude Opus 5 --- README.md | 28 ++++++-- .../data/c/tags/item/ingots/titanium.json | 9 +++ .../data/c/tags/item/nuggets/titanium.json | 9 +++ .../data/c/tags/item/plates/titanium.json | 9 +++ .../materials/crystal/certus_quartz.json | 4 ++ .../miapi/materials/crystal/fluix.json | 4 ++ .../miapi/materials/crystal/source_gem.json | 4 ++ .../miapi/materials/metal/titanium.json | 12 ++++ .../miapi/materials/metal/titanium_alloy.json | 12 ++++ .../miapi/materials/metal/andesite_alloy.json | 12 ++++ .../miapi/materials/metal/brass.json | 12 ++++ .../cmmodular/miapi/materials/metal/zinc.json | 12 ++++ .../materials/metal/industrial_iron.json | 12 ++++ .../materials/crystal/ender_crystal.json | 4 ++ .../materials/crystal/enticing_crystal.json | 4 ++ .../materials/crystal/prescient_crystal.json | 4 ++ .../materials/crystal/pulsating_crystal.json | 4 ++ .../materials/crystal/vibrant_crystal.json | 4 ++ .../materials/crystal/weather_crystal.json | 4 ++ .../materials/metal/conductive_alloy.json | 12 ++++ .../miapi/materials/metal/dark_steel.json | 12 ++++ .../miapi/materials/metal/end_steel.json | 12 ++++ .../materials/metal/energetic_alloy.json | 12 ++++ .../materials/metal/pulsating_alloy.json | 12 ++++ .../miapi/materials/metal/redstone_alloy.json | 12 ++++ .../miapi/materials/metal/soularium.json | 12 ++++ .../miapi/materials/metal/vibrant_alloy.json | 12 ++++ .../miapi/materials/crystal/sapphire.json | 4 ++ .../miapi/materials/metal/silver.json | 12 ++++ .../miapi/materials/metal/aluminum.json | 12 ++++ .../miapi/materials/metal/constantan.json | 12 ++++ .../miapi/materials/metal/electrum.json | 12 ++++ .../miapi/materials/metal/hop_graphite.json | 12 ++++ .../miapi/materials/metal/nickel.json | 12 ++++ .../miapi/materials/metal/pink_slime.json | 12 ++++ .../miapi/materials/metal/mithril.json | 12 ++++ .../miapi/materials/crystal/fluorite.json | 4 ++ .../miapi/materials/metal/bronze.json | 12 ++++ .../cmmodular/miapi/materials/metal/lead.json | 12 ++++ .../miapi/materials/metal/osmium.json | 12 ++++ .../materials/metal/refined_glowstone.json | 12 ++++ .../materials/metal/refined_obsidian.json | 12 ++++ .../miapi/materials/metal/steel.json | 12 ++++ .../cmmodular/miapi/materials/metal/tin.json | 12 ++++ .../miapi/materials/metal/uranium.json | 12 ++++ .../miapi/materials/metal/iesnium.json | 12 ++++ .../miapi/materials/metal/tungsten.json | 12 ++++ tools/materials.py | 65 +++++++++++++++++++ 48 files changed, 541 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/data/c/tags/item/ingots/titanium.json create mode 100644 src/main/resources/data/c/tags/item/nuggets/titanium.json create mode 100644 src/main/resources/data/c/tags/item/plates/titanium.json diff --git a/README.md b/README.md index ee45e91..55b7337 100644 --- a/README.md +++ b/README.md @@ -24,13 +24,27 @@ 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. -**Overlapping metals.** Several metals come from more than one mod - steel, -lead and uranium from Mekanism and Immersive Engineering, silver from Ice and -Fire and Immersive Engineering, titanium from both aerospace addons. Each one -picks a single provider rather than accepting either, so the crafting screen -shows one entry per metal instead of two identical-looking ones. Providers are -Mekanism for steel/lead/uranium, Ice and Fire for silver, Cosmonautics for -titanium; swapping one is a one-line change in `tools/materials.py`. +**Identical materials are one material.** Several metals and gems come from +more than one mod - silver from Ice and Fire, Immersive Engineering, Occultism +and Superb Warfare, steel from Mekanism, Immersive Engineering and Superb +Warfare, and so on. There is one entry per metal, and every provider's version +feeds it: alongside the primary provider's own items each material also accepts +the `c:` common tag that all of them register into. Any mod's silver ingot is +just silver. + +Nothing records where a stack came from, because there is nothing to record - +MIAPI stores only the material id on the item, so a tool built from Immersive +Engineering silver is indistinguishable from one built with Ice and Fire silver. +The primary provider's item is listed first, so anywhere a single representative +item is read back out - repair and deconstruct previews - it resolves to the +default rather than to whichever variant was used. Primaries are Mekanism for +steel/lead/uranium, Ice and Fire for silver, Cosmonautics for titanium; each is +a one-line change in `tools/materials.py`. + +The material still lives in its primary provider's pack, so its icon and its +first ingredient always point at an item that exists. Create: The Air War is the +one provider that ships no common tags, so `data/c/` adds its titanium to +`c:ingots/titanium` with optional entries. **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 diff --git a/src/main/resources/data/c/tags/item/ingots/titanium.json b/src/main/resources/data/c/tags/item/ingots/titanium.json new file mode 100644 index 0000000..8ed2dba --- /dev/null +++ b/src/main/resources/data/c/tags/item/ingots/titanium.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + { + "id": "create_the_air_wars:titaniumingot", + "required": false + } + ] +} diff --git a/src/main/resources/data/c/tags/item/nuggets/titanium.json b/src/main/resources/data/c/tags/item/nuggets/titanium.json new file mode 100644 index 0000000..02cf2f7 --- /dev/null +++ b/src/main/resources/data/c/tags/item/nuggets/titanium.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + { + "id": "create_the_air_wars:titaniumnugget", + "required": false + } + ] +} diff --git a/src/main/resources/data/c/tags/item/plates/titanium.json b/src/main/resources/data/c/tags/item/plates/titanium.json new file mode 100644 index 0000000..0a9b381 --- /dev/null +++ b/src/main/resources/data/c/tags/item/plates/titanium.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + { + "id": "create_the_air_wars:titaniumsheet", + "required": false + } + ] +} diff --git a/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/certus_quartz.json b/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/certus_quartz.json index a2078a5..960bf94 100644 --- a/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/certus_quartz.json +++ b/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/certus_quartz.json @@ -42,6 +42,10 @@ { "item": "ae2:certus_quartz_crystal", "value": 1.0 + }, + { + "tag": "c:gems/certus_quartz", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/fluix.json b/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/fluix.json index f5e70f2..2701b26 100644 --- a/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/fluix.json +++ b/src/main/resources/packs/ae2/data/cmmodular/miapi/materials/crystal/fluix.json @@ -50,6 +50,10 @@ { "item": "ae2:fluix_crystal", "value": 1.0 + }, + { + "tag": "c:gems/fluix", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/ars_nouveau/data/cmmodular/miapi/materials/crystal/source_gem.json b/src/main/resources/packs/ars_nouveau/data/cmmodular/miapi/materials/crystal/source_gem.json index d28656e..c4ee5df 100644 --- a/src/main/resources/packs/ars_nouveau/data/cmmodular/miapi/materials/crystal/source_gem.json +++ b/src/main/resources/packs/ars_nouveau/data/cmmodular/miapi/materials/crystal/source_gem.json @@ -51,6 +51,10 @@ { "item": "ars_nouveau:source_gem", "value": 1.0 + }, + { + "tag": "c:gems/source", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium.json b/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium.json index 69c7211..35f909f 100644 --- a/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium.json +++ b/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium.json @@ -66,6 +66,18 @@ { "item": "rocketnautics:titanium_block", "value": 9.0 + }, + { + "tag": "c:ingots/titanium", + "value": 1.0 + }, + { + "tag": "c:nuggets/titanium", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/titanium", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium_alloy.json b/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium_alloy.json index 7f0a448..0131151 100644 --- a/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium_alloy.json +++ b/src/main/resources/packs/cosmonautics/data/cmmodular/miapi/materials/metal/titanium_alloy.json @@ -56,6 +56,18 @@ { "item": "rocketnautics:titanium_alloy_block", "value": 9.0 + }, + { + "tag": "c:ingots/titanium_alloy", + "value": 1.0 + }, + { + "tag": "c:nuggets/titanium_alloy", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/titanium_alloy", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/andesite_alloy.json b/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/andesite_alloy.json index 9286238..b700510 100644 --- a/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/andesite_alloy.json +++ b/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/andesite_alloy.json @@ -44,6 +44,18 @@ { "item": "create:andesite_alloy_block", "value": 9.0 + }, + { + "tag": "c:ingots/andesite_alloy", + "value": 1.0 + }, + { + "tag": "c:nuggets/andesite_alloy", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/andesite_alloy", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/brass.json b/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/brass.json index c9c1dd8..a685323 100644 --- a/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/brass.json +++ b/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/brass.json @@ -51,6 +51,18 @@ { "item": "create:brass_sheet", "value": 1.0 + }, + { + "tag": "c:ingots/brass", + "value": 1.0 + }, + { + "tag": "c:nuggets/brass", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/brass", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/zinc.json b/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/zinc.json index fc26568..3126c80 100644 --- a/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/zinc.json +++ b/src/main/resources/packs/create/data/cmmodular/miapi/materials/metal/zinc.json @@ -47,6 +47,18 @@ { "item": "create:zinc_block", "value": 9.0 + }, + { + "tag": "c:ingots/zinc", + "value": 1.0 + }, + { + "tag": "c:nuggets/zinc", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/zinc", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/createdeco/data/cmmodular/miapi/materials/metal/industrial_iron.json b/src/main/resources/packs/createdeco/data/cmmodular/miapi/materials/metal/industrial_iron.json index 514b7cd..a2c5589 100644 --- a/src/main/resources/packs/createdeco/data/cmmodular/miapi/materials/metal/industrial_iron.json +++ b/src/main/resources/packs/createdeco/data/cmmodular/miapi/materials/metal/industrial_iron.json @@ -42,6 +42,18 @@ { "item": "createdeco:industrial_iron_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/industrial_iron", + "value": 1.0 + }, + { + "tag": "c:nuggets/industrial_iron", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/industrial_iron", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/ender_crystal.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/ender_crystal.json index e8aa37e..25097ac 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/ender_crystal.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/ender_crystal.json @@ -50,6 +50,10 @@ { "item": "enderio:ender_crystal", "value": 1.0 + }, + { + "tag": "c:gems/ender_crystal", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/enticing_crystal.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/enticing_crystal.json index 519f4b7..b297a92 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/enticing_crystal.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/enticing_crystal.json @@ -54,6 +54,10 @@ { "item": "enderio:enticing_crystal", "value": 1.0 + }, + { + "tag": "c:gems/enticing_crystal", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/prescient_crystal.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/prescient_crystal.json index 20548f3..7daee65 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/prescient_crystal.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/prescient_crystal.json @@ -47,6 +47,10 @@ { "item": "enderio:prescient_crystal", "value": 1.0 + }, + { + "tag": "c:gems/prescient_crystal", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/pulsating_crystal.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/pulsating_crystal.json index bfbf72f..01831e5 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/pulsating_crystal.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/pulsating_crystal.json @@ -50,6 +50,10 @@ { "item": "enderio:pulsating_crystal", "value": 1.0 + }, + { + "tag": "c:gems/pulsating_crystal", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/vibrant_crystal.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/vibrant_crystal.json index 51e9a06..4d2a6d8 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/vibrant_crystal.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/vibrant_crystal.json @@ -50,6 +50,10 @@ { "item": "enderio:vibrant_crystal", "value": 1.0 + }, + { + "tag": "c:gems/vibrant_crystal", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/weather_crystal.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/weather_crystal.json index 1e880c4..80dd169 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/weather_crystal.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/crystal/weather_crystal.json @@ -50,6 +50,10 @@ { "item": "enderio:weather_crystal", "value": 1.0 + }, + { + "tag": "c:gems/weather_crystal", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/conductive_alloy.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/conductive_alloy.json index 89e3926..03c47cd 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/conductive_alloy.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/conductive_alloy.json @@ -42,6 +42,18 @@ { "item": "enderio:conductive_alloy_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/conductive_alloy", + "value": 1.0 + }, + { + "tag": "c:nuggets/conductive_alloy", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/conductive_alloy", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/dark_steel.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/dark_steel.json index 643b82d..08ded9b 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/dark_steel.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/dark_steel.json @@ -48,6 +48,18 @@ { "item": "enderio:dark_steel_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/dark_steel", + "value": 1.0 + }, + { + "tag": "c:nuggets/dark_steel", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/dark_steel", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/end_steel.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/end_steel.json index b322645..d62b391 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/end_steel.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/end_steel.json @@ -48,6 +48,18 @@ { "item": "enderio:end_steel_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/end_steel", + "value": 1.0 + }, + { + "tag": "c:nuggets/end_steel", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/end_steel", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/energetic_alloy.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/energetic_alloy.json index 2c13f2f..31b5d36 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/energetic_alloy.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/energetic_alloy.json @@ -52,6 +52,18 @@ { "item": "enderio:energetic_alloy_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/energetic_alloy", + "value": 1.0 + }, + { + "tag": "c:nuggets/energetic_alloy", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/energetic_alloy", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/pulsating_alloy.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/pulsating_alloy.json index 6dbfe7e..46d3acc 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/pulsating_alloy.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/pulsating_alloy.json @@ -50,6 +50,18 @@ { "item": "enderio:pulsating_alloy_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/pulsating_alloy", + "value": 1.0 + }, + { + "tag": "c:nuggets/pulsating_alloy", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/pulsating_alloy", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/redstone_alloy.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/redstone_alloy.json index 808d351..8dc42d1 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/redstone_alloy.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/redstone_alloy.json @@ -50,6 +50,18 @@ { "item": "enderio:redstone_alloy_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/redstone_alloy", + "value": 1.0 + }, + { + "tag": "c:nuggets/redstone_alloy", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/redstone_alloy", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/soularium.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/soularium.json index 155137a..4b8b6dc 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/soularium.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/soularium.json @@ -47,6 +47,18 @@ { "item": "enderio:soularium_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/soularium", + "value": 1.0 + }, + { + "tag": "c:nuggets/soularium", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/soularium", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/vibrant_alloy.json b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/vibrant_alloy.json index ef1811e..8791d14 100644 --- a/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/vibrant_alloy.json +++ b/src/main/resources/packs/enderio/data/cmmodular/miapi/materials/metal/vibrant_alloy.json @@ -52,6 +52,18 @@ { "item": "enderio:vibrant_alloy_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/vibrant_alloy", + "value": 1.0 + }, + { + "tag": "c:nuggets/vibrant_alloy", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/vibrant_alloy", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/crystal/sapphire.json b/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/crystal/sapphire.json index cb5fd56..6b3713f 100644 --- a/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/crystal/sapphire.json +++ b/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/crystal/sapphire.json @@ -46,6 +46,10 @@ { "item": "iceandfire:sapphire_block", "value": 9.0 + }, + { + "tag": "c:gems/sapphire", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/metal/silver.json b/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/metal/silver.json index 9bd93ab..28fc425 100644 --- a/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/metal/silver.json +++ b/src/main/resources/packs/iceandfire/data/cmmodular/miapi/materials/metal/silver.json @@ -54,6 +54,18 @@ { "item": "iceandfire:silver_block", "value": 9.0 + }, + { + "tag": "c:ingots/silver", + "value": 1.0 + }, + { + "tag": "c:nuggets/silver", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/silver", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/aluminum.json b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/aluminum.json index 7494f48..2b4c626 100644 --- a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/aluminum.json +++ b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/aluminum.json @@ -59,6 +59,18 @@ { "item": "immersiveengineering:plate_aluminum", "value": 1.0 + }, + { + "tag": "c:ingots/aluminum", + "value": 1.0 + }, + { + "tag": "c:nuggets/aluminum", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/aluminum", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/constantan.json b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/constantan.json index 9505657..2e14248 100644 --- a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/constantan.json +++ b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/constantan.json @@ -46,6 +46,18 @@ { "item": "immersiveengineering:plate_constantan", "value": 1.0 + }, + { + "tag": "c:ingots/constantan", + "value": 1.0 + }, + { + "tag": "c:nuggets/constantan", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/constantan", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/electrum.json b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/electrum.json index ad58f88..30eed09 100644 --- a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/electrum.json +++ b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/electrum.json @@ -52,6 +52,18 @@ { "item": "immersiveengineering:plate_electrum", "value": 1.0 + }, + { + "tag": "c:ingots/electrum", + "value": 1.0 + }, + { + "tag": "c:nuggets/electrum", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/electrum", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/hop_graphite.json b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/hop_graphite.json index bb944a6..75dd4ef 100644 --- a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/hop_graphite.json +++ b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/hop_graphite.json @@ -58,6 +58,18 @@ { "item": "immersiveengineering:plate_hop_graphite", "value": 1.0 + }, + { + "tag": "c:ingots/hop_graphite", + "value": 1.0 + }, + { + "tag": "c:nuggets/hop_graphite", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/hop_graphite", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/nickel.json b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/nickel.json index 586d6d9..3d550e3 100644 --- a/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/nickel.json +++ b/src/main/resources/packs/immersiveengineering/data/cmmodular/miapi/materials/metal/nickel.json @@ -47,6 +47,18 @@ { "item": "immersiveengineering:plate_nickel", "value": 1.0 + }, + { + "tag": "c:ingots/nickel", + "value": 1.0 + }, + { + "tag": "c:nuggets/nickel", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/nickel", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/industrialforegoing/data/cmmodular/miapi/materials/metal/pink_slime.json b/src/main/resources/packs/industrialforegoing/data/cmmodular/miapi/materials/metal/pink_slime.json index 40ba997..3fa0a36 100644 --- a/src/main/resources/packs/industrialforegoing/data/cmmodular/miapi/materials/metal/pink_slime.json +++ b/src/main/resources/packs/industrialforegoing/data/cmmodular/miapi/materials/metal/pink_slime.json @@ -50,6 +50,18 @@ { "item": "industrialforegoing:pink_slime_ingot", "value": 1.0 + }, + { + "tag": "c:ingots/pink_slime", + "value": 1.0 + }, + { + "tag": "c:nuggets/pink_slime", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/pink_slime", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/irons_spellbooks/data/cmmodular/miapi/materials/metal/mithril.json b/src/main/resources/packs/irons_spellbooks/data/cmmodular/miapi/materials/metal/mithril.json index 95aad64..9fdfe07 100644 --- a/src/main/resources/packs/irons_spellbooks/data/cmmodular/miapi/materials/metal/mithril.json +++ b/src/main/resources/packs/irons_spellbooks/data/cmmodular/miapi/materials/metal/mithril.json @@ -52,6 +52,18 @@ { "item": "irons_spellbooks:mithril_ingot", "value": 1.0 + }, + { + "tag": "c:ingots/mithril", + "value": 1.0 + }, + { + "tag": "c:nuggets/mithril", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/mithril", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/crystal/fluorite.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/crystal/fluorite.json index b1e2c35..e121b3f 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/crystal/fluorite.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/crystal/fluorite.json @@ -54,6 +54,10 @@ { "item": "mekanism:block_fluorite", "value": 4.0 + }, + { + "tag": "c:gems/fluorite", + "value": 1.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/bronze.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/bronze.json index 9819bc9..372812d 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/bronze.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/bronze.json @@ -46,6 +46,18 @@ { "item": "mekanism:block_bronze", "value": 9.0 + }, + { + "tag": "c:ingots/bronze", + "value": 1.0 + }, + { + "tag": "c:nuggets/bronze", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/bronze", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/lead.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/lead.json index b3cf111..09361c0 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/lead.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/lead.json @@ -59,6 +59,18 @@ { "item": "mekanism:block_lead", "value": 9.0 + }, + { + "tag": "c:ingots/lead", + "value": 1.0 + }, + { + "tag": "c:nuggets/lead", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/lead", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/osmium.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/osmium.json index c4f6001..4e7f31c 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/osmium.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/osmium.json @@ -59,6 +59,18 @@ { "item": "mekanism:block_osmium", "value": 9.0 + }, + { + "tag": "c:ingots/osmium", + "value": 1.0 + }, + { + "tag": "c:nuggets/osmium", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/osmium", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_glowstone.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_glowstone.json index b3c22c0..e44e073 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_glowstone.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_glowstone.json @@ -58,6 +58,18 @@ { "item": "mekanism:block_refined_glowstone", "value": 9.0 + }, + { + "tag": "c:ingots/refined_glowstone", + "value": 1.0 + }, + { + "tag": "c:nuggets/refined_glowstone", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/refined_glowstone", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_obsidian.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_obsidian.json index eb0c0b9..75e6920 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_obsidian.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/refined_obsidian.json @@ -62,6 +62,18 @@ { "item": "mekanism:block_refined_obsidian", "value": 9.0 + }, + { + "tag": "c:ingots/refined_obsidian", + "value": 1.0 + }, + { + "tag": "c:nuggets/refined_obsidian", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/refined_obsidian", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/steel.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/steel.json index 9256e83..5670294 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/steel.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/steel.json @@ -47,6 +47,18 @@ { "item": "mekanism:block_steel", "value": 9.0 + }, + { + "tag": "c:ingots/steel", + "value": 1.0 + }, + { + "tag": "c:nuggets/steel", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/steel", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/tin.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/tin.json index 7ce2f30..463f2f2 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/tin.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/tin.json @@ -47,6 +47,18 @@ { "item": "mekanism:block_tin", "value": 9.0 + }, + { + "tag": "c:ingots/tin", + "value": 1.0 + }, + { + "tag": "c:nuggets/tin", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/tin", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/uranium.json b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/uranium.json index 8540814..b1e76bc 100644 --- a/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/uranium.json +++ b/src/main/resources/packs/mekanism/data/cmmodular/miapi/materials/metal/uranium.json @@ -65,6 +65,18 @@ { "item": "mekanism:block_uranium", "value": 9.0 + }, + { + "tag": "c:ingots/uranium", + "value": 1.0 + }, + { + "tag": "c:nuggets/uranium", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/uranium", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/occultism/data/cmmodular/miapi/materials/metal/iesnium.json b/src/main/resources/packs/occultism/data/cmmodular/miapi/materials/metal/iesnium.json index 92e511d..32e3074 100644 --- a/src/main/resources/packs/occultism/data/cmmodular/miapi/materials/metal/iesnium.json +++ b/src/main/resources/packs/occultism/data/cmmodular/miapi/materials/metal/iesnium.json @@ -48,6 +48,18 @@ { "item": "occultism:iesnium_nugget", "value": 0.11112 + }, + { + "tag": "c:ingots/iesnium", + "value": 1.0 + }, + { + "tag": "c:nuggets/iesnium", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/iesnium", + "value": 9.0 } ] } diff --git a/src/main/resources/packs/superbwarfare/data/cmmodular/miapi/materials/metal/tungsten.json b/src/main/resources/packs/superbwarfare/data/cmmodular/miapi/materials/metal/tungsten.json index ed24b71..9e3b194 100644 --- a/src/main/resources/packs/superbwarfare/data/cmmodular/miapi/materials/metal/tungsten.json +++ b/src/main/resources/packs/superbwarfare/data/cmmodular/miapi/materials/metal/tungsten.json @@ -54,6 +54,18 @@ { "item": "superbwarfare:tungsten_ingot", "value": 1.0 + }, + { + "tag": "c:ingots/tungsten", + "value": 1.0 + }, + { + "tag": "c:nuggets/tungsten", + "value": 0.11112 + }, + { + "tag": "c:storage_blocks/tungsten", + "value": 9.0 } ] } diff --git a/tools/materials.py b/tools/materials.py index 047d10c..6f0cc8e 100644 --- a/tools/materials.py +++ b/tools/materials.py @@ -1088,3 +1088,68 @@ EXTENSIONS = [ }, }, ] + + +# ------------------------------------------------- identical materials, one entry +# Several of these metals and gems are added by more than one mod. Every +# variant should behave as the same material rather than as a near-duplicate, +# so on top of the primary provider's own items each material also accepts the +# `c:` common tag, which every provider registers into. Any mod's silver ingot +# is therefore just silver. +# +# Nothing records where a stack came from - MIAPI stores only the material id on +# the item - so a tool built from Immersive Engineering silver is indistinguish- +# able from one built with Ice and Fire silver. The primary provider's item stays +# first in the list, so anything that reads a single representative item back out +# (repair and deconstruct previews) resolves to the default rather than to +# whichever variant happened to be used. +COMMON_TAGS = { + # metals + "tin": "tin", "lead": "lead", "osmium": "osmium", "bronze": "bronze", + "steel": "steel", "uranium": "uranium", "silver": "silver", + "refined_obsidian": "refined_obsidian", "refined_glowstone": "refined_glowstone", + "brass": "brass", "zinc": "zinc", "andesite_alloy": "andesite_alloy", + "aluminum": "aluminum", "nickel": "nickel", "constantan": "constantan", + "electrum": "electrum", "hop_graphite": "hop_graphite", + "titanium": "titanium", "titanium_alloy": "titanium_alloy", + "industrial_iron": "industrial_iron", "iesnium": "iesnium", + "pink_slime": "pink_slime", "tungsten": "tungsten", + "dark_steel": "dark_steel", "end_steel": "end_steel", + "energetic_alloy": "energetic_alloy", "vibrant_alloy": "vibrant_alloy", + "conductive_alloy": "conductive_alloy", "pulsating_alloy": "pulsating_alloy", + "redstone_alloy": "redstone_alloy", "soularium": "soularium", + "mithril": "mithril", +} + +COMMON_GEM_TAGS = { + "certus_quartz": "certus_quartz", "fluix": "fluix", "source_gem": "source", + "fluorite": "fluorite", "sapphire": "sapphire", + "ender_crystal": "ender_crystal", "vibrant_crystal": "vibrant_crystal", + "pulsating_crystal": "pulsating_crystal", "prescient_crystal": "prescient_crystal", + "enticing_crystal": "enticing_crystal", "weather_crystal": "weather_crystal", +} + + +def _accept_every_provider(): + """Append the common tag to each material that more than one mod can supply. + + Tags are safe where item ids are not: an unknown tag resolves to nothing + instead of failing the material, so a tag naming a mod that is not installed + costs only an ingredient that matches no item. + """ + for material in MATERIALS: + name = material["name"] + if name in COMMON_TAGS: + tag = COMMON_TAGS[name] + material["items"] = material["items"] + [ + {"tag": f"c:ingots/{tag}", "value": 1.0}, + {"tag": f"c:nuggets/{tag}", "value": NUGGET}, + {"tag": f"c:storage_blocks/{tag}", "value": BLOCK}, + ] + elif name in COMMON_GEM_TAGS: + material["items"] = material["items"] + [ + {"tag": f"c:gems/{COMMON_GEM_TAGS[name]}", "value": 1.0}, + ] + + +_accept_every_provider()