Added mod files

This commit is contained in:
Jacob Vinding
2025-12-26 21:38:55 +01:00
parent 64c4d60c47
commit c4ad0f3e2e
5039 changed files with 894558 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
Mods Scripts for CABIN
These are mods that are installed in the pack by default but aren't necessary for beating the modpack.
Some people may want to remove a mod from here in favour of adding a mod from the compatability scripts or an entirely different mod.
Be aware that some of the side content quests may not work after a mod is removed. The main quest line will remain in tact though.

View File

@@ -0,0 +1,7 @@
if(Platform.isLoaded("aquaculture")) {
unregistered_axes.push("aquaculture:neptunium_axe")
ServerEvents.recipes(event => {
event.recipes.create.crushing([Item.of(Item.of("aquaculture:neptunium_ingot", 2)), Item.of(Item.of("aquaculture:neptunium_nugget", 5)).withChance(.5)], "aquaculture:neptunes_bounty").processingTime(500)
})
}

View File

@@ -0,0 +1,18 @@
if(Platform.isLoaded("balancedflight")) {
ServerEvents.recipes(event => {
event.remove({ mod: "balancedflight" })
event.recipes.create.sequenced_assembly([
"balancedflight:flight_anchor",
], "minecraft:beacon", [
event.recipes.create.deploying("kubejs:incomplete_flight_anchor", ["kubejs:incomplete_flight_anchor", "kubejs:gold_machine"]),
event.recipes.create.deploying("kubejs:incomplete_flight_anchor", ["kubejs:incomplete_flight_anchor", "kubejs:inductive_mechanism"]),
event.recipes.create.deploying("kubejs:incomplete_flight_anchor", ["kubejs:incomplete_flight_anchor", "kubejs:inductive_mechanism"]),
event.recipes.create.deploying("kubejs:incomplete_flight_anchor", ["kubejs:incomplete_flight_anchor", "create:shaft"]),
event.recipes.create.deploying("kubejs:incomplete_flight_anchor", ["kubejs:incomplete_flight_anchor", Platform.isLoaded("magicfeather") ? "magicfeather:magicfeather" : "minecraft:elytra"]),
]).loops(1)
.transitionalItem("kubejs:incomplete_flight_anchor")
.id("kubejs:compat/balancedflight/flight_anchor")
event.remove({output: "balancedflight:ascended_flight_ring"})
})
}

View File

