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,15 @@
/**
* Define custom EnderIO conduit tiers and their flow rate
* using KubeJS-EnderIO.
*/
EnderIOEvents.conduits(event => {
event.registerEnergyConduit("conductive_conduit", "Conductive Iron Energy Conduit", 512)
event.registerEnergyConduit("energetic_conduit", "Energetic Alloy Energy Conduit", 2048)
event.registerEnergyConduit("vibrant_conduit", "Vibrant Alloy Energy Conduit", 8192)
event.registerEnergyConduit("endsteel_conduit", "End Steel Energy Conduit", 32768)
event.registerEnergyConduit("lumium_conduit", "Lumium Energy Conduit", 131072)
event.registerEnergyConduit("signalum_conduit", "Signalum Energy Conduit", 524288)
event.registerEnergyConduit("enderium_conduit", "Enderium Energy Conduit", 2097152)
event.registerEnergyConduit("cryolobus_conduit", "Cryolobus Energy Conduit", 8388608)
event.registerEnergyConduit("sculk_superconductor_conduit", "Sculk Superconductor Energy Conduit", 134217728)
})

View file

@ -0,0 +1,25 @@
// priority: 999
// ! This script loads first before the other startup scripts
/**
* This script loads first before the other startup scripts.
* Put your utility functions or global vars here so that you can access them in other scripts
*/
// Spoof our custom items' mod name
Platform.mods.kubejs.name = "Moni Labs"
/**
* Capitalizes the first char of the string
* @param {string} word
* @returns {string}
*/
const capitalize = (word) => (word[0].toUpperCase() + word.substring(1));
/**
* Creates a placeholder item
* @param {Registry.Item} registry
* @param {ResourceLocation_ | string} name - item (id)
*/
const placeHolder = (registry, name) => {
registry.create(name).texture("kubejs:item/barrier").displayName(`§eT. B. I. §r- §d${name.split("_").map(v => capitalize(v))}`);
}

View file

@ -0,0 +1,144 @@
// priority: 1000
/**
* Pack mode management.
* Handles the interpretation of packmode.json to determine the global pack mode.
* This determines the values of global booleans like doHNN, doHarderProcessing, and doMonicoins.
* These are used in other scripts to define pack mode-specific behavior.
*/
// Packmode config path & name
const configName = "config/packmode.json";
// Default mode.json
const defaultConfig = {
mode: "Normal",
message: "This tells KubeJS what mode the pack is currently in, packmode is changed in pack-mode-switcher"
};
// Handle the possibility that there may not be a mode.json
let config = JsonIO.read(configName);
if (!config || !config.mode) {
JsonIO.write(configName, defaultConfig);
console.log(`Created new ${configName}`);
config = defaultConfig;
}
let invalidConfig = function (configMode) {
JsonIO.write(configName, defaultConfig);
config.mode = defaultConfig.mode;
console.error(`Overwrote ${configName}, because the mode ${configMode} was found. Valid modes are 'Normal', 'Hard' and 'Expert'.`);
}
let packMode = config.mode;
switch (packMode) {
case "Normal": case "Hard": case "Expert": break;
default: invalidConfig(); packMode = config.mode;
}
// String representation of the current packmode
global.packmode = packMode;
// [DEPRECATED] Global mode booleans. Note that isHardMode is also true if the pack is in Expert
/**
* True if the modpack is in Normal Mode.
* @deprecated as of 3/7/2025, Monifactory version 0.12.0.
* Create or or use a feature-specific boolean instead.
* See KubeJS/startup_scripts/_packmode.js for examples.
*/
global.isNormalMode = packMode == "Normal";
/**
* True if the modpack is in Hard or Expert Mode.
* @deprecated as of 3/7/2025, Monifactory version 0.12.0.
* Create or or use a feature-specific boolean instead.
* See KubeJS/startup_scripts/_packmode.js for examples.
*/
global.isExpertMode = packMode == "Expert";
/**
* True if the modpack is in Hard Mode.
* @deprecated as of 3/7/2025, Monifactory version 0.12.0.
* Create or or use a feature-specific boolean instead.
* See KubeJS/startup_scripts/_packmode.js for examples.
*/
global.isHardMode = (packMode == "Hard") || global.isExpertMode;
/**
* True if the modpack is in Normal Mode.
* @deprecated as of 3/7/2025, Monifactory version 0.12.0.
* Create or or use a feature-specific boolean instead.
* See KubeJS/startup_scripts/_packmode.js for examples.
*/
const isNormalMode = !!global.isNormalMode;
/**
* True if the modpack is in Hard or Expert Mode.
* @deprecated as of 3/7/2025, Monifactory version 0.12.0.
* Create or or use a feature-specific boolean instead.
* See KubeJS/startup_scripts/_packmode.js for examples.
*/
const isExpertMode = !!global.isExpertMode;
/**
* True if the modpack is in Hard Mode.
* @deprecated as of 3/7/2025, Monifactory version 0.12.0.
* Create or or use a feature-specific boolean instead.
* See KubeJS/startup_scripts/_packmode.js for examples.
*/
const isHardMode = !!global.isHardMode;
/*
Global feature toggle booleans. Shared across client and server.
If you want to alter some mode-specific features on your instance, do so here.
However, be warned that if you do so then no support will be provided for any issues you may encounter.
On the flipside, if you create your own fix for an issue you encounter, then any Pull Requests with such a fix are welcome.
*/
global.doAssemblyLineOrderingWarning = packMode == "Hard" || packMode == "Expert";
global.doBoilers = packMode == "Normal" || packMode == "Hard";
global.doCompacting = packMode == "Normal" || packMode == "Hard";
global.doConduits = packMode == "Normal" || packMode == "Hard";
global.doConverters = packMode == "Normal" || packMode == "Hard";
global.doHarderNaqFuel = packMode == "Hard" || packMode == "Expert";
global.doHarderPrintedSilicon = packMode == "Expert";
global.doHarderProcessing = packMode == "Hard" || packMode == "Expert";
global.doHarderRecipes = packMode == "Hard" || packMode == "Expert";
global.doHardGlassRecipesWarning == packMode == "Hard" || packMode == "Expert";
global.doHatchRevert = packMode == "Normal" || packMode == "Hard";
global.doHNN = packMode == "Normal";
global.doLaserIO = packMode == "Normal" || packMode == "Hard";
global.doMeowniPlush = packMode == "Hard" || packMode == "Expert";
global.doMonicoins = packMode == "Normal";
global.doSnad = packMode == "Normal" || packMode == "Hard";
global.doSteamAge = packMode == "Hard" || packMode == "Expert";
global.doStoneline = packMode == "Hard" || packMode == "Expert";
global.doFluxbore = packMode == "Normal" || packMode == "Hard";
global.doHarderFluxBore = packMode == "Normal" || packMode == "Hard";
global.doQuantumCoolant = packMode == "Hard" || packMode == "Expert";
// The !! is to cast the types into boolean since they got transformed into Java Objects from being globals
const doAssemblyLineOrderingWarning = !!global.doAssemblyLineOrderingWarning;
const doBoilers = !!global.doBoilers;
const doCompacting = !!global.doCompacting;
const doConduits = !!global.doConduits;
const doConverters = !!global.doConverters;
const doHarderPrintedSilicon = !!global.doHarderPrintedSilicon;
const doHarderProcessing = !!global.doHarderProcessing;
const doHarderRecipes = !!global.doHarderRecipes;
const doHarderNaqFuel = !!global.doHarderNaqFuel;
const doHardGlassRecipesWarning = !!global.doHardGlassRecipesWarning;
const doHatchRevert = !!global.doHatchRevert;
const doHNN = !!global.doHNN;
const doLaserIO = !!global.doLaserIO;
const doMeowniPlush = !!global.doMeowniPlush;
const doMonicoins = !!global.doMonicoins;
const doSnad = !!global.doSnad;
const doSteamAge = !!global.doSteamAge;
const doStoneline = !!global.doStoneline;
const doFluxbore = !!global.doFluxbore;
const doHarderFluxBore = !!global.doHarderFluxBore;
const doQuantumCoolant = !!global.doQuantumCoolant;

View file

@ -0,0 +1,23 @@
/**
* Lowers the tiering of Active Transformers from LuV to IV - script 1 of 2.
* - Replaces the Superconducting coil in the core of the Active Transformer with High Power casing
*/
let ActiveTransformerMachine = Java.loadClass("com.gregtechceu.gtceu.common.machine.multiblock.electric.ActiveTransformerMachine")
let SupplierMemoizer = Java.loadClass("com.gregtechceu.gtceu.utils.SupplierMemoizer")
// Function<MultiblockMachineDefinition, BlockPattern>
let active_transformer_pattern = (definition) => FactoryBlockPattern.start()
.aisle("XXX", "XXX", "XXX")
.aisle("XXX", "XCX", "XXX")
.aisle("XXX", "XSX", "XXX")
.where("S", Predicates.controller(Predicates.blocks(GTMultiMachines.ACTIVE_TRANSFORMER.get())))
.where("X", Predicates.blocks(GTBlocks.HIGH_POWER_CASING.get()).setMinGlobalLimited(12)
.or(ActiveTransformerMachine.getHatchPredicates()))
.where("C", Predicates.blocks(GTBlocks.HIGH_POWER_CASING.get())
.or(Predicates.blocks(GTBlocks.SUPERCONDUCTING_COIL.get())))
.build()
// Set the pattern for Active Transformer
StartupEvents.postInit(event => {
GTMultiMachines.ACTIVE_TRANSFORMER.setPatternFactory(SupplierMemoizer.memoize(() => active_transformer_pattern.apply(GTMultiMachines.ACTIVE_TRANSFORMER)))
})

View file

@ -0,0 +1,70 @@
// priority: 10
/**
* This file offers utility functions to deprecate old items & fluids or change IDs
* in such a way that they can be replaced without players' items or fluids getting voided.
*
* To use this:
* 1. Remove references to the item or fluid in every way possible, including
* tags, recipes, tooltip, definition, lang, or other extra functionality.
* 2. Use either of the utility functions below to specify the old and new IDs.
* If the item or fluid is created through KJS, delete the regular definition.
* The functions below create a replacement that is automatically substituted for the old one
* if you provide the correct ID.
* 3. When fully removing the deprecated item or fluid, delete the call to the utility function to fully remove the old item.
*
* TODO: add functionality for blocks
*/
/**
* @type {Dictionary<ResourceLocation, ResourceLocation>}
* Dictionary of deprecated items and their replacements.
* Used for tooltip & recipe generation for the deprecation pipeline.
*/
global.deprecatedItems = {};
/**
* @type {Dictionary<ResourceLocation, ResourceLocation>}
* Dictionary of deprecated fluids and their replacements.
* Used for tooltip & recipe generation for the deprecation pipeline.
*/
global.deprecatedFluids = {};
/**
* For a given item ID:
* Creates an item with that ID if none exists
* Creates a recipe to convert the old item to the new item
* Applies a tooltip to the old item indicating that it's deprecated
*
* This allows the player to load their world and the generated item will replace the deprecated item,
* which can then be converted to the new, replacement item.
* @param {ResourceLocation} oldItemID
* @param {ResourceLocation} replacementItemID
* @param {String} oldItemName
*/
function deprecateItem(oldItemID, replacementItemID, oldItemName) {
StartupEvents.registry("item", event => {
if(!Item.exists(oldItemID))
event.create(oldItemID).displayName(`${oldItemName} §c[DEPRECATED]`);
})
global.deprecatedItems[oldItemID] = replacementItemID
}
/**
* For a given fluid ID:
* Creates an fluid with that ID if none exists
* Creates a recipe to convert the old fluid to the new fluid
* Applies a tooltip to the old fluid indicating that it's deprecated
*
* This allows the player to load their world and the generated fluid will replace the deprecated fluid,
* which can then be converted to the new, replacement fluid.
* @param {ResourceLocation} oldFluidID
* @param {ResourceLocation} replacementFluidID
* @param {String} oldFluidName
*/
function deprecateFluid(oldFluidID, replacementFluidID, oldFluidName) {
StartupEvents.registry("fluid", event => {
if(!Fluid.exists(oldFluidID))
event.create(oldFluidID).displayName(`${oldFluidName} §c[DEPRECATED]`);
})
global.deprecatedFluids[oldFluidID] = replacementFluidID
}

View file

@ -0,0 +1,30 @@
/**
* All deprecated items and fluids.
* See deprecation_pipeline.js in this folder to see how the process works.
*/
// Exoskeleton Legs
deprecateItem("kubejs:lv_exoskeleton_legs", "gtexolegs:lv_exoskeleton_legs", "LV Exoskeleton Legs")
deprecateItem("kubejs:mv_exoskeleton_legs", "gtexolegs:mv_exoskeleton_legs", "MV Exoskeleton Legs")
deprecateItem("kubejs:hv_exoskeleton_legs", "gtexolegs:hv_exoskeleton_legs", "HV Exoskeleton Legs")
deprecateItem("kubejs:ev_exoskeleton_legs", "gtexolegs:ev_exoskeleton_legs", "EV Exoskeleton Legs")
deprecateItem("kubejs:iv_exoskeleton_legs", "gtexolegs:iv_exoskeleton_legs", "IV Exoskeleton Legs")
// Traveller's Boots
deprecateItem("travellersbootsreloaded:travellers_boots_tier1", "gtexolegs:lv_exoskeleton_legs", "Traveller's Boots Tier 1")
deprecateItem("travellersbootsreloaded:travellers_boots_tier2", "gtexolegs:mv_exoskeleton_legs", "Traveller's Boots Tier 2")
deprecateItem("travellersbootsreloaded:travellers_boots_tier3", "gtexolegs:hv_exoskeleton_legs", "Traveller's Boots Tier 3")
deprecateItem("travellersbootsreloaded:travellers_boots_tier4", "gtexolegs:ev_exoskeleton_legs", "Traveller's Boots Tier 4")
deprecateItem("travellersbootsreloaded:travellers_boots_tier5", "gtexolegs:iv_exoskeleton_legs", "Traveller's Boots Tier 5")
// Primal Mana
deprecateFluid("kubejs:molten_primal_mana", "gtceu:mana", "Primal Mana")
// Dilithium
deprecateItem("kubejs:dilithium_crystal", "gtceu:dilithium_gem", "Dilithium")
// Ancient Debris
deprecateItem("kubejs:crushed_ancient_debris", "gtceu:crushed_netherite_scrap_ore", "Crushed Ancient Debris")
// Saline Antiseptic (rename after typo)
deprecateFluid("gtceu:saline_antisceptic", "gtceu:saline_antiseptic", "Saline Antiseptic")

