malloc-s4/kubejs/server_scripts/ore-processing.js

774 lines
30 KiB
JavaScript
Executable File

ServerEvents.recipes(event => {
// Metal tiers:
// Copper, iron, tin, nickel, gold, zinc, brass, invar, bronze - Pre-basic build tier, the only ores that don't require a pulverizer or smelter to process
// gold, silver, lead - gated behind crushing wheels
// platinum, iridum, osmium - Gated behind the pulverizer
// lumium, enderium, electrum, signalum, steel - Alloys are gated behind the smelter as well
// uranium - requires basic energetic grist to energize into ingots
// Gear tiers:
// copper, iron, tin, nickel, zinc, brass, bronze - Pre-gear die tier
// invar, bronze, brass - the only alloys you can make without grist
// constantan - requires 1 build grist to make the dust alloy
// invar, gold, silver, electrum, signalum, lead, steel - Gated behind gear die
// lumium, enderium, other alloys - Gated behind heavy duty gear die
let metalForm = (metal, tag, form) => {
let itemType = AlmostUnified.getPreferredItemForTag(`forge:${tag}/${metal}`);
if (itemType.id == 'minecraft:air') {
console.log(`metals: ${metal} ${form} has unknown tag forge:${tag}/${metal}?`)
let ret = Item.of(`alltheores:${metal}_${form}`);
if (ret.id == "minecraft:air") {
return Item.of(`thermal:${metal}_${form}`);
}
return ret;
}
console.log(`metals: forge:${tag}/${metal} found`);
return itemType;
}
// Progression
// Vanilla age -> Ore hammer for crushing tin to make andesite alloy
// Andesite age -> Mixer from andesite allow allows creating early alloys: bronze, brass, invar, constantan
// Invar age -> induction smelter from invar gears (which now require grist) allows higher level alloys: constantan
// Alloy age -> Higher level alloys unlock the rest of Thermal
// New metal tiers:
// Primitive: Copper - The only ore you can smelt directly in an oven. Also can be processed in a crafting table.
// Vanilla: Iron, tin, nickel, gold, zinc, brass, bronze, invar - The ores require a ore hammer to create 2x crushed ore, which can be smelted into ingots. The metals can be processed in a crafting table.
// Modded (requires build grist): invar
// Progression recipes:
// Constantan:
/*
Metal progression:
Primitive tier: Stone pickaxe to mine, raw ore can be immediately smelted
Copper
Vanilla tier: Stone pickaxe to mine, ore hammer to crush, then smelted. Only one alloy, and it can be crated on the crafting table
Iron, Tin, Gold, Zinc: Ores
Andesite alloy: 2x andesite + tin dust
Progression: Find tin, crush it, create andesite alloy to start making create mod items
Andesite age: Iron pickaxe to mine, crushing wheels to crush, then the crushed ore is smelted normally. Alloys require the create mixer. Ore washing to double crushed ore is unlocked, but fans require invar instead of iron. Gears can be crafted on a crafting table
Silver, Aluminium, Lead: Ores
Bronze - tin + copper
Brass - tin + 3x copper
Rose gold - copper + gold
Progression: Make some brass, craft a gear on the crafting table with build grist, create an induction furnace
Mechanical/grist age: Ores require diamond pick, crushed in the pulverizer, and crushed ore is smelted normally. Alloys require the induction furnace. 4x ore centrifuge is unlocked after creating a constantan gear on the crafting table. Other gears require the press.
Uranium, Platinum, Iridium?, Nickel, Osmium
Electrum - gold + silver
Invar - 2x iron + nickel
Constantan - Copper + nickel
Netherite - 4x netherite scrap, 4x gold
Progression: Create the gear die
Industrial age: Alloys require basic grists, gears can only be made with a gear die
Redium - 4x redstone powder, 2x obsidian powder, 2x iron dust, 1x blaze
Lapium - 4x lapis powder, 2x gold dust, 2x obsidian powder, 1x quartz powder
Gemium - 2x diamond, 1x prismarine powder, 2x emerald dust, 4x obsidian powder
Trilium - 2x lapium, 4x gemium, 1x ender powder, 2x redium
Signalum - silver + 3x copper + 4x redstone
Lumium - silver + 3x tin + 2x glowstone dust
Progression: Make it to the nether
Modern age: Alloys require improved grist
Gobber - gobber glob + diamond + iron + gold
nether gobber - nether glob + 2x gobber + netherite scrap
Quadrilium - 4x trilium, 4x netherite scrpa, 1x ghast tear
Progression: Make it to the end
Age of Legends:
Enderium - 1x diamond + 3x lead + 2x ender pearl = 2 ingot
end gobber - end glob + 2x nether gobber + chorus flower
Progression: That's it, that's the end. You won the game.
*/
let progression = {
// Primitive tier: Stone pickaxe to mine, raw ore can be immediately smelted
primitive: {
copper: []
},
// Vanilla tier: Stone pickaxe to mine, ore hammer to crush, then smelted. Only one alloy, and it can be crated on the crafting table
vanilla: {
iron: [],
tin: [],
gold: [],
zinc: [],
// FIXME: Need to add create:andesite_alloy to #forge:ingots/andesite_alloy
andesite_alloy: [4, '2x minecraft:andesite', 'tin']
},
// Andesite age: Iron pickaxe to mine, crushing wheels to crush, then the crushed ore is smelted normally. Alloys require the create mixer. Ore washing to double crushed ore is unlocked, but fans require invar instead of iron. Gears can be crafted on a crafting table
andesite: {
silver: [],
aluminum: [],
lead: [],
rose_gold: [2, 'copper', 'gold'],
bronze: [2, 'tin', 'copper'],
constantan: [2, 'copper', 'nickel'],
brass: [2, 'zinc', 'copper']
},
// Mechanical/grist age: Ores require diamond pick, crushed in the pulverizer, and crushed ore is smelted normally. Alloys require the induction furnace. 4x ore centrifuge is unlocked after creating a constantan gear on the crafting table. Other gears require the press.
mechanical: {
nickel: [],
invar: [3, '2x iron', 'nickel'],
electrum: [2, 'gold', 'silver'],
netherite: [1, '4x minecraft:netherite_scrap', '4x gold'],
},
// Industrial age: Alloys require basic grists, gears can only be made with a gear die
industrial: {
steel: [2, '2x iron', '#minecraft:coals'],
uranium: [],
platinum: [],
osmium: [],
signalum: [4, 'silver', '3x copper', '4x minecraft:redstone'],
lumium: [4, 'silver', '3x tin', '2x minecraft:glowstone_dust'],
redium: [4, '4x powder_power:powder_redstone', '2x #forge:dusts/obsidian', '2x #forge:dusts/iron', 'minecraft:blaze_powder'],
lapium: [4, '4x powder_power:powder_lapis', '2x #forge:dusts/gold', '2x #forge:dusts/obsidian', 'powder_power:powder_nether_quartz'],
gemium: [4, '4x #forge:dusts/obsidian', '2x #forge:dusts/diamond', '2x #forge:dusts/emerald', 'powder_power:powder_prismarine'],
trilium: [4, '2x lapium', '2x gemium', '2x redium', 'powder_power:powder_end_pearl']
},
// Modern age: Alloys require improved grist
modern: {
gobber: [3, 'gobber2:gobber2_glob', 'platinum', 'osmium'],
nether_gobber: [3, 'gobber2:gobber2_glob_nether', 'minecraft:netherite_scrap', '2x gobber'],
quadrilium: [3, '3x trilium', '4x minecraft:netherite_scrap', 'powder_power:powder_ghast_tear']
},
// Age of Legends: The end game
legends: {
//enderium: [],
end_gobber: [3, 'gobber2:gobber2_glob_end', '2x nether_gobber', '2x #kubejs:grist/build/improved']
}
};
// Basic rules for all materials
for (const [key, metals] of Object.entries(progression)) {
for (const [metal, ingredients] of Object.entries(metals)) {
let rawType = metalForm(metal, 'raw_materials', 'ore');
let crushedType = Item.of(`create:crushed_raw_${metal}`);
let dustType = metalForm(metal, 'dusts', 'dust');
let nuggetType = metalForm(metal, 'nuggets', 'nugget');
let ingotType = metalForm(metal, 'ingots', 'ingot');
let blockType = metalForm(metal, 'storage_blocks', 'block');
let rawBlockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
let plateType = metalForm(metal, 'plates', 'plate');
let gearType = metalForm(metal, 'gears', 'gear');
let rodType = metalForm(metal, 'rods', 'rod');
console.log(`Wiping out stock ore processing for ${metal}...`);
// Wipe out all the stock recipes
event.remove({output: gearType});
event.remove({output: dustType});
event.remove({output: blockType});
event.remove({output: rodType});
event.remove({output: plateType});
event.remove({output: ingotType});
event.remove({output: rawBlockType});
event.remove({output: nuggetType});
event.remove({output: crushedType});
event.remove({input: crushedType});
// All dusts and crushed ores can be smelted to ingots, and made with ore hammers
if (dustType.id != 'minecraft:air') {
event.smelting(ingotType, dustType);
event.shapeless(dustType, [ingotType, '#alltheores:ore_hammers']);
}
// Plates can always be smelted back into their original ingot
if (plateType.id != 'minecraft:air') {
event.smelting(ingotType, plateType);
// 1 plate = 1 ingot in presses
event.recipes.thermal.press(plateType, [ingotType]);
event.recipes.create.pressing([plateType], [ingotType]);
}
// 4 ingots = 1 gear
if (gearType.id != 'minecraft:air') {
event.recipes.thermal.press(gearType, [ingotType.withCount(4), 'thermal:press_gear_die']);
}
// 9 Nuggets == 1 ingot, for every material
if (nuggetType.id != 'minecraft:air') {
event.shapeless(ingotType, [nuggetType.withCount(9)]);
event.shapeless(nuggetType.withCount(9), [ingotType]);
}
// 9 ore = 1 ore block
if (rawType.id != 'minecraft:air') {
event.shapeless(rawBlockType, [rawType.withCount(9)]);
event.shapeless(rawType.withCount(9), [rawBlockType]);
}
// 9 ingots = 1 block
if (blockType.id != 'minecraft:air') {
event.shapeless(blockType, [ingotType.withCount(9)]);
event.shapeless(ingotType.withCount(9), [blockType]);
}
// All alloys can be created in the smelter, or a superheated mixer
if (ingredients.length > 0) {
for (const form of ['ingots', 'dusts']) {
let real_ingredients = [];
for (const ingredient of ingredients.slice(1)) {
let real_item = Item.of(ingredient);
if (real_item.id == 'minecraft:air') {
let parts = ingredient.split(' ');
if (parts.length == 1) {
real_item = metalForm(parts[0], form);
} else {
real_item = metalForm(parts[1], form).withCount(parts[0].split('x')[0]);
}
}
if (real_item.id == 'minecraft:air') {
console.error(`Unknown or invalid ${metal} alloy ingredient: ${ingredient}`);
}
real_ingredients.push(real_item);
}
if (real_ingredients.length > 0) {
if (real_ingredients.length <= 3) {
event.recipes.thermal.smelter(ingotType.withCount(ingredients[0]), real_ingredients);
} else {
event.recipes.create.mixing(ingotType.withCount(ingredients[0]), real_ingredients).superheated();
}
}
}
}
// TODO: Create saw, 3x3 packing/unpacking dies, mechanical press
}
}
// Primitive tier: Ores can be immediately smelted
for (const [metal, ingredients] of Object.entries(progression.primitive)) {
let ingotType = metalForm(metal, 'ingots', 'ingot');
let rawType = metalForm(metal, 'raw_materials', 'ore');
let rawBlockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
let blockType = metalForm(metal, 'storage_blocks', 'block');
console.log(`Building primitive processing for ${metal}...`);
if (rawType.id != 'minecraft:air') {
event.smelting(ingotType, rawType);
event.smelting(blockType, rawBlockType);
} else {
console.error(`No ${metal} smelting available!`);
}
// There are no alloys here to handle...
}
// The progression item is simply creating a copper ore hammer
// Vanilla tier: Ores need an ore hammer, and alloys can be crafted on the crafting table
for (const tier of ['primitive', 'vanilla']) {
for (const [metal, ingredients] of Object.entries(progression[tier])) {
let rawType = metalForm(metal, 'raw_materials', 'ore');
let dustType = metalForm(metal, 'dusts', 'dust');
let ingotType = metalForm(metal, 'ingots', 'ingot');
let rawBlockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
console.log(`Building vanilla processing for ${metal}...`);
// Crush raw ore into dust with an ore hammer, in crafting table and in the deployer
if (rawType.id != 'minecraft:air') {
event.shapeless(dustType, [rawType, '#alltheores:ore_hammers']);
event.shapeless(dustType.withCount(9), [rawBlockType, '#alltheores:ore_hammers']);
event.recipes.create.deploying([dustType], [rawType, '#alltheores:ore_hammers']).keepHeldItem();
event.recipes.create.deploying([dustType.withCount(9)], [rawBlockType, '#alltheores:ore_hammers']).keepHeldItem();
} else {
console.error(`No ${metal} ore hammer smashing available!`);
}
// TODO: alloy ingredients
for (const form of ['ingots', 'dusts']) {
let real_ingredients = [];
for (const ingredient of ingredients.slice(1)) {
let real_item = Item.of(ingredient);
if (real_item.id == 'minecraft:air') {
let parts = ingredient.split(' ');
if (parts.length == 1) {
real_item = metalForm(parts[0], form);
} else {
real_item = metalForm(parts[1], form).withCount(parts[0].split('x')[0]);
}
}
if (real_item.id == 'minecraft:air') {
console.error(`Unknown or invalid ${metal} alloy ingredient: ${ingredient}`);
} else {
real_ingredients.push(real_item);
}
}
if (real_ingredients.length > 0) {
event.shapeless(ingotType.withCount(ingredients[0]), real_ingredients);
}
}
}
}
// Andesite alloy is the progression item, as it unlocks most of the next tier of create
event.shapeless('create:andesite_alloy', [global.dustItem('tin'), '2x minecraft:andesite']);
// Andesite age: Crushing wheels to crush, then the crushed ore is smelted normally. Alloys require the create mixer. Ore washing to double crushed ore is unlocked, but fans require invar instead of iron. Gears can be crafted on a crafting table
for (const tier of ['primitive', 'vanilla', 'andesite']) {
for (const [metal, ingredients] of Object.entries(progression[tier])) {
let rawType = metalForm(metal, 'raw_materials', 'ore');
let crushedType = Item.of(`create:crushed_raw_${metal}`);
let dustType = metalForm(metal, 'dusts', 'dust');
let ingotType = metalForm(metal, 'ingots', 'ingot');
let rawBlockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
let gearType = metalForm(metal, 'gears', 'gear');
let plateType = metalForm(metal, 'plates', 'plate');
console.log(`Building andesite processing for ${metal}...`);
if (rawType.id != 'minecraft:air') {
if (crushedType.id != 'minecraft:air') {
event.recipes.create.crushing([crushedType.withCount(2)], rawType);
event.recipes.create.crushing([crushedType.withCount(18)], rawBlockType);
event.recipes.create.milling([crushedType.withCount(2)], rawType);
event.recipes.create.milling([crushedType.withCount(18)], rawBlockType);
event.smelting(ingotType, crushedType);
if (dustType.id != 'minecraft:air') {
event.recipes.create.splashing([dustType.withCount(2)], crushedType);
} else {
console.error(`No ${metal} ore washing available!`);
}
} else {
console.error(`No ${metal} ore crushing available!`);
}
}
if (gearType.id != 'minecraft:air') {
event.shaped(gearType, [
' A ',
'ABA',
' A '
], {
'A': ingotType,
'B': '#forge:gems'
});
} else {
console.error(`No ${metal} gears available!`);
}
if (plateType.id != 'minecraft:air') {
event.shapeless(plateType, [ingotType.withCount(2), '#alltheores:ore_hammers']);
} else {
console.error(`No ${metal} plates available!`);
}
// TODO: alloy ingredients
for (const form of ['ingots', 'dusts']) {
let real_ingredients = [];
for (const ingredient of ingredients.slice(1)) {
let real_item = Item.of(ingredient);
if (real_item.id == 'minecraft:air') {
let parts = ingredient.split(' ');
if (parts.length == 1) {
real_item = metalForm(parts[0], form);
} else {
real_item = metalForm(parts[1], form).withCount(parts[0].split('x')[0]);
}
}
if (real_item.id == 'minecraft:air') {
console.error(`Unknown or invalid ${metal} alloy ingredient: ${ingredient}`);
}
real_ingredients.push(real_item);
}
if (real_ingredients.length > 0) {
event.recipes.create.mixing(ingotType.withCount(ingredients[0]), real_ingredients).heated();
}
}
}
}
// Most machines from here on out require nickel, so we unlock the pulverizer behind our early alloys
event.replaceInput(
{output: 'thermal:machine_pulverizer'},
'#forge:gears/copper',
global.gearItem('brass')
);
// Mechanical/grist age: Ores require diamond pick, crushed in the pulverizer, and crushed ore is smelted normally. Alloys require blending dusts in a heated mixer, then smelting the blend. 4x ore centrifuge is unlocked after creating a constantan gear on the crafting table. Other gears require the press.
for (const tier of ['primitive', 'vanilla', 'andesite', 'mechanical']) {
for (const [metal, ingredients] of Object.entries(progression[tier])) {
let rawType = metalForm(metal, 'raw_materials', 'ore');
let crushedType = Item.of(`create:crushed_raw_${metal}`);
let dustType = metalForm(metal, 'dusts', 'dust');
let ingotType = metalForm(metal, 'ingots', 'ingot');
console.log(`Building mechanical processing for ${metal}...`);
if (rawType.id != 'minecraft:air') {
if (crushedType.id != 'minecraft:air') {
// Crushed ores are created in the industrial tier code, but mechanical tier and below are the only ones that don't need a centrifuge first
// This allows Nickel to be processed into a constantan gear, which unlocks the centrifuge
event.smelting(ingotType, [crushedType]);
} else {
console.error(`No ${metal} ore pulverizing available! Falling back to dust-based processing line`);
}
}
for (const form of ['dusts']) {
let real_ingredients = [];
for (const ingredient of ingredients.slice(1)) {
let real_item = Item.of(ingredient);
if (real_item.id == 'minecraft:air') {
let parts = ingredient.split(' ');
if (parts.length == 1) {
real_item = metalForm(parts[0], form);
} else {
real_item = metalForm(parts[1], form).withCount(parts[0].split('x')[0]);
}
}
if (real_item.id == 'minecraft:air') {
console.error(`Unknown or invalid ${metal} alloy ingredient: ${ingredient}`);
}
real_ingredients.push(real_item);
}
if (real_ingredients.length > 0) {
event.recipes.create.mixing(dustType.withCount(ingredients[0]), real_ingredients).heated();
}
}
}
}
// Constantan gear is the progression item to get to the industrial tier, as it unlocks the press (and therefore other gears)
// Industrial age: Ores require centrifuging, alloys require basic grists, gears can only be made with a gear die
for (const tier of ['primitive', 'vanilla', 'andesite', 'mechanical', 'industrial']) {
for (const [metal, ingredients] of Object.entries(progression[tier])) {
let rawType = metalForm(metal, 'raw_materials', 'ore');
let crushedType = Item.of(`create:crushed_raw_${metal}`);
let dustType = metalForm(metal, 'dusts', 'dust');
let rawBlockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
if (rawType.id != 'minecraft:air') {
if (crushedType.id != 'minecraft:air') {
event.recipes.thermal.pulverizer([crushedType.withCount(4), crushedType.withChance(0.25)], rawType);
event.recipes.thermal.pulverizer([crushedType.withCount(4 * 9), crushedType.withChance(0.25)], rawBlockType);
event.recipes.thermal.centrifuge([dustType.withCount(4), dustType.withChance(0.25)], crushedType);
} else {
console.error(`No ${metal} ore centrifuing available!`);
}
}
}
}
});
function foobar() {
event.shapeless('thermal:quartz_dust', ['8x minecraft:granite', '#alltheores:ore_hammers']).id('kubejs:quartz_dust_from_granit_crushing_manual_only');
event.shapeless('thermal:quartz_dust', ['minecraft:quartz', '#alltheores:ore_hammers']).id('kubejs:quartz_dust_crushing_manual_only');
// All metals can be processed in the pulverizer/crusher, make plates in the press, and make gears with the die
{
let _ = ['copper', 'rose_gold', 'aluminum', 'constantan', 'iron', 'tin', 'nickel', 'gold', 'zinc', 'brass', 'invar', 'bronze', 'silver', 'platinum', 'lead', 'iridium', 'osmium', 'lumium', 'enderium', 'electrum', 'signalum', 'steel', 'uranium'].forEach(metal => {
console.log(`Setting up Tier 3 ${metal} processing...`);
let gearType = metalForm(metal, 'gears', 'gear');
let dustType = metalForm(metal, 'dusts', 'dust');
let plateType = metalForm(metal, 'plates', 'plate');
let ingotType = metalForm(metal, 'ingots', 'ingot');
let rawType = metalForm(metal, 'raw_materials', 'ore');
let blockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
let crushedType = Item.of(`create:crushed_raw_${metal}`);
event.remove({output: gearType});
event.remove({output: plateType});
event.remove({input: `#forge:ores/${metal}`});
event.remove({input: `#forge:raw_materials/${metal}`});
// By default, you can't make any blends in the crafting table.
event.remove({output: dustType, type: 'minecraft:crafting'});
event.remove({output: ingotType, input: 'minecraft:fire_charge'});
// Remove the default conversion of ingot to nuggets from create
event.remove({input: ingotType, type: 'create:crushing'});
// And completely eliminate the default refining line with create crushed ores
if (crushedType.id != 'minecraft:air') {
event.remove({input: crushedType});
event.remove({output: crushedType});
} else {
console.log(`metals: Missing create:crushed_raw_${metal}`);
}
event.remove({id: `alltheores:${metal}_dust_from_alloy_blending`});
console.log(`crushing ${rawType.toJson()} ${dustType.toJson()}`);
if (rawType.id != "minecraft:air") {
event.custom({
type: "thermal:pulverizer",
ingredients: [
{tag: `forge:raw_materials/${metal}`}
],
result: [
{item: dustType.id, chance: 1.05},
{item: dustType.id, chance: 0.25}
],
experience: 0.5
});
if (crushedType.id != 'minecraft:air') {
event.custom({
type: "create:crushing",
ingredients: [
{tag: `forge:raw_materials/${metal}`}
],
results: [
{item: crushedType.id, chance: 1},
{item: crushedType.id, chance: 0.25},
{item: dustType.id, chance: 0.05},
{item: 'create:experience_nugget', count: 2, chance: 0.75}
],
});
}
}
if (blockType.id != "minecraft:air") {
event.custom({
type: "thermal:pulverizer",
ingredients: [
{tag: `forge:storage_blocks/raw_${metal}`}
],
result: [
{item: dustType.id, count: 9, chance: 1},
{item: dustType.id, count: 9, chance: 0.25}
],
experience: 0.5
});
if (crushedType.id != 'minecraft:air') {
event.custom({
type: "create:crushing",
ingredients: [
{tag: `forge:storage_blocks/raw_${metal}`}
],
results: [
{item: crushedType.id, count: 9, chance: 1},
{item: crushedType.id, count: 9, chance: 0.25},
{item: dustType.id, count: 9, chance: 0.05},
{item: 'create:experience_nugget', count: 2 * 9, chance: 0.75}
],
});
}
}
// Set up the parallel create-based ore washing line
if (crushedType.id != 'minecraft:air') {
event.custom({
type: "create:splashing",
ingredients: [
{item: crushedType.id }
],
results: [
{item: dustType.id, count: 2, chance: 1},
{item: dustType.id, chance: 0.25},
{item: dustType.id, chance: 0.05},
],
});
event.custom({
type: "thermal:centrifuge",
ingredients: [
{item: crushedType.id }
],
result: [
{item: dustType.id, count: 3, chance: 3.0},
{item: dustType.id, chance: 0.75},
{item: "twigs:pebble", chance: 0.05}
],
});
}
// 1 dust = 1 ingot
event.custom({
type: "thermal:pulverizer",
ingredients: [
ingotType.toJson()
],
result: [
dustType.toJson()
],
});
event.custom({
type: "create:crushing",
ingredients: [
ingotType.toJson()
],
results: [
dustType.toJson()
],
});
// 4 ingots = 1 gear
event.custom({
type: "thermal:press",
ingredients: [
ingotType.withCount(4).toJson(),
{ item: "thermal:press_gear_die" }
],
result: [gearType.toJson()]
});
// 1 ingot = 1 plate
event.custom({
type: "thermal:press",
ingredients: [
ingotType.toJson(),
],
result: [plateType.toJson()]
});
event.custom({
type: "create:pressing",
ingredients: [
ingotType.toJson(),
],
results: [plateType.toJson()]
});
});}
// But only these metals can be processed without a machine
{let _ = ['copper', 'iron', 'tin', 'nickel', 'zinc', 'brass', 'bronze', 'lead', 'aluminum'].forEach(metal => {
console.log(`Setting up ${metal} manual processing...`);
let gearID = metalForm(metal, 'gears', 'gear');
let plateID = metalForm(metal, 'plates', 'plate');
let dustID = metalForm(metal, 'dusts', 'dust');
event.shaped(gearID, [
' A ',
'ABA',
' A '
], {
'A': global.ingotItem(metal),
'B': '#forge:gems'
});
event.shapeless(plateID, [global.ingotItem(metal, 2), '#alltheores:ore_hammers']).id(`kubejs:plate_crushing_${metal}_manual_only`);
event.shapeless(dustID, [global.ingotItem(metal), '#alltheores:ore_hammers']).id(`kubejs:ore_crushing_${metal}_manual_only`);
});}
// And only these ores can be hammered or crushed
{let _ = ['copper', 'iron', 'tin', 'nickel', 'zinc', 'lead', 'aluminum', 'gold'].forEach(ore => {
console.log(`Setting up ${ore} hammering...`);
let dustType = metalForm(ore, 'dusts', 'dust');
event.shapeless(dustType.withCount(2), [`#forge:raw_materials/${ore}`, '#alltheores:ore_hammers']).id(`kubejs:ore_crushing_2_${ore}_manual_only`);
event.shapeless(dustType.withCount(2 * 9), [`#forge:storage_blocks/raw_${ore}`, '#alltheores:ore_hammers']).id(`kubejs:ore_block_crushing_${ore}_manual_only`);
});}
// And only copper can be smelted without pulverizing
event.smelting(global.ingotItem('copper'), metalForm('copper', 'raw_materials', 'ore'));
console.log(`Setting up blends...`);
// These are the only blends you can make by hand, aka pre-smelter alloys
// FIXME: Remove the hammer from the create mixer
event.shapeless(Item.of(metalForm('bronze', 'dusts', 'dust').withCount(4)), [
global.dustItem('tin', 2),
global.dustItem('copper', 2),
'#alltheores:ore_hammers'
]).id('kubejs:bronze_mixing_manual_only');
event.custom({
type: "create:mixing",
ingredients: [
global.dustItem('tin', 2),
global.dustItem('copper', 2),
],
results: [global.dustItem('tin', 4)]
});
event.shapeless(Item.of(metalForm('brass', 'dusts', 'dust').withCount(4)), [
global.dustItem('copper', 3),
global.dustItem('zinc', 1),
'#alltheores:ore_hammers'
]).id(`kubejs:brass_mixing_manual_only`);
event.custom({
type: "create:mixing",
ingredients: [
global.dustItem('copper', 3),
global.dustItem('zinc', 1),
],
results: [global.dustItem('brass', 4)]
});
event.shapeless(Item.of(metalForm('invar', 'dusts', 'dust').withCount(4)), [
global.dustItem('iron', 2),
global.dustItem('nickel', 2),
'#alltheores:ore_hammers'
]).id('kubejs:invar_mixing_manual_only');
event.custom({
type: "create:mixing",
ingredients: [
global.dustItem('iron', 2),
global.dustItem('nickel', 2),
],
results: [global.dustItem('invar', 4)]
});
// Constantan dust consumes your first build grist, and it unlocks the basic grist production line
event.shapeless(Item.of(metalForm('constantan', 'dusts', 'dust').withCount(4)),[
global.ingotItem('nickel', 2),
global.ingotItem('copper', 2),
'#kubejs:grist/build/basic',
'#alltheores:ore_hammers'
]).id('kubejs:constantan_dust_mixing_manual_only');
// Constantan is the only metal you can't work on the bench except for gears
event.shaped('thermal:constantan_gear', [
' A ',
'ABA',
' A '
], {
'A': global.ingotItem('constantan'),
'B': '#forge:gems'
});
event.shaped('thermal:diamond_gear', [
' A ',
'ABA',
' A '
], {
'A': 'minecraft:diamond',
'B': 'minecraft:crying_obsidian'
});
// Lapis can be pulverized and hammered.
event.remove({output: 'thermal:lapis_dust', type: 'thermal:pulverizer'});
event.custom({
type: "thermal:pulverizer",
ingredients: [
{ item: "minecraft:lapis_lazuli" }
],
result: [
{ item: "thermal:lapis_dust", chance: 1.05 },
{ item: "thermal:lapis_dust", chance: 0.25 }
],
experience: 0.5
});
event.shapeless("2x thermal:lapis_dust", ["minecraft:lapis_lazuli", '#alltheores:ore_hammers']).id('kubejs:lapis_dust_crushing_manual_only');
// Create clay by centrifuging gravel and ash bricks
event.custom({
type: "thermal:centrifuge",
ingredients: [
{ item: "supplementaries:ash_brick" }
],
result: [
{ item: "minecraft:clay_ball", chance: 1.05 },
{ item: "minecraft:clay_ball", chance: 0.25 }
],
experience: 0.5
});
event.custom({
type: "thermal:centrifuge",
ingredients: [
{ item: "minecraft:gravel" }
],
result: [
{ item: "minecraft:sand", chance: 2.00 },
{ item: "minecraft:clay_ball", chance: 0.75 }
],
experience: 0.5
});
}