shMonifactory/kubejs/server_scripts/mods/Sophisticated_Storage.js
2025-09-14 21:22:24 +03:00

281 lines
10 KiB
JavaScript

/**
* Configuration of Sophisticated Storage
*/
ServerEvents.recipes(event => {
const modids = ["sophisticatedstorage", "sophisticatedbackpacks"]
// Remove default backpack recipe (Loot it!)
event.remove({ output: "sophisticatedbackpacks:backpack" })
// Remove XP pump upgrades
event.remove({ id: "sophisticatedstorage:xp_pump_upgrade" })
event.remove({ id: "sophisticatedbackpacks:xp_pump_upgrade" })
// Remove Limited barrels
event.remove({ id: /^sophisticatedstorage:.*limited.+barrel.+$/ })
event.remove({ output: /^sophisticatedstorage:limited_barrel.+$/ })
// Remove Copper tier storage (not used)
event.remove({ output: "sophisticatedstorage:copper_barrel" })
event.remove({ output: "sophisticatedstorage:copper_chest" })
event.remove({ output: "sophisticatedstorage:copper_shulker_box" })
// Remove Copper tier upgrades
event.remove({ output: /^sophisticatedstorage:.*copper.*tier_upgrade$/ })
event.remove({ input: /^sophisticatedstorage:.*copper.*tier_upgrade$/ })
// Remove iron (bronze) tier storage in NM
if (!doSteamAge) {
event.remove({ output: "sophisticatedstorage:iron_barrel" })
event.remove({ output: "sophisticatedstorage:iron_chest" })
event.remove({ output: "sophisticatedstorage:iron_shulker_box" })
event.remove({ output: /^sophisticatedstorage:.*iron.*tier_upgrade$/ })
event.remove({ input: /^sophisticatedstorage:.*iron.*tier_upgrade$/ })
}
// Standard backpack recipe if you don't want to loot it
event.shaped("sophisticatedbackpacks:backpack", [
" N ",
"ICI",
"N N"
], {
"N": "#forge:leather",
"I": "minecraft:iron_ingot",
"C": "#forge:chests/wooden"
})
// Backpack upgrading
const sophBackpacksMaterials = [
["", null, null],
["copper_", "bronze", "lead"],
["iron_", "steel", "invar"],
["gold_", "aluminium", "electrum"],
["diamond_", "stainless_steel", "signalum"],
["netherite_", "tungsten_steel", "enderium"]
]
sophBackpacksMaterials.forEach((material, index) => {
if (index == 0) return;
// Works for upgrades as the recipe type implies, but doesn't work for making new backpacks from scratch
let outputBackpack = `sophisticatedbackpacks:${material[0]}backpack`
let inputBackpack = `sophisticatedbackpacks:${sophBackpacksMaterials[index - 1][0]}backpack`
event.remove({ mod: "sophisticatedbackpacks", output: outputBackpack })
event.custom({
"type": "sophisticatedbackpacks:backpack_upgrade",
"conditions": [
{
"type": "sophisticatedcore:item_enabled",
"itemRegistryName": outputBackpack
}
],
"pattern": [
" N ",
"ICI",
"N N"
],
"key": {
"N": {
"tag": (`forge:nuggets/${material[1]}`)
},
"I": {
"tag": (`forge:ingots/${material[2]}`),
},
"C": {
"item": inputBackpack
}
},
"result": {
"item": outputBackpack
}
});
})
// Barrel, Chest, Shulker Box upgrading
const sophStorageMaterials = [
["", null, null],
["iron_", "bronze", "lead"],
["gold_", "steel", "tin"],
["diamond_", "aluminium", "copper"],
["netherite_", "stainless_steel", "gold"],
]
const sophStorageTypes = [
["", "barrel"],
["", "chest"],
["", "shulker_box"]
]
// Skip bronze tier storage in NM
if (!doSteamAge) {
sophStorageMaterials.splice(1, 1);
}
sophStorageMaterials.forEach((material, toIndex) => {
if (toIndex == 0) return;
// Tier upgrade items
for (let fromIndex = 0; fromIndex < toIndex; fromIndex++) {
let fromTierName = (fromIndex == 0 ? "basic_" : sophStorageMaterials[fromIndex][0]);
let prevTierName = (toIndex - 1 == 0 ? "basic_" : sophStorageMaterials[toIndex - 1][0]);
let toTierName = material[0];
event.shaped(`sophisticatedstorage:${fromTierName}to_${toTierName}tier_upgrade`, [
"IPI",
"ICI",
"IPI"
], {
I: `#forge:ingots/${material[1]}`,
P: `#forge:plates/${material[2]}`,
C: (fromTierName == prevTierName ? "minecraft:redstone_torch" : `sophisticatedstorage:${fromTierName}to_${prevTierName}tier_upgrade`)
}).id(`sophisticatedstorage:${fromTierName}to_${toTierName}tier_upgrade`)
}
// Barrel-in-table upgrades
sophStorageTypes.forEach(storageType => {
// Works for upgrades as the recipe type implies, but doesn't work for making new barrels/chests/boxes from scratch
let outputStorage = `sophisticatedstorage:${storageType[0]}${material[0]}${storageType[1]}`
let inputStorage = `sophisticatedstorage:${storageType[0]}${sophStorageMaterials[toIndex - 1][0]}${storageType[1]}`
event.remove({ mod: "sophisticatedstorage", output: outputStorage })
event.custom({
"type": "sophisticatedstorage:storage_tier_upgrade",
"conditions": [
{
"type": "sophisticatedcore:item_enabled",
"itemRegistryName": outputStorage
}
],
"pattern": [
"IPI",
"ICI",
"IPI"
],
"key": {
"I": {
"tag": (`forge:ingots/${material[1]}`)
},
"P": {
"tag": (`forge:plates/${material[2]}`)
},
"C": {
"item": inputStorage
}
},
"result": {
"item": outputStorage
}
});
})
})
event.remove({ output: "sophisticatedstorage:controller" })
event.replaceInput([
{ id: "sophisticatedstorage:storage_io" },
{ id: "sophisticatedstorage:storage_input" },
{ id: "sophisticatedstorage:storage_output" }],
"#forge:stone", "#forge:plates/steel")
event.replaceInput([
{ id: "sophisticatedstorage:storage_io" },
{ id: "sophisticatedstorage:storage_input" },
{ id: "sophisticatedstorage:storage_output" }],
"minecraft:repeater", "#gtceu:circuits/lv")
event.shaped("sophisticatedstorage:controller", [
"III",
"CDC",
"IEI"
], {
I: "#forge:plates/steel",
C: "#gtceu:circuits/lv",
D: "#sophisticatedstorage:base_tier_wooden_storage",
E: "#forge:storage_blocks/diamond"
})
event.shaped("sophisticatedstorage:controller", [
"III",
"CDC",
"IEI"
], {
I: "#forge:plates/steel",
C: "#gtceu:circuits/lv",
D: "#sophisticatedstorage:base_tier_wooden_storage",
E: "#forge:storage_blocks/emerald"
})
// Stack upgrades
let stackupgrade = [
["stack_upgrade_tier_1", "gtceu:energetic_alloy", "upgrade_base"],
["stack_upgrade_tier_2", "gtceu:stainless_steel", "stack_upgrade_tier_1"],
["stack_upgrade_tier_3", "gtceu:tungsten_steel", "stack_upgrade_tier_2"],
["stack_upgrade_tier_4", "gtceu:osmiridium", "stack_upgrade_tier_3"]
]
event.remove({ output: "sophisticatedbackpacks:stack_upgrade_starter_tier" })
event.remove({ output: "sophisticatedstorage:stack_upgrade_tier_1_plus" })
stackupgrade.forEach(material => {
modids.forEach(mod => {
event.remove({ output: `${mod}:${material[0]}` })
event.shaped(`${mod}:${material[0]}`, [
"III",
"IUI",
"BIB"
], {
I: `${material[1]}_plate`,
B: `${material[1]}_gear`,
U: `${mod}:${material[2]}`
})
})
})
event.remove({ output: "sophisticatedstorage:stack_upgrade_tier_5" })
event.shaped("sophisticatedstorage:stack_upgrade_tier_5", [
"III",
"IUI",
"BIB"
], {
I: "gtceu:naquadah_alloy_plate",
B: "gtceu:naquadah_alloy_gear",
U: "sophisticatedstorage:stack_upgrade_tier_4"
}),
// Upgrades
event.remove({ output: "sophisticatedstorage:hopper_upgrade" })
event.shaped("4x sophisticatedstorage:hopper_upgrade", [
" H ",
"IUI",
"RRR"
], {
U: "sophisticatedstorage:upgrade_base",
I: "minecraft:iron_ingot",
H: "minecraft:hopper",
R: "gtceu:red_alloy_plate"
})
event.remove({ output: "sophisticatedstorage:advanced_hopper_upgrade" })
event.shaped("sophisticatedstorage:advanced_hopper_upgrade", [
" R ",
"IUI",
"RRR"
], {
U: "sophisticatedstorage:upgrade_base",
I: "gtceu:lv_conveyor_module",
R: "gtceu:steel_plate"
})
// Compression upgrades are removed in EM like Compacting Drawers
if (!doCompacting) {
event.remove({ output: /^sophisticated.*(compacting|compression)_upgrade$/ })
}
// Magnet upgrades
modids.forEach(mod => {
event.remove({ output: `${mod}:magnet_upgrade` })
event.shaped(`${mod}:magnet_upgrade`, [
"IAI",
"IUI",
"I I"
], {
U: `${mod}:pickup_upgrade`,
I: "minecraft:iron_ingot",
A: "enderio:vacuum_chest",
})
})
})