@@ -0,0 +1,139 @@
if(Platform.isLoaded("biomesoplenty")) {
wood_types.push("biomesoplenty:fir")
wood_types.push("biomesoplenty:pine")
wood_types.push("biomesoplenty:maple")
wood_types.push("biomesoplenty:redwood")
wood_types.push("biomesoplenty:mahogany")
wood_types.push("biomesoplenty:jacaranda")
wood_types.push("biomesoplenty:palm")
wood_types.push("biomesoplenty:willow")
wood_types.push("biomesoplenty:dead")
wood_types.push("biomesoplenty:magic")
wood_types.push("biomesoplenty:umbran")
wood_types.push("biomesoplenty:hellbark")
wood_types.push("biomesoplenty:empyreal")
ServerEvents.tags("item", event => {
// Has the block tag but not the item tag
event.add("minecraft:flowers", "biomesoplenty:waterlily")
event.get("forge:vines").add("biomesoplenty:willow_vine").add("biomesoplenty:spanish_moss")
event.get("kubejs:strainer/sands").add("biomesoplenty:white_sand").add("biomesoplenty:orange_sand")
})
ServerEvents.recipes(event => {
// Tree Extracting recipes for leaves that don't match their log names
addTreeOutput(event, "minecraft:oak_log", "biomesoplenty:origin_leaves")
addTreeOutput(event, "minecraft:oak_log", "biomesoplenty:flowering_oak_leaves")
addTreeOutput(event, "minecraft:spruce_log", "biomesoplenty:cypress_leaves")
addTreeOutput(event, "minecraft:birch_log", "biomesoplenty:rainbow_birch_leaves")
addTreeOutput(event, "minecraft:cherry_log", "biomesoplenty:snowblossom_leaves")
addTreeOutput(event, "biomesoplenty:maple_log", "biomesoplenty:yellow_maple_leaves")
addTreeOutput(event, "biomesoplenty:maple_log", "biomesoplenty:orange_maple_leaves")
addTreeOutput(event, "biomesoplenty:maple_log", "biomesoplenty:red_maple_leaves")
// kubejs throws a duplicate recipe error, we'd need to change how resin recipes are created to avoid that error
// event.custom({
// type: "thermal:tree_extractor",
// trunk: {
// Name: "biomesoplenty:magic_log",
// Properties: {
// axis: "y"
// }
// },
// leaves: {
// Name: "biomesoplenty:magic_leaves",
// Properties: {
// persistent: "false"
// }
// },
// result: {
// fluid: "create:potion",
// amount: 25,
// nbt: {
// Bottle: 'REGULAR',
// Potion: "minecraft:thick"
// }
// }
// })//.id('kubejs:devices/tree_extractor/tree_extractor_magic')
// Wash sand into clay
event.recipes.create.splashing([Item.of("minecraft:clay_ball", 1).withChance(0.25)], "biomesoplenty:black_sand")
event.recipes.create.splashing([Item.of("minecraft:clay_ball", 1).withChance(0.25)], "biomesoplenty:white_sand")
event.recipes.create.splashing([Item.of("minecraft:clay_ball", 1).withChance(0.25)], "biomesoplenty:orange_sand")
// Flesh igeneous extruder recipe.
event.custom({
"type": "thermal:rock_gen",
"adjacent": "biomesoplenty:blood",
"result": { "item": "biomesoplenty:flesh"}
})
})
// Fix biome tags
// onEvent("tags.worldgen.biome", event=>{
// const BOP_OVERWORLD = [
// "biomesoplenty:bamboo_grove",
// "biomesoplenty:bayou",
// "biomesoplenty:bog",
// "biomesoplenty:boreal_forest",
// "biomesoplenty:cherry_blossom_grove",
// "biomesoplenty:clover_patch",
// "biomesoplenty:cold_desert",
// "biomesoplenty:coniferous_forest",
// "biomesoplenty:crag",
// "biomesoplenty:dead_forest",
// "biomesoplenty:dryland",
// "biomesoplenty:dune_beach",
// "biomesoplenty:field",
// "biomesoplenty:fir_clearing",
// "biomesoplenty:floodplain",
// "biomesoplenty:forested_field",
// "biomesoplenty:fungal_jungle",
// "biomesoplenty:glowing_grotto",
// "biomesoplenty:grassland",
// "biomesoplenty:highland",
// "biomesoplenty:highland_moor",
// "biomesoplenty:jade_cliffs",
// "biomesoplenty:lavender_field",
// "biomesoplenty:lavender_forest",
// "biomesoplenty:lush_desert",
// "biomesoplenty:lush_savanna",
// "biomesoplenty:maple_woods",
// "biomesoplenty:marsh",
// "biomesoplenty:mediterranean_forest",
// "biomesoplenty:muskeg",
// "biomesoplenty:mystic_grove",
// "biomesoplenty:old_growth_dead_forest",
// "biomesoplenty:old_growth_woodland",
// "biomesoplenty:ominous_woods",
// "biomesoplenty:orchard",
// "biomesoplenty:origin_valley",
// "biomesoplenty:pasture",
// "biomesoplenty:prairie",
// "biomesoplenty:pumpkin_patch",
// "biomesoplenty:rainbow_hills",
// "biomesoplenty:rainforest",
// "biomesoplenty:redwood_forest",
// "biomesoplenty:rocky_rainforest",
// "biomesoplenty:rocky_shrubland",
// "biomesoplenty:scrubland",
// "biomesoplenty:seasonal_forest",
// "biomesoplenty:shrubland",
// "biomesoplenty:snowy_coniferous_forest",
// "biomesoplenty:snowy_fir_clearing",
// "biomesoplenty:snowy_maple_woods",
// "biomesoplenty:spider_nest",
// "biomesoplenty:tropics",
// "biomesoplenty:tundra",
// "biomesoplenty:volcanic_plains",
// "biomesoplenty:volcano",
// "biomesoplenty:wasteland",
// "biomesoplenty:wetland",
// "biomesoplenty:wooded_scrubland",
// "biomesoplenty:wooded_wasteland",
// "biomesoplenty:woodland"
// ]
// event.get("forge:is_overworld").add(BOP_OVERWORLD)
// event.get("ae2:has_meteorites").add(BOP_OVERWORLD)
// })
}

View File

@@ -0,0 +1,20 @@
if (Platform.isLoaded("computercraft")) {
ServerEvents.recipes(event => {
event.replaceInput({ id: "computercraft:cable" }, "minecraft:redstone", "projectred_core:red_ingot")
event.replaceInput({ id: "computercraft:wired_modem" }, "minecraft:redstone", "projectred_core:red_ingot")
event.remove({ id: "computercraft:turtle_advanced" })
event.remove({ id: "computercraft:turtle_advanced_upgrade" })
event.remove({ id: "computercraft:turtle_normal" })
leadMachine(event, "computercraft:computer_normal", "projectred_core:red_ingot")
leadMachine(event, "computercraft:computer_advanced", "minecraft:netherite_scrap")
leadMachine(event, "computercraft:disk_drive", "computercraft:disk")
leadMachine(event, "computercraft:printer", "minecraft:paper")
createMachine("computercraft:computer_normal", event, "computercraft:turtle_normal", "thermal:invar_gear")
createMachine("computercraft:computer_advanced", event, "computercraft:turtle_advanced", "thermal:invar_gear")
createMachine("computercraft:computer_normal", event, "computercraft:monitor_normal", "minecraft:glass_pane")
createMachine("computercraft:computer_advanced", event, "computercraft:monitor_advanced", "minecraft:glass_pane")
})
}

View File