View file

@ -0,0 +1,71 @@
/**
* KubeJS recipe schema for use in defining custom ExtendedCrafting recipes.
* Applications of these can be seen in server_scripts/extendedcrafting.js
*/
const $RecipeSchema = Java.loadClass("dev.latvian.mods.kubejs.recipe.schema.RecipeSchema");
const $ShapedRecipeSchema = Java.loadClass("dev.latvian.mods.kubejs.recipe.schema.minecraft.ShapedRecipeSchema");
const $ShapelessRecipeSchema = Java.loadClass("dev.latvian.mods.kubejs.recipe.schema.minecraft.ShapelessRecipeSchema");
const $ItemComponents = Java.loadClass("dev.latvian.mods.kubejs.recipe.component.ItemComponents");
const $NumberComponent = Java.loadClass("dev.latvian.mods.kubejs.recipe.component.NumberComponent");
StartupEvents.recipeSchemaRegistry(event => {
// Extended Crafting
event.register("extendedcrafting:shaped_ender_crafter", new $RecipeSchema(
$ShapedRecipeSchema.RESULT,
$ShapedRecipeSchema.PATTERN,
$ShapedRecipeSchema.KEY,
$NumberComponent.INT.key("craftingTime").defaultOptional().preferred("craftingTime")
)
);
event.register("extendedcrafting:shapeless_ender_crafter", new $RecipeSchema(
$ShapelessRecipeSchema.RESULT,
$ShapelessRecipeSchema.INGREDIENTS,
$NumberComponent.INT.key("craftingTime").defaultOptional().preferred("craftingTime")
)
);
event.register("extendedcrafting:combination", new $RecipeSchema(
$ItemComponents.OUTPUT.key("result"),
$ItemComponents.INPUT.key("input"),
$ItemComponents.UNWRAPPED_INPUT_ARRAY.key("ingredients"),
$NumberComponent.INT.key("powerCost").optional(500000).preferred("powerCost"),
$NumberComponent.INT.key("powerRate").defaultOptional().preferred("powerRate")
)
);
event.register("extendedcrafting:compressor", new $RecipeSchema(
$ItemComponents.OUTPUT.key("result"),
$ItemComponents.INPUT.key("catalyst"),
$ItemComponents.INPUT.key("ingredient"),
$NumberComponent.INT.key("inputCount"),
$NumberComponent.INT.key("powerCost").optional(5000000).preferred("powerCost"),
$NumberComponent.INT.key("powerRate").defaultOptional().preferred("powerRate")
)
);
event.register("extendedcrafting:shaped_flux_crafter", new $RecipeSchema(
$ShapedRecipeSchema.RESULT,
$ShapedRecipeSchema.PATTERN,
$ShapedRecipeSchema.KEY,
$NumberComponent.INT.key("powerRequired").optional(100000).preferred("powerRequired"),
$NumberComponent.INT.key("powerRate").defaultOptional().preferred("powerRate")
)
);
event.register("extendedcrafting:shapeless_flux_crafter", new $RecipeSchema(
$ShapelessRecipeSchema.RESULT,
$ShapelessRecipeSchema.INGREDIENTS,
$NumberComponent.INT.key("powerRequired").optional(100000).preferred("powerRequired"),
$NumberComponent.INT.key("powerRate").defaultOptional().preferred("powerRate")
)
);
event.register("extendedcrafting:shaped_table", new $RecipeSchema(
$ShapedRecipeSchema.RESULT,
$ShapedRecipeSchema.PATTERN,
$ShapedRecipeSchema.KEY,
$NumberComponent.INT.key("tier").defaultOptional().preferred("tier")
)
);
event.register("extendedcrafting:shapeless_table", new $RecipeSchema(
$ShapelessRecipeSchema.RESULT,
$ShapelessRecipeSchema.INGREDIENTS,
$NumberComponent.INT.key("tier").defaultOptional().preferred("tier")
)
);
});

View file

@ -0,0 +1,180 @@
/**
* Unlike how screret showcases the functionality of this event in his discord messge:
* https://discord.com/channels/914926812948234260/1229854271613436066/1279802878822711407
* there is no "Map.of()" to create map objects out of varargs.
*
* Worse still, I could not find an analog to that function.
* Therefore we declare empty maps and then populate them afterwards.
*/
GTCEuStartupEvents.craftingComponents(event => {
// Make LuV+ electrolyzer wires not osmium for funsies :)
let wireElectricMap = {};
wireElectricMap[GTValues.LuV] = UnificationEntry(TagPrefix.wireGtSingle, GTMaterials.VanadiumGallium);
wireElectricMap[GTValues.ZPM] = UnificationEntry(TagPrefix.wireGtSingle, GTMaterials.NaquadahAlloy);
wireElectricMap[GTValues.UV] = UnificationEntry(TagPrefix.wireGtSingle, GTMaterials.get("sculk_superconductor"));
wireElectricMap[GTValues.UHV] = UnificationEntry(TagPrefix.wireGtSingle, GTMaterials.get("activated_netherite"));
wireElectricMap[GTValues.UEV] = UnificationEntry(TagPrefix.wireGtSingle, GTMaterials.Holmium);
wireElectricMap[GTValues.UIV] = UnificationEntry(TagPrefix.wireGtSingle, GTMaterials.get("monium"));
event.modify(CraftingComponent.WIRE_ELECTRIC, wireElectricMap)
// Omnium & Holmium for wires/cables
let wireCableComponentPrefixes = [
[TagPrefix.wireGtQuadruple, TagPrefix.wireGtQuadruple, CraftingComponent.WIRE_QUAD],
[TagPrefix.wireGtOctal, TagPrefix.wireGtOctal, CraftingComponent.WIRE_OCT],
[TagPrefix.wireGtHex, TagPrefix.wireGtHex, CraftingComponent.WIRE_HEX],
[TagPrefix.cableGtSingle, TagPrefix.wireGtSingle, CraftingComponent.CABLE],
[TagPrefix.cableGtDouble, TagPrefix.wireGtDouble, CraftingComponent.CABLE_DOUBLE],
[TagPrefix.cableGtQuadruple, TagPrefix.wireGtQuadruple, CraftingComponent.CABLE_QUAD],
[TagPrefix.cableGtOctal, TagPrefix.wireGtOctal, CraftingComponent.CABLE_OCT],
// [TagPrefix.cableGtHex, TagPrefix.wireGtHex, CraftingComponent.CABLE_HEX] // Seems borked? Causes crashes when uncommented
]
wireCableComponentPrefixes.forEach(prefixComponentPair => {
let wireMap = {};
wireMap[GTValues.UEV] = UnificationEntry(prefixComponentPair[0], GTMaterials.get("omnium"));
wireMap[GTValues.UIV] = UnificationEntry(prefixComponentPair[1], GTMaterials.Holmium);
wireMap[GTValues.MAX] = UnificationEntry(prefixComponentPair[1], GTMaterials.get("monium"));
event.modify(prefixComponentPair[2], wireMap)
})
// Netherite, Holmium, and Monium for tier up wires/cables
// Currently useless because GT only autogenerates transformer recipes up to UV.
let wireCableTierUpComponentPrefixes = [
[TagPrefix.wireGtSingle, CraftingComponent.CABLE_TIER_UP],
[TagPrefix.wireGtDouble, CraftingComponent.CABLE_TIER_UP_DOUBLE],
[TagPrefix.wireGtQuadruple, CraftingComponent.CABLE_TIER_UP_QUAD],
// [TagPrefix.wireGtOctal, CraftingComponent.CABLE_TIER_UP_OCT], // Seems borked. Same here as above.
[TagPrefix.wireGtHex, CraftingComponent.CABLE_TIER_UP_HEX]
]
wireCableTierUpComponentPrefixes.forEach(prefixComponentPair => {
let wireTierUpMap = {};
wireTierUpMap[GTValues.UHV] = UnificationEntry(prefixComponentPair[0], GTMaterials.get("activated_netherite"));
wireTierUpMap[GTValues.UEV] = UnificationEntry(prefixComponentPair[0], GTMaterials.Holmium);
wireTierUpMap[GTValues.UIV] = UnificationEntry(prefixComponentPair[0], GTMaterials.get("monium"));
event.modify(prefixComponentPair[1], wireTierUpMap)
})
// Pipes
let pipeComponentPrefixes = [
[TagPrefix.pipeNormalFluid, CraftingComponent.PIPE_NORMAL],
[TagPrefix.pipeLargeFluid, CraftingComponent.PIPE_LARGE],
[TagPrefix.pipeNonupleFluid, CraftingComponent.PIPE_NONUPLE]
]
pipeComponentPrefixes.forEach(prefixComponentPair => {
let pipeMap = {};
pipeMap[GTValues.UHV] = UnificationEntry(prefixComponentPair[0], GTMaterials.Neutronium);
pipeMap[GTValues.UEV] = UnificationEntry(prefixComponentPair[0], GTMaterials.get("activated_netherite"));
pipeMap[GTValues.UIV] = UnificationEntry(prefixComponentPair[0], GTMaterials.Holmium);
event.modify(prefixComponentPair[1], pipeMap)
})
// Glass
let glassMap = {};
glassMap[GTValues.UHV] = Item.of("gtceu:fusion_glass");
glassMap[GTValues.UEV] = Item.of("gtceu:fusion_glass");
glassMap[GTValues.UIV] = Item.of("gtceu:fusion_glass");
event.modify(CraftingComponent.GLASS, glassMap)
// Plates
let plateMap = {};
plateMap[GTValues.UEV] = UnificationEntry(TagPrefix.plate, GTMaterials.get("omnium"))
plateMap[GTValues.UIV] = UnificationEntry(TagPrefix.plate, GTMaterials.get("infinity"))
plateMap[GTValues.MAX] = UnificationEntry(TagPrefix.plate, GTMaterials.get("monium"))
event.modifyUnificationEntry(CraftingComponent.PLATE, plateMap)
// Hull plates
let hullPlateMap = {};
plateMap[GTValues.UEV] = UnificationEntry(TagPrefix.plate, GTMaterials.get("polyethyl_cyanoacrylate"))
plateMap[GTValues.UIV] = UnificationEntry(TagPrefix.plate, GTMaterials.get("polyethyl_cyanoacrylate"))
plateMap[GTValues.MAX] = UnificationEntry(TagPrefix.plate, GTMaterials.get("polyethyl_cyanoacrylate"))
event.modifyUnificationEntry(CraftingComponent.HULL_PLATE, hullPlateMap)
// Rotors
let rotorMap = {};
rotorMap[GTValues.UHV] = UnificationEntry(TagPrefix.rotor, GTMaterials.Neutronium)
rotorMap[GTValues.UEV] = UnificationEntry(TagPrefix.rotor, GTMaterials.get("activated_netherite"))
rotorMap[GTValues.UIV] = UnificationEntry(TagPrefix.rotor, GTMaterials.Holmium)
event.modifyUnificationEntry(CraftingComponent.ROTOR, rotorMap)
// TODO: Sawblades (May require making tools for the material)
// Resistive heating wires (typically, these match the EBF coil for that tier)
let heatingCoilComponentPrefixes = [
[TagPrefix.wireGtDouble, CraftingComponent.COIL_HEATING],
[TagPrefix.wireGtQuadruple, CraftingComponent.COIL_HEATING_DOUBLE],
]
heatingCoilComponentPrefixes.forEach(prefixComponentPair => {
let heaterMap = {};
heaterMap[GTValues.UHV] = UnificationEntry(prefixComponentPair[0], GTMaterials.get("omnium"));
heaterMap[GTValues.UEV] = UnificationEntry(prefixComponentPair[0], GTMaterials.get("omnium"));
heaterMap[GTValues.UIV] = UnificationEntry(prefixComponentPair[0], GTMaterials.get("omnium"));
event.modify(prefixComponentPair[1], heaterMap)
})
// Electric Coils
let electricCoilMap = {};
electricCoilMap[GTValues.UHV] = UnificationEntry(TagPrefix.wireGtHex, GTMaterials.get("sculk_superconductor"))
electricCoilMap[GTValues.UEV] = UnificationEntry(TagPrefix.wireGtHex, GTMaterials.get("activated_netherite"))
electricCoilMap[GTValues.UIV] = UnificationEntry(TagPrefix.wireGtHex, GTMaterials.get("holmium"))
event.modifyUnificationEntry(CraftingComponent.COIL_ELECTRIC, electricCoilMap)
// Magnetic Rods
let magneticRodMap = {};
magneticRodMap[GTValues.UV] = UnificationEntry(TagPrefix.rodLong, GTMaterials.SamariumMagnetic)
magneticRodMap[GTValues.UHV] = UnificationEntry(TagPrefix.rodLong, GTMaterials.get("magnetic_terbium"))
magneticRodMap[GTValues.UEV] = UnificationEntry(TagPrefix.rodLong, GTMaterials.get("magnetic_terbium"))
magneticRodMap[GTValues.UIV] = UnificationEntry(TagPrefix.rodLong, GTMaterials.get("magnetic_terbium"))
event.modifyUnificationEntry(CraftingComponent.STICK_MAGNETIC, magneticRodMap)
// Distillation Rods
let distillationRodMap = {};
distillationRodMap[GTValues.UHV] = UnificationEntry(TagPrefix.spring, GTMaterials.Actinium)
distillationRodMap[GTValues.UEV] = UnificationEntry(TagPrefix.spring, GTMaterials.get("sculk_bioalloy"))
distillationRodMap[GTValues.UIV] = UnificationEntry(TagPrefix.spring, GTMaterials.get("eltz"))
event.modifyUnificationEntry(CraftingComponent.STICK_DISTILLATION, distillationRodMap)
// Electromagnetic Rods
let electromagneticRodMap = {};
electromagneticRodMap[GTValues.IV] = UnificationEntry(TagPrefix.rod, GTMaterials.Neodymium)
electromagneticRodMap[GTValues.LuV] = UnificationEntry(TagPrefix.rod, GTMaterials.Samarium)
electromagneticRodMap[GTValues.ZPM] = UnificationEntry(TagPrefix.rod, GTMaterials.Samarium)
electromagneticRodMap[GTValues.UV] = UnificationEntry(TagPrefix.rod, GTMaterials.Samarium)
electromagneticRodMap[GTValues.UHV] = UnificationEntry(TagPrefix.rod, GTMaterials.Terbium)
electromagneticRodMap[GTValues.UEV] = UnificationEntry(TagPrefix.rod, GTMaterials.Terbium)
electromagneticRodMap[GTValues.UIV] = UnificationEntry(TagPrefix.rod, GTMaterials.Terbium)
event.modifyUnificationEntry(CraftingComponent.STICK_ELECTROMAGNETIC, electromagneticRodMap)
// Chem reactor pipe ingredient
let reactorPipeMap = {};
reactorPipeMap[GTValues.UHV] = UnificationEntry(TagPrefix.pipeNormalFluid, GTMaterials.get("polyethyl_cyanoacrylate"))
reactorPipeMap[GTValues.UEV] = UnificationEntry(TagPrefix.pipeLargeFluid, GTMaterials.get("polyethyl_cyanoacrylate"))
reactorPipeMap[GTValues.UIV] = UnificationEntry(TagPrefix.pipeHugeFluid, GTMaterials.get("polyethyl_cyanoacrylate"))
event.modifyUnificationEntry(CraftingComponent.PIPE_REACTOR, reactorPipeMap)
// PIC ingredient
let powerComponentMap = {};
powerComponentMap[GTValues.UEV] = Item.of("kubejs:uxpic_chip")
powerComponentMap[GTValues.UIV] = Item.of("kubejs:uxpic_chip")
powerComponentMap[GTValues.MAX] = Item.of("kubejs:uxpic_chip")
event.modifyItem(CraftingComponent.POWER_COMPONENT, powerComponentMap)
// Spring
let springMap = {};
springMap[GTValues.UEV] = UnificationEntry(TagPrefix.spring, GTMaterials.get("activated_netherite"))
springMap[GTValues.UIV] = UnificationEntry(TagPrefix.spring, GTMaterials.get("holmium"))
springMap[GTValues.MAX] = UnificationEntry(TagPrefix.spring, GTMaterials.get("monium"))
event.modifyUnificationEntry(CraftingComponent.SPRING, springMap)
// Frame
let frameMap = {};
frameMap[GTValues.UHV] = UnificationEntry(TagPrefix.frameGt, GTMaterials.Neutronium)
frameMap[GTValues.UEV] = UnificationEntry(TagPrefix.frameGt, GTMaterials.get("omnium"))
frameMap[GTValues.UIV] = UnificationEntry(TagPrefix.frameGt, GTMaterials.get("infinity"))
frameMap[GTValues.MAX] = UnificationEntry(TagPrefix.frameGt, GTMaterials.get("monium"))
event.modifyUnificationEntry(CraftingComponent.FRAME, frameMap)
})

