From 2dead03f4391b7cd08d8bbfb2910337b2a1aff8e Mon Sep 17 00:00:00 2001 From: Mqrius Date: Tue, 17 Feb 2026 07:53:01 +0100 Subject: [PATCH 1/2] Workaround for server overrides sometimes not applying to serverpack exports. (#3088) * Add CI step to check if server-overrides were applied. * Delete dead config. * Revert "Add CI step to check if server-overrides were applied." This reverts commit eb4301716a96e135a342fa5c6722ec3972f69347. * Explicitly include clientside configs clientside only. Implicitly includes serverside config as normal --- pakku.json | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/pakku.json b/pakku.json index faf8a0638..456c1aa0b 100644 --- a/pakku.json +++ b/pakku.json @@ -10,22 +10,19 @@ "kubejs", "tacz", "!kubejs/probe/**", - "!kubejs/assets/**" + "!kubejs/assets/**", + "!defaultconfigs/tfc-server.toml", + "!config/ftbbackups2.json", + "!defaultconfigs/ftbranks/ranks.snbt" ], "server_overrides": [ - "forge-auto-install.txt", - "generate_auto_installation_file.bat", - "minecraft_server.jar", - "server.properties", - "server_starter.conf", - "server-icon.png", - "start_server.bat", - "README.md" - ], "client_overrides": [ "resourcepacks", - "kubejs/assets/**" + "kubejs/assets/**", + "defaultconfigs/tfc-server.toml", + "config/ftbbackups2.json", + "defaultconfigs/ftbranks/ranks.snbt" ], "projects": { "ambient-environment": { From d12b776e8107ccda9097b7c2e7f13baa9ed9a2a1 Mon Sep 17 00:00:00 2001 From: Inceitious <124896643+Inceitious@users.noreply.github.com> Date: Wed, 18 Feb 2026 17:31:30 +0800 Subject: [PATCH 2/2] Refactor/wood (#3002) * Need to organise this better next time * Shifted * Need to rewrite this in the future * Adding events * First iteration * Revert back to iriginal * Added global tag * Consolidated the recycling index TODO: Fix the amount of dust it gives, 1 log gives 4 dust, but 2 planks (equivalent of 1 log) gives 16 dust... * Bamboo lumber * Remove unnecessary recipes * bamboo lumber * 2nd reiteration * Improved sprite * TFG Mosaic Wood Builder * Indentation * Removed displayname --- .../tfg/textures/item/wood/lumber/bamboo.png | Bin 0 -> 570 bytes kubejs/server_scripts/afc/recipes.js | 181 +--- kubejs/server_scripts/beneath/recipes.js | 53 -- .../gregtech/recipes.removes.js | 2 - kubejs/server_scripts/gregtech/utility.js | 183 ----- kubejs/server_scripts/main_server_script.js | 2 +- kubejs/server_scripts/minecraft/recipes.js | 4 - kubejs/server_scripts/tfc/recipes.js | 40 - .../server_scripts/tfg/mars/recipes.mars.js | 57 -- .../tfg/natural_blocks/recipes.wood.js | 771 ++++++++++++++++++ .../tfg/primitive/recipes.wood.js | 167 ---- kubejs/server_scripts/tfg/recipes.js | 1 + kubejs/startup_scripts/ad_astra/constants.js | 3 + kubejs/startup_scripts/beneath/constants.js | 7 +- .../tfg/worldgen/items.wood.js | 5 + 15 files changed, 795 insertions(+), 681 deletions(-) create mode 100644 kubejs/assets/tfg/textures/item/wood/lumber/bamboo.png create mode 100644 kubejs/server_scripts/tfg/natural_blocks/recipes.wood.js diff --git a/kubejs/assets/tfg/textures/item/wood/lumber/bamboo.png b/kubejs/assets/tfg/textures/item/wood/lumber/bamboo.png new file mode 100644 index 0000000000000000000000000000000000000000..d4124dcb9d6a85f8aba1bdbed5d7ac44cb711f6f GIT binary patch literal 570 zcmV-A0>%A_P)`(=anaOmx#!FjR#|)TN0FX%k`R1GG=!&OQX}WGj2w%M0lE0GhDD02&Q# znO1|->CB|lUcYk(nlvqc63*mgZtlJ3ch33Fox%-m1hD(Aq`z#h>5p4weO;~r>~58` z1n2MF#-02eUOc}KZ~N7?AO;Xb0~8yL&dRd_JiZm2*$ALo z^B4hy=?vT)GxukpNN}wLPA);Co#2EcKJBIyHfv|<3^e?8k^%DqnxEo|m7BAsPvE~0 z-}c%F*y5}`ZT80iGLgp5x)9)65y-&NVH-`qLnQEUc^;3J<_Q@B(YMTf!S}@b%707*qo IM6N<$f;52nmH+?% literal 0 HcmV?d00001 diff --git a/kubejs/server_scripts/afc/recipes.js b/kubejs/server_scripts/afc/recipes.js index d9f0d6676..cfb032069 100644 --- a/kubejs/server_scripts/afc/recipes.js +++ b/kubejs/server_scripts/afc/recipes.js @@ -22,105 +22,6 @@ const registerAFCRecipes = (event) => { event.remove({ id: "afc:crafting/0_maple_sugar_bucket" }) - // #endregion - - // #region Wood crafts - - global.AFC_WOOD_TYPES.forEach(wood => { - event.remove({ id: `afc:crafting/wood/${wood}_axle` }) - event.remove({ id: `afc:crafting/wood/${wood}_bladed_axle` }) - event.remove({ id: `afc:crafting/wood/${wood}_encased_axle` }) - event.remove({ id: `afc:crafting/wood/${wood}_clutch` }) - event.remove({ id: `afc:crafting/wood/${wood}_gear_box` }) - event.remove({ id: `afc:crafting/wood/${wood}_water_wheel` }) - - // Бревна -> Пиломатериалы - generateCutterRecipe(event, `#afc:${wood}_logs`, `16x afc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_log`) - - // Доски -> Пиломатериалы - generateCutterRecipe(event, `afc:wood/planks/${wood}`, `4x afc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_planks`) - - // Ступень -> Пиломатериалы - generateCutterRecipe(event, `afc:wood/planks/${wood}_stairs`, `3x afc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_stairs`) - - - // Плита -> Пиломатериалы - generateCutterRecipe(event, `afc:wood/planks/${wood}_slab`, `2x afc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_slab`) - - - - // ? -> Деревянная нажимная пластина - event.shaped(`afc:wood/planks/${wood}_pressure_plate`, [ - ' B ', - 'CDC', - ' E ' - ], { - B: '#tfc:hammers', - C: `afc:wood/planks/${wood}_slab`, - D: '#forge:small_springs', - E: '#forge:tools/screwdrivers' - }).id(`afc:crafting/wood/${wood}_pressure_plate`) - - event.recipes.gtceu.assembler(`${wood}_pressure_plate`) - .itemInputs('#forge:small_springs', `2x afc:wood/planks/${wood}_slab`) - .circuit(3) - .itemOutputs(`2x afc:wood/planks/${wood}_pressure_plate`) - .duration(50) - .EUt(2) - - // ? -> Деревянная кнопка - event.remove({ id: `afc:crafting/wood/${wood}_button` }) - - event.shapeless(`3x afc:wood/planks/${wood}_button`, [`afc:wood/planks/${wood}_pressure_plate`, '#forge:tools/saws']) - .id(`tfg:shapeless/saw_${wood}_pressure_plate_to_button`) - - generateCutterRecipe(event, `afc:wood/planks/${wood}_pressure_plate`, `6x afc:wood/planks/${wood}_button`, 50, 2, `${wood}_button`) - - //Stomping Barrel - event.remove({ id: `afc:crafting/wood/${wood}_stomping_barrel` }) - - event.shaped(`afc:wood/stomping_barrel/${wood}`, [ - 'ABA', - 'AAA', - 'BBB' - ], { - A: `afc:wood/lumber/${wood}`, - B: 'tfc:glue' - - }).id(`afc:crafting/wood/${wood}_stomping_barrel`) - - event.recipes.gtceu.lathe(`tfg:stripping_${wood}_log`) - .itemInputs(`afc:wood/log/${wood}`) - .itemOutputs(`afc:wood/stripped_log/${wood}`) - .duration(50) - .EUt(2) - - event.recipes.gtceu.lathe(`tfg:stripping_${wood}_wood`) - .itemInputs(`afc:wood/wood/${wood}`) - .itemOutputs(`afc:wood/stripped_wood/${wood}`) - .duration(50) - .EUt(2) - - event.recipes.vintageimprovements.polishing(`afc:wood/stripped_log/${wood}`, `afc:wood/log/${wood}`) - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_${wood}_log`) - - event.recipes.vintageimprovements.polishing(`afc:wood/stripped_wood/${wood}`, `afc:wood/wood/${wood}`) - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_${wood}_wood`) - }); - - global.AFC_SAPLINGS.forEach(wood => { - event.shaped(`4x afc:wood/fallen_leaves/${wood.sapling}`,[ - 'AA', - 'AA' - ], { - A: `afc:wood/leaves/${wood.sapling}` - }).id(`tfg:shaped/afc/${wood.sapling}_leaves_to_fallen_leaves`); - }); - // #endregion event.recipes.tfc.anvil('afc:tree_tap', '#forge:ingots/copper', ["hit_last", "upset_second_last", "upset_third_last"]) @@ -239,7 +140,6 @@ const registerAFCRecipes = (event) => { .duration(20 * 35) .EUt(GTValues.VA[GTValues.ULV]) - event.recipes.gtceu.fluid_solidifier('maple_syrup') .inputFluids(Fluid.of('afc:maple_syrup', 100)) .itemOutputs('afc:maple_sugar') @@ -267,77 +167,12 @@ const registerAFCRecipes = (event) => { .outputItem('afc:birch_sugar') .id('tfg:barrel/birch_syrup_to_sugar') - const MORE_STRIPPING = [ - { wood: 'black_oak', stripped: 'oak', stripped_mod: 'tfc' }, - { wood: 'rainbow_eucalyptus', stripped: 'eucalyptus', stripped_mod: 'afc' }, - { wood: 'gum_arabic', stripped: 'acacia', stripped_mod: 'tfc' }, - { wood: 'redcedar', stripped: 'cypress', stripped_mod: 'afc' }, - { wood: 'rubber_fig', stripped: 'fig', stripped_mod: 'afc' }, - { wood: 'poplar', stripped: 'aspen', stripped_mod: 'tfc' } - ]; - - MORE_STRIPPING.forEach(x => { - event.recipes.gtceu.lathe(`tfg:stripping_${x.wood}_log`) - .itemInputs(`afc:wood/log/${x.wood}`) - .itemOutputs(`${x.stripped_mod}:wood/stripped_log/${x.stripped}`) - .duration(50) - .EUt(2) - - event.recipes.gtceu.lathe(`tfg:stripping_${x.wood}_wood`) - .itemInputs(`afc:wood/wood/${x.wood}`) - .itemOutputs(`${x.stripped_mod}:wood/stripped_wood/${x.stripped}`) - .duration(50) - .EUt(2) - - event.recipes.vintageimprovements.polishing(`${x.stripped_mod}:wood/stripped_log/${x.stripped}`, `afc:wood/log/${x.wood}`) - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_${x.wood}_log`) - - event.recipes.vintageimprovements.polishing(`${x.stripped_mod}:wood/stripped_wood/${x.stripped}`, `afc:wood/wood/${x.wood}`) - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_${x.wood}_wood`) - }) - - /** - * @property {Array} afcWoodRecyclingIndex - Wood recycling material index. - */ - const afcWoodRecyclingIndex = [ - ['afc:wood/chest_minecart/{type}', ['{wood}', 4, GTMaterials.WroughtIron, 5]], - ['afc:wood/planks/{type}', ['{wood}', 8]], - ['afc:wood/planks/{type}_door', ['{wood}', 6]], - ['afc:wood/planks/{type}_trapdoor', ['{wood}', 4]], - ['afc:wood/planks/{type}_fence', ['{wood}', 4]], - ['afc:wood/planks/{type}_log_fence', ['{wood}', 8]], - ['afc:wood/planks/{type}_fence_gate', ['{wood}', 8]], - ['afc:wood/planks/{type}_slab', ['{wood}', 2]], - ['afc:wood/planks/{type}_stairs', ['{wood}', 3]], - ['afc:wood/planks/{type}_pressure_plate', ['{wood}', 4]], - ['afc:wood/planks/{type}_button', ['{wood}', 1]], - ['afc:wood/chest/{type}', ['{wood}', 16]], - ['afc:wood/trapped_chest/{type}', ['{wood}', 16, GTMaterials.WroughtIron, 4/9, GTMaterials.Wood, 1]] - ]; - /** - * @param {Array} materials - * @param {string} woodMaterial - * @return {Array} - */ - function resolveArgs(materials, woodMaterial) { - return materials.map(materials => materials === '{wood}' ? woodMaterial : materials); - }; - global.AFC_HARDWOOD_TYPES.forEach(type => { - afcWoodRecyclingIndex.forEach(([template, args]) => { - const item = template.replace('{type}', type); - const resolvedArgs = resolveArgs(args, GTMaterials.get('hardwood')); - TFGHelpers.registerMaterialInfo(item, resolvedArgs); - }); - }); - global.AFC_SOFTWOOD_TYPES.forEach(type => { - afcWoodRecyclingIndex.forEach(([template, args]) => { - const item = template.replace('{type}', type); - const resolvedArgs = resolveArgs(args, GTMaterials.Wood); - TFGHelpers.registerMaterialInfo(item, resolvedArgs); - }); - }); + global.AFC_SAPLINGS.forEach(wood => { + event.shaped(`4x afc:wood/fallen_leaves/${wood.sapling}`,[ + 'AA', + 'AA' + ], { + A: `afc:wood/leaves/${wood.sapling}` + }).id(`tfg:shaped/afc/${wood.sapling}_leaves_to_fallen_leaves`); + }); } diff --git a/kubejs/server_scripts/beneath/recipes.js b/kubejs/server_scripts/beneath/recipes.js index 0c35158d6..3713c1045 100644 --- a/kubejs/server_scripts/beneath/recipes.js +++ b/kubejs/server_scripts/beneath/recipes.js @@ -22,20 +22,6 @@ const registerBeneathRecipes = (event) => { event.remove({ id: 'beneath:crafting/hellbricks' }) event.remove({ id: 'beneath:crafting/nether_brick' }) event.remove({ id: 'beneath:quern/slime' }) - event.remove({ id: 'beneath:crafting/wood/crimson_planks' }) - event.remove({ id: 'beneath:crafting/wood/crimson_slab' }) - event.remove({ id: 'beneath:crafting/wood/crimson_button' }) - event.remove({ id: 'beneath:crafting/wood/crimson_pressure_plate' }) - event.remove({ id: 'beneath:crafting/wood/crimson_lumber_log' }) - event.remove({ id: 'beneath:crafting/wood/crimson_lumber_planks' }) - event.remove({ id: 'beneath:crafting/wood/crimson_slab_undo' }) - event.remove({ id: 'beneath:crafting/wood/warped_planks' }) - event.remove({ id: 'beneath:crafting/wood/warped_slab' }) - event.remove({ id: 'beneath:crafting/wood/warped_button' }) - event.remove({ id: 'beneath:crafting/wood/warped_pressure_plate' }) - event.remove({ id: 'beneath:crafting/wood/warped_lumber_log' }) - event.remove({ id: 'beneath:crafting/wood/warped_lumber_planks' }) - event.remove({ id: 'beneath:crafting/wood/warped_slab_undo' }) event.remove({ id: 'beneath:crafting/ancient_altar' }) event.shaped('beneath:unposter', [ @@ -99,43 +85,4 @@ const registerBeneathRecipes = (event) => { ], { A: `beneath:wood/leaves/warped` }).id(`tfg:shaped/beneath/warped_leaves_to_fallen_leaves`); - - - /** - * @property {Array} beneathWoodRecyclingIndex - Wood recycling material index. - */ - const beneathWoodRecyclingIndex = [ - ['beneath:wood/chest_minecart/{type}', ['{wood}', 4, GTMaterials.WroughtIron, 5]], - ['beneath:wood/planks/{type}', ['{wood}', 8]], - ['beneath:wood/planks/{type}_door', ['{wood}', 6]], - ['beneath:wood/planks/{type}_trapdoor', ['{wood}', 4]], - ['beneath:wood/planks/{type}_fence', ['{wood}', 4]], - ['beneath:wood/planks/{type}_log_fence', ['{wood}', 8]], - ['beneath:wood/planks/{type}_fence_gate', ['{wood}', 8]], - ['beneath:wood/planks/{type}_slab', ['{wood}', 2]], - ['beneath:wood/planks/{type}_stairs', ['{wood}', 3]], - ['beneath:wood/planks/{type}_pressure_plate', ['{wood}', 4]], - ['beneath:wood/planks/{type}_button', ['{wood}', 1]], - ['beneath:wood/chest/{type}', ['{wood}', 16]], - ['beneath:wood/trapped_chest/{type}', ['{wood}', 16, GTMaterials.WroughtIron, 4/9, GTMaterials.Wood, 1]] - ]; - /** - * @param {Array} materials - * @param {string} woodMaterial - * @return {Array} - */ - function resolveArgs(materials, woodMaterial) { - return materials.map(materials => materials === '{wood}' ? woodMaterial : materials); - }; - - beneathWoodRecyclingIndex.forEach(([template, args]) => { - const item = template.replace('{type}', 'crimson'); - const resolvedArgs = resolveArgs(args, GTMaterials.get('hardwood')); - TFGHelpers.registerMaterialInfo(item, resolvedArgs); - }); - beneathWoodRecyclingIndex.forEach(([template, args]) => { - const item = template.replace('{type}', 'warped'); - const resolvedArgs = resolveArgs(args, GTMaterials.Wood); - TFGHelpers.registerMaterialInfo(item, resolvedArgs); - }); } \ No newline at end of file diff --git a/kubejs/server_scripts/gregtech/recipes.removes.js b/kubejs/server_scripts/gregtech/recipes.removes.js index 2a9653250..2cc0ba60a 100644 --- a/kubejs/server_scripts/gregtech/recipes.removes.js +++ b/kubejs/server_scripts/gregtech/recipes.removes.js @@ -875,11 +875,9 @@ function removeGTCEURecipes(event) { // Remove Default Pressure Plate Recipes const MC_PRESSURE_PLATES = [ - 'bamboo', 'polished_blackstone', 'light_weighted', 'heavy_weighted', - 'treated' ] MC_PRESSURE_PLATES.forEach(material => { event.remove({ id: `gtceu:shaped/${material}_pressure_plate` }) diff --git a/kubejs/server_scripts/gregtech/utility.js b/kubejs/server_scripts/gregtech/utility.js index 9f7c9aa08..dbfe6dfe4 100644 --- a/kubejs/server_scripts/gregtech/utility.js +++ b/kubejs/server_scripts/gregtech/utility.js @@ -155,189 +155,6 @@ function addCircuitToRecipe(event, recipeId, circuitNumber) { recipe.json.add("inputs", inputsObj); }); } -//#endregion - -//#region Wood Builder - -/** - * Generates most basic wooden recipes. - * - * All parameters are optional. Name is used for the ID. - * - * @param {*} event - * @param {string} name -Name of the wood. - * @param {string} lumber -ID for the lumber. - * @param {string} logs -Tag or ID for all the logs. - * @param {string} log -ID for the regular log. - * @param {string} stripped_log -ID for the stripped log. - * @param {string} plank -ID for planks. - * @param {string} stair -ID for stairs. - * @param {string} slab -ID for slabs. - * @param {string} door -ID for the door. - * @param {string} trapdoor -ID for the trapdoor. - * @param {string} fence -ID for the fence. - * @param {string} fence_gate -ID for the fence gate. - * @param {string} support -ID for the support. - * @param {string} pressure_plate -ID for the pressure plate. - * @param {string} button -ID for the button. - */ -function woodBuilder(event, name, lumber, logs, log, stripped_log, plank, stair, slab, door, trapdoor, fence, fence_gate, support, pressure_plate, button) { - - if (log && stripped_log && name) { - event.recipes.gtceu.lathe(`tfg:cutter/${name}_stripped_log_from_log`) - .itemInputs(log) - .itemOutputs(stripped_log) - .duration(50) - .EUt(GTValues.VA[GTValues.ULV]) - - event.recipes.vintageimprovements.polishing(stripped_log, log) - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_${name}_log`) - } - - if (logs && lumber && name) { - event.shapeless(`8x ${lumber}`, - [logs, '#forge:tools/saws'] - ).id(`tfg:shapeless/${name}_lumber_from_log`) - - generateCutterRecipe(event, logs, `16x ${lumber}`, 50, 7, `cutter_${name}_lumber_from_log`) - } - - if (plank && lumber && name) { - event.shapeless(`4x ${lumber}`, - [plank, '#forge:tools/saws'] - ).id(`tfg:shapeless/${name}_lumber_from_plank`) - - generateCutterRecipe(event, plank, `4x ${lumber}`, 50, 7, `cutter_${name}_lumber_from_plank`) - - event.shaped(plank, [ - 'AA', - 'AA' - ], { - A: lumber - }).id(`tfg:shaped/${name}_plank_from_lumber`) - } - - if (slab && lumber && name) { - event.shapeless(`2x ${lumber}`, - [slab, '#forge:tools/saws'] - ).id(`tfg:shapeless/${name}_lumber_from_slab`) - - generateCutterRecipe(event, slab, `2x ${lumber}`, 50, 7, `cutter_${name}_lumber_from_slab`) - } - - if (slab && plank && name) { - event.shaped(`6x ${slab}`, [ - 'AAA' - ], { - A: plank - }).id(`tfg:shaped/${name}_slab_from_plank`) - } - - if (stair && lumber && name) { - event.shapeless(`3x ${lumber}`, - [stair, '#forge:tools/saws'] - ).id(`tfg:shapeless/${name}_lumber_from_stair`) - - generateCutterRecipe(event, stair, `3x ${lumber}`, 50, 7, `cutter_${name}_lumber_from_stair`) - } - - if (stair && plank && name) { - event.shaped(`8x ${stair}`, [ - 'A ', - 'AA ', - 'AAA' - ], { - A: plank - }).id(`tfg:shaped/${name}_stair_from_plank`) - } - - if (door && lumber && name) { - event.shaped(`2x ${door}`, [ - 'AA', - 'AA', - 'AA' - ], { - A: lumber - }).id(`tfg:shaped/${name}_door_from_lumber`) - } - - if (trapdoor && lumber && name) { - event.shaped(`3x ${trapdoor}`, [ - 'AAA', - 'AAA' - ], { - A: lumber - }).id(`tfg:shaped/${name}_trapdoor_from_lumber_and_plank`) - } - - if (fence && lumber && plank && name) { - event.shaped(`8x ${fence}`, [ - 'ABA', - 'ABA' - ], { - A: lumber, - B: plank - }).id(`tfg:shaped/${name}_fence_from_lumber_and_plank`) - } - - if (fence_gate && lumber && plank && name) { - event.shaped(`2x ${fence_gate}`, [ - 'ABA', - 'ABA' - ], { - A: plank, - B: lumber - }).id(`tfg:shaped/${name}_fence_gate_from_lumber_and_plank`) - } - - if (support && logs && name) { - event.shapeless(`8x ${support}`, - [`2x ${logs}`, '#forge:tools/saws'] - ).id(`tfg:shapeless/${name}_support_from_logs`) - - event.recipes.gtceu.assembler(`tfg:assembler/${name}_support_from_logs`) - .itemInputs(`2x ${logs}`) - .itemOutputs(`8x ${support}`) - .duration(50) - .circuit(4) - .EUt(GTValues.VA[GTValues.ULV]) - } - - if (pressure_plate && slab && name) { - event.shaped(pressure_plate, [ - ' B ', - 'ACA', - ' D ' - ], { - A: slab, - B: '#forge:tools/hammers', - C: '#forge:springs', - D: '#forge:tools/screwdrivers' - }).id(`tfg:shaped/${name}_pressure_plate`) - - event.recipes.gtceu.assembler(`tfg:assembler/${name}_pressure_plate`) - .itemInputs(`2x ${slab}`, '#forge:small_springs') - .itemOutputs(`2x ${pressure_plate}`) - .duration(50) - .circuit(3) - .EUt(GTValues.VA[GTValues.ULV]) - } - - if (button && pressure_plate && name) { - event.recipes.gtceu.cutter(`tfg:cutter/${name}_button_from_pressure_plate`) - .itemInputs(pressure_plate) - .itemOutputs(`6x ${button}`) - .duration(50) - .EUt(GTValues.VA[GTValues.ULV]) - - event.shapeless(`3x ${button}`, [pressure_plate, '#forge:tools/saws']) - .id(`tfg:shapeless/saw_${name}_pressure_plate_to_button`) - } -} -//#endregion - //#region Sterilization /** * Creates recipes for sterilizing an item using chemicals or the autoclave. diff --git a/kubejs/server_scripts/main_server_script.js b/kubejs/server_scripts/main_server_script.js index cbbc422da..ac38f4f48 100644 --- a/kubejs/server_scripts/main_server_script.js +++ b/kubejs/server_scripts/main_server_script.js @@ -289,11 +289,11 @@ ServerEvents.recipes(event => { registerTFCGurmanRecipes(event) registerTFGRecipes(event) registerTFCTextileRecipes(event) - registerTFCScrapingKnivesRecipes(event) registerToolBeltRecipes(event) registerVintageImprovementsRecipes(event) registerWaterFlasksRecipes(event) registerWABRecipes(event) + registerTFCScrapingKnivesRecipes(event) }) TaCZServerEvents.gunIndexLoad((event) => { diff --git a/kubejs/server_scripts/minecraft/recipes.js b/kubejs/server_scripts/minecraft/recipes.js index 149d38722..4701d7c76 100644 --- a/kubejs/server_scripts/minecraft/recipes.js +++ b/kubejs/server_scripts/minecraft/recipes.js @@ -1031,7 +1031,6 @@ const registerMinecraftRecipes = (event) => { //#region Pressure Plates const PRESSURE_PLATES = [ - {type: 'bamboo', material: 'minecraft:bamboo_slab'}, {type: 'polished_blackstone', material: 'minecraft:polished_blackstone_slab'}, {type: 'light_weighted', material: '#forge:plates/gold'}, {type: 'heavy_weighted', material: '#forge:plates/iron'} @@ -1059,9 +1058,6 @@ const registerMinecraftRecipes = (event) => { event.shapeless('3x minecraft:polished_blackstone_button', ['minecraft:polished_blackstone_pressure_plate', '#forge:tools/saws']) .id(`tfg:shapeless/saw_blackstone_pressure_plate_to_button`) - event.shapeless('3x minecraft:bamboo_button', ['minecraft:bamboo_pressure_plate', '#forge:tools/saws']) - .id(`tfg:shapeless/saw_bamboo_pressure_plate_to_button`) - // #endregion // Minecart w/ Furnace diff --git a/kubejs/server_scripts/tfc/recipes.js b/kubejs/server_scripts/tfc/recipes.js index 314ecb9a6..1f1c0ed3f 100644 --- a/kubejs/server_scripts/tfc/recipes.js +++ b/kubejs/server_scripts/tfc/recipes.js @@ -296,44 +296,4 @@ const registerTFCRecipes = (event) => { }).id(`tfg:shaped/tfc/${type}_krummholz`); }); - /** - * @property {Array} tfcWoodRecyclingIndex - Wood recycling material index. - */ - const tfcWoodRecyclingIndex = [ - ['tfc:wood/chest_minecart/{type}', ['{wood}', 4, GTMaterials.WroughtIron, 5]], - ['tfc:wood/planks/{type}', ['{wood}', 8]], - ['tfc:wood/planks/{type}_door', ['{wood}', 6]], - ['tfc:wood/planks/{type}_trapdoor', ['{wood}', 4]], - ['tfc:wood/planks/{type}_fence', ['{wood}', 4]], - ['tfc:wood/planks/{type}_log_fence', ['{wood}', 8]], - ['tfc:wood/planks/{type}_fence_gate', ['{wood}', 8]], - ['tfc:wood/planks/{type}_slab', ['{wood}', 2]], - ['tfc:wood/planks/{type}_stairs', ['{wood}', 3]], - ['tfc:wood/planks/{type}_pressure_plate', ['{wood}', 4]], - ['tfc:wood/planks/{type}_button', ['{wood}', 1]], - ['tfc:wood/chest/{type}', ['{wood}', 16]], - ['tfc:wood/trapped_chest/{type}', ['{wood}', 16, GTMaterials.WroughtIron, 4/9, GTMaterials.Wood, 1]] - ]; - /** - * @param {Array} materials - * @param {string} woodMaterial - * @return {Array} - */ - function resolveArgs(materials, woodMaterial) { - return materials.map(materials => materials === '{wood}' ? woodMaterial : materials); - }; - global.TFC_HARDWOOD_TYPES.forEach(type => { - tfcWoodRecyclingIndex.forEach(([template, args]) => { - const item = template.replace('{type}', type); - const resolvedArgs = resolveArgs(args, GTMaterials.get('hardwood')); - TFGHelpers.registerMaterialInfo(item, resolvedArgs); - }); - }); - global.TFC_SOFTWOOD_TYPES.forEach(type => { - tfcWoodRecyclingIndex.forEach(([template, args]) => { - const item = template.replace('{type}', type); - const resolvedArgs = resolveArgs(args, GTMaterials.Wood); - TFGHelpers.registerMaterialInfo(item, resolvedArgs); - }); - }); } diff --git a/kubejs/server_scripts/tfg/mars/recipes.mars.js b/kubejs/server_scripts/tfg/mars/recipes.mars.js index 08bc07077..31bb43e13 100644 --- a/kubejs/server_scripts/tfg/mars/recipes.mars.js +++ b/kubejs/server_scripts/tfg/mars/recipes.mars.js @@ -88,63 +88,6 @@ function registerTFGMarsRecipes(event) { .EUt(GTValues.VA[GTValues.EV]) .dimension('ad_astra:mars') - // Ad astra woods - - global.AD_ASTRA_WOOD.forEach(wood => { - woodBuilder(event, wood.name, wood.lumber, wood.logs, wood.log, wood.stripped_log, wood.plank, wood.stair, wood.slab, wood.door, wood.trapdoor, wood.fence, wood.fence_gate, wood.support, wood.pressure_plate, wood.button) - }) - - event.shaped('8x ad_astra:aeronos_ladder', [ - 'A A', - 'ABA', - 'A A' - ], { - A: 'tfg:wood/lumber/aeronos', - B: ChemicalHelper.get(TagPrefix.rod, GTMaterials.Wood, 1) - }).id('tfg:shaped/aeronos_ladder') - - event.shaped('8x ad_astra:strophar_ladder', [ - 'A A', - 'ABA', - 'A A' - ], { - A: 'tfg:wood/lumber/strophar', - B: ChemicalHelper.get(TagPrefix.rod, GTMaterials.Wood, 1) - }).id('tfg:shaped/strophar_ladder') - - // don't pass in the items like doors, trapdoors etc because beneath already has good recipes for those - woodBuilder(event, 'crimson', 'beneath:wood/lumber/crimson', '#tfc:crimson_logs', 'beneath:wood/log/crimson', - 'beneath:wood/stripped_log/crimson', 'beneath:wood/planks/crimson', null, - 'beneath:wood/planks/crimson_slab', null, null, null, null, null, 'beneath:wood/planks/crimson_pressure_plate', - 'beneath:wood/planks/crimson_button') - - event.recipes.gtceu.lathe(`tfg:cutter/crimson_stripped_wood_from_wood`) - .itemInputs('beneath:wood/wood/crimson') - .itemOutputs('beneath:wood/stripped_wood/crimson') - .duration(50) - .EUt(GTValues.VA[GTValues.ULV]) - - event.recipes.vintageimprovements.polishing('beneath:wood/stripped_wood/crimson', 'beneath:wood/wood/crimson') - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_crimson_wood`) - - woodBuilder(event, 'warped', 'beneath:wood/lumber/warped', '#tfc:warped_logs', 'beneath:wood/log/warped', - 'beneath:wood/stripped_log/warped', 'beneath:wood/planks/warped', null, - 'beneath:wood/planks/warped_slab', null, null, null, null, null, 'beneath:wood/planks/warped_pressure_plate', - 'beneath:wood/planks/warped_button') - - event.recipes.gtceu.lathe(`tfg:cutter/warped_stripped_wood_from_wood`) - .itemInputs('beneath:wood/wood/warped') - .itemOutputs('beneath:wood/stripped_wood/warped') - .duration(50) - .EUt(GTValues.VA[GTValues.ULV]) - - event.recipes.vintageimprovements.polishing('beneath:wood/stripped_wood/warped', 'beneath:wood/wood/warped') - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_warped_wood`) - //Large Nest event.shaped('tfg:large_nest_box', [ diff --git a/kubejs/server_scripts/tfg/natural_blocks/recipes.wood.js b/kubejs/server_scripts/tfg/natural_blocks/recipes.wood.js new file mode 100644 index 000000000..d99409898 --- /dev/null +++ b/kubejs/server_scripts/tfg/natural_blocks/recipes.wood.js @@ -0,0 +1,771 @@ +// priority: 0 +"use strict"; + +/** + * + * @param {Internal.RecipesEventJS} event + */ +function registerTFGWoodenRecipes(event) { + + // #region TFG Wood Builder + + /** + * Generates most basic wooden recipes. + * + * All parameters are optional. Name is used for the ID. + * + * @param {*} event + * @param {string} name -Name of the wood. + * @param {string} lumber -ID for the lumber. + * @param {string} logs -Tag or ID for all the logs. + * @param {string} log -ID for the regular log. + * @param {string} stripped_log -ID for the stripped log. + * @param {string} plank -ID for planks. + * @param {string} stair -ID for stairs. + * @param {string} slab -ID for slabs. + * @param {string} door -ID for the door. + * @param {string} trapdoor -ID for the trapdoor. + * @param {string} fence -ID for the fence. + * @param {string} fence_gate -ID for the fence gate. + * @param {string} support -ID for the support. + * @param {string} pressure_plate -ID for the pressure plate. + * @param {string} button -ID for the button. + * @param {string} log_wood -ID for the log wood. + * @param {string} stripped_wood -ID for the stripped wood. + */ + function TFGWoodBuilder(event, name, lumber, logs, log, stripped_log, plank, stair, slab, door, trapdoor, fence, fence_gate, support, pressure_plate, button, log_wood, stripped_wood) { + + // Stripped log from log + if (log && stripped_log && name) { + event.recipes.gtceu.lathe(`tfg:${name}_stripped_log_from_log`) + .itemInputs(log) + .itemOutputs(stripped_log) + .duration(50) + .EUt(GTValues.VA[GTValues.ULV]) + + event.recipes.vintageimprovements.polishing(stripped_log, log) + .speedLimits(0) + .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) + .id(`tfg:vi/lathe/${name}_stripped_log_from_log`) + }; + + // Stripped wood from log wood + if (log_wood && stripped_wood && name) { + event.recipes.gtceu.lathe(`tfg:${name}_stripped_wood_from_log_wood`) + .itemInputs(log_wood) + .itemOutputs(stripped_wood) + .duration(50) + .EUt(GTValues.VA[GTValues.ULV]) + + event.recipes.vintageimprovements.polishing(stripped_wood, log_wood) + .speedLimits(0) + .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) + .id(`tfg:vi/lathe/${name}_stripped_wood_from_log_wood`) + }; + + // TODO: remove condition of logs + // Lumber from log + if (logs && lumber && name) { + event.shapeless(`8x ${lumber}`, + [logs, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${name}_lumber_from_log`) + + generateCutterRecipe(event, logs, `16x ${lumber}`, 50, 7, `${name}_lumber_from_log`) + }; + + if (plank && lumber && name) { + // Lumber from plank + event.shapeless(`4x ${lumber}`, + [plank, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${name}_lumber_from_plank`) + + generateCutterRecipe(event, plank, `4x ${lumber}`, 50, 7, `${name}_lumber_from_plank`) + + // Plank from lumber + event.shaped(plank, [ + 'AA', + 'AA' + ], { + A: lumber + }) + .id(`tfg:shaped/${name}_plank_from_lumber`) + }; + + // Lumber from slab + if (slab && lumber && name) { + event.shapeless(`2x ${lumber}`, + [slab, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${name}_lumber_from_slab`) + + generateCutterRecipe(event, slab, `2x ${lumber}`, 50, 7, `${name}_lumber_from_slab`) + }; + + // Slab from lumber + if (slab && lumber && name) { + event.shaped(slab, [ + 'AA' + ], { + A: lumber + }) + .id(`tfg:shaped/${name}_slab_from_lumber`) + }; + + // Lumber from slab + if (stair && lumber && name) { + event.shapeless(`3x ${lumber}`, + [stair, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${name}_lumber_from_stair`) + + generateCutterRecipe(event, stair, `3x ${lumber}`, 50, 7, `${name}_lumber_from_stair`) + }; + + // Stair from plank + if (stair && lumber && name) { + event.shaped(`8x ${stair}`, [ + 'A ', + 'AA ', + 'AAA' + ], { + A: plank + }) + .id(`tfg:shaped/${name}_stair_from_plank`) + }; + + // Door from lumber + if (door && lumber && name) { + event.shaped(`2x ${door}`, [ + 'AA', + 'AA', + 'AA' + ], { + A: lumber + }) + .id(`tfg:shaped/${name}_door_from_lumber`) + }; + + // Trapdoor from lumber + if (trapdoor && lumber && name) { + event.shaped(`3x ${trapdoor}`, [ + 'AAA', + 'AAA' + ], { + A: lumber + }) + .id(`tfg:shaped/${name}_trapdoor_from_lumber`) + }; + + // Fence from lumber & plank + if (fence && lumber && plank && name) { + event.shaped(`8x ${fence}`, [ + 'ABA', + 'ABA' + ], { + A: lumber, + B: plank + }) + .id(`tfg:shaped/${name}_fence_from_lumber_and_plank`) + }; + + // Fence gate from lumber and plank + if (fence_gate && lumber && plank && name) { + event.shaped(`2x ${fence_gate}`, [ + 'ABA', + 'ABA' + ], { + A: plank, + B: lumber + }) + .id(`tfg:shaped/${name}_fence_gate_from_lumber_and_plank`) + }; + + // Support from logs + if (support && logs && name) { + event.shapeless(`8x ${support}`, + [`2x ${logs}`, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${name}_support_from_logs`) + + event.recipes.gtceu.assembler(`tfg:${name}_support_from_logs`) + .itemInputs(`2x ${logs}`) + .itemOutputs(`8x ${support}`) + .duration(50) + .circuit(4) + .EUt(GTValues.VA[GTValues.ULV]) + }; + + // Pressure plate + if (pressure_plate && slab && name) { + event.shaped(pressure_plate, [ + ' B ', + 'ACA', + ' D ' + ], { + A: slab, + B: '#forge:tools/hammers', + C: '#forge:small_springs', + D: '#forge:tools/screwdrivers' + }) + .id(`tfg:shaped/${name}_pressure_plate`) + + event.recipes.gtceu.assembler(`tfg:${name}_pressure_plate`) + .itemInputs(`2x ${slab}`, '#forge:small_springs') + .itemOutputs(`${pressure_plate}`) + .duration(50) + .circuit(3) + .EUt(GTValues.VA[GTValues.ULV]) + }; + + // Button from pressure plate + if (button && pressure_plate && name) { + event.recipes.gtceu.cutter(`tfg:${name}_button_from_pressure_plate`) + .itemInputs(pressure_plate) + .itemOutputs(`6x ${button}`) + .duration(50) + .EUt(GTValues.VA[GTValues.ULV]) + + event.shapeless(`3x ${button}`, [pressure_plate, '#forge:tools/saws']) + .id(`tfg:shapeless/saw_${name}_pressure_plate_to_button`) + }; + }; + + // #endregion + + // #region TFG Mosaic Builder + + /** + * @param {*} event + * @param {string} wood - Name of the wood. + * @param {string} lumber - ID for lumber. + * @param {string} plank - ID for plank. + * @param {string} mosaic_plank - ID for mosaic plank. + * @param {string} stair - ID for stair. + * @param {string} mosaic_stair - ID for mosaic stair. + * @param {string} slab - ID for slab. + * @param {string} mosaic_slab - ID for mosaic slab. + * + */ + function TFGMosaicWoodBuilder(event, wood, lumber, plank, mosaic_plank, stair, mosaic_stair, slab, mosaic_slab) { + + // Mosaic plank + event.recipes.tfc.damage_inputs_shapeless_crafting( + event.shapeless(`${mosaic_plank}`, + [`${plank}`, '#tfc:chisels'] + ) + ) + .id(`tfg:shapeless/${wood}_mosaic_plank`); + + // Lumber from mosaic plank + event.shapeless(`4x ${lumber}`, + [`${mosaic_plank}`, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${wood}_lumber_from_mosaic_plank`); + + generateCutterRecipe(event, `${mosaic_plank}`, `4x ${lumber}`, 50, 7, `${wood}_lumber_from_mosaic_plank`); + + // Mosaic stair + event.recipes.tfc.damage_inputs_shapeless_crafting( + event.shapeless(`${mosaic_stair}`, + [`${stair}`, '#tfc:chisels'] + ) + ) + .id(`tfg:shapeless/${wood}_mosaic_stair`); + + // Lumber from mosaic stairs + event.shapeless(`3x ${lumber}`, + [`${mosaic_stair}`, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${wood}_lumber_from_mosaic_stair`); + + generateCutterRecipe(event, `${mosaic_stair}`, `3x ${lumber}`, 50, 7, `${wood}_lumber_from_mosaic_stair`); + + // Mosaic slab + event.recipes.tfc.damage_inputs_shapeless_crafting( + event.shapeless(`${mosaic_slab}`, + [`${slab}`, '#tfc:chisels'] + ) + ) + .id(`tfg:shapeless/${wood}_mosaic_slab`); + + // Lumber from mosaic slab + event.shapeless(`2x ${lumber}`, + [`${mosaic_slab}`, '#forge:tools/saws'] + ) + .id(`tfg:shapeless/${wood}_lumber_from_mosaic_slab`); + + generateCutterRecipe(event, `${mosaic_slab}`, `2x ${lumber}`, 50, 7, `${wood}_lumber_from_mosaic_slab`); + + }; + + // #endregion + + // #region TFG Wood Recycling + + /** + * @property {Array} TFGWoodRecyclingIndex - TFG Wood recycling material index. + */ + const TFGWoodRecyclingIndex = [ + ['{mod}:wood/chest_minecart/{type}', ['{wood}', 4, GTMaterials.WroughtIron, 5]], + ['{mod}:wood/planks/{type}', ['{wood}', 2]], + ['{mod}:wood/planks/{type}_door', ['{wood}', 3/2]], + ['{mod}:wood/planks/{type}_trapdoor', ['{wood}', 1]], + ['{mod}:wood/planks/{type}_fence', ['{wood}', 4]], + ['{mod}:wood/planks/{type}_log_fence', ['{wood}', 8]], + ['{mod}:wood/planks/{type}_fence_gate', ['{wood}', 8]], + ['{mod}:wood/planks/{type}_slab', ['{wood}', 1]], + ['{mod}:wood/planks/{type}_stairs', ['{wood}', 3/2]], + ['{mod}:wood/planks/{type}_pressure_plate', ['{wood}', 2]], + ['{mod}:wood/planks/{type}_button', ['{wood}', 1/4]], + ['{mod}:wood/chest/{type}', ['{wood}', 4]], + ['{mod}:wood/trapped_chest/{type}', ['{wood}', 4, GTMaterials.WroughtIron, 4/9, GTMaterials.Wood, 1]] + ]; + + /** + * @param {Array} materials + * @param {string} woodMaterial + * @return {Array} + */ + function resolveArgs(materials, woodMaterial) { + return materials + .map(materials => materials === '{wood}' ? woodMaterial : materials); + }; + + function registerTFGWoodRecycling(mod, woodname, woodMaterial) { + woodname.forEach(name => { + TFGWoodRecyclingIndex.forEach(([template, args]) => { + const item = template + .replace('{mod}', mod) + .replace('{type}', name); + const resolvedArgs = resolveArgs(args, woodMaterial); + TFGHelpers.registerMaterialInfo(item, resolvedArgs); + }); + }); + }; + + // #endregion + + // #region Ad Astra + + global.AD_ASTRA_WOOD.forEach(wood => { + // TODO: standardise ad astra constants + TFGWoodBuilder( + event, + wood.name, + wood.lumber, + wood.logs, + wood.log, + wood.stripped_log, + wood.plank, + wood.stair, + wood.slab, + wood.door, + wood.trapdoor, + wood.fence, + wood.fence_gate, + wood.support, + wood.pressure_plate, + wood.button, + wood.log_wood, + wood.stripped_wood + ); + }); + + event.shaped('8x ad_astra:aeronos_ladder', [ + 'A A', + 'ABA', + 'A A' + ], { + A: 'tfg:wood/lumber/aeronos', + B: ChemicalHelper.get(TagPrefix.rod, GTMaterials.Wood, 1) + }) + .id('tfg:shaped/aeronos_ladder'); + + event.shaped('8x ad_astra:strophar_ladder', [ + 'A A', + 'ABA', + 'A A' + ], { + A: 'tfg:wood/lumber/strophar', + B: ChemicalHelper.get(TagPrefix.rod, GTMaterials.Wood, 1) + }) + .id('tfg:shaped/strophar_ladder'); + + // #endregion + + // #region Beneath + + global.BENEATH_WOOD_TYPES.forEach(wood => { + + // Removed recipe changes + event.remove({ id: `beneath:crafting/wood/${wood}_planks` }); + event.remove({ id: `beneath:crafting/wood/${wood}_slab` }); + event.remove({ id: `beneath:crafting/wood/${wood}_button` }); + event.remove({ id: `beneath:crafting/wood/${wood}_pressure_plate` }); + event.remove({ id: `beneath:crafting/wood/${wood}_lumber_log` }); + event.remove({ id: `beneath:crafting/wood/${wood}_lumber_planks` }); + event.remove({ id: `beneath:crafting/wood/${wood}_slab_undo` }); + + TFGWoodBuilder( + event, + `${wood}`, + `beneath:wood/lumber/${wood}`, + `#tfc:${wood}_logs`, + `beneath:wood/log/${wood}`, + `beneath:wood/stripped_log/${wood}`, + `beneath:wood/planks/${wood}`, + null, + `beneath:wood/planks/${wood}_slab`, + `beneath:wood/planks/${wood}_door`, + `beneath:wood/planks/${wood}_trapdoor`, + null, + null, + null, + `beneath:wood/planks/${wood}_pressure_plate`, + `beneath:wood/planks/${wood}_button`, + `beneath:wood/wood/${wood}`, + `beneath:wood/stripped_wood/${wood}`, + `beneath:wood/wood/${wood}`, + `beneath:wood/stripped_wood/${wood}` + ); + }); + + registerTFGWoodRecycling('beneath', ['crimson'], GTMaterials.get('hardwood')); + registerTFGWoodRecycling('beneath', ['warped'], GTMaterials.Wood); + + // #endregion + + // #region AFC + + global.AFC_WOOD_TYPES.forEach(wood => { + + // Removed unused assets + event.remove({ id: `afc:crafting/wood/${wood}_axle` }); + event.remove({ id: `afc:crafting/wood/${wood}_bladed_axle` }); + event.remove({ id: `afc:crafting/wood/${wood}_encased_axle` }); + event.remove({ id: `afc:crafting/wood/${wood}_clutch` }); + event.remove({ id: `afc:crafting/wood/${wood}_gear_box` }); + event.remove({ id: `afc:crafting/wood/${wood}_water_wheel` }); + + // Removed recipe changes + event.remove({ id: `afc:crafting/wood/${wood}_lumber_log` }); + event.remove({ id: `afc:crafting/wood/${wood}_stairs` }); + event.remove({ id: `afc:crafting/wood/${wood}_stairs_undo` }); + event.remove({ id: `afc:crafting/wood/${wood}_slab` }); + event.remove({ id: `afc:crafting/wood/${wood}_button` }); + event.remove({ id: `afc:crafting/wood/${wood}_stomping_barrel` }); + event.remove({ id: `afc:crafting/wood/${wood}_lumber_planks` }); + event.remove({ id: `afc:crafting/wood/${wood}_slab_undo` }); + + TFGWoodBuilder( + event, + `${wood}`, + `afc:wood/lumber/${wood}`, + `#afc:${wood}_logs`, + `afc:wood/log/${wood}`, + `afc:wood/stripped_log/${wood}`, + `afc:wood/planks/${wood}`, + `afc:wood/planks/${wood}_stairs`, + `afc:wood/planks/${wood}_slab`, + null, + null, + null, + null, + null, + `afc:wood/planks/${wood}_pressure_plate`, + `afc:wood/planks/${wood}_button`, + `afc:wood/wood/${wood}`, + `afc:wood/stripped_wood/${wood}` + ); + + registerTFGWoodRecycling('afc', global.AFC_HARDWOOD_TYPES, GTMaterials.get('hardwood')); + registerTFGWoodRecycling('afc', global.AFC_SOFTWOOD_TYPES, GTMaterials.Wood); + + // Stomping Barrel + event.shaped(`afc:wood/stomping_barrel/${wood}`, [ + 'ABA', + 'AAA', + 'BBB' + ], { + A: `afc:wood/lumber/${wood}`, + B: 'tfc:glue' + + }) + .id(`afc:crafting/wood/${wood}_stomping_barrel`); + }); + + // Outliers + const AFC_MORE_STRIPPING = [ + { name: 'black_oak', stripped: 'oak', stripped_mod: 'tfc' }, + { name: 'rainbow_eucalyptus', stripped: 'eucalyptus', stripped_mod: 'afc' }, + { name: 'gum_arabic', stripped: 'acacia', stripped_mod: 'tfc' }, + { name: 'redcedar', stripped: 'cypress', stripped_mod: 'afc' }, + { name: 'rubber_fig', stripped: 'fig', stripped_mod: 'afc' }, + { name: 'poplar', stripped: 'aspen', stripped_mod: 'tfc' } + ]; + + AFC_MORE_STRIPPING.forEach(x => { + event.recipes.gtceu + .lathe(`tfg:${x.name}_stripped_log_from_log`) + .itemInputs(`afc:wood/log/${x.name}`) + .itemOutputs(`${x.stripped_mod}:wood/stripped_log/${x.stripped}`) + .duration(50) + .EUt(GTValues.VA[GTValues.ULV]); + + event.recipes.vintageimprovements + .polishing(`${x.stripped_mod}:wood/stripped_log/${x.stripped}`, `afc:wood/log/${x.name}`) + .speedLimits(0) + .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) + .id(`tfg:vi/lathe/${x.name}_stripped_log_from_log`); + + event.recipes.gtceu + .lathe(`tfg:${x.name}_stripped_wood_from_log_wood`) + .itemInputs(`afc:wood/wood/${x.name}`) + .itemOutputs(`${x.stripped_mod}:wood/stripped_wood/${x.stripped}`) + .duration(50) + .EUt(GTValues.VA[GTValues.ULV]); + + event.recipes.vintageimprovements + .polishing(`${x.stripped_mod}:wood/stripped_wood/${x.stripped}`, `afc:wood/wood/${x.name}`) + .speedLimits(0) + .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) + .id(`tfg:vi/lathe/${x.name}_stripped_wood_from_log_wood`); + }); + + // #endregion + + // #region General + + // Ladder + event.shaped('8x minecraft:ladder', [ + 'A A', + 'AAA', + 'A A' + ], { + A: '#forge:rods/wooden' + }) + .id('gtceu:shaped/ladder'); + + event.shaped('8x minecraft:ladder', [ + 'A A', + 'AAA', + 'A A' + ], { + A: '#tfc:lumber' + }) + .id('tfg:crafting/vanilla/ladder'); + + // Sticks + event.remove('gtceu:shaped/stick_normal'); + event.remove('gtceu:lathe/lathe_planks'); + event.remove('gtceu:lathe/lathe_saplings'); + + event.recipes.gtceu.lathe('tfg:planks_to_sticks') + .itemInputs('#minecraft:planks') + .itemOutputs('8x minecraft:stick') + .duration(20) + .EUt(7) + + event.shapeless('2x minecraft:stick', ['#minecraft:saplings', '#forge:tools/knives']) + .id('tfg:strip_saplings') + + event.recipes.gtceu.cutter('tfg:saplings_to_sticks') + .itemInputs('#minecraft:saplings') + .itemOutputs('2x minecraft:stick') + .duration(20) + .EUt(7) + + event.recipes.gtceu.packer('tfg:stick_bunch') + .itemInputs('9x #forge:rods/wooden') + .circuit(5) + .itemOutputs('tfc:stick_bunch') + .duration(50) + .EUt(GTValues.VA[GTValues.ULV]) + + event.recipes.gtceu.packer('tfg:stick_bundle') + .itemInputs('18x #forge:rods/wooden') + .circuit(8) + .itemOutputs('tfc:stick_bundle') + .duration(50) + .EUt(GTValues.VA[GTValues.ULV]) + + // #endregion + + // #region TFC + + global.TFC_WOOD_TYPES.forEach(wood => { + + // Removed unused assets + event.remove({ id: `tfc:crafting/wood/${wood}_axle` }); + event.remove({ id: `tfc:crafting/wood/${wood}_bladed_axle` }); + event.remove({ id: `tfc:crafting/wood/${wood}_encased_axle` }); + event.remove({ id: `tfc:crafting/wood/${wood}_clutch` }); + event.remove({ id: `tfc:crafting/wood/${wood}_gear_box` }); + event.remove({ id: `tfc:crafting/wood/${wood}_water_wheel` }); + + // Removed recipe changes + event.remove({ id: `tfc:crafting/wood/${wood}_lumber_log` }); + event.remove({ id: `tfc:crafting/wood/${wood}_button` }); + event.remove({ id: `tfc:crafting/wood/${wood}_slab` }); + event.remove({ id: `tfc:crafting/wood/${wood}_slab_undo` }); + event.remove({ id: `tfc:crafting/wood/${wood}_lumber_planks` }); + event.remove({ id: `tfc:crafting/wood/${wood}_stairs` }); + event.remove({ id: `tfc:crafting/wood/${wood}_stairs_undo` }); + event.remove({ id: `tfc:crafting/wood/palm_mosaic` }); + event.remove({ id: `tfc:crafting/wood/palm_mosaic_slab` }); + event.remove({ id: `tfc:crafting/wood/palm_mosaic_slab_undo` }); + event.remove({ id: `tfc:crafting/wood/palm_mosaic_stairs` }); + event.remove({ id: `tfc:crafting/wood/palm_mosaic_stairs_undo` }); + + TFGWoodBuilder( + event, + `${wood}`, + `tfc:wood/lumber/${wood}`, + `#tfc:${wood}_logs`, + `tfc:wood/log/${wood}`, + `tfc:wood/stripped_log/${wood}`, + `tfc:wood/planks/${wood}`, + `tfc:wood/planks/${wood}_stairs`, + `tfc:wood/planks/${wood}_slab`, + null, + null, + null, + null, + null, + `tfc:wood/planks/${wood}_pressure_plate`, + `tfc:wood/planks/${wood}_button`, + `tfc:wood/wood/${wood}`, + `tfc:wood/stripped_wood/${wood}`, + `tfc:wood/wood/${wood}`, + `tfc:wood/stripped_wood/${wood}` + ); + }); + + TFGMosaicWoodBuilder( + event, + 'palm', + 'tfc:wood/lumber/palm', + 'tfc:wood/planks/palm', + 'tfc:wood/planks/palm_mosaic', + 'tfc:wood/planks/palm_stairs', + 'tfc:wood/planks/palm_mosaic_stairs', + 'tfc:wood/planks/palm_slab', + 'tfc:wood/planks/palm_mosaic_slab' + ); + + registerTFGWoodRecycling('tfc', global.TFC_HARDWOOD_TYPES, GTMaterials.get('hardwood')); + registerTFGWoodRecycling('tfc', global.TFC_SOFTWOOD_TYPES, GTMaterials.Wood); + + // #endregion + + // #region Minecraft + + // Bamboo + + // Removed recipe changes + const Bamboo_Items = [ + 'minecraft:stripped_bamboo_block', + 'minecraft:bamboo_planks', + 'minecraft:bamboo_slab', + 'minecraft:bamboo_stairs', + 'minecraft:bamboo_fence', + 'minecraft:bamboo_fence_gate', + 'minecraft:bamboo_door', + 'minecraft:bamboo_trapdoor', + 'minecraft:bamboo_button', + 'minecraft:bamboo_mosaic', + 'minecraft:bamboo_mosaic_slab', + 'minecraft:bamboo_mosaic_stairs', + 'minecraft:bamboo_pressure_plate' + ]; + + Bamboo_Items.forEach(item => { + event.remove({ input: item }) + event.remove({ output: item }) + }); + + TFGWoodBuilder( + event, + 'bamboo', + 'tfg:wood/lumber/bamboo', + null, + 'minecraft:bamboo_block', + 'minecraft:stripped_bamboo_block', + 'minecraft:bamboo_planks', + 'minecraft:bamboo_stairs', + 'minecraft:bamboo_slab', + 'minecraft:bamboo_door', + 'minecraft:bamboo_trapdoor', + 'minecraft:bamboo_fence', + 'minecraft:bamboo_fence_gate', + null, + 'minecraft:bamboo_pressure_plate', + 'minecraft:bamboo_button', + null, + null + ); + + TFGMosaicWoodBuilder( + event, + 'bamboo', + 'tfg:wood/lumber/bamboo', + 'minecraft:bamboo_planks', + 'minecraft:bamboo_mosaic', + 'minecraft:bamboo_stairs', + 'minecraft:bamboo_mosaic_stairs', + 'minecraft:bamboo_slab', + 'minecraft:bamboo_mosaic_slab' + ); + + // Lumber from log + event.shapeless('8x tfg:wood/lumber/bamboo', + ['minecraft:bamboo_block', '#forge:tools/saws'] + ) + .id(`tfg:shapeless/bamboo_lumber_from_log`); + + event.shapeless('8x tfg:wood/lumber/bamboo', + ['minecraft:stripped_bamboo_block', '#forge:tools/saws'] + ) + .id(`tfg:shapeless/bamboo_lumber_from_stripped_log`); + + // #endregion + + // #region Gregtech + + // Removed recipe changes + event.remove({ id: 'gtceu:shaped/treated_fence' }); + event.remove({ id: 'gtceu:shaped/treated_fence_gate' }); + event.remove({ id: 'gtceu:shaped/treated_fence_gate_screws' }); + event.remove({ id: 'gtceu:shaped/treated_stairs' }); + event.remove({ id: 'gtceu:assembler/treated_stairs' }); + event.remove({ id: 'gtceu:assembler/treated_fence' }); + event.remove({ id: 'gtceu:assembler/treated_fence_gate' }); + event.remove({ output: 'gtceu:treated_wood_button' }); + + // Treated wood + TFGWoodBuilder( + event, + 'treated_wood', + 'gtceu:treated_wood_plate', + null, + null, + null, + 'gtceu:treated_wood_planks', + 'gtceu:treated_wood_stairs', + 'gtceu:treated_wood_slab', + 'gtceu:treated_wood_door', + 'gtceu:treated_wood_trapdoor', + 'gtceu:treated_wood_fence', + 'gtceu:treated_wood_fence_gate', + null, + 'gtceu:treated_wood_pressure_plate', + 'gtceu:treated_wood_button', + null, + null + ); + + // #endregion + +}; \ No newline at end of file diff --git a/kubejs/server_scripts/tfg/primitive/recipes.wood.js b/kubejs/server_scripts/tfg/primitive/recipes.wood.js index 746aad25f..60356bb4d 100644 --- a/kubejs/server_scripts/tfg/primitive/recipes.wood.js +++ b/kubejs/server_scripts/tfg/primitive/recipes.wood.js @@ -33,23 +33,6 @@ function registerTFGWoodRecipes(event) { result: { item: 'tfc:powder/wood_ash' } }).id(`tfg:ae_transform/torch_to_wood_ash`) - // Ladder - event.shaped('8x minecraft:ladder', [ - 'A A', - 'AAA', - 'A A' - ], { - A: '#forge:rods/wooden' - }).id('gtceu:shaped/ladder') - - event.shaped('8x minecraft:ladder', [ - 'A A', - 'AAA', - 'A A' - ], { - A: '#tfc:lumber' - }).id('tfc:crafting/vanilla/ladder') - event.replaceInput({ id: 'tfc:crafting/vanilla/armor_stand' }, '#minecraft:planks', '#tfc:lumber') event.remove({ id: 'tfc:crafting/vanilla/armor_stand_bulk' }) @@ -66,59 +49,6 @@ function registerTFGWoodRecipes(event) { .inputs('#tfg:wood_dusts', TFC.fluidStackIngredient('#forge:creosote', 50)) .id('tfg:barrel/treated_wood_dust') - event.shaped('2x gtceu:treated_wood_door', [ - 'AA ', - 'AA ', - 'AA ' - ], { - A: 'gtceu:treated_wood_plate' - }).id('tfg:shaped/treated_door') - - event.shaped('3x gtceu:treated_wood_trapdoor', [ - 'AAA', - 'AAA', - ' ' - ], { - A: 'gtceu:treated_wood_plate' - }).id('tfg:shaped/treated_trapdoor') - - event.shaped('gtceu:treated_wood_pressure_plate', [ - ' B ', - 'CDC', - ' E ' - ], { - B: '#tfc:hammers', - C: 'gtceu:treated_wood_slab', - D: '#forge:small_springs', - E: '#forge:tools/screwdrivers' - }).id('gtceu:shaped/treated_pressure_plate') - - event.recipes.gtceu.assembler('gtceu:treated_pressure_plate') - .itemInputs('#forge:small_springs', '2x gtceu:treated_wood_slab') - .itemOutputs('gtceu:treated_wood_pressure_plate') - .circuit(3) - .duration(50) - .EUt(2) - - event.shapeless(`3x gtceu:treated_wood_button`, [`gtceu:treated_wood_pressure_plate`, '#forge:tools/saws']) - .id(`tfg:shapeless/saw_treated_wood_pressure_plate_to_button`) - - event.replaceOutput({ id: 'gtceu:cutter/treated_button' }, 'gtceu:treated_wood_button', '6x gtceu:treated_wood_button') - event.replaceOutput({ id: 'gtceu:cutter/treated_button_water' }, 'gtceu:treated_wood_button', '6x gtceu:treated_wood_button') - event.replaceOutput({ id: 'gtceu:cutter/treated_button_distilled_water' }, 'gtceu:treated_wood_button', '6x gtceu:treated_wood_button') - - event.replaceOutput({ id: 'greate:cutting/integration/gtceu/cutter/treated_button' }, 'gtceu:treated_wood_button', '6x gtceu:treated_wood_button') - event.replaceOutput({ id: 'greate:cutting/integration/gtceu/cutter/treated_button_water' }, 'gtceu:treated_wood_button', '6x gtceu:treated_wood_button') - event.replaceOutput({ id: 'greate:cutting/integration/gtceu/cutter/treated_button_distilled_water' }, 'gtceu:treated_wood_button', '6x gtceu:treated_wood_button') - - event.replaceOutput({ id: 'gtceu:cutter/bamboo_button' }, 'minecraft:bamboo_button', '6x minecraft:bamboo_button') - event.replaceOutput({ id: 'gtceu:cutter/bamboo_button_water' }, 'minecraft:bamboo_button', '6x minecraft:bamboo_button') - event.replaceOutput({ id: 'gtceu:cutter/bamboo_button_distilled_water' }, 'minecraft:bamboo_button', '6x minecraft:bamboo_button') - - event.replaceOutput({ id: 'greate:cutting/integration/gtceu/bamboo_button' }, 'minecraft:bamboo_button', '6x minecraft:bamboo_button') - event.replaceOutput({ id: 'greate:cutting/integration/gtceu/bamboo_button_water' }, 'minecraft:bamboo_button', '6x minecraft:bamboo_button') - event.replaceOutput({ id: 'greate:cutting/integration/gtceu/bamboo_button_distilled_water' }, 'minecraft:bamboo_button', '6x minecraft:bamboo_button') - // Empty Wooden Form event.shaped('gtceu:empty_wooden_form', [ ' AA', @@ -148,101 +78,4 @@ function registerTFGWoodRecipes(event) { B: '#minecraft:planks', C: 'tfc:glue' }).id('gtceu:shaped/gear_wood') - - // Sticks - event.shapeless('2x minecraft:stick', ['#minecraft:saplings', '#forge:tools/knives']).id('tfg:strip_saplings') - - event.recipes.gtceu.cutter('tfg:saplings_to_sticks') - .itemInputs('#minecraft:saplings') - .itemOutputs('2x minecraft:stick') - .duration(20) - .EUt(7) - - event.recipes.gtceu.packer('tfg:stick_bunch') - .itemInputs('9x #forge:rods/wooden') - .circuit(5) - .itemOutputs('tfc:stick_bunch') - .duration(50) - .EUt(GTValues.VA[GTValues.ULV]) - - event.recipes.gtceu.packer('tfg:stick_bundle') - .itemInputs('18x #forge:rods/wooden') - .circuit(8) - .itemOutputs('tfc:stick_bundle') - .duration(50) - .EUt(GTValues.VA[GTValues.ULV]) - - - // Какие то рецепты дерева - global.TFC_WOOD_TYPES.forEach(wood => { - event.remove({ id: `tfc:crafting/wood/${wood}_axle` }) - event.remove({ id: `tfc:crafting/wood/${wood}_bladed_axle` }) - event.remove({ id: `tfc:crafting/wood/${wood}_encased_axle` }) - event.remove({ id: `tfc:crafting/wood/${wood}_clutch` }) - event.remove({ id: `tfc:crafting/wood/${wood}_gear_box` }) - event.remove({ id: `tfc:crafting/wood/${wood}_water_wheel` }) - - // Бревна -> Пиломатериалы - generateCutterRecipe(event, `#tfc:${wood}_logs`, `16x tfc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_log`) - - // Доски -> Пиломатериалы - generateCutterRecipe(event, `tfc:wood/planks/${wood}`, `4x tfc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_planks`) - - // Ступень -> Пиломатериалы - generateCutterRecipe(event, `tfc:wood/planks/${wood}_stairs`, `3x tfc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_stairs`) - - - // Плита -> Пиломатериалы - generateCutterRecipe(event, `tfc:wood/planks/${wood}_slab`, `2x tfc:wood/lumber/${wood}`, 50, 7, `${wood}_lumber_from_slab`) - - // ? -> Деревянная нажимная пластина - event.shaped(`tfc:wood/planks/${wood}_pressure_plate`, [ - ' B ', - 'CDC', - ' E ' - ], { - B: '#tfc:hammers', - C: `tfc:wood/planks/${wood}_slab`, - D: '#forge:small_springs', - E: '#forge:tools/screwdrivers' - }).id(`tfc:crafting/wood/${wood}_pressure_plate`) - - event.recipes.gtceu.assembler(`${wood}_pressure_plate`) - .itemInputs('#forge:small_springs', `2x tfc:wood/planks/${wood}_slab`) - .circuit(3) - .itemOutputs(`2x tfc:wood/planks/${wood}_pressure_plate`) - .duration(50) - .EUt(2) - - // ? -> Деревянная кнопка - event.remove({ id: `tfc:crafting/wood/${wood}_button` }) - - event.shapeless(`3x tfc:wood/planks/${wood}_button`, [`tfc:wood/planks/${wood}_pressure_plate`, '#forge:tools/saws']) - .id(`tfg:shapeless/saw_${wood}_pressure_plate_to_button`) - - generateCutterRecipe(event, `tfc:wood/planks/${wood}_pressure_plate`, `6x tfc:wood/planks/${wood}_button`, 50, 7, `${wood}_button`) - - // Stripped logs - event.recipes.gtceu.lathe(`tfg:stripping_${wood}_log`) - .itemInputs(`tfc:wood/log/${wood}`) - .itemOutputs(`tfc:wood/stripped_log/${wood}`) - .duration(50) - .EUt(2) - - event.recipes.gtceu.lathe(`tfg:stripping_${wood}_wood`) - .itemInputs(`tfc:wood/wood/${wood}`) - .itemOutputs(`tfc:wood/stripped_wood/${wood}`) - .duration(50) - .EUt(2) - - event.recipes.vintageimprovements.polishing(`tfc:wood/stripped_log/${wood}`, `tfc:wood/log/${wood}`) - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_${wood}_log`) - - event.recipes.vintageimprovements.polishing(`tfc:wood/stripped_wood/${wood}`, `tfc:wood/wood/${wood}`) - .speedLimits(0) - .processingTime(50 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER) - .id(`tfg:vi/lathe/stripping_${wood}_wood`) - }) } \ No newline at end of file diff --git a/kubejs/server_scripts/tfg/recipes.js b/kubejs/server_scripts/tfg/recipes.js index 25f4720d9..d0ea9ba10 100644 --- a/kubejs/server_scripts/tfg/recipes.js +++ b/kubejs/server_scripts/tfg/recipes.js @@ -44,6 +44,7 @@ const registerTFGRecipes = (event) => { registerTFGWaxRecipes(event) registerTFGRubberRecipes(event) registerTFGWoodRecipes(event) + registerTFGWoodenRecipes(event) registerTFGKnappingRecipes(event) registerTFGLeatherRecipes(event) registerTFGClayRecipes(event) diff --git a/kubejs/startup_scripts/ad_astra/constants.js b/kubejs/startup_scripts/ad_astra/constants.js index 93a924324..8ef39e6ba 100644 --- a/kubejs/startup_scripts/ad_astra/constants.js +++ b/kubejs/startup_scripts/ad_astra/constants.js @@ -113,6 +113,7 @@ global.AD_ASTRA_WOOD = [ { name: 'aeronos', logs: '#ad_astra:aeronos_caps', log: 'ad_astra:aeronos_stem', stripped_log: null, + log_wood: null, stripped_wood: null, lumber: 'tfg:wood/lumber/aeronos', plank: 'ad_astra:aeronos_planks', stair: 'ad_astra:aeronos_stairs', slab: 'ad_astra:aeronos_slab', fence: 'ad_astra:aeronos_fence', fence_gate: 'ad_astra:aeronos_fence_gate', @@ -124,6 +125,7 @@ global.AD_ASTRA_WOOD = [ { name: 'strophar', logs: '#ad_astra:strophar_caps', log: 'ad_astra:strophar_stem', stripped_log: null, + log_wood: null, stripped_wood: null, lumber: 'tfg:wood/lumber/strophar', plank: 'ad_astra:strophar_planks', stair: 'ad_astra:strophar_stairs', slab: 'ad_astra:strophar_slab', fence:'ad_astra:strophar_fence', fence_gate: 'ad_astra:strophar_fence_gate', @@ -135,6 +137,7 @@ global.AD_ASTRA_WOOD = [ { name: 'glacian', logs: '#ad_astra:glacian_logs', log: 'ad_astra:glacian_log', stripped_log: 'ad_astra:stripped_glacian_log', + log_wood: 'tfg:glacian_wood', stripped_wood: 'tfg:glacian_wood_stripped', lumber: 'tfg:wood/lumber/glacian', plank: 'ad_astra:glacian_planks', stair: 'ad_astra:glacian_stairs', slab: 'ad_astra:glacian_slab', fence: 'ad_astra:glacian_fence', fence_gate: 'ad_astra:glacian_fence_gate', diff --git a/kubejs/startup_scripts/beneath/constants.js b/kubejs/startup_scripts/beneath/constants.js index 536ac80b1..116b82ebc 100644 --- a/kubejs/startup_scripts/beneath/constants.js +++ b/kubejs/startup_scripts/beneath/constants.js @@ -50,4 +50,9 @@ global.BENEATH_DISABLED_ITEMS = [ "beneath:wood/sapling/crimson", "beneath:wood/sapling/warped" -]; \ No newline at end of file +]; + +global.BENEATH_WOOD_TYPES = /** @type {const} */ ([ + "crimson", + "warped" +]); \ No newline at end of file diff --git a/kubejs/startup_scripts/tfg/worldgen/items.wood.js b/kubejs/startup_scripts/tfg/worldgen/items.wood.js index db87b70c9..a97b6a7d1 100644 --- a/kubejs/startup_scripts/tfg/worldgen/items.wood.js +++ b/kubejs/startup_scripts/tfg/worldgen/items.wood.js @@ -21,4 +21,9 @@ function registerTFGWoodItems(event) { event.create('tfg:twigs/alphacene') .tag('tfc:twigs') .texture('tfg:item/wood/twig/alphacene') + + // Bamboo lumber + event.create('tfg:wood/lumber/bamboo') + .tag('tfc:lumber') + .texture('tfg:item/wood/lumber/bamboo') } \ No newline at end of file