From 12d0c6522bbca906910aae0321cbaa7eb48db8c2 Mon Sep 17 00:00:00 2001 From: Zefram <zefram@fysh.org> Date: Wed, 30 Jul 2014 21:28:30 +0200 Subject: [PATCH] Correct breakability of sandstone CNC nodes --- technic/machines/LV/cnc.lua | 110 ++++++++++++++++++++++++++---------------------------- 1 files changed, 53 insertions(+), 57 deletions(-) diff --git a/technic/machines/LV/cnc.lua b/technic/machines/LV/cnc.lua index 5d3bdb2..2a89a7a 100644 --- a/technic/machines/LV/cnc.lua +++ b/technic/machines/LV/cnc.lua @@ -37,7 +37,7 @@ local cnc_formspec = "invsize[9,11;]".. - "label[1,0;Choose Milling Program:]".. + "label[1,0;"..S("Choose Milling Program:").."]".. "image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]".. "image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]".. "image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]".. @@ -56,7 +56,7 @@ "image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]".. "image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]".. - "label[1,3.5;Slim Elements half / normal height:]".. + "label[1,3.5;"..S("Slim Elements half / normal height:").."]".. "image_button[1,4;1,0.5;technic_cnc_full.png;full; ]".. "image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]".. @@ -66,9 +66,9 @@ "image_button[5,4;1,1;technic_cnc_element_t.png;element_t; ]".. "image_button[6,4;1,1;technic_cnc_element_edge.png;element_edge; ]".. - "label[0, 5.5;In:]".. + "label[0, 5.5;"..S("In:").."]".. "list[current_name;src;0.5,5.5;1,1;]".. - "label[4, 5.5;Out:]".. + "label[4, 5.5;"..S("Out:").."]".. "list[current_name;dst;5,5.5;4,1;]".. "list[current_player;main;0,7;8,4;]" @@ -125,9 +125,47 @@ return end +-- Action code performing the transformation +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local eu_input = meta:get_int("LV_EU_input") + local machine_name = S("%s CNC Machine"):format("LV") + local machine_node = "technic:cnc" + local demand = 450 + + local result = meta:get_string("cnc_product") + if inv:is_empty("src") or + (not minetest.registered_nodes[result]) or + (not inv:room_for_item("dst", result)) then + technic.swap_node(pos, machine_node) + meta:set_string("infotext", S("%s Idle"):format(machine_name)) + meta:set_string("cnc_product", "") + meta:set_int("LV_EU_demand", 0) + return + end + + if eu_input < demand then + technic.swap_node(pos, machine_node) + meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) + elseif eu_input >= demand then + technic.swap_node(pos, machine_node.."_active") + meta:set_string("infotext", S("%s Active"):format(machine_name)) + meta:set_int("src_time", meta:get_int("src_time") + 1) + if meta:get_int("src_time") >= 3 then -- 3 ticks per output + meta:set_int("src_time", 0) + srcstack = inv:get_stack("src", 1) + srcstack:take_item() + inv:set_stack("src", 1, srcstack) + inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier")) + end + end + meta:set_int("LV_EU_demand", demand) +end + -- The actual block inactive state minetest.register_node("technic:cnc", { - description = S("CNC Machine"), + description = S("%s CNC Machine"):format("LV"), tiles = {"technic_cnc_top.png", "technic_cnc_bottom.png", "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front.png"}, drawtype = "nodebox", @@ -139,11 +177,11 @@ {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, - groups = {cracky=2}, + groups = {cracky=2, technic_machine=1}, legacy_facedir_simple = true, on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("CNC Machine")) + meta:set_string("infotext", S("%s CNC Machine"):format("LV")) meta:set_float("technic_power_machine", 1) meta:set_string("formspec", cnc_formspec) local inv = meta:get_inventory() @@ -155,68 +193,26 @@ allow_metadata_inventory_take = technic.machine_inventory_take, allow_metadata_inventory_move = technic.machine_inventory_move, on_receive_fields = form_handler, + technic_run = run, }) -- Active state block minetest.register_node("technic:cnc_active", { - description = S("CNC Machine"), + description = S("%s CNC Machine"):format("LV"), tiles = {"technic_cnc_top_active.png", "technic_cnc_bottom.png", "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front_active.png"}, paramtype2 = "facedir", - groups = {cracky=2, not_in_creative_inventory=1}, + drop = "technic:cnc", + groups = {cracky=2, technic_machine=1, not_in_creative_inventory=1}, legacy_facedir_simple = true, can_dig = technic.machine_can_dig, allow_metadata_inventory_put = technic.machine_inventory_put, allow_metadata_inventory_take = technic.machine_inventory_take, allow_metadata_inventory_move = technic.machine_inventory_move, on_receive_fields = form_handler, + technic_run = run, + technic_disabled_machine_name = "technic:cnc", }) - --- Action code performing the transformation -minetest.register_abm({ - nodenames = {"technic:cnc","technic:cnc_active"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local eu_input = meta:get_int("LV_EU_input") - local machine_name = S("CNC Machine") - local machine_node = "technic:cnc" - local demand = 450 - - -- Power off automatically if no longer connected to a switching station - technic.switching_station_timeout_count(pos, "LV") - - local result = meta:get_string("cnc_product") - if inv:is_empty("src") or - (not minetest.registered_nodes[result]) or - (not inv:room_for_item("dst", result)) then - technic.swap_node(pos, machine_node) - meta:set_string("infotext", S("%s Idle"):format(machine_name)) - meta:set_string("cnc_product", "") - meta:set_int("LV_EU_demand", 0) - return - end - - if eu_input < demand then - technic.swap_node(pos, machine_node) - meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) - elseif eu_input >= demand then - technic.swap_node(pos, machine_node.."_active") - meta:set_string("infotext", S("%s Active"):format(machine_name)) - meta:set_int("src_time", meta:get_int("src_time") + 1) - if meta:get_int("src_time") >= 3 then -- 3 ticks per output - meta:set_int("src_time", 0) - srcstack = inv:get_stack("src", 1) - srcstack:take_item() - inv:set_stack("src", 1, srcstack) - inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier")) - end - end - meta:set_int("LV_EU_demand", demand) - end -}) technic.register_machine("LV", "technic:cnc", technic.receiver) technic.register_machine("LV", "technic:cnc_active", technic.receiver) @@ -228,8 +224,8 @@ output = 'technic:cnc', recipe = { {'default:glass', 'technic:diamond_drill_head', 'default:glass'}, - {'technic:control_logic_unit', 'technic:motor', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:copper_ingot', 'default:steel_ingot'}, + {'technic:control_logic_unit', 'technic:machine_casing', 'technic:motor'}, + {'technic:carbon_steel_ingot', 'technic:lv_cable0', 'technic:carbon_steel_ingot'}, }, }) -- Gitblit v1.8.0