View file

@ -0,0 +1,201 @@
// priority: 3
/**
* Gregtech Chemical Materials Registry.
* This file is for custom fluids (And some solids!)
* used in custom chemlines like JEAN and Polyethyl Cyanoacrylate.
*/
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("butanol")
.fluid()
.color(0xc7af2e)
.components("4x carbon", "10x hydrogen", "1x oxygen")
.formula("C4H9OH")
event.create("phosphorus_trichloride")
.fluid()
.color(0xe8c474)
.components("1x phosphorus", "3x chlorine")
event.create("phosphoryl_chloride")
.fluid()
.color(0xe8bb5b)
.components("1x phosphorus", "1x oxygen", "3x chlorine")
event.create("tributyl_phosphate")
.fluid()
.color(0xe8c474)
.components("12x carbon", "27x hydrogen", "4x oxygen", "1x phosphorus")
.formula("(C4H9O)3PO")
// Scaleline (Breaks Ender Dragon Scales down into useful materials)
event.create("hydrochloric_dragon_scale_solution")
.fluid()
.color(0x697898)
.components("2x hydrogen", "2x chlorine", "2x manganese", "1x tantalum", "4x carbon")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("(HCl)2Mn2TaC?")
event.create("hydrochloric_manganese_solution")
.fluid()
.color(0x697898)
.components("2x hydrogen", "2x chlorine", "2x manganese")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("(HCl)2Mn2")
event.create("graphitic_tantalum")
.dust()
.color(0x747499).secondaryColor(0x999974)
.components("1x tantalum", "4x carbon")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("TaC")
event.create("hydrofluoric_graphitic_tantalum_solution")
.fluid()
.color(0x424272)
.components("2x hydrogen", "2x fluorine", "1x tantalum", "4x carbon")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("(HF)2TaC")
event.create("hydrofluoric_tantalum_solution")
.fluid()
.color(0x626299)
.components("2x hydrogen", "2x fluorine", "1x tantalum")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("(HF)2Ta")
// Guardian Scaleline (Breaks Guardian Scales down into useful materials)
event.create("guardian_scale_slurry")
.fluid()
.color(0x8bbeaf)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
// JEAN gasoline ingredients
event.create("chlorine_triflouride")
.gas()
.color(0xCBC4EF)
.components("1x chlorine", "3x fluorine")
event.create("chloroethane")
.gas()
.color(0xDEEDE6)
.components("2x carbon", "5x hydrogen", "1x chlorine")
.formula("C2H5Cl")
event.create("tetraethyllead")
.fluid()
.color(0x6E6F9E)
.components("1x lead", "8x carbon", "20x hydrogen")
.formula("Pb(CH3CH2)4")
event.create("sodium_lead_alloy")
.ingot()
.color(0x58649B)
.components("1x lead", "1x sodium")
// Crystal Matrix Line
event.create("acetylene")
.gas()
.color(0xFF4F4F)
.components("2x carbon", "2x hydrogen")
event.create("calcium_carbide")
.dust()
.color(0xCFC870)
.components("1x calcium", "2x carbon")
// Ingredients to create Polyethyl Cyanoacrylate, (PECA) a post-tank polymer
event.create("sodium_cyanide")
.dust()
.color(0x7FB4C7)
.components("1x sodium", "1x carbon", "1x nitrogen")
event.create("chloroacetic_mixture")
.fluid()
.color(0x2D80B5)
event.create("chloroacetate")
.dust()
.color(0x2D8BAE)
.components("1x chlorine", "2x carbon", "3x hydrogen", "2x oxygen")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("ClCH2CO2H")
event.create("dichloroacetate")
.fluid()
.color(0x2D8BBE)
.components("1x chlorine", "1x chloroacetate")
.formula("Cl2CH2CO2H")
event.create("trichloroacetate")
.fluid()
.color(0x2D8BCE)
.components("1x chlorine", "1x dichloroacetate")
.formula("Cl3CH2CO2H")
event.create("cyanoacetic_acid")
.dust()
.color(0x5B8988)
.components("1x nitrogen", "3x carbon", "3x hydrogen", "2x oxygen")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("C3H3NO2")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("ethyl_cyanoacetate")
.liquid()
.color(0x488176)
.components("1x nitrogen", "5x carbon", "7x hydrogen", "2x oxygen")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("C5H7NO2")
event.create("uncracked_ethyl_cyanoacrylate")
.liquid()
.color(0x616863)
.components("1x nitrogen", "6x carbon", "7x hydrogen", "2x oxygen")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("ethyl_cyanoacrylate")
.liquid()
.color(0x516863)
.components("1x nitrogen", "6x carbon", "7x hydrogen", "2x oxygen")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.formula("C6H7NO2")
event.create("polyethyl_cyanoacrylate")
.polymer()
.color(0x708787)
.components("1x nitrogen", "6x carbon", "7x hydrogen", "2x oxygen")
.fluidPipeProperties(3000, 12000, true, true, true, false)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION, GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_FOIL, GTMaterialFlags.STICKY)
.formula("C6H7NO2");
// Dimethyl sulfoxide sub-chain (PECA catalyst)
event.create("dimethyl_sulfoxide")
.liquid()
.color(0xBFB178)
.components("2x carbon", "6x hydrogen", "1x sulfur", "1x oxygen")
event.create("dimethyl_sulfide")
.liquid()
.color(0xACB279)
.components("2x carbon", "6x hydrogen", "1x sulfur")
// Uranic Solution (Actinium line)
event.create("uranic_solution")
.liquid()
.color(0xD3B53B)
// Lead Chloride (Actinium byproduct)
event.create("lead_chloride")
.dust()
.color(0x776E82).iconSet("rough")
.components("lead", "2x chlorine")
// Saturated water (Eltz line midproduct)
event.create("saturated_water")
.liquid()
.color(0x857049)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
})

View file

@ -0,0 +1,40 @@
// priority: 2
/**
* Registration of custom chemical elements
*/
// Elements
GTCEuStartupEvents.registry("gtceu:element", event => {
event.create("cryolobus")
.protons(149)
.neutrons(234)
.symbol("Cy")
event.create("cryococcus")
.protons(149)
.neutrons(264)
.symbol("Cy*")
event.create("mana")
.symbol("ᛗ")
})
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("cryolobus")
.ingot().fluid()
.element(GTElements.get("cryolobus"))
.color(0x022C34).iconSet("metallic")
.blastTemp(6800, "higher")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_DENSE, GTMaterialFlags.GENERATE_FRAME)
.cableProperties(524288, 4, 0, true);
event.create("cryococcus")
.ingot().fluid()
.element(GTElements.get("cryococcus"))
.color(0x088286).secondaryColor(0x022C34).iconSet("metallic")
.flags(GTMaterialFlags.NO_SMELTING, GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.GENERATE_RING, GTMaterialFlags.GENERATE_DENSE)
event.create("mana")
.liquid(new GTFluidBuilder().state(GTFluidState.LIQUID).customStill())
.element(GTElements.get("mana"))
.iconSet("mana")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
})

View file

@ -0,0 +1,75 @@
/**
? Keep in sync with
? https://github.com/Nomi-CEu/Nomi-Labs/blob/main/src/main/java/com/nomiceu/nomilabs/gregtech/material/registry/register/LabsEIO.java
*/
// EnderIO Materials
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("dark_steel")
.ingot().fluid()
.color(0x414751).iconSet("dull")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("iron", "obsidian")
// Conductive Iron
event.create("conductive_alloy")
.ingot().fluid()
.color(0xf7b29b).iconSet("metallic")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR)
.components("iron", "redstone")
.cableProperties(32, 1, 0, true)
event.create("energetic_alloy")
.ingot().fluid()
.color(0xffb545).iconSet("shiny")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR)
.blastTemp(1250, "low", 120, 400)
.components("2x gold", "redstone", "glowstone")
.cableProperties(128, 1, 0, true)
.formula("Au2(Si(FeS2)5(CrAl2O3)Hg3)(AuCa3(PO4)2)");
event.create("vibrant_alloy")
.ingot().fluid()
.color(0xa4ff70).iconSet("shiny")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_BOLT_SCREW)
.blastTemp(1350, "low", 120, 400)
.components("energetic_alloy", "ender_pearl")
.cableProperties(512, 1, 0, true)
.formula("Au2(Si(FeS2)5(CrAl2O3)Hg3)(AuCa3(PO4)2)(BeK4N5)");
// Pulsating Iron
event.create("pulsating_alloy")
.ingot().fluid()
.color(0x2AB38F).iconSet("shiny")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR)
.components("iron")
.cableProperties(8, 1, 0, true)
event.create("electrical_steel")
.ingot().fluid()
.color(0xb2c0c1).iconSet("metallic")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR)
.components("steel", "silicon")
event.create("soularium")
.ingot().fluid()
.color(0x7c674d).iconSet("metallic")
.components("gold")
.flags(GTMaterialFlags.GENERATE_PLATE)
event.create("end_steel")
.ingot().fluid()
.color(0xd6d980).iconSet("metallic")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR)
.blastTemp(2700, "mid", 480, 900)
.toolStats(new ToolProperty(4.0, 3.5, 1024, 3, []))
.cableProperties(2048, 1, 0, true)
.components("dark_steel", "endstone", "vibrant_alloy")
.formula("Fe(SiO2)(Au2(Si(FeS2)5(CrAl2O3)Hg3)(AuCa3(PO4)2)(BeK4N5))");
event.create("dark_soularium")
.ingot()
.color(0x7c674d).iconSet("metallic")
.components("soularium", "dark_steel", "tritium")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_DENSE, GTMaterialFlags.DISABLE_DECOMPOSITION)
})

View file

