Integer Limit 86cb1fbf85
Allow Usage of Fluid Containers in Crafting (#1142)
This PR allows the usage of any fluid container, such as GT cells and drums, or EIO portable tanks, or Thermal portable tanks, in crafting recipes involving buckets.

This is done through mass recipe replacing, replacing ingredients with a custom 'fluid bucket ingredient'. This ingredient also displays some options for containers in JEI, allowing for crafting auto-fill.

Some recipes have been changed:
- Cake + Cake Base + Chocolate Cake now supports dough or rice dough
- Cake + Cake Base no longer allow using unfilled buckets
- Concrete Bucket (for Firebricks Recipe) change:
	- Now makes Concrete Cell (Iron)
	- Takes a cell as input, and any fluid container (for water) as input
- New Recipe: Water + Lava = Obsidian

Reviewers:
- Anything else we should add to the display list? Should we remove something?
- Any recipes that are not replaced?
- Check for bugs involving crafting, e.g. crash, dupe, unexpected behaviours.

[EXPAND]
[[messages]]
messageBody = '''
[FEATURE]
[DETAILS]
details = [
"Allows using ANY Fluid Container (GT Drums/Cells, EIO Tanks, Thermal Tanks, etc.) in Crafting Recipes, Substituting Filled Buckets",
"Also adds Crafting Recipe for Obsidian (Water + Lava)"
]
[DETAILS]
'''

[[messages]]
messageTitle = "Revamp Concrete Bucket Crafting Recipe"
messageBody = '''
[BALANCING]
[HM]
[DETAILS]
detail = "Now takes an Empty Cell as Input, and outputs a Filled Cell"
[DETAILS]
'''
[EXPAND]
2024-12-11 09:11:28 +11:00

364 lines
10 KiB
Groovy

import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient
import net.minecraft.item.ItemStack
import static gregtech.api.GTValues.*
/* Usable Blocks */
// ME Drive
crafting.shapedBuilder()
.output(item('appliedenergistics2:drive'))
.matrix(
'PEP',
'LCL',
'PSP')
.key('P', metaitem('plateAluminium'))
.key('E', metaitem('emitter.mv'))
.key('L', ore('circuitLv'))
.key('C', item('appliedenergistics2:chest'))
.key('S', metaitem('sensor.mv'))
.replace().register()
// ME Inscriber
crafting.shapedBuilder()
.output(item('appliedenergistics2:inscriber'))
.matrix(
'DPD',
'FHD',
'DPD')
.key('D', metaitem('nomilabs:plateDarkSteel'))
.key('P', metaitem('electric.piston.mv'))
.key('F', item('appliedenergistics2:material', 7))
.key('H', metaitem('hull.mv'))
.replace().register()
// Crafting CPU
crafting.shapedBuilder()
.output(item('appliedenergistics2:crafting_unit'))
.matrix(
'PCP',
'FLF',
'PCP')
.key('P', metaitem('plateAluminium'))
.key('C', item('appliedenergistics2:material', 23))
.key('F', item('appliedenergistics2:part', 16))
.key('L', item('appliedenergistics2:material', 22))
.replace().register()
// Molecular Assembler
crafting.shapedBuilder()
.output(item('appliedenergistics2:molecular_assembler'))
.matrix(
'PGP',
'ACF',
'PGP')
.key('P', metaitem('plateAluminium'))
.key('G', item('appliedenergistics2:quartz_glass'))
.key('A', item('appliedenergistics2:material', 44))
.key('C', metaitem('workbench'))
.key('F', item('appliedenergistics2:material', 43))
.replace().register()
// Matter Condensor
crafting.shapedBuilder()
.output(item('appliedenergistics2:condenser'))
.matrix(
'PPP',
'PSP',
'PPP')
.key('P', metaitem('plateTitanium'))
.key('S', metaitem('quantumstar'))
.replace().register()
// Energy Acceptor
crafting.shapedBuilder()
.output(item('appliedenergistics2:energy_acceptor'))
.matrix(
'PFP',
'FHF',
'PFP')
.key('P', metaitem('nomilabs:plateElectricalSteel'))
.key('F', item('moreplates:fluix_plate'))
.key('H', metaitem('hull.lv'))
.replace().register()
// Charger
crafting.shapedBuilder()
.output(item('appliedenergistics2:charger'))
.matrix(
'DCD',
'D ',
'DCD')
.key('D', metaitem('nomilabs:plateDarkSteel'))
.key('C', metaitem('plateCertusQuartz'))
.replace().register()
// ME Chest
crafting.shapedBuilder()
.output(item('appliedenergistics2:chest'))
.matrix(
'GPG',
'CSF',
'DQD')
.key('G', item('appliedenergistics2:quartz_glass'))
.key('P', item('appliedenergistics2:part', 180))
.key('C', item('appliedenergistics2:material', 10))
.key('S', item('actuallyadditions:block_giant_chest'))
.key('F', item('appliedenergistics2:material', 12))
.key('D', ore('blockDarkSteel'))
.key('Q', item('appliedenergistics2:material', 11))
.replace().register()
// Quantum Ring
crafting.shapedBuilder()
.output(item('appliedenergistics2:quantum_ring'))
.matrix(
'PCP',
'EQE',
'PCP')
.key('P', metaitem('plateStainlessSteel'))
.key('C', item('appliedenergistics2:material', 23))
.key('E', item('appliedenergistics2:material', 24))
.key('Q', metaitem('quantumstar'))
.replace().register()
// Interfaces
var makeInterface = { String recipeName, OreDictIngredient plate, ItemStack moving, ItemStack interfaceStack ->
crafting.remove(recipeName)
crafting.shapedBuilder()
.output(interfaceStack)
.matrix(
'PRP',
'AMF',
'PPP')
.key('P', plate)
.key('R', moving)
.key('A', item('appliedenergistics2:material', 44))
.key('M', metaitem('hull.mv'))
.key('F', item('appliedenergistics2:material', 43))
.register()
}
// Interface
makeInterface('appliedenergistics2:network/blocks/interfaces_interface', ore('plateAluminium'), metaitem('robot.arm.mv'), item('appliedenergistics2:interface'))
// Fluid Interface
makeInterface('appliedenergistics2:network/blocks/fluid_interfaces_interface', ore('plateLapis'), metaitem('electric.pump.mv'), item('appliedenergistics2:fluid_interface'))
/* Cables */
// Quartz Fiber
crafting.removeByOutput(item('appliedenergistics2:part', 140))
mods.gregtech.wiremill.recipeBuilder()
.inputs(item('appliedenergistics2:material', 11))
.outputs(item('appliedenergistics2:part', 140) * 2)
.duration(100).EUt(VHA[LV])
.buildAndRegister()
// Glass Cable
crafting.remove('appliedenergistics2:network/cables/glass_fluix')
mods.gregtech.alloy_smelter.recipeBuilder()
.inputs(ore('dustFluix'), item('appliedenergistics2:part', 140))
.outputs(item('appliedenergistics2:part', 16) * 2)
.duration(50).EUt(VHA[LV])
.buildAndRegister()
// Covered Cable
crafting.remove('appliedenergistics2:network/cables/covered_fluix')
for (var rubber in [fluid('rubber') * 144, fluid('styrene_butadiene_rubber') * 36, fluid('silicone_rubber') * 76]) {
mods.gregtech.assembler.recipeBuilder()
.inputs(item('appliedenergistics2:part', 16))
.fluidInputs(rubber)
.outputs(item('appliedenergistics2:part', 36))
.duration(100).EUt(VA[ULV])
.buildAndRegister()
}
// ME Conduit
crafting.removeByOutput(item('enderio:item_me_conduit'))
mods.gregtech.assembler.recipeBuilder()
.inputs(item('appliedenergistics2:part', 36) * 3, item('enderio:item_material', 4) * 6)
.outputs(item('enderio:item_me_conduit') * 8)
.duration(100).EUt(VHA[LV])
.buildAndRegister()
/* Block Parts */
/* Planes */
var makePlane = { OreDictIngredient plate, ItemStack core, ItemStack plane ->
crafting.shapedBuilder()
.output(plane)
.matrix(
'FFF',
'PAP')
.key('F', item('moreplates:fluix_plate'))
.key('P', plate)
.key('A', core)
.replace().register()
}
// Formation Plane
makePlane(ore('plateAluminium'), item('appliedenergistics2:material', 43), item('appliedenergistics2:part', 320))
// Annihilation Plane
makePlane(ore('plateAluminium'), item('appliedenergistics2:material', 44), item('appliedenergistics2:part', 300))
// Fluid Formation Plane
makePlane(ore('plateLapis'), item('appliedenergistics2:material', 43), item('appliedenergistics2:part', 321))
// Fluid Annihilation Plane
makePlane(ore('plateLapis'), item('appliedenergistics2:material', 44), item('appliedenergistics2:part', 302))
/* Level Emitters */
var makeEmitter = { OreDictIngredient plate, ItemStack emitter ->
crafting.shapedBuilder()
.output(emitter)
.matrix(
'TP',
'CR')
.key('T', item('minecraft:redstone_torch'))
.key('P', plate)
.key('C', item('appliedenergistics2:material', 23))
.key('R', ore('stickStainlessSteel'))
.replace().register()
}
// Item Emitter
makeEmitter(ore('plateAluminium'), item('appliedenergistics2:part', 280))
// Fluid Emitter
makeEmitter(ore('plateLapis'), item('appliedenergistics2:part', 281))
/* Terminals */
// ME Terminal
crafting.shapelessBuilder()
.output(item('appliedenergistics2:part', 380))
.input(ore('itemIlluminatedPanel'))
.input(ore('circuitLv'))
.replace().register()
// Pattern Terminal
crafting.shapelessBuilder()
.output(item('appliedenergistics2:part', 340))
.input(item('appliedenergistics2:material', 24))
.input(item('appliedenergistics2:part', 380))
.input(item('appliedenergistics2:material', 52))
.replace().register()
// Fluid Terminal
crafting.shapelessBuilder()
.output(item('appliedenergistics2:part', 520))
.input(item('appliedenergistics2:part', 380))
.input(metaitem('plateLapis'))
.input(item('appliedenergistics2:material', 22))
.replace().register()
// Extended Processing Pattern Terminal
crafting.shapedBuilder()
.output(item('appliedenergistics2:part', 341))
.matrix(
'A',
'B',
'C')
.key('A', item('appliedenergistics2:part', 340))
.key('B', ore('circuitEv'))
.key('C', item('packagedauto:encoder'))
.replace().register()
// Configuration Fluid Interface Terminal
crafting.shapelessBuilder()
.output(item('appliedenergistics2:part', 522))
.input(item('appliedenergistics2:part', 520))
.input(item('appliedenergistics2:material', 24))
.input(item('appliedenergistics2:fluid_interface').or(item('appliedenergistics2:part', 441)))
.replace().register()
/* Buses */
var makeImportBus = { OreDictIngredient plate, ItemStack bus ->
crafting.shapedBuilder()
.output(bus)
.matrix(
' A ',
'PEP')
.key('A', item('appliedenergistics2:material', 44))
.key('P', plate)
.key('E', metaitem('electric.piston.mv'))
.replace().register()
}
var makeExportBus = { OreDictIngredient plate, ItemStack bus ->
crafting.shapedBuilder()
.output(bus)
.matrix(
'PEP',
' A ')
.key('P', plate)
.key('E', item('appliedenergistics2:material', 43))
.key('A', metaitem('electric.piston.mv'))
.replace().register()
}
// Import Bus
makeImportBus(ore('plateAluminium'), item('appliedenergistics2:part', 240))
// Fluid Import Bus
makeImportBus(ore('plateLapis'), item('appliedenergistics2:part', 241))
// Export Bus
makeExportBus(ore('plateAluminium'), item('appliedenergistics2:part', 260))
// Fluid Export Bus
makeExportBus(ore('plateLapis'), item('appliedenergistics2:part', 261))
// Storage Bus
crafting.shapelessBuilder()
.output(item('appliedenergistics2:part', 220))
.input(metaitem('electric.piston.mv'), item('appliedenergistics2:interface'))
.replace().register()
// Fluid Storage Bus
crafting.shapelessBuilder()
.output(item('appliedenergistics2:part', 221))
.input(metaitem('electric.pump.mv'), item('appliedenergistics2:fluid_interface'))
.replace().register()
// Oredict Storage Bus
crafting.shapelessBuilder()
.output(item('appliedenergistics2:part', 222))
.input(item('appliedenergistics2:part', 220), metaitem('ore_dictionary_filter'))
/* Misc Block Parts */
// P2P Tunnel
crafting.shapedBuilder()
.output(item('appliedenergistics2:part', 460))
.matrix(
' P ',
'PEP',
'FFF')
.key('P', metaitem('plateStainlessSteel'))
.key('E', item('appliedenergistics2:material', 24))
.key('F', ore('plateFluix'))
.replace().register()
// Illuminated Panel
crafting.remove('appliedenergistics2:network/parts/panels_semi_dark_monitor')
crafting.shapedBuilder()
.output(item('appliedenergistics2:part', 180))
.matrix(
'GGG',
'PPP')
.key('G', item('appliedenergistics2:quartz_glass'))
.key('P', item('moreplates:fluix_plate'))
.register()
// Cable Anchor
crafting.replaceShapeless(item('appliedenergistics2:part', 120), [ore('boltSteel')])
/* Misc Blocks */
// Vibrant Quartz Glass
crafting.removeByOutput(item('appliedenergistics2:quartz_vibrant_glass'))
mods.gregtech.alloy_smelter.recipeBuilder()
.inputs(item('appliedenergistics2:quartz_glass'), ore('ingotVibrantAlloy'))
.outputs(item('appliedenergistics2:quartz_vibrant_glass'))
.duration(80).EUt(VHA[LV])
.buildAndRegister()