@@ -0,0 +1,41 @@
if(Platform.isLoaded("create_central_kitchen")) {
ServerEvents.recipes(event => {
// fix cooking guide recipe since sturdy sheets are removed in CABIN
event.remove({ id: "create_central_kitchen:crafting/cooking_guide" })
event.shapeless("create_central_kitchen:cooking_guide", ["create:schedule", "farmersdelight:canvas"])
// Some sequenced assembly recipes don't exist for some reason
let transitional = "create_central_kitchen:incomplete_mutton_wrap"
event.recipes.create.sequenced_assembly([
"farmersdelight:mutton_wrap",
], "#forge:bread", [
event.recipes.create.deploying(transitional, [transitional, "#forge:cooked_mutton"]),
event.recipes.create.deploying(transitional, [transitional, "#forge:crops/cabbage"]),
event.recipes.create.deploying(transitional, [transitional, "#forge:crops/onion"])
]).transitionalItem(transitional)
.loops(1)
.id("kubejs:mutton_wrap")
transitional = "create_central_kitchen:incomplete_hamburger"
event.recipes.create.sequenced_assembly([
"farmersdelight:hamburger",
], "#forge:bread", [
event.recipes.create.deploying(transitional, [transitional, "farmersdelight:beef_patty"]),
event.recipes.create.deploying(transitional, [transitional, "#forge:crops/cabbage"]),
event.recipes.create.deploying(transitional, [transitional, "#forge:crops/tomato"]),
event.recipes.create.deploying(transitional, [transitional, "#forge:crops/onion"])
]).transitionalItem(transitional)
.loops(1)
.id("kubejs:hamburger")
event.remove({ mod: "create_central_kitchen", output: "create:dough" })
})
ServerEvents.tags("item", event => {
// Create central kitchen somes ends up removing automatic shapeless recipes while providing no alternatives.
// This is mainly an issue with bowl recipes
event.get("create:ignored_in_automatic_shapeless")
.remove("minecraft:bowl")
})
}

View File

@@ -0,0 +1,62 @@
if (Platform.isLoaded("create_crystal_clear")) {
ServerEvents.recipes(event => {
let tweak_glass_casing = (name) => {
// event.remove({ output: ("create_crystal_clear:" + name + "_glass_casing") })
event.remove({ id: (`create_crystal_clear:${name}_clear_glass_casing`) })
event.custom({
type: "create:item_application",
ingredients: [
{ item: `create_crystal_clear:${name}_casing` },
{ item: "tconstruct:clear_glass" }
],
results: [
{ item: `create_crystal_clear:${name}_clear_glass_casing` }
]
}).id(`kubejs:mods/create_crystal_clear/item_application/${name}_clear_glass_casing`)
event.shapeless(`create_crystal_clear:${name}_glass_casing`, [`create:${name}_casing`, "minecraft:glass"]).id("kubejs:mods/create_crystal_clear/" + name + "_glass_casing")
event.shapeless(`create_crystal_clear:${name}_clear_glass_casing`, [`create:${name}_casing`, "tconstruct:clear_glass"]).id("kubejs:mods/create_crystal_clear/" + name + "_clear_glass_casing")
}
tweak_glass_casing("andesite")
tweak_glass_casing("copper")
tweak_glass_casing("brass")
event.remove({ id: ("create_crystal_clear:train_clear_glass_casing") })
event.custom({
type: "create:item_application",
ingredients: [
{ item: "create:railway_casing" },
{ item: "tconstruct:clear_glass" }
],
results: [
{ item: "create_crystal_clear:train_clear_glass_casing" }
]
}).id("kubejs:mods/create_crystal_clear/item_application/train_clear_glass_casing")
event.shapeless("create_crystal_clear:train_glass_casing", ["create:railway_casing", "minecraft:glass"]).id("kubejs:mods/create_crystal_clear/train_glass_casing")
event.shapeless("create_crystal_clear:train_clear_glass_casing", ["create:railway_casing", "tconstruct:clear_glass"]).id("kubejs:mods/create_crystal_clear/train_clear_glass_casing")
})
ServerEvents.blockLootTables(event => {
// Fix broken loot tables
let cogwheelDrop = {
type: "minecraft:block",
pools: [
{
rolls: 1,
entries: [
{
type: "minecraft:item",
conditions: [{ condition: "minecraft:survives_explosion" }],
name: "create:large_cogwheel"
}
]
}
]
}
let cogwheelCasings = ["andesite", "brass", "train"]
cogwheelCasings.forEach(casing=>{
event.addJson(`create_crystal_clear:${casing}_glass_encased_large_cogwheel`, cogwheelDrop)
event.addJson(`create_crystal_clear:${casing}_clear_glass_encased_large_cogwheel`, cogwheelDrop)
})
})
}

View File

@@ -0,0 +1,23 @@
if (Platform.isLoaded("curios")) {
ServerEvents.lowPriorityData(event=>{
event.addJson("kubejs:curios/slots/goggles", {
"order": 20,
"size": 1,
"icon": "cabin:slot/empty_goggles_slot",
"dropRule": "ALWAYS_KEEP"
})
event.addJson("kubejs:curios/entities/player", {
"entities": ["player"],
"slots": ["goggles"]
})
event.addJson("kubejs:curios/slots/head", {
"size": 0
})
})
ServerEvents.tags("item", event=>{
event.add("curios:goggles", "create:goggles")
event.remove("curios:head", "create:goggles")
})
}

View File

@@ -0,0 +1,22 @@
if (Platform.isLoaded("dungeoncrawl")) {
ServerEvents.lowPriorityData(event => {
event.addJson("dungeoncrawl:worldgen/structure_set/dungeons", {
"structures": [
{
"structure": "dungeoncrawl:dungeon",
"weight": 1
}
],
"placement": {
"type": "integrated_api:advanced_random_spread",
"super_exclusion_zone": {
"chunk_count": 12,
"other_set": "#cabin:dungeon_crawl_avoid"
},
"salt": 10387313,
"spacing": 32,
"separation": 12
}
})
})
}

View File