@ -0,0 +1,139 @@
/**
* Endgame Material Registry.
* Used for registering Gregtech Materials
* that are related post-tank content.
*/
// ? Keep in sync with
// ? https://github.com/Nomi-CEu/Nomi-Labs/blob/main/src/main/java/com/nomiceu/nomilabs/gregtech/material/registry/register/LabsEndgame.java
/*
Note: Some GTCEuM recipes handlers calculate duration based on mass.
This led to the infamous recipe bug where Infinity Screws in the Lathe had integer limit duration,
because the Infinity material had infinite mass.
*/
GTCEuStartupEvents.registry("gtceu:element", event => {
event.create("omnium")
.protons(130)
.neutrons(234)
.symbol("Nm");
event.create("infinity")
.protons(168)
.neutrons(316)
.symbol("∞");
event.create("monium")
.protons(169)
.neutrons(317)
.symbol("Mu");
event.create("crystal_matrix")
.protons(6)
.neutrons(6)
.symbol("C*");
event.create("eltz")
.protons(15)
.neutrons(15)
.symbol("Ez")
})
// Omnium, Infinity, and Monium have animations and thus custom material icon sets.
GTCEuStartupEvents.registry("gtceu:material_icon_set", event => {
event.create("omnium").parent(GTMaterialIconSet.SHINY)
event.create("sculk_alloy").parent(GTMaterialIconSet.DULL)
event.create("infinity").parent(GTMaterialIconSet.SHINY)
event.create("eltz").parent(GTMaterialIconSet.SHINY)
event.create("monium").parent(GTMaterialIconSet.SHINY)
event.create("dilithium").parent(GTMaterialIconSet.DULL)
event.create("mana").parent(GTMaterialIconSet.SHINY)
})
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("crystal_matrix")
.ingot().fluid()
.element(GTElements.get("crystal_matrix"))
.color(0x66ffff)
.blastTemp(6800, "highest")
.iconSet("shiny")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_FOIL, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.GENERATE_DENSE);
event.create("omnium")
.ingot()
.liquid(new GTFluidBuilder().state(GTFluidState.LIQUID).customStill())
.element(GTElements.get("omnium"))
.color(0xffffff).iconSet("omnium")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_BOLT_SCREW, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.GENERATE_SMALL_GEAR)
.cableProperties(GTValues.V[GTValues.UEV], 64, 8, false)
event.create("omnic_acid")
.dust()
.color(0xff00ff)
.iconSet("shiny")
.components("5x carbon", "4x hydrogen", "3x oxygen", "4x omnium")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("sculk_superconductor")
.ingot().fluid()
.element(GTElements.get("sculk_superconductor"))
.color(0xffffff)
.iconSet("shiny")
.flags(GTMaterialFlags.NO_SMELTING, GTMaterialFlags.NO_SMASHING)
.cableProperties(GTValues.V[GTValues.UHV], 8, 0, true)
event.create("netherite_scrap")
.dust().ingot().ore(1, 3)
.color(0x6D473E)
.iconSet("dull")
.addOreByproducts(GTMaterials.Obsidian, GTMaterials.Obsidian, GTMaterials.RarestMetalMixture)
.ignoredTagPrefixes([TagPrefix.nugget, TagPrefix.block, TagPrefix.dustTiny, TagPrefix.rawOre, TagPrefix.rawOreBlock])
event.create("activated_netherite")
.ingot()
.element(GTElements.get("activated_netherite"))
.color(0x4C484C)
.iconSet("dull")
.cableProperties(GTValues.V[GTValues.UEV], 16, 0, true)
.fluidPipeProperties(11000, 8500, true, false, true, true)
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.GENERATE_DENSE, GTMaterialFlags.GENERATE_FINE_WIRE, GTMaterialFlags.GENERATE_ROTOR, GTMaterialFlags.GENERATE_SPRING)
event.create("sculk_bioalloy")
.ingot()
.liquid(new GTFluidBuilder().state(GTFluidState.LIQUID).customStill())
.color(0xffffff)
.iconSet("sculk_alloy")
.flags(GTMaterialFlags.EXCLUDE_BLOCK_CRAFTING_BY_HAND_RECIPES, GTMaterialFlags.EXCLUDE_BLOCK_CRAFTING_RECIPES, GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_RING, GTMaterialFlags.GENERATE_ROUND, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_SMALL_GEAR, GTMaterialFlags.GENERATE_SPRING, GTMaterialFlags.GENERATE_BOLT_SCREW, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.NO_SMELTING, GTMaterialFlags.NO_WORKING)
event.create("infinity")
.ingot()
.liquid(new GTFluidBuilder().state(GTFluidState.LIQUID).customStill())
.element(GTElements.get("infinity"))
.color(0xffffff)
.iconSet("infinity")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.GENERATE_DENSE, GTMaterialFlags.GENERATE_SMALL_GEAR)
event.create("eltz")
.ingot()
.liquid(new GTFluidBuilder().state(GTFluidState.LIQUID).customStill())
.element(GTElements.get("eltz"))
.color(0xffffff)
.iconSet("eltz")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_LONG_ROD, GTMaterialFlags.GENERATE_RING, GTMaterialFlags.GENERATE_ROUND, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_SMALL_GEAR, GTMaterialFlags.GENERATE_SPRING, GTMaterialFlags.GENERATE_BOLT_SCREW, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.PHOSPHORESCENT)
event.create("eltic_actinate")
.gem()
.color(0xbb9966).secondaryColor(0x881105)
.iconSet("dilithium")
.components("4x eltz", "1x actinium", "3x oxygen")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION, GTMaterialFlags.NO_SMASHING)
event.create("actinium_iron_oxide")
.dust()
.color(0xC3D1FF) // Old actinium color for fun
.components("1x actinium", "4x iron", "3x oxygen")
event.create("monium")
.ingot()
.liquid(new GTFluidBuilder().state(GTFluidState.LIQUID).customStill())
.element(GTElements.get("monium"))
.color(0xffffff)
.iconSet("monium")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_SPRING)
.cableProperties(GTValues.V[GTValues.MAX], 134217727, 0, true)
})

View file

@ -0,0 +1,49 @@
/**
* Microverse Material Registry.
* Used for registering Gregtech Materials
* that are related Microverse projectors, Microminers, or Microminer missions.
*/
// ? Keep in sync with
// ? https://github.com/Nomi-CEu/Nomi-Labs/blob/main/src/main/java/com/nomiceu/nomilabs/gregtech/material/registry/register/LabsMicroverse.java
// Microverse Materials
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("microversium")
.ingot().liquid()
.color(0x9b61b8).iconSet("dull")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_FRAME, GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x steel", "glowstone", "redstone", "deuterium")
.blastTemp(1700, "mid", 120, 600)
.cableProperties(128, 4, 2, false)
.formula("Fe2(Si(FeS2)5(CrAl2O3)Hg3)(AuCa3(PO4)2)D");
event.create("osmiridiumyes")
.dust().ore()
.iconSet("dull")
.components("8x osmium", "2x iridium")
.addOreByproducts("osmium", "iridium", "ruthenium")
event.create("iridosmineyes")
.dust().ore()
.iconSet("dull")
.components("8x iridium", "2x osmium")
.addOreByproducts("iridium", "osmium", "rhodium")
event.create("kaemanite")
.dust().ore()
.color(0xe7413c).iconSet("bright")
.components("trinium", "tantalum", "4x oxygen")
.addOreByproducts("niobium", "trinium_sulfide", "trinium")
event.create("laurite")
.dust().ore()
.color(0x6f2c23).iconSet("diamond")
.components("ruthenium", "2x sulfur")
.addOreByproducts("pyrite", "ruthenium", "rhodium")
event.create("cuprorhodsite")
.dust().ore()
.color(0xc1aa82).iconSet("bright")
.components("copper", "iron", "4x rhodium", "8x sulfur")
.addOreByproducts("chalcocite", "platinum", "ruthenium")
})

View file

@ -0,0 +1,358 @@
/**
? Misc modern materials we have to add
? Place non-nomifactory materials here
*/
// AE2 Materials
GTCEuStartupEvents.registry("gtceu:element", event => {
event.create("dilithium")
.protons(119)
.neutrons(229)
.symbol("Dl")
})
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("charged_certus_quartz")
.gem()
.dust()
.color(0x9fd5e8)
.iconSet(GTMaterialIconSet.CERTUS)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("certus_quartz")
event.create("fluix")
.gem()
.dust()
.color(0x7f5bb3)
.iconSet(GTMaterialIconSet.CERTUS)
.flags(GTMaterialFlags.GENERATE_PLATE)
.components("charged_certus_quartz", "redstone", "nether_quartz")
})
// Space Materials
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("dilithium")
.dust()
.gem()
.ore(2, 1)
.element(GTElements.get("dilithium"))
.color(0xfdd2df).secondaryColor(0xfa52b5)
.iconSet("dilithium")
.addOreByproducts("lithium", "cobalt", "platinum")
event.create("calcium_perchlorate")
.dust()
.color(0xf9fbda)
.components("1x calcium", "2x chlorine", "8x oxygen")
event.create("extraterrestrial_metal_mixture")
.dust()
.color(0x734120).secondaryColor(0x555B60).iconSet(GTMaterialIconSet.METALLIC)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("fluorite")
.gem()
.ore()
.color(0x0c9949)
.iconSet("diamond")
.components("1x calcium", "2x fluorine")
.addOreByproducts("calcite", "barite")
})
// Actually Additions Crystals
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("restonia")
.gem()
.color(0xA60000)
.iconSet(GTMaterialIconSet.RUBY)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.plate,
TagPrefix.rod,
])
event.create("enori")
.gem()
.color(0xEDE6FF)
.iconSet(GTMaterialIconSet.GEM_VERTICAL)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.plate,
TagPrefix.rod,
])
event.create("void")
.gem()
.color(0x0F0F0F)
.iconSet(GTMaterialIconSet.ROUGH)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.plate,
TagPrefix.rod,
])
event.create("palis")
.gem()
.color(0x1C1C89)
.iconSet(GTMaterialIconSet.LAPIS)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.plate,
TagPrefix.rod,
])
event.create("diamatine")
.gem()
.color(0x8B8DF3)
.iconSet(GTMaterialIconSet.FINE)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.plate,
TagPrefix.rod,
])
event.create("emeradic")
.gem()
.color(0x09E103)
.iconSet(GTMaterialIconSet.GEM_HORIZONTAL)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.plate,
TagPrefix.rod,
])
event.create("black_quartz")
.gem()
.color(0x0F0F0F)
.iconSet(GTMaterialIconSet.QUARTZ)
})
// Actually Additions empowered crystals
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("restonia_empowered")
.gem().fluid()
.color(0xA60000)
.iconSet(GTMaterialIconSet.RUBY)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.rod,
])
event.create("enori_empowered")
.gem().fluid()
.color(0xEDE6FF)
.iconSet(GTMaterialIconSet.GEM_VERTICAL)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.rod,
])
event.create("void_empowered")
.gem().fluid()
.color(0x0F0F0F)
.iconSet(GTMaterialIconSet.ROUGH)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.rod,
])
event.create("palis_empowered")
.gem().fluid()
.color(0x1C1C89)
.iconSet(GTMaterialIconSet.LAPIS)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.rod,
])
event.create("diamatine_empowered")
.gem().fluid()
.color(0x8B8DF3)
.iconSet(GTMaterialIconSet.FINE)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.rod,
])
event.create("emeradic_empowered")
.gem().fluid()
.color(0x09E103)
.iconSet(GTMaterialIconSet.GEM_HORIZONTAL)
.flags(GTMaterialFlags.GENERATE_GEAR)
.ignoredTagPrefixes([
TagPrefix.dust,
TagPrefix.dustSmall,
TagPrefix.dustTiny,
TagPrefix.gemExquisite,
TagPrefix.gemFlawless,
TagPrefix.rod,
])
})
// Sunnarium
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("sunnarium")
.dust()
.color(0xDDD692)
.flags(GTMaterialFlags.PHOSPHORESCENT, GTMaterialFlags.GENERATE_PLATE)
event.create("enriched_sunnarium")
.dust()
.color(0xACFFC2)
.flags(GTMaterialFlags.PHOSPHORESCENT, GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_DENSE)
})
// Terbium
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("ammonium_oxalate")
.dust()
.color(0x2596be)
.components("2x ammonia", "2x carbon", "4x oxygen")
event.create("ammonium_nitrate")
.dust()
.color(0xF5F5F5)
.components("1x ammonia", "1x nitric_acid")
event.create("thorium_hydroxide")
.dust()
.color(0x243e1c)
.components("1x thorium", "4x oxygen", "4x hydrogen")
.formula("Th(OH)4")
event.create("terbium_salt")
.dust()
.color(0x7f7367)
.components("1x terbium", "3x chlorine")
.flags(GTMaterialFlags.NO_SMASHING, GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("magnetic_terbium")
.ingot()
.components("1x terbium")
.color(0x8C8F7A)
.iconSet(GTMaterialIconSet.MAGNETIC)
.ingotSmeltInto(GTMaterials.get("terbium"))
.arcSmeltInto(GTMaterials.get("terbium"))
.macerateInto(GTMaterials.get("terbium"))
.flags(GTMaterialFlags.GENERATE_LONG_ROD, GTMaterialFlags.IS_MAGNETIC)
})
// Misc
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("elemental_reduction_fluid")
.fluid()
.color(0xbbddbd)
.iconSet("elemental_reduction_fluid")
event.create("dragon_breath")
.fluid()
.color(0xFF6AB9)
event.create("jean_gasoline")
.fluid()
.color(0xF16AA5)
event.create("holmium_oxide")
.dust()
.color(0xD29092)
.components("2x holmium", "3x oxygen")
event.create("waste_gas_mixture")
.fluid()
.color(0x666677)
.components("10x carbon_monoxide", "5x chloroethane", "7x ammonium_formate", "9x dinitrogen_tetroxide", "2x neon", "1x tritium")
.flags(GTMaterialFlags.DECOMPOSITION_BY_CENTRIFUGING)
event.create("trinaquadalloy")
.fluid()
.ingot()
.color(0x281832)
.iconSet("bright")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_DENSE)
.components("6x trinium", "2x naquadah", "1x carbon")
.blastTemp(8747, "higher", 131072, 1200)
event.create("rotten_meat")
.dust(1)
.color(0xe8543a).secondaryColor(0x684a09).iconSet(GTMaterialIconSet.SAND)
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("saline_antiseptic")
.fluid()
.color(0x99dce5)
event.create("rotten_sludge")
.fluid()
.color(0x997700)
})
GTCEuStartupEvents.materialModification(event => {
GTMaterials.RhodiumPlatedPalladium.setComponents("3x palladium", "1x rhodium", "2x lumium")
GTMaterials.RhodiumPlatedPalladium.setFormula("Pd3Rh(SnFe)4(CuAg4)2", true)
GTMaterials.Glowstone.setComponents("1x tricalcium_phosphate", "1x gold")
GTMaterials.Glowstone.setFormula("AuCa3(PO4)2", true)
// We keep Ingots in the material definition so we can replace it in the Ore Processing Diagram with vanilla Netherite Scrap, then remove it here.
TagPrefix.ingot.setIgnored(GTMaterials.get("netherite_scrap"), Ingredient.of("minecraft:netherite_scrap"))
})

View file

