Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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');
Expand Down Expand Up @@ -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);
}
}
});
Expand All @@ -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 } });
};
}
});
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -11,7 +34,9 @@ ServerEvents.recipes(event => {

const {
tiers: { tier, tier0 },
materials: {
materials: {
primMaterial,
tierMaterial,
tierFluid,
cable
}
Expand Down Expand Up @@ -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');

});
});
39 changes: 36 additions & 3 deletions kubejs/startup_scripts/utils/helpers/recipe_helpers.js
Original file line number Diff line number Diff line change
@@ -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 <code>_core</code> to the result (used for referencing core mod items)
* @returns {string} - <code>gtceu</code> for voltages at or below uv, <code>start[[_core]]</code> 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);
Expand All @@ -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;
Expand All @@ -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);
};