@@ -0,0 +1,87 @@
if(Platform.isLoaded("functionalstorage")) {
ServerEvents.recipes(event => {
zincMachine(event, Item.of("functionalstorage:storage_controller", 1), "minecraft:diamond")
zincMachine(event, Item.of("functionalstorage:controller_extension", 1), "minecraft:gold_ingot")
zincMachine(event, Item.of("functionalstorage:simple_compacting_drawer", 1), "create:mechanical_piston")
zincMachine(event, Item.of("functionalstorage:compacting_drawer", 1), "create:sticky_mechanical_piston")
enderiumMachine(event, Item.of("functionalstorage:fluid_1", 4))
enderiumMachine(event, Item.of("functionalstorage:fluid_2", 4))
enderiumMachine(event, Item.of("functionalstorage:fluid_4", 4))
enderiumMachine(event, Item.of("functionalstorage:ender_drawer", 1))
event.remove({id:"functionalstorage:oak_drawer_alternate_x1"})
event.remove({id:"functionalstorage:oak_drawer_alternate_x2"})
event.remove({id:"functionalstorage:oak_drawer_alternate_x4"})
// framed drawers
event.remove({id:"functionalstorage:compacting_framed_drawer"})
event.remove({id:"functionalstorage:framed_storage_controller"})
event.remove({id:"functionalstorage:framed_controller_extension"})
event.remove({id:"functionalstorage:framed_simple_compacting_drawer"})
let pattern = ["III","IDI","III"]
event.shaped(Item.of("functionalstorage:compacting_framed_drawer", 1), pattern,
{I:"#forge:nuggets/iron", D:"functionalstorage:compacting_drawer"})
event.shaped(Item.of("functionalstorage:framed_storage_controller", 1), pattern,
{I:"#forge:nuggets/iron", D:"functionalstorage:storage_controller"})
event.shaped(Item.of("functionalstorage:framed_controller_extension", 1), pattern,
{I:"#forge:nuggets/iron", D:"functionalstorage:controller_extension"})
event.shaped(Item.of("functionalstorage:framed_simple_compacting_drawer", 1), pattern,
{I:"#forge:nuggets/iron", D:"functionalstorage:simple_compacting_drawer"})
event.remove({ id: "functionalstorage:copper_upgrade" })
event.remove({ id: "functionalstorage:gold_upgrade" })
event.remove({ id: "functionalstorage:diamond_upgrade" })
event.remove({ id: "functionalstorage:netherite_upgrade" })
let upgradePattern = ["IBI", "CDC", "IBI"]
event.shaped(Item.of("functionalstorage:copper_upgrade", 2), upgradePattern, {
B: "#forge:storage_blocks/andesite_alloy",
C: "#forge:chests/wooden",
D: "#functionalstorage:drawer",
I: "#forge:ingots/zinc"
})
event.shaped(Item.of("functionalstorage:gold_upgrade", 2), upgradePattern, {
B: "functionalstorage:copper_upgrade",
C: "#forge:chests/wooden",
D: "#functionalstorage:drawer",
I: "#forge:ingots/amethyst_bronze"
})
event.shaped(Item.of("functionalstorage:diamond_upgrade", 2), upgradePattern, {
B: "functionalstorage:gold_upgrade",
C: "#forge:chests/wooden",
D: "#functionalstorage:drawer",
I: "#forge:ingots/lumium"
})
event.shaped(Item.of("functionalstorage:netherite_upgrade", 2), upgradePattern, {
B: "functionalstorage:diamond_upgrade",
C: "#forge:chests/wooden",
D: "#functionalstorage:drawer",
I: "#forge:ingots/hepatizon"
})
event.remove({ id:"functionalstorage:iron_downgrade" })
donutCraft(event, Item.of("functionalstorage:iron_downgrade", 4), "#functionalstorage:drawer", "#forge:ingots/iron")
event.remove({ id:"functionalstorage:redstone_upgrade"})
event.shaped(Item.of("functionalstorage:redstone_upgrade", 4), [
"IBI",
"CDC",
"IBI"
], {
B: "minecraft:redstone_block",
C: "minecraft:comparator",
D: "#functionalstorage:drawer",
I: "minecraft:redstone"
})
event.remove({ id:"functionalstorage:void_upgrade"})
donutCraft(event, Item.of("functionalstorage:void_upgrade", 4), "#functionalstorage:drawer", "minecraft:obsidian")
})
ServerEvents.tags("block", event => {
event.add("create:wrench_pickup", /functionalstorage/)
event.add("create:wrench_pickup", /everycomp:fs\//)
})
}

View File

@@ -0,0 +1,24 @@
if(Platform.isLoaded("moreminecarts")) {
ServerEvents.tags("block", event => {
// None of the blocks from this mod have tags for some reason
event.get("minecraft:mineable/pickaxe")
.add("moreminecarts:silica_steel_block")
.add("moreminecarts:chunkrodite_block")
.add("moreminecarts:corrugated_silica_steel")
.add("moreminecarts:silica_steel_pillar")
.add("moreminecarts:organic_glass")
.add("moreminecarts:organic_glass_pane")
.add("moreminecarts:chiseled_organic_glass")
.add("moreminecarts:chiseled_organic_glass_pane")
.add("moreminecarts:holo_scaffold_generator")
.add("moreminecarts:chunk_loader")
.add("moreminecarts:minecart_loader")
.add("moreminecarts:minecart_unloader")
.add("moreminecarts:filter_unloader")
.add("moreminecarts:pearl_stasis_chamber")
})
LootJS.modifiers((event) => {
event.addBlockLootModifier("moreminecarts:filter_unloader")
.addLoot("moreminecarts:filter_unloader")
})
}

View File

@@ -0,0 +1,80 @@
if (Platform.isLoaded("prettypipes")) {
ServerEvents.recipes(event => {
// There are so few recipes that we want to keep that we're better off removing them all
event.remove({ mod: "prettypipes" })
// machine recipes
brassMachine(event, Item.of("prettypipes:item_terminal", 1), "thermal:diamond_gear")
brassMachine(event, Item.of("prettypipes:pressurizer", 1), "create:propeller")
event.shaped(Item.of("prettypipes:pipe", 8), [
"PMP"
], {
P: "create:brass_sheet",
M: "create:brass_ingot"
})
event.shaped("prettypipes:wrench", [
"PI ",
"II ",
" R"
], {
P: "prettypipes:pipe",
I: "#forge:ingots/iron",
R: "#forge:dyes/red"
})
event.shaped("prettypipes:crafting_terminal", [
" T ",
"RIR",
" R "
], {
T: "minecraft:crafting_table",
I: "prettypipes:item_terminal",
R: "#forge:dusts/redstone"
})
event.shapeless("prettypipes:pipe_frame", ["minecraft:item_frame", "prettypipes:pipe", "#forge:dusts/redstone"])
let module = (type, result) => {
// event.remove({ output: "prettypipes:"+result })
event.stonecutting("prettypipes:" + result, "kubejs:pipe_module_" + type)
}
module("utility", "filter_increase_modifier")
module("utility", "tag_filter_modifier")
module("utility", "mod_filter_modifier")
module("utility", "nbt_filter_modifier")
module("utility", "damage_filter_modifier")
module("utility", "round_robin_sorting_modifier")
module("utility", "random_sorting_modifier")
module("utility", "redstone_module")
module("utility", "stack_size_module")
module("utility", "low_high_priority_module")
module("utility", "medium_high_priority_module")
module("utility", "high_high_priority_module")
module("utility", "low_low_priority_module")
module("utility", "medium_low_priority_module")
module("utility", "high_low_priority_module")
let tiers = ["low", "medium", "high"]
for (let i = 0; i < tiers.length; i++) {
let tier = "tier_" + (i + 1)
let prefix = tiers[i] + "_"
module(tier, prefix + "extraction_module")
module(tier, prefix + "retrieval_module")
module(tier, prefix + "speed_module")
module(tier, prefix + "filter_module")
module(tier, prefix + "crafting_module")
}
let attachment_base = (id, amount, other_ingredient) => {
event.remove({ output: id })
if (other_ingredient) {
event.smithing(Item.of(id, amount), "kubejs:attachment_base", other_ingredient)
event.recipes.create.mechanical_crafting(Item.of(id, amount), "AB", { A: "kubejs:attachment_base", B: other_ingredient })
}
else
event.stonecutting(Item.of(id, amount), "kubejs:attachment_base")
}
attachment_base("thermal:turbo_servo_attachment", 1)
attachment_base("thermal:filter_attachment", 1)
attachment_base("thermal:energy_limiter_attachment", 1)
})
}

View File

@@ -0,0 +1,33 @@
if (Platform.isLoaded("projectred_illumination")) {
ServerEvents.recipes(event => {
event.remove({ mod: "projectred_illumination" })
let convert = (c, id) => {
let lamp = `projectred_illumination:${c}${id}`
let inverted = `projectred_illumination:${c}_inverted${id}`
event.shapeless(inverted, [lamp])
event.shapeless(lamp, [inverted])
}
colours.forEach(c => {
event.shaped(Item.of(`projectred_illumination:${c}_illumar_lamp`, 1), [
"G",
"C",
"S"
], {
G: "#forge:glass/colorless",
C: `projectred_core:${c}_illumar`,
S: "minecraft:redstone"
})
event.stonecutting(Item.of(`projectred_illumination:${c}_fixture_light`, 4), `projectred_illumination:${c}_illumar_lamp`)
event.stonecutting(Item.of(`projectred_illumination:${c}_fallout_light`, 4), `projectred_illumination:${c}_illumar_lamp`)
event.stonecutting(Item.of(`projectred_illumination:${c}_lantern`, 4), `projectred_illumination:${c}_illumar_lamp`)
event.stonecutting(Item.of(`projectred_illumination:${c}_cage_light`, 4), `projectred_illumination:${c}_illumar_lamp`)
convert(c, "_illumar_lamp")
convert(c, "_fallout_light")
convert(c, "_lantern")
convert(c, "_cage_light")
convert(c, "_fixture_light")
})
})
}

View File

@@ -0,0 +1,41 @@
if (Platform.isLoaded("projectred_integration")) {
ServerEvents.recipes(event => {
let p_circuit = (id) => event.stonecutting(Item.of("projectred_integration:" + id + "_gate", 1), "projectred_core:platformed_plate")
event.remove({ mod:"projectred_integration" })
p_circuit("or")
p_circuit("nor")
p_circuit("not")
p_circuit("and")
p_circuit("nand")
p_circuit("xor")
p_circuit("xnor")
p_circuit("buffer")
p_circuit("multiplexer")
p_circuit("pulse")
p_circuit("repeater")
p_circuit("randomizer")
p_circuit("sr_latch")
p_circuit("toggle_latch")
p_circuit("transparent_latch")
p_circuit("light_sensor")
p_circuit("rain_sensor")
p_circuit("timer")
p_circuit("sequencer")
p_circuit("counter")
p_circuit("state_cell")
p_circuit("synchronizer")
p_circuit("bus_transceiver")
p_circuit("null_cell")
p_circuit("invert_cell")
p_circuit("buffer_cell")
p_circuit("comparator")
p_circuit("and_cell")
p_circuit("bus_randomizer")
p_circuit("bus_converter")
p_circuit("bus_input_panel")
p_circuit("segment_display")
p_circuit("dec_randomizer")
})
}

View File

@@ -0,0 +1,6 @@
if (Platform.isLoaded("projectred_transmission")) {
ServerEvents.recipes(event => {
event.remove({ id: "projectred_transmission:wired_plate" })
event.remove({ id: "projectred_transmission:bundled_plate" })
})
}

View File

@@ -0,0 +1,134 @@
if(Platform.isLoaded("quark")) {
// Add quark wood types to the arrays of wood types
wood_types.push("quark:ancient")
wood_types.push("quark:azalea")
wood_types.push("quark:blossom")
ServerEvents.recipes(event => {
// Unwanted duplicate compressed block recipes
event.remove({ id: "quark:building/crafting/compressed/charcoal_block"})
event.remove({ id: "quark:building/crafting/compressed/sugar_cane_block"})
event.remove({ id: "quark:building/crafting/compressed/gunpowder_sack"})
event.remove({ id: "quark:building/crafting/compressed/apple_crate"})
event.remove({ id: "quark:building/crafting/compressed/potato_crate"})
event.remove({ id: "quark:building/crafting/compressed/carrot_crate"})
event.remove({ id: "quark:building/crafting/compressed/beetroot_crate"})
event.remove({ id: "quark:building/crafting/compressed/bamboo_block"})
// Tree resin
addTreeOutput(event, "quark:blossom_log", "quark:blue_blossom_leaves")
addTreeOutput(event, "quark:blossom_log", "quark:lavender_blossom_leaves")
addTreeOutput(event, "quark:blossom_log", "quark:orange_blossom_leaves")
addTreeOutput(event, "quark:blossom_log", "quark:yellow_blossom_leaves")
addTreeOutput(event, "quark:blossom_log", "quark:red_blossom_leaves")
// Stone generation
event.custom({
"type": "thermal:rock_gen",
"adjacent": "kubejs:chromatic_waste",
"below": "minecraft:end_stone",
"result": { "item": "quark:myalite"}
})
event.custom({
"type": "thermal:rock_gen",
"adjacent": "kubejs:chromatic_waste",
"below": "minecraft:clay",
"result": { "item": "quark:shale"}
})
event.custom({
"type": "thermal:rock_gen",
"adjacent": "kubejs:chromatic_waste",
"below": "minecraft:quartz_block",
"result": { "item": "quark:jasper"}
})
// Modify quark easy sticks recipe to prevent conflicts with decorative blocks wood beams
event.replaceInput({ id: "quark:tweaks/crafting/utility/misc/easy_sticks" }, "#minecraft:logs", "#kubejs:easy_sticks_logs")
})
ServerEvents.tags("block", event => {
event.add("create:wrench_pickup", "quark:ender_watcher")
// I really don't know why these blocks are missing the pressure plate tag
// All the other pressure plates from quark and forbidden have the tag.
event.add("minecraft:pressure_plates", "quark:obsidian_pressure_plate")
})
ServerEvents.tags("item", event => {
// Create a new set of tags for logs ok to use for the easy sticks recipe
const easy_sticks = event.get("minecraft:logs").getObjectIds()
const easy_sticks_blacklist = Ingredient.of("/.*stripped.*/")
easy_sticks.forEach(easy_sticks => {
if (!easy_sticks_blacklist.test(easy_sticks)) event.add("kubejs:easy_sticks_logs", easy_sticks)
})
// We only want to remove stripped logs, not stripped wood
event.add("kubejs:easy_sticks_logs", "#forge:stripped_wood")
})
ServerEvents.lowPriorityData(event => {
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/limestone", [
"create:limestone",
"quark:limestone",
"quark:polished_limestone",
"quark:limestone_bricks",
"quark:chiseled_limestone_bricks",
"quark:limestone_pillar"
])
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/apple_block", ["thermal:apple_block", "quark:apple_crate"])
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/beetroot_block", ["farmersdelight:beetroot_crate", "quark:beetroot_crate"])
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/carrot_block", ["farmersdelight:carrot_crate", "quark:carrot_crate"])
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/charcoal_block", ["thermal:charcoal_block", "quark:charcoal_block"])
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/gunpowder_block", ["thermal:gunpowder_block", "quark:gunpowder_sack"])
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/potato_block", ["farmersdelight:potato_crate", "quark:potato_crate"])
addChiselingRecipe(event, "kubejs:chiseling_recipes/compat/quark/sugar_cane_block", ["thermal:sugar_cane_block", "quark:sugar_cane_block"])
// Remove the Forgotten Hat from the forgotten's drop pool (spawns in strongholds with integrated strongholds)
event.addJson("quark:loot_tables/entities/forgotten", {
"type": "minecraft:entity",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:set_count",
"count": {"min": 4.0, "max": 8.0, "type": "minecraft:uniform"}
},
{
"function": "minecraft:looting_enchant",
"count": {"min": 1.0, "max": 2.0}
}
],
"name": "minecraft:arrow"
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:set_count",
"count": {"min": 2.0, "max": 3.0, "type": "minecraft:uniform"}
},
{
"function": "minecraft:looting_enchant",
"count": {"min": 0.0, "max": 1.0}
}
],
"name": "minecraft:bone"
}
]
}
]
})
// remove soul beads
event.addJson("quark:loot_tables/entities/wraith", {})
})
}