@ -0,0 +1,75 @@
/**
* Missing Material Forms.
* Some GT materials need a fluid, plate, wire, gear, plasma,
* or other variant of that material.
* This file adds them.
*/
const $PropertyKey = Java.loadClass("com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey")
const $IngotProperty = Java.loadClass("com.gregtechceu.gtceu.api.data.chemical.material.properties.IngotProperty")
const $FluidProperty = Java.loadClass("com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidProperty")
const $FluidStorageKeys = Java.loadClass("com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys")
const $FluidPipeProperty = Java.loadClass("com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidPipeProperties")
const $WireProperty = Java.loadClass("com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties")
const $BlastProperty = Java.loadClass("com.gregtechceu.gtceu.api.data.chemical.material.properties.BlastProperty")
const $FluidBuilder = Java.loadClass("com.gregtechceu.gtceu.api.fluids.FluidBuilder");
let addFluid = (mat, key, temp) => {
let prop = new $FluidProperty()
prop.getStorage().enqueueRegistration(key, new $FluidBuilder().temperature(temp))
mat.setProperty(PropertyKey.FLUID, prop)
}
GTCEuStartupEvents.registry("gtceu:material", event => {
// Existing materials that get an item form
GTMaterials.Lutetium.setProperty($PropertyKey.INGOT, new $IngotProperty())
GTMaterials.Actinium.setProperty($PropertyKey.INGOT, new $IngotProperty())
GTMaterials.Actinium.setMaterialARGB(0xaa3399)
GTMaterials.Actinium.addFlags(GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_LONG_ROD, GTMaterialFlags.GENERATE_RING, GTMaterialFlags.GENERATE_ROUND, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_SMALL_GEAR, GTMaterialFlags.GENERATE_SPRING, GTMaterialFlags.GENERATE_BOLT_SCREW)
GTMaterials.Terbium.setProperty($PropertyKey.INGOT, new $IngotProperty())
GTMaterials.Terbium.setMaterialARGB(0x8C8F7A)
GTMaterials.Terbium.setProperty($PropertyKey.BLAST, new $BlastProperty(7200, "higher", 524288, 900, -1, -1));
GTMaterials.Terbium.addFlags(GTMaterialFlags.GENERATE_LONG_ROD)
GTMaterials.Holmium.setProperty($PropertyKey.INGOT, new $IngotProperty())
GTMaterials.Holmium.setMaterialARGB(0xe59274)
GTMaterials.Holmium.setMaterialSecondaryARGB(0x715774)
GTMaterials.Holmium.setProperty($PropertyKey.WIRE, new $WireProperty(33554432, 64, 0, true))
GTMaterials.Holmium.setProperty($PropertyKey.FLUID_PIPE, new $FluidPipeProperty(10000, 18000, true, false, true, true))
GTMaterials.Holmium.setProperty($PropertyKey.BLAST, new $BlastProperty(12200, "highest", 1000000, 1000, -1, -1));
GTMaterials.Holmium.addFlags(GTMaterialFlags.GENERATE_FINE_WIRE, GTMaterialFlags.GENERATE_ROTOR, GTMaterialFlags.GENERATE_SPRING)
// Existing materials that get new material forms
GTMaterials.Neutronium.addFlags(GTMaterialFlags.GENERATE_FOIL, GTMaterialFlags.GENERATE_ROTOR)
GTMaterials.Iridium.addFlags(GTMaterialFlags.GENERATE_ROTOR, GTMaterialFlags.GENERATE_DENSE)
GTMaterials.NaquadahEnriched.addFlags(GTMaterialFlags.GENERATE_BOLT_SCREW)
GTMaterials.Graphite.addFlags(GTMaterialFlags.GENERATE_PLATE)
GTMaterials.MagnesiumDiboride.addFlags(GTMaterialFlags.GENERATE_FINE_WIRE)
GTMaterials.RutheniumTriniumAmericiumNeutronate.addFlags(GTMaterialFlags.GENERATE_FINE_WIRE)
GTMaterials.Zeron100.addFlags(GTMaterialFlags.GENERATE_DENSE)
GTMaterials.BlueAlloy.addFlags(GTMaterialFlags.GENERATE_DENSE)
GTMaterials.Neutronium.addFlags(GTMaterialFlags.GENERATE_LONG_ROD, GTMaterialFlags.GENERATE_RING, GTMaterialFlags.GENERATE_ROUND, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_SMALL_GEAR, GTMaterialFlags.GENERATE_BOLT_SCREW, GTMaterialFlags.GENERATE_DENSE)
GTMaterials.RedAlloy.addFlags(GTMaterialFlags.GENERATE_SPRING_SMALL) // For ULV Power Transformer
// Gears for Thermal Expansion
GTMaterials.Nickel.addFlags(GTMaterialFlags.GENERATE_GEAR)
GTMaterials.Copper.addFlags(GTMaterialFlags.GENERATE_GEAR)
GTMaterials.Silver.addFlags(GTMaterialFlags.GENERATE_GEAR)
GTMaterials.Lead.addFlags(GTMaterialFlags.GENERATE_GEAR)
// Radioactive materials that get liquid forms and/or a new color
addFluid(GTMaterials.Einsteinium, $FluidStorageKeys.LIQUID, 1133);
GTMaterials.Americium.getProperty($PropertyKey.FLUID).storage.enqueueRegistration($FluidStorageKeys.PLASMA, new GTFluidBuilder())
addFluid(GTMaterials.Berkelium, $FluidStorageKeys.LIQUID, 1259);
GTMaterials.Berkelium.setMaterialARGB(0xa33f20);
addFluid(GTMaterials.Californium, $FluidStorageKeys.LIQUID, 1173);
GTMaterials.Californium.setMaterialARGB(0x7d0222)
addFluid(GTMaterials.Neptunium, $FluidStorageKeys.LIQUID, 913);
GTMaterials.Neptunium.setMaterialARGB(0x486d7b)
addFluid(GTMaterials.Curium, $FluidStorageKeys.LIQUID, 1618);
GTMaterials.Curium.setMaterialARGB(0x58307f)
addFluid(GTMaterials.NetherStar, $FluidStorageKeys.LIQUID, 1337);
GTMaterials.Thorium.setMaterialARGB(0x273420)
addFluid(GTMaterials.Actinium, $FluidStorageKeys.LIQUID, 1324);
})

View file

@ -0,0 +1,62 @@
/**
* Thermal Material Registry.
* Used for registering Gregtech Materials
* that are related to Thermal or its 1.12 version.
*/
// ? Keep in sync with
// ? https://github.com/Nomi-CEu/Nomi-Labs/blob/main/src/main/java/com/nomiceu/nomilabs/gregtech/material/registry/register/LabsThermal.java
GTCEuStartupEvents.registry("gtceu:material", event => {
event.create("ardite")
.ingot().fluid()
.color(0xad2f05).iconSet("dull")
.flags(GTMaterialFlags.GENERATE_PLATE)
.components("3x red_steel", "blaze")
event.create("manyullyn")
.ingot().fluid()
.color(0x9949cc).iconSet("metallic")
.blastTemp(4800, "high")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_DENSE)
.components("4x ardite", "4x cobalt", "mana")
event.create("signalum")
.ingot().fluid()
.color(0xff7f0f).iconSet("shiny")
.blastTemp(4000, "mid", 7680, 1400)
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_DENSE, GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_GEAR)
.components("4x annealed_copper", "2x ardite", "2x red_alloy", "mana")
.cableProperties(32768, 1, 0, true)
event.create("lumium")
.ingot().fluid()
.color(0xf6ff99).iconSet("bright")
.blastTemp(4500, "mid", 4800, 1000)
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_FINE_WIRE)
.components("4x tin_alloy", "2x sterling_silver", "mana")
.cableProperties(8192, 1, 0, true)
.fluidPipeProperties(4500, 256, true, true, true, false)
event.create("enderium")
.ingot().fluid()
.color(0x1f6b62).iconSet("shiny")
.blastTemp(6400, "highest", 30720, 1600)
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR, GTMaterialFlags.GENERATE_FINE_WIRE)
.components("4x lead", "2x platinum", "blue_steel", "osmium", "tantalum", "mana")
.cableProperties(131072, 1, 0, true)
event.create("electrum_flux")
.ingot().fluid()
.color(0xf7be20).iconSet("bright")
.blastTemp(1100, "low")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR)
.components("6x electrum", "lumium", "signalum");
// Mythril
event.create("mythril")
.ingot().liquid()
.color(0x428fdb).iconSet("dull")
.blastTemp(2141, null)
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_GEAR)
.components("titanium", "mana");
})

View file

@ -0,0 +1,286 @@
// ! Hardcore mode chemicals
/**
* Gregtech Chemical Materials Registry: Hardmode+
* This file is for custom fluids (And some solids!)
* used in custom chemlines specific to Hardmode like expert Titanium and Graphite.
*/
// Custom Naquadah Fuel Iconset
GTCEuStartupEvents.registry("gtceu:material_icon_set", event => {
if (doHarderNaqFuel) {
event.create("naquadah_superfuel").parent(GTMaterialIconSet.RADIOACTIVE)
}
})
GTCEuStartupEvents.registry("gtceu:material", event => {
if (doHarderProcessing) {
event.create("tungsten_trioxide")
.dust()
.color(0xC7D300).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("tungsten", "3x oxygen")
event.create("beryllium_oxide")
.ingot()
.color(0x54C757).iconSet("dull")
.flags(GTMaterialFlags.GENERATE_ROD, GTMaterialFlags.GENERATE_RING)
.components("beryllium", "oxygen")
event.create("niobium_pentoxide")
.dust()
.color(0xBAB0C3).iconSet("rough")
.components("2x niobium", "5x oxygen")
event.create("tantalum_pentoxide")
.dust()
.color(0x72728A).iconSet("rough")
.components("2x tantalum", "5x oxygen")
event.create("manganese_difluoride")
.dust()
.color(0xEF4B3D).iconSet("rough")
.components("manganese", "2x fluorine")
event.create("molybdenum_trioxide")
.dust()
.color(0xCBCFDA).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("molybdenum", "3x oxygen")
event.create("wollastonite")
.dust()
.color(0xF7F7E7).iconSet("bright")
.components("calcium", "silicon", "3x oxygen")
event.create("sodium_metavanadate")
.dust()
.color(0xe6bb22).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("sodium", "vanadium", "3x oxygen")
event.create("vanadium_pentoxide")
.dust()
.color(0xffcf33).iconSet("rough")
.components("2x vanadium", "5x oxygen")
event.create("ammonium_metavanadate")
.dust()
.color(0xf7e37e).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("nitrogen", "4x hydrogen", "vanadium", "3x oxygen")
event.create("phthalic_anhydride")
.dust()
.color(0xeeaaee).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("8x carbon", "4x hydrogen", "3x oxygen")
.formula("C6H4(CO)2O");
event.create("ethylanthraquinone")
.dust()
.color(0xf1e181)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("16x carbon", "12x hydrogen", "2x oxygen")
.formula("C6H4(CO)2C6H3(CH2CH3)");
event.create("hydrazine") // is this a reference to the book 'Ignition! An Informal History of Liquid Rocket Propellants.' no way
.fluid()
.color(0xb50707)
.components("2x nitrogen", "4x hydrogen")
event.create("acetone_azine")
.fluid()
.color(0xa1e1e1)
.components("6x carbon", "12x hydrogen", "2x nitrogen")
.formula("((CH3)2(CN))2");
event.create("graphene_oxide")
.dust()
.color(0x777777).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("graphene", "oxygen")
// Harder Fluorantimonic Acid
event.create("antimony_pentafluoride")
.fluid()
.color(0xe3f1f1)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("antimony", "5x fluorine")
event.create("lead_metasilicate")
.dust()
.color(0xF7F7E7).iconSet("dull")
.components("lead", "silicon", "3x oxygen")
}
if (doHarderRecipes) {
// Kapton K
event.create("durene")
.dust()
.fluid()
.color(0x336040).iconSet("fine")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("10x carbon", "14x hydrogen")
.formula("C6H2(CH3)4");
event.create("pyromellitic_dianhydride")
.dust()
.fluid()
.color(0xB48C63)
.components("10x carbon", "2x hydrogen", "6x oxygen")
.formula("C6H2(C2O3)2");
event.create("dimethylformamide")
.fluid()
.color(0x42bdff)
.components("3x carbon", "7x hydrogen", "nitrogen", "oxygen")
event.create("oxydianiline")
.dust()
.fluid()
.color(0xf0e130).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("12x carbon", "12x hydrogen", "2x nitrogen", "oxygen")
.formula("O(C6H4NH2)2");
event.create("oxydianiline_sludge")
.fluid()
.color(0xD9CCBF)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("1x oxydianiline", "1x dimethylformamide")
event.create("kapton_k")
.polymer()
.fluid()
.color(0x915A23)
.components("1x pyromellitic_dianhydride", "1x oxydianiline")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION, GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.STICKY)
}
if(doHarderNaqFuel) {
// Liquid Naquadah Fuels and their ingredients (HM+ Only)
event.create("naq_fuel_t1")
.liquid()
.color(0xB9E364)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("naq_fuel_t1_depleted")
.liquid()
.color(0x323D1C)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("naq_fuel_t2")
.liquid()
.color(0x56F075)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("naq_fuel_t2_depleted")
.liquid()
.color(0x123619)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("naquadah_superfuel")
.color(0xFFFFFF).iconSet("naquadah_superfuel")
.liquid(new GTFluidBuilder().state(GTFluidState.PLASMA).customStill())
event.create("naquadah_superfuel_depleted")
.color(0x00002F)
.liquid()
.flags()
event.create("raw_naquadah_solution")
.liquid()
.color(0x5E7855)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("piranha_solution")
.liquid()
.color(0xFFF382)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("hot_piranha_solution")
.liquid()
.color(0xFFC582)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("tritium_radon_difluoride")
.gas()
.color(0xFF5462)
.components("1x tritium", "1x radon", "2x fluorine")
event.create("inert_naquadah_blend")
.liquid()
.color(0x80D463)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("active_naquadah_blend")
.liquid()
.color(0xBBFF00)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("light_naquadah_isotope_fraction")
.liquid()
.color(0xDCFF7a)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("medium_naquadah_isotope_fraction")
.liquid()
.color(0xB0D93F)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("heavy_naquadah_isotope_fraction")
.liquid()
.color(0x698A11)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("naquadah_isotope_sludge")
.liquid()
.color(0x253005)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("cracked_light_naquadah_isotope_fraction")
.liquid()
.color(0xFFFF7A)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("cracked_medium_naquadah_isotope_fraction")
.liquid()
.color(0xD9D93F)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("cracked_heavy_naquadah_isotope_fraction")
.liquid()
.color(0x888811)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("cracked_naquadah_isotope_sludge")
.liquid()
.color(0x253003)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("heavy_atomic_residue")
.liquid()
.color(0xb4441F)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("superheavy_atomic_residue")
.liquid()
.color(0x990000)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("purified_heavy_residue")
.liquid()
.color(0xDE643B)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("purified_superheavy_residue")
.liquid()
.color(0xE60000)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("exotic_particle_solution")
.liquid()
.color(0xF8EBBE)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
}
})

View file

@ -0,0 +1,53 @@
/**
* Registration of hardmore-only chemical elements
*/
GTCEuStartupEvents.registry("gtceu:element", event => {
if (doStoneline) {
event.create("taranium")
.protons(149)
.neutrons(264)
.symbol("Tn");
}
if (doHarderNaqFuel) {
event.create("quadium")
.protons(1)
.neutrons(3)
.symbol("Qd")
.isIsotope(true);
event.create("hyperdegenerate_matter")
.protons(250)
.neutrons(1000)
.symbol("Ω");
}
})
GTCEuStartupEvents.registry("gtceu:material_icon_set", event => {
if (doHarderNaqFuel) {
event.create("hyperdegenerate_matter").parent(GTMaterialIconSet.RADIOACTIVE)
}
})
GTCEuStartupEvents.registry("gtceu:material", event => {
if (doStoneline) {
event.create("taranium")
.ingot().fluid()
.element(GTElements.get("taranium"))
.color(0xff00ff).iconSet("bright")
.flags(GTMaterialFlags.GENERATE_PLATE, GTMaterialFlags.GENERATE_DENSE)
.blastTemp(10800, "highest")
}
if (doHarderNaqFuel) {
event.create("quadium")
.gas()
.element(GTElements.get("quadium"))
.color(0x7c5bff)
event.create("hyperdegenerate_matter")
.element(GTElements.get("hyperdegenerate_matter"))
.color(0xffffff).iconSet("hyperdegenerate_matter")
.liquid(new GTFluidBuilder().state(GTFluidState.PLASMA).customStill())
}
})

