Provides CNC machines that allow cutting nodes to selected shapes.
- Manufactures different shapes from provided raw materials.
- Manufactures products over time if technic is enabled.
- Manufactures products immediately when selecting program if technic is not enabled.
- 1 inventory slot for input materials, 4 inventory slots for products.
- All features provided by technic:cnc
- Only available if technic, digilines or pipeworks is available.
- Has digiline API for programming, enabling, disabling, getting status and getting programs.
- Can use technic upgrades for energy saving (RE battery), auto eject (CLU), and public use (chest).
- Has support for pipeworks tubes for receiving raw materials or taking products using filter injectors.
Configuration key | Default | Description |
---|---|---|
technic_cnc_use_technic | true | Use technic power networks and upgrades, machines require LV network |
technic_cnc_use_digilines | true | Use digilines to allow configuring machines using digiline messages |
technic_cnc_use_pipeworks | true | Use pipeworks for tube and injector support |
Command | Description |
---|---|
enable | Enables machines, machine will attempt manufacturing products if materials are available |
disable | Disables machines, machine will stop manufacturing and will not consume power |
programs | Machine will send table containing all possible programs as keys and product count as values |
status | Machine will send table with following keys: enabled, time, size, program, user, material |
Example reply for programs
command:
{
element_end = 2,
slope_inner_edge = 1,
twocurvededge = 1,
cylinder = 2,
stick = 8,
spike = 1,
element_cross = 1,
slope_edge_upsdown = 1,
cylinder_horizontal = 2,
element_edge = 2,
oblate_spheroid = 1,
slope = 2,
slope_lying = 2,
slope_inner_edge_upsdown = 1,
sphere = 1,
element_straight = 2,
slope_upsdown = 2,
pyramid = 2,
element_t = 1,
onecurvededge = 1,
slope_edge = 1
}
Example reply for status
command:
{
enabled = true,
time = 2,
user = "SX",
material = {
count = 98,
name = "default:desert_sandstone",
},
program = "sphere",
size = 2
}
Command can contain any combination of keys and will affect only relevant parts of functionality.
Example with all possible keys set:
{
program = "sphere",
size = 2,
enabled = true
}
Value for program
should be one of keys returned by simple command programs
, it will change CNC program.
Value for size
should be number 1
or 2
, other numbers or types are not acceppted. Sets size of programs that can
produce both half and full sized nodes. 2
is for half size and 1
for full size products.
Value for ènabled
should be true
or false
. Functions similar to simple string commands enable
and disable
.
Invalid values or value types are simply skipped and not used, check your value types and keys for typos if it seems that machine accepts commands only partially.
API is incomplete, feel free to give suggestions for functionality or other feedback about CNC API.
Currently undetermined / to be determined.
-- Get product item string with count for given program, material and size
-- Return value example: default:desert_sandstone_technic_cnc_stick 8
function technic_cnc.get_product(program, material, size)
-- Set program for cnc machine with optional size, size is not changed if size is nil
function technic_cnc.set_program(meta, program, size)
-- Returns true if CNC machine is enabled and false if machine is disabled
function technic_cnc.is_enabled(meta) -- return true|false
-- Enables CNC machine
function technic_cnc.enable(meta)
-- Disables CNC machine
function technic_cnc.disable(meta)
-- Finds first input stack with items
function technic_cnc.get_material(inventory)
-- Manufacture product based on current program.
-- Updates src and dst inventories taking required amount from src inventory and placing products into dst inventory
function technic_cnc.produce(meta, inventory)
-- Textures for machine
local tiles = {
"my_mod_my_cnc_machine_top.png",
"my_mod_my_cnc_machine_bottom.png",
"my_mod_my_cnc_machine_right.png",
"my_mod_my_cnc_machine_left.png",
"my_mod_my_cnc_machine_back.png",
"my_mod_my_cnc_machine_front.png"
}
local tiles_active = {
"my_mod_my_cnc_machine_top_active.png",
"my_mod_my_cnc_machine_bottom_active.png",
"my_mod_my_cnc_machine_right_active.png",
"my_mod_my_cnc_machine_left_active.png",
"my_mod_my_cnc_machine_back_active.png",
"my_mod_my_cnc_machine_front_active.png"
}
--
-- Add pipeworks tube connection with overlay textures if pipeworks is available for CNC machines
--
local tube_def = nil
if technic_cnc.pipeworks then
tiles = technic_cnc.pipeworks.tube_entry_overlay(tiles)
tiles_active = technic_cnc.pipeworks.tube_entry_overlay(tiles_active)
tube_def = technic_cnc.pipeworks.new_tube()
end
--
-- Default values provided with example machine registration below.
--
-- Required definition keys that do not have default value:
-- description, programs, demand
-- Optional definition keys that do not have default value:
-- recipe, upgrade, digilines, tube
--
technic_cnc.register_cnc_machine("my_mod_name:my_cnc_machine", {
description = "My Mod - My CNC Machine",
input_size = 1,
output_size = 4,
digilines = technic_cnc.digilines,
upgrade = true,
tube = tube_def,
programs = { "sphere", "spike", "stick", "slope" },
demand = 539,
get_formspec = technic_cnc.formspec.get_formspec,
on_receive_fields = technic_cnc.formspec.on_receive_fields,
recipe = {
{'default:glass', 'default:glass', 'default:glass'},
{'default:steelblock', 'default:diamond', 'default:steelblock'},
{'default:steelblock', '', 'default:steelblock'},
},
tiles = tiles,
tiles_active = tiles_active,
})