This commit is contained in:
Shiroyasha 2025-09-14 20:52:18 +03:00
commit d8d0e9d536
Signed by: shiroyashik
GPG key ID: E4953D3940D7860A
2567 changed files with 167778 additions and 0 deletions

View file

@ -0,0 +1,257 @@
/**
* Block Registry - defines ID, name,
* block properties, and block tags of custom blocks.
*/
StartupEvents.registry("block", event => {
// Compressed Blocks
event.create("compressed_sand")
.displayName("Compressed Sand")
.soundType("sand")
.resistance(1).hardness(1)
.tagBlock("mineable/shovel").requiresTool(true)
.property(BlockProperties.FALLING);
event.create("double_compressed_sand")
.displayName("Double Compressed Sand")
.soundType("sand")
.resistance(2).hardness(2)
.tagBlock("mineable/shovel").requiresTool(true)
.property(BlockProperties.FALLING);
event.create("compressed_red_sand")
.displayName("Compressed Red Sand")
.soundType("sand")
.resistance(1).hardness(1)
.tagBlock("mineable/shovel").requiresTool(true)
.property(BlockProperties.FALLING);
event.create("double_compressed_red_sand")
.displayName("Double Compressed Red Sand")
.soundType("sand")
.resistance(2).hardness(2)
.tagBlock("mineable/shovel").requiresTool(true)
.property(BlockProperties.FALLING);
event.create("infinity_dust_block", "falling")
.displayName("Infinity Dust Block")
.soundType("sand")
.resistance(0.6).hardness(0.5)
.tagBlock("mineable/shovel").requiresTool(true);
event.create("compressed_infinity_dust_block", "falling")
.displayName("Compressed Infinity Dust Block")
.soundType("sand")
.resistance(1).hardness(1)
.tagBlock("mineable/shovel").requiresTool(true);
event.create("double_compressed_infinity_dust_block", "falling")
.displayName("Double Compressed Infinity Dust Block")
.soundType("sand")
.resistance(2).hardness(2)
.tagBlock("mineable/shovel").requiresTool(true);
// Micro Miner Cores/Frames
event.create("electrum_micro_miner_core")
.displayName("Electrum Micro Miner Engine Core")
.soundType("metal")
.resistance(3)
.hardness(3)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true)
.defaultCutout();
event.create("signalum_micro_miner_core")
.displayName("Signalum Micro Miner Engine Core")
.soundType("metal")
.resistance(4)
.hardness(4)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true)
.defaultCutout();
event.create("enderium_micro_miner_core")
.displayName("Enderium Micro Miner Engine Core")
.soundType("metal")
.resistance(5)
.hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true)
.defaultCutout();
event.create("electrum_micro_miner_frame")
.displayName("Electrum Micro Miner Engine Frame")
.soundType("metal")
.resistance(3)
.hardness(3)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true)
.defaultCutout();
event.create("signalum_micro_miner_frame")
.displayName("Signalum Micro Miner Engine Frame")
.soundType("metal")
.resistance(4)
.hardness(4)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true)
.defaultCutout();
event.create("enderium_micro_miner_frame")
.displayName("Enderium Micro Miner Engine Frame")
.soundType("metal")
.resistance(5)
.hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true)
.defaultCutout();
event.create("warp_core")
.displayName("Warp Core")
.soundType("metal")
.resistance(6).hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true);
event.create("warp_controller")
.displayName("Warp Controller")
.soundType("metal")
.resistance(6).hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true);
event.create("universal_warp_core")
.displayName("Universal Warp Core")
.soundType("metal")
.resistance(6).hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true);
event.create("universal_warp_controller")
.displayName("Universal Warp Controller")
.soundType("metal")
.resistance(6).hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true);
// Dense Ores
const ores = [
"redstone",
"diamond",
"emerald",
"gold",
"lapis",
"iron",
"coal",
"copper",
"nether_quartz",
"oilsands"
]
ores.forEach(ore => {
event.create(`dense_${ore}_ore`)
.soundType("stone")
.resistance(6)
.hardness(5)
.tagBlock("mineable/pickaxe")
.tagBoth("forge:ores/dense")
.tagBoth(`forge:ores/dense/${ore}`)
.requiresTool(true);
});
event.create("dense_magma_block")
.soundType("stone")
.resistance(6)
.hardness(5)
.tagBlock("mineable/pickaxe")
.tagBoth("forge:ores/dense")
.tagBoth("forge:ores/dense/magma")
.requiresTool(true)
.lightLevel(1.0);
// Machine Casings
const casings = [
"microverse",
"dark_soularium",
"omnic_matrix_machine",
"dimensional_stabilization_netherite",
"cryolobus",
"bioalloy",
"bioalloy_fusion",
]
casings.forEach(casing => {
event.create(`${casing}_casing`)
.soundType("metal")
.resistance(6).hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true);
});
// Misc
event.create("starry_diamond_block")
.displayName("Starry Diamatine Block")
.soundType("metal")
.resistance(6).hardness(5)
.tagBlock("mineable/pickaxe").requiresTool(true)
.textureAll("kubejs:block/microverse/starry_diamond_block");
event.create("dust", "falling")
.soundType("sand")
.resistance(0.4).hardness(0.4)
.tag("mineable/shovel").displayName("Dust Block")
.property(BlockProperties.FALLING);
event.create("dark_steel_machine_hull")
.displayName("Dark Steel Machine Hull")
.soundType("metal")
.resistance(6).hardness(5)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true);
event.create("excitationcoil", "cardinal")
.displayName("Excitation Coil")
.soundType("metal")
.renderType("cutout")
.box(3, 0, 3, 13, 1, 13)
.box(4, 1, 4, 12, 9, 12)
.tag("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.requiresTool(true);
event.create("omnic_matrix_coil_block", "gtceu:coil")
.temperature(12600)
.level(16)
.energyDiscount(16)
.tier(8)
.coilMaterial(() => GTMaterials.get("omnium"))
.hardness(5)
.requiresTool(true)
.tagBlock("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.soundType("metal")
event.create("meowni_plush", "cardinal")
.displayName("Meowni Plush")
.soundType("wool")
.renderType("cutout")
.tag("mineable/pickaxe")
.tagBlock("forge:mineable/wrench")
.defaultCutout();
});

View file

@ -0,0 +1,30 @@
/**
* Fluid Registry - defines ID, name,
* color, and temperature of custom fluids.
*/
StartupEvents.registry("fluid", event => {
// Thermal Expansion Fluids
event.create("molten_pyrotheum")
.bucketColor(Color.rgba(247, 219, 58, 255))
.displayName("§6Blazing Pyrotheum") // orange
.temperature(8190)
.stillTexture("kubejs:block/pyrotheum_still")
.flowingTexture("kubejs:block/pyrotheum_flow");
event.create("molten_cryotheum")
.bucketColor(Color.rgba(67, 244, 247, 255))
.displayName("§bGelid Cryotheum") // aqua
.temperature(5)
.stillTexture("kubejs:block/cryotheum_still")
.flowingTexture("kubejs:block/cryotheum_flow");
event.create("molten_petrotheum")
.bucketColor(Color.rgba(26, 19, 16, 255))
.displayName("§8Tectonic Petrotheum") // darkGray
.stillTexture("kubejs:block/petrotheum_still")
.flowingTexture("kubejs:block/petrotheum_flow");
event.create("molten_aerotheum")
.bucketColor(Color.rgba(200, 218, 148, 255))
.displayName("§7Zephyrean Aerotheum") // gray
.stillTexture("kubejs:block/aerotheum_still")
.flowingTexture("kubejs:block/aerotheum_flow");
})

View file