View file

@ -0,0 +1,5 @@
/**
* Kapton K disabled in favor of GCYr's chain - keep this file in the case that it gets removed from the mod.
* Draconic Superconductor -> Sculk Superconductor is not Hardmode-specific
Crystal Matrix is not Hardmode-specific
*/

View file

@ -0,0 +1,25 @@
/**
* Registration of hardmode-only materials
*/
GTCEuStartupEvents.registry("gtceu:material", event => {
// if (doCreativeTank) {
// return;
// }
event.create("darmstadtite") // Hardmode only
.dust().ore(2, 1)
.iconSet("dull")
.color(0x99AA87)
.components("2x darmstadtium", "3x sulfur")
.addOreByproducts("rare_earth", "rhodium_sulfate", "darmstadtium")
event.create("dulysite") // Hardmode only
.gem().ore(2, 1)
.iconSet(GTMaterialIconSet.DIAMOND)
.color(0xF5EFC0)
.components("duranium", "3x chlorine")
.addOreByproducts("sphalerite", "duranium", "europium")
// Snowchestite is in naqline.js
})

View file

@ -0,0 +1,17 @@
/**
* Missing Material Forms: Hardmode+
* Some GT materials need a fluid, plate, wire, gear, plasma,
* or other variant of that material for Hardmode-specific content.
* This file adds them.
*/
const $DustProperty = Java.loadClass("com.gregtechceu.gtceu.api.data.chemical.material.properties.DustProperty");
GTCEuStartupEvents.registry("gtceu:material", event => {
if (doHarderProcessing) {
GTMaterials.Berkelium.setProperty(PropertyKey.INGOT, new $IngotProperty());
GTMaterials.Berkelium.addFlags(GTMaterialFlags.GENERATE_FRAME)
addFluid(GTMaterials.Oganesson, $FluidStorageKeys.GAS, 7777);
GTMaterials.Oganesson.setMaterialARGB(0x443936)
GTMaterials.RhodiumSulfate.setProperty($PropertyKey.DUST, new $DustProperty());
}
})

View file

