diff --git a/config/appliedenergistics2-common.toml b/config/appliedenergistics2-common.toml new file mode 100644 index 0000000000..e43166211c --- /dev/null +++ b/config/appliedenergistics2-common.toml @@ -0,0 +1,157 @@ + +#Warning: Disabling a feature may disable other features depending on it. +[features] + + [features.Facades] + #Unsupported: Allows whitelisting TileEntity as facades. Could work, have render issues, or corrupt your world. USE AT YOUR OWN RISK. + TileEntityFacades = false + + [features.Misc] + #No comment + UnsupportedDeveloperTools = false + #No comment + IntegrationLogging = false + #No comment + WebsiteRecipes = false + #No comment + LogSecurityAudits = false + #No comment + UpdateLogging = false + #No comment + PacketLogging = false + #No comment + CraftingLog = false + #No comment + DebugLogging = false + + [features.Crafting] + #No comment + EnableFacadeCrafting = true + #No comment + InWorldSingularity = true + #No comment + InWorldFluix = false + #No comment + InWorldPurification = false + #No comment + EnableDisassemblyCrafting = true + + [features.World] + #No comment + CertusQuartzWorldGen = false + #No comment + MeteoriteWorldGen = false + #No comment + SpawnPressesInMeteorites = false + #No comment + VillagerTrading = false + + [features.Rendering] + #No comment + AlphaPass = true + + [features.Commands] + #No comment + ChunkLoggerTrace = false + +[general] + #Will auto-remove items that crash when being loaded from storage. This will destroy those items instead of crashing the game! + removeCrashingItemsOnLoad = false + +[automation] + #TODO + formationPlaneEntityLimit = 128 + +[craftingCPU] + craftingCalculationTimePerTick = 5 + +[spatialio] + spatialPowerMultiplier = 1250.0 + spatialPowerExponent = 1.35 + #BE CAREFUL, CAN CORRUPT YOUR WORLD! Will use #spatial/whitelist as whitelist. + spatialBlockTags = false + +[GrindStone] + #Chance to actually get an output with stacksize > 1. + #Range: 0.0 ~ 100.0 + oreDoublePercentage = 90.0 + +[battery] + wirelessTerminal = 1600000 + chargedStaff = 8000 + entropyManipulator = 200000 + portableCell = 20000 + colorApplicator = 20000 + matterCannon = 200000 + +[worldGen] + #Range: 0.0 ~ 1.0 + spawnChargedChance = 0.0 + meteoriteBiomeBlacklist = [] + quartzOresPerCluster = 0 + quartzOresClusterAmount = 0 + quartzOresBiomeBlacklist = [] + +[wireless] + wirelessBaseCost = 8.0 + wirelessCostMultiplier = 1.0 + wirelessBaseRange = 64.0 + wirelessBoosterRangeMultiplier = 1.0 + wirelessBoosterExp = 1.5 + wirelessHighWirelessCount = 64.0 + wirelessTerminalDrainMultiplier = 1.0 + +[PowerRatios] + ForgeEnergy = 0.5 + #Range: 0.01 ~ 1.7976931348623157E308 + UsageMultiplier = 40.0 + +[Condenser] + MatterBalls = 256 + Singularity = 256000 + +# Min / Max Tickrates for dynamic ticking, most of these components also use sleeping, to prevent constant ticking, adjust with care, non standard rates are not supported or tested. +[tickRates] + InterfaceMin = 5 + InterfaceMax = 120 + ImportBusMin = 5 + ImportBusMax = 40 + FluidImportBusMin = 5 + FluidImportBusMax = 40 + ExportBusMin = 5 + ExportBusMax = 60 + FluidExportBusMin = 5 + FluidExportBusMax = 60 + AnnihilationPlaneMin = 2 + AnnihilationPlaneMax = 120 + METunnelMin = 5 + METunnelMax = 20 + InscriberMin = 1 + InscriberMax = 1 + ChargerMin = 10 + ChargerMax = 120 + IOPortMin = 1 + IOPortMax = 5 + VibrationChamberMin = 10 + VibrationChamberMax = 40 + StorageBusMin = 5 + StorageBusMax = 60 + FluidStorageBusMin = 5 + FluidStorageBusMax = 60 + ItemTunnelMin = 5 + ItemTunnelMax = 60 + LightTunnelMin = 5 + LightTunnelMax = 60 + OpenComputersTunnelMin = 1 + OpenComputersTunnelMax = 5 + PressureTunnelMin = 1 + PressureTunnelMax = 120 + +#Settings for in-world purification of crystals. +[inWorldPurification] + #A fluid tag that identifies fluids that improve crystal purification speed. Does not affect purification with water/lava. + improvedFluidTag = "" + #The speed multiplier to use when the crystals are submerged in the improved fluid. + #Range: 1.0 ~ 10.0 + improvedFluidMultiplier = 2.0 + diff --git a/kubejs/assets/appliedenergistics2/lang/en_us.json b/kubejs/assets/appliedenergistics2/lang/en_us.json new file mode 100644 index 0000000000..bcfab75d1c --- /dev/null +++ b/kubejs/assets/appliedenergistics2/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "item.appliedenergistics2.fluix_pearl": "Activated Dimentional Pearl" +} \ No newline at end of file diff --git a/kubejs/assets/appliedenergistics2/textures/item/fluix_pearl.png b/kubejs/assets/appliedenergistics2/textures/item/fluix_pearl.png new file mode 100644 index 0000000000..6853418859 Binary files /dev/null and b/kubejs/assets/appliedenergistics2/textures/item/fluix_pearl.png differ diff --git a/kubejs/client_scripts/expert/ae2_compat/constants.js b/kubejs/client_scripts/expert/ae2_compat/constants.js new file mode 100644 index 0000000000..a95806f40d --- /dev/null +++ b/kubejs/client_scripts/expert/ae2_compat/constants.js @@ -0,0 +1,48 @@ +//priority: 1001 + +const isAE2Loaded = Platform.getMods().containsKey("appliedenergistics2"); + +const itemsToHideAE = [ + 'appliedenergistics2:ender_dust', + 'appliedenergistics2:flour', + 'appliedenergistics2:gold_dust', + 'appliedenergistics2:iron_dust', + 'appliedenergistics2:nether_quartz_dust', + 'appliedenergistics2:fluix_dust', + 'appliedenergistics2:certus_quartz_dust', + + 'appliedenergistics2:fluix_crystal', + 'appliedenergistics2:charged_certus_quartz_crystal', + 'appliedenergistics2:certus_quartz_crystal', + 'appliedenergistics2:purified_certus_quartz_crystal', + 'appliedenergistics2:purified_nether_quartz_crystal', + 'appliedenergistics2:purified_fluix_crystal', + + 'appliedenergistics2:quartz_ore', + 'appliedenergistics2:charged_quartz_ore', + + 'appliedenergistics2:vibration_chamber', + 'appliedenergistics2:quartz_growth_accelerator', + 'appliedenergistics2:inscriber', + 'appliedenergistics2:crank', + 'appliedenergistics2:grindstone', + + 'appliedenergistics2:printed_calculation_processor', + 'appliedenergistics2:printed_engineering_processor', + 'appliedenergistics2:printed_logic_processor', + 'appliedenergistics2:printed_silicon', + 'appliedenergistics2:logic_processor', + 'appliedenergistics2:calculation_processor', + 'appliedenergistics2:engineering_processor', + 'appliedenergistics2:silicon', + + 'appliedenergistics2:calculation_processor_press', + 'appliedenergistics2:engineering_processor_press', + 'appliedenergistics2:logic_processor_press', + 'appliedenergistics2:silicon_press', + + 'appliedenergistics2:1k_cell_component', + 'appliedenergistics2:4k_cell_component', + 'appliedenergistics2:1k_fluid_cell_component', + 'appliedenergistics2:4k_fluid_cell_component' +]; diff --git a/kubejs/client_scripts/expert/ae2_compat/jei_hide_items.js b/kubejs/client_scripts/expert/ae2_compat/jei_hide_items.js new file mode 100644 index 0000000000..3e182d49a5 --- /dev/null +++ b/kubejs/client_scripts/expert/ae2_compat/jei_hide_items.js @@ -0,0 +1,15 @@ + + +onEvent('jei.hide.items', (event) => { + if (!isAE2Loaded) { + return; + } + if (global.isExpertMode == false) { + return; + } + + itemsToHideAE.forEach((entry) => { + event.hide(entry); + }); + +}); diff --git a/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/basic_resources.js b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/basic_resources.js new file mode 100644 index 0000000000..991696e436 --- /dev/null +++ b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/basic_resources.js @@ -0,0 +1,55 @@ + + +onEvent('recipes', (event) => { + if (!isAE2Loaded) { + return; + } + if (global.isExpertMode == false) { + return; + } + + const id_prefix = 'enigmatica:expert/ae2_compat/basic_res/'; + const recipes = [ + { toReplace: 'minecraft:iron_ingot', replaceWith: 'refinedstorage:quartz_enriched_iron' }, + { toReplace: '#appliedenergistics2:crystals/fluix', replaceWith: 'occultism:spirit_attuned_gem' }, + { toReplace: '#appliedenergistics2:crystals/certus', replaceWith: 'astralsorcery:aquamarine' }, + { toReplace: 'appliedenergistics2:fluix_dust', replaceWith: 'botania:corporea_spark', }, + { toReplace: 'appliedenergistics2:certus_quartz_dust', replaceWith: 'botania:quartz_mana', }, + { toReplace: 'appliedenergistics2:ender_dust', replaceWith: 'emendatusenigmatica:ender_dust' }, + { toReplace: 'appliedenergistics2:calculation_processor', replaceWith: 'refinedstorage:basic_processor' }, + { toReplace: 'appliedenergistics2:logic_processor', replaceWith: 'refinedstorage:improved_processor' }, + { toReplace: 'appliedenergistics2:engineering_processor', replaceWith: 'refinedstorage:advanced_processor' }, + { toReplace: 'appliedenergistics2:formation_core', replaceWith: 'refinedstorage:construction_core' }, + { toReplace: 'appliedenergistics2:annihilation_core', replaceWith: 'refinedstorage:destruction_core' } + ] + recipes.forEach((recipe) => { + event.replaceInput({ mod: 'appliedenergistics2' }, recipe.toReplace, recipe.replaceWith) + }); + + const dusts = [ + { toReplace: 'appliedenergistics2:nether_quartz_dust', replaceWith: 'emendatusenigmatica:quartz_dust' }, + { toReplace: 'appliedenergistics2:iron_dust', replaceWith: 'emendatusenigmatica:iron_dust' }, + { toReplace: 'appliedenergistics2:gold_dust', replaceWith: 'emendatusenigmatica:gold_dust' } + ] + dusts.forEach((entry) => { + event.replaceInput(entry.toReplace, entry.replaceWith); + }); + + event.remove({ output: 'appliedenergistics2:fluix_pearl' }) + event.recipes.create.compacting('appliedenergistics2:fluix_pearl', + [ + 'minecraft:ender_pearl', + 'occultism:spirit_attuned_gem', + 'occultism:spirit_attuned_gem', + 'kubejs:dimensional_storage_crystal' + ]) + .heated() + .id(id_prefix+'activated_dimentional_pearl'); + + event.custom({ + type: 'occultism:spirit_fire', + ingredient: Ingredient.of('quark:black_crystal').toJson(), + result: Ingredient.of('appliedenergistics2:sky_stone_block').toJson() + }).id(id_prefix+"sky_stone"); +}); + diff --git a/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/blocks.js b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/blocks.js new file mode 100644 index 0000000000..98127d0ec4 --- /dev/null +++ b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/blocks.js @@ -0,0 +1,241 @@ + + +onEvent('recipes', (event) => { + if (!isAE2Loaded) { + return; + } + if (global.isExpertMode == false) { + return; + } + const id_prefix = 'enigmatica:expert/ae2_compat/blocks/'; + const recipesIDs = [ + "appliedenergistics2:network/blocks/interfaces_interface", + "appliedenergistics2:network/blocks/fluid_interfaces_interface", + "appliedenergistics2:network/blocks/quantum_link", + "appliedenergistics2:network/blocks/energy_energy_acceptor", + "appliedenergistics2:network/blocks/controller", + "appliedenergistics2:network/blocks/energy_energy_cell", + "appliedenergistics2:network/blocks/storage_drive", + "appliedenergistics2:network/blocks/spatial_io_pylon", + "appliedenergistics2:network/parts/storage_bus", + "appliedenergistics2:network/parts/import_bus", + "appliedenergistics2:network/parts/export_bus", + "appliedenergistics2:network/cables/glass_fluix", + "appliedenergistics2:network/crafting/molecular_assembler", + "appliedenergistics2:network/wireless_access_point", + "appliedenergistics2:network/parts/storage_bus_fluid", + "appliedenergistics2:network/parts/import_bus_fluid", + "appliedenergistics2:network/parts/export_bus_fluid" + ] + recipesIDs.forEach((recipesID) => { + event.remove({ id: recipesID }); + }); + const recipes = [ + { + output: 'fluid_interface', + patterns: [ + 'IA ', + 'GB ', + ' ' + ], + inputs: { + I: 'appliedenergistics2:interface', + G: 'minecraft:green_dye', + A: 'refinedstorage:advanced_processor', + B: 'minecraft:bucket' + } + }, + { + output: 'interface', + patterns: [ + 'EAE', + 'DSC', + 'EAE' + ], + inputs: { + S: 'create:empty_schematic', + E: 'refinedstorage:quartz_enriched_iron', + A: 'refinedstorage:advanced_processor', + D: 'refinedstorage:destruction_core', + C: 'refinedstorage:construction_core' + } + }, + { + output: 'energy_acceptor', + patterns: [ + 'SES', + 'ECE', + 'SES' + ], + inputs: { + S: 'tconstruct:slimesteel_ingot', + E: 'mekanism:elite_universal_cable', + C: 'powah:capacitor_basic_large' + } + }, + { + output: 'energy_cell', + patterns: [ + 'ACA', + 'CQC', + 'ACA' + ], + inputs: { + C: 'powah:capacitor_basic_large', + A: 'astralsorcery:aquamarine', + Q: 'appliedenergistics2:quartz_glass' + } + }, + { + output: 'drive', + patterns: [ + 'ENE', + 'LSL', + 'ENE' + ], + inputs: { + N: 'extrastorage:neural_processor', + E: 'mekanism:elite_control_circuit', + L: 'immersiveengineering:logic_unit', + S: 'appliedenergistics2:sky_dust' + } + }, + { + output: 'storage_bus', + patterns: [ + 'SC ', + 'IB ', + 'SD ' + ], + inputs: { + B: '#xnet:connectors', + C: 'refinedstorage:construction_core', + I: 'refinedstorage:improved_processor', + D: 'refinedstorage:destruction_core', + S: 'occultism:spirit_attuned_gem' + } + }, + { + output: 'import_bus', + patterns: [ + 'SD ', + 'IC ', + 'SD ' + ], + inputs: { + D: 'refinedstorage:destruction_core', + I: 'refinedstorage:improved_processor', + S: 'occultism:spirit_attuned_gem', + C: '#xnet:connectors' + } + }, + { + output: 'export_bus', + patterns: [ + 'SD ', + 'IC ', + 'SD ' + ], + inputs: { + D: 'refinedstorage:construction_core', + I: 'refinedstorage:improved_processor', + S: 'occultism:spirit_attuned_gem', + C: '#xnet:connectors' + } + }, + { + output: 'fluid_storage_bus', + patterns: [ + 'SB ', + 'G ', + ' ' + ], + inputs: { + S: 'appliedenergistics2:storage_bus', + G: 'minecraft:green_dye', + B: 'minecraft:bucket' + } + }, + { + output: 'fluid_import_bus', + patterns: [ + 'IB ', + 'G ', + ' ' + ], + inputs: { + I: 'appliedenergistics2:import_bus', + G: 'minecraft:green_dye', + B: 'minecraft:bucket' + } + }, + { + output: 'fluid_export_bus', + patterns: [ + 'EB ', + 'G ', + ' ' + ], + inputs: { + E: 'appliedenergistics2:export_bus', + G: 'minecraft:green_dye', + B: 'minecraft:bucket' + } + }, + { + output: 'spatial_pylon', + patterns: [ + 'QFQ', + 'CTC', + 'QFQ' + ], + inputs: { + T:'bloodmagic:teleposer', + C:'botania:corporea_spark', + F:'appliedenergistics2:fluix_glass_cable', + Q:'appliedenergistics2:quartz_glass' + } + }, + { + output: 'molecular_assembler', + patterns: [ + 'MQM', + 'DWC', + 'MQM' + ], + inputs: { + C:'refinedstorage:construction_core', + D:'refinedstorage:destruction_core', + Q:'appliedenergistics2:quartz_glass', + W:'#forge:workbenches', + M:'create:mechanical_crafter' + } + } + ] + recipes.forEach((recipe) => { + event.shaped('appliedenergistics2:' + recipe.output, recipe.patterns, recipe.inputs).id(id_prefix + recipe.output); + }); + + + event.shaped('2x appliedenergistics2:quantum_link',[ + 'ETE', + 'ACA', + 'ERE' + ],{ + T: 'rftoolsutility:matter_transmitter', + C: 'kubejs:cpu_core_as_81221', + R: 'rftoolsutility:matter_receiver', + A: 'betterendforge:aeternium_ingot', + E: '#forge:gears/enderium' + }).id(id_prefix + 'quantum_link'); + + event.shaped('8x appliedenergistics2:fluix_glass_cable',[ + 'CCC', + 'CSC', + 'CCC' + ],{ + C: 'refinedstorage:cable', + S: 'appliedenergistics2:sky_dust' + }).id(id_prefix + 'fluix_glass_cable'); + +}); diff --git a/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/constants.js b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/constants.js new file mode 100644 index 0000000000..491e2760c4 --- /dev/null +++ b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/constants.js @@ -0,0 +1,48 @@ +//priority: 1001 + +const isAE2Loaded = Platform.getMods().containsKey("appliedenergistics2"); + +const itemsToRemoveAE = [ + 'appliedenergistics2:ender_dust', + 'appliedenergistics2:flour', + 'appliedenergistics2:gold_dust', + 'appliedenergistics2:iron_dust', + 'appliedenergistics2:nether_quartz_dust', + 'appliedenergistics2:fluix_dust', + 'appliedenergistics2:certus_quartz_dust', + + 'appliedenergistics2:fluix_crystal', + 'appliedenergistics2:charged_certus_quartz_crystal', + 'appliedenergistics2:certus_quartz_crystal', + 'appliedenergistics2:purified_certus_quartz_crystal', + 'appliedenergistics2:purified_nether_quartz_crystal', + 'appliedenergistics2:purified_fluix_crystal', + + 'appliedenergistics2:quartz_ore', + 'appliedenergistics2:charged_quartz_ore', + + 'appliedenergistics2:vibration_chamber', + 'appliedenergistics2:quartz_growth_accelerator', + 'appliedenergistics2:inscriber', + 'appliedenergistics2:crank', + 'appliedenergistics2:grindstone', + + 'appliedenergistics2:printed_calculation_processor', + 'appliedenergistics2:printed_engineering_processor', + 'appliedenergistics2:printed_logic_processor', + 'appliedenergistics2:printed_silicon', + 'appliedenergistics2:logic_processor', + 'appliedenergistics2:calculation_processor', + 'appliedenergistics2:engineering_processor', + 'appliedenergistics2:silicon', + + 'appliedenergistics2:calculation_processor_press', + 'appliedenergistics2:engineering_processor_press', + 'appliedenergistics2:logic_processor_press', + 'appliedenergistics2:silicon_press', + + 'appliedenergistics2:1k_cell_component', + 'appliedenergistics2:4k_cell_component', + 'appliedenergistics2:1k_fluid_cell_component', + 'appliedenergistics2:4k_fluid_cell_component' +]; diff --git a/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/conversion.js b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/conversion.js new file mode 100644 index 0000000000..3b94fa4fcb --- /dev/null +++ b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/conversion.js @@ -0,0 +1,56 @@ + + +onEvent('recipes', (event) => { + if (!isAE2Loaded) { + return; + } + if (global.isExpertMode == false) { + return; + } + const id_prefix = 'enigmatica:expert/ae2_compat/conversion/'; + const trans = [ + { RS: 'external_storage', AE: 'storage_bus' }, + { RS: 'destructor', AE: 'annihilation_plane' }, + { RS: 'constructor', AE: 'formation_plane' }, + { RS: 'detector', AE: 'fluid_level_emitter' }, + { RS: 'wireless_transmitter', AE: 'wireless_access_point' }, + { RS: 'exporter', AE: 'export_bus' }, + { RS: 'importer', AE: 'import_bus' }, + { RS: 'interface', AE: 'interface' }, + { RS: 'crafter', AE: 'molecular_assembler' }, + { RS: 'controller', AE: 'controller' }, + { RS: 'security_manager', AE: 'security_station' }, + { RS: 'fluid_interface', AE: 'fluid_interface' }, + { RS: 'disk_drive', AE: 'drive' }, + { RS: 'disk_manipulator', AE: 'io_port' }, + { RS: 'cable', AE: 'fluix_glass_cable' }, + { RS: 'relay', AE: 'toggle_bus' }, + { RS: 'relay', AE: 'inverted_toggle_bus' }, + { RS: 'detector', AE: 'level_emitter' }, + { RS: 'grid', AE: 'terminal' }, + { RS: 'crafting_grid', AE: 'crafting_terminal' }, + { RS: 'pattern_grid', AE: 'pattern_terminal' }, + { RS: 'crafter_manager', AE: 'interface_terminal' }, + { RS: '64k_storage_part', AE: '64k_cell_component' }, + { RS: '16k_storage_part', AE: '16k_cell_component' }, + { RS: '4k_storage_part', AE: '4k_cell_component' }, + { RS: '1k_storage_part', AE: '1k_cell_component' }, + { RS: '64k_fluid_storage_part', AE: '1k_fluid_cell_component' }, + { RS: '256k_fluid_storage_part', AE: '4k_fluid_cell_component' }, + { RS: '1024k_fluid_storage_part', AE: '16k_fluid_cell_component' }, + { RS: '4096k_fluid_storage_part', AE: '64k_fluid_cell_component' }, + + ] + + trans.forEach((tran) => { + event.shapeless('refinedstorage:' + tran.RS, [ + 'appliedenergistics2:' + tran.AE, + 'refinedstorage:quartz_enriched_iron' + ]).id(id_prefix + tran.AE + '_to_' + tran.RS); + event.shapeless('appliedenergistics2:' + tran.AE, [ + 'refinedstorage:' + tran.RS, + 'appliedenergistics2:sky_dust' + ]).id(id_prefix + tran.RS + '_to_' + tran.AE); + }); + +}); diff --git a/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/disabled.js b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/disabled.js new file mode 100644 index 0000000000..1491667912 --- /dev/null +++ b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/disabled.js @@ -0,0 +1,15 @@ + + +onEvent('recipes', (event) => { + if (!isAE2Loaded) { + return; + } + if (global.isExpertMode == false) { + return; + } + itemsToRemoveAE.forEach((entry) => { + event.remove({ output: entry }); + event.remove({ input: entry }); + }); + +}); diff --git a/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/items.js b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/items.js new file mode 100644 index 0000000000..951768da92 --- /dev/null +++ b/kubejs/server_scripts/enigmatica/kubejs/expert/ae2_compat/items.js @@ -0,0 +1,85 @@ + + +onEvent('recipes', (event) => { + if (!isAE2Loaded) { + return; + } + if (global.isExpertMode == false) { + return; + } + const id_prefix = 'enigmatica:expert/ae2_compat/items/'; + const recipesIDs = [ + "appliedenergistics2:network/cells/spatial_components", + "appliedenergistics2:tools/network_memory_card", + "appliedenergistics2:materials/cardspeed", + "appliedenergistics2:network/crafting/patterns_blank" + ] + recipesIDs.forEach((recipesID) => { + event.remove({ id: recipesID }); + }); + + const recipes = [ + { + output: '2_cubed_spatial_cell_component', + patterns: [ + 'GFG', + 'FAF', + ' S ' + ], + inputs: { + G: 'minecraft:glowstone_dust', + A: 'refinedstorage:advanced_processor', + F: 'appliedenergistics2:fluix_pearl', + S: 'occultism:spirit_attuned_gem' + } + }, + { + output: 'memory_card', + patterns: [ + ' ', + 'VMQ', + 'GGG' + ], + inputs: { + V: 'integrateddynamics:variable', + M: 'kubejs:memory_basic_filled', + Q: 'refinedstorage:quartz_enriched_iron', + G: 'minecraft:gold_ingot' + } + }, + { + output: 'blank_pattern', + patterns: [ + 'QGQ', + 'GAG', + 'RSR' + ], + inputs: { + S: 'create:empty_schematic', + Q: 'appliedenergistics2:quartz_glass', + G: 'minecraft:glowstone_dust', + R: 'refinedstorage:quartz_enriched_iron', + A: '#forge:gems/aquamarine' + } + } + ] + + recipes.forEach((recipe) => { + event.shaped('appliedenergistics2:' + recipe.output, recipe.patterns, recipe.inputs).id(id_prefix + recipe.output); + }); + + event.shaped('4x appliedenergistics2:speed_card', [ + 'AGA', + 'GLG', + 'AGA' + ], { + A: 'appliedenergistics2:advanced_card', + G: 'pneumaticcraft:glycerol', + L: { + type: 'pneumaticcraft:fluid', + tag: 'forge:lubricant', + amount: 1000 + } + }).id(id_prefix + 'speed_card'); + +}); \ No newline at end of file