View File

@@ -0,0 +1,7 @@
if(Platform.isLoaded("reliquary")) {
ServerEvents.recipes(event => {
event.forEachRecipe({id: /alkahestry/}, recipe => {
recipe.id(recipe.getId() + "_manual_only")
})
})
}

View File

@@ -0,0 +1,133 @@
/**
* Configuration of Sophisticated Storage
*/
ServerEvents.recipes(event => {
// const modids = ["sophisticatedstorage", "sophisticatedbackpacks"]
// 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$/ })
// Barrel, Chest, Shulker Box upgrading
const sophStorageMaterials = [
["", null, null],
// ["copper_", "tconstruct:steel_ingot", "lead"],
["iron_", "bronze"],
["gold_", "invar"],
["diamond_", "slimesteel"],
["netherite_", "manyullyn"],
]
const sophStorageTypes = [
["", "barrel"],
["", "chest"],
["", "shulker_box"]
]
let upgradePattern = ["NIN", "NCN", "NIN"]
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`,
upgradePattern, {
N: `#forge:nuggets/${material[1]}`,
I: `#forge:ingots/${material[1]}`,
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": upgradePattern,
"key": {
"N": {
"tag": `forge:nuggets/${material[1]}`
},
"I": {
"tag": `forge:ingots/${material[1]}`
},
"C": {
"item": inputStorage
}
},
"result": {
"item": outputStorage
}
});
})
})
enderiumMachine(event, Item.of("sophisticatedstorage:controller", 1), "functionalstorage:storage_controller")
enderiumMachine(event, Item.of("sophisticatedstorage:controller", 1), "functionalstorage:controller_extension")
leadMachine(event, Item.of("sophisticatedstorage:storage_input", 1))
leadMachine(event, Item.of("sophisticatedstorage:storage_output", 1))
// Stack upgrades
let stackupgrade = [
["", "create:andesite_alloy", ""],
["stack_upgrade_tier_1", "create:brass_ingot", "upgrade_base"],
["stack_upgrade_tier_2", "thermal:invar_ingot", "stack_upgrade_tier_1"],
["stack_upgrade_tier_3", "thermal:enderium_ingot", "stack_upgrade_tier_2"],
["stack_upgrade_tier_4", "kubejs:calculation_mechanism", "stack_upgrade_tier_3"]
]
event.remove({ output: "sophisticatedstorage:stack_upgrade_tier_1_plus" })
for (let i = 1;i < stackupgrade.length;++i) {
let upgrade = stackupgrade[i][0]
let baseUpgrade = stackupgrade[i][2]
let ingredient = stackupgrade[i][1]
let previousIngredient = stackupgrade[i - 1][1]
event.remove({ output: `sophisticatedstorage:${upgrade}` })
donutCraft(event, `sophisticatedstorage:${upgrade}`, `sophisticatedstorage:${baseUpgrade}`, `${previousIngredient}`)
event.remove({ output: `sophisticatedbackpacks:${upgrade}` })
donutCraft(event, `sophisticatedbackpacks:${upgrade}`, `sophisticatedbackpacks:${baseUpgrade}`, `${ingredient}`)
}
// Sophisticated Backpacks starter upgrade
event.remove({ output: "sophisticatedbackpacks:stack_upgrade_starter_tier" })
donutCraft(event, "sophisticatedbackpacks:stack_upgrade_starter_tier", "sophisticatedbackpacks:upgrade_base", "create:andesite_alloy")
donutCraft(event, "sophisticatedbackpacks:stack_upgrade_tier_1", "sophisticatedbackpacks:stack_upgrade_starter_tier", "create:brass_ingot")
// Sophisticated Storage tier 5 upgrade
event.remove({ output: "sophisticatedstorage:stack_upgrade_tier_5" })
donutCraft(event, "sophisticatedstorage:stack_upgrade_tier_5", "sophisticatedstorage:stack_upgrade_tier_4", "kubejs:calculation_mechanism")
event.remove({ id: "sophisticatedbackpacks:inception_upgrade"})
event.remove({ id: "sophisticatedbackpacks:stack_upgrade_omega_tier"})
event.remove({ output: "sophisticatedstorage:stack_upgrade_omega_tier" })
// Upgrades
brassMachine(event, Item.of("sophisticatedstorage:advanced_hopper_upgrade", 2))
})

