Compare commits

...

10 Commits

28 changed files with 647 additions and 579 deletions

View File

@@ -44,6 +44,7 @@
"forge:bread/{material}",
"forge:tomato_sauces",
"forge:bacon",
"forge:raw_bacon",
"forge:cheeseburgers",
"forge:hamburgers",
"forge:string",
@@ -56,7 +57,9 @@
"forge:rubber",
"forge:cardboard",
"forge:chocolate",
"forge:pasta"
"forge:pasta",
"forge:salad_ingredients/{material}",
"forge:salt"
],
"materials": [
"aeternium",
@@ -191,6 +194,7 @@
"forge:cardboard": ["dustrial_decor:cardboard", "create:cardboard"],
"thermal:crafting/dies": ["ae2:silicon_press", "ae2:engineering_processor_press", "ae2:calculation_processor_press", "ae2:logic_processor_press"],
"forge:ingots/andesite_alloy": ["create:andesite_alloy"],
"forge:storage_blocks/andesite_alloy": ["create:andesite_alloy_block"],
"forge:rods/andesite_alloy": ["create:shaft"],
"forge:gears/andesite_alloy": ["create:cogwheel"],
"forge:flour/wheat": ["croptopia:flour"],
@@ -205,7 +209,9 @@
"forge:storage_blocks/lapium": ["powder_power:block_lapium"],
"forge:storage_blocks/gemium": ["powder_power:block_gemium"],
"forge:storage_blocks/trilium": ["powder_power:block_trilium"],
"forge:storage_blocks/quadrilium": ["powder_power:block_quadrilium"]
"forge:storage_blocks/quadrilium": ["powder_power:block_quadrilium"],
"forge:limestone": ["quark:limestone", "alexcaves:limestone", "create:limestone"],
"create:stone_types/limestone": ["quark:limestone", "alexcaves:limestone"]
},
"tagOwnerships": {
"forge:crops/bell_pepper": ["forge:crops/bellpepper"],

View File

@@ -14,7 +14,7 @@ hash = "a60442351eb4a2fb2c74d4a7c62fd25d32faca43c0f192a1c261c13db9a71551"
[[files]]
file = "config/almostunified/unify.json"
hash = "fe3dba76719ae817115e2c8b6b428fe790f8724e33148b55148e6769bf4026c3"
hash = "8c51d8df836f7175aa64f92141df3e3a3113f080511420b4ae34ad0acb8d3c21"
[[files]]
file = "config/apotheosis/adventure.cfg"
@@ -555,23 +555,23 @@ hash = "a5e02c71fd92029ea204f96d071c6b25f59d03b59f65199cb24f96a1858b3ed0"
[[files]]
file = "kubejs/server_scripts/grist/agricultural.js"
hash = "b9952f3bf6160c133cbec0e604e56a3a9107149a52097b65777d532e4194b726"
hash = "65145ba119d067f34a207496f295c8fd63673723c9504637872f27ff0f78c566"
[[files]]
file = "kubejs/server_scripts/grist/build.js"
hash = "775f56a6fb7ef4a00416aaed596d6d9898dbb0febdd902de665a11ca1ec4640e"
hash = "3d6b9e5d6935c8de378596e052c8a61ea7e827cfbda135e7298863093772151e"
[[files]]
file = "kubejs/server_scripts/grist/energetic.js"
hash = "b89a43e5216126b188a5771f9dd45bc43d9292c9bdc92cfb6de3108d09559afc"
hash = "28fffd03b4985c3f56d18d8449f2e04badb91439f0690484668d222130672ae6"
[[files]]
file = "kubejs/server_scripts/grist/intelligent.js"
hash = "99ad461391b378426f76c40d34661ed7640cc30cc356c9eb52b60e70b4da6426"
hash = "11903a439e89b90be32c435f54b49ad915aab9d571434120592b3a4b579f197d"
[[files]]
file = "kubejs/server_scripts/grist/primordeal.js"
hash = "7dc5f3ae65fd65800df171420bdb6c69b3c62a99337822a3426c07db73eb6db0"
hash = "8902157c387eedd43855207c38af0fa990522589fb6a8ae827bb9cfecedf19b6"
[[files]]
file = "kubejs/server_scripts/grist/tags.js"
@@ -579,7 +579,7 @@ hash = "0863a1d0a2d67ea44bd174fbe19642e73a3f85aae6bdeb12599e61f174079f2b"
[[files]]
file = "kubejs/server_scripts/init.js"
hash = "d103c3bb61fe22aa1f4ab6d866b1b0d24c47c2aa55f74018eaf460702043a66e"
hash = "a3be46580f9dbc584536293dc6e9a6b76583bb47069ae00d2af75583766f0438"
[[files]]
file = "kubejs/server_scripts/malloc-balance.js"
@@ -587,7 +587,7 @@ hash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
[[files]]
file = "kubejs/server_scripts/mods/ae2.js"
hash = "4dacad5d914c02db31c80e40d7edab7fee89a817444e2f75858209278f9be446"
hash = "b0fe6b78daf76938f90ba1cb76f79079c26b01e6ed612b151d81a5d839b580e9"
[[files]]
file = "kubejs/server_scripts/mods/apotheosis.js"
@@ -627,11 +627,7 @@ hash = "4717847a6d54f56ed6919a1e2c3591fc73780973708e818a563753132bc7c15e"
[[files]]
file = "kubejs/server_scripts/mods/create.js"
hash = "2989241678e27da372401bb66e10b412697b563b2fb8185a380dc3f62cefcd82"
[[files]]
file = "kubejs/server_scripts/mods/create_enchantment_industry.js"
hash = "348f8ca4b328d6ef054d05914b3fffbf1b6813de776cfb44e6eac0ebd14c4c40"
hash = "ca595f7141708157fe469666f5f2309bfcbda3d9c4e052abd55ae256726a0d0a"
[[files]]
file = "kubejs/server_scripts/mods/create_jetpack.js"
@@ -647,7 +643,7 @@ hash = "99c87081cbcba79e032cf8c33c5bf9ff032e841da349c1fc720048711b064584"
[[files]]
file = "kubejs/server_scripts/mods/croptopia.js"
hash = "26d4be6f4fdd3b276c214eaef8e467ecf12c8a25f61e0d4c30d08e6e395b4e66"
hash = "7d09c5eec356309a58d915dbe77e901e4c72679eae95657a5c0dd371b9c9e747"
[[files]]
file = "kubejs/server_scripts/mods/darkutils.js"
@@ -665,6 +661,10 @@ hash = "4ae08d926ae9dfd24d59ae6bea4659c400ca89f011f2acc85b7f839956236f35"
file = "kubejs/server_scripts/mods/elevatorid.js"
hash = "f9a0d2744bd16db5ba3a099b87ce15c72c9e067ce4d27ba17a82fceee40a9845"
[[files]]
file = "kubejs/server_scripts/mods/energymeter.js"
hash = "dc4318bb4290cc1b1a9f7c971fca38f951977d22bdfc824fb4290b78e2f0841a"
[[files]]
file = "kubejs/server_scripts/mods/experienceobelisk.js"
hash = "d635d9125b6a04148ddf506e45c45e88b8c255c4fdfa5a3af1d441931a15bcd0"
@@ -691,7 +691,7 @@ hash = "596dd1c049f41e6f4085aea50a1791be7397710d13d3c234ca09a0626c1d62b5"
[[files]]
file = "kubejs/server_scripts/mods/industrial_foregoing.js"
hash = "dbf1ad898c625e089daa09ae5c331ead86e0d4ff310c4a043f0dbcf0ff02e629"
hash = "4f6bfff4f318af1559c80a6487333577d4e1983f3dcc7b4344f765a9144851da"
[[files]]
file = "kubejs/server_scripts/mods/ironfurnaces.js"
@@ -711,7 +711,7 @@ hash = "2d9109e7f1e0beed5dd325fb7939a15f6afa2f2783e31f3830d1fb6f055f3f07"
[[files]]
file = "kubejs/server_scripts/mods/powah.js"
hash = "93b1aee5ea41c226a2dd5e453824518ab0eeb6d15f649f0a74e5b0e4be9a2e17"
hash = "d7770a1c3fa83efb1fde7c12715c741138995bdf4b513f4fe6b917fc8664763a"
[[files]]
file = "kubejs/server_scripts/mods/powder_power.js"
@@ -719,7 +719,7 @@ hash = "029c5a31573f50b8876763efa7a6306867542623e62ab0a0e5b3f377792f8b59"
[[files]]
file = "kubejs/server_scripts/mods/prettypipes.js"
hash = "b8e97ae2d545b542bd983935eb914709315630d63f921a144f9242943ecfe672"
hash = "27dec2fed14df3f60856114b01e9d34821ebd37afbc5a5fcd5eb1c093821f05b"
[[files]]
file = "kubejs/server_scripts/mods/sophisticated.js"
@@ -735,15 +735,15 @@ hash = "d37bfb9bc41aa46d0aa075dbe19a5eeb947b4ea3d8f13c03ac370cb00763d7a1"
[[files]]
file = "kubejs/server_scripts/mods/thermal.js"
hash = "b81ffc5905fe81de8d66015b0814714a8db8ecb6a4a2d927e600b328665c617a"
hash = "9490e5519a8dc011f2d22a65df5c086ecd44d6cbf5b7a12df417521e5b21a324"
[[files]]
file = "kubejs/server_scripts/mods/torchmaster.js"
hash = "9eed24eaac1d6016fc1d99bcb7259900e430afd674db47c52df89e5cdb6e1317"
hash = "bace606c88cff3079285ad8932eeebccdcea1e73dab04168591a888ee5c5278b"
[[files]]
file = "kubejs/server_scripts/mods/vinery.js"
hash = "208d9d49c612c84f57ee509ec02d4c44145b673caaa06fe451340dc30b8da5aa"
hash = "b24325803c78a586a2516a593456c43156b4e7b5d63a9388a3d7476fe06f5417"
[[files]]
file = "kubejs/server_scripts/mods/waystones.js"
@@ -755,7 +755,7 @@ hash = "4003082f31011049402ff31504a6db0f4fdd6c7076167109c66fa412286be462"
[[files]]
file = "kubejs/server_scripts/ore-processing.js"
hash = "bb085e326aa85a8c8e86aac25f1a2a2c7fe53ebacb74d5de44b34769c73dc3e1"
hash = "2b375084a5ad842c4a8039fa11b45805c1998a80a3d0a79b1bdca23594c90f4e"
[[files]]
file = "kubejs/server_scripts/progression/report.js"
@@ -787,7 +787,7 @@ hash = "eda5964bf26b3ea17ab806944e79c16007e525da8f3ba4d6222dcbb0437f9f90"
[[files]]
file = "kubejs/startup_scripts/rarities.js"
hash = "1d53f63b8caab6f49d80b953546eb12a85af70a549e7e6f9cdacfa27d76e8609"
hash = "c41670ee6003d8151508fe9a35931a42765390a126fc4c9afb285edffa153892"
[[files]]
file = "mods/ae2-things-forge.pw.toml"
@@ -965,13 +965,13 @@ hash = "8461b7344559646b5051a6d812e2cd4d43e62c8c817d17f0b2552f65306f43d4"
metafile = true
[[files]]
file = "mods/caelus.pw.toml"
hash = "5155ae1ca2c606df2001422a48cd167d2449160d5fe12a302753dee69af7fe92"
file = "mods/butchery.pw.toml"
hash = "67a12440b89d7c88ea7552249dba464314b78dc463774110128f49e82524156d"
metafile = true
[[files]]
file = "mods/canary.pw.toml"
hash = "14481081a9e233f4ba57df8a77ce028184818143eae1c73b60749ea482c912e9"
file = "mods/caelus.pw.toml"
hash = "5155ae1ca2c606df2001422a48cd167d2449160d5fe12a302753dee69af7fe92"
metafile = true
[[files]]
@@ -1056,7 +1056,7 @@ metafile = true
[[files]]
file = "mods/copycats.pw.toml"
hash = "35547f679eb0eeac8c5158e49faea3b4ba99263bd6fd1cd27114a48dd6d3db9d"
hash = "408ce5619020064fc084d150d331edc654bbf1749bbd289e19f050a0df51f1c8"
metafile = true
[[files]]
@@ -1259,6 +1259,11 @@ file = "mods/ends-delight.pw.toml"
hash = "63a9fdacf232df08a520fb1f25d2d1e878551fef4d18722c075e04d6291f5ed1"
metafile = true
[[files]]
file = "mods/energymeter.pw.toml"
hash = "4f815d15a2c3918b1ae49851e4d743b85bbdb5bc5b32cd0c9fde14daed000cda"
metafile = true
[[files]]
file = "mods/enlightend.pw.toml"
hash = "bd3ba2a82d5b80be3ccc187ad50a1aec11f53956c2a20cd9a0ad70b8cd932c1d"
@@ -1386,7 +1391,7 @@ metafile = true
[[files]]
file = "mods/geckolib.pw.toml"
hash = "598758f152e98916bc6eea2ad73a82b47a6e6934f4b0ba1e1f6593773afd1a50"
hash = "5290e7961ab2ca528b8bf3fecfbcb33240029314fd7cb2086c06c3ee13daf1fc"
metafile = true
[[files]]

View File

@@ -120,10 +120,10 @@ ServerEvents.recipes(event => {
ingredients: [
{item: 'kubejs:grist_primordeal_improved_block'},
{tag: 'kubejs:grist/agricultural/improved'},
{item: 'kubejs:grist_primordeal_improved_block'},
{tag: 'kubejs:grist/agricultural/improved'},
{tag: 'forge:tomato_sauces'},
{item: 'minecraft:rotten_flesh'},
],
result: {item: 'kubejs:grist_agricultural_improved', count: 4}
result: {item: 'kubejs:grist_agricultural_improved_block'}
});
event.custom({
type: 'farmersdelight:cooking',
@@ -137,7 +137,7 @@ ServerEvents.recipes(event => {
{item: 'kubejs:grist_chutney'},
{item: 'kubejs:grist_chutney'},
],
result: {item: 'kubejs:grist_agricultural_improved'}
result: {item: 'kubejs:grist_agricultural_improved_block', count: 3}
});
event.shaped('kubejs:grist_treats', [
'AAA',
@@ -176,7 +176,7 @@ ServerEvents.recipes(event => {
{item: 'candlelight:pasta_bolognese'},
{item: 'collectorsreap:prawn_po_boy'},
],
inputFluid: "{Amount:5000,FluidName:\"kubejs:grist_agricultural_improved_fluid\"}",
inputFluid: "{Amount:5000,FluidName:\"kubejs:grist_agricultural_basic_fluid\"}",
output: {
count: 1,
item: 'kubejs:grist_morsels'

View File

@@ -83,15 +83,32 @@ ServerEvents.recipes(event => {
reinforced grist nuggets come from grist blend in a centrifugal separator
grist blend comes from basic + improved primordeal block + sulfur in induction smelter
*/
event.recipes.thermal.crystallizer(
'kubejs:grist_build_improved_block',
['4x minecraft:clay', '#kubejs:grist/build/improved', Fluid.of('kubejs:grist_primordeal_improved_fluid', 4500)]
);
event.recipes.thermal.crystallizer(
'kubejs:grist_build_improved_block',
['32x kubejs:reinforced_grist_ingot', Fluid.of('kubejs:grist_primordeal_improved_fluid', 4000)]
// Improved grist starts by smelting together build grist, primordeal improved grist, and sulfur to create reinforced grist blend
event.recipes.thermal.smelter(
'kubejs:reinforced_grist_blend',
['32x #kubejs:grist/build/basic', '8x kubejs:grist_primordeal_improved_block', '2x #forge:dusts/sulfur']
);
// The grist blend is then centrifuged to extract nuggets
/*event.recipes.thermal.centrifuge([
'kubejs:reinforced_grist_nugget',
Fluid.of('kubejs:grist_build_basic_fluid', 125)
], 'kubejs:reinforced_grist_blend');*/
event.custom({
type: 'thermal:centrifuge',
ingredients: [
{ item: 'kubejs:reinforced_grist_blend', count: 3 }
],
results: [
{ fluid: 'kubejs:grist_build_basic_fluid', amount: 225 },
{ item: 'kubejs:grist_essence', chance: 0.2 },
{ item: 'kubejs:reinforced_grist_nugget' },
]
});
// 9 nuggets combine only in a press to create a reinforced grist ingot
event.custom({
type: "thermal:press",
ingredients: [
@@ -101,18 +118,25 @@ ServerEvents.recipes(event => {
result: [{item: 'kubejs:reinforced_grist_ingot'}]
});
event.custom({
// Finally, you crystallize a pile of ingots with improved primordeal fluid.
event.recipes.thermal.crystallizer(
'2x kubejs:grist_build_improved_block',
['32x kubejs:reinforced_grist_ingot', Fluid.of('kubejs:grist_primordeal_improved_fluid', 8000)]
);
// After that, you simply re-crystalize it along with a little bit of clay
event.recipes.thermal.crystallizer(
'kubejs:grist_build_improved_block',
['4x minecraft:clay', '#kubejs:grist/build/improved', Fluid.of('kubejs:grist_primordeal_improved_fluid', 4500)]
);
/*event.custom({
type: "thermal:centrifuge",
ingredients: [
{ item: 'kubejs:reinforced_grist_blend' },
],
result: [{item: 'kubejs:reinforced_grist_nugget', chance: 0.3}]
});
event.recipes.thermal.smelter(
'kubejs:reinforced_grist_blend',
['32x #kubejs:grist/build/basic', '3x kubejs:grist_primordeal_improved_block', '2x #forge:dusts/sulfur']
);
result: [{item: 'kubejs:build_grist_basic'}, {item: 'kubejs:reinforced_grist_nugget', chance: 0.3}]
});*/
/*
improved -> radiant: process ores with power generation, new machines, and tool enchants into smelting up grist alloys -> near creative mode world shaping tools, crafting any block

View File

@@ -55,16 +55,14 @@ ServerEvents.recipes(event => {
blazing crystals require blaze powder plus either infused grist capacitors or improved grist
*/
event.recipes.powah.energizing([
'kubejs:grist_energetic_improved',
'kubejs:grist_energetic_improved',
'kubejs:grist_primordeal_improved_block',
'kubejs:grist_primordeal_improved_block',
], '4x kubejs:grist_energetic_improved',
], 'kubejs:grist_energetic_improved_block',
20000
);
event.recipes.powah.energizing([
'#forge:glass',
'thermal:phytogrow',
'thermal:phytogro',
'#forge:dusts/redstone',
'thermal:rf_coil',
global.nuggetItem('steel'),
@@ -84,7 +82,7 @@ ServerEvents.recipes(event => {
'kubejs:activated_grist_capacitor',
'kubejs:infused_grist_capacitor',
3000,
[]
['kubejs:intelligent_catalyst', 'kubejs:intelligent_catalyst', 'kubejs:intelligent_catalyst']
);
event.recipes.thermal.bottler(
Item.of('kubejs:unstable_grist_capacitor'),
@@ -97,7 +95,7 @@ ServerEvents.recipes(event => {
'kubejs:unstable_grist_capacitor',
'kubejs:unstable_grist_capacitor',
'kubejs:unstable_grist_capacitor',
], 'kubejs:grist_energetic_improved',
], '3x kubejs:grist_energetic_improved_block',
50000
);

View File

@@ -32,7 +32,7 @@ ServerEvents.recipes(event => {
quanta: 25,
arcana: -1
},
result: Item.of('kubejs:grist_intelligent_basic_block', 2).toJson()
result: Item.of('kubejs:grist_intelligent_basic_block', 3).toJson()
});
event.shaped('kubejs:sacred_flesh', [
@@ -69,6 +69,7 @@ ServerEvents.recipes(event => {
'#alltheores:ore_hammers'
]);
// After you have finished your first grist, you simply duplicate it with a bunch of Source
event.recipes.ars_nouveau.imbuement(
'kubejs:grist_primordeal_basic_block',
'kubejs:grist_intelligent_basic_block',
@@ -76,6 +77,14 @@ ServerEvents.recipes(event => {
['kubejs:grist_intelligent_basic']
);
// Adding a catalyst makes it run more efficiently
event.recipes.ars_nouveau.imbuement(
'kubejs:grist_primordeal_basic_block',
'2x kubejs:grist_intelligent_basic_block',
700,
['kubejs:grist_intelligent_basic', 'kubejs:intelligent_catalyst']
);
/*event.custom({
type: "thermal:press",
ingredients: [
@@ -102,8 +111,8 @@ ServerEvents.recipes(event => {
catalysts come from source gems crystalized with basic intelligent fluid and sacred flesh
*/
event.recipes.summoningrituals.altar("kubejs:grist_primordeal_improved")
.itemOutput(Item.of('kubejs:grist_intelligent_improved_block'))
.input(Item.of('kubejs:grist_primordeal_improved_block', 2))
.itemOutput(Item.of('kubejs:grist_intelligent_improved_block', 3))
.input(Item.of('kubejs:grist_primordeal_improved_block', 1))
.input(Item.of('kubejs:grist_intelligent_improved', 1))
.blockBelow('ars_nouveau:arcane_core');

View File

@@ -43,9 +43,12 @@ ServerEvents.recipes(event => {
let id = grist.id();
let fluidID = grist.fluid().id();
let blockID = grist.block().id();
event.recipes.thermal.crucible(Fluid.of(fluidID, 1000), blockID);
event.recipes.thermal.crucible(Fluid.of(fluidID, 250), id);
event.recipes.thermal.chiller(id, Fluid.of(fluidID, 250));
event.recipes.thermal.chiller(blockID, Fluid.of(fluidID, 1000));
event.recipes.createMixing(Fluid.of(fluidID, 250), id).heated();
event.recipes.createMixing(Fluid.of(fluidID, 1000), blockID).heated();
// convert between block and normal item
event.shapeless(blockID, [`9x ${id}`]);
@@ -78,6 +81,7 @@ ServerEvents.recipes(event => {
// Progression along primordeals and universals
let _ = [{from: 'basic', to: 'improved'}, {from: 'improved', to: 'radiant'}].forEach(upgrade => {
// TODO: Implement sideways conversion from universal grist to each of the elementals
// Primordeal progression requires one from each element of the lower tier
event.shaped(`kubejs:grist_primordeal_${upgrade.to}`, [
'A B',

View File

@@ -1,40 +1,64 @@
// priority: 0
function Metal(name) {
this.name = name;
}
global.metalForm = (metal, tag, form, qty) => {
if (qty == undefined) {
qty = 1;
}
let itemType = AlmostUnified.getPreferredItemForTag(`forge:${tag}/${metal}`);
Metal.of = function(name) {
return new Metal(name);
}
Metal.prototype.formOf = function(form) {
let itemType = AlmostUnified.getPreferredItemForTag(`forge:${form}/${this.name}`);
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.warn(`metals: #forge:${form}/${this.name} is not supported by AlmostUnified! Trying a vanilla hack...`);
itemType = Ingredient.of(`#forge:${form}/${this.name}`).getFirst();
}
if (itemType.id == 'minecraft:air') {
console.warn(`metals: No metal items found in #forge:${form}/${this.name}`)
} else {
console.log(`metals: Found ${itemType.id} for #forge:${form}/${this.name}`);
}
console.log(`metals: forge:${tag}/${metal} found`);
return itemType;
}
global.dustItem = (material, qty) => {
return global.metalForm(material, 'dusts', 'dust', qty);
// Format is [property name, tag name]
const forms = [
['ingot', 'ingots'],
['gear', 'gears'],
['rod', 'rods'],
['nugget', 'nuggets'],
['plate', 'plates'],
['dust', 'dusts']
];
for (const [prop_name, form_tag] of forms) {
Metal.prototype[prop_name] = function() {
return this.formOf(form_tag);
}
}
global.ingotItem = (material, qty) => {
return global.metalForm(material, 'ingots', 'ingot', qty);
global.metalForm = (metal, tag) => {
return (new Metal(metal)).formOf(tag);
}
global.plateItem = (material, qty) => {
return global.metalForm(material, 'plates', 'plate', qty);
global.dustItem = (material) => {
return global.metalForm(material, 'dusts');
}
global.gearItem = (material, qty) => {
return global.metalForm(material, 'gears', 'gear', qty);
global.ingotItem = (material) => {
return global.metalForm(material, 'ingots');
}
global.nuggetItem = (material, qty) => {
return global.metalForm(material, 'nuggets', 'nugget', qty);
global.plateItem = (material) => {
return global.metalForm(material, 'plates');
}
global.gearItem = (material) => {
return global.metalForm(material, 'gears');
}
global.nuggetItem = (material) => {
return global.metalForm(material, 'nuggets');
}
global.replaceInputs = (evt, filter, replaceMap) => {

View File

@@ -137,4 +137,95 @@ ServerEvents.recipes(event => {
'minecraft:netherite_ingot',
'#kubejs:grist/intelligent/radiant'
);
// Nerf the storage components a little bit
event.replaceInput(
{output: 'ae2:cell_component_1k'},
'minecraft:redstone',
'#kubejs:grist/intelligent/basic'
);
event.replaceInput(
{output: 'ae2:cell_component_4k'},
'minecraft:redstone',
'#kubejs:grist/intelligent/basic'
);
event.replaceInput(
{output: 'ae2:cell_component_16k'},
'minecraft:glowstone',
'#kubejs:grist/intelligent/basic/block'
);
event.replaceInput(
{output: 'ae2:cell_component_64k'},
'minecraft:glowstone',
'#kubejs:grist/intelligent/improved'
);
event.replaceInput(
{output: 'ae2:cell_component_256k'},
'ae2:quartz_glass',
'#kubejs:grist/intelligent/improved/block'
);
// Spatial IO is gated behind radiant build grist
event.replaceInput(
{output: 'ae2:spatial_cell_component_2'},
'minecraft:glowstone_dust',
'#kubejs:grist/build/radiant'
);
event.replaceInput(
{output: 'ae2:spatial_cell_component_16'},
'minecraft:glowstone_dust',
'#kubejs:grist/build/radiant'
);
event.replaceInput(
{output: 'ae2:spatial_cell_component_128'},
'minecraft:glowstone_dust',
'#kubejs:grist/build/radiant'
);
// Item cells should require build grist
event.replaceInput(
{output: 'ae2:item_cell_housing'},
'minecraft:redstone',
'#kubejs:grist/build/basic'
);
event.replaceInput(
{output: 'ae2:item_cell_housing'},
'minecraft:iron_ingot',
'#forge:plates/invar'
);
event.replaceInput(
{output: 'ae2:basic_card'},
'minecraft:iron_ingot',
'#forge:plates/silver'
);
event.replaceInput(
{output: 'ae2:basic_card'},
'minecraft:gold_ingot',
'#forge:plates/gold'
);
event.replaceInput(
{output: 'ae2:basic_card'},
'minecraft:redstone',
'#kubejs:grist/intelligent/basic'
);
// Advanced card is an upgrade from the basic card
event.replaceInput(
{output: 'ae2:advanced_card'},
'minecraft:redstone',
'ae2:basic_card'
);
event.replaceInput(
{output: 'ae2:advanced_card'},
'minecraft:iron_ingot',
'#forge:plates/invar'
);
event.replaceInput(
{output: 'ae2:advanced_card'},
'minecraft:diamond',
'#kubejs:grist/intelligent/basic/block'
);
});

View File

@@ -77,6 +77,8 @@ ServerEvents.recipes(event => {
// 1 nugget == 60mb cognitium
event.recipes.createMixing(Fluid.of('experienceobelisk:cognitium', 60), 'create:experience_nugget').heated();
event.recipes.createMixing(Fluid.of('experienceobelisk:cognitium', 60 * 9), 'create:experience_block').heated();
event.recipes.thermal.centrifuge([Fluid.of('experienceobelisk:cognitum', 60)], 'create:experience_nugget');
event.recipes.thermal.centrifuge([Fluid.of('experienceobelisk:cognitum', 60 * 9)], 'create:experience_block');
// Precision mechanisms should require intelligent grist
event.recipes.createSequencedAssembly([
@@ -103,4 +105,21 @@ ServerEvents.recipes(event => {
'B': 'create:item_vault',
'C': '#kubejs:grist/intelligent/basic',
});
// Gate the symmetry wand behind build grist
event.replaceInput({output: 'create:wand_of_symmetry'},
'#forge:ender_pearls',
'#kubejs:grist/build/improved'
);
['red', 'orange', 'yellow', 'green', 'blue', 'purple', 'magenta', 'white', 'black', 'light_gray', 'gray', 'brown', 'cyan', 'pink', 'lime'].forEach(color => {
// Create colored blocks from the mixer.
// TODO: This is required due to disabling all automatic crafting recipes, maybe these can just be re-enabled somehow?
event.recipes.create.mixing(`8x minecraft:${color}_concrete_powder`, [`minecraft:${color}_dye`, '4x #forge:sand', '4x minecraft:gravel']);
event.recipes.create.mixing(`8x minecraft:${color}_concrete`, [`minecraft:${color}_dye`, '4x #forge:sand', '4x minecraft:gravel', Fluid.of('minecraft:water', 250 * 8)]);
event.recipes.create.mixing(`8x minecraft:${color}_terracotta`, [`minecraft:${color}_dye`, '8x minecraft:terracotta']);
event.recipes.create.mixing(`minecraft:${color}_concrete`, [`minecraft:${color}_concrete_powder`, Fluid.of('minecraft:water', 250)]);
event.recipes.create.mixing(`minecraft:${color}_wool`, [`minecraft:${color}_dye`, '#minecraft:wool']);
event.recipes.create.mixing(`minecraft:${color}_stained_glass`, [`minecraft:${color}_dye`, '8x #forge:glass/colorless']).heated();
});
});

View File

@@ -1,34 +0,0 @@
ServerEvents.recipes(event => {
event.remove({output: 'create_enchantment_industry:disenchanter'});
event.remove({output: 'create_enchantment_industry:printer'});
event.recipes.ars_nouveau.enchanting_apparatus(
[
'create:item_drain',
'#kubejs:grist/intelligent/improved'
],
'create_enchantment_industry:disenchanter'
);
event.recipes.ars_nouveau.enchanting_apparatus(
[
'#kubejs:grist/intelligent/improved',
'#kubejs:grist/build/improved'
],
'create:item_drain',
'create_enchantment_industry:disenchanter',
2000
);
event.recipes.ars_nouveau.enchanting_apparatus(
[
'#kubejs:grist/intelligent/improved',
'#kubejs:grist/build/improved',
'minecraft:book',
'minecraft:book'
],
'create:spout',
'create_enchantment_industry:printer',
2000
);
});

View File

@@ -33,4 +33,22 @@ ServerEvents.recipes(event => {
'#forge:tomato_sauces'
);
});
// There is a recipe that uses the skillet, but very different ingredients
event.remove({id: 'croptopia:cheeseburger'});
// Allow the apple pie to be automated in create, and use other eggs
event.replaceInput({output: 'croptopia:apple_pie'},
'minecraft:egg',
'#forge:eggs'
);
event.recipes.create.mixing(
'croptopia:apple_pie', [
'minecraft:apple',
'minecraft:sugar',
'#forge:eggs',
'#forge:flour',
'#forge:dough'
]
).heated();
});

View File

@@ -0,0 +1,15 @@
ServerEvents.recipes(event => {
event.replaceInput({mod: 'energymeter'},
'minecraft:comparator',
'#kubejs:grist/energetic/basic'
);
event.replaceInput({mod: 'energymeter'},
'minecraft:redstone',
'#kubejs:grist/intelligent/basic'
);
event.replaceInput({mod: 'energymeter'},
'minecraft:iron_ingot',
global.ingotItem('copper')
);
});

View File

@@ -51,6 +51,10 @@ ServerEvents.recipes(event => {
['minecraft:diamond_pickaxe', '#kubejs:grist/build/radiant']
]);
// Remove some basic generators where thermal dynamos are way better
event.remove({output: 'industrialforegoing:biofuel_generator'});
event.remove({output: 'industrialforegoing:pitiful_generator'});
let v = [['common', 'pity'], ['pity', 'simple'], ['simple', 'advanced'], ['advanced','supreme']].forEach(tierPair => {
event.replaceInput(
{id: `industrialforegoing:${tierPair[1]}_black_hole_unit`},

View File

@@ -10,7 +10,7 @@ ServerEvents.recipes(event => {
'A': 'powah:dielectric_paste',
'B': '#chipped:iron_bars',
'C': '#kubejs:grist/intelligent/improved'
})
});
// Dielectric casings are used in nearly every powah recipe, so lets require energetic grist
event.shaped('powah:dielectric_casing', [
@@ -39,8 +39,42 @@ ServerEvents.recipes(event => {
'thermal:rf_coil'
]);
event.recipes.powah.energizing(['minecraft:diamond', '#kubejs:grist/energetic/improved'], 'powah:crystal_niotic', 180000);
event.recipes.powah.energizing(['minecraft:emerald', '2x #kubejs:grist/energetic/improved'], 'powah:crystal_spirited', 1000000);
event.replaceInput({output: 'powah:thermoelectric_plate'},
'minecraft:blaze_powder',
'#kubejs:grist/energetic/basic'
);
event.replaceInput({output: 'powah:thermoelectric_plate'},
'minecraft:redstone',
'#kubejs:grist/build/basic'
);
event.replaceInput({mod: 'powah'},
'minecraft:quartz',
Ingredient.of('minecraft:quartz').or('ae2:certus_quartz_crystal')
);
event.replaceInput({mod: 'powah'},
'minecraft:quartz_block',
Ingredient.of('minecraft:quartz_block').or('ae2:quartz_block')
);
// Nitro and spirited require radiant grist
event.remove({output: 'powah:crystal_nitro'});
event.recipes.powah.energizing(['3x #kubejs:grist/energetic/radiant/block'], '2x powah:crystal_nitro', 20000000);
event.remove({output: 'powah:crystal_spirited'});
event.recipes.powah.energizing(['powah:crystal_niotic', '2x #kubejs:grist/energetic/radiant'], '2x powah:crystal_spirited', 1000000);
// Niotic and blazing are at the improved tier
event.remove({output: 'powah:crystal_niotic'});
event.recipes.powah.energizing(['3x #kubejs:grist/energetic/improved/block'], '2x powah:crystal_niotic', 180000);
event.remove({output: 'powah:crystal_blazing'});
event.recipes.powah.energizing(['3x #kubejs:grist/energetic/improved'], '2x powah:crystal_blazing', 90000);
// Energized steel (aka hardened tier) require basic grist
event.remove({output: 'powah:steel_energized'});
event.recipes.powah.energizing(['minecraft:iron_ingot', 'minecraft:gold_ingot', '3x #kubejs:grist/energetic/basic'], '2x powah:steel_energized', 10000);
// Dielectric paste can be crafted with basic grist, and scaled up through machines
event.shapeless('6x powah:dielectric_paste', [
'kubejs:grist_primordeal_basic',
'kubejs:grist_energetic_basic',
@@ -48,4 +82,15 @@ ServerEvents.recipes(event => {
'minecraft:clay_ball',
'#alltheores:ore_hammers'
]);
event.recipes.thermal.smelter('24x powah:dielectric_paste', [
'kubejs:grist_energetic_basic',
'minecraft:clay_ball',
'minecraft:redstone'
]);
event.recipes.create.mixing('12x powah:dielectric_paste', [
'kubejs:grist_energetic_basic',
'minecraft:clay_ball',
'minecraft:redstone'
]).heated();
// TODO: create a crystalizer recipe with destabilized redstone? liquid grist?
});

View File

@@ -91,4 +91,10 @@ ServerEvents.recipes(event => {
'minecraft:redstone_block',
'#kubejs:grist/intelligent/improved'
);
event.replaceInput(
{mod: 'prettypipes'},
'minecraft:sugar',
'#kubejs:grist/energetic/basic'
);
})

View File

@@ -1,5 +1,9 @@
ServerEvents.recipes(event => {
// Completely remove the thermal cheese wheel, it gets confusing
event.remove({output: 'thermal:cheese_wheel'});
event.remove({input: 'thermal:cheese_wheel'});
// Sawdust for energy, of course.
event.recipes.thermal.stirling_fuel('thermal:sawdust').energy(500)
@@ -137,12 +141,21 @@ ServerEvents.recipes(event => {
event.remove({input: 'thermal:earth_charge'});
// Pulverizer is gated behind brass, which requires create
/*event.replaceInput(
{id: 'thermal:machine_pulverizer'},
'#forge:gears/brass',
'#kubejs:grist/agricultural/basic'
);*/
event.recipes.create.mixing('16x thermal:phytogro', [
'#forge:sand',
'2x thermal:apatite_dust',
'thermal:niter_dust'
]);
// Centrifuge comes already gated behind constantan
// thermal processing line for creating biofuel
// 1000mb of biofuel should then produce 1000mb of refined fuel after another step of processing, which seems balanced
event.recipes.thermal.refinery(
[Fluid.of('thermal:light_oil', 75), Fluid.of('thermal:heavy_oil', 25)],
Fluid.of('industrialforegoing:biofuel', 100)
);
// Make industrial foregoing biofuel work in compression dynamo
// 1 bucket refined fuel = 1.5M RF
// 1 bucket biofuel = 640k RF
event.recipes.thermal.compression_fuel('industrialforegoing:biofuel').energy(640000);
});

View File

@@ -11,6 +11,15 @@ ServerEvents.recipes(event => {
'minecraft:gold_ingot',
'#kubejs:grist/build/basic'
);
event.replaceInput({mod: 'torchmaster'},
'#minecraft:logs',
'#kubejs:grist/agricultural/basic/block'
);
event.replaceInput({mod: 'torchmaster'},
'minecraft:gold_block',
'#kubejs:grist/build/basic/block'
);
event.replaceInput({mod: 'torchmaster'},
'minecraft:glowstone',

View File

@@ -13,4 +13,24 @@ ServerEvents.recipes(event => {
let _nv = ['crimson', 'warped'].forEach(variety => {
makeJuice(`${variety}_grapejuice`, `${variety}_grape`, `${variety}_grape_seeds`);
});
event.replaceInput({output: 'candlelight:tomato_soup'},
'#forge:tomatoes',
'#forge:tomato_sauces'
);
event.recipes.create.mixing('candlelight:tomato_soup', [
'#forge:tomato_sauces',
'minecraft:sugar',
'#candellight:all_effects'
]).heated();
event.recipes.create.mixing('candlelight:tomato_soup', [
Fluid.of('create_central_kitchen:tomato_sauce', 250),
'minecraft:sugar',
'#candlelight:all_effects'
]).heated();
event.recipes.create.mixing('candlelight:bolognese', [
'#candlelight:red_effect',
'#forge:cooked_beef',
'candlelight:tomato_soup'
]).heated();
});

View File

@@ -13,20 +13,54 @@ ServerEvents.recipes(event => {
// 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}`);
let rawForms = (metal) => {
let ret = null;
AlmostUnified.getItemIds(`forge:raw_materials/${metal}`).forEach(id => {
if (ret == null) {
ret = Ingredient.of(id);
} else {
ret = ret.or(id);
}
return ret;
}
console.log(`metals: forge:${tag}/${metal} found`);
return itemType;
});
return ret;
}
let metalForm = global.metalForm;
let alloyIngredients = (forms, ingredients) => {
let real_ingredients = [];
for (const ingredient of ingredients.slice(1)) {
let real_item = Item.of(ingredient);
if (real_item.id == 'minecraft:air') {
let real_ingredient = null;
for (const form of forms) {
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 alloy ${form} ingredient: ${ingredient}`);
} else {
if (real_ingredient == null) {
real_ingredient = Ingredient.of(real_item);
} else {
real_ingredient = real_ingredient.or(real_item);
}
//real_ingredients.push(real_item);
}
}
//console.error(`Ingredients: ${real_ingredients}`);
//real_ingredients.push(Ingredient.apply(null, real_ingredients));
real_ingredients.push(real_ingredient);
} else {
real_ingredients.push(real_item);
}
}
return real_ingredients;
};
// 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
@@ -93,12 +127,10 @@ ServerEvents.recipes(event => {
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'],
@@ -108,6 +140,7 @@ ServerEvents.recipes(event => {
},
// 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: {
silver: [],
nickel: [],
invar: [3, '2x iron', 'nickel'],
electrum: [2, 'gold', 'silver'],
@@ -123,14 +156,14 @@ ServerEvents.recipes(event => {
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']
gemium: [4, '4x #forge:dusts/obsidian', '2x #forge:dusts/diamond', '2x #forge:dusts/emerald', 'powder_power:powder_prismarine']
},
// 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 gobber2:gobber2_ingot'],
quadrilium: [3, '3x trilium', '4x minecraft:netherite_scrap', 'powder_power:powder_ghast_tear']
quadrilium: [3, '3x trilium', '4x minecraft:netherite_scrap', 'powder_power:powder_ghast_tear'],
trilium: [4, '2x lapium', '2x gemium', '2x redium', 'powder_power:powder_end_pearl']
},
// Age of Legends: The end game
legends: {
@@ -140,9 +173,12 @@ ServerEvents.recipes(event => {
};
// Basic rules for all materials
for (const [key, metals] of Object.entries(progression)) {
for (const [tier, metals] of Object.entries(progression)) {
for (const [metal, ingredients] of Object.entries(metals)) {
console.log(`Running ore processing for ${metal}...`);
let rawType = metalForm(metal, 'raw_materials', 'ore');
let rawIngredients = rawForms(metal);
let crushedType = Item.of(`create:crushed_raw_${metal}`);
let dustType = metalForm(metal, 'dusts', 'dust');
@@ -155,8 +191,6 @@ ServerEvents.recipes(event => {
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});
@@ -168,97 +202,118 @@ ServerEvents.recipes(event => {
event.remove({output: nuggetType});
event.remove({output: crushedType});
event.remove({input: crushedType});
console.warn(`Removing ${metal} ingot recipes for ${ingotType.id}`);
// All dusts and crushed ores can be smelted to ingots, and dusts can be created from crushing ingots
let ingotSources = [];
// All forms can be crushed back into dust
if (dustType.id != 'minecraft:air') {
event.smelting(ingotType, dustType);
event.shapeless(dustType, [ingotType, '#alltheores:ore_hammers']);
event.recipes.create.crushing(dustType, ingotType);
event.recipes.create.milling(dustType, ingotType);
let dustSource = null;
[gearType, rodType, plateType, ingotType].forEach(form => {
if (form.id != 'minecraft:air') {
if (dustSource == null) {
dustSource = Ingredient.of(form);
} else {
dustSource = dustSource.or(form);
}
}
});
event.shapeless(dustType, [dustSource, '#alltheores:ore_hammers']);
event.recipes.create.crushing(dustType, dustSource);
event.recipes.create.milling(dustType, dustSource);
event.recipes.thermal.pulverizer(dustType, dustSource);
}
// Plates can always be smelted back into their original ingot, and crushed back into dust
// All forms, including crushed ores, can be smelted back into an ingot
if (ingotType.id != 'minecraft:air') {
let ingotSource = null;
[gearType, rodType, plateType, dustType, crushedType].forEach(form => {
if (form.id != 'minecraft:air') {
if (ingotSource == null) {
ingotSource = Ingredient.of(form);
} else {
ingotSource = ingotSource.or(form);
}
}
});
if (ingotSource != null) {
event.smelting(ingotType, ingotSource);
} else {
console.warn(`Unable to generate ${metal} ingot smelting from derivatives`);
}
}
// Gears and ingots can be pressed into a plate
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]);
event.recipes.create.crushing(dustType, plateType);
event.recipes.create.milling(dustType, plateType);
event.recipes.thermal.pulverizer(dustType, plateType);
}
// Gears can also be crushed back into dust
if (gearType.id != 'minecraft:air') {
event.recipes.create.crushing(dustType, gearType);
event.recipes.create.milling(dustType, gearType);
event.recipes.thermal.pulverizer(dustType, gearType);
}
// Same for rods
if (rodType.id != 'minecraft:air') {
event.recipes.create.crushing(dustType, rodType);
event.recipes.create.milling(dustType, rodType);
event.recipes.thermal.pulverizer(dustType, rodType);
let plateSource = null;
[gearType, ingotType].forEach(form => {
if (form.id != 'minecraft:air') {
if (plateSource == null) {
plateSource = Ingredient.of(form);
} else {
plateSource = plateSource.or(form);
}
}
})
event.recipes.thermal.press(plateType, plateSource);
event.recipes.create.pressing(plateType, plateSource);
}
// 4 ingots = 1 gear in the press
if (gearType.id != 'minecraft:air') {
event.recipes.thermal.press(gearType, [ingotType.withCount(4), 'thermal:press_gear_die']);
// TODO: would be fun to have a special 'high efficiency' gear press?
event.recipes.thermal.press(gearType.withCount(2), [ingotType.withCount(4), 'thermal:press_gear_die']).id(`kubejs:${metal}_gear_in_thermal_press`);
}
// 9 Nuggets == 1 ingot, for every material
if (nuggetType.id != 'minecraft:air') {
event.shapeless(ingotType, [nuggetType.withCount(9)]);
event.shapeless(nuggetType.withCount(9), [ingotType]);
event.shapeless(ingotType, [nuggetType.withCount(9)]).id(`kubejs:${metal}_ingot_from_nuggets`);
event.shapeless(nuggetType.withCount(9), [ingotType]).id(`kubejs:${metal}_nuggets_from_ingot`);
event.recipes.thermal.press(ingotType, [nuggetType.withCount(9), 'thermal:press_packing_3x3_die']).id(`kubejs:${metal}_ingot_from_nuggets_in_thermal_press`);
event.recipes.thermal.press(nuggetType.withCount(9), [ingotType, 'thermal:press_unpacking_die']).id(`kubejs:${metal}_nuggets_from_ingot_in_thermal_press`);
}
// 9 ore = 1 ore block
if (rawType.id != 'minecraft:air') {
event.shapeless(rawBlockType, [rawType.withCount(9)]);
event.shapeless(rawType.withCount(9), [rawBlockType]);
if (rawIngredients != null) {
event.shapeless(rawBlockType, [rawIngredients.withCount(9)]).id(`kubejs:${metal}_ore_block_from_ore`);
event.shapeless(rawType.withCount(9), [rawBlockType]).id(`kubejs:${metal}_ore_from_ore_block`);
event.recipes.thermal.press(rawBlockType, [rawIngredients.withCount(9), 'thermal:press_packing_3x3_die']).id(`kubejs:${metal}_ore_block_from_ore_in_thermal_press`);
event.recipes.thermal.press(rawType.withCount(9), [rawBlockType, 'thermal:press_unpacking_die']).id(`kubejs:${metal}_ore_from_ore_block_in_thermal_press`);
}
// 9 ingots = 1 block
if (blockType.id != 'minecraft:air') {
event.shapeless(blockType, [ingotType.withCount(9)]);
event.shapeless(ingotType.withCount(9), [blockType]);
event.shapeless(blockType, [ingotType.withCount(9)]).id(`kubejs:${metal}_block_from_ingots`);
event.shapeless(ingotType.withCount(9), [blockType]).id(`kubejs:${metal}_ingots_from_block`);
event.recipes.thermal.press(blockType, [ingotType.withCount(9), 'thermal:press_packing_3x3_die']).id(`kubejs:${metal}_block_from_ingots_in_thermal_press`);
event.recipes.thermal.press(ingotType.withCount(9), [blockType, 'thermal:press_unpacking_die']).id(`kubejs:${metal}_ingots_from_block_in_thermal_press`);
}
if (rodType.id != 'minecraft:air') {
// All metals can waste one ingot to create a rod in the crafting table
event.shapeless(rodType, [ingotType.withCount(2), '#alltheores:ore_hammers']);
// Or create two rods from one ingot in the create cutter
event.recipes.create.cutting(rodType.withCount(2), ingotType);
// Or create four rods from the thermal sawmill
event.recipes.thermal.sawmill(rodType.withCount(4), ingotType);
// TODO: Isn't there also a thermal press we can use?
}
// All alloys can be created in the thermal smelter, or a superheated create 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]);
}
}
let real_ingredients = alloyIngredients(['ingots', 'dusts'], ingredients);
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) {
console.error(`Unable to create ingots from ${form} for ${metal}!`);
if (real_ingredients.length == 0) {
console.error(`Unable to create ingots from ${form} for ${metal}!`);
} else {
// If we have 3 or fewer ingredients, we can create it in the 3-slot thermal smelter
if (real_ingredients.length <= 3) {
event.recipes.thermal.smelter(ingotType.withCount(ingredients[0]), real_ingredients).id(`kubejs:metals/smelting/${metal}`);
} else {
// If we have 3 or fewer ingredients, we can create it in the 3-slot thermal smelter
if (real_ingredients.length <= 3) {
event.recipes.thermal.smelter(ingotType.withCount(ingredients[0]), real_ingredients);
event.recipes.create.mixing(ingotType.withCount(ingredients[0]), real_ingredients).heated();
} else {
// Materials with 4 or more require superheating, and can only be made in the mixer
event.recipes.create.mixing(ingotType.withCount(ingredients[0]), real_ingredients).superheated();
}
// Materials with 4 or more require superheating to be made in the mixer
event.recipes.create.mixing(ingotType.withCount(ingredients[0]), real_ingredients).superheated().id(`kubejs:metals/superheated_mixing/${metal}`);
}
}
}
// TODO: Create saw, 3x3 packing/unpacking dies, mechanical press
}
}
@@ -285,7 +340,7 @@ ServerEvents.recipes(event => {
// 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 rawIngredients = rawForms(metal);
let dustType = metalForm(metal, 'dusts', 'dust');
let ingotType = metalForm(metal, 'ingots', 'ingot');
let rawBlockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
@@ -293,51 +348,32 @@ ServerEvents.recipes(event => {
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']);
if (rawIngredients != null) {
event.shapeless(dustType, [rawIngredients, '#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], [rawIngredients, '#alltheores:ore_hammers']).keepHeldItem();
event.recipes.create.deploying([dustType.withCount(9)], [rawBlockType, '#alltheores:ore_hammers']).keepHeldItem();
} else {
console.warn(`No ${metal} ore hammer smashing available!`);
console.log(`No ${metal} ore hammer smashing available due to missing raw form!`);
}
// 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]);
}
}
let real_ingredients = alloyIngredients(['ingots', 'dusts'], ingredients);
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 && ingotType.id != 'minecraft:air') {
event.shapeless(ingotType.withCount(ingredients[0]), real_ingredients);
}
if (real_ingredients.length > 0 && ingotType.id != 'minecraft:air') {
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']);
//event.shapeless('create:andesite_alloy', [global.dustItem('tin'), '2x minecraft:andesite']);
let xpNugget = Item.of('create:experience_nugget');
// 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 rawIngredients = rawForms(metal);
let crushedType = Item.of(`create:crushed_raw_${metal}`);
let dustType = metalForm(metal, 'dusts', 'dust');
let ingotType = metalForm(metal, 'ingots', 'ingot');
@@ -347,11 +383,11 @@ ServerEvents.recipes(event => {
console.log(`Building andesite processing for ${metal}...`);
if (rawType.id != 'minecraft:air') {
if (rawIngredients != null) {
if (crushedType.id != 'minecraft:air') {
event.recipes.create.crushing([crushedType.withCount(2), xpNugget.withCount(2).withChance(0.75)], rawType);
event.recipes.create.crushing([crushedType.withCount(2), xpNugget.withCount(2).withChance(0.75)], rawIngredients);
event.recipes.create.crushing([crushedType.withCount(18), xpNugget.withCount(18).withChance(0.75)], rawBlockType);
event.recipes.create.milling([crushedType.withCount(2)], rawType);
event.recipes.create.milling([crushedType.withCount(2)], rawIngredients);
event.recipes.create.milling([crushedType.withCount(18)], rawBlockType);
event.smelting(ingotType, crushedType);
@@ -384,29 +420,10 @@ ServerEvents.recipes(event => {
console.warn(`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();
}
// These ones can simply have their dusts mixed in a cold mixer to create the "alloy" ingot, which for the andesite tier is only andesite alloy.
let real_ingredients = alloyIngredients(['dusts'], ingredients);
if (real_ingredients.length > 0) {
event.recipes.create.mixing(ingotType.withCount(ingredients[0]), real_ingredients).id(`kubejs:metals/cold_mixing/${metal}`);
}
}
}
@@ -420,45 +437,17 @@ ServerEvents.recipes(event => {
// 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();
}
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.warn(`No ${metal} ore pulverizing available! Falling back to dust-based processing line`);
}
}
}
@@ -467,278 +456,67 @@ ServerEvents.recipes(event => {
// 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 rawIngredients = rawForms(metal);
let crushedType = Item.of(`create:crushed_raw_${metal}`);
let ingotType = metalForm(metal, 'ingots', 'ingot');
let dustType = metalForm(metal, 'dusts', 'dust');
let rawBlockType = metalForm(`raw_${metal}`, 'storage_blocks', 'block');
if (rawType.id != 'minecraft:air') {
if (rawIngredients != null) {
if (crushedType.id != 'minecraft:air') {
event.recipes.thermal.pulverizer([crushedType.withCount(4), crushedType.withChance(0.25), xpNugget.withCount(4).withChance(0.75)], rawType);
event.recipes.thermal.pulverizer([crushedType.withCount(4), crushedType.withChance(0.25), xpNugget.withCount(4).withChance(0.75)], rawIngredients);
event.recipes.thermal.pulverizer([crushedType.withCount(4 * 9), crushedType.withChance(0.25), xpNugget.withCount(4 * 9).withChance(0.75)], rawBlockType);
event.recipes.thermal.centrifuge([dustType.withCount(4), dustType.withChance(0.25)], crushedType);
} else {
console.error(`No ${metal} ore centrifuing available!`);
}
}
// Industrial and below can be mixed up in a regular heated mixer
let real_ingredients = alloyIngredients(['ingots', 'dusts'], ingredients);
if (real_ingredients.length > 0) {
event.recipes.create.mixing(ingotType.withCount(ingredients[0]), real_ingredients).heated().id(`kubejs:metals/hot_mixing/${metal}`);
}
}
}
// Generate clay from centrifuing ash or gravel
event.recipes.thermal.centrifuge([
Item.of('minecraft:clay_ball').withChance(1.05),
Item.of('minecraft:clay_ball').withChance(0.25)],
'supplementaries:ash_brick'
);
event.recipes.thermal.centrifuge([
Item.of('minecraft:clay_ball').withChance(1.75),
Item.of('minecraft:clay_ball').withChance(0.85)],
'minecraft:gravel'
);
// Let quartz dust be created in the crafting table with a hammer
event.shapeless('thermal:quartz_dust',
['minecraft:quartz', '#alltheores:ore_hammers']
).id('kubejs:quartz_dust_crushing');
// Fix up the diamond gear recipe, which somehow has two duplicates
event.remove({output: 'thermal:diamond_gear'});
event.shaped('thermal:diamond_gear', [
' A ',
'ABA',
' A '
], {
'A': 'minecraft:diamond',
'B': '#kubejs:grist/build/basic'
});
//event.recipes.create.crushing(dustType, dustSource);
event.recipes.create.milling('create:powdered_obsidian', 'minecraft:obsidian');
});
function foobar() {
function shpaes() {
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 ',

View File

@@ -67,6 +67,7 @@ RarityJSEvents.register(event => {
event.setRarity('create:windmill_bearing', 'kubejs:energetic_grist');
event.setRarity('immersive_aircraft:boiler', 'kubejs:energetic_grist');
event.setRarity('iron_furnaces:augment_factory', 'kubejs:energetic_grist');
// "$INST_JAVA" -jar packwiz-installer-bootstrap.jar https://gitea.malloc.hackerbots.net/tdfischer/malloc-s4/raw/branch/main/pack.toml
event.setRarityByMod('thermal', 'kubejs:build_grist');
event.setRarityByMod('ironfurnaces', 'kubejs:build_grist');

13
mods/butchery.pw.toml Normal file
View File

@@ -0,0 +1,13 @@
name = "Butchery"
filename = "butcher-3.6.1-forge-1.20.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/6YfOmC9t/versions/YLBZX0fF/butcher-3.6.1-forge-1.20.1.jar"
hash-format = "sha512"
hash = "077a471b620f9dff6e23e53b404a8aede98634c80ffd0f12cc48ed8f475a0f202334ac7a097408560e45fe1fe5bbe6409667ac6498ac0c64a37d5f5508f044f0"
[update]
[update.modrinth]
mod-id = "6YfOmC9t"
version = "YLBZX0fF"

View File

@@ -1,13 +0,0 @@
name = "Canary"
filename = "canary-mc1.20.1-0.3.3.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/qa2H4BS9/versions/lauzXB0n/canary-mc1.20.1-0.3.3.jar"
hash-format = "sha512"
hash = "38f0bec7967f9d354e46dacdbe7d284ef823270dc737a7388adde157c45a025e53d77e04a00a582900666b85402c461bee4b80345fc7f03edb5c2b96708442bd"
[update]
[update.modrinth]
mod-id = "qa2H4BS9"
version = "lauzXB0n"

View File

@@ -1,13 +1,13 @@
name = "Create: Copycats+"
filename = "copycats-3.0.0+mc.1.20.1-forge.jar"
filename = "copycats-3.0.2+mc.1.20.1-forge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/UT2M39wf/versions/u3FzFq67/copycats-3.0.0%2Bmc.1.20.1-forge.jar"
url = "https://cdn.modrinth.com/data/UT2M39wf/versions/ibcPwZZT/copycats-3.0.2%2Bmc.1.20.1-forge.jar"
hash-format = "sha512"
hash = "fbe3273c7288e52ed0d506509ae2113197580270ae229c60910c6d197d99317ab0f3273fffd4dd47816996142f7ad3b36085bd0f6adbe1c0a0bd688db0d1017e"
hash = "29b1912155e4e6f0c08355d475c8f89923912c5bdf1f7b75da760d743e733af78b3dfc82e5a5a56d5ef0bbaff6e51c25eb98558187c330e8c20259016a0fee2f"
[update]
[update.modrinth]
mod-id = "UT2M39wf"
version = "u3FzFq67"
version = "ibcPwZZT"

13
mods/energymeter.pw.toml Normal file
View File

@@ -0,0 +1,13 @@
name = "Energy Meter"
filename = "energymeter-forge-1.20.1-1.0.0.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/MbejSZ2E/versions/UyNuFWXF/energymeter-forge-1.20.1-1.0.0.jar"
hash-format = "sha512"
hash = "e599493c47e3f5ea24aae9cc1e67c335085c088ac6149e23eb2a3c2d25cc9f51dd015f9ef5e3b68c8b2971db5151aad99534d33bec8b70902ddca64db6e67ac7"
[update]
[update.modrinth]
mod-id = "MbejSZ2E"
version = "UyNuFWXF"

View File

@@ -1,13 +1,13 @@
name = "GeckoLib"
filename = "geckolib-forge-1.20.1-4.7.1.2.jar"
name = "Geckolib"
filename = "geckolib-forge-1.20.1-4.7.2.jar"
side = "both"
[download]
hash-format = "sha1"
hash = "c2b5d7ccf77f505996701ba477741d7e5cd034e1"
mode = "metadata:curseforge"
url = "https://cdn.modrinth.com/data/8BmcQJ2H/versions/AiVKLYep/geckolib-forge-1.20.1-4.7.2.jar"
hash-format = "sha512"
hash = "40aefbb89e4a65c1955bd05c13cb656c0902e545741770d9395037f6a87684e91676935e0d5b7be0419abd1599272fa3aa245dc3976208b82f568d994813e314"
[update]
[update.curseforge]
file-id = 6333474
project-id = 388172
[update.modrinth]
mod-id = "8BmcQJ2H"
version = "AiVKLYep"

View File

@@ -6,7 +6,7 @@ pack-format = "packwiz:1.1.0"
[index]
file = "index.toml"
hash-format = "sha256"
hash = "76bc955a0f122eb0152db7ae5072b850a7578e5498a595355d5969c379735dcd"
hash = "1dd880f1c10551b36cebddd84aa98bb16650128750b7b1cdcf9f454cf07b1290"
[versions]
forge = "47.4.0"