diff options
| author | kpoppel <poulsen.kim@gmail.com> | 2013-05-06 20:00:00 +0200 | 
|---|---|---|
| committer | kpoppel <poulsen.kim@gmail.com> | 2013-05-06 20:00:00 +0200 | 
| commit | 6463b77e60639f4012b702fef344cc7e201d3e3a (patch) | |
| tree | 98e00079a261cc3a2c61e32d8a0718ba21c85bff | |
| parent | 895ee322d26727cdf680942d82566b2df83c9368 (diff) | |
Add milling machine from non cubic to technic mod.
Next step is to make sure it only works if powered.
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.pngBinary files differ new file mode 100644 index 0000000..e600cb1 --- /dev/null +++ b/technic/textures/technic_cnc_bottom.png diff --git a/technic/textures/technic_cnc_cylinder.png b/technic/textures/technic_cnc_cylinder.pngBinary files differ new file mode 100644 index 0000000..06da024 --- /dev/null +++ b/technic/textures/technic_cnc_cylinder.png diff --git a/technic/textures/technic_cnc_cylinder_horizontal.png b/technic/textures/technic_cnc_cylinder_horizontal.pngBinary files differ new file mode 100644 index 0000000..670ecf2 --- /dev/null +++ b/technic/textures/technic_cnc_cylinder_horizontal.png diff --git a/technic/textures/technic_cnc_element_cross.png b/technic/textures/technic_cnc_element_cross.pngBinary files differ new file mode 100644 index 0000000..f2ad0b7 --- /dev/null +++ b/technic/textures/technic_cnc_element_cross.png diff --git a/technic/textures/technic_cnc_element_edge.png b/technic/textures/technic_cnc_element_edge.pngBinary files differ new file mode 100644 index 0000000..e6104cf --- /dev/null +++ b/technic/textures/technic_cnc_element_edge.png diff --git a/technic/textures/technic_cnc_element_end.png b/technic/textures/technic_cnc_element_end.pngBinary files differ new file mode 100644 index 0000000..6bc6837 --- /dev/null +++ b/technic/textures/technic_cnc_element_end.png diff --git a/technic/textures/technic_cnc_element_straight.png b/technic/textures/technic_cnc_element_straight.pngBinary files differ new file mode 100644 index 0000000..1648b7b --- /dev/null +++ b/technic/textures/technic_cnc_element_straight.png diff --git a/technic/textures/technic_cnc_element_t.png b/technic/textures/technic_cnc_element_t.pngBinary files differ new file mode 100644 index 0000000..0d49cd8 --- /dev/null +++ b/technic/textures/technic_cnc_element_t.png diff --git a/technic/textures/technic_cnc_front.png b/technic/textures/technic_cnc_front.pngBinary files differ new file mode 100644 index 0000000..6cc0490 --- /dev/null +++ b/technic/textures/technic_cnc_front.png diff --git a/technic/textures/technic_cnc_full.png b/technic/textures/technic_cnc_full.pngBinary files differ new file mode 100644 index 0000000..d551a45 --- /dev/null +++ b/technic/textures/technic_cnc_full.png diff --git a/technic/textures/technic_cnc_half.png b/technic/textures/technic_cnc_half.pngBinary files differ new file mode 100644 index 0000000..51ebcd7 --- /dev/null +++ b/technic/textures/technic_cnc_half.png diff --git a/technic/textures/technic_cnc_milling_background.png b/technic/textures/technic_cnc_milling_background.pngBinary files differ new file mode 100644 index 0000000..6a9c2f4 --- /dev/null +++ b/technic/textures/technic_cnc_milling_background.png diff --git a/technic/textures/technic_cnc_onecurvededge.png b/technic/textures/technic_cnc_onecurvededge.pngBinary files differ new file mode 100644 index 0000000..46779fd --- /dev/null +++ b/technic/textures/technic_cnc_onecurvededge.png diff --git a/technic/textures/technic_cnc_pyramid.png b/technic/textures/technic_cnc_pyramid.pngBinary files differ new file mode 100644 index 0000000..5dc3322 --- /dev/null +++ b/technic/textures/technic_cnc_pyramid.png diff --git a/technic/textures/technic_cnc_side.png b/technic/textures/technic_cnc_side.pngBinary files differ new file mode 100644 index 0000000..1ecbbac --- /dev/null +++ b/technic/textures/technic_cnc_side.png diff --git a/technic/textures/technic_cnc_slope.png b/technic/textures/technic_cnc_slope.pngBinary files differ new file mode 100644 index 0000000..083ae18 --- /dev/null +++ b/technic/textures/technic_cnc_slope.png diff --git a/technic/textures/technic_cnc_slope_edge.png b/technic/textures/technic_cnc_slope_edge.pngBinary files differ new file mode 100644 index 0000000..785adf6 --- /dev/null +++ b/technic/textures/technic_cnc_slope_edge.png diff --git a/technic/textures/technic_cnc_slope_edge_upsdwn.png b/technic/textures/technic_cnc_slope_edge_upsdwn.pngBinary files differ new file mode 100644 index 0000000..5adb788 --- /dev/null +++ b/technic/textures/technic_cnc_slope_edge_upsdwn.png diff --git a/technic/textures/technic_cnc_slope_inner_edge.png b/technic/textures/technic_cnc_slope_inner_edge.pngBinary files differ new file mode 100644 index 0000000..906dd25 --- /dev/null +++ b/technic/textures/technic_cnc_slope_inner_edge.png diff --git a/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png b/technic/textures/technic_cnc_slope_inner_edge_upsdwn.pngBinary files differ new file mode 100644 index 0000000..0ae0e14 --- /dev/null +++ b/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png diff --git a/technic/textures/technic_cnc_slope_lying.png b/technic/textures/technic_cnc_slope_lying.pngBinary files differ new file mode 100644 index 0000000..377769a --- /dev/null +++ b/technic/textures/technic_cnc_slope_lying.png diff --git a/technic/textures/technic_cnc_slope_upsdwn.png b/technic/textures/technic_cnc_slope_upsdwn.pngBinary files differ new file mode 100644 index 0000000..b802b60 --- /dev/null +++ b/technic/textures/technic_cnc_slope_upsdwn.png diff --git a/technic/textures/technic_cnc_sphere.png b/technic/textures/technic_cnc_sphere.pngBinary files differ new file mode 100644 index 0000000..69ada47 --- /dev/null +++ b/technic/textures/technic_cnc_sphere.png diff --git a/technic/textures/technic_cnc_spike.png b/technic/textures/technic_cnc_spike.pngBinary files differ new file mode 100644 index 0000000..92e6e58 --- /dev/null +++ b/technic/textures/technic_cnc_spike.png diff --git a/technic/textures/technic_cnc_stick.png b/technic/textures/technic_cnc_stick.pngBinary files differ new file mode 100644 index 0000000..8dfe408 --- /dev/null +++ b/technic/textures/technic_cnc_stick.png diff --git a/technic/textures/technic_cnc_top.png b/technic/textures/technic_cnc_top.pngBinary files differ new file mode 100644 index 0000000..5123334 --- /dev/null +++ b/technic/textures/technic_cnc_top.png diff --git a/technic/textures/technic_cnc_twocurvededge.png b/technic/textures/technic_cnc_twocurvededge.pngBinary files differ new file mode 100644 index 0000000..3219a90 --- /dev/null +++ b/technic/textures/technic_cnc_twocurvededge.png | 