View File

@@ -0,0 +1,57 @@
if (Platform.isLoaded("supplementaries")) {
ServerEvents.recipes(event => {
// Lumisene
event.custom({
"type": "tconstruct:melting",
"ingredient": {"item": "minecraft:glow_berries"},
"result": {
"fluid": "supplementaries:lumisene",
"amount": 125
},
"temperature": 200,
"time": 6
}).id("kubejs:smeltery/melting/lumisene")
event.recipes.thermal.crucible(Fluid.of("supplementaries:lumisene", 125), "minecraft:glow_berries", 0, 1000)
event.recipes.create.filling("supplementaries:lumisene_bottle", ["minecraft:glass_bottle", Fluid.of("supplementaries:lumisene", 250).toJson()])
event.recipes.create.emptying([Fluid.of("supplementaries:lumisene", 250), "minecraft:glass_bottle"], "supplementaries:lumisene_bottle")
// Timber Frame
event.remove({ id:"supplementaries:timber_frame" })
donutCraft(event, Item.of("supplementaries:timber_frame", 2), "minecraft:air", "#forge:rods/wooden")
event.stonecutting("supplementaries:timber_frame", "#kubejs:timber_frame")
event.stonecutting("supplementaries:timber_brace", "#kubejs:timber_frame")
event.stonecutting("supplementaries:timber_cross_brace", "#kubejs:timber_frame")
// Fix crafting table dye removal recipes for these items
event.shapeless(Item.of("create:copper_valve_handle"), ["#create:valve_handles","supplementaries:soap"] ).id("kubejs:soap_clean_valve_handle_manual_only")
// Copy the NBT data for this one so that removing dye doesn't eat our stuff.
event.shapeless(Item.of("create:brown_toolbox"), ["#create:toolboxes","supplementaries:soap"] ).id("kubejs:soap_clean_toolbox_manual_only").modifyResult((grid, result) => {
const item = grid.find(Ingredient.of("#create:toolboxes"))
return result.withNBT(item.nbt)
})
})
ServerEvents.tags("item", event => {
event.get("kubejs:timber_frame")
.add("supplementaries:timber_frame")
.add("supplementaries:timber_brace")
.add("supplementaries:timber_cross_brace")
})
ServerEvents.tags("block", event => {
// Whitelist these items to allow the removal of dye in-world using soap (see supplementaries common config)
const dyedHandles = event.get("create:valve_handles").getObjectIds()
const dyedHandlesBlacklist = Ingredient.of(/.*copper.*/)
dyedHandles.forEach(handle => {
if (!dyedHandlesBlacklist.test(handle)) event.add("kubejs:valve_handles_dyed", handle)
})
const dyedToolboxes = event.get("create:toolboxes").getObjectIds()
const dyedToolboxesBlacklist = Ingredient.of(/.*brown.*/)
dyedToolboxes.forEach(toolbox => {
if (!dyedToolboxesBlacklist.test(toolbox)) event.add("kubejs:toolboxes_dyed", toolbox)
})
})
}

