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

290 lines
13 KiB
JavaScript

/**
* Compat for the create mod
*/
if (Platform.isLoaded("create")) {
console.log("Create found, loading compat scripts...")
ServerEvents.recipes(event => {
// Removes any machines related to processing, the point of this compat is fun not functionality,
/* Removes recipes for machines that were not removed, deployers and mechanical crafters are fun!
Most recipe categories that are removed machines are hidden in
kubejs/assets/emi/recipe/filters/hidecategories.json as opposed to removing the actual recipes */
event.remove({ type: "create:deploying" })
event.remove({ type: "create:milling" })
event.remove({ type: "create:crushing" })
event.remove({ id: "create:crafting/kinetics/millstone" })
// event.remove({id: 'create:mechanical_crafting/crushing_wheel'}) //mechanical roller uses this for now
event.remove({ id: "create:crafting/kinetics/mechanical_mixer" })
event.remove({ id: "create:crafting/kinetics/mechanical_press" })
// Remove the hand crank since it's easy to abuse contraptions using it
event.remove({ id: "create:crafting/kinetics/hand_crank" })
// w h a t ?
event.remove({ id: "gtceu:shaped/lv_kinetic_mixer" })
event.remove({ id: "gtceu:shaped/mv_kinetic_mixer" })
event.remove({ id: "gtceu:shaped/hv_kinetic_mixer" })
event.remove({ id: "gtceu:shaped/ev_kinetic_mixer" })
// belts made with rubber
let kelpRecipes = [
"create:crafting/kinetics/belt_connector",
"create:crafting/logistics/andesite_funnel",
"create:crafting/logistics/brass_funnel",
"create:crafting/logistics/andesite_tunnel",
"create:crafting/logistics/brass_tunnel"
]
kelpRecipes.forEach(id => { event.replaceInput({ id: id }, "minecraft:dried_kelp", "gtceu:rubber_plate") })
event.replaceInput({ id: "create:crafting/kinetics/spout" }, "minecraft:dried_kelp", "gtceu:rubber_ring")
// Adds some create recipes to gt machines
event.recipes.gtceu.mixer("kubejs:andesite_alloy_from_iron")
.itemInputs("#forge:nuggets/iron", "minecraft:andesite")
.itemOutputs("create:andesite_alloy")
.duration(100)
.EUt(7)
event.recipes.gtceu.mixer("kubejs:andesite_alloy_from_zinc")
.itemInputs("#forge:nuggets/zinc", "minecraft:andesite")
.itemOutputs("create:andesite_alloy")
.duration(100)
.EUt(7)
// Pressing and compacting recipes
event.recipes.gtceu.forge_hammer("kubejs:dirt_path")
.itemInputs(["minecraft:dirt", "minecraft:grass"])
.itemOutputs("minecraft:dirt_path")
.duration(10)
.EUt(2)
event.recipes.gtceu.fluid_solidifier("kubejs:bar_of_chocolate")
.inputFluids(Fluid.of("create:chocolate", 250))
.notConsumable("gtceu:ingot_casting_mold")
.itemOutputs("create:bar_of_chocolate")
.duration(20)
.EUt(7)
let honeyFluid = new JSONObject()
honeyFluid.add("amount", 1000)
honeyFluid.add("value", { tag: "forge:honey" })
event.recipes.gtceu.fluid_solidifier("kubejs:honey_block")
.inputFluids(FluidIngredientJS.of(honeyFluid))
.notConsumable("gtceu:block_casting_mold")
.itemOutputs("minecraft:honey_block")
.duration(5)
.EUt(7)
event.recipes.gtceu.mixer("kubejs:blaze_cake_base")
.itemInputs("minecraft:egg", "minecraft:sugar", "create:cinder_flour")
.itemOutputs("create:blaze_cake_base")
.duration(200)
.EUt(7)
let milkFluid = new JSONObject()
milkFluid.add("amount", 250)
milkFluid.add("value", { tag: "forge:milk" })
event.recipes.gtceu.mixer("kubejs:liquid_chocolate")
.itemInputs("minecraft:sugar", "minecraft:cocoa_beans")
.inputFluids(FluidIngredientJS.of(milkFluid))
.outputFluids(Fluid.of("create:chocolate", 250))
.duration(200)
.EUt(7)
event.recipes.gtceu.mixer("kubejs:tea")
.itemInputs("#minecraft:leaves")
.inputFluids(Fluid.of("minecraft:water", 250), FluidIngredientJS.of(milkFluid))
.outputFluids(Fluid.of("create:tea", 500))
.duration(200)
.EUt(7)
event.recipes.gtceu.extractor("kubejs:extract_bar_of_chocolate")
.itemInputs("create:bar_of_chocolate")
.outputFluids(Fluid.of("create:chocolate", 250))
.duration(10)
.EUt(4)
event.recipes.gtceu.extractor("kubejs:extract_honey_block")
.itemInputs("minecraft:honey_block")
.outputFluids(Fluid.of("create:honey", 1000))
.duration(10)
.EUt(4)
// Sequenced assembly but awesome
event.recipes.gtceu.assembler("kubejs:precision_mechanism")
.itemInputs("#forge:plates/gold", "5x create:cogwheel", "5x create:large_cogwheel", "5x minecraft:iron_nugget")
.itemOutputs("create:precision_mechanism")
.duration(300)
.EUt(30)
.circuit(5)
// That was actually awesome
// adding mechanical crafter stuff
event.recipes.gtceu.assembler("kubejs:extendo_grip")
.itemInputs("create:precision_mechanism", "create:brass_hand", "6x minecraft:stick", "#forge:ingots/brass")
.itemOutputs("create:extendo_grip")
.duration(600)
.EUt(120)
event.recipes.gtceu.assembler("kubejs:potato_cannon")
.itemInputs("create:precision_mechanism", "create:andesite_alloy", "3x create:fluid_pipe", "2x #forge:ingots/copper")
.itemOutputs("create:potato_cannon")
.duration(600)
.EUt(120)
event.recipes.gtceu.assembler("kubejs:wand_of_symmetry")
.itemInputs("create:precision_mechanism", "minecraft:obsidian", "3x minecraft:glass", "#forge:ingots/brass", "minecraft:ender_pearl")
.itemOutputs("create:wand_of_symmetry")
.duration(600)
.EUt(120)
event.recipes.gtceu.autoclave("kubejs:rose_quartz")
.itemInputs("minecraft:quartz")
.itemOutputs("create:rose_quartz")
.inputFluids("gtceu:redstone 1152")
.duration(200)
.EUt(16)
.circuit(6)
event.recipes.gtceu.sifter("kubejs:polished_rose_quartz")
.itemInputs("create:rose_quartz")
.itemOutputs("create:polished_rose_quartz")
.duration(200)
.EUt(16)
// deploying recipes
let assembleCasing = function (input, casingName, logInput, casingModId) {
logInput = (logInput) ? logInput : "#minecraft:logs"
casingModId = (casingModId) ? casingModId : "create"
// recipes can use unstripped logs since gt has no way to strip wood
return event.recipes.gtceu.assembler(`kubejs:${casingName}`)
.itemInputs(input, logInput)
.itemOutputs(`${casingModId}:${casingName}`)
.duration(100)
.EUt(16)
}
assembleCasing("create:andesite_alloy", "andesite_casing")
assembleCasing("#forge:ingots/brass", "brass_casing")
assembleCasing("minecraft:copper_ingot", "copper_casing")
assembleCasing("#forge:plates/obsidian", "railway_casing", "create:brass_casing")
// Tracks
if (!Platform.isLoaded("railways")) {
// Only do this block if Steam and Rails is not loaded. Else, let the Steam and Rails KJS file handle the track recipes.
event.remove({ output: "create:track" })
event.shaped("create:track", [
" ",
"IHI",
"SSS"
], {
H: "#forge:tools/hammers",
I: "minecraft:iron_nugget",
S: "#create:sleepers"
})
event.recipes.gtceu.assembler("kubejs:createtracks")
.itemInputs("3x #create:sleepers", "2x minecraft:iron_nugget")
.itemOutputs("2x create:track")
.duration(5)
.EUt(16)
} else { console.log("Steam and Rails is present, letting its compat script handle the track recipes.") }
// stone variant rock crusher recipes
let rockCrushing = function (modName, itemName, EUt) {
return event.recipes.gtceu.rock_breaker(`kubejs:${itemName}`)
.notConsumable(`${modName}:${itemName}`)
.itemOutputs(`${modName}:${itemName}`)
.addDataString("fluidA", "minecraft:lava")
.addDataString("fluidB", "minecraft:water")
.duration(16)
.EUt(EUt)
.addCondition(RockBreakerCondition.INSTANCE)
}
rockCrushing("minecraft", "dripstone_block", 60)
rockCrushing("minecraft", "tuff", 60)
rockCrushing("minecraft", "calcite", 60)
rockCrushing("create", "asurine", 60)
rockCrushing("create", "crimsite", 60)
rockCrushing("create", "limestone", 60)
rockCrushing("create", "ochrum", 60)
rockCrushing("create", "scoria", 480)
rockCrushing("create", "scorchia", 480)
rockCrushing("create", "veridium", 60)
// stone variant reconstruction recipes
let owStone = [["minecraft", "stone"], ["create", "asurine"], ["create", "crimsite"], ["create", "limestone"], ["create", "ochrum"], ["create", "veridium"], ["minecraft", "stone"]]
let neStone = [["minecraft", "blackstone"], ["create", "scoria"], ["create", "scorchia"], ["minecraft", "blackstone"]]
for (let i = 0; i < owStone.length - 1; ++i) {
event.recipes.gtceu.atomic_reconstruction(`kubejs:stone_reconstruction/${owStone[i][1]}`)
.itemInputs(`${owStone[i][0]}:${owStone[i][1]}`)
.itemOutputs(`${owStone[i + 1][0]}:${owStone[i + 1][1]}`)
.duration(20)
.EUt(32)
}
for (let i = 0; i < neStone.length - 1; ++i) {
event.recipes.gtceu.atomic_reconstruction(`kubejs:stone_reconstruction/${neStone[i][1]}`)
.itemInputs(`${neStone[i][0]}:${neStone[i][1]}`)
.itemOutputs(`${neStone[i + 1][0]}:${neStone[i + 1][1]}`)
.duration(20)
.EUt(32)
}
// remove unused recipe types
event.remove({ type: "create:pressing" })
event.remove({ type: "create:compacting" })
event.remove({ type: "create:milling" })
event.remove({ type: "create:crushing" })
event.remove({ type: "create:mixing" })
// Deploying recipes are fine
// Remove sawing recipes. Mechanical saws can still be used for stonecutting and in world tree cutting
event.remove({ type: "create:cutting" })
// Packager and Logistics
event.shaped("create:packager", [
"S S",
"SCS",
"SLS"
], {
L: "#gtceu:circuits/lv",
C: "create:cardboard_block",
S: "gtceu:steel_plate"
}).id("create:crafting/logistics/packager")
event.shaped("create:stock_ticker", [
" G ",
" C ",
" L "
], {
L: "#gtceu:circuits/mv",
C: "create:stock_link",
G: "#forge:glass"
}).id("create:crafting/logistics/stock_ticker")
event.shapeless("2x create:factory_gauge ", ["create:stock_link", "create:precision_mechanism", "#gtceu:circuits/hv"]).id("create:crafting/logistics/factory_gauge")
// Pulp
event.shaped("2x create:pulp", [
" ",
"RRR",
" H "
], {
H: "#forge:tools/mortars",
R: "gtceu:plant_ball"
})
event.recipes.gtceu.mixer("kubejs:pulp_wood")
.itemInputs("gtceu:wood_dust")
.inputFluids("minecraft:water 100")
.itemOutputs("create:pulp")
.duration(100)
.EUt(16)
.circuit(1)
event.recipes.gtceu.compressor("kubejs:pulp_plant")
.itemInputs("gtceu:plant_ball")
.itemOutputs("create:pulp")
.duration(20)
.EUt(2)
event.smelting("create:cardboard", "create:pulp")
})
console.log("Create compat scripts successfully loaded!")
} else { console.log("Create was not found, skipping its compat scripts.") }