summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkpoppel <poulsen.kim@gmail.com>2013-05-06 20:00:00 +0200
committerkpoppel <poulsen.kim@gmail.com>2013-05-06 20:00:00 +0200
commit6463b77e60639f4012b702fef344cc7e201d3e3a (patch)
tree98e00079a261cc3a2c61e32d8a0718ba21c85bff
parent895ee322d26727cdf680942d82566b2df83c9368 (diff)
Add milling machine from non cubic to technic mod.
Next step is to make sure it only works if powered.
-rw-r--r--technic/chainsaw.lua296
-rw-r--r--technic/cnc.lua208
-rw-r--r--technic/cnc_api.lua970
-rw-r--r--technic/cnc_nodes.lua354
-rw-r--r--technic/init.lua14
-rw-r--r--technic/textures/technic_cnc_bottom.pngbin0 -> 2006 bytes
-rw-r--r--technic/textures/technic_cnc_cylinder.pngbin0 -> 456 bytes
-rw-r--r--technic/textures/technic_cnc_cylinder_horizontal.pngbin0 -> 463 bytes
-rw-r--r--technic/textures/technic_cnc_element_cross.pngbin0 -> 415 bytes
-rw-r--r--technic/textures/technic_cnc_element_edge.pngbin0 -> 409 bytes
-rw-r--r--technic/textures/technic_cnc_element_end.pngbin0 -> 391 bytes
-rw-r--r--technic/textures/technic_cnc_element_straight.pngbin0 -> 412 bytes
-rw-r--r--technic/textures/technic_cnc_element_t.pngbin0 -> 389 bytes
-rw-r--r--technic/textures/technic_cnc_front.pngbin0 -> 2000 bytes
-rw-r--r--technic/textures/technic_cnc_full.pngbin0 -> 372 bytes
-rw-r--r--technic/textures/technic_cnc_half.pngbin0 -> 460 bytes
-rw-r--r--technic/textures/technic_cnc_milling_background.pngbin0 -> 78748 bytes
-rw-r--r--technic/textures/technic_cnc_onecurvededge.pngbin0 -> 507 bytes
-rw-r--r--technic/textures/technic_cnc_pyramid.pngbin0 -> 480 bytes
-rw-r--r--technic/textures/technic_cnc_side.pngbin0 -> 1922 bytes
-rw-r--r--technic/textures/technic_cnc_slope.pngbin0 -> 437 bytes
-rw-r--r--technic/textures/technic_cnc_slope_edge.pngbin0 -> 419 bytes
-rw-r--r--technic/textures/technic_cnc_slope_edge_upsdwn.pngbin0 -> 486 bytes
-rw-r--r--technic/textures/technic_cnc_slope_inner_edge.pngbin0 -> 497 bytes
-rw-r--r--technic/textures/technic_cnc_slope_inner_edge_upsdwn.pngbin0 -> 605 bytes
-rw-r--r--technic/textures/technic_cnc_slope_lying.pngbin0 -> 548 bytes
-rw-r--r--technic/textures/technic_cnc_slope_upsdwn.pngbin0 -> 440 bytes
-rw-r--r--technic/textures/technic_cnc_sphere.pngbin0 -> 532 bytes
-rw-r--r--technic/textures/technic_cnc_spike.pngbin0 -> 556 bytes
-rw-r--r--technic/textures/technic_cnc_stick.pngbin0 -> 320 bytes
-rw-r--r--technic/textures/technic_cnc_top.pngbin0 -> 2137 bytes
-rw-r--r--technic/textures/technic_cnc_twocurvededge.pngbin0 -> 768 bytes
32 files changed, 1790 insertions, 52 deletions
diff --git a/technic/chainsaw.lua b/technic/chainsaw.lua
index 2c3fbf5..c31d9a8 100644
--- a/technic/chainsaw.lua
+++ b/technic/chainsaw.lua
@@ -1,63 +1,261 @@
-chainsaw_max_charge=30000
+-- Configuration
+local chainsaw_max_charge = 30000 -- 30000 - Maximum charge of the saw
+local chainsaw_charge_per_node = 12 -- 12 - Gives 2500 nodes on a single charge (about 50 complete normal trees)
+local chainsaw_leaves = true -- true - Cut down entire trees, leaves and all
+
register_power_tool ("technic:chainsaw",chainsaw_max_charge)
minetest.register_tool("technic:chainsaw", {
- description = "Chainsaw",
- inventory_image = "technic_chainsaw.png",
- stack_max = 1,
- on_use = function(itemstack, user, pointed_thing)
- if pointed_thing.type=="node" then
- item=itemstack:to_table()
- local meta=get_item_meta(item["metadata"])
- if meta==nil then return end --tool not charghed
- if meta["charge"]==nil then return end
- charge=meta["charge"]
- charge_to_take=600;
- if charge-charge_to_take>0 then
- charge_to_take=chainsaw_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,charge_to_take)
- charge=charge-charge_to_take;
- set_RE_wear(item,charge,chainsaw_max_charge)
- meta["charge"]=charge
- item["metadata"]=set_item_meta(meta)
- itemstack:replace(item)
- return itemstack
- end
- end
- end,
+ description = "Chainsaw",
+ inventory_image = "technic_chainsaw.png",
+ stack_max = 1,
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type=="node" then
+ item=itemstack:to_table()
+ local meta=get_item_meta(item["metadata"])
+ if meta==nil then return end --tool not charged
+ if meta["charge"]==nil then return end
+ -- Send current charge to digging function so that the chainsaw will stop after digging a number of nodes.
+ local charge=meta["charge"]
+ if charge < chainsaw_charge_per_node then return end -- only cut if charged
+
+ charge=chainsaw_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,charge)
+ set_RE_wear(item,charge,chainsaw_max_charge)
+ meta["charge"]=charge
+ item["metadata"]=set_item_meta(meta)
+ itemstack:replace(item)
+ return itemstack
+ end
+ end,
})
minetest.register_craft({
- output = 'technic:chainsaw',
- recipe = {
- {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'},
- {'technic:stainless_steel_ingot', 'technic:motor', 'technic:battery'},
- {'','','moreores:copper_ingot'},
- }
+ output = 'technic:chainsaw',
+ recipe = {
+ {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'},
+ {'technic:stainless_steel_ingot', 'technic:motor', 'technic:battery'},
+ {'','','moreores:copper_ingot'},
+ }
})
+-- The default stuff
+local timber_nodenames={["default:jungletree"] = true,
+ ["default:papyrus"] = true,
+ ["default:cactus"] = true,
+ ["default:tree"] = true,
+ ["default:apple"] = true
+}
+
+if chainsaw_leaves == true then
+ timber_nodenames["default:leaves"] = true
+end
+
+-- Support moretrees if it is there
+if( minetest.get_modpath("moretrees") ~= nil ) then
+ timber_nodenames["moretrees:apple_tree_trunk"] = true
+ timber_nodenames["moretrees:apple_tree_trunk_sideways"] = true
+ timber_nodenames["moretrees:beech_trunk"] = true
+ timber_nodenames["moretrees:beech_trunk_sideways"] = true
+ timber_nodenames["moretrees:birch_trunk"] = true
+ timber_nodenames["moretrees:birch_trunk_sideways"] = true
+ timber_nodenames["moretrees:fir_trunk"] = true
+ timber_nodenames["moretrees:fir_trunk_sideways"] = true
+ timber_nodenames["moretrees:oak_trunk"] = true
+ timber_nodenames["moretrees:oak_trunk_sideways"] = true
+ timber_nodenames["moretrees:palm_trunk"] = true
+ timber_nodenames["moretrees:palm_trunk_sideways"] = true
+ timber_nodenames["moretrees:pine_trunk"] = true
+ timber_nodenames["moretrees:pine_trunk_sideways"] = true
+ timber_nodenames["moretrees:rubber_tree_trunk"] = true
+ timber_nodenames["moretrees:rubber_tree_trunk_sideways"] = true
+ timber_nodenames["moretrees:rubber_tree_trunk_empty"] = true
+ timber_nodenames["moretrees:rubber_tree_trunk_sideways_empty"] = true
+ timber_nodenames["moretrees:sequoia_trunk"] = true
+ timber_nodenames["moretrees:sequoia_trunk_sideways"] = true
+ timber_nodenames["moretrees:spruce_trunk"] = true
+ timber_nodenames["moretrees:spruce_trunk_sideways"] = true
+ timber_nodenames["moretrees:willow_trunk"] = true
+ timber_nodenames["moretrees:willow_trunk_sideways"] = true
+ timber_nodenames["moretrees:jungletree_trunk"] = true
+ timber_nodenames["moretrees:jungletree_trunk_sideways"] = true
+
+ if chainsaw_leaves == true then
+ timber_nodenames["moretrees:apple_tree_leaves"] = true
+ timber_nodenames["moretrees:oak_leaves"] = true
+ timber_nodenames["moretrees:sequoia_leaves"] = true
+ timber_nodenames["moretrees:birch_leaves"] = true
+ timber_nodenames["moretrees:birch_leaves"] = true
+ timber_nodenames["moretrees:palm_leaves"] = true
+ timber_nodenames["moretrees:spruce_leaves"] = true
+ timber_nodenames["moretrees:spruce_leaves"] = true
+ timber_nodenames["moretrees:pine_leaves"] = true
+ timber_nodenames["moretrees:willow_leaves"] = true
+ timber_nodenames["moretrees:rubber_tree_leaves"] = true
+ timber_nodenames["moretrees:jungletree_leaves_green"] = true
+ timber_nodenames["moretrees:jungletree_leaves_yellow"] = true
+ timber_nodenames["moretrees:jungletree_leaves_red"] = true
+ end
+end
+
+-- Support growing_trees if it is there
+if( minetest.get_modpath("growing_trees") ~= nil ) then
+ timber_nodenames["growing_trees:trunk"] = true
+ timber_nodenames["growing_trees:medium_trunk"] = true
+ timber_nodenames["growing_trees:big_trunk"] = true
+ timber_nodenames["growing_trees:trunk_top"] = true
+ timber_nodenames["growing_trees:trunk_sprout"] = true
+ timber_nodenames["growing_trees:branch_sprout"] = true
+ timber_nodenames["growing_trees:branch"] = true
+ timber_nodenames["growing_trees:branch_xmzm"] = true
+ timber_nodenames["growing_trees:branch_xpzm"] = true
+ timber_nodenames["growing_trees:branch_xmzp"] = true
+ timber_nodenames["growing_trees:branch_xpzp"] = true
+ timber_nodenames["growing_trees:branch_zz"] = true
+ timber_nodenames["growing_trees:branch_xx"] = true
+
+ if chainsaw_leaves == true then
+ timber_nodenames["growing_trees:leaves"] = true
+ end
+end
+
+-- Support growing_cactus if it is there
+if( minetest.get_modpath("growing_cactus") ~= nil ) then
+ timber_nodenames["growing_cactus:sprout"] = true
+ timber_nodenames["growing_cactus:branch_sprout_vertical"] = true
+ timber_nodenames["growing_cactus:branch_sprout_vertical_fixed"] = true
+ timber_nodenames["growing_cactus:branch_sprout_xp"] = true
+ timber_nodenames["growing_cactus:branch_sprout_xm"] = true
+ timber_nodenames["growing_cactus:branch_sprout_zp"] = true
+ timber_nodenames["growing_cactus:branch_sprout_zm"] = true
+ timber_nodenames["growing_cactus:trunk"] = true
+ timber_nodenames["growing_cactus:branch_trunk"] = true
+ timber_nodenames["growing_cactus:branch"] = true
+ timber_nodenames["growing_cactus:branch_xp"] = true
+ timber_nodenames["growing_cactus:branch_xm"] = true
+ timber_nodenames["growing_cactus:branch_zp"] = true
+ timber_nodenames["growing_cactus:branch_zm"] = true
+ timber_nodenames["growing_cactus:branch_zz"] = true
+ timber_nodenames["growing_cactus:branch_xx"] = true
+end
+
+-- Table for saving what was sawed down
+local produced
+
+-- Saw down trees entry point
+chainsaw_dig_it = function(pos, player,current_charge)
+ local remaining_charge=current_charge
+
+ -- A bit of trickery here: use a different node drop callback
+ -- and restore the original afterwards.
+ minetest.handle_node_drops = chainsaw_handle_node_drops
+
+ -- clear result and start sawing things down
+ produced = {}
+ remaining_charge = recursive_dig(pos, remaining_charge, player)
+ minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, max_hear_distance = 10,})
+
+ -- Restore the original noder drop handler
+ minetest.handle_node_drops = original_handle_node_drops
+
+ -- Now drop items for the player
+ local number, produced_item, p
+ for produced_item,number in pairs(produced) do
+ --print("ADDING ITEM: " .. produced_item .. " " .. number)
+ -- Drop stacks of 99 or less
+ p = {
+ x = pos.x + math.random()*4,
+ y = pos.y,
+ z = pos.z + math.random()*4
+ }
+ while number > 99 do
+ minetest.env:add_item(p, produced_item .. " 99")
+ p = {
+ x = pos.x + math.random()*4,
+ y = pos.y,
+ z = pos.z + math.random()*4
+ }
+ number = number - 99
+ end
+ minetest.env:add_item(p, produced_item .. " " .. number)
+ end
+ return remaining_charge
+end
+
+-- Override the default handling routine to be able to count up the
+-- items sawed down so that we can drop them i an nice single stack
+chainsaw_handle_node_drops = function(pos, drops, digger)
+ -- Add dropped items to list of collected nodes
+ local _, dropped_item
+ for _, dropped_item in ipairs(drops) do
+ if produced[dropped_item] == nil then
+ produced[dropped_item] = 1
+ else
+ produced[dropped_item] = produced[dropped_item] + 1
+ end
+ end
+end
+
+-- Save the currently installed dropping mechanism so we can restore it.
+local original_handle_node_drops = minetest.handle_node_drops
+-- This function does all the hard work. Recursively we dig the node at hand
+-- if it is in the table and then search the surroundings for more stuff to dig.
+recursive_dig = function(pos, remaining_charge, player)
+ local node=minetest.env:get_node(pos)
+ local i=1
+ -- Lookup node name in timber table:
+ if timber_nodenames[node.name] ~= nil then
+ -- Return if we are out of power
+ if remaining_charge < chainsaw_charge_per_node then
+ return 0
+ end
+ local np
+ -- wood found - cut it.
+ minetest.env:dig_node(pos)
+ remaining_charge=remaining_charge-chainsaw_charge_per_node
+ -- check surroundings and run recursively if any charge left
+ np={x=pos.x+1, y=pos.y, z=pos.z}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
+ np={x=pos.x+1, y=pos.y, z=pos.z+1}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
+ np={x=pos.x+1, y=pos.y, z=pos.z-1}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
-timber_nodenames={"default:jungletree", "default:papyrus", "default:cactus", "default:tree"}
+ np={x=pos.x-1, y=pos.y, z=pos.z}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
+ np={x=pos.x-1, y=pos.y, z=pos.z+1}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
+ np={x=pos.x-1, y=pos.y, z=pos.z-1}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
-function chainsaw_dig_it (pos, player,charge_to_take)
- charge_to_take=0
- local node=minetest.env:get_node(pos)
- local i=1
- while timber_nodenames[i]~=nil do
- if node.name==timber_nodenames[i] then
- charge_to_take=600
- np={x=pos.x, y=pos.y, z=pos.z}
- while minetest.env:get_node(np).name==timber_nodenames[i] do
- minetest.env:remove_node(np)
- minetest.env:add_item(np, timber_nodenames[i])
- np={x=np.x, y=np.y+1, z=np.z}
- end
- minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, max_hear_distance = 10,})
- return charge_to_take
- end
- i=i+1
- end
+ np={x=pos.x, y=pos.y+1, z=pos.z}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
-return charge_to_take
+ np={x=pos.x, y=pos.y, z=pos.z+1}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
+ np={x=pos.x, y=pos.y, z=pos.z-1}
+ if timber_nodenames[minetest.env:get_node(np).name] ~= nil then
+ remaining_charge = recursive_dig(np, remaining_charge)
+ end
+ return remaining_charge
+ end
+ -- Nothing sawed down
+ return remaining_charge
end
diff --git a/technic/cnc.lua b/technic/cnc.lua
new file mode 100644
index 0000000..6e763ef
--- /dev/null
+++ b/technic/cnc.lua
@@ -0,0 +1,208 @@
+-- Technic CNC v1.0 by kpo
+-- Based on the NonCubic Blocks MOD v1.4 by yves_de_beck
+local shape = {}
+local size = 0
+local onesize_products = {
+ slope = 2,
+ slope_edge = 1,
+ slope_inner_edge = 1,
+ pyramid = 2,
+ spike = 1,
+ cylinder = 2,
+ sphere = 1,
+ stick = 8,
+ slope_upsdwn = 2,
+ slope_edge_upsdwn = 1,
+ slope_inner_edge_upsdwn = 1,
+ cylinder_hor = 2,
+ slope_lying = 2,
+ onecurvededge = 1,
+ twocurvededge = 1,
+}
+local twosize_products = {
+ element_straight = 4,
+ element_end = 2,
+ element_cross = 1,
+ element_t = 1,
+ element_edge = 2,
+}
+
+local showbackground = "--"
+local max_cncruns = 99
+local max_products = 99
+
+--showlabelin = ""
+--showlabelout = "label[4.5,5.5;Out:]"
+
+-- I want the CNC machine to be a two block thing
+minetest.register_node("technic:cnc", {
+ description = "CNC Milling Machine",
+ 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",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+
+ },
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ groups = {oddly_breakable_by_hand=2, cracky=3, dig_immediate=1},
+
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("input") or not inv:is_empty("output") then
+ minetest.chat_send_player(player:get_player_name(), "CNC machine cannot be removed because it is not empty");
+ return false
+ end
+ return true
+ end,
+
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ if technic_cnc_api.allow_menu_background == true or technic_cnc_api.allow_menu_background == 1 then
+ showbackground = "background[-0.15,-0.25;8.40,11.75;technic_cnc_background.png]"
+ end
+
+ meta:set_string("formspec", "invsize[8,11;]"..
+ "label[0,0;Choose Milling Program:]"..
+ "image_button[0,0.5;1,1;technic_cnc_slope.png;slope; ]"..
+ "image_button[1,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]"..
+ "image_button[2,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]"..
+ "image_button[3,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]"..
+ "image_button[4,0.5;1,1;technic_cnc_spike.png;spike; ]"..
+ "image_button[5,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]"..
+ "image_button[6,0.5;1,1;technic_cnc_sphere.png;sphere; ]"..
+ "image_button[7,0.5;1,1;technic_cnc_stick.png;stick; ]"..
+
+ "image_button[0,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdwn; ]"..
+ "image_button[1,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_upsdwn_edge; ]"..
+ "image_button[2,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_upddown_inner_edge; ]"..
+ "image_button[5,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]"..
+
+ "image_button[0,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]"..
+ "image_button[1,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]"..
+ "image_button[2,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]"..
+
+ "label[0,3.5;Slim Elements half / normal height:]"..
+
+ "image_button[0,4;1,0.5;technic_cnc_full.png;full; ]"..
+ "image_button[0,4.5;1,0.5;technic_cnc_half.png;half; ]"..
+ "image_button[1,4;1,1;technic_cnc_element_straight.png;element_straight; ]"..
+ "image_button[2,4;1,1;technic_cnc_element_end.png;element_end; ]"..
+ "image_button[3,4;1,1;technic_cnc_element_cross.png;element_cross; ]"..
+ "image_button[4,4;1,1;technic_cnc_element_t.png;element_t; ]"..
+ "image_button[5,4;1,1;technic_cnc_element_edge.png;element_edge; ]"..
+
+ "label[0, 5.5;In:]".. -- showlabelin..
+ "list[current_name;input;0.5,5.5;1,1;]"..
+ "field[3, 6;1,1;num_cncruns;Repeat program:;${num_cncruns}]".. -- Fill default with meta data num_cncruns
+ "label[4, 5.5;Out:]".. -- showlabelout..
+ "list[current_name;output;4.5,5.5;1,1;]"..
+
+ "list[current_player;main;0,7;8,4;]"..
+ showbackground)
+ meta:set_string("infotext", "CNC Milling Machine")
+ meta:set_string("num_cncruns", 1 );
+
+ local inv = meta:get_inventory()
+ inv:set_size("input", 1)
+ inv:set_size("output", 1)
+ end,
+
+ on_receive_fields = function(pos, formname, fields, sender)
+ -- REGISTER MILLING PROGRAMMS AND OUTPUTS:
+ ------------------------------------------
+ -- Program for half/full size
+ if fields["full"] then
+ size = 1
+ return
+ end
+
+ if fields["half"] then
+ size = 2
+ return
+ end
+
+ local meta = minetest.env:get_meta(pos)
+ local inv = meta:get_inventory()
+
+ -- Limit the number entered
+ if( fields.num_cncruns and tonumber( fields.num_cncruns) > 0 and tonumber(fields.num_cncruns) < 100 ) then
+ meta:set_string( "num_cncruns", fields.num_cncruns );
+ else
+ minetest.chat_send_player(sender:get_player_name(), "CNC machine runs set to a bad value. Machine resets.");
+ meta:set_string( "num_cncruns", 1 );
+ fields.num_cncruns = 1
+ end
+
+ -- Do nothing if the machine is empty
+ if inv:is_empty("input") then
+ return
+ end
+
+ -- Do nothing if the output is not empty and the product used is not the same as what is already there
+
+ -- Resolve the node name and the number of items to make and the number of items to take
+ local product = ""
+ local produces = 1
+ local input_used = 1
+ local inputstack = inv:get_stack("input", 1)
+ local inputname = inputstack:get_name()
+ local multiplier = 1
+ for k, _ in pairs(fields) do
+ -- Set a multipier for the half/full size capable blocks
+ if twosize_products[k] ~= nil then
+ multiplier = size*twosize_products[k]
+ else
+ multiplier = onesize_products[k]
+ end
+
+ if onesize_products[k] ~= nil or twosize_products[k] ~= nil then
+ product = inputname .. "_technic_cnc_" .. k
+ produces = math.min( fields.num_cncruns*multiplier, max_products) -- produce at most max_products
+ input_used = math.min( math.floor(produces/multiplier), inputstack:get_count()) -- use at most what we got
+ produces = input_used*multiplier -- final production
+ print(size)
+ print(fields.num_cncruns)
+ print(product)
+ print(produces)
+ print(input_used)
+ print("------------------")
+ break
+ end
+ end
+
+ -- CNC does the transformation
+ ------------------------------
+ if minetest.registered_nodes[product] ~= nil then
+ inv:add_item("output",product .. " " .. produces)
+ inputstack:take_item(input_used)
+ inv:set_stack("input",1,inputstack)
+ else
+ minetest.chat_send_player(sender:get_player_name(), "CNC machine does not know how to mill this material. Please remove it.");
+ end
+ return;
+ end, -- callback function
+ })
+----------
+
+
+-- Milling Machine Recipe
+-------------------------
+minetest.register_craft({
+ 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'},
+ },
+ })
+------------------------- \ No newline at end of file
diff --git a/technic/cnc_api.lua b/technic/cnc_api.lua
new file mode 100644
index 0000000..390a996
--- /dev/null
+++ b/technic/cnc_api.lua
@@ -0,0 +1,970 @@
+-- API for the technic CNC machine
+-- Again code is adapted from the NonCubic Blocks MOD v1.4 by yves_de_beck
+technic_cnc_api = {}
+
+-- HERE YOU CAN CHANGE THE DETAIL-LEVEL:
+----------------------------------------
+technic_cnc_api.detail_level = 16 -- 16; 1-32
+
+-- HERE YOU CAN DE/ACTIVATE BACKGROUND FOR CNC MENU:
+--------------------------------------------------------
+technic_cnc_api.allow_menu_background = false
+
+-- REGISTER NONCUBIC FORMS, CREATE MODELS AND RECIPES:
+------------------------------------------------------
+
+-- SLOPE
+--------
+function technic_cnc_api.register_slope(recipeitem, groups, images, description)
+
+local slopebox = {}
+local detail = technic_cnc_api.detail_level
+for i = 0, detail-1 do
+ slopebox[i+1]={-0.5, (i/detail)-0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+end
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = slopebox,
+ },
+ groups = groups,
+ })
+end
+
+
+-- SLOPE Lying
+----------------
+function technic_cnc_api.register_slope_lying(recipeitem, groups, images, description)
+
+local slopeboxlying = {}
+local detail = technic_cnc_api.detail_level
+for i = 0, detail-1 do
+ slopeboxlying[i+1]={(i/detail)-0.5, -0.5, (i/detail)-0.5, (i/detail)-0.5+(1/detail), 0.5 , 0.5}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_lying", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = slopeboxlying,
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_slope_lying 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_slope", ""},
+ {"", "", ""},
+ },
+ })
+
+end
+
+
+-- SLOPE UPSIDE DOWN
+--------------------
+function technic_cnc_api.register_slope_upsdown(recipeitem, groups, images, description)
+
+if subname == "dirt" then
+return
+end
+
+local slopeupdwnbox = {}
+local detail = technic_cnc_api.detail_level
+for i = 0, detail-1 do
+ slopeupdwnbox[i+1]={-0.5, (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_upsdown", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = slopeupdwnbox,
+ },
+ groups = groups,
+ })
+end
+
+
+-- SLOPE EDGE
+-------------
+function technic_cnc_api.register_slope_edge(recipeitem, groups, images, description)
+
+local slopeboxedge = {}
+local detail = technic_cnc_api.detail_level
+for i = 0, detail-1 do
+ slopeboxedge[i+1]={(i/detail)-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_edge", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = slopeboxedge,
+ },
+ groups = groups,
+ })
+end
+
+
+-- SLOPE INNER EDGE
+-------------------
+function technic_cnc_api.register_slope_inner_edge(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_inner_edge", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ -- PART 1
+ {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
+ {-0.45, -0.5, -0.5, 0.5, -0.4, 0.5},
+ {-0.4, -0.5, -0.5, 0.5, -0.35, 0.5},
+ {-0.35, -0.5, -0.5, 0.5, -0.3, 0.5},
+ {-0.3, -0.5, -0.5, 0.5, -0.25, 0.5},
+ {-0.25, -0.5, -0.5, 0.5, -0.2, 0.5},
+ {-0.2, -0.5, -0.5, 0.5, -0.15, 0.5},
+ {-0.15, -0.5, -0.5, 0.5, -0.1, 0.5},
+ {-0.1, -0.5, -0.5, 0.5, -0.05, 0.5},
+ {-0.05, -0.5, -0.5, 0.5, 0, 0.5},
+ {0, -0.5, -0.5, 0.5, 0.05, 0.5},
+ {0.05, -0.5, -0.5, 0.5, 0.1, 0.5},
+ {0.1, -0.5, -0.5, 0.5, 0.15, 0.5},
+ {0.15, -0.5, -0.5, 0.5, 0.2, 0.5},
+ {0.2, -0.5, -0.5, 0.5, 0.25, 0.5},
+ {0.25, -0.5, -0.5, 0.5, 0.3, 0.5},
+ {0.3, -0.5, -0.5, 0.5, 0.35, 0.5},
+ {0.35, -0.5, -0.5, 0.5, 0.4, 0.5},
+ {0.4, -0.5, -0.5, 0.5, 0.45, 0.5},
+ {0.45, -0.5, -0.5, 0.5, 0.5, 0.5},
+ -- PART 2
+ {-0.5, -0.5, -0.45, 0.5, -0.45, 0.5},
+ {-0.5, -0.5, -0.4, 0.5, -0.4, 0.5},
+ {-0.5, -0.5, -0.35, 0.5, -0.35, 0.5},
+ {-0.5, -0.5, -0.3, 0.5, -0.3, 0.5},
+ {-0.5, -0.5, -0.25, 0.5, -0.25, 0.5},
+ {-0.5, -0.5, -0.2, 0.5, -0.2, 0.5},
+ {-0.5, -0.5, -0.15, 0.5, -0.15, 0.5},
+ {-0.5, -0.5, -0.1, 0.5, -0.1, 0.5},
+ {-0.5, -0.5, -0.05, 0.5, -0.05, 0.5},
+ {-0.5, -0.5, 0, 0.5, 0, 0.5},
+ {-0.5, -0.5, 0.05, 0.5, 0.05, 0.5},
+ {-0.5, -0.5, 0.1, 0.5, 0.1, 0.5},
+ {-0.5, -0.5, 0.15, 0.5, 0.15, 0.5},
+ {-0.5, -0.5, 0.2, 0.5, 0.2, 0.5},
+ {-0.5, -0.5, .25, 0.5, 0.25, 0.5},
+ {-0.5, -0.5, 0.3, 0.5, 0.3, 0.5},
+ {-0.5, -0.5, 0.35, 0.5, 0.35, 0.5},
+ {-0.5, -0.5, 0.4, 0.5, 0.4, 0.5},
+ {-0.5, -0.5, 0.45, 0.5, 0.45, 0.5},
+ {-0.5, -0.5, 0.5, 0.5, 0.5, 0.5},
+ },
+ },
+ groups = groups,
+ })
+end
+
+
+-- SLOPE EDGE UPSIDE DOWN
+-------------------------
+function technic_cnc_api.register_slope_upsdown_edge(recipeitem, groups, images, description)
+
+if recipeitem == "default:dirt" then
+ return
+end
+
+local slopeupdwnboxedge = {}
+local detail = technic_cnc_api.detail_level
+for i = 0, detail-1 do
+ slopeupdwnboxedge[i+1]={(-1*(i/detail))+0.5-(1/detail), (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_upsdown_edge", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = slopeupdwnboxedge,
+ },
+ groups = groups,
+ })
+end
+
+
+-- SLOPE INNER EDGE UPSIDE DOWN
+-------------------------------
+function technic_cnc_api.register_slope_upsdown_inner_edge(recipeitem, groups, images, description)
+
+if recipename == "default:dirt" then
+return
+end
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_upsdown_inner_edge", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0.45, -0.5, -0.5, 0.5, -0.45, 0.5},
+ {0.4, -0.45, -0.5, 0.5, -0.4, 0.5},
+ {0.35, -0.4, -0.5, 0.5, -0.35, 0.5},
+ {0.3, -0.35, -0.5, 0.5, -0.3, 0.5},
+ {0.25, -0.3, -0.5, 0.5, -0.25, 0.5},
+ {0.2, -0.25, -0.5, 0.5, -0.2, 0.5},
+ {0.15, -0.2, -0.5, 0.5, -0.15, 0.5},
+ {0.1, -0.15, -0.5, 0.5, -0.1, 0.5},
+ {0.05, -0.1, -0.5, 0.5, -0.05, 0.5},
+ {0, -0.05, -0.5, 0.5, 0, 0.5},
+ {-0.05, 0, -0.5, 0.5, 0.05, 0.5},
+ {-0.1, 0.05, -0.5, 0.5, 0.1, 0.5},
+ {-0.15, 0.1, -0.5, 0.5, 0.15, 0.5},
+ {-0.2, 0.15, -0.5, 0.5, 0.2, 0.5},
+ {-0.25, 0.2, -0.5, 0.5, 0.25, 0.5},
+ {-0.3, 0.25, -0.5, 0.5, 0.3, 0.5},
+ {-0.35, 0.3, -0.5, 0.5, 0.35, 0.5},
+ {-0.4, 0.35, -0.5, 0.5, 0.4, 0.5},
+ {-0.45, 0.4, -0.5, 0.5, 0.45, 0.5},
+ {-0.5, 0.45, -0.5, 0.5, 0.5, 0.5},
+
+ {-0.5, -0.5, 0.45, 0.5, -0.45, 0.5},
+ {-0.5, -0.45, 0.4, 0.5, -0.4, 0.5},
+ {-0.5, -0.4, 0.35, 0.5, -0.35, 0.5},
+ {-0.5, -0.35, 0.3, 0.5, -0.3, 0.5},
+ {-0.5, -0.3, 0.25, 0.5, -0.25, 0.5},
+ {-0.5, -0.25, 0.2, 0.5, -0.2, 0.5},
+ {-0.5, -0.2, 0.15, 0.5, -0.15, 0.5},
+ {-0.5, -0.15, 0.1, 0.5, -0.1, 0.5},
+ {-0.5, -0.1, 0.05, 0.5, -0.05, 0.5},
+ {-0.5, -0.05, 0, 0.5, 0, 0.5},
+ {-0.5, 0, -0.05, 0.5, 0.05, 0.5},
+ {-0.5, 0.05, -0.1, 0.5, 0.1, 0.5},
+ {-0.5, 0.1, -0.15, 0.5, 0.15, 0.5},
+ {-0.5, 0.15, -0.2, 0.5, 0.2, 0.5},
+ {-0.5, 0.2, -0.25, 0.5, 0.25, 0.5},
+ {-0.5, 0.25, -0.3, 0.5, 0.3, 0.5},
+ {-0.5, 0.3, -0.35, 0.5, 0.35, 0.5},
+ {-0.5, 0.35, -0.4, 0.5, 0.4, 0.5},
+ {-0.5, 0.4, -0.45, 0.5, 0.45, 0.5},
+ {-0.5, 0.45, -0.5, 0.5, 0.5, 0.5},
+
+ },
+ },
+ groups = groups,
+ })
+end
+
+
+-- PYRAMID
+----------
+function technic_cnc_api.register_pyramid(recipeitem, groups, images, description)
+
+local pyrabox = {}
+local detail = technic_cnc_api.detail_level/2
+for i = 0, detail-1 do
+ pyrabox[i+1]={(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail/2)-0.5+(1/detail), 0.5-(i/detail/2)}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_pyramid", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = pyrabox,
+ },
+ groups = groups,
+ })
+end
+
+
+-- SPIKE
+--------
+function technic_cnc_api.register_spike(recipeitem, groups, images, description)
+
+if recipename == "default:dirt" then
+ return
+end
+
+local spikebox = {}
+local detail = technic_cnc_api.detail_level
+for i = 0, detail-1 do
+ spikebox[i+1]={(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail)-0.5+(1/detail), 0.5-(i/detail/2)}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_spike", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = spikebox,
+ },
+ groups = groups,
+ })
+end
+
+
+-- Block one curved edge
+------------------------
+function technic_cnc_api.register_onecurvededge(recipeitem, groups, images, description)
+
+local quartercyclebox = {}
+local detail = technic_cnc_api.detail_level*2
+local sehne
+for i = (detail/2)-1, detail-1 do
+ sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+ quartercyclebox[i]={-0.5, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_onecurvededge", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = quartercyclebox,
+ },
+ groups = groups,
+ })
+end
+
+
+-- Block two curved edges
+-------------------------
+function technic_cnc_api.register_twocurvededge(recipeitem, groups, images, description)
+
+local quartercyclebox2 = {}
+local detail = technic_cnc_api.detail_level*2
+local sehne
+for i = (detail/2)-1, detail-1 do
+ sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+ quartercyclebox2[i]={-sehne, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_twocurvededge", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = quartercyclebox2,
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_twocurvededge 3",
+ recipe = {
+ {"", "", ""},
+ {recipeitem .. "_technic_cnc_onecurvededge", "", ""},
+ {recipeitem .. "_technic_cnc_onecurvededge", recipeitem .. "_technic_cnc_onecurvededge", ""},
+ },
+ })
+
+end
+
+-- Cylinder
+-----------
+function technic_cnc_api.register_cylinder(recipeitem, groups, images, description)
+
+if recipename == "default:dirt" then
+return
+end
+
+local cylbox = {}
+local detail = technic_cnc_api.detail_level
+local sehne
+for i = 1, detail-1 do
+ sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+ cylbox[i]={(i/detail)-0.5, -0.5, -sehne, (i/detail)+(1/detail)-0.5, 0.5, sehne}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_cylinder", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = cylbox,
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_cylinder 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_cylinder_horizontal", ""},
+ {"", "", ""},
+ },
+ })
+
+end
+
+
+-- Cylinder Horizontal
+----------------------
+function technic_cnc_api.register_cylinder_horizontal(recipeitem, groups, images, description)
+
+if recipename == "default:dirt" then
+ return
+end
+
+local cylbox_horizontal = {}
+local detail = technic_cnc_api.detail_level
+local sehne
+for i = 1, detail-1 do
+ sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+ cylbox_horizontal[i]={-0.5, (i/detail)-0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, sehne}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_cylinder_horizontal", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = cylbox_horizontal,
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_cylinder_horizontal 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_cylinder", ""},
+ {"", "", ""},
+ },
+ })
+end
+
+
+-- Sphere
+---------
+function technic_cnc_api.register_sphere(recipeitem, groups, images, description)
+
+if recipename == "default:dirt" then
+ return
+end
+
+local spherebox = {}
+local detail = technic_cnc_api.detail_level
+local sehne
+for i = 1, detail-1 do
+ sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+ spherebox[i]={-sehne, (i/detail)-0.5, -sehne, sehne, (i/detail)+(1/detail)-0.5, sehne}
+end
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_cylinder_sphere", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = spherebox,
+ },
+ groups = groups,
+ })
+end
+
+
+-- Element straight
+-------------------
+function technic_cnc_api.register_element_straight(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_straight", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
+ },
+ },
+ groups = groups,
+ })
+end
+
+
+-- Element Edge
+---------------
+function technic_cnc_api.register_element_edge(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_edge", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
+ },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
+ },
+ },
+ groups = groups,
+ })
+end
+
+
+-- Element T
+------------
+function technic_cnc_api.register_element_t(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_t", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
+ {0.3, -0.5, -0.3, 0.5, 0, 0.3},
+ },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
+ {0.3, -0.5, -0.3, 0.5, 0, 0.3},
+ },
+ },
+ groups = groups,
+ })
+end
+
+
+-- Element Cross
+----------------
+function technic_cnc_api.register_element_cross(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_cross", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {0.3, -0.5, -0.3, 0.5, 0, 0.3},
+ {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
+ {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
+ },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0.3, -0.5, -0.3, 0.5, 0, 0.3},
+ {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
+ {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
+ },
+ },
+ groups = groups,
+ })
+end
+
+
+-- Element End
+--------------
+function technic_cnc_api.register_element_end(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_end", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
+ },
+ groups = groups,
+ })
+end
+
+
+-- Element straight DOUBLE
+--------------------------
+function technic_cnc_api.register_element_straight_double(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_straight_double", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
+ },
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_element_straight_double 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_element_straight", ""},
+ {"", recipeitem .. "_technic_cnc_element_straight", ""},
+ },
+ })
+end
+
+
+-- Element Edge DOUBLE
+----------------------
+function technic_cnc_api.register_element_edge_double(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_edge_double", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
+ },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
+ },
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_element_edge_double 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_element_edge", ""},
+ {"", recipeitem .. "_technic_cnc_element_edge", ""},
+ },
+ })
+end
+
+
+-- Element T DOUBLE
+-------------------
+function technic_cnc_api.register_element_t_double(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_t_double", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
+ {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
+ },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
+ {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
+ {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
+ },
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_element_t_double 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_element_t", ""},
+ {"", recipeitem .. "_technic_cnc_element_t", ""},
+ },
+ })
+end
+
+
+-- Element Cross Double
+-----------------------
+function technic_cnc_api.register_element_cross_double(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_cross_double", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
+ {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
+ {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
+ },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
+ {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
+ {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
+ },
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_element_cross_double 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_element_cross", ""},
+ {"", recipeitem .. "_technic_cnc_element_cross", ""},
+ },
+ })
+
+end
+
+
+-- Element End Double
+---------------------
+function technic_cnc_api.register_element_end_double(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_end_double", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_element_end_double 1",
+ recipe = {
+ {"", "", ""},
+ {"", recipeitem .. "_technic_cnc_element_end", ""},
+ {"", recipeitem .. "_technic_cnc_element_end", ""},
+ },
+ })
+end
+
+
+-- STICK
+--------
+function technic_cnc_api.register_stick(recipeitem, groups, images, description)
+
+minetest.register_node(":" .. recipeitem .. "_technic_cnc_stick", {
+ description = description,
+ drawtype = "nodebox",
+ tiles = images,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
+ },
+ groups = groups,
+ })
+ minetest.register_craft({
+ output = recipeitem .. "_technic_cnc_stick 8",
+ recipe = {
+ {'default:stick', "", ""},
+ {"", "", ""},
+ {recipeitem, "", ""},
+ },
+ })
+end
+
+
+
+-- REGISTER NEW TECHNIC_CNC_API's PART 2: technic_cnc_api.register_element_end(subname, recipeitem, groups, images, desc_element_xyz)
+-----------------------------------------------------------------------------------------------------------------------
+function technic_cnc_api.register_slope_edge_etc(recipeitem, groups, images, desc_slope, desc_slope_lying, desc_slope_upsdown, desc_slope_edge, desc_slope_inner_edge, desc_slope_upsdwn_edge, desc_slope_upsdwn_inner_edge, desc_pyramid, desc_spike, desc_onecurvededge, desc_twocurvededge, desc_cylinder, desc_cylinder_horizontal, desc_sphere, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end)
+
+ technic_cnc_api.register_slope(recipeitem, groups, images, desc_slope)
+ technic_cnc_api.register_slope_lying(recipeitem, groups, images, desc_slope_lying)
+ technic_cnc_api.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown)
+ technic_cnc_api.register_slope_edge(recipeitem, groups, images, desc_slope_edge)
+ technic_cnc_api.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge)
+ technic_cnc_api.register_slope_upsdown_edge(recipeitem, groups, images, desc_slope_upsdwn_edge)
+ technic_cnc_api.register_slope_upsdown_inner_edge(recipeitem, groups, images, desc_slope_upsdwn_inner_edge)
+ technic_cnc_api.register_pyramid(recipeitem, groups, images, desc_pyramid)
+ technic_cnc_api.register_spike(recipeitem, groups, images, desc_spike)
+ technic_cnc_api.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge)
+ technic_cnc_api.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge)
+ technic_cnc_api.register_cylinder(recipeitem, groups, images, desc_cylinder)
+ technic_cnc_api.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal)
+ technic_cnc_api.register_sphere(recipeitem, groups, images, desc_sphere)
+ technic_cnc_api.register_element_straight(recipeitem, groups, images, desc_element_straight)
+ technic_cnc_api.register_element_edge(recipeitem, groups, images, desc_element_edge)
+ technic_cnc_api.register_element_t(recipeitem, groups, images, desc_element_t)
+ technic_cnc_api.register_element_cross(recipeitem, groups, images, desc_element_cross)
+ technic_cnc_api.register_element_end(recipeitem, groups, images, desc_element_end)
+end
+
+-- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz)
+------------------------------------------------------------------------------------------------------------
+function technic_cnc_api.register_stick_etc(recipeitem, groups, images, desc_stick)
+ technic_cnc_api.register_stick(recipeitem, groups, images, desc_stick)
+end
+
+function technic_cnc_api.register_elements(recipeitem, groups, images, desc_element_straight_double, desc_element_edge_double, desc_element_t_double, desc_element_cross_double, desc_element_end_double)
+ technic_cnc_api.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double)
+ technic_cnc_api.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double)
+ technic_cnc_api.register_element_t_double(recipeitem, groups, images, desc_element_t_double)
+ technic_cnc_api.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double)
+ technic_cnc_api.register_element_end_double(recipeitem, groups, images, desc_element_end_double)
+end
diff --git a/technic/cnc_nodes.lua b/technic/cnc_nodes.lua
new file mode 100644
index 0000000..2f375a5
--- /dev/null
+++ b/technic/cnc_nodes.lua
@@ -0,0 +1,354 @@
+-- REGISTER MATERIALS AND PROPERTIES FOR NONCUBIC ELEMENTS:
+-----------------------------------------------------------
+
+-- WOOD
+-------
+technic_cnc_api.register_slope_edge_etc("default:wood",
+ {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ {"default_wood.png"},
+ "Wooden Slope",
+ "Wooden Slope Lying",
+ "Wooden Slope Upside Down",
+ "Wooden Slope Edge",
+ "Wooden Slope Inner Edge",
+ "Wooden Slope Upside Down Edge",
+ "Wooden Slope Upside Down Inner Edge",
+ "Wooden Pyramid",
+ "Wooden Spike",
+ "Wooden One Curved Edge Block",
+ "Wooden Two Curved Edge Block",
+ "Wooden Cylinder",
+ "Wooden Cylinder Horizontal",
+ "Wooden Sphere",
+ "Wooden Element Straight",
+ "Wooden Element Edge",
+ "Wooden Element T",
+ "Wooden Element Cross",
+ "Wooden Element End")
+-- STONE
+--------
+technic_cnc_api.register_slope_edge_etc("default:stone",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_stone.png"},
+ "Stone Slope",
+ "Stone Slope Lying",
+ "Stone Slope Upside Down",
+ "Stone Slope Edge",
+ "Stone Slope Inner Edge",
+ "Stone Slope Upside Down Edge",
+ "Stone Slope Upside Down Inner Edge",
+ "Stone Pyramid",
+ "Stone Spike",
+ "Stone One Curved Edge Block",
+ "Stone Two Curved Edge Block",
+ "Stone Cylinder",
+ "Stote Cylinder Horizontal",
+ "Stone Sphere",
+ "Stone Element Straight",
+ "Stone Element Edge",
+ "Stone Element T",
+ "Stone Element Cross",
+ "Stone Element End")
+-- COBBLE
+---------
+technic_cnc_api.register_slope_edge_etc("default:cobble",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_cobble.png"},
+ "Cobble Slope",
+ "Cobble Slope Lying",
+ "Cobble Slope Upside Down",
+ "Cobble Slope Edge",
+ "Cobble Slope Inner Edge",
+ "Cobble Slope Upside Down Edge",
+ "Cobble Slope Upside Down Inner Edge",
+ "Cobble Pyramid",
+ "Cobble Spike",
+ "Cobble One Curved Edge Block",
+ "Cobble Two Curved Edge Block",
+ "Cobble Cylinder",
+ "Cobble Cylinder Horizontal",
+ "Cobble Sphere",
+ "Cobble Element Straight",
+ "Cobble Element Edge",
+ "Cobble Element T",
+ "Cobble Element Cross",
+ "Cobble Element End")
+-- BRICK
+--------
+technic_cnc_api.register_slope_edge_etc("default:brick",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_brick.png"},
+ "Brick Slope",
+ "Brick Slope Upside Down",
+ "Brick Slope Edge",
+ "Brick Slope Inner Edge",
+ "Brick Slope Upside Down Edge",
+ "Brick Slope Upside Down Inner Edge",
+ "Brick Pyramid",
+ "Brick Spike",
+ "Brick One Curved Edge Block",
+ "Brick Two Curved Edge Block",
+ "Brick Cylinder",
+ "Brick Cylinder Horizontal",
+ "Brick Sphere",
+ "Brick Element Straight",
+ "Brick Element Edge",
+ "Brick Element T",
+ "Brick Element Cross",
+ "Brick Element End")
+-- SANDSTONE
+------------
+technic_cnc_api.register_slope_edge_etc("default:sandstone",
+ {crumbly=2,cracky=2,not_in_creative_inventory=1},
+ {"default_sandstone.png"},
+ "Sandstone Slope",
+ "Sandstone Slope Lying",
+ "Sandstone Slope Upside Down",
+ "Sandstone Slope Edge",
+ "Sandstone Slope Inner Edge",
+ "Sandstone Slope Upside Down Edge",
+ "Sandstone Slope Upside Down Inner Edge",
+ "Sandstone Pyramid",
+ "Sandstone Spike",
+ "Sandstone One Curved Edge Block",
+ "Sandstone Two Curved Edge Block",
+ "Sandstone Cylinder",
+ "Sandstone Cylinder Horizontal",
+ "Sandstone Sphere",
+ "Sandstone Element Straight",
+ "Sandstone Element Edge",
+ "Sandstone Element T",
+ "Sandstone Element Cross",
+ "Sandstone Element End")
+-- LEAVES
+---------
+technic_cnc_api.register_slope_edge_etc("default:leaves",
+ {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
+ {"bucharest_tree.png"},
+ "Leaves Slope",
+ "Leaves Slope Lying",
+ "Leaves Slope Upside Down",
+ "Leaves Slope Edge",
+ "Leaves Slope Inner Edge",
+ "Leaves Slope Upside Down Edge",
+ "Leaves Slope Upside Down Inner Edge",
+ "Leaves Pyramid",
+ "Leaves Spike",
+ "Leaves One Curved Edge Block",
+ "Leaves Two Curved Edge Block",
+ "Leaves Cylinder",
+ "Leaves Cylinder Horizontal",
+ "Leaves Sphere",
+ "Leaves Element Straight",
+ "Leaves Element Edge",
+ "Leaves Element T",
+ "Leaves Element Cross",
+ "Leaves Element End")
+-- DIRT
+-------
+technic_cnc_api.register_slope_edge_etc("default:dirt",
+ {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
+ {"default_grass.png", "default_dirt.png", "default_grass.png"},
+ "Dirt Slope",
+ "Dirt Slope Lying",
+ "Dirt Slope Upside Down",
+ "Dirt Slope Edge",
+ "Dirt Slope Inner Edge",
+ "Dirt Slope Upside Down Edge",
+ "Dirt Slope Upside Down Inner Edge",
+ "Dirt Pyramid",
+ "Dirt Spike",
+ "Dirt One Curved Edge Block",
+ "Dirt Two Curved Edge Block",
+ "Dirt Cylinder",
+ "Dirt Cylinder Horizontal",
+ "Dirt Sphere",
+ "Dirt Element Straight",
+ "Dirt Element Edge",
+ "Dirt Element T",
+ "Dirt Element Cross",
+ "Dirt Element End")
+-- TREE
+-------
+technic_cnc_api.register_slope_edge_etc("default:tree",
+ {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,not_in_creative_inventory=1},
+ {"default_tree.png"},
+ "Tree Slope",
+ "Tree Slope Lying",
+ "Tree Slope Upside Down",
+ "Tree Slope Edge",
+ "Tree Slope Inner Edge",
+ "Tree Slope Upside Down Edge",
+ "Tree Slope Upside Down Inner Edge",
+ "Tree Pyramid",
+ "Tree Spike",
+ "Tree One Curved Edge Block",
+ "Tree Two Curved Edge Block",
+ "Tree Cylinder",
+ "Tree Cylinder Horizontal",
+ "Tree Sphere",
+ "Tree Element Straight",
+ "Tree Element Edge",
+ "Tree Element T",
+ "Tree Element Cross",
+ "Tree Element End")
+-- STEEL
+--------
+technic_cnc_api.register_slope_edge_etc("default:steelblock",
+ {snappy=1,bendy=2,cracky=1,melty=2,level=2,not_in_creative_inventory=1},
+ {"default_steel_block.png"},
+ "Steel Slope",
+ "Steel Slope Lying",
+ "Steel Slope Upside Down",
+ "Steel Slope Edge",
+ "Steel Slope Inner Edge",
+ "Steel Slope Upside Down Edge",
+ "Steel Slope Upside Down Inner Edge",
+ "Steel Pyramid",
+ "Steel Spike",
+ "Steel One Curved Edge Block",
+ "Steel Two Curved Edge Block",
+ "Steel Cylinder",
+ "Steel Cylinder Horizontal",
+ "Steel Sphere",
+ "Steel Element Straight",
+ "Steel Element Edge",
+ "Steel Element T",
+ "Steel Element Cross",
+ "Steel Element End")
+
+-- REGISTER MATERIALS AND PROPERTIES FOR STICKS:
+------------------------------------------------
+
+-- WOOD
+-------
+technic_cnc_api.register_stick_etc("default:wood",
+ {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ {"default_wood.png"},
+ "Wooden Stick")
+-- STONE
+--------
+technic_cnc_api.register_stick_etc("default:stone",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_stone.png"},
+ "Stone Stick")
+-- COBBLE
+---------
+technic_cnc_api.register_stick_etc("default:cobble",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_cobble.png"},
+ "Cobble Stick")
+-- BRICK
+--------
+technic_cnc_api.register_stick_etc("default:brick",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_brick.png"},
+ "Brick Stick")
+-- SANDSTONE
+------------
+technic_cnc_api.register_stick_etc("default:sandstone",
+ {crumbly=2,cracky=2,not_in_creative_inventory=1},
+ {"default_sandstone.png"},
+ "Sandstone Stick")
+-- LEAVES
+---------
+technic_cnc_api.register_stick_etc("default:leaves",
+ {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
+ {"bucharest_tree.png"},
+ "Leaves Stick")
+-- TREE
+-------
+technic_cnc_api.register_stick_etc("default:tree",
+ {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1,not_in_creative_inventory=1},
+ {"default_tree.png"},
+ "Tree Stick")
+-- STEEL
+--------
+technic_cnc_api.register_stick_etc("default:steelblock",
+ {snappy=1,bendy=2,cracky=1,melty=2,level=2,not_in_creative_inventory=1},
+ {"default_steel_block.png"},
+ "Steel Stick")
+
+-- REGISTER MATERIALS AND PROPERTIES FOR HALF AND NORMAL HEIGHT ELEMENTS:
+-------------------------------------------------------------------------
+
+-- WOOD
+-------
+technic_cnc_api.register_elements("default:wood",
+ {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ {"default_wood.png"},
+ "Wooden Element Straight Double",
+ "Wooden Element Edge Double",
+ "Wooden Element T Double",
+ "Wooden Element Cross Double",
+ "Wooden Element End Double")
+-- STONE
+--------
+technic_cnc_api.register_elements("default:stone",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_stone.png"},
+ "Stone Element Straight Double",
+ "Stone Element Edge Double",
+ "Stone Element T Double",
+ "Stone Element Cross Double",
+ "Stone Element End Double")
+-- COBBLE
+---------
+technic_cnc_api.register_elements("default:cobble",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_cobble.png"},
+ "Cobble Element Straight Double",
+ "Cobble Element Edge Double",
+ "Cobble Element T Double",
+ "Cobble Element Cross Double",
+ "Cobble Element End Double")
+-- BRICK
+--------
+technic_cnc_api.register_elements("default:brick",
+ {cracky=3,not_in_creative_inventory=1},
+ {"default_brick.png"},
+ "Brick Element Straight Double",
+ "Brick Element Edge Double",
+ "Brick Element T Double",
+ "Brick Element Cross Double",
+ "Brick Element End Double")
+-- SANDSTONE
+------------
+technic_cnc_api.register_elements("default:sandstone",
+ {crumbly=2,cracky=2,not_in_creative_inventory=1},
+ {"default_sandstone.png"},
+ "Sandstone Element Straight Double",
+ "Sandstone Element Edge Double",
+ "Sandstone Element T Double",
+ "Sandstone Element Cross Double",
+ "Sandstone Element End Double")
+-- LEAVES
+---------
+technic_cnc_api.register_elements("default:leaves",
+ {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
+ {"bucharest_tree.png"},
+ "Leaves Element Straight Double",
+ "Leaves Element Edge Double",
+ "Leaves Element T Double",
+ "Leaves Element Cross Double",
+ "Leaves Element End Double")
+-- TREE
+-------
+technic_cnc_api.register_elements("default:tree",
+ {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1,not_in_creative_inventory=1},
+ {"default_tree.png"},
+ "Tree Element Straight Double",
+ "Tree Element Edge Double",
+ "Tree Element T Double",
+ "Tree Element Cross Double",
+ "Tree Element End Double")
+-- STEEL
+--------
+technic_cnc_api.register_elements("default:steel",
+ {snappy=1,bendy=2,cracky=1,melty=2,level=2,not_in_creative_inventory=1},
+ {"default_steel_block.png"},
+ "Steel Element Straight Double",
+ "Steel Element Edge Double",
+ "Steel Element T Double",
+ "Steel Element Cross Double",
+ "Steel Element End Double")
diff --git a/technic/init.lua b/technic/init.lua
index 58e0488..ff904e2 100644
--- a/technic/init.lua
+++ b/technic/init.lua
@@ -2,6 +2,8 @@
-- namespace: technic
-- (c) 2012-2013 by RealBadAngel <mk@realbadangel.pl>
+technic = {}
+
modpath=minetest.get_modpath("technic")
--Read technic config file
@@ -25,6 +27,9 @@ dofile(modpath.."/tool_workshop.lua")
dofile(modpath.."/music_player.lua")
dofile(modpath.."/generator.lua")
dofile(modpath.."/grinder.lua")
+dofile(modpath.."/cnc.lua")
+dofile(modpath.."/cnc_api.lua")
+dofile(modpath.."/cnc_nodes.lua")
--MV machines
dofile(modpath.."/wires_mv.lua")
@@ -34,10 +39,13 @@ dofile(modpath.."/electric_furnace_mv.lua")
dofile(modpath.."/alloy_furnace_mv.lua")
dofile(modpath.."/forcefield.lua")
+--HV machines
+dofile(modpath.."/wires_hv.lua")
+
--Tools
-if enable_mining_drill==true then dofile(modpath.."/mining_drill.lua") end
-if enable_mining_laser==true then dofile(modpath.."/mining_laser_mk1.lua") end
-if enable_flashlight==true then dofile(modpath.."/flashlight.lua") end
+if technic.config:getBool("enable_mining_drill") then dofile(modpath.."/mining_drill.lua") end
+if technic.config:getBool("enable_mining_laser") then dofile(modpath.."/mining_laser_mk1.lua") end
+if technic.config:getBool("enable_flashlight") then dofile(modpath.."/flashlight.lua") end
dofile(modpath.."/cans.lua")
dofile(modpath.."/chainsaw.lua")
dofile(modpath.."/tree_tap.lua")
diff --git a/technic/textures/technic_cnc_bottom.png b/technic/textures/technic_cnc_bottom.png
new file mode 100644
index 0000000..e600cb1
--- /dev/null
+++ b/technic/textures/technic_cnc_bottom.png
Binary files differ
diff --git a/technic/textures/technic_cnc_cylinder.png b/technic/textures/technic_cnc_cylinder.png
new file mode 100644
index 0000000..06da024
--- /dev/null
+++ b/technic/textures/technic_cnc_cylinder.png
Binary files differ
diff --git a/technic/textures/technic_cnc_cylinder_horizontal.png b/technic/textures/technic_cnc_cylinder_horizontal.png
new file mode 100644
index 0000000..670ecf2
--- /dev/null
+++ b/technic/textures/technic_cnc_cylinder_horizontal.png
Binary files differ
diff --git a/technic/textures/technic_cnc_element_cross.png b/technic/textures/technic_cnc_element_cross.png
new file mode 100644
index 0000000..f2ad0b7
--- /dev/null
+++ b/technic/textures/technic_cnc_element_cross.png
Binary files differ
diff --git a/technic/textures/technic_cnc_element_edge.png b/technic/textures/technic_cnc_element_edge.png
new file mode 100644
index 0000000..e6104cf
--- /dev/null
+++ b/technic/textures/technic_cnc_element_edge.png
Binary files differ
diff --git a/technic/textures/technic_cnc_element_end.png b/technic/textures/technic_cnc_element_end.png
new file mode 100644
index 0000000..6bc6837
--- /dev/null
+++ b/technic/textures/technic_cnc_element_end.png
Binary files differ
diff --git a/technic/textures/technic_cnc_element_straight.png b/technic/textures/technic_cnc_element_straight.png
new file mode 100644
index 0000000..1648b7b
--- /dev/null
+++ b/technic/textures/technic_cnc_element_straight.png
Binary files differ
diff --git a/technic/textures/technic_cnc_element_t.png b/technic/textures/technic_cnc_element_t.png
new file mode 100644
index 0000000..0d49cd8
--- /dev/null
+++ b/technic/textures/technic_cnc_element_t.png
Binary files differ
diff --git a/technic/textures/technic_cnc_front.png b/technic/textures/technic_cnc_front.png
new file mode 100644
index 0000000..6cc0490
--- /dev/null
+++ b/technic/textures/technic_cnc_front.png
Binary files differ
diff --git a/technic/textures/technic_cnc_full.png b/technic/textures/technic_cnc_full.png
new file mode 100644
index 0000000..d551a45
--- /dev/null
+++ b/technic/textures/technic_cnc_full.png
Binary files differ
diff --git a/technic/textures/technic_cnc_half.png b/technic/textures/technic_cnc_half.png
new file mode 100644
index 0000000..51ebcd7
--- /dev/null
+++ b/technic/textures/technic_cnc_half.png
Binary files differ
diff --git a/technic/textures/technic_cnc_milling_background.png b/technic/textures/technic_cnc_milling_background.png
new file mode 100644
index 0000000..6a9c2f4
--- /dev/null
+++ b/technic/textures/technic_cnc_milling_background.png
Binary files differ
diff --git a/technic/textures/technic_cnc_onecurvededge.png b/technic/textures/technic_cnc_onecurvededge.png
new file mode 100644
index 0000000..46779fd
--- /dev/null
+++ b/technic/textures/technic_cnc_onecurvededge.png
Binary files differ
diff --git a/technic/textures/technic_cnc_pyramid.png b/technic/textures/technic_cnc_pyramid.png
new file mode 100644
index 0000000..5dc3322
--- /dev/null
+++ b/technic/textures/technic_cnc_pyramid.png
Binary files differ
diff --git a/technic/textures/technic_cnc_side.png b/technic/textures/technic_cnc_side.png
new file mode 100644
index 0000000..1ecbbac
--- /dev/null
+++ b/technic/textures/technic_cnc_side.png
Binary files differ
diff --git a/technic/textures/technic_cnc_slope.png b/technic/textures/technic_cnc_slope.png
new file mode 100644
index 0000000..083ae18
--- /dev/null
+++ b/technic/textures/technic_cnc_slope.png
Binary files differ
diff --git a/technic/textures/technic_cnc_slope_edge.png b/technic/textures/technic_cnc_slope_edge.png
new file mode 100644
index 0000000..785adf6
--- /dev/null
+++ b/technic/textures/technic_cnc_slope_edge.png
Binary files differ
diff --git a/technic/textures/technic_cnc_slope_edge_upsdwn.png b/technic/textures/technic_cnc_slope_edge_upsdwn.png
new file mode 100644
index 0000000..5adb788
--- /dev/null
+++ b/technic/textures/technic_cnc_slope_edge_upsdwn.png
Binary files differ
diff --git a/technic/textures/technic_cnc_slope_inner_edge.png b/technic/textures/technic_cnc_slope_inner_edge.png
new file mode 100644
index 0000000..906dd25
--- /dev/null
+++ b/technic/textures/technic_cnc_slope_inner_edge.png
Binary files differ
diff --git a/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png b/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png
new file mode 100644
index 0000000..0ae0e14
--- /dev/null
+++ b/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png
Binary files differ
diff --git a/technic/textures/technic_cnc_slope_lying.png b/technic/textures/technic_cnc_slope_lying.png
new file mode 100644
index 0000000..377769a
--- /dev/null
+++ b/technic/textures/technic_cnc_slope_lying.png
Binary files differ
diff --git a/technic/textures/technic_cnc_slope_upsdwn.png b/technic/textures/technic_cnc_slope_upsdwn.png
new file mode 100644
index 0000000..b802b60
--- /dev/null
+++ b/technic/textures/technic_cnc_slope_upsdwn.png
Binary files differ
diff --git a/technic/textures/technic_cnc_sphere.png b/technic/textures/technic_cnc_sphere.png
new file mode 100644
index 0000000..69ada47
--- /dev/null
+++ b/technic/textures/technic_cnc_sphere.png
Binary files differ
diff --git a/technic/textures/technic_cnc_spike.png b/technic/textures/technic_cnc_spike.png
new file mode 100644
index 0000000..92e6e58
--- /dev/null
+++ b/technic/textures/technic_cnc_spike.png
Binary files differ
diff --git a/technic/textures/technic_cnc_stick.png b/technic/textures/technic_cnc_stick.png
new file mode 100644
index 0000000..8dfe408
--- /dev/null
+++ b/technic/textures/technic_cnc_stick.png
Binary files differ
diff --git a/technic/textures/technic_cnc_top.png b/technic/textures/technic_cnc_top.png
new file mode 100644
index 0000000..5123334
--- /dev/null
+++ b/technic/textures/technic_cnc_top.png
Binary files differ
diff --git a/technic/textures/technic_cnc_twocurvededge.png b/technic/textures/technic_cnc_twocurvededge.png
new file mode 100644
index 0000000..3219a90
--- /dev/null
+++ b/technic/textures/technic_cnc_twocurvededge.png
Binary files differ