View File

@@ -0,0 +1,65 @@
// Trial Chamber backport
if (Platform.isLoaded("trials")) {
ServerEvents.recipes(event => {
// Broken Item
event.remove({ id:"trials:crafter" })
if (Platform.isLoaded("quark")) {
event.shapeless("quark:crafter", ["trials:crafter"])
}
})
ServerEvents.lowPriorityData(event => {
// Make a Trial Processor using IntegratedAPI and Lithostitched
// Integrated API's waterlog fix processor is used to fix blocks being waterlogged when the structure generates over water
// Lithostitched is used to swap blocks while copying over properties. (without it this processor would be almost 3000 lines long)
event.addJson("trials:worldgen/processor_list/generic", {
"processors": [
{
"processor_type": "integrated_api:waterlogging_fix_processor"
},
{
"processor_type": "lithostitched:block_swap",
"blocks": {
"minecraft:waxed_copper_block": "kubejs:trial_copper_block",
"minecraft:waxed_cut_copper": "kubejs:trial_cut_copper",
"trials:waxed_chiseled_copper": "kubejs:trial_chiseled_copper",
"trials:waxed_copper_grate": "kubejs:trial_copper_grate",
"minecraft:waxed_cut_copper_stairs": "kubejs:trial_cut_copper_stairs",
"minecraft:waxed_cut_copper_slab": "kubejs:trial_cut_copper_slab",
"minecraft:waxed_oxidized_copper": "kubejs:trial_oxidized_copper",
"minecraft:waxed_oxidized_cut_copper": "kubejs:trial_oxidized_cut_copper",
"trials:waxed_chiseled_copper_oxidized": "kubejs:trial_chiseled_copper_oxidized",
"trials:waxed_copper_grate_oxidized": "kubejs:trial_copper_grate_oxidized",
"minecraft:waxed_oxidized_cut_copper_stairs": "kubejs:trial_oxidized_cut_copper_stairs",
"minecraft:waxed_oxidized_cut_copper_slab": "kubejs:trial_oxidized_cut_copper_slab"
}
}
]
})
event.addJson("trials:worldgen/structure_set/trial_chambers", {
"structures": [
{
"structure": "trials:trials_chambers",
"weight": 1
}
],
"placement": {
"type": "integrated_api:advanced_random_spread",
"super_exclusion_zone": {
"chunk_count": 12,
"other_set": "#cabin:trial_chambers_avoid"
},
"spacing": 32,
"separation": 21,
"salt": 412788945
}
})
// Loot Tables are changed in the data folder.
// We need to change the type of loot tables to 'chest' so that emi Loot chooses to render it
// The loot tables still work in trial vaults when they're set to the 'chest' type
// Even if Lootjs were good in this version, we would still likely need to use a datapack to change the loot type
})
}