@ -0,0 +1,531 @@
/**
* Item Registry - defines ID, name, texture
* and certain other properties of custom items.
*/
StartupEvents.registry("item", event => {
const miners = [
"1",
"2",
"2half",
"2half_damaged",
"3",
"4",
"4half",
"4half_damaged",
"5",
"6",
"6_damaged",
"7",
"7_damaged",
"8",
"8_damaged",
"8half",
"9",
"10",
"11",
"12"
]
const stabilized_miners = [
"2half",
"4half",
"6",
"7",
"8",
]
// Regular Microminers
for (const tier of miners) {
event.create(`microminer_t${tier}`).maxStackSize(16).texture(`kubejs:item/microverse/microminer_t${tier}`)
}
// Stabilized Miners
for (const tier of stabilized_miners) {
event.create(`stabilized_microminer_t${tier}`)
.maxStackSize(16)
.texture(`kubejs:item/microverse/microminer_t${tier}`)
.glow(true);
}
// Microminer Components
event.create("basic_mining_laser").displayName("§eBasic Mining Laser")
event.create("reinforced_mining_laser").displayName("§bReinforced Mining Laser")
event.create("supercharged_laser_array").displayName("§eSupercharged Laser Array")
event.create("basic_micro_miner_guidance_system").displayName("§eBasic Micro Miner Guidance System")
event.create("advanced_micro_miner_guidance_system").displayName("§eAdvanced Micro Miner Guidance System")
event.create("warp_engine").displayName("§dWarp Engine")
event.create("hadal_warp_engine").displayName("§dHadal Warp Engine")
event.create("universal_navigator").displayName("§dUniversal Navigator")
event.create("extradimensional_navigator").displayName("§dExtradimensional Navigator")
// Quantum Flux
event.create("quantum_flux").displayName("§dQuantum Flux")
// Miner kits
event.create("gem_sensor").maxStackSize(16).displayName("Gemstone Sensor")
event.create("basic_drilling_kit").maxStackSize(16).texture("kubejs:item/miner_kits/basic_drilling_kit")
event.create("advanced_drilling_kit").maxStackSize(16).texture("kubejs:item/miner_kits/advanced_drilling_kit")
event.create("elite_drilling_kit").maxStackSize(16).texture("kubejs:item/miner_kits/elite_drilling_kit")
event.create("blasting_kit").maxStackSize(16).texture("kubejs:item/miner_kits/blasting_kit")
event.create("microversal_alchemy_kit").maxStackSize(16).texture("kubejs:item/miner_kits/microversal_alchemy_kit")
// T9+ Devices
event.create("gravitational_amplifier").maxStackSize(16)
event.create("universal_collapse_device").maxStackSize(16)
// Heavy platings
event.create("quantum_fluxed_eternium_heavy_plating")
.displayName("§dQuantum Fluxed Eternium Heavy Plating")
.texture("kubejs:item/microverse/eternium_heavy_plating")
event.create("universe_resistant_neutronium_heavy_plating")
.displayName("§dUniverse Resistant Neutronium Heavy Plating")
.texture("kubejs:item/microverse/neutronium_heavy_plating")
event.create("elementally_infused_omnic_matrix_heavy_plating")
.displayName("§dElementally Infused Omnic Matrix Heavy Plating")
.texture("kubejs:item/microverse/omnic_matrix_heavy_plating")
event.create("dimensionally_stabilized_infinity_heavy_plating")
.displayName("§dDimensionally Stabilized Infinity Heavy Plating")
.texture("kubejs:item/microverse/infinity_heavy_plating")
event.create("timeless_monic_heavy_plating")
.displayName("§dTimeless Monic Heavy Plating")
.texture("kubejs:item/microverse/dormant_monic_heavy_plating")
event.create("causality_exempt_monic_heavy_plating")
.displayName("§1Causality Exempt Monic Heavy Plating")
.texture("kubejs:item/microverse/monic_heavy_plating")
// Monicoins
if (doMonicoins) {
event.create("moni_penny")
}
event.create("moni_nickel")
event.create("moni_quarter")
event.create("moni_dollar").glow(true)
// Widgets
event.create("wooden_widget").displayName("Wooden Widget")
event.create("wooden_widget_left").displayName("Wooden Widget Left Part")
event.create("wooden_widget_right").displayName("Wooden Widget Right Part")
event.create("stone_widget").displayName("Stone Widget")
event.create("stone_widget_up").displayName("Stone Widget Up Side")
event.create("stone_widget_down").displayName("Stone Widget Down Side")
event.create("alloy_widget").displayName("Alloy Widget")
event.create("ender_widget").displayName("Ender Widget")
// Magnetron
if (doHarderProcessing) {
event.create("magnetron")
}
// Spacefaring Items
event.create("radiation_layer")
event.create("pressure_layer")
event.create("thermal_cloth")
event.create("unprepared_space_helmet")
event.create("unprepared_space_suit")
event.create("unprepared_space_pants")
event.create("unprepared_space_boots")
// Data
event.create("impossible_realm_data").displayName("§bImpossible Realm Data")
event.create("dragon_lair_data").displayName("§dDragon Lair Data")
event.create("wither_realm_data").displayName("§dWither Realm Data")
event.create("deep_dark_data").displayName("§dDeep Dark Data")
event.create("lair_of_the_warden_data").displayName("§dLair Of The Warden Data")
event.create("stellar_creation_data").displayName("§bStellar Creation Data")
event.create("universe_creation_data").displayName("§dUniverse Creation Data")
event.create("shattered_star_data").displayName("§dShattered Star Data")
event.create("shattered_universe_data").displayName("§dShattered Universe Data")
event.create("corrupted_universe_data").displayName("§dCorrupted Universe Data")
// Creative Data
event.create("omnic_data")
event.create("creative_storage_data")
event.create("creative_computation_data")
event.create("creative_energy_data")
// Infinity Fluid Cell Base
// Endgame Items
event.create("diamond_lattice")
event.create("neutron_emitter")
event.create("ultimate_gem").displayName("§dUltimate Gem").glow(true)
event.create("mote_of_omnium").displayName("Mote of Omnium")
.glow(true).rarity("epic")
event.create("heart_of_a_universe").displayName("§dHeart Of A Universe")
event.create("exotic_materials_catalyst").displayName("Exotic Materials Catalyst")
event.create("eternal_catalyst").displayName("Eternal Catalyst")
// Infinity
event.create("infinity_catalyst").rarity("epic")
event.create("dormant_furious_infinity_catalyst")
event.create("furious_infinity_catalyst").rarity("epic")
event.create("inert_serene_infinity_catalyst")
event.create("serene_infinity_catalyst").rarity("epic")
event.create("dormant_infinity_compound_ingot")
// Monium
event.create("field_stabilised_omnic_pulsar_compound")
event.create("quasi_stable_neutron_star").displayName("Quasi-Stable Neutron Star")
// Singularities
event.create("singularity_containment_unit")
event.create("contained_singularity")
// Infinity Tools
event.create("infinity_power_unit").rarity("epic").maxStackSize(1)
event.create("infinity_file").rarity("epic").maxStackSize(1)
event.create("infinity_hammer").rarity("epic").maxStackSize(1)
event.create("infinity_screwdriver").rarity("epic").maxStackSize(1)
event.create("infinity_wrench").rarity("epic").maxStackSize(1)
event.create("infinity_wire_cutter").rarity("epic").maxStackSize(1)
// Solidified Elements
const solidified_elements = [
["argon", "#12bc12"],
["chlorine", "#2d6d6d"],
["fluorine", "#4b7ba6"],
["helium", "#e8ea86"],
["hydrogen", "#12128a"],
["krypton", "#7ffe7f"],
["mercury", "#ad9dce"],
["neon", "#b88a8a"],
["nitrogen", "#129192"],
["oxygen", "#4494bc"],
["radon", "#bc38bc"],
["xenon", "#12bcbc"],
["experience", "#04ff00"]
]
for (const [element, elemColor] of solidified_elements) {
event.create(`solidified_${element}`)
.textureJson({ layer0: "kubejs:item/solidified_element" })
.color(0, elemColor);
}
// Dense Elemental Gasses (Solidification recipes are part of the Solidified Elements Section)
event.create("dense_hydrogen").rarity("Uncommon")
event.create("ultra_dense_hydrogen").rarity("Rare")
event.create("dense_helium").rarity("Uncommon")
event.create("ultra_dense_helium").rarity("Rare")
// Stabilized Elements
const stabilized_elements = [
["einsteinium", "#ce9f00"],
["berkelium", "#a33f20"],
["neptunium", "#486d7b"],
["plutonium", "#ba2727"],
["uranium", "#1d891d"],
["curium", "#58307f"],
["californium", "#7d0222"],
["americium", "#287869"],
["oganesson", "#443936"]
]
for (const [element, elemColor] of stabilized_elements) {
event.create(`stabilized_${element}`)
.textureJson({ layer0: "kubejs:item/stabilized_element" })
.color(0, elemColor);
}
// Misc Items
event.create("ender_star").glow(true)
event.create("endest_star").glow(true)
event.create("grains_of_innocence")
event.create("radium_salt").rarity("Epic")
// Thrusters
const thrusters = ["conductive_iron","leadstone","electrical_steel","hardened","energetic","reinforced","resonant","vibrant","dark_soularium","fluxed"]
thrusters.forEach(thruster => {
event.create(`${thruster}_thruster`).texture(`kubejs:item/thruster/${thruster}`)
})
// Planet dusts
event.create("moon_dust").texture("kubejs:item/regolith_dust/moon_dust")
event.create("mars_dust").texture("kubejs:item/regolith_dust/mars_dust")
event.create("venus_dust").texture("kubejs:item/regolith_dust/venus_dust")
event.create("mercury_dust").texture("kubejs:item/regolith_dust/mercury_dust")
event.create("glacio_dust").texture("kubejs:item/regolith_dust/glacio_dust")
// Thermal Series item ports
event.create("aerotheum_dust").texture("kubejs:item/aerotheum_blend")
event.create("cryotheum_dust").texture("kubejs:item/cryotheum_blend")
event.create("petrotheum_dust").texture("kubejs:item/petrotheum_blend")
event.create("pyrotheum_dust").texture("kubejs:item/pyrotheum_blend")
event.create("primal_mana").rarity("epic")
event.create("destabilized_clathrate").rarity("uncommon")
event.create("energized_clathrate").rarity("uncommon")
event.create("resonant_clathrate").rarity("rare")
// Ender Spore
if (!doHNN) {
event.create("ender_spore")
}
// Thermal Augments
event.create("redstone_transmission_coil")
event.create("thermal:upgrade_augment_1");
event.create("thermal:upgrade_augment_2");
event.create("thermal:upgrade_augment_4");
event.create("thermal:upgrade_augment_3");
// Advanced Thermal Storage augments
event.create("thermal:rf_coil_augment_advanced")
event.create("thermal:rf_coil_storage_augment_advanced")
event.create("thermal:rf_coil_xfer_augment_advanced")
event.create("thermal:fluid_tank_augment_advanced")
// Jetpack Units
event.create("empty_fluxed_jetpack_unit")
event.create("empty_soularium_jetpack_unit")
event.create("flight_control_unit")
event.create("glowstone_elevation_unit")
event.create("cryotheum_coolant_unit")
// EnderIO Capacitors
// TODO: GIVE CAPACITORS LORE AND NBT FOR THEM TO WORK
event.create("compressed_octadic_capacitor")
event.create("double_compressed_octadic_capacitor")
// Extra Utilities 2
event.create("resonating_crystal")
event.create("ender_shard")
// Nether Star Crafting Components
event.create("nether_star_north").displayName("Nether Star North Tip")
event.create("nether_star_south").displayName("Nether Star South Tip")
event.create("nether_star_east").displayName("Nether Star East Tip")
event.create("nether_star_west").displayName("Nether Star West Tip")
event.create("nether_star_center").displayName("Nether Star Center")
// ArmorPlus monster drops
event.create("guardian_scale").rarity("rare")
event.create("ender_dragon_scale").rarity("epic")
event.create("ender_dragon_scale_dust")
event.create("wither_bone")
event.create("the_ultimate_material")
// Pulsating Items
event.create("pulsating_mesh")
event.create("pulsating_dust")
// Sculk Items
event.create("warden_horn")
event.create("sculk_core")
event.create("mesol_energy_core")
event.create("bathyal_energy_core")
event.create("abyssal_energy_core")
event.create("hadal_energy_core")
event.create("dischargement_core")
event.create("warden_heart")
event.create("hadal_shard")
// Nethline intermediate products
event.create("purified_ancient_debris_dust").texture("kubejs:item/netherite/purified_ancient_debris_dust")
event.create("processed_ancient_debris_dust").texture("kubejs:item/netherite/processed_ancient_debris_dust")
event.create("inert_netherite_scrap").texture("kubejs:item/netherite/inert_netherite_scrap")
event.create("inert_nether_compound_ingot").texture("kubejs:item/netherite/inert_nether_compound_ingot")
// Solid Naquadah Fuel Line
event.create("empty_fuel_rod").texture("kubejs:item/naquadah/empty_fuel_rod")
event.create("naquadah_fuel_pellet").texture("kubejs:item/naquadah/naquadah_fuel_pellet")
event.create("naquadah_fuel_rod").texture("kubejs:item/naquadah/naquadah_fuel_rod")
event.create("hot_depleted_naquadah_fuel_rod").texture("kubejs:item/naquadah/hot_depleted_naquadah_fuel_rod")
event.create("depleted_naquadah_fuel_rod").texture("kubejs:item/naquadah/depleted_naquadah_fuel_rod")
event.create("unsintered_naquadah_fuel_pellet").texture("kubejs:item/naquadah/unsintered_naquadah_fuel_pellet")
event.create("depleted_naquadah_fuel_pellet").texture("kubejs:item/naquadah/depleted_naquadah_fuel_pellet")
event.create("naquadah_fuel_dust").texture("kubejs:item/naquadah/naquadah_fuel_dust")
event.create("naquadah_fuel_primer_dust").texture("kubejs:item/naquadah/naquadah_fuel_primer_dust")
event.create("naquadah_waste").texture("kubejs:item/naquadah/naquadah_waste")
event.create("inactivated_naquadah_fuel_dust").texture("kubejs:item/naquadah/inactivated_naquadah_fuel_dust")
event.create("depleted_naquadah_fuel_dust").texture("kubejs:item/naquadah/depleted_naquadah_fuel_dust")
event.create("crude_naquadah_fuel_blend").texture("kubejs:item/naquadah/crude_naquadah_fuel_blend")
event.create("hot_naquadah_fuel_crystal").texture("kubejs:item/naquadah/hot_naquadah_fuel_crystal")
event.create("naquadah_fuel_crystal").texture("kubejs:item/naquadah/naquadah_fuel_crystal")
event.create("naquadah_fuel_mixture_dust").texture("kubejs:item/naquadah/naquadah_fuel_mixture_dust")
// Crystal Matrix Line
event.create("raw_nanotube_substrate").texture("kubejs:item/matrix/raw_nanotube_substrate")
event.create("prepared_nanotube_substrate").texture("kubejs:item/matrix/prepared_nanotube_substrate")
event.create("cobalt_nanoparticles").texture("kubejs:item/matrix/cobalt_nanoparticles")
event.create("grown_nanotube_substrate").texture("kubejs:item/matrix/grown_nanotube_substrate")
event.create("carbon_nanotubes").texture("kubejs:item/matrix/carbon_nanotubes")
event.create("porous_matrix_mesh").texture("kubejs:item/matrix/porous_matrix_mesh")
event.create("dense_matrix_mesh").texture("kubejs:item/matrix/dense_matrix_mesh")
// Terbium Line
event.create("rare_earth_sulfate").texture("kubejs:item/terbium/rare_earth_sulfate")
event.create("rare_earth_oxide").texture("kubejs:item/terbium/rare_earth_oxide")
event.create("rare_earth_salt").texture("kubejs:item/terbium/rare_earth_salt")
// Sculk bioalloy processing intermediate products
event.create("sculk-compatible_trellis_microstructure").texture("kubejs:item/bioalloy/sculk-compatible_trellis_microstructure")
event.create("fibrinogenic_sculk_goo").texture("kubejs:item/bioalloy/fibrinogenic_sculk_goo")
event.create("sculk-saturated_microstructure_pulp").texture("kubejs:item/bioalloy/sculk-saturated_microstructure_pulp")
event.create("animated_bioalloy_pulp").texture("kubejs:item/bioalloy/animated_bioalloy_pulp")
// Alien Scrapline
event.create("alien_scrap")
event.create("ruined_hull")
event.create("ruined_machine_parts")
event.create("ruined_capacitor")
event.create("ruined_sensor")
event.create("ruined_emitter")
event.create("crushed_capacitor")
event.create("magnetic_capacitor_dust")
event.create("crushed_sensor")
event.create("holmium_compound")
event.create("holmium_oxide_glass_dust")
// Eltz metal processing intermediate products
event.create("reactive_dust_mixture").textureJson({ layer0: "kubejs:item/eltz/reactive_dust_mixture_base", layer1: "kubejs:item/eltz/reactive_dust_mixture_overlay" })
event.create("inert_dust_mixture").texture("kubejs:item/eltz/inert_dust_mixture")
event.create("dusty_inert_powder").texture("kubejs:item/eltz/dusty_inert_powder")
event.create("shiny_powder_mixture").texture("kubejs:item/eltz/shiny_powder_mixture")
event.create("shiny_metal_powder").texture("kubejs:item/eltz/shiny_metal_powder")
event.create("inert_clumps").texture("kubejs:item/eltz/inert_clumps")
event.create("clean_inert_cluster").texture("kubejs:item/eltz/clean_inert_cluster")
event.create("eltic_crystal_seed").texture("kubejs:item/eltz/eltic_crystal_seed")
// Post-Tank Wafer items
event.create("uxpic_wafer").texture("kubejs:item/uxpic/uxpic_wafer").displayName("UXPIC Wafer")
event.create("uxpic_chip").texture("kubejs:item/uxpic/uxpic_chip").displayName("UXPIC Chip")
event.create("universe_boule").texture("kubejs:item/universalwafer/universal_boule").displayName("Universe-doped Monocrystalline Silicon Boule")
event.create("universe_wafer").texture("kubejs:item/universalwafer/universal_wafer").displayName("Universe-doped Wafer")
event.create("unactivated_multidimensional_cpu_wafer").texture("kubejs:item/multidimensionalcpu/unactivated_multidimensional_cpu_wafer").displayName("Unactivated Multidimensional CPU Wafer")
event.create("multidimensional_cpu_wafer").texture("kubejs:item/multidimensionalcpu/multidimensional_cpu_wafer").displayName("Multidimensional CPU Wafer")
event.create("multidimensional_cpu_chip").texture("kubejs:item/multidimensionalcpu/multidimensional_cpu_chip").displayName("Multidimensional CPU Chip")
event.create("hyperdynamic_ram_wafer").texture("kubejs:item/hyperdynamicram/hyperdynamic_ram_wafer").displayName("Hyperdynamic RAM Wafer")
event.create("hyperdynamic_ram_chip_base").texture("kubejs:item/hyperdynamicram/hyperdynamic_ram_chip").displayName("Hyperdynamic RAM Chip Base")
event.create("hyperdynamic_ram_chip").texture("kubejs:item/hyperdynamicram/activated_hyperdynamic_ram_chip").displayName("Hyperdynamic RAM Chip")
event.create("quantum_soc_wafer").texture("kubejs:item/quantumsoc/quantum_soc_wafer").displayName("Quantum SoC Wafer")
event.create("quantum_soc_chip_base").texture("kubejs:item/quantumsoc/quantum_soc_chip_base").displayName("Quantum SoC Chip Base")
event.create("quantum_soc_chip").texture("kubejs:item/quantumsoc/quantum_soc_chip").displayName("Quantum SoC Chip")
// Complex SMDs
const smds = [
"transistor",
"resistor",
"capacitor",
"diode",
"inductor"
]
for (const name of smds) {
event.create(`complex_smd_${name}`)
}
// Post-tank circuits, circuit boards, processing units
function Circuit(theme, type, volt) {
event.create(`${theme}_${type}`)
.textureJson({ layer0: `kubejs:item/circuits/${theme}_${type}` })
.tag(`gtceu:circuits/${volt}`)
}
function Mainframe(theme, volt) {
event.create(`${theme}_processor_mainframe`)
.textureJson({ layer0: `kubejs:item/circuits/${theme}_processor_mainframe_base`, layer1: `kubejs:item/circuits/${theme}_processor_mainframe_lights` })
.tag(`gtceu:circuits/${volt}`)
}
function Unit(theme) {
event.create(`${theme}_processing_unit`)
.textureJson({ layer0: `kubejs:item/circuits/${theme}_processing_unit` })
event.create(`${theme}_circuit_board`)
.textureJson({ layer0: `kubejs:item/circuits/${theme}_circuit_board` })
}
Unit("matter")
Circuit("matter", "processor", "zpm")
Circuit("matter", "processor_assembly", "uv")
Circuit("matter", "processor_computer", "uhv")
Mainframe("matter", "uev")
Unit("dimensional")
Circuit("dimensional", "processor", "uv")
Circuit("dimensional", "processor_assembly", "uhv")
Circuit("dimensional", "processor_computer", "uev")
Mainframe("dimensional", "uiv")
Unit("monic")
Circuit("monic", "processor", "uhv")
Circuit("monic", "processor_assembly", "uev")
Circuit("monic", "processor_computer", "uiv")
Mainframe("monic", "max")
// Smores
const smoreHunger = [
4, 10, 22, 46, 94, 190, 382
]
const smoreSaturation = [
12, 76, 379, 1675, 7032, 28805, 116587
]
let effDuration = 300;
for (let i = 0; i <= 6; i++) {
event.create(`smore_${2 ** i}`).food(food => {
food.hunger(smoreHunger[i] * 2);
food.saturation(smoreSaturation[i] / (1 + 4 * smoreHunger[i]) * 2);
food.effect("absorption", effDuration, 1, 1);
food.effect("speed", effDuration, 1, 1);
food.effect("haste", effDuration, 1, 1);
if (i > 2) {
food.effect("saturation", effDuration, 1, 1);
food.effect("health_boost", effDuration, 1, 1);
}
food.alwaysEdible();
}).maxStackSize(64)
effDuration *= 2;
}
// Universal Circuits
const tiers = ["ulv", "lv", "mv", "hv", "ev", "iv", "luv", "zpm", "uv", "uhv", "uev", "uiv"]
tiers.forEach((universal_circuit) => {
event.create(`${universal_circuit}_universal_circuit`)
.tag(`gtceu:circuits/${universal_circuit}`)
.tag("gtceu:circuits/universal")
.displayName(`${universal_circuit.toUpperCase()} Universal Circuit`)
.tooltip("§7A Universal Circuit")
.textureJson({ layer0: `kubejs:item/circuits/universal/${universal_circuit}_universal_circuit` })
})
// Phantom Paste
event.create("framedblocks:phantom_paste")
})

