Crafting Components
Crafting Components are a way to organize and simplify the various similar recipes that GregTech generates. For example: writing out the recipes for all tiers of an alloy smelter can be done iteratively rather than one by one.
Crafting Components are a map pairing a Voltage tier (the tier number) to a value. The value can be a MaterialEntry
, ItemStack
, or TagPrefix<Item>
.
Changing a single entry
With KubeJS it is possible to modify the predefined components of existing GTCEu Modern machine crafting recipes. You can replace singular entries, or do bulk modification of components. -1 is defined as a fallback value if no other entries exist.
const Map = Java.loadClass("java.util.Map")
GTCEuStartupEvents.craftingComponents(event => {
event.setItem(GTCraftingComponents.CIRCUIT, GTValues.MV, Item.of('minecraft:dirt')) // (1)
event.setItems(GTCraftingComponents.PUMP, Map.of(
GTValues.LV, Item.of('gtceu:lv_robot_arm'),
GTValues.MV, Item.of('gtceu:mv_robot_arm'),
GTValues.HV, Item.of('gtceu:hv_robot_arm'),
GTValues.EV, Item.of('gtceu:ev_robot_arm'),
GTValues.IV, Item.of('gtceu:iv_robot_arm'),
GTValues.LuV, Item.of('gtceu:luv_robot_arm'),
GTValues.ZPM, Item.of('gtceu:zpm_robot_arm'),
GTValues.UV, Item.of('gtceu:uv_robot_arm'),
)) // (2)
event.setTag(GTCraftingComponents.CASING, GTValues.EV, 'minecraft:logs') // (3)
event.setMaterialEntry(GTCraftingComponents.PLATE, GTValues.UEV, new MaterialEntry('plate', 'gtceu:infinity')) // (4)
event.removeTier("sensor", 3) // (5)
})
minecraft:dirt
.
2. Modifies all pumps in GT machine crafting recipes by replacing the pump with a robot arm.
3. Replaces the EV casing with the #minecraft:logs
tag. note the lack of #
at the beginning of the tag!
4. Adds a new entry to the plate component for UEV with prefix plate
and material gtceu:infinity
.
5. Removes the 3rd offset entry (HV Tier)
of the sensor crafting component, will default to the fallback (LV Sensor)
Creating new components
It's also possible to create new crafting components with KubeJS.
The crafting component is constructed with a id and a fallback value. You can add entries by chaining .add(tier, value)
methods after your construction.
const Map = Java.loadClass("java.util.Map")
let ITEM_CRAFTING_COMPONENT = null
let TAG_CRAFTING_COMPONENT = null
let UNIFICATION_CRAFTING_COMPONENT = null
GTCEuServerEvents.craftingComponents(event => {
ITEM_CRAFTING_COMPONENT = event.createItem("item_component", 'minecraft:cyan_stained_glass')
.addItem(GTValues.LV, Item.of('minecraft:cyan_stained_glass'))
.addItem(GTValues.MV, Item.of('minecraft:cyan_stained_glass'))
.addItem(GTValues.HV, Item.of('minecraft:cyan_stained_glass'))
.addItem(GTValues.EV, Item.of('minecraft:lime_stained_glass'))
.addItem(GTValues.IV, Item.of('minecraft:lime_stained_glass'))
.addItem(GTValues.LuV, Item.of('minecraft:lime_stained_glass'))
.addItem(GTValues.ZPM, Item.of('minecraft:magenta_stained_glass'))
.addItem(GTValues.UV, Item.of('minecraft:magenta_stained_glass'))
// (1)
TAG_CRAFTING_COMPONENT = event.createTag("tag_component", 'forge:barrels/wooden')
.addTag(GTValues.LV, 'forge:chests/wooden')
.addTag(GTValues.MV, 'forge:chests/trapped')
.addTag(GTValues.HV, 'forge:chests/ender')
.addTag(GTValues.EV, 'forge:cobblestone')
.addTag(GTValues.IV, 'forge:cobblestone/normal')
.addTag(GTValues.LuV, 'forge:cobblestone/infested')
.addTag(GTValues.ZPM, 'forge:cobblestone/mossy')
.addTag(GTValues.UV, 'forge:cobblestone/deepslate')
// (2)
UNIFICATION_CRAFTING_COMPONENT = event.createMaterialEntry("material_entry_component", new MaterialEntry('plate', 'gtceu:infinity'))
.addMaterialEntry(GTValues.LV, new MaterialEntry('block', 'gtceu:infinity'))
.addMaterialEntry(GTValues.MV, 'ingot', 'gtceu:infinity')
.addMaterialEntry(GTValues.HV, new MaterialEntry('dust', 'gtceu:infinity'))
.addMaterialEntry(GTValues.EV, new MaterialEntry('round', 'gtceu:infinity'))
.addMaterialEntry(GTValues.IV, new MaterialEntry('foil', 'gtceu:infinity'))
.addMaterialEntry(GTValues.LuV, 'longRod', 'gtceu:infinity')
.addMaterialEntry(GTValues.ZPM, new MaterialEntry('rod', 'gtceu:infinity'))
.addMaterialEntry(GTValues.UV, new MaterialEntry('bolt', 'gtceu:infinity'))
// (3)
})
- Creates a new crafting component with item stack entries.
- Creates a new crafting component with item tag entries. note the lack of
#
at the beginning of the tag! - Creates a new crafting component with UnificationEntry entries.
Retrieving existing crafting components
All remove
, modify*
, and setFallback*
methods use a Crafting Component as its first argument, you can supply that argument with just a string matching the id of the crafting component
GTCEuServerEvents.craftingComponents(event => {
event.removeTier('robot_arm', GTValues.EV) // (1)
event.removeTiers('pump', GTValues.EV, GTValues.IV, GTValues.LuV) // (2)
})
- Finds the crafting component with id
robot_arm
and removes the entry forEV
tier - Finds the crafting component with id
pump
and removes the entry forEV, IV & LuV
tiers
Builtin Crafting Components
CIRCUIT 'circuit'
BETTER_CIRCUIT 'better_circuit'
WIRE_ELECTRIC 'wire_single'
WIRE_QUAD 'wire_quad'
WIRE_OCT 'wire_oct'
WIRE_HEX 'wire_hex'
CABLE 'cable_single'
CABLE_DOUBLE 'cable_double'
CABLE_QUAD 'cable_quad'
CABLE_OCT 'cable_oct'
CABLE_HEX 'cable_hex'
CABLE_TIER_UP 'cable_tier_up_single'
CABLE_TIER_UP_DOUBLE 'cable_tier_up_double'
CABLE_TIER_UP_QUAD 'cable_tier_up_quad'
CABLE_TIER_UP_OCT 'cable_tier_up_oct'
CABLE_TIER_UP_HEX 'cable_tier_up_hex'
CASING 'casing'
HULL 'hull'
PIPE_NORMAL 'normal_pipe'
PIPE_LARGE 'large_pipe'
PIPE_NONUPLE 'nonuple_pipe'
GLASS 'glass'
PLATE 'plate'
HULL_PLATE 'hull_plate'
ROTOR 'rotor'
GRINDER 'grinder'
SAWBLADE 'sawblade'
DIAMOND 'diamond'
MOTOR 'motor'
PUMP 'pump'
PISTON 'piston'
EMITTER 'emitter'
SENSOR 'sensor'
CONVEYOR 'conveyor'
ROBOT_ARM 'robot_arm'
FIELD_GENERATOR 'field_generator'
COIL_HEATING 'coil_heating'
COIL_HEATING_DOUBLE 'coil_heating_double'
COIL_ELECTRIC 'coil_electric'
STICK_MAGNETIC 'rod_magnetic'
STICK_DISTILLATION 'rod_distillation'
STICK_ELECTROMAGNETIC 'rod_electromagnetic'
STICK_RADIOACTIVE 'rod_radioactive'
PIPE_REACTOR 'pipe_reactor'
POWER_COMPONENT 'power_component'
VOLTAGE_COIL 'voltage_coil'
SPRING 'spring'
CRATE 'crate'
DRUM 'drum'
FRAME 'frame'
SMALL_SPRING_TRANSFORMER 'small_spring_transformer'
SPRING_TRANSFORMER 'spring_transformer'