-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
--- /dev/null
+-- 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
--- /dev/null
+-- 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")