View file

@ -0,0 +1,898 @@
/**
* Multiblock Registry.
* This is the place custom multiblock recipes (Like Discharging) are defined.
* It is also where
*/
const Tags = Java.loadClass("dev.latvian.mods.kubejs.util.Tags")
const FusionReactorMachine = Java.loadClass("com.gregtechceu.gtceu.common.machine.multiblock.electric.FusionReactorMachine")
const CoilWorkableElectricMultiblockMachine = Java.loadClass("com.gregtechceu.gtceu.api.machine.multiblock.CoilWorkableElectricMultiblockMachine")
GTCEuStartupEvents.registry("gtceu:recipe_type", event => {
// Normal mode-exclusive Multis
if (doHNN) {
// Simulation Supercomputer
event.create("simulation_supercomputer")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(2, 2, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.COMPUTATION)
.setSound(GTSoundEntries.ASSEMBLER)
// Loot Superfabricator
event.create("loot_superfabricator")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(2, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.COMPUTATION)
}
// Hard mode-exclusive Multis
// Actualization Chamber
event.create("actualization_chamber")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(2, 20, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.COOLING)
// Universal Crystallizer
event.create("universal_crystallizer")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(9, 1, 1, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.COMPUTATION)
// Microverse Projector Recipe Type
event.create("microverse")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(9, 9, 3, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.COOLING);
// Naquadah Reactor I Recipe type
event.create("naquadah_reactor")
.category("multiblock")
.setEUIO("out")
.setMaxIOSize(1, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.ARC);
// Large Naquadah Reactor Recipe Type
event.create("large_naquadah_reactor")
.category("multiblock")
.setEUIO("out")
.setMaxIOSize(1, 1, 2, 2)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.ARC)
// Naquadah Fuel Refinery
event.create("naquadah_refinery")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(6,0,4,1)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.COOLING)
// Greenhouse
event.create("greenhouse")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(3, 6, 1, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.TURBINE)
// Subatomic Digital Assembler
event.create("subatomic_digital_assembly")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(2, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.COOLING)
// Omnic Forge
event.create("omnic_forge")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(6, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_CRYSTALLIZATION, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.ARC)
// Quintessence Infuser
event.create("quintessence_infuser")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(2, 2, 1, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.CENTRIFUGE)
// Rock Cycle Simulator
event.create("rock_cycle_simulator")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(1, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_MACERATE, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.MINER)
// Discharger
event.create("discharger")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(9, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.ELECTROLYZER)
// Charger
event.create("charger")
.category("multiblock")
.setEUIO("in")
.setMaxIOSize(3, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.ELECTROLYZER)
})
GTCEuStartupEvents.registry("gtceu:machine", event => {
// EMI displays microverse projector tier
GTRecipeTypes.get("microverse").addDataInfo((data) => ("Projector Tier: " + data.getByte("projector_tier"))); // todo: get Text.translatable to work
// Normal mode-exclusive multis
if (doHNN) {
// Simulation Supercomputer
event.create("simulation_supercomputer", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("simulation_supercomputer")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(GCYMBlocks.CASING_ATOMIC)
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCCCC", "VEEEV", "VEEEV", "VEEEV", "CCCCC")
.aisle("CCCCC", "QOOOQ", "VOOOV", "QOOOQ", "CCCCC")
.aisle("CCCCC", "QOOOQ", "VO OV", "QOOOQ", "CCCCC")
.aisle("CCCCC", "QOOOQ", "VOOOV", "QOOOQ", "CCCCC")
.aisle("CC@CC", "VEQEV", "VQQQV", "VEQEV", "CCCCC")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("V", Predicates.blocks(GCYMBlocks.CASING_VIBRATION_SAFE.get()))
.where("E", Predicates.blocks("gtceu:enderium_block"))
.where("O", Predicates.blocks("gtceu:omnium_block"))
.where("Q", Predicates.blocks("ae2:quartz_vibrant_glass"))
.where("G", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get()))
.where("C", Predicates.blocks(GCYMBlocks.CASING_ATOMIC.get()).setMinGlobalLimited(40)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)))
.where(" ", Predicates.air())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/atomic_casing",
"gtceu:block/multiblock/fusion_reactor", false)
// Loot Superfabricator
event.create("loot_superfabricator", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("loot_superfabricator")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(GCYMBlocks.CASING_ATOMIC)
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCCCC", "VEEEV", "VEEEV", "VEEEV", "CCCCC")
.aisle("CCCCC", "QOOOQ", "VOOOV", "QOOOQ", "CCCCC")
.aisle("CCCCC", "QOOOQ", "VO OV", "QOOOQ", "CCCCC")
.aisle("CCCCC", "QOOOQ", "VOOOV", "QOOOQ", "CCCCC")
.aisle("CC@CC", "VEQEV", "VQQQV", "VEQEV", "CCCCC")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("V", Predicates.blocks(GCYMBlocks.CASING_SHOCK_PROOF.get()))
.where("E", Predicates.blocks("gtceu:energetic_alloy_block"))
.where("O", Predicates.blocks("gtceu:omnium_block"))
.where("Q", Predicates.blocks("ae2:quartz_vibrant_glass"))
.where("G", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get()))
.where("C", Predicates.blocks(GCYMBlocks.CASING_ATOMIC.get()).setMinGlobalLimited(40)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)))
.where(" ", Predicates.air())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/atomic_casing",
"gtceu:block/multiblock/fusion_reactor", false)
}
// Universal Crystallizer
event.create("universal_crystallizer", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("universal_crystallizer")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(GCYMBlocks.CASING_LASER_SAFE_ENGRAVING)
.pattern(definition => FactoryBlockPattern.start()
.aisle("XXXXXXX", "XGGGGGX", "XGGGGGX", "XGGGGGX", "XGGGGGX", "XGGGGGX", "XXXXXXX")
.aisle("XXXXXXX", "G G", "G G", "F F", "G G", "G G", "XGGGGGX")
.aisle("XXXXXXX", "G CCC G", "F C C F", "FTC CTF", "F C C F", "G CCC G", "XGGGGGX")
.aisle("XXXXXXX", "F CCC F", "FT TF", "FTBRBTF", "FT TF", "F CCC F", "XGGGGGX")
.aisle("XXXXXXX", "G CCC G", "F C C F", "FTC CTF", "F C C F", "G CCC G", "XGGGGGX")
.aisle("XXXXXXX", "G G", "G G", "F F", "G G", "G G", "XGGGGGX")
.aisle("XXX@XXX", "XGGGGGX", "XGGGGGX", "XGGGGGX", "XGGGGGX", "XGGGGGX", "XXXXXXX")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("X", Predicates.blocks(GCYMBlocks.CASING_LASER_SAFE_ENGRAVING.get()).setMinGlobalLimited(80)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1)))
.where("C", Predicates.blocks(GTBlocks.FUSION_COIL.get()))
.where("F", Predicates.frames((doHarderProcessing ? GTMaterials.Berkelium : GTMaterials.Neutronium)))
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get()))
.where("T", Predicates.blocks((doStoneline ? "gtceu:taranium_block" : "gtceu:actinium_block")))
.where("B", Predicates.blocks("kubejs:omnic_matrix_machine_casing"))
.where("R", Predicates.blocks("kubejs:enderium_micro_miner_core"))
.where(" ", Predicates.air())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/laser_safe_engraving_casing",
"gtceu:block/multiblock/gcym/large_autoclave", false)
// Helical Fusion Reactor
event.create("helical_fusion_reactor", "multiblock")
.machine((holder) => new FusionReactorMachine(holder, GTValues.UEV))
.rotationState(RotationState.ALL)
.recipeTypes(GTRecipeTypes.FUSION_RECIPES)
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, MachineModifiers.FUSION_REACTOR])
.appearanceBlock(GCYMBlocks.CASING_ATOMIC)
.pattern(definition => FactoryBlockPattern.start()
.aisle("#######################", "#######################", "#######################", "###F##F#N#####N#F##F###", "###FNNFNN#####NNFNNF###", "###F##F#N#####N#F##F###", "#######################", "#######################", "#######################")
.aisle("#######################", "###F##F###NNN###F##F###", "###F##F##N###N##F##F###", "###ECCBC#######CBCCE###", "###BBBBC#######CBBBB###", "###ECCBC#######CBCCE###", "###F##F##N###N##F##F###", "###F##F###NNN###F##F###", "#######################")
.aisle("#######################", "###F##F##N###N##F##F###", "##DDDDDDD#####DDDDDDD##", "#CDTTTTTDCCCCCDTTTTTDC#", "#CDTTTTTDCGGGCDTTTTTDC#", "#CDTTTTTDCCCCCDTTTTTDC#", "##DDDDDDD#####DDDDDDD##", "###F##F##N###N##F##F###", "#######################")
.aisle("###F##F#N#####N#F##F###", "###ECCBC#######CBCCE###", "#CDTTTTTDCCCCCDTTTTTDC#", "C C", "C C", "C C", "#CDTTTTTDCCCCCDTTTTTDC#", "###ECCBC#######CBCCE###", "###F##F#N#####N#F##F###")
.aisle("###FNNFNN#####NNFNNF###", "###BBBBC#######CBBBB###", "#CDTTTTTDCGGGCDTTTTTDC#", "C C", "G G", "C C", "#CDTTTTTDCGGGCDTTTTTDC#", "###BBBBC#######CBBBB###", "###FNNFNN#####NNFNNF###")
.aisle("###F##F#N#####N#F##F###", "###ECCBC#######CBCCE###", "#CDTTTTTDCCCCCDTTTTTDC#", "C C", "C C", "C C", "#CDTTTTTDCCCCCDTTTTTDC#", "###ECCBC#######CBCCE###", "###F##F#N#####N#F##F###")
.aisle("#######################", "###F##F##N###N##F##F###", "##DDDDDDD#####DDDDDDD##", "#CDTTTTTDCC@CCDTTTTTDC#", "#CDTTTTTDCGGGCDTTTTTDC#", "#CDTTTTTDCCCCCDTTTTTDC#", "##DDDDDDD#####DDDDDDD##", "###F##F##N###N##F##F###", "#######################")
.aisle("#######################", "###F##F###NNN###F##F###", "###F##F##N###N##F##F###", "###ECCBC#######CBCCE###", "###BBBBC#######CBBBB###", "###ECCBC#######CBCCE###", "###F##F##N###N##F##F###", "###F##F###NNN###F##F###", "#######################")
.aisle("#######################", "#######################", "#######################", "###F##F#N#####N#F##F###", "###FNNFNN#####NNFNNF###", "###F##F#N#####N#F##F###", "#######################", "#######################", "#######################")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("B", Predicates.blocks(GCYMBlocks.CASING_ATOMIC.get()))
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get())
.or(Predicates.blocks(GCYMBlocks.CASING_ATOMIC.get())))
.where("E", Predicates.abilities(PartAbility.INPUT_ENERGY)
.setMinGlobalLimited(1)
.setMaxGlobalLimited(16)
.setPreviewCount(16)
.or(Predicates.blocks(GCYMBlocks.CASING_ATOMIC.get())))
.where("C", Predicates.blocks(GCYMBlocks.CASING_ATOMIC.get()).setMinGlobalLimited(130)
.or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setMinGlobalLimited(2))
.or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setMinGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1)))
.where("D", Predicates.blocks("kubejs:bioalloy_fusion_casing"))
.where("F", Predicates.blocks("kubejs:omnic_matrix_coil_block"))
.where("T", Predicates.blocks(GTBlocks.COIL_TRITANIUM.get()))
.where("N", Predicates.frames(GTMaterials.get("activated_netherite")))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/atomic_casing",
"gtceu:block/multiblock/fusion_reactor", false)
// Greenhouse
event.create("greenhouse", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("greenhouse")
.appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
.pattern(definition => FactoryBlockPattern.start()
.aisle("SSSSS", "UDDDU", "UDDDU", "UUGUU", "#UUU#")
.aisle("SFFFS", "D###D", "D###D", "GO#OG", "#GEG#")
.aisle("SFFFS", "D###D", "D###D", "GO#OG", "#GEG#")
.aisle("SFFFS", "D###D", "D###D", "GO#OG", "#GEG#")
.aisle("SFFFS", "D###D", "D###D", "GO#OG", "#GEG#")
.aisle("SFFFS", "D###D", "D###D", "GO#OG", "#GEG#")
.aisle("SS@SS", "UDDDU", "UDDDU", "UUGUU", "#UUU#")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("S", Predicates.blocks(GTBlocks.CASING_STEEL_SOLID.get()).setMinGlobalLimited(8)
.or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where("U", Predicates.blocks(GTBlocks.CASING_STEEL_SOLID.get()))
.where("G", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get()))
.where("D", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get())
.or(Predicates.blockTag(Tags.block("minecraft:doors")).setMaxGlobalLimited(4)))
.where("O", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get())
.or(Predicates.any()))
.where("F", Predicates.blockTag(Tags.block("minecraft:dirt"))
.or(Predicates.blocks("minecraft:farmland"))
.or(Predicates.fluids("minecraft:water")))
.where("E", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get())
.or(Predicates.blocks(GTBlocks.CASING_STEEL_SOLID.get()))
.or(Predicates.blocks("minecraft:redstone_lamp")))
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/solid/machine_casing_solid_steel",
"gtceu:block/multiblock/implosion_compressor", false)
// Rock Cycle Simulator
event.create("rock_cycle_simulator", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("rock_cycle_simulator")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(GCYMBlocks.CASING_HIGH_TEMPERATURE_SMELTING)
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC")
.aisle("CCCCCCC", "TMMOIIT", "TMCCCIT", "CCCCCCC")
.aisle("CCC@CCC", "CTTTTTC", "CTCCCTC", "CCCCCCC")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("I", Predicates.blocks("minecraft:blue_ice"))
.where("M", Predicates.blocks("minecraft:magma_block"))
.where("O", Predicates.blocks(GTBlocks.CASING_TITANIUM_PIPE.get()))
.where("T", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get()))
.where("C", Predicates.blocks(GCYMBlocks.CASING_HIGH_TEMPERATURE_SMELTING.get()).setMinGlobalLimited(20)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
)
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/high_temperature_smelting_casing",
"gtceu:block/machines/rock_crusher", false)
// Atmospheric Accumulator
event.create("atmospheric_accumulator", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes(GTRecipeTypes.GAS_COLLECTOR_RECIPES)
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(GCYMBlocks.CASING_CORROSION_PROOF)
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCCCC", "C C", "CCCCC", "C C", "CCCCC", "C C", "CCCCC")
.aisle("CCCCC", " GIG ", "CGGGC", " GIG ", "CCCCC", " GIG ", "CIIIC")
.aisle("CCCCC", " IOI ", "CGOGC", " IOI ", "CCOCC", " IOI ", "CIOIC")
.aisle("CCCCC", " GIG ", "CGGGC", " GIG ", "CCCCC", " GIG ", "CIIIC")
.aisle("CC@CC", "C C", "CCCCC", "C C", "CCCCC", "C C", "CCCCC")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("I", Predicates.blocks(GTBlocks.CASING_ENGINE_INTAKE.get()))
.where("G", Predicates.blocks(GTBlocks.CASING_GRATE.get()))
.where("O", Predicates.blocks(GTBlocks.CASING_TITANIUM_PIPE.get()))
.where("C", Predicates.blocks(GCYMBlocks.CASING_CORROSION_PROOF.get()).setMinGlobalLimited(70)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
)
.where(" ", Predicates.air())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/corrosion_proof_casing",
"gtceu:block/machines/gas_collector", false)
// Matter Alterator
event.create("matter_alterator", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("atomic_reconstruction")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(GCYMBlocks.CASING_LASER_SAFE_ENGRAVING)
.pattern(definition => FactoryBlockPattern.start()
.aisle("#CCC#######", "#CGC#######", "#CGC#######", "#CGC#######", "#CCC#######",)
.aisle("CCCCC#F###F", "C CCCCCCC", "C CGGGGGC", "C CCCCCCC", "CCCCC######",)
.aisle("CCCCC######", "G CCCCCCCCC", "G F PC", "G CCCGGGGGC", "CCCCC######",)
.aisle("CCCCC#F###F", "C CCCCCCC", "C CGGGGGC", "C CCCCCCC", "CCCCC######",)
.aisle("#C@C#######", "#CGC#######", "#CGC#######", "#CGC#######", "#CCC#######",)
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("G", Predicates.blocks(GTBlocks.CASING_LAMINATED_GLASS.get()))
.where("P", Predicates.blocks("gtceu:palis_block"))
.where("F", Predicates.frames(GTMaterials.HastelloyC276))
.where("C", Predicates.blocks(GCYMBlocks.CASING_LASER_SAFE_ENGRAVING.get()).setMinGlobalLimited(50)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
)
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/laser_safe_engraving_casing",
"gtceu:block/machines/reconstructor", false)
// Compression Imploder
event.create("implosion_collider", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes(GTRecipeTypes.IMPLOSION_RECIPES)
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
.pattern(definition => FactoryBlockPattern.start()
.aisle("#########", "####E####", "###EEE###", "####E####", "#########", "#########")
.aisle("#########", "####E####", "###E2E###", "####E####", "#########", "#########")
.aisle("###SES###", "###SES###", "##SE ES##", "###SES###", "###SES###", "#########")
.aisle("##SSESS##", "##SOOOS##", "EEEO OEEE", "##SOOOS##", "##SSESS##", "#########")
.aisle("##EEEEE##", "EEEOOOEEE", "E4 3E", "EEEOOOEEE", "##EEEEE##", "#########")
.aisle("##SSESS##", "##SOOOS##", "EEEO OEEE", "##SOOOS##", "##SSESS##", "###SSS###")
.aisle("###SES###", "##SSESS##", "##SE ES##", "##SS SS##", "###S S###", "###SMS###")
.aisle("##F###F##", "##SSSSS##", "##SE1ES##", "###SSS###", "###SSS###", "###SSS###")
.aisle("#########", "###SSS###", "###S@S###", "###SSS###", "#########", "#########")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("S", Predicates.blocks(GTBlocks.CASING_STEEL_SOLID.get())
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
)
.where("O", Predicates.blocks("enderio:reinforced_obsidian_block"))
.where("E", Predicates.blocks(GTBlocks.CASING_HSSE_STURDY.get()))
.where("F", Predicates.frames(GTMaterials.BlackSteel))
.where("M", Predicates.abilities(PartAbility.MUFFLER))
.where("1", Predicates.blocks("minecraft:piston"))
.where("2", Predicates.blocks("minecraft:piston"))
.where("3", Predicates.blocks("minecraft:piston"))
.where("4", Predicates.blocks("minecraft:piston"))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/solid/machine_casing_solid_steel",
"gtceu:block/multiblock/implosion_compressor", false)
// Quintessence Infuser
event.create("quintessence_infuser", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("quintessence_infuser")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.appearanceBlock(() => Block.getBlock("kubejs:dark_soularium_casing"))
.pattern(definition => FactoryBlockPattern.start()
.aisle("#CCC#", "CCCCC", "HGGGH", "HGGGH", "HGGGH", "CCCCC", "#CCC#")
.aisle("CCCCC", "COOOC", "G#O#G", "G#O#G", "G#O#G", "C#O#C", "CCCCC")
.aisle("CCCCC", "COPOC", "GOPOG", "GOPOG", "GOPOG", "COPOC", "CCCCC")
.aisle("CCCCC", "COOOC", "G#O#G", "G#O#G", "G#O#G", "C#O#C", "CCCCC")
.aisle("#C@C#", "CCCCC", "HGGGH", "HGGGH", "HGGGH", "CCCCC", "#CCC#")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("H", Predicates.blocks("enderio:ensouled_chassis"))
.where("O", Predicates.frames(GTMaterials.Tungsten))
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get()))
.where("P", Predicates.blocks(GTBlocks.CASING_TUNGSTENSTEEL_PIPE.get()))
.where("C", Predicates.blocks("kubejs:dark_soularium_casing").setMinGlobalLimited(40)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
)
.where("#", Predicates.any())
.build())
.workableCasingRenderer("kubejs:block/soularium/casing",
"gtceu:block/multiblock/implosion_compressor", false)
// Subatomic Digital Assembler
event.create("subatomic_digital_assembler", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("subatomic_digital_assembly")
.noRecipeModifier()
.appearanceBlock(GCYMBlocks.CASING_ATOMIC)
.pattern(definition => FactoryBlockPattern.start()
.aisle("#CCCCC#", "#CCCCC#", "#CGGGC#", "#CGGGC#", "#CGGGC#", "#CGGGC#", "#CGGGC#", "#CCCCC#", "#CCCCC#")
.aisle("CCCCCCC", "CHMMMHC", "CH HC", "CH HC", "CH HC", "CH HC", "CH HC", "CHMMMHC", "CCCCCCC")
.aisle("CCCCCCC", "CMXYXMC", "G XYX G", "G XYX G", "G XYX G", "G XYX G", "G XYX G", "CMXYXMC", "CCCCCCC")
.aisle("CCCCCCC", "CMYYYMC", "G YYY G", "G YYY G", "G YYY G", "G YYY G", "G YYY G", "CMYYYMC", "CCCCCCC")
.aisle("CCCCCCC", "CMXYXMC", "G XYX G", "G XYX G", "G XYX G", "G XYX G", "G XYX G", "CMXYXMC", "CCCCCCC")
.aisle("CCCCCCC", "CHMMMHC", "CH HC", "CH HC", "CH HC", "CH HC", "CH HC", "CHMMMHC", "CCCCCCC")
.aisle("CCCCCCC", "CCCCCCC", "#CCCCC#", "#CCCCC#", "#CCCCC#", "#CCCCC#", "#CCCCC#", "CCCCCCC", "CCCCCCC")
.aisle("CCCCCCC", "#CCCCC#", "#CCCCC#", "#CNNNC#", "###N###", "###N###", "###N###", "#CNNNC#", "CCCCCCC")
.aisle("#CCCCC#", "##C@C##", "##CCC##", "#######", "#######", "#######", "#######", "#######", "#CCCCC#")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("G", Predicates.blocks(GTBlocks.CLEANROOM_GLASS.get()))
.where("H", Predicates.blocks(GTBlocks.HIGH_POWER_CASING.get()))
.where("M", Predicates.frames(GTMaterials.get("crystal_matrix")))
.where("N", Predicates.frames(GTMaterials.NaquadahAlloy))
.where("X", Predicates.blocks(GTBlocks.COMPUTER_CASING.get()))
.where("Y", Predicates.blocks(GTBlocks.ADVANCED_COMPUTER_CASING.get()))
.where("C", Predicates.blocks(GCYMBlocks.CASING_ATOMIC.get()).setMinGlobalLimited(220)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.COMPUTATION_DATA_RECEPTION).setExactLimit(1))
)
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/atomic_casing",
"gtceu:block/multiblock/fusion_reactor", false)
// Discharger
event.create("discharger", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("discharger")
.appearanceBlock(() => Block.getBlock("kubejs:cryolobus_casing"))
.generator(true)
.pattern(definition => FactoryBlockPattern.start()
.aisle("#CCCCC#", "#######", "#######", "#######", "#######", "#######", "#CCCCC#")
.aisle("CCCCCCC", "#NGGGN#", "#NGGGN#", "#NNNNN#", "#NGGGN#", "#NGGGN#", "CCCCCCC")
.aisle("CCCCCCC", "#G G#", "#G G#", "#NE EN#", "#G G#", "#G G#", "CCCCCCC")
.aisle("CCCCCCC", "#G G#", "#G G#", "#N N#", "#G G#", "#G G#", "CCCCCCC")
.aisle("CCCCCCC", "#G G#", "#G G#", "#NE EN#", "#G G#", "#G G#", "CCCCCCC")
.aisle("CCCCCCC", "#NGGGN#", "#NGGGN#", "#NNNNN#", "#NGGGN#", "#NGGGN#", "CCCCCCC")
.aisle("#CC@CC#", "#######", "#######", "#######", "#######", "#######", "#CCCCC#")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("C", Predicates.blocks("kubejs:cryolobus_casing").setMinGlobalLimited(85)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
)
.where("c", Predicates.blocks("kubejs:cryolobus_casing"))
.where("N", Predicates.blocks(GCYMBlocks.CASING_NONCONDUCTING.get()))
.where("G", Predicates.blocks(GTBlocks.CASING_LAMINATED_GLASS.get()))
.where("S", Predicates.blocks("minecraft:sculk"))
.where("T", Predicates.blocks("minecraft:sculk_catalyst"))
.where("L", Predicates.blocks("gtceu:black_lamp"))
.where("E", Predicates.blocks(GCYMBlocks.ELECTROLYTIC_CELL.get()))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("kubejs:block/cryolobus/cryolobus_casing",
"gtceu:block/machines/electrolyzer", false)
let getMicroverseRecipeModifiers = tier => [
GTRecipeModifiers.OC_NON_PERFECT,
(machine, recipe) => recipe.data.getLong("projector_tier") > tier ?
ModifierFunction.NULL : ModifierFunction.IDENTITY
]
// Basic Microverse Projector
event.create("basic_microverse_projector", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("microverse")
.recipeModifiers(getMicroverseRecipeModifiers(1))
.appearanceBlock(() => Block.getBlock("kubejs:microverse_casing"))
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCC", "CVC", "CCC")
.aisle("CCC", "GDG", "CCC")
.aisle("C@C", "CGC", "CCC")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("D", Predicates.blocks("kubejs:starry_diamond_block"))
.where("C", Predicates.blocks("kubejs:microverse_casing").setMinGlobalLimited(12)
.or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where("G", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get()))
.where("V", Predicates.blocks(GTBlocks.CASING_GRATE.get()))
.build())
.workableCasingRenderer("kubejs:block/microverse/casing",
"gtceu:block/multiblock/implosion_compressor", false)
// Advanced Microverse Projector
event.create("advanced_microverse_projector", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("microverse")
.recipeModifiers(getMicroverseRecipeModifiers(2))
.appearanceBlock(() => Block.getBlock("kubejs:microverse_casing"))
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCCCC", "CGGGC", "CGGGC", "CGGGC", "CCCCC")
.aisle("CVCVC", "GDDDG", "GDDDG", "GDDDG", "CVCVC")
.aisle("CCCCC", "GDDDG", "GD DG", "GDDDG", "CCCCC")
.aisle("CVCVC", "GDDDG", "GDDDG", "GDDDG", "CVCVC")
.aisle("CC@CC", "CGGGC", "CGGGC", "CGGGC", "CCCCC")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("D", Predicates.blocks("kubejs:starry_diamond_block"))
.where("C", Predicates.blocks("kubejs:microverse_casing").setMinGlobalLimited(48)
.or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where("G", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get()))
.where("V", Predicates.blocks(GTBlocks.CASING_GRATE.get()))
.where(" ", Predicates.air())
.build())
.workableCasingRenderer("kubejs:block/microverse/casing",
"gtceu:block/multiblock/implosion_compressor", false)
// Advanced Microverse Projector II
event.create("advanced_microverse_projector_ii", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("microverse")
.recipeModifiers(getMicroverseRecipeModifiers(3))
.appearanceBlock(() => Block.getBlock("kubejs:microverse_casing"))
.pattern(definition => FactoryBlockPattern.start()
.aisle("#########", "#########", "##CCCCC##", "##CVCVC##", "##CCCCC##", "##CVCVC##", "##CCCCC##", "#########", "#########")
.aisle("#########", "##CGGGC##", "#CDDDDDC#", "#CDDDDDC#", "#CDDDDDC#", "#CDDDDDC#", "#CDDDDDC#", "##CGGGC##", "#########")
.aisle("##CCCCC##", "#CDDDDDC#", "CDDDDDDDC", "CDDDDDDDC", "CDDDDDDDC", "CDDDDDDDC", "CDDDDDDDC", "#CDDDDDC#", "##CCCCC##")
.aisle("##CGGGC##", "#GDDDDDG#", "CDDDDDDDC", "GDD DDG", "GDD DDG", "GDD DDG", "CDDDDDDDC", "#GDDDDDG#", "##CGGGC##")
.aisle("##CGGGC##", "#GDDDDDG#", "CDDDDDDDC", "GDD DDG", "GDD DDG", "GDD DDG", "CDDDDDDDC", "#GDDDDDG#", "##CGGGC##")
.aisle("##CGGGC##", "#GDDDDDG#", "CDDDDDDDC", "GDD DDG", "GDD DDG", "GDD DDG", "CDDDDDDDC", "#GDDDDDG#", "##CGGGC##")
.aisle("##CCCCC##", "#CDDDDDC#", "CDDDDDDDC", "CDDDDDDDC", "CDDDDDDDC", "CDDDDDDDC", "CDDDDDDDC", "#CDDDDDC#", "##CCCCC##")
.aisle("#########", "##CGGGC##", "#CDDDDDC#", "#CDDDDDC#", "#CDDDDDC#", "#CDDDDDC#", "#CDDDDDC#", "##CGGGC##", "#########")
.aisle("#########", "#########", "##CC@CC##", "##CGGGC##", "##CGGGC##", "##CGGGC##", "##CCCCC##", "#########", "#########")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("D", Predicates.blocks("kubejs:starry_diamond_block"))
.where("C", Predicates.blocks("kubejs:microverse_casing").setMinGlobalLimited(128)
.or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where("G", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get()))
.where("V", Predicates.blocks(GTBlocks.CASING_TITANIUM_PIPE.get()))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("kubejs:block/microverse/casing",
"gtceu:block/multiblock/implosion_compressor", false)
// Microverse Projector III (Hyperbolic Microverse Projector)
event.create("hyperbolic_microverse_projector", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("microverse")
.recipeModifiers(
[GTRecipeModifiers.PARALLEL_HATCH]
.concat(getMicroverseRecipeModifiers(4))
)
.appearanceBlock(() => Block.getBlock("kubejs:microverse_casing"))
.pattern(definition => FactoryBlockPattern.start()
.aisle("###CCCCC###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###CCCCC###")
.aisle("#CCCCVCCCC#", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "#CCCCVCCCC#")
.aisle("#CVCCCCCVC#", "###CGGGC###", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###CGGGC###", "#CVCCCCCVC#")
.aisle("CCCCCCCCCCC", "N#CCDDDCC#N", "N##CGGGC##N", "N#########N", "N#########N", "N#########N", "N#########N", "N#########N", "N##CGGGC##N", "N#CCDDDCC#N", "CCCCCCCCCCC")
.aisle("CCCCCCCCCCC", "##GDDDDDG##", "###GYDYG###", "####YGY####", "####YGY####", "####YGY####", "####YGY####", "####YGY####", "###GYDYG###", "##GDDDDDG##", "CCCCCCCCCCC")
.aisle("CVCCCWCCCVC", "##GDDDDDG##", "###GDDDG###", "####GDG####", "####GDG####", "####GDG####", "####GDG####", "####GDG####", "###GDDDG###", "##GDDDDDG##", "CVCCCWCCCVC")
.aisle("CCCCCCCCCCC", "##GDDDDDG##", "###GYDYG###", "####YGY####", "####YGY####", "####YGY####", "####YGY####", "####YGY####", "###GYDYG###", "##GDDDDDG##", "CCCCCCCCCCC")
.aisle("CCCCCCCCCCC", "N#CCDDDCC#N", "N##CGGGC##N", "N#########N", "N#########N", "N#########N", "N#########N", "N#########N", "N##CGGGC##N", "N#CCDDDCC#N", "CCCCCCCCCCC")
.aisle("#CVCCCCCVC#", "###CGGGC###", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###CGGGC###", "#CVCCCCCVC#")
.aisle("#CCCCVCCCC#", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "#CCCCVCCCC#")
.aisle("###CC@CC###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###N###N###", "###CCCCC###")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("D", Predicates.blocks("kubejs:starry_diamond_block"))
.where("C", Predicates.blocks("kubejs:microverse_casing").setMinGlobalLimited(200)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
)
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get()))
.where("N", Predicates.frames(GTMaterials.get("sculk_bioalloy")))
.where("V", Predicates.blocks("ae2:quartz_vibrant_glass"))
.where("W", Predicates.blocks("kubejs:universal_warp_core"))
.where("Y", Predicates.blocks("kubejs:dimensional_stabilization_netherite_casing"))
.where("#", Predicates.any())
.build())
.workableCasingRenderer("kubejs:block/microverse/casing",
"gtceu:block/multiblock/implosion_compressor", false)
// Naquadah Reactor I
event.create("naquadah_reactor", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("naquadah_reactor")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH]) // Fix for generator "overclocking" as long as the actual hatch invalidates the structure
.appearanceBlock(GCYMBlocks.CASING_REACTION_SAFE)
.generator(true)
.regressWhenWaiting(false)
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCC", "PGP", "PGP", "PGP", "PGP", "CCC")
.aisle("CCC", "GNG", "GNG", "GNG", "GNG", "CCC")
.aisle("C@C", "PGP", "PGP", "PGP", "PGP", "CCC")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get()))
.where("C", Predicates.blocks(GCYMBlocks.CASING_REACTION_SAFE.get()).setMinGlobalLimited(12)
.or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where("P", Predicates.blocks("ae2:spatial_pylon"))
.where("N", Predicates.blocks("gtceu:trinium_coil_block"))
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/reaction_safe_mixing_casing",
"gtceu:block/multiblock/generator/large_steam_turbine", false)
// Large Naquadah Reactor
event.create("large_naquadah_reactor", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("large_naquadah_reactor")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH]) // Fix for generator "overclocking" as long as the actual hatch invalidates the structure
.regressWhenWaiting(false)
.appearanceBlock(GCYMBlocks.CASING_ATOMIC)
.generator(true)
.pattern(definition => FactoryBlockPattern.start()
.aisle("##CCCCC##","##CGGGC##","##CCCCC##","#########","#########","#########","#########","#########","#########","#########","##CCCCC##")
.aisle("#CCCCCCC#","#CC CC#","#CCCCCCC#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#CCCCCCC#")
.aisle("CCCHHHCCC","CCN NCC","CCCSSSCCC","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","CCCSSSCCC")
.aisle("CCHCCCHCC","G OOO G","CCSOOOSCC","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","CCSHHHSCC")
.aisle("CCHCCCHCC","G OKO G","CCSOKOSCC","##GOKOG##","##GOKOG##","##GOKOG##","##GOKOG##","##GOKOG##","##GOKOG##","##GOKOG##","CCSHHHSCC")
.aisle("CCHCCCHCC","G OOO G","CCSOOOSCC","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","##GOOOG##","CCSHHHSCC")
.aisle("CCCHHHCCC","CCN NCC","CCCSSSCCC","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","##DGGGD##","CCCSSSCCC")
.aisle("#CCCCCCC#","#CC CC#","#CCCCCCC#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#A#####A#","#CCCCCCC#")
.aisle("##CC@CC##","##CGGGC##","##CCCCC##","#########","#########","#########","#########","#########","#########","#########","##CCCCC##")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get()))
.where("C", Predicates.blocks("gtceu:atomic_casing").setMinGlobalLimited(150)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.OUTPUT_LASER).setMaxGlobalLimited(1)))
.where("H", Predicates.blocks("gtceu:heat_vent"))
.where("K", Predicates.blocks("gtceu:fusion_coil"))
.where("N", Predicates.blocks("gtceu:tungsten_frame"))
.where("S", Predicates.blocks("ae2:spatial_pylon"))
.where("O", Predicates.blocks("kubejs:omnic_matrix_coil_block"))
.where("D", Predicates.blocks("gtceu:high_temperature_smelting_casing"))
.where("A", Predicates.blocks("gtceu:naquadah_alloy_frame"))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/atomic_casing",
"gtceu:block/multiblock/generator/large_steam_turbine", false)
// Naquadah Fuel Refinery
if (doHarderNaqFuel) {
event.create("naquadah_refinery", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("naquadah_refinery")
.appearanceBlock(() => Block.getBlock("gtceu:stress_proof_casing"))
.recipeModifiers([GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)])
.pattern(definition => FactoryBlockPattern.start()
.aisle("##CCCCC##","##CCCCC##","#########","#########","#########","#########","#########","#########","#########","#########","#########")
.aisle("#CCCCCCC#","#CC#P#CC#","####P####","####P####","###SSS###","###VVV###","###GGG###","###VVV###","###SSS###","#########","#########")
.aisle("CCCCCCCCC","CCF###FCC","##F###F##","##FSSSF##","##S S##","##V V##","##G G##","##V V##","##S S##","###SSS###","#########")
.aisle("CCCCCCCCC","C##III##C","###SSS###","##SPPPS##","#S K K S#","#V K K V#","#G K K G#","#V K K V#","#S K K S#","##SPPPS##","###SSS###")
.aisle("CCCCCCCCC","CP#III#PC","#P#SSS#P#","#PSPPPSP#","#S E S#","#V E V#","#G E G#","#V E V#","#S E S#","##SPPPS##","###SMS###")
.aisle("CCCCCCCCC","C##III##C","###SSS###","##SPPPS##","#S K K S#","#V K K V#","#G K K G#","#V K K V#","#S K K S#","##SPPPS##","###SSS###")
.aisle("CCCCCCCCC","CCF###FCC","##F###F##","##FSSSF##","##S S##","##V V##","##G G##","##V V##","##S S##","###SSS###","#########")
.aisle("#CCCCCCC#"," CC#P#CC ","####P####","####P####","###SSS###","###VVV###","###GGG###","###VVV###","###SSS###","#########","#########")
.aisle("##CC@CC##","##CCCCC##","#########","#########","#########","#########","#########","#########","#########","#########","#########")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("C", Predicates.blocks("gtceu:stress_proof_casing").setMinGlobalLimited(85)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)))
.where("S", Predicates.blocks("gtceu:high_temperature_smelting_casing"))
.where("I", Predicates.blocks("gtceu:extreme_engine_intake_casing"))
.where("P", Predicates.blocks("gtceu:tungstensteel_pipe_casing"))
.where("K", Predicates.blocks("gtceu:superconducting_coil"))
.where("V", Predicates.blocks("gtceu:heat_vent"))
.where("G", Predicates.blocks("gtceu:laminated_glass"))
.where("E", Predicates.blocks("gtceu:ptfe_pipe_casing"))
.where("F", Predicates.blocks("gtceu:tungsten_frame"))
.where("M", Predicates.abilities(PartAbility.MUFFLER))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/stress_proof_casing",
"gtceu:block/multiblock/fusion_reactor", false)
}
// Omnic Forge
event.create("omnic_forge", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("omnic_forge")
.appearanceBlock(() => Block.getBlock("kubejs:omnic_matrix_machine_casing"))
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT])
.pattern(definition => FactoryBlockPattern.start()
.aisle("#########", "#########", "####O####", "###CCC###", "##OCCCO##", "###CCC###", "####O####", "#########", "#########")
.aisle("#########", "####O####", "##GGOGG##", "##GODOG##", "#OODNDOO#", "##GODOG##", "##GGOGG##", "####O####", "#########")
.aisle("####O####", "##GGOGG##", "#G G#", "#G G#", "OO D OO", "#G G#", "#G G#", "##GGOGG##", "####O####")
.aisle("###CCC###", "##GODOG##", "#G G#", "CO OC", "CD D DC", "CO OC", "#G G#", "##GODOG##", "###CCC###")
.aisle("##OCCCO##", "#OODNDOO#", "OO D OO", "CD D DC", "CNDDBDDNC", "CD D DC", "OO D OO", "#OODNDOO#", "##OCCCO##")
.aisle("###CCC###", "##GODOG##", "#G G#", "CO OC", "CD D DC", "CO OC", "#G G#", "##GODOG##", "###CCC###")
.aisle("####O####", "##GGOGG##", "#G G#", "#G G#", "OO D OO", "#G G#", "#G G#", "##GGOGG##", "####O####")
.aisle("#########", "####O####", "##GGOGG##", "##GODOG##", "#OODNDOO#", "##GODOG##", "##GGOGG##", "####O####", "#########")
.aisle("#########", "#########", "####O####", "###CCC###", "##OC@CO##", "###CCC###", "####O####", "#########", "#########")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("B", Predicates.blocks("gtceu:crystal_matrix_block"))
.where("N", Predicates.blocks("gtceu:sculk_superconductor_block"))
.where("D", Predicates.frames(GTMaterials.get("cryolobus")))
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get()))
.where("O", Predicates.blocks("kubejs:omnic_matrix_machine_casing"))
.where("C", Predicates.blocks("kubejs:omnic_matrix_machine_casing").setMinGlobalLimited(43)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
)
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer(new ResourceLocation("kubejs", "block/omnium/casing"),
"gtceu:block/machines/reconstructor", false)
// Sculk Biocharger
event.create("sculk_biocharger", "multiblock")
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes(["discharger", "charger"])
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.PERFECT_OVERCLOCK)])
.appearanceBlock(() => Block.getBlock("kubejs:bioalloy_casing"))
.pattern(definition => FactoryBlockPattern.start()
.aisle("####CCC####", "####CCC####", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "####CCC####", "####CCC####")
.aisle("##CCNNNCC##", "##CCcccCC##", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "##CCcccCC##", "##CCNNNCC##")
.aisle("#CNNCNCNNC#", "#CNcScScNC#", "##NG c GN##", "##NG c GN##", "##NG GN##", "##NG GN##", "##NG GN##", "##NG c GN##", "##NG c GN##", "#CNcScScNC#", "#CNNCNCNNC#")
.aisle("#CNCCNCCNC#", "#CcSSSSScC#", "##G G##", "##G G##", "##G E G##", "##G G##", "##G E G##", "##G G##", "##G G##", "#CcSSSSScC#", "#CNCCNCCNC#")
.aisle("CNCCCNCCCNC", "CcSScNcSScC", "#G cLc G#", "#G G#", "#G G#", "#G G#", "#G G#", "#G G#", "#G cLc G#", "CcSScNcSScC", "CNCCCNCCCNC")
.aisle("CNNNNNNNNNC", "CccSNNNSccC", "#Gc LNL cG#", "#Gc N cG#", "#G E N E G#", "#G T G#", "#G E N E G#", "#Gc N cG#", "#Gc LNL cG#", "CccSNNNSccC", "CNNNNNNNNNC")
.aisle("CNCCCNCCCNC", "CcSScNcSScC", "#G cLc G#", "#G G#", "#G G#", "#G G#", "#G G#", "#G G#", "#G cLc G#", "CcSScNcSScC", "CNCCCNCCCNC")
.aisle("#CNCCNCCNC#", "#CcSSSSScC#", "##G G##", "##G G##", "##G E G##", "##G G##", "##G E G##", "##G G##", "##G G##", "#CcSSSSScC#", "#CNCCNCCNC#")
.aisle("#CNNCNCNNC#", "#CNcScScNC#", "##NG c GN##", "##NG c GN##", "##NG GN##", "##NG GN##", "##NG GN##", "##NG c GN##", "##NG c GN##", "#CNcScScNC#", "#CNNCNCNNC#")
.aisle("##CCNNNCC##", "##CCcccCC##", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "####GGG####", "##CCcccCC##", "##CCNNNCC##")
.aisle("####CCC####", "####C@C####", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "####CCC####", "####CCC####")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("C", Predicates.blocks("kubejs:bioalloy_casing").setMinGlobalLimited(150)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
)
.where("c", Predicates.blocks("kubejs:bioalloy_casing"))
.where("N", Predicates.blocks(GCYMBlocks.CASING_NONCONDUCTING.get()))
.where("G", Predicates.blocks(GTBlocks.CASING_LAMINATED_GLASS.get()))
.where("S", Predicates.blocks("minecraft:sculk"))
.where("T", Predicates.blocks("minecraft:sculk_catalyst"))
.where("L", Predicates.blocks("gtceu:black_lamp"))
.where("E", Predicates.blocks(GCYMBlocks.ELECTROLYTIC_CELL.get()))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("kubejs:block/bioalloy/casing",
"gtceu:block/machines/electrolyzer", false)
// Advanced Assembly line (Dimensional Superassembler)
event.create("dimensional_superassembler", "multiblock")
.rotationState(RotationState.ALL)
.recipeTypes("assembly_line")
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_PERFECT])
.appearanceBlock(() => Block.getBlock("kubejs:dimensional_stabilization_netherite_casing"))
.pattern(definition => FactoryBlockPattern.start()
.aisle("#########", "###CCC###", "##CCCCC##", "#CCCCCCC#", "#CCCCCCC#", "#CCCCCCC#", "##CCCCC##", "###CCC###", "#########")
.aisle("##CCCCC##", "#CCCCCCC#", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "#CCCCCCC#", "##CCCCC##")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("#########", "#I#####I#", "##LLOLL##", "##GF FG##", "##GF FG##", "##RLLLR##", "##LM#ML##", "#I#####I#", "#########")
.aisle("##CCCCC##", "#CCCCCCC#", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "#CCCCCCC#", "##CCCCC##")
.aisle("#########", "###CCC###", "##CCCCC##", "#CCCCCCC#", "#CCC@CCC#", "#CCCCCCC#", "##CCCCC##", "###CCC###", "#########")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("C", Predicates.blocks("kubejs:dimensional_stabilization_netherite_casing").setMinGlobalLimited(200)
.or(Predicates.abilities(PartAbility.INPUT_ENERGY).setMaxGlobalLimited(2).setPreviewCount(1))
.or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1))
.or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setPreviewCount(1))
.or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setPreviewCount(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.INPUT_LASER).setMaxGlobalLimited(1))
)
.where("G", Predicates.blocks(GTBlocks.FUSION_GLASS.get()))
.where("L", Predicates.blocks(GCYMBlocks.CASING_LARGE_SCALE_ASSEMBLING.get()))
.where("O", Predicates.blocks(GTBlocks.CASING_ASSEMBLY_LINE.get()))
.where("F", Predicates.blocks("kubejs:bioalloy_fusion_casing"))
.where("R", Predicates.blocks(GTBlocks.CASING_GRATE.get())
.or(Predicates.abilities(PartAbility.DATA_ACCESS).setExactLimit(1)))
.where("M", Predicates.blocks("kubejs:omnic_matrix_machine_casing"))
.where("I", Predicates.frames(GTMaterials.get("eltz")))
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("kubejs:block/netherite/casing",
"gtceu:block/multiblock/assembly_line", false)
// MABS
const GCYMRecipeTypes = Java.loadClass("com.gregtechceu.gtceu.common.data.GCYMRecipeTypes") // Have to load it here because ALLOY_BLAST_RECIPES is not defined outside of the event
event.create("mega_alloy_blast_smelter", "multiblock")
.machine((holder) => new CoilWorkableElectricMultiblockMachine(holder))
.rotationState(RotationState.ALL)
.recipeTypes(GCYMRecipeTypes.ALLOY_BLAST_RECIPES)
.recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, (machine, recipe) => GTRecipeModifiers.ebfOverclock(machine, recipe)])
.appearanceBlock(GCYMBlocks.CASING_HIGH_TEMPERATURE_SMELTING)
.pattern(definition => FactoryBlockPattern.start()
.aisle("###IIIII###", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########")
.aisle("#IIIIIIIII#", "###F###F###", "###F###F###", "###F###F###", "###FIIIF###", "###FIEIF###", "###FIIIF###", "###FFFFF###", "###########", "###########", "###########", "###########", "###########", "###########", "###IIHII###", "###########")
.aisle("#IIIIIIIII#", "###HHHHH###", "###HVVVH###", "##FHHHHHF##", "##IICCCII##", "##IICECII##", "##IICCCII##", "##FFCCCFF##", "##F#CCC#F##", "##F#CCC#F##", "##F#VVV#F##", "##F#CCC#F##", "##F#CCC#F##", "##F#CCC#F##", "##IIIIIII##", "####IHI####")
.aisle("IIIIIIIIIII", "#FHHHHHHHF#", "#FHHHPHHHF#", "#FHHPPPHHF#", "#FIC CIF#", "#FIC CIF#", "#FIC CIF#", "#FFC CFF#", "###C C###", "###C C###", "###V V###", "###C C###", "###C C###", "###C C###", "#IIIHHHIII#", "###IIHII###")
.aisle("IIIIIIIIIII", "##HHHHHHH##", "##VHHHHHV##", "##HP PH##", "#IC CI#", "#IC CI#", "#IC CI#", "#FC P CF#", "##C C##", "##C C##", "##V V##", "##C P C##", "##C C##", "##C C##", "#IIH HII#", "##IIHHHII##")
.aisle("IIIIIIIIIII", "##HHHGHHH##", "##VPHGHPV##", "##HP P PH##", "#IC P CI#", "#EE PPP EE#", "#IC P CI#", "#FC P CF#", "##C P C##", "##C PPP C##", "##V P V##", "##C P C##", "##C C##", "##C C##", "#HIH HIH#", "##HHHMHHH##")
.aisle("IIIIIIIIIII", "##HHHHHHH##", "##VHHHHHV##", "##HP PH##", "#IC CI#", "#IC CI#", "#IC CI#", "#FC P CF#", "##C C##", "##C C##", "##V V##", "##C P C##", "##C C##", "##C C##", "#IIH HII#", "##IIHHHII##")
.aisle("IIIIIIIIIII", "#FHHHHHHHF#", "#FHHHPHHHF#", "#FHHPPPHHF#", "#FIC CIF#", "#FIC CIF#", "#FIC CIF#", "#FFC CFF#", "###C C###", "###C C###", "###V V###", "###C C###", "###C C###", "###C C###", "#IIIHHHIII#", "###IIHII###")
.aisle("#IIIIIIIII#", "###HHHHH###", "###HH@HH###", "##FHHHHHF##", "##IICCCII##", "##IICECII##", "##IICCCII##", "##FFCCCFF##", "##F#CCC#F##", "##F#CCC#F##", "##F#VVV#F##", "##F#CCC#F##", "##F#CCC#F##", "##F#CCC#F##", "##IIIIIII##", "####IHI####")
.aisle("#IIIIIIIII#", "###F###F###", "###F###F###", "###F###F###", "###FIIIF###", "###FIEIF###", "###FIIIF###", "###FFFFF###", "###########", "###########", "###########", "###########", "###########", "###########", "###IIHII###", "###########")
.aisle("###IIIII###", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########", "###########")
.where("@", Predicates.controller(Predicates.blocks(definition.get())))
.where("H", Predicates.blocks(GCYMBlocks.CASING_HIGH_TEMPERATURE_SMELTING.get()).setMinGlobalLimited(115)
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
)
.where("I", Predicates.blocks(GTBlocks.CASING_INVAR_HEATPROOF.get()))
.where("F", Predicates.frames(GTMaterials.get("cryococcus")))
.where("V", Predicates.blocks(GCYMBlocks.HEAT_VENT.get()))
.where("C", Predicates.heatingCoils())
.where("M", Predicates.abilities(PartAbility.MUFFLER))
.where("G", Predicates.blocks(GTBlocks.CASING_TUNGSTENSTEEL_GEARBOX.get())) // Change to Naquadah Gearbox if ICE gets added
.where("P", Predicates.blocks(GTBlocks.CASING_TUNGSTENSTEEL_PIPE.get())) // Change to Naquadah Pipe Casing if ICE gets added
.where("E", Predicates.blocks(GTBlocks.CASING_EXTREME_ENGINE_INTAKE.get())) // Change to Insane Engine Intake if ICE gets added
.where(" ", Predicates.air())
.where("#", Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/gcym/high_temperature_smelting_casing",
"gtceu:block/multiblock/gcym/blast_alloy_smelter", false)
})

View file

@ -0,0 +1,57 @@
/**
* Singleblock registry.
* This is the place where the Atomic Reconstructor machine/recipe type is defined
* and custom Parallel Control hatches.
*/
const $ParallelHatchPartMachine = Java.loadClass("com.gregtechceu.gtceu.common.machine.multiblock.part.ParallelHatchPartMachine")
// GT Atomic Reconstructor recipe type
GTCEuStartupEvents.registry("gtceu:recipe_type", event => {
event.create("atomic_reconstruction")
.category("reconstruction")
.setEUIO("in")
.setMaxIOSize(1, 1, 0, 0)
.setSlotOverlay(false, false, GuiTextures.COMPRESSOR_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.ELECTROLYZER)
})
// GT Atomic Reconstructor machine
GTCEuStartupEvents.registry("gtceu:machine", event => {
event.create("atomic_reconstructor", "simple")
.tiers(GTValues.LV, GTValues.MV, GTValues.HV, GTValues.EV, GTValues.IV, GTValues.LuV, GTValues.ZPM, GTValues.UV, GTValues.UHV, GTValues.UEV, GTValues.UIV)
.definition((tier, builder) =>
builder
.langValue(`${GTValues.VLVH[tier]} Atomic Reconstructor`)
.recipeType("atomic_reconstruction")
.workableTieredHullRenderer("gtceu:block/machines/reconstructor")
)
})
// Giga, Omega Parallel Hatches
GTCEuStartupEvents.registry("gtceu:machine", event => {
event.create("uhv_parallel_hatch", "custom")
.machine((holder, tier) => {
return new $ParallelHatchPartMachine(holder, tier);
})
.tiers(GTValues.UHV)
.definition((tier, builder) =>
builder
.rotationState(RotationState.ALL)
.abilities(PartAbility.PARALLEL_HATCH)
.workableTieredHullRenderer(GTCEu.id("block/machines/parallel_hatch_mk9"))
)
event.create("uev_parallel_hatch", "custom")
.machine((holder, tier) => {
return new $ParallelHatchPartMachine(holder, tier);
})
.tiers(GTValues.UEV)
.definition((tier, builder) =>
builder
.rotationState(RotationState.ALL)
.abilities(PartAbility.PARALLEL_HATCH)
.workableTieredHullRenderer(GTCEu.id("block/machines/parallel_hatch_mk10"))
)
})