From 0db2cae9d50f0ed3c22b50bf456b4b002e2f694b Mon Sep 17 00:00:00 2001 From: Sakura Date: Sun, 8 Mar 2026 17:04:43 +0200 Subject: [PATCH 1/2] Initial EMI++ Implementation (#3285) * Initial EMI++ Implementation, still WIP * oops, old file * Code refactor; additional groups * Separated gtceu:molds into 2 types * Added missing tags to a few mods * Added tags to 2 tfc addons * Brick tag fix; all brick blocks go to one group * en_US lang file * small fixes; tfg aqueducts are now tfc --------- Signed-off-by: Pyritie Co-authored-by: Pyritie --- kubejs/assets/emixx/lang/en_us.json | 2 +- .../assets/minecraft/stack_groups/axes.json | 5 + .../assets/minecraft/stack_groups/boats.json | 5 + .../stack_groups/decorated_pot_sherds.json | 5 + .../stack_groups/enchanted_books.json | 10 + .../minecraft/stack_groups/goat_horns.json | 10 + .../assets/minecraft/stack_groups/hoes.json | 5 + .../stack_groups/infested_blocks.json | 4 + .../stack_groups/lingering_potions.json | 10 + .../minecraft/stack_groups/minecarts.json | 4 + .../minecraft/stack_groups/pickaxes.json | 5 + .../minecraft/stack_groups/potions.json | 10 + .../minecraft/stack_groups/shovels.json | 5 + .../minecraft/stack_groups/spawn_eggs.json | 4 + .../stack_groups/splash_potions.json | 10 + .../stack_groups/suspicious_stews.json | 10 + kubejs/client_scripts/emixx.js | 347 ++++++++++++++++++ kubejs/client_scripts/main_client_script.js | 6 + kubejs/server_scripts/afc/tags.js | 8 + kubejs/server_scripts/gregtech/tags.js | 6 + kubejs/server_scripts/macaws_for_tfc/tags.js | 107 ++++++ kubejs/server_scripts/main_server_script.js | 1 + kubejs/server_scripts/rnr/tags.js | 90 +++++ kubejs/server_scripts/tfc_scraping/tags.js | 8 + kubejs/server_scripts/tfchotornot/tags.js | 5 +- .../tfg/natural_blocks/tags.stones.js | 14 +- .../tfg/stone_types/blocks.rocks.js | 2 +- 27 files changed, 689 insertions(+), 9 deletions(-) create mode 100644 kubejs/assets/minecraft/stack_groups/axes.json create mode 100644 kubejs/assets/minecraft/stack_groups/boats.json create mode 100644 kubejs/assets/minecraft/stack_groups/decorated_pot_sherds.json create mode 100644 kubejs/assets/minecraft/stack_groups/enchanted_books.json create mode 100644 kubejs/assets/minecraft/stack_groups/goat_horns.json create mode 100644 kubejs/assets/minecraft/stack_groups/hoes.json create mode 100644 kubejs/assets/minecraft/stack_groups/infested_blocks.json create mode 100644 kubejs/assets/minecraft/stack_groups/lingering_potions.json create mode 100644 kubejs/assets/minecraft/stack_groups/minecarts.json create mode 100644 kubejs/assets/minecraft/stack_groups/pickaxes.json create mode 100644 kubejs/assets/minecraft/stack_groups/potions.json create mode 100644 kubejs/assets/minecraft/stack_groups/shovels.json create mode 100644 kubejs/assets/minecraft/stack_groups/spawn_eggs.json create mode 100644 kubejs/assets/minecraft/stack_groups/splash_potions.json create mode 100644 kubejs/assets/minecraft/stack_groups/suspicious_stews.json create mode 100644 kubejs/client_scripts/emixx.js create mode 100644 kubejs/server_scripts/tfc_scraping/tags.js diff --git a/kubejs/assets/emixx/lang/en_us.json b/kubejs/assets/emixx/lang/en_us.json index b822e7da4..023d5ee58 100644 --- a/kubejs/assets/emixx/lang/en_us.json +++ b/kubejs/assets/emixx/lang/en_us.json @@ -182,4 +182,4 @@ "stackgroup.emixx.tfg_workbenches": "Workbenches", "stackgroup.emixx.tfg_wrench_tips": "Wrench Tips", "stackgroup.emixx.tfg_zpm_wires": "ZPM Wires" -} \ No newline at end of file +} diff --git a/kubejs/assets/minecraft/stack_groups/axes.json b/kubejs/assets/minecraft/stack_groups/axes.json new file mode 100644 index 000000000..9a2b98378 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/axes.json @@ -0,0 +1,5 @@ +{ + "type": "emixx:tag", + "tag": "minecraft:axes", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/boats.json b/kubejs/assets/minecraft/stack_groups/boats.json new file mode 100644 index 000000000..f9eb0a845 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/boats.json @@ -0,0 +1,5 @@ +{ + "type": "emixx:tag", + "tag": "minecraft:boats", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/decorated_pot_sherds.json b/kubejs/assets/minecraft/stack_groups/decorated_pot_sherds.json new file mode 100644 index 000000000..09424c8f8 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/decorated_pot_sherds.json @@ -0,0 +1,5 @@ +{ + "type": "emixx:tag", + "tag": "minecraft:decorated_pot_sherds", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/enchanted_books.json b/kubejs/assets/minecraft/stack_groups/enchanted_books.json new file mode 100644 index 000000000..25765f2e2 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/enchanted_books.json @@ -0,0 +1,10 @@ +{ + "type": "emixx:group", + "contents": [ + { + "type": "item", + "id": "minecraft:enchanted_book" + } + ], + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/goat_horns.json b/kubejs/assets/minecraft/stack_groups/goat_horns.json new file mode 100644 index 000000000..efac9acbd --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/goat_horns.json @@ -0,0 +1,10 @@ +{ + "type": "emixx:group", + "contents": [ + { + "type": "item", + "id": "minecraft:goat_horn" + } + ], + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/hoes.json b/kubejs/assets/minecraft/stack_groups/hoes.json new file mode 100644 index 000000000..11bad23fe --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/hoes.json @@ -0,0 +1,5 @@ +{ + "type": "emixx:tag", + "tag": "minecraft:hoes", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/infested_blocks.json b/kubejs/assets/minecraft/stack_groups/infested_blocks.json new file mode 100644 index 000000000..b22ca1db6 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/infested_blocks.json @@ -0,0 +1,4 @@ +{ + "type": "emixx:infested_blocks", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/lingering_potions.json b/kubejs/assets/minecraft/stack_groups/lingering_potions.json new file mode 100644 index 000000000..29bf09e49 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/lingering_potions.json @@ -0,0 +1,10 @@ +{ + "type": "emixx:group", + "contents": [ + { + "type": "item", + "id": "minecraft:lingering_potion" + } + ], + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/minecarts.json b/kubejs/assets/minecraft/stack_groups/minecarts.json new file mode 100644 index 000000000..821a8f9ee --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/minecarts.json @@ -0,0 +1,4 @@ +{ + "type": "emixx:minecarts", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/pickaxes.json b/kubejs/assets/minecraft/stack_groups/pickaxes.json new file mode 100644 index 000000000..9c4007c9e --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/pickaxes.json @@ -0,0 +1,5 @@ +{ + "type": "emixx:tag", + "tag": "minecraft:pickaxes", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/potions.json b/kubejs/assets/minecraft/stack_groups/potions.json new file mode 100644 index 000000000..892ef6454 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/potions.json @@ -0,0 +1,10 @@ +{ + "type": "emixx:group", + "contents": [ + { + "type": "item", + "id": "minecraft:potion" + } + ], + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/shovels.json b/kubejs/assets/minecraft/stack_groups/shovels.json new file mode 100644 index 000000000..e7ea9d3f7 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/shovels.json @@ -0,0 +1,5 @@ +{ + "type": "emixx:tag", + "tag": "minecraft:shovels", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/spawn_eggs.json b/kubejs/assets/minecraft/stack_groups/spawn_eggs.json new file mode 100644 index 000000000..09897b5f8 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/spawn_eggs.json @@ -0,0 +1,4 @@ +{ + "type": "emixx:spawn_eggs", + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/splash_potions.json b/kubejs/assets/minecraft/stack_groups/splash_potions.json new file mode 100644 index 000000000..a1dc85fd0 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/splash_potions.json @@ -0,0 +1,10 @@ +{ + "type": "emixx:group", + "contents": [ + { + "type": "item", + "id": "minecraft:splash_potion" + } + ], + "enabled": false +} diff --git a/kubejs/assets/minecraft/stack_groups/suspicious_stews.json b/kubejs/assets/minecraft/stack_groups/suspicious_stews.json new file mode 100644 index 000000000..7d2f55723 --- /dev/null +++ b/kubejs/assets/minecraft/stack_groups/suspicious_stews.json @@ -0,0 +1,10 @@ +{ + "type": "emixx:group", + "contents": [ + { + "type": "item", + "id": "minecraft:suspicious_stew" + } + ], + "enabled": false +} diff --git a/kubejs/client_scripts/emixx.js b/kubejs/client_scripts/emixx.js new file mode 100644 index 000000000..4376fd20f --- /dev/null +++ b/kubejs/client_scripts/emixx.js @@ -0,0 +1,347 @@ +"use strict"; + +const registerSingleGroups = (event) => { + const SINGLE_GROUPS_TO_REGISTER = [ + // Raw Ores + '#tfc:small_ore_pieces', + '#forge:poor_raw_materials', + '#forge:raw_materials', + '#forge:rich_raw_materials', + + // Processed Ores + '#forge:crushed_ores', + '#forge:purified_ores', + '#forge:refined_ores', + '#forge:dusty_raw_materials', + + // Dusts + '#forge:impure_dusts', + '#forge:tiny_dusts', + '#forge:small_dusts', + '#forge:dusts', + '#forge:pure_dusts', + '#forge:powders', + + // Gems + '#forge:chipped_gems', + '#forge:flawed_gems', + '#forge:gems', + '#forge:flawless_gems', + '#forge:exquisite_gems', + + // Gem Products + '#forge:lenses', + + // Ore Products + '#forge:nuggets', + '#forge:ingots', + '#forge:hot_ingots', + '#forge:storage_blocks', + '#forge:double_ingots', + '#forge:dense_plates', + '#forge:plates', + '#forge:double_plates', + '#forge:foils', + '#forge:rods', + '#forge:rods/long', + '#forge:bolts', + '#forge:screws', + '#forge:rings', + '#forge:small_springs', + '#forge:springs', + '#forge:small_gears', + '#forge:gears', + '#forge:fine_wires', + '#forge:rotors', + '#forge:rounds', + '#forge:whisks', + '#forge:turbine_blades', + '#forge:chains', + + // Tool Heads + '#forge:pickaxe_heads', + '#forge:shovel_heads', + '#forge:axe_heads', + '#forge:hoe_heads', + '#forge:sword_heads', + '#forge:butchery_knife_heads', + '#forge:drill_heads', + '#forge:screwdriver_tips', + '#forge:wire_cutter_heads', + '#forge:file_heads', + '#forge:chainsaw_heads', + '#forge:spade_heads', + '#forge:mining_hammer_heads', + '#forge:hammer_heads', + '#forge:knife_heads', + '#forge:saw_heads', + '#forge:wrench_tips', + '#forge:scythe_heads', + '#forge:buzz_saw_heads', + '#forge:javelin_heads', + '#forge:mace_heads', + '#forge:chisel_heads', + '#forge:propick_heads', + '#forge:mattock_heads', + '#tfchotornot:tong_parts', + '#tfcscraping:scraping_knife_blades', + '#forge:fish_hooks', + + // Tools (Minecraft) + '#tfc:pickaxes', + '#tfc:shovels', + '#tfc:axes', + '#tfc:hoes', + + // Tools (Forge) + '#forge:tools/butchery_knives', + '#forge:tools/drills', + '#forge:tools/screwdrivers', + '#forge:tools/wire_cutters', + '#forge:tools/files', + '#forge:tools/chainsaws', + '#forge:tools/spades', + '#forge:tools/mining_hammers', + '#forge:tools/hammers', + '#forge:tools/knives', + '#forge:tools/saws', + '#forge:tools/wrenches', + '#forge:tools/scythes', + '#forge:fishing_rods', + '#forge:shears', + '#forge:tools/crowbars', + '#forge:tools/plungers', + '#forge:tools/mallets', + '#forge:tools/mortars', + '#forge:tools/fishing_nets', + + // Tools (Other) + '#tfc:javelins', + '#tfc:maces', + '#tfc:chisels', + '#tfc:propicks', + '#rnr:mattocks', + '#tfchotornot:tongs', + '#tfcscraping:scraping_knives', + + // Items (Forge) + '#forge:seeds', + '#forge:dyes', + + // Items (GTCEU) + '#gtceu:extruder_molds', + '#gtceu:casting_molds', + + // Items (TFC) + '#tfc:unfired_molds', + '#tfc:fired_molds', + + // Items (Astikor Carts) + '#tfcastikorcarts:cart_wheel', + '#tfcastikorcarts:supply_cart', + '#tfcastikorcarts:plow', + '#tfcastikorcarts:animal_cart', + + // Blocks (Forge) + '#forge:fence_gates', + '#forge:chests', + '#forge:frames', + '#forge:surface_rocks', + '#forge:bud_indicators', + '#forge:glass', + '#forge:glass_panes', + + // Blocks (GTCEU) + '#gtceu:lamps', + + // Blocks (TFC) + '#tfc:lumber', + '#tfc:fallen_leaves', + '#tfc:bookshelves', + '#tfc:tool_racks', + '#tfc:workbenches', + '#tfc:looms', + '#tfc:sluices', + '#tfc:barrels', + '#tfc:lecterns', + '#tfc:scribing_tables', + '#tfc:sewing_tables', + '#tfc:jar_shelves', + '#tfc:support_beams', + '#tfc:minecarts', + '#tfc:anvils', + '#tfc:ore_deposits', + + // Stone-related + '#tfc:rock/hardened', + '#tfc:rock/raw', + '#forge:cobblestone', + '#tfc:rock/smooth', + '#tfc:rock/gravel', + '#tfc:rock/aqueducts', + + // Blocks (Firmalife) + '#firmalife:food_shelves', + '#firmalife:hangers', + '#firmalife:jarbnets', + '#firmalife:big_barrels', + '#firmalife:stomping_barrels', + '#firmalife:barrel_presses', + '#firmalife:wine_shelves', + + // Blocks (FirmaCiv) + '#alekiroofs:roofing', + + // RNR + '#rnr:cobbled_roads', + '#rnr:sett_roads', + '#rnr:flagstone_roads', + '#rnr:gravel_roads', + '#rnr:macadam_roads', + '#rnr:concrete_roads', + '#rnr:gravel_road_items', + '#rnr:flagstone_road_items', + '#rnr:shingles', + '#rnr:roof_blocks', + + // Macaw's + '#mcw_tfc_aio:bridges', + '#mcw_tfc_aio:roofs', + '#mcw_tfc_aio:gutters', + '#mcw_tfc_aio:awnings', + '#mcw_tfc_aio:furniture', + '#mcw_tfc_aio:stripped_furniture' + ] + + SINGLE_GROUPS_TO_REGISTER.forEach(x => { + const [mod, item] = x.split(":"); + const safeItem = item.split("/").join("_"); + event.register(`tfg:tfg_${safeItem}`, x) + }) +} + +const registerMultiGroups = (event) => { + const MULTI_GROUPS_TO_REGISTER = [ + { group_name: 'loose_rocks', tags: [ + '#tfc:igneous_intrusive_rock', + '#tfc:sedimentary_rock', + '#tfc:igneous_extrusive_rock', + '#tfc:metamorphic_rock' + ]}, + { group_name: 'bricks', tags: [ + '#tfg:stone_brick', + '#tfc:wet_mud_bricks', + '#tfc:dry_mud_bricks', + 'tfc:alabaster_brick', + 'tfc:ceramic/unfired_brick', + 'tfc:ceramic/unfired_fire_brick', + 'tfc:ceramic/fire_brick', + 'gtceu:coke_oven_brick' + ]}, + { group_name: 'brick_blocks', tags: [ + '#tfc:rock/bricks', + '#tfc:rock/mossy_bricks', + '#tfc:rock/cracked_bricks', + '#tfc:rock/chiseled_bricks', + 'tfc:fire_bricks', + 'tfcbetterbf:insulated_fire_bricks', + 'gtceu:coke_oven_bricks' + ]}, + { group_name: 'concretes', tags: [ + '#forge:concretes', + '#forge:concrete_powders' + ]}, + { group_name: 'fluid_pipes', tags: [ + '#forge:tiny_fluid_pipes', + '#forge:small_fluid_pipes', + '#forge:normal_fluid_pipes', + '#forge:large_fluid_pipes', + '#forge:huge_fluid_pipes', + '#forge:quadruple_fluid_pipes', + '#forge:nonuple_fluid_pipes' + ]}, + { group_name: 'item_pipes', tags: [ + '#forge:small_item_pipes', + '#forge:normal_item_pipes', + '#forge:large_item_pipes', + '#forge:huge_item_pipes' + ]}, + { group_name: 'restrictive_pipes', tags: [ + '#forge:small_restrictive_pipes', + '#forge:normal_restrictive_pipes', + '#forge:large_restrictive_pipes', + '#forge:huge_restrictive_pipes' + ]} + ] + + MULTI_GROUPS_TO_REGISTER.forEach(x => { + event.register(`tfg:tfg_${x.group_name}`, x.tags) + }) +} + +const registerWireGroups = (event) => { + const WIRE_TYPES = [ + '#forge:single_wires/', + '#forge:double_wires/', + '#forge:quadruple_wires/', + '#forge:octal_wires/', + '#forge:hex_wires/', + '#forge:single_cables/', + '#forge:double_cables/', + '#forge:quadruple_cables/', + '#forge:octal_cables/', + '#forge:hex_cables/' + ] + + function makeWireArray(materials) { + const output = [] + + WIRE_TYPES.forEach(type => { + materials.forEach(mat => { + output.push(type + mat) + }) + }) + + return output + } + + event.register('tfg:tfg_ulv_wires', makeWireArray([ + 'lead', 'red_alloy' + ])) + + event.register('tfg:tfg_lv_wires', makeWireArray([ + 'manganese_phosphide', 'nickel', 'cobalt', 'tin' + ])) + + event.register('tfg:tfg_mv_wires', makeWireArray([ + 'copper', 'magnesium_diboride', 'cupronickel', 'annealed_copper', 'iron' + ])) + + event.register('tfg:tfg_hv_wires', makeWireArray([ + 'blue_alloy', 'kanthal', 'gold', 'mercury_barium_calcium_cuprate', 'electrum', 'silver' + ])) + + event.register('tfg:tfg_ev_wires', makeWireArray([ + 'black_steel', 'nichrome', 'aluminium', 'rtm_alloy', 'steel', 'uranium_triplatinum' + ])) + + event.register('tfg:tfg_iv_wires', makeWireArray([ + 'tungsten', 'tungsten_steel', 'samarium_iron_arsenic_oxide', 'platinum', 'graphene' + ])) + + event.register('tfg:tfg_luv_wires', makeWireArray([ + 'hssg', 'osmium', 'niobium_titanium', 'niobium_nitride', 'indium_tin_barium_titanium_cuprate' + ])) + + event.register('tfg:tfg_zpm_wires', makeWireArray([ + 'naquadah', 'vanadium_gallium', 'uranium_rhodium_dinaquadide', 'trinium' + ])) + + event.register('tfg:tfg_uv_wires', makeWireArray([ + 'naquadah_alloy', 'yttrium_barium_cuprate', 'enriched_naquadah_trinium_europium_duranide', 'tritanium' + ])) + + event.register('tfg:tfg_uhv_wires', makeWireArray([ + 'ruthenium_trinium_americium_neutronate', 'europium' + ])) +} \ No newline at end of file diff --git a/kubejs/client_scripts/main_client_script.js b/kubejs/client_scripts/main_client_script.js index e180ed8eb..8fdc7f130 100644 --- a/kubejs/client_scripts/main_client_script.js +++ b/kubejs/client_scripts/main_client_script.js @@ -1,3 +1,9 @@ ItemEvents.tooltip(evt => { registerTooltips(evt); }) + +EmiPlusPlusEvents.registerGroups(event => { + registerSingleGroups(event) + registerMultiGroups(event) + registerWireGroups(event) +}) \ No newline at end of file diff --git a/kubejs/server_scripts/afc/tags.js b/kubejs/server_scripts/afc/tags.js index 016e998b6..a9f0f0c47 100644 --- a/kubejs/server_scripts/afc/tags.js +++ b/kubejs/server_scripts/afc/tags.js @@ -23,6 +23,14 @@ const registerAFCItemTags = (event) => { event.add('firmalife:stomping_barrels', `afc:wood/stomping_barrel/${woodType}`) event.add('firmalife:barrel_presses', `afc:wood/barrel_press/${woodType}`) event.add('tfc:sewing_tables', `afc:wood/sewing_table/${woodType}`) + event.add('tfc:scribing_tables', `afc:wood/scribing_table/${woodType}`) + event.add('tfc:jar_shelves', `afc:wood/jar_shelf/${woodType}`) + event.add('tfc:minecarts', `afc:wood/chest_minecart/${woodType}`) + event.add('minecraft:signs', `afc:wood/sign/${woodType}`) + + global.TFC_EQUIPMENT_METALS.forEach(metalType => { + event.add('minecraft:hanging_signs', `afc:wood/hanging_sign/${metalType}/${woodType}`) + }) }) //Hardwood Tags diff --git a/kubejs/server_scripts/gregtech/tags.js b/kubejs/server_scripts/gregtech/tags.js index c302f9a40..5e0b37b38 100644 --- a/kubejs/server_scripts/gregtech/tags.js +++ b/kubejs/server_scripts/gregtech/tags.js @@ -69,6 +69,12 @@ function registerGTCEUItemTags(event) { //greens event.add('tfc:compost_greens', 'gtceu:bio_chaff'); event.add('tfc:compost_greens', 'gtceu:plant_ball'); + + // lamp tag for EMI++ + global.MINECRAFT_DYE_NAMES.forEach(color => { + event.add('gtceu:lamps', `gtceu:${color}_lamp`) + event.add('gtceu:lamps', `gtceu:${color}_borderless_lamp`) + }) } /** @param {TagEvent.Block} event */ diff --git a/kubejs/server_scripts/macaws_for_tfc/tags.js b/kubejs/server_scripts/macaws_for_tfc/tags.js index 9a233b5f3..3505bec0f 100644 --- a/kubejs/server_scripts/macaws_for_tfc/tags.js +++ b/kubejs/server_scripts/macaws_for_tfc/tags.js @@ -5,4 +5,111 @@ function registerMacawsForTFCItemTags(event) { global.MINECRAFT_DYE_NAMES.forEach(color => { event.remove(`mcw_tfc_aio:${color}_roofs`, `mcw_tfc_aio:roofs/${color}_roofs/${color}_roof_slab`); }) + + // Fence Gates + global.TFC_WOOD_TYPES.forEach(wood => { + event.add('minecraft:fence_gates', `mcw_tfc_aio:fences/${wood}_fences/${wood}_highley_gate`) + event.add('minecraft:fence_gates', `mcw_tfc_aio:fences/${wood}_fences/${wood}_pyramid_gate`) + + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/${wood}_bridges/${wood}_bridge_pier`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/${wood}_bridges/${wood}_log_bridge_middle`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/${wood}_bridges/${wood}_log_bridge_stair`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/${wood}_bridges/${wood}_rail_bridge`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/${wood}_bridges/rope_${wood}_bridge`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/${wood}_bridges/${wood}_rope_bridge_stair`) + }) + + // Bridges + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/brick_bridges/brick_bridge_pier`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/brick_bridges/brick_bridge`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/brick_bridges/brick_bridge_stair`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/bamboo_bridges/bamboo_bridge_pier`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/bamboo_bridges/bamboo_bridge`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/bamboo_bridges/bamboo_bridge_stair`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/bamboo_bridges/dry_bamboo_bridge_pier`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/bamboo_bridges/dry_bamboo_bridge`) + event.add('mcw_tfc_aio:bridges', `mcw_tfc_aio:bridges/bamboo_bridges/dry_bamboo_bridge_stair`) + + // Roofs + const ROOF_TYPES = [ + '_attic_roof', + '_lower_roof', + '_roof', + '_steep_roof', + '_top_roof', + '_upper_lower_roof', + '_upper_steep_roof' + ] + + global.TFC_WOOD_TYPES.forEach(wood => { + ROOF_TYPES.forEach(type => { + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/${wood}_roofs/${wood}_planks${type}`) + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/${wood}_roofs/${wood}${type}`) + }) + }) + + global.MINECRAFT_DYE_NAMES.forEach(color => { + ROOF_TYPES.forEach(type => { + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/${color}_roofs/${color}${type}`) + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/${color}_concrete_roofs/${color}_concrete${type}`) + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/${color}_terracotta_roofs/${color}_terracotta${type}`) + }) + }) + + ROOF_TYPES.forEach(type => { + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/brick_roofs/bricks${type}`) + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/thatch_roofs/thatch${type}`) + event.add('mcw_tfc_aio:roofs', `mcw_tfc_aio:roofs/thatch2_roofs/thatch2${type}`) + }) + + // Gutters & Awnings + + global.MINECRAFT_DYE_NAMES.forEach(color => { + event.add('mcw_tfc_aio:gutters', `mcw_tfc_aio:roofs/gutters/gutter_base_${color}`) + event.add('mcw_tfc_aio:gutters', `mcw_tfc_aio:roofs/gutters/gutter_middle_${color}`) + + event.add('mcw_tfc_aio:awnings', `mcw_tfc_aio:roofs/awnings/${color}_striped_awning`) + }) + + event.add('mcw_tfc_aio:gutters', `mcw_tfc_aio:roofs/gutters/gutter_base`) + event.add('mcw_tfc_aio:gutters', `mcw_tfc_aio:roofs/gutters/gutter_middle`) + + // Furniture + + const FURNITURE_TYPES = [ + '_wardrobe', + '_chair', + '_modern_wardrobe', + '_double_wardrobe', + '_bookshelf', + '_bookshelf_cupboard', + '_drawer', + '_double_drawer', + '_bookshelf_drawer', + '_lower_bookshelf_drawer', + '_large_drawer', + '_lower_triple_drawer', + '_triple_drawer', + '_desk', + '_covered_desk', + '_modern_desk', + '_table', + '_end_table', + '_coffee_table', + '_glass_table', + '_modern_chair', + '_striped_chair', + '_stool_chair', + '_counter', + '_drawer_counter', + '_double_drawer_counter', + '_cupboard_counter' + ] + + global.TFC_WOOD_TYPES.forEach(wood => { + FURNITURE_TYPES.forEach(type => { + event.add('mcw_tfc_aio:furniture', `mcw_tfc_aio:furniture/${wood}_furniture/${wood}${type}`) + event.add('mcw_tfc_aio:stripped_furniture', `mcw_tfc_aio:furniture/${wood}_furniture/stripped_${wood}${type}`) + }) + }) } \ No newline at end of file diff --git a/kubejs/server_scripts/main_server_script.js b/kubejs/server_scripts/main_server_script.js index b8e2f3b65..32faa5c28 100644 --- a/kubejs/server_scripts/main_server_script.js +++ b/kubejs/server_scripts/main_server_script.js @@ -55,6 +55,7 @@ ServerEvents.tags('item', event => { registerSpeciesItemTags(event) registerTACZItemTags(event) registerTFCItemTags(event) + registerTFCScrapingKnivesItemTags(event) registerTFCTextileItemTags(event) registerTFGItemTags(event) registerTFGNuclearItemTags(event) diff --git a/kubejs/server_scripts/rnr/tags.js b/kubejs/server_scripts/rnr/tags.js index 670010dcd..04255322f 100644 --- a/kubejs/server_scripts/rnr/tags.js +++ b/kubejs/server_scripts/rnr/tags.js @@ -6,6 +6,96 @@ const registerRnrItemTags = (event) => { event.removeAllTagsFrom(item) event.add('c:hidden_from_recipe_viewers', item) }); + + global.TFC_WOOD_TYPES.forEach(wood => { + event.add('rnr:shingles', `rnr:wood/shingle/${wood}`) + event.add('rnr:roof_blocks', `rnr:wood/shingles/${wood}`) + event.add('rnr:roof_blocks', `rnr:wood/shingles/${wood}_stairs`) + event.add('rnr:roof_blocks', `rnr:wood/shingles/${wood}_slab`) + }) + + global.AFC_WOOD_TYPES.forEach(wood => { + event.add('rnr:shingles', `rnr:wood/shingle/${wood}`) + event.add('rnr:roof_blocks', `rnr:wood/shingles/${wood}`) + event.add('rnr:roof_blocks', `rnr:wood/shingles/${wood}_stairs`) + event.add('rnr:roof_blocks', `rnr:wood/shingles/${wood}_slab`) + }) + + event.add('rnr:shingles', `rnr:unfired_terracotta_roof_tile`) + event.add('rnr:shingles', `rnr:terracotta_roof_tile`) + event.add('rnr:shingles', `rnr:unfired_roof_tile`) + event.add('rnr:shingles', `rnr:ceramic_roof_tile`) + + event.add('rnr:roof_blocks', `rnr:roof_frame`) + event.add('rnr:roof_blocks', `rnr:roof_frame_stairs`) + event.add('rnr:roof_blocks', `rnr:roof_frame_slab`) + event.add('rnr:roof_blocks', `rnr:thatch_roof`) + event.add('rnr:roof_blocks', `rnr:thatch_roof_stairs`) + event.add('rnr:roof_blocks', `rnr:thatch_roof_slab`) + event.add('rnr:roof_blocks', `rnr:terracotta_roof`) + event.add('rnr:roof_blocks', `rnr:terracotta_roof_stairs`) + event.add('rnr:roof_blocks', `rnr:terracotta_roof_slab`) + event.add('rnr:roof_blocks', `rnr:ceramic_roof`) + event.add('rnr:roof_blocks', `rnr:ceramic_roof_stairs`) + event.add('rnr:roof_blocks', `rnr:ceramic_roof_slab`) + + global.TFC_STONE_TYPES.forEach(stone => { + event.add('rnr:cobbled_roads', `rnr:rock/cobbled_road/${stone}`) + event.add('rnr:cobbled_roads', `rnr:rock/cobbled_road/${stone}_stairs`) + event.add('rnr:cobbled_roads', `rnr:rock/cobbled_road/${stone}_slab`) + + event.add('rnr:sett_roads', `rnr:rock/sett_road/${stone}`) + event.add('rnr:sett_roads', `rnr:rock/sett_road/${stone}_stairs`) + event.add('rnr:sett_roads', `rnr:rock/sett_road/${stone}_slab`) + + event.add('rnr:flagstone_roads', `rnr:rock/flagstones/${stone}`) + event.add('rnr:flagstone_roads', `rnr:rock/flagstones/${stone}_stairs`) + event.add('rnr:flagstone_roads', `rnr:rock/flagstones/${stone}_slab`) + + event.add('rnr:gravel_roads', `rnr:rock/gravel_road/${stone}`) + event.add('rnr:gravel_roads', `rnr:rock/gravel_road/${stone}_stairs`) + event.add('rnr:gravel_roads', `rnr:rock/gravel_road/${stone}_slab`) + event.add('rnr:gravel_roads', `rnr:rock/over_height_gravel/${stone}`) + + event.add('rnr:macadam_roads', `rnr:rock/macadam_road/${stone}`) + event.add('rnr:macadam_roads', `rnr:rock/macadam_road/${stone}_stairs`) + event.add('rnr:macadam_roads', `rnr:rock/macadam_road/${stone}_slab`) + }) + + global.SAND_COLORS.forEach(color => { + event.add('rnr:flagstone_roads', `rnr:${color}_sandstone_flagstones`) + event.add('rnr:flagstone_roads', `rnr:${color}_sandstone_flagstones_stairs`) + event.add('rnr:flagstone_roads', `rnr:${color}_sandstone_flagstones_slab`) + }) + + event.add('rnr:sett_roads', `rnr:brick_road`) + event.add('rnr:sett_roads', `rnr:brick_road_slab`) + event.add('rnr:sett_roads', `rnr:brick_road_stairs`) + + event.add('rnr:concrete_roads', `rnr:concrete_road`) + event.add('rnr:concrete_roads', `rnr:concrete_road_control_joint`) + event.add('rnr:concrete_roads', `rnr:cracked_concrete_road`) + event.add('rnr:concrete_roads', `rnr:trodden_concrete_road`) + event.add('rnr:concrete_roads', `rnr:cracked_trodden_concrete_road`) + event.add('rnr:concrete_roads', `rnr:concrete_road_panel`) + event.add('rnr:concrete_roads', `rnr:concrete_road_sett`) + event.add('rnr:concrete_roads', `rnr:concrete_road_flagstones`) + + event.add('rnr:concrete_roads', `rnr:concrete_road_stairs`) + event.add('rnr:concrete_roads', `rnr:cracked_concrete_road_stairs`) + event.add('rnr:concrete_roads', `rnr:trodden_concrete_road_stairs`) + event.add('rnr:concrete_roads', `rnr:cracked_trodden_concrete_road_stairs`) + event.add('rnr:concrete_roads', `rnr:concrete_road_panel_stairs`) + event.add('rnr:concrete_roads', `rnr:concrete_road_sett_stairs`) + event.add('rnr:concrete_roads', `rnr:concrete_road_flagstones_stairs`) + + event.add('rnr:concrete_roads', `rnr:concrete_road_slab`) + event.add('rnr:concrete_roads', `rnr:cracked_concrete_road_slab`) + event.add('rnr:concrete_roads', `rnr:trodden_concrete_road_slab`) + event.add('rnr:concrete_roads', `rnr:cracked_trodden_concrete_road_slab`) + event.add('rnr:concrete_roads', `rnr:concrete_road_panel_slab`) + event.add('rnr:concrete_roads', `rnr:concrete_road_sett_slab`) + event.add('rnr:concrete_roads', `rnr:concrete_road_flagstones_slab`) }; function registerRnrBlockTags(event) { diff --git a/kubejs/server_scripts/tfc_scraping/tags.js b/kubejs/server_scripts/tfc_scraping/tags.js new file mode 100644 index 000000000..19113fb76 --- /dev/null +++ b/kubejs/server_scripts/tfc_scraping/tags.js @@ -0,0 +1,8 @@ +// priority: 0 +"use strict"; + +const registerTFCScrapingKnivesItemTags = (event) => { + global.TFC_EQUIPMENT_METALS.forEach(metal => { + event.add('tfcscraping:scraping_knife_blades', `tfcscraping:metal/scraping_knife_blade/${metal}`) + }) +} \ No newline at end of file diff --git a/kubejs/server_scripts/tfchotornot/tags.js b/kubejs/server_scripts/tfchotornot/tags.js index 1b29e7472..270bc9334 100644 --- a/kubejs/server_scripts/tfchotornot/tags.js +++ b/kubejs/server_scripts/tfchotornot/tags.js @@ -18,7 +18,10 @@ const registerHotOrNotItemTags = (event) => { event.add('tfchotornot:hot_whitelist', magma) }) - + global.TFC_METALS.forEach(metal => { + event.add('tfchotornot:tong_parts', `tfchotornot:tong_part/${metal}`) + }) + event.add('firmalife:usable_on_oven', '#tfchotornot:insulating') event.add('tfg:insulating_container', 'gtceu:ulv_super_tank') diff --git a/kubejs/server_scripts/tfg/natural_blocks/tags.stones.js b/kubejs/server_scripts/tfg/natural_blocks/tags.stones.js index e8c1f7f7d..7979717c7 100644 --- a/kubejs/server_scripts/tfg/natural_blocks/tags.stones.js +++ b/kubejs/server_scripts/tfg/natural_blocks/tags.stones.js @@ -62,7 +62,8 @@ function registerTFGStoneItemTags(event) { if (rock.cobble.mossy != null) { event.add('tfg:interaction/mossy_cobble', rock.cobble.mossy.block); - event.add('forge:cobblestone/mossy', rock.cobble.block); + event.remove('forge:cobblestone/normal', rock.cobble.mossy.block); + event.add('forge:cobblestone/mossy', rock.cobble.mossy.block); addToTfcTag(rock.cobble.mossy.block); addToMaterialTag(material, rock.cobble.mossy.block); @@ -99,8 +100,8 @@ function registerTFGStoneItemTags(event) { if (rock.bricks.mossy != null) { event.add('tfg:brick_index', rock.bricks.mossy.block); event.add('tfg:interaction/mossy_brick', rock.bricks.mossy.block); - event.add('tfc:rock/bricks', rock.bricks.block); - event.add('tfc:rock/mossy_bricks', rock.bricks.block); + event.remove('tfc:rock/bricks', rock.bricks.mossy.block); + event.add('tfc:rock/mossy_bricks', rock.bricks.mossy.block); addToTfcTag(rock.bricks.mossy.block); addToMaterialTag(material, rock.bricks.mossy.block); @@ -118,8 +119,8 @@ function registerTFGStoneItemTags(event) { if (rock.bricks.cracked != null) { event.add('tfg:brick_index', rock.bricks.cracked.block); event.add('tfg:interaction/cracked_brick', rock.bricks.cracked.block); - event.add('tfc:rock/bricks', rock.bricks.block); - event.add('tfc:rock/cracked_bricks', rock.bricks.block); + event.remove('tfc:rock/bricks', rock.bricks.cracked.block); + event.add('tfc:rock/cracked_bricks', rock.bricks.cracked.block); addToTfcTag(rock.bricks.cracked.block); addToMaterialTag(material, rock.bricks.cracked.block); @@ -138,6 +139,7 @@ function registerTFGStoneItemTags(event) { if (rock.polished != null) { event.add('tfg:brick_index', rock.polished.block); event.add('tfg:interaction/smooth_brick', rock.polished.block); + event.remove('tfc:rock/bricks', rock.polished.block); event.add('tfc:rock/smooth', rock.polished.block); event.add('forge:smooth_stone', rock.polished.block); addToTfcTag(rock.polished.block); @@ -161,7 +163,7 @@ function registerTFGStoneItemTags(event) { } if (rock.chiseled != null) { - event.add('tfc:rock/bricks', rock.chiseled.block); + event.remove('tfc:rock/bricks', rock.chiseled.block); event.add('tfc:rock/chiseled_bricks', rock.chiseled.block); addToTfcTag(rock.chiseled.block); addToMaterialTag(material, rock.chiseled.block); diff --git a/kubejs/startup_scripts/tfg/stone_types/blocks.rocks.js b/kubejs/startup_scripts/tfg/stone_types/blocks.rocks.js index 8b49bb1b7..82e30fd36 100644 --- a/kubejs/startup_scripts/tfg/stone_types/blocks.rocks.js +++ b/kubejs/startup_scripts/tfg/stone_types/blocks.rocks.js @@ -190,7 +190,7 @@ function registerTFGRockBlocks(event) { .soundType(rock.sound ?? 'stone') .textureAll(rock.bricks.texture ?? rock.bricks.block.replace(/:/g, ":block/")) .mapColor(rock.mapColor) - .tagBoth('tfg:rock/aqueducts') + .tagBoth('tfc:rock/aqueducts') if (rock.tfcTag != null) { aqueduct.tagBoth(rock.tfcTag); From e74502d50f9930ea4a9e7d7ddc05031fb8c8ad3f Mon Sep 17 00:00:00 2001 From: Oleksandr Mazur Date: Sun, 8 Mar 2026 18:44:38 +0200 Subject: [PATCH 2/2] Fix: made separate LCR/CR aluminium sulfate recipes and sodium sulfate electrolyzer path (#3302) * Fix: made separate LCR/CR aluminium sulfate recipes and sodium sulfate electrolyzer path * Removed sodium sulfate electrolyzer recipe and enabled decomposition instead * Update material.recipes.js Signed-off-by: Pyritie --------- Signed-off-by: Pyritie Co-authored-by: Pyritie Co-authored-by: TomPlop --- kubejs/server_scripts/tfg/hv_rework/material.recipes.js | 4 ++-- kubejs/startup_scripts/tfg/materials/materials.alumina.js | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/kubejs/server_scripts/tfg/hv_rework/material.recipes.js b/kubejs/server_scripts/tfg/hv_rework/material.recipes.js index 9fde99b8d..4479a23e7 100644 --- a/kubejs/server_scripts/tfg/hv_rework/material.recipes.js +++ b/kubejs/server_scripts/tfg/hv_rework/material.recipes.js @@ -101,7 +101,7 @@ function registerTFGHVMaterialRecipes(event) { // Alumina - event.recipes.gtceu.chemical_reactor('tfg:aluminium_sulfate') + event.recipes.gtceu.large_chemical_reactor('tfg:aluminium_sulfate_lcr') .itemInputs(Item.of('tfg:igneous_felsic_dust', 1)) .inputFluids(Fluid.of('gtceu:sulfuric_acid', 1000)) .itemOutputs(Item.of('tfg:aluminium_sulfate_dust', 1), Item.of('gtceu:potassium_sulfate_dust', 1), Item.of('gtceu:silicon_dioxide_dust')) @@ -211,4 +211,4 @@ function registerTFGHVMaterialRecipes(event) { .EUt(GTValues.VA[GTValues.MV]) // #endregion -} \ No newline at end of file +} diff --git a/kubejs/startup_scripts/tfg/materials/materials.alumina.js b/kubejs/startup_scripts/tfg/materials/materials.alumina.js index 46cb718c2..d28b534c7 100644 --- a/kubejs/startup_scripts/tfg/materials/materials.alumina.js +++ b/kubejs/startup_scripts/tfg/materials/materials.alumina.js @@ -26,8 +26,6 @@ function registerTFGAluminaMaterials(event) { .secondaryColor(0xf7f7f2) .iconSet(GTMaterialIconSet.BRIGHT) .components('2x sodium', '1x sulfur', '4x oxygen') - .flags( - GTMaterialFlags.DISABLE_DECOMPOSITION) event.create('tfg:alumina') .dust()