@ -0,0 +1,73 @@
/**
! Hardcore mode naquadah line
? Keep in sync with
? https://github.com/Nomi-CEu/Nomi-Labs/blob/main/src/main/java/com/nomiceu/nomilabs/gregtech/material/registry/register/LabsNaqLine.java
*/
GTCEuStartupEvents.registry("gtceu:material", event => {
if (doHarderProcessing) {
event.create("naquadah_oxide")
.dust()
.color(0x17ddd3).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x naquadah", "3x oxygen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("pyromorphite")
.dust()
.color(0xd3ed28).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("5x lead", "3x phosphate", "chlorine")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("naquadah_hydroxide")
.dust()
.color(0x1941a6).iconSet("dull")
.components("naquadah", "3x hydrogen", "3x oxygen")
.formula("Nq(OH)3")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("caesium_hydroxide")
.dust()
.color(0xbd8340).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("caesium", "oxygen", "hydrogen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("neocryolite")
.liquid()
.color(0x3fd1aa)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("3x caesium", "naquadah", "6x fluorine")
event.create("naquadah_oxide_petro_solution")
.liquid()
.color(0x595c70)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("naquadah_oxide_aero_solution")
.liquid()
.color(0x6f7059)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("hot_naquadah_oxide_neocryolite_solution")
.liquid()
.color(0x658280)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("snowchestite") // Hardmode only
.dust().ore()
.color(0x274c9f).iconSet("shiny")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("3x naquadah_oxide", "pyromorphite")
}
})
GTCEuStartupEvents.materialModification(() => {
if (doHarderProcessing) {
// Use `.setOreByProducts` here instead of `.addOreByproducts` because of https://github.com/GregTechCEu/GregTech-Modern/issues/2633
GTMaterials.get("snowchestite").getProperty(PropertyKey.ORE)
.setOreByProducts("chalcopyrite", "vanadium_magnetite", "naquadah_hydroxide");
}
})

View file

@ -0,0 +1,175 @@
/**
! Hardcore mode platinum line
? Keep in sync with
? https://github.com/Nomi-CEu/Nomi-Labs/blob/main/src/main/java/com/nomiceu/nomilabs/gregtech/material/registry/register/LabsPlatLine.java
*/
GTCEuStartupEvents.registry("gtceu:material", event => {
if (doHarderProcessing) {
event.create("iridium_dioxide_residue")
.dust()
.color(0x17182e).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("iridium", "2x oxygen", "rare_earth")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("chloroplatinic_acid")
.fluid()
.color(0xfef0c2)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x hydrogen", "platinum", "6x chlorine")
event.create("palladium_rich_ammonia")
.fluid()
.color(0x808080)
.components("2x ammonia", "palladium", "chlorine")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("rhodium_sulfate_solution")
.fluid()
.color(0xffbb66)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("rhodium_sulfate", "water");
event.create("acidic_iridium_dioxide_solution")
.fluid()
.color(0x27284e)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("iridium_dioxide_residue", "4x hydrochloric_acid")
event.create("platinum_palladium_leachate")
.fluid()
.color(0xffffc5)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("platinum", "palladium", "aqua_regia")
event.create("methyl_formate")
.fluid()
.color(0xffaaaa)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x carbon", "4x hydrogen", "2x oxygen")
event.create("platinum_metallic")
.dust()
.color(0xfffbc5).iconSet("metallic")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("platinum", "rare_earth")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("palladium_metallic")
.dust()
.color(0x808080).iconSet("metallic")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("palladium", "rare_earth")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall])
event.create("ammonium_hexachloroplatinate")
.dust()
.color(0xfef0c2).iconSet("metallic")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x nitrogen", "8x hydrogen", "platinum", "6x chlorine")
.formula("(NH4)2PtCl6")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("potassium_bisulfate")
.dust()
.color(0xfdbd68)
.components("potassium", "hydrogen", "sulfur", "4x oxygen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("potassium_pyrosulfate")
.dust()
.color(0xfbbb66)
.components("2x potassium", "2x sulfur", "7x oxygen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("zinc_sulfate")
.dust()
.color(0x846649).iconSet("fine")
.components("zinc", "sulfur", "4x oxygen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("sodium_nitrate")
.dust()
.color(0x846684).iconSet("rough")
.components("sodium", "nitrogen", "3x oxygen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("rhodium_nitrate")
.dust()
.color(0x776649).iconSet("fine")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("rhodium", "3x nitrogen", "9x oxygen")
.formula("Rh(NO3)3")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("sodium_ruthenate")
.dust()
.color(0x3a40cb).iconSet("shiny")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x sodium", "ruthenium", "4x oxygen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("sodium_peroxide")
.dust()
.color(0xecff80).iconSet("rough")
.components("2x sodium", "2x oxygen")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("ammonium_hexachloroiridiate")
.dust()
.color(0x644629).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x nitrogen", "2x hydrogen", "iridium", "6x chlorine")
.formula("(NH4)2IrCl6");
event.create("platinum_group_residue")
.dust()
.color(0x64632e).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("iridium", "osmium", "rhodium", "ruthenium", "rare_earth");
event.create("crude_platinum_residue")
.dust()
.color(0xfffbc5).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("platinum_raw")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("crude_palladium_residue")
.dust()
.color(0x909090).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("palladium_raw")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("iridium_group_sludge")
.dust()
.color(0x644629).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("iridium", "osmium", "ruthenium", "rare_earth")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("crude_rhodium_residue")
.dust()
.color(0x666666).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x rhodium", "water")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("rhodium_salt")
.dust()
.color(0x848484).iconSet("shiny")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("2x salt", "2x rhodium", "6x chlorine")
.formula("(NaCl)2(RhCl3)2")
.ignoredTagPrefixes([TagPrefix.dustTiny, TagPrefix.dustSmall]);
event.create("sodium_methoxide")
.dust()
.color(0xd0d0f0).iconSet("dull")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("carbon", "3x hydrogen", "oxygen", "sodium");
}
});

View file

@ -0,0 +1,94 @@
/**
! Hardcore Mode mode taranium line
? Keep in sync with
? https://github.com/Nomi-CEu/Nomi-Labs/blob/main/src/main/java/com/nomiceu/nomilabs/gregtech/material/registry/register/LabsTaraniumLine.java
*/
GTCEuStartupEvents.registry("gtceu:material", event => {
if (doStoneline) {
event.create("hydrogen_peroxide")
.liquid()
.color(0xd2ffff)
.components("2x hydrogen", "2x oxygen")
event.create("hexafluorosilicic_acid")
.fluid()
.color(0xd00010)
.components("2x hydrogen", "silicon", "6x fluorine")
event.create("dirty_hexafluorosilicic_acid")
.fluid()
.color(0xe00030)
.components("2x hydrogen", "silicon", "6x fluorine", "rare_earth")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("ultraacidic_residue")
.fluid()
.color(0xb0babf)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("xenic_acid")
.fluid()
.color(0xa567db)
.components("xenon", "water", "3x oxygen")
.formula("H2XeO4");
event.create("dusty_helium")
.gas()
.color(0xa040af)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("helium_3", "rare_earth")
event.create("taranium_enriched_helium")
.gas().plasma()
.color(0x10c050)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("taranium_depleted_helium")
.gas()
.color(0x006010)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("tritium_hydride")
.gas()
.color(0xd01010)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("tritium", "hydrogen")
event.create("helium_hydride")
.gas()
.color(0xe6d62e)
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
.components("helium_3", "hydrogen")
event.create("dioxygen_difluoride")
.fluid() // 80
.colorAverage()
.components("2x oxygen", "2x fluorine")
event.create("stone_residue")
.dust()
.color(0x4d4d4d).iconSet("rough")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("uncommon_residue")
.dust()
.color(0x4d4ded).iconSet("fine")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("oxidised_residue")
.dust()
.color(0xad4d4d).iconSet("fine")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
event.create("refined_residue")
.dust()
.color(0x2a8a21).iconSet("shiny")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION);
event.create("clean_inert_residue")
.dust()
.color(0x3bbd2f).iconSet("shiny")
.flags(GTMaterialFlags.DISABLE_DECOMPOSITION)
}
})

View file

@ -0,0 +1,9 @@
/**
* Block modification.
* Only used for one thing at the moment.
*/
BlockEvents.modification(event => {
event.modify("watercollector:watercollector", block => {
block.destroySpeed = 0.3
})
})

View file

@ -0,0 +1,79 @@
/**
* Item modification.
* Used to modify items not added by KJS
* except for the Infinity/Ultimate crafting tools.
*/
const $ItemBuilder = Java.loadClass("dev.latvian.mods.kubejs.item.custom.BasicItemJS$Builder")
const $Rarity = Java.loadClass("net.minecraft.world.item.Rarity")
const $UnaryOperator = Java.loadClass("java.util.function.UnaryOperator")
const $UtilsJS = Java.loadClass("dev.latvian.mods.kubejs.util.UtilsJS")
const $Style = Java.loadClass("net.minecraft.network.chat.Style")
// All Items that need to have a different rarity
let itemRarityMap = Utils.newMap()
itemRarityMap.put("functionalstorage:copper_upgrade", createRarity("bronze", 0xa47b47))
itemRarityMap.put("functionalstorage:gold_upgrade", createRarity("steel", 0x69696b))
itemRarityMap.put("functionalstorage:diamond_upgrade", createRarity("aluminum", 0x4e748b))
itemRarityMap.put("functionalstorage:netherite_upgrade", createRarity("stainless_steel", 0x9695a3))
ItemEvents.modification(event => {
// Make it so Sugar Cane can be used as fuel in the Furnace
event.modify("minecraft:sugar_cane", item => { item.burnTime = 300 })
// Make some items glint like enchanted items
const itemsToModify = [
"gtceu:dark_soularium_nugget",
"gtceu:dark_soularium_dust",
"gtceu:tiny_dark_soularium_dust",
"gtceu:dark_soularium_block",
"gtceu:dark_soularium_ingot",
"gtceu:small_dark_soularium_dust",
"hostilenetworks:prediction",
/empowered/,
/activated_netherite/
]
// Change rarities
itemRarityMap.forEach((item, rarity) => {
event.modify(item, i => i.rarity = rarity)
})
itemsToModify.forEach(itemName => {
event.modify(itemName, item => {
const builder = new $ItemBuilder(itemName).glow(true)
item.setItemBuilder(builder)
})
})
// Increase the maximum stack size of Ender Pearls up to 64
event.modify("minecraft:ender_pearl", item => {
item.maxStackSize = 64
})
// Make Infinity and Ultimate tools work as unbreakable crafting tools
const toolTypes = [
"file",
"hammer",
"screwdriver",
"wrench",
"wire_cutter"
]
toolTypes.forEach(type => {
event.modify(`kubejs:infinity_${type}`, item => { item.craftingRemainder = Item.of(`kubejs:infinity_${type}`).item })
event.modify(`kubejs:ultimate_${type}`, item => { item.craftingRemainder = Item.of(`kubejs:ultimate_${type}`).item })
})
})
const withColorMethod = $Style.EMPTY.class.declaredMethods.filter((method) => method.name.includes("m_131148_"))[0]
function createRarity (/** @type {string} */ name, /** @type {number} */ colorCode) {
let color = $UtilsJS.makeFunctionProxy("startup", $UnaryOperator, (style) => {
return withColorMethod.invoke(style, Color.of(colorCode).createTextColorJS())
})
return $Rarity["create(java.lang.String,java.util.function.UnaryOperator)"](name, color)
}

View file

@ -0,0 +1,85 @@
// priority: 900
/*
The fluidNukeList is used to list all IDs of fluids that should be removed from the game, or "nuked".
While this makes it far more difficult to access the fluids and effectively obliterates them in most cases,
it doesn't remove them entirely and does not guarantee that they are unobtainable, unusable, or hidden in JEI/EMI.
If you seek to hide a fluid but not remove it, use KubeJS/client_scripts/JEI.js.
If you seek to remove a recipe but not hide any fluids, use the relevant file in KubeJS/server_scripts.
*/
global.fluidNukeList = [
// Ad Astra
"ad_astra:oxygen",
"ad_astra:hydrogen",
"ad_astra:oil",
"ad_astra:fuel",
"ad_astra:cryo_fuel",
// Ender IO
"enderio:cloud_seed_concentrated",
"enderio:cloud_seed",
"enderio:fire_water",
"enderio:hootch",
"enderio:liquid_sunshine",
"enderio:nutrient_distillation",
"enderio:rocket_fuel",
"enderio:vapor_of_levity",
// GregTech Modern
"gtceu:molten_kanthal",
// Thermal Series
"cofh_core:experience",
"thermal:creosote",
"thermal:glowstone",
"thermal:redstone",
"thermal:crude_oil",
"thermal:heavy_oil",
"thermal:light_oil",
// Sophisticated Core
"sophisticatedcore:xp_still",
// Systeams
"systeams:steamier",
"systeams:steamiest",
"systeams:steamiester",
"systeams:steamiestest",
]
StartupEvents.postInit(event => {
/**
* NuclearCraft is most easily dealt with by removing *everything* but a select few fluids
*/
// Get all of the NuclearCraft fluids
let NCFluids = Fluid.getTypes().filter(id => id.includes("nuclearcraft"))
// NuclearCraft fluids to not nuke
let NCFluidsToKeep = [
"nuclearcraft:hydrated_gelatin",
"nuclearcraft:gelatin",
"nuclearcraft:sugar",
"nuclearcraft:marshmallow",
"nuclearcraft:cocoa_butter",
"nuclearcraft:pasteurized_milk",
"nuclearcraft:chocolate_liquor",
"nuclearcraft:unsweetened_chocolate",
"nuclearcraft:dark_chocolate",
"nuclearcraft:milk_chocolate",
"nuclearcraft:technical_water",
"nuclearcraft:high_pressure_steam",
]
// Add depleted fuels, or else fission reactors won't run
NCFluidsToKeep = NCFluidsToKeep.concat(NCFluids.filter(id => id.includes("depleted_fuel")))
// Add flowing fluid variants to the list of fluids to keep
NCFluidsToKeep.forEach(fluid => { NCFluidsToKeep.push(`${fluid}_flowing`) })
// Remove used fluids from the full list of NC fluids
let NCFluidsToRemove = NCFluids.filter((el) => !NCFluidsToKeep.includes(el))
// Add all the unwanted NuclearCraft fluids to the nukeList
global.fluidNukeList = global.fluidNukeList.concat(NCFluidsToRemove)
})

View file

@ -0,0 +1,320 @@
// priority: 900
/*
The itemNukeList is used to list all IDs and regexes matching IDs of items that should be removed from the game, or "nuked".
While this makes it far more difficult to access the items and effectively obliterates them in most cases,
it doesn't remove them entirely and does not guarantee that they are unobtainable, unusable, or hidden in EMI/JEI.
Examples of such cases are:
- Items that may drop from a loot table (not unobtainable)
- Items that provide right-click functionality (not unusable)
- ExtendedCrafting Singularities, which have a special recipe page which cannot be hidden by normal means (not hidden in EMI/JEI)
If you seek to hide an item but not remove it, use KubeJS/client_scripts/JEI.js.
If you seek to remove a recipe but not hide any items, use the relevant file in KubeJS/server_scripts.
*/
global.itemNukeList = [
// Ad Astra
"ad_astra:cable_duct",
"ad_astra:coal_generator",
"ad_astra:compressor",
"ad_astra:cryo_freezer",
"ad_astra:desh_cable",
"ad_astra:desh_fluid_pipe",
"ad_astra:energizer",
"ad_astra:energizer",
"ad_astra:engine_frame",
"ad_astra:etrionic_blast_furnace",
"ad_astra:etrionic_capacitor",
"ad_astra:etrionic_core",
"ad_astra:fan",
"ad_astra:fluid_pipe_duct",
"ad_astra:fuel_refinery",
"ad_astra:ostrum_fluid_pipe",
"ad_astra:photovoltaic_etrium_cell",
"ad_astra:photovoltaic_vesnium_cell",
"ad_astra:solar_panel",
"ad_astra:steel_cable",
"ad_astra:water_pump",
/^ad_astra:.*_bucket$/,
// Applied Energistics 2
"ae2:certus_quartz_crystal",
"ae2:charged_certus_quartz_crystal",
"ae2:fluix_block",
"ae2:fluix_crystal",
"ae2:fluix_dust",
"ae2:vibration_chamber",
// Better Angel Ring
"better_angel_ring:ring",
// Chisels & Bits
"chiselsandbits:block_bit",
// EnderIO
"enderio:alloy_smelter",
"enderio:clayed_glowstone",
"enderio:cloud_seed_bucket",
"enderio:cloud_seed_concentrated_bucket",
"enderio:conductive_alloy_grinding_ball",
"enderio:conduit",
"enderio:confusing_powder",
"enderio:copper_alloy_grinding_ball",
"enderio:dark_steel_grinding_ball",
"enderio:end_steel_grinding_ball",
"enderio:energetic_alloy_grinding_ball",
"enderio:energy_conduit",
"enderio:fire_water_bucket",
"enderio:flour",
"enderio:hootch_bucket",
"enderio:industrial_insulation_block",
"enderio:liquid_sunshine_bucket",
"enderio:nethercotta",
"enderio:nutrient_distillation_bucket",
"enderio:organic_black_dye",
"enderio:organic_brown_dye",
"enderio:organic_green_dye",
"enderio:plant_matter_brown",
"enderio:plant_matter_green",
"enderio:primitive_alloy_smelter",
"enderio:pulsating_alloy_grinding_ball",
"enderio:redstone_alloy_grinding_ball",
"enderio:rocket_fuel_bucket",
"enderio:sag_mill",
"enderio:silicon",
"enderio:soul_powder",
"enderio:soularium_grinding_ball",
"enderio:stirling_generator",
"enderio:vapor_of_levity_bucket",
"enderio:vibrant_alloy_grinding_ball",
"enderio:withering_powder",
/^enderio:painted_/,
/^enderio:powdered_/,
// Ender Storage
// TODO: Need to add greggy recipes for these
"endertanks:ender_bucket",
"enderchests:ender_bag",
// ExtendedAE
"expatternprovider:silicon_block",
"expatternprovider:circuit_cutter",
/expatternprovider.*cutter/,
// Extended Crafting
"extendedcrafting:auto_ender_crafter",
"extendedcrafting:black_iron_slate",
"extendedcrafting:compressor",
"extendedcrafting:ender_alternator",
"extendedcrafting:ender_catalyst",
"extendedcrafting:ender_component",
"extendedcrafting:ender_crafter",
"extendedcrafting:ender_star",
"extendedcrafting:enhanced_ender_catalyst",
"extendedcrafting:enhanced_ender_component",
"extendedcrafting:enhanced_redstone_catalyst",
"extendedcrafting:enhanced_redstone_component",
"extendedcrafting:flux_crafter",
"extendedcrafting:flux_star",
"extendedcrafting:frame",
"extendedcrafting:recipe_maker",
"extendedcrafting:singularity",
// GTCEu: Modern
"gtceu:ender_fluid_link_cover", // Not Yet Implemented. Remove when GTM makes it work.
"gtceu:hot_kanthal_ingot",
"gtceu:hot_silicon_ingot",
"gtceu:milk",
"gtceu:steel_machine_casing",
/^gtceu:uxv/,
/^gtceu:opv/,
/^gtmutils:uxv/,
/^gtmutils:opv/,
// Hammerlib
/^hammerlib:/,
// HNN
"hostilenetworks:deep_learner",
"hostilenetworks:twilight_prediction",
// Iron Furnaces
"ironfurnaces:augment_blasting",
"ironfurnaces:augment_generator",
"ironfurnaces:augment_smoking",
"ironfurnaces:heater",
"ironfurnaces:item_heater",
"ironfurnaces:item_spooky",
"ironfurnaces:item_xmas",
"ironfurnaces:rainbow_coal",
"ironfurnaces:rainbow_core",
"ironfurnaces:rainbow_plating",
"ironfurnaces:allthemodium_furnace",
"ironfurnaces:vibranium_furnace",
"ironfurnaces:unobtainium_furnace",
"ironfurnaces:million_furnace",
"ironfurnaces:upgrade_allthemodium",
"ironfurnaces:upgrade_vibranium",
"ironfurnaces:upgrade_unobtainium",
// TODO renable this again. why in the fuck did we disable this?
// No upgrade consumables to go from diamond to obsidian or iron to silver without re-enabling more furnaces
"ironfurnaces:upgrade_iron",
"ironfurnaces:upgrade_gold",
"ironfurnaces:upgrade_diamond",
"ironfurnaces:upgrade_emerald",
"ironfurnaces:upgrade_obsidian",
"ironfurnaces:upgrade_crystal",
"ironfurnaces:upgrade_netherite",
"ironfurnaces:upgrade_copper",
"ironfurnaces:upgrade_obsidian2",
"ironfurnaces:upgrade_silver",
"ironfurnaces:upgrade_obsidian2",
"ironfurnaces:upgrade_iron2",
"ironfurnaces:upgrade_gold2",
"ironfurnaces:upgrade_silver2",
"ironfurnaces:crystal_furnace",
"ironfurnaces:emerald_furnace",
"ironfurnaces:item_linker",
// Iron Jetpacks
"ironjetpacks:advanced_coil",
"ironjetpacks:basic_coil",
"ironjetpacks:capacitor",
"ironjetpacks:cell",
"ironjetpacks:elite_coil",
"ironjetpacks:thruster",
"ironjetpacks:ultimate_coil",
// Just Another Void Dimension (JAVD)
"javd:portal_block",
// KubeJS
"kubejs:debug_ctm_block",
// LaserIO
"laserio:logic_chip",
"laserio:logic_chip_raw",
// Megacells
"megacells:mega_crafting_accelerator",
"megacells:bulk_storage_component",
/^megacells:.*mega_interface$/,
/^megacells:.*mega_pattern_provider$/,
/^megacells:sky_steel/,
// PackagedExCrafting
"packagedexcrafting:basic_crafter",
"packagedexcrafting:ender_crafter",
"packagedexcrafting:flux_crafter",
// Solar Flux
/^solarflux:.*_upgrade$/,
/^solarflux:.*_glass$/,
"solarflux:blazing_coating",
// Looking for removed Sophisticated Storage items?
// Look in configs/sophisticatedcore-common.toml.
// SophStorage offers a way to remove items from the registry with config.
// Systeams
"systeams:compression_boiler",
"systeams:disenchantment_boiler",
"systeams:gourmand_boiler",
"systeams:lapidary_boiler",
"systeams:magmatic_boiler",
"systeams:numismatic_boiler",
"systeams:steamier_bucket",
"systeams:steamiest_bucket",
"systeams:steamiester_bucket",
"systeams:steamiestest_ball",
// Telepastries
"telepastries:custom_cake2",
"telepastries:custom_cake3",
"telepastries:twilight_cake",
// Thermal Series
"thermal:apatite",
"thermal:bitumen",
"thermal:cinnabar",
"thermal:coal_coke_block",
"thermal:coal_coke",
"thermal:constantan_coin",
"thermal:creosote_bucket",
"thermal:crude_oil_bucket",
"thermal:cured_rubber",
"thermal:drill_head",
"thermal:dynamo_disenchantment",
"thermal:dynamo_lapidary",
"thermal:dynamo_stirling",
"thermal:glowstone_bucket",
"thermal:heavy_oil_bucket",
"thermal:light_oil_bucket",
"thermal:niter",
"thermal:oil_red_sand",
"thermal:oil_sand",
"thermal:raw_rubber",
"thermal:redstone_bucket",
"thermal:rubber",
"thermal:ruby",
"thermal:sapphire",
"thermal:saw_blade",
"thermal:sawdust",
"thermal:sulfur",
"thermal:tar",
/^thermal:.*_cast$/,
// Thermal Series Machines
"thermal:machine_furnace",
"thermal:machine_sawmill",
"thermal:machine_pulverizer",
"thermal:machine_smelter",
"thermal:machine_centrifuge",
"thermal:machine_crucible",
"thermal:machine_chiller",
"thermal:machine_refinery",
"thermal:machine_pyrolyzer",
"thermal:machine_bottler",
"thermal:machine_brewer",
"thermal:machine_crystallizer",
"thermal:device_xp_condenser",
// Wireless Chargers
"wirelesschargers:basic_wireless_block_charger",
"wirelesschargers:advanced_wireless_block_charger",
// NuclearCraft
/^nuclearcraft:.*_cooler$/,
"nuclearcraft:synthrotron_controller",
"nuclearcraft:accelerator_beam_port",
"nuclearcraft:accelerator_casing",
"nuclearcraft:accelerator_ion_source_port",
"nuclearcraft:accelerator_port",
"nuclearcraft:accelerator_casing_glass",
"nuclearcraft:linear_accelerator_controller",
"nuclearcraft:accelerator_beam",
"nuclearcraft:xenorium298",
"nuclearcraft:quantite",
"nuclearcraft:portal",
"nuclearcraft:wasteland_earth",
"nuclearcraft:feral_ghoul_spawn_egg"
];
// Create Compat
// Removes machines related to processing
if (Platform.isLoaded("create")) {
global.itemNukeList.push(
"create:millstone",
"create:crushing_wheel",
"create:mechanical_plough",
"create:mechanical_crafter",
"create:mechanical_mixer",
"create:mechanical_saw",
"create:mechanical_drill",
"create:mechanical_harvester",
"create:mechanical_press",
"create:mechanical_roller",
"create:encased_fan"
);
}

View file

@ -0,0 +1,109 @@
// priority: 900
/**
* This file defines RegEx patterns that match with large quantities of certain items.
*
* These items are "removed" in KubeJS/client_scripts/nukelists.js and KubeJS/server_scripts/nukelists.js
* in a fashion similar to itemNukeList.
*/
/**
* All gears, blocks, ingots, nuggets, etc. we don't want to remove
*/
global.unificationExcludedItems = [
"enderio:dark_bimetal_gear",
"enderio:energized_gear",
"enderio:iron_gear",
"enderio:reinforced_obsidian_block",
"enderio:stone_gear",
"enderio:vibrant_gear",
"enderio:wood_gear",
"extendedcrafting:crystaltine_block",
"extendedcrafting:crystaltine_ingot",
"extendedcrafting:crystaltine_nugget",
"extendedcrafting:luminessence_block",
"nuclearcraft:beryllium_block",
"nuclearcraft:ferroboron_ingot",
"nuclearcraft:graphite_block",
"nuclearcraft:hard_carbon_ingot",
"nuclearcraft:tough_alloy_ingot",
"thermal:apple_block",
"thermal:beetroot_block",
"thermal:carrot_block",
"thermal:potato_block",
"thermal:sugar_cane_block",
];
/**
* A RegEx pattern that matches with all gears, blocks, ingots, nuggets, and other often-unified items
* from NuclearCraft, Thermal Series, EnderIO, Ad Astra, and ExtendedCrafting.
*/
global.unificationPattern = new RegExp(`^(?!(${global.unificationExcludedItems.join("|")})).*(nuclearcraft|thermal|enderio|ad_astra|extendedcrafting):((powdered_|raw_).*|.*(_block|_plate|_ingot|_nugget|_gear|_dust|_rod|_gem|_ore))`, "i")
/**
* All NuclearCraft fuels we don't want to remove
*/
global.nuclearCraftFuelsToKeep = [
"nuclearcraft:depleted_fuel_americium_hea_242",
"nuclearcraft:depleted_fuel_americium_lea_242",
"nuclearcraft:depleted_fuel_berkelium_heb_248",
"nuclearcraft:depleted_fuel_berkelium_leb_248",
"nuclearcraft:depleted_fuel_californium_hecf_249",
"nuclearcraft:depleted_fuel_californium_hecf_251",
"nuclearcraft:depleted_fuel_californium_lecf_249",
"nuclearcraft:depleted_fuel_californium_lecf_251",
"nuclearcraft:depleted_fuel_curium_hecm_243",
"nuclearcraft:depleted_fuel_curium_hecm_245",
"nuclearcraft:depleted_fuel_curium_hecm_247",
"nuclearcraft:depleted_fuel_curium_lecm_243",
"nuclearcraft:depleted_fuel_curium_lecm_245",
"nuclearcraft:depleted_fuel_curium_lecm_247",
"nuclearcraft:depleted_fuel_neptunium_hen_236",
"nuclearcraft:depleted_fuel_neptunium_len_236",
"nuclearcraft:depleted_fuel_plutonium_hep_239",
"nuclearcraft:depleted_fuel_plutonium_hep_241",
"nuclearcraft:depleted_fuel_plutonium_lep_239",
"nuclearcraft:depleted_fuel_plutonium_lep_241",
"nuclearcraft:depleted_fuel_thorium_tbu",
"nuclearcraft:depleted_fuel_uranium_heu_233",
"nuclearcraft:depleted_fuel_uranium_heu_235",
"nuclearcraft:depleted_fuel_uranium_leu_233",
"nuclearcraft:depleted_fuel_uranium_leu_235",
"nuclearcraft:fuel_americium_hea_242",
"nuclearcraft:fuel_americium_lea_242",
"nuclearcraft:fuel_berkelium_heb_248",
"nuclearcraft:fuel_berkelium_leb_248",
"nuclearcraft:fuel_californium_hecf_249",
"nuclearcraft:fuel_californium_hecf_251",
"nuclearcraft:fuel_californium_lecf_249",
"nuclearcraft:fuel_californium_lecf_251",
"nuclearcraft:fuel_curium_hecm_243",
"nuclearcraft:fuel_curium_hecm_245",
"nuclearcraft:fuel_curium_hecm_247",
"nuclearcraft:fuel_curium_lecm_243",
"nuclearcraft:fuel_curium_lecm_245",
"nuclearcraft:fuel_curium_lecm_247",
"nuclearcraft:fuel_neptunium_hen_236",
"nuclearcraft:fuel_neptunium_len_236",
"nuclearcraft:fuel_plutonium_hep_239",
"nuclearcraft:fuel_plutonium_hep_239",
"nuclearcraft:fuel_plutonium_hep_241",
"nuclearcraft:fuel_plutonium_lep_239",
"nuclearcraft:fuel_plutonium_lep_241",
"nuclearcraft:fuel_thorium_tbu",
"nuclearcraft:fuel_uranium_heu_233",
"nuclearcraft:fuel_uranium_heu_235",
"nuclearcraft:fuel_uranium_leu_233",
"nuclearcraft:fuel_uranium_leu_235",
]
/**
* A RegEx pattern that matches with NuclearCraft fuels and depleted fuels except the ones in the above list.
*/
global.nuclearcraftFuelPattern = new RegExp(`^(?!(?:${global.nuclearCraftFuelsToKeep.join("|")})$).*nuclearcraft:(fuel|depleted_fuel).*`, "i")
/**
* A RegEx pattern that matches with all NuclearCraft isotopes.
*/
global.nuclearcraftIsotopePattern = /^nuclearcraft:.*(_ni|_za|_ox)$/

View file

@ -0,0 +1,73 @@
/**
* Defines ore generation on Ad Astra planets.
*/
const BlockTags = Java.loadClass("net.minecraft.tags.BlockTags")
GTCEuStartupEvents.registry("gtceu:world_gen_layer", event => {
event.create("moon")
.targets("#ad_astra:moon_stone_replaceables")
.dimensions("ad_astra:moon")
event.create("mars")
.targets("#ad_astra:mars_stone_replaceables")
.dimensions("ad_astra:mars")
event.create("mercury")
.targets("#ad_astra:mercury_stone_replaceables")
.dimensions("ad_astra:mercury")
event.create("venus")
.targets("#ad_astra:venus_stone_replaceables")
.dimensions("ad_astra:venus")
event.create("glacio")
.targets("#ad_astra:glacio_stone_replaceables")
.dimensions("ad_astra:glacio")
event.create("glacio_deepslate")
.targets("#minecraft:deepslate_ore_replaceables")
.dimensions("ad_astra:glacio")
})
GTCEuStartupEvents.registry("gtceu:tag_prefix", event => {
event.create("moon", "ore")
.stateSupplier(() => Block.getBlock("ad_astra:moon_stone").defaultBlockState())
.baseModelLocation("ad_astra:block/moon_stone")
.unificationEnabled(true)
.materialIconType(GTMaterialIconType.ore)
.generationCondition(ItemGenerationCondition.hasOreProperty)
.miningToolTag("forge:mineable/pickaxe")
event.create("mars", "ore")
.stateSupplier(() => Block.getBlock("ad_astra:mars_stone").defaultBlockState())
.baseModelLocation("ad_astra:block/mars_stone")
.unificationEnabled(true)
.materialIconType(GTMaterialIconType.ore)
.generationCondition(ItemGenerationCondition.hasOreProperty)
.miningToolTag("forge:mineable/pickaxe")
event.create("mercury", "ore")
.stateSupplier(() => Block.getBlock("ad_astra:mercury_stone").defaultBlockState())
.baseModelLocation("ad_astra:block/mercury_stone")
.unificationEnabled(true)
.materialIconType(GTMaterialIconType.ore)
.generationCondition(ItemGenerationCondition.hasOreProperty)
.miningToolTag("forge:mineable/pickaxe")
event.create("venus", "ore")
.stateSupplier(() => Block.getBlock("ad_astra:venus_stone").defaultBlockState())
.baseModelLocation("ad_astra:block/venus_stone")
.unificationEnabled(true)
.materialIconType(GTMaterialIconType.ore)
.generationCondition(ItemGenerationCondition.hasOreProperty)
.miningToolTag("forge:mineable/pickaxe")
event.create("glacio", "ore")
.stateSupplier(() => Block.getBlock("ad_astra:glacio_stone").defaultBlockState())
.baseModelLocation("ad_astra:block/glacio_stone")
.unificationEnabled(true)
.materialIconType(GTMaterialIconType.ore)
.generationCondition(ItemGenerationCondition.hasOreProperty)
.miningToolTag("forge:mineable/pickaxe")
})

View file

@ -0,0 +1,87 @@
/**
* Remove Ore generation from Nuclearcraft: Neoteric and Ad Astra
* Ad Astra is weird and generates it on multiple steps, so it requires the additional events
* Thanks Ghosti for figuring this one out
*/
WorldgenEvents.remove(event => {
event.removeFeatureById("underground_ores", [
"nuclearcraft:boron_placed",
"nuclearcraft:cobalt_placed",
"nuclearcraft:lead_placed",
"nuclearcraft:lithium_placed",
"nuclearcraft:magnesium_placed",
"nuclearcraft:platinum_placed",
"nuclearcraft:silver_placed",
"nuclearcraft:thorium_placed",
"nuclearcraft:tin_placed",
"nuclearcraft:uranium_placed",
"nuclearcraft:zinc_placed",
"ad_astra:moon_iron_ore",
"ad_astra:deepslate_desh_ore",
"ad_astra:moon_desh_ore",
"ad_astra:moon_cheese_ore",
"ad_astra:moon_ice_shard_ore",
"ad_astra:mars_diamond_ore",
"ad_astra:mars_ice_shard_ore",
"ad_astra:mars_iron_ore",
"ad_astra:mars_ostrum_ore",
"ad_astra:mercury_iron_ore",
"ad_astra:glacio_ice_shard_ore",
"ad_astra:glacio_coal_ore",
"ad_astra:glacio_copper_ore",
"ad_astra:glacio_iron_ore",
"ad_astra:glacio_lapis_ore",
"ad_astra:venus_coal_ore",
"ad_astra:venus_gold_ore",
"ad_astra:venus_diamond_ore",
"ad_astra:venus_calorite_ore"
])
})
WorldgenEvents.remove(event => {
event.removeOres(props => {
props.blocks = [
"ad_astra:mars_diamond_ore",
"ad_astra:mars_ice_shard_ore",
"ad_astra:mars_iron_ore",
"ad_astra:mars_ostrum_ore",
"ad_astra:mercury_iron_ore",
"ad_astra:glacio_ice_shard_ore",
"ad_astra:glacio_coal_ore",
"ad_astra:glacio_copper_ore",
"ad_astra:glacio_iron_ore",
"ad_astra:glacio_lapis_ore",
"ad_astra:venus_coal_ore",
"ad_astra:venus_gold_ore",
"ad_astra:venus_diamond_ore",
"ad_astra:venus_calorite_ore"
]
})
})
WorldgenEvents.remove(event => {
event.removeOres(props => {
props.blocks = [
"ad_astra:moon_iron_ore",
"ad_astra:deepslate_desh_ore",
"ad_astra:moon_desh_ore",
"ad_astra:moon_cheese_ore",
"ad_astra:moon_ice_shard_ore",
"ad_astra:mars_diamond_ore",
"ad_astra:mars_ice_shard_ore",
"ad_astra:mars_iron_ore",
"ad_astra:mars_ostrum_ore",
"ad_astra:mars_ostrum_ore",
"ad_astra:mercury_iron_ore",
"ad_astra:glacio_ice_shard_ore",
"ad_astra:glacio_coal_ore",
"ad_astra:glacio_copper_ore",
"ad_astra:glacio_iron_ore",
"ad_astra:glacio_lapis_ore",
"ad_astra:venus_coal_ore",
"ad_astra:venus_gold_ore",
"ad_astra:venus_diamond_ore",
"ad_astra:venus_calorite_ore"
]
})
})

View file

@ -0,0 +1,29 @@
/**
* Re-tiers the PTERB to late LuV - script 1 of 2.
* - Replaces the neutronium frames with europium frames.
*/
let PTERBMachine = Java.loadClass("net.neganote.gtutilities.common.machine.multiblock.PTERBMachine")
let SupplierMemoizer = Java.loadClass("com.gregtechceu.gtceu.utils.SupplierMemoizer")
StartupEvents.postInit(event => {
let UtilMachines = Java.loadClass("net.neganote.gtutilities.common.machine.UtilMachines");
let pterb_pattern = (definition) => FactoryBlockPattern.start()
.aisle("###XXX###", "####F####", "#########", "####H####", "####H####", "####H####", "####H####", "####H####")
.aisle("#XXXXXXX#", "###FHF###", "####H####", "####H####", "####H####", "####F####", "#########", "#########")
.aisle("#XXHHHXX#", "#########", "#########", "#########", "####F####", "####F####", "#########", "#########")
.aisle("XXHHHHHXX", "#F#####F#", "#########", "####S####", "###SSS###", "###SSS###", "###S#S###", "#########")
.aisle("XXHHHHHXX", "FH##H##HF", "#H##C##H#", "HH#SSS#HH", "HHFSSSFHH", "HFFSSSFFH", "H#######H", "H#######H")
.aisle("XXHHHHHXX", "#F#####F#", "#########", "####S####", "###SSS###", "###SSS###", "###S#S###", "#########")
.aisle("#XXHHHXX#", "#########", "#########", "#########", "####F####", "####F####", "#########", "#########")
.aisle("#XXXXXXX#", "###FHF###", "####H####", "####H####", "####H####", "####F####", "#########", "#########")
.aisle("###XXX###", "####F####", "#########", "####H####", "####H####", "####H####", "####H####", "####H####")
.where("#", Predicates.any())
.where("X", Predicates.blocks("gtceu:palladium_substation").setMinGlobalLimited(30).or(PTERBMachine.getHatchPredicates()))
.where("S", Predicates.blocks("gtceu:superconducting_coil"))
.where("H", Predicates.blocks("gtceu:high_power_casing"))
.where("C", Predicates.controller(Predicates.blocks(UtilMachines.PTERB_MACHINE.getBlock())))
.where("F", Predicates.frames(GTMaterials.Europium))
.build()
UtilMachines.PTERB_MACHINE.setPatternFactory(SupplierMemoizer.memoize(() => pterb_pattern.apply(UtilMachines.PTERB_MACHINE)));
})

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"))
)
})

View file

@ -0,0 +1,39 @@
/**
* Create Dimension Markers for Ad Astra dimensions.
* Dimension markers are the item-based icons to indicate dimensions for GregTech recipes in EMI.
*/
GTCEuStartupEvents.registry("gtceu:dimension_marker", event => {
// Void Dim
event.create("javd:void")
.iconSupplier(() => Item.of("telepastries:custom_cake").getItem())
.tier(0)
.overrideName("Void Dimension")
// Lost Cities
event.create("lostcities:lostcities")
.iconSupplier(() => Item.of("telepastries:lost_city_cake").getItem())
.tier(0)
.overrideName("Lost Cities")
// Ad Astra dimensions
event.create("ad_astra:moon")
.iconSupplier(() => Item.of("ad_astra:moon_globe").getItem())
.tier(0)
.overrideName("Moon")
event.create("ad_astra:mars")
.iconSupplier(() => Item.of("ad_astra:mars_globe").getItem())
.tier(0)
.overrideName("Mars")
event.create("ad_astra:mercury")
.iconSupplier(() => Item.of("ad_astra:mercury_globe").getItem())
.tier(0)
.overrideName("Mercury")
event.create("ad_astra:venus")
.iconSupplier(() => Item.of("ad_astra:venus_globe").getItem())
.tier(0)
.overrideName("Venus")
event.create("ad_astra:glacio")
.iconSupplier(() => Item.of("ad_astra:glacio_globe").getItem())
.tier(0)
.overrideName("Glacio")
})