diff --git a/kubejs/server_scripts/default/additions/machines_and_parts/converters.js b/kubejs/server_scripts/default/additions/machines_and_parts/converters.js index d165e0a80..be1edcb03 100644 --- a/kubejs/server_scripts/default/additions/machines_and_parts/converters.js +++ b/kubejs/server_scripts/default/additions/machines_and_parts/converters.js @@ -1,9 +1,8 @@ global.not_hardmode(() => { ServerEvents.recipes(event => { - const id = global.id; - const calculateDuration = global.calculateRecyclingDuration; - const calculateVoltageMultiplier = global.calculateRecyclingVoltageMultiplier; + const registerScrapRecyclingRecipe = global.registerScrapRecyclingRecipe; + const registerPlasmaRecyclingRecipe = global.registerPlasmaRecyclingRecipe; event.remove({ output: /gtceu:.*_energy_converter/ }); // remove recyling recipes @@ -84,8 +83,8 @@ global.not_hardmode(() => { C: `#gtceu:circuits/${tier}`, S: `gtceu:${tier}_machine_hull` }).id(`start:shaped/${tier}_${amps}a_energy_converter`); - }; - }; + } + } converterCraftingRecipe(1, 'single'); converterCraftingRecipe(4, 'quadruple'); @@ -118,19 +117,8 @@ global.not_hardmode(() => { let appendMacerator = amps === 64 ? [`64x ${info.superconductor}_dust`, `64x ${info.superconductor}_dust`] : [`${amps * 2}x ${info.superconductor}_dust`]; outputsMacerator.splice.apply(outputsMacerator, [amps < 8 ? 1 : 0, 0].concat(appendMacerator)); - event.recipes.gtceu.arc_furnace(id(`arc_${tier}_${amps}a_energy_converter`)) - .itemInputs(`${converterPrefix}:${tier}_${amps}a_energy_converter`) - .itemOutputs(outputsArc) - .duration(calculateDuration(outputsArc)) - .EUt(GTValues.VA[GTValues.LV]) - .category(GTRecipeCategories.ARC_FURNACE_RECYCLING); - - event.recipes.gtceu.macerator(id(`macerate_${tier}_${amps}a_energy_converter`)) - .itemInputs(`${converterPrefix}:${tier}_${amps}a_energy_converter`) - .itemOutputs(outputsMacerator) - .duration(calculateDuration(outputsMacerator)) - .EUt(2 * calculateVoltageMultiplier(outputsMacerator)) - .category(GTRecipeCategories.MACERATOR_RECYCLING); + registerScrapRecyclingRecipe(event, `${converterPrefix}:${tier}_${amps}a_energy_converter`, outputsMacerator); + registerPlasmaRecyclingRecipe(event, `${converterPrefix}:${tier}_${amps}a_energy_converter`, outputsArc); } } }); @@ -140,5 +128,5 @@ BlockEvents.placed(event => { let block = event.getBlock(); if (/^(?:gtceu|start_core):.*energy_converter$/.test(block.getId())) { block.mergeEntityData({ energyContainer: { feToEu: true } }); - }; + } }); \ No newline at end of file diff --git a/kubejs/server_scripts/default/additions/machines_and_parts/tiered_machines/parallel_hatches.js b/kubejs/server_scripts/default/additions/machines_and_parts/tiered_machines/parallel_hatches.js index 742e8c34b..190bd4b0c 100644 --- a/kubejs/server_scripts/default/additions/machines_and_parts/tiered_machines/parallel_hatches.js +++ b/kubejs/server_scripts/default/additions/machines_and_parts/tiered_machines/parallel_hatches.js @@ -3,6 +3,29 @@ ServerEvents.recipes(event => { global.not_hardmode(() => { const components = global.componentMaterials; + const registerScrapRecyclingRecipe = global.registerScrapRecyclingRecipe; + const registerPlasmaRecyclingRecipe = global.registerPlasmaRecyclingRecipe; + const getPrefixByTier = global.getPrefixByTier; + + function postIVHatchRecycling(tierKey) { + const tierData = components[tierKey]; + + if (!tierData) return; + + const { + materials: { + primMaterial, + cable, + tierMaterial + } + } = tierData; + + registerScrapRecyclingRecipe(event, `${getPrefixByTier(tierKey, true)}:${tierKey}_parallel_hatch`, + [`18x gtceu:${primMaterial}_dust`, '16x gtceu:rubber_dust', `9x gtceu:${cable}_dust`, `8x gtceu:${tierMaterial}_dust`]); + + registerPlasmaRecyclingRecipe(event, `${getPrefixByTier(tierKey, true)}:${tierKey}_parallel_hatch`, + [`18x gtceu:${primMaterial}_ingot`, `9x gtceu:${cable}_ingot`, `8x gtceu:${tierMaterial}_ingot`, '16x gtceu:tiny_ash_dust']); + } function postUVMachines(tierKey,chip) { const tierData = components[tierKey]; @@ -11,7 +34,9 @@ ServerEvents.recipes(event => { const { tiers: { tier, tier0 }, - materials: { + materials: { + primMaterial, + tierMaterial, tierFluid, cable } @@ -41,11 +66,35 @@ ServerEvents.recipes(event => { .itemOutputs(`start_core:${tier}_absolute_parallel_hatch`) .duration(320) .EUt(GTValues.VA[GTValues[tier.toUpperCase()]]); + + // normal hatch recycling + postIVHatchRecycling(tierKey); + + // absolute hatch recycling + registerScrapRecyclingRecipe(event, `start_core:${tier}_absolute_parallel_hatch`, + [`64x gtceu:${primMaterial}_dust`, `26x gtceu:${primMaterial}_dust`, '64x gtceu:rubber_dust', + `33x gtceu:${cable}_dust`, `8x gtceu:${tierMaterial}_dust`]); + + registerPlasmaRecyclingRecipe(event, `start_core:${tier}_absolute_parallel_hatch`, + [`64x gtceu:${primMaterial}_ingot`, `26x gtceu:${primMaterial}_ingot`, `33x gtceu:${cable}_ingot`, + `8x gtceu:${tierMaterial}_ingot`, '64x gtceu:tiny_ash_dust']); } + // add recycling recipes to all hatches + // iv hatches are slightly cheaper than the rest because they are not made using assline components + registerScrapRecyclingRecipe(event, `gtceu:iv_parallel_hatch`, + ['12x gtceu:tungsten_steel_dust', '6x gtceu:rubber_dust', '3x gtceu:platinum_dust', '10x gtceu:small_iridium_dust']); + + registerPlasmaRecyclingRecipe(event, `gtceu:iv_parallel_hatch`, + ['12x gtceu:tungsten_steel_ingot', '3x gtceu:platinum_ingot', '22x gtceu:iridium_nugget','6x gtceu:tiny_ash_dust']); + + postIVHatchRecycling('luv'); + postIVHatchRecycling('zpm'); + postIVHatchRecycling('uv'); + + // add additional custom hatches postUVMachines('uhv','kubejs:uepic_chip'); postUVMachines('uev','kubejs:uepic_chip'); postUVMachines('uiv','kubejs:uipic_chip'); - }); }); \ No newline at end of file diff --git a/kubejs/startup_scripts/utils/helpers/recipe_helpers.js b/kubejs/startup_scripts/utils/helpers/recipe_helpers.js index 347505b28..299ebdec1 100644 --- a/kubejs/startup_scripts/utils/helpers/recipe_helpers.js +++ b/kubejs/startup_scripts/utils/helpers/recipe_helpers.js @@ -1,11 +1,26 @@ // priority: 1000 +/** + * Get the recipe/mod namespace prefix for a given tier. + * @param tier{string} - voltage tier + * @param forCoreMod{boolean} - appends _core to the result (used for referencing core mod items) + * @returns {string} - gtceu for voltages at or below uv, start[[_core]] otherwise + */ +global.getPrefixByTier = (tier, forCoreMod) => { + switch (tier.toLowerCase()) { + case 'ulv': case 'lv': case 'mv': case 'hv': case 'ev': case 'iv': case 'luv': case 'zpm': case 'uv': + return 'gtceu'; + default: + return `start${forCoreMod ? '_core' : ''}`; + } +}; + /** * https://github.com/GregTechCEu/GregTech-Modern/blob/v1.6.4-1.20.1/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/RecyclingRecipes.java#L424 * @param {string[]} itemOutputs * @returns {number} */ -global.calculateRecyclingDuration = (itemOutputs) => { +function calculateRecyclingDuration(itemOutputs) { return ( itemOutputs.reduce((duration, item) => { const is = Item.of(item); @@ -15,14 +30,14 @@ global.calculateRecyclingDuration = (itemOutputs) => { return duration + matDuration; }, 0) / GTValues.M ); -}; +} /** * https://github.com/GregTechCEu/GregTech-Modern/blob/v1.6.4-1.20.1/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/RecyclingRecipes.java#L389 * @param {string[]} itemOutputs * @returns {number} */ -global.calculateRecyclingVoltageMultiplier = (itemOutputs) => { +function calculateRecyclingVoltageMultiplier(itemOutputs) { const highestTemp = itemOutputs.reduce((temp, item) => { const ms = global.getGtMaterial(item); if (!ms) return temp; @@ -47,4 +62,22 @@ global.calculateRecyclingVoltageMultiplier = (itemOutputs) => { if (highestTemp == 0) return 1; if (highestTemp < 2000) return 4; return 16; +} + +global.registerScrapRecyclingRecipe = (event, itemInput, itemOutputs) => { + event.recipes.gtceu.macerator(global.id(`macerate_${itemInput.split(":")[1]}`)) + .itemInputs(`${itemInput}`) + .itemOutputs(itemOutputs) + .duration(calculateRecyclingDuration(itemOutputs)) + .EUt(2 * calculateRecyclingVoltageMultiplier(itemOutputs)) + .category(GTRecipeCategories.MACERATOR_RECYCLING); +}; + +global.registerPlasmaRecyclingRecipe = (event, itemInput, itemOutputs) => { + event.recipes.gtceu.arc_furnace(global.id(`arc_${itemInput.split(":")[1]}`)) + .itemInputs(`${itemInput}`) + .itemOutputs(itemOutputs) + .duration(calculateRecyclingDuration(itemOutputs)) + .EUt(GTValues.VA[GTValues.LV]) + .category(GTRecipeCategories.ARC_FURNACE_RECYCLING); };