Merge pull request #16 from kpoppel/master

Added CNC machine to technic mod. (noncubic goes technic)
This commit is contained in:
RealBadAngel 2013-05-07 07:12:42 -07:00
commit 3d715d0862
32 changed files with 1878 additions and 53 deletions

@ -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
}
timber_nodenames={"default:jungletree", "default:papyrus", "default:cactus", "default:tree"}
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
return charge_to_take
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
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
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
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

300
technic/cnc.lua Normal file

@ -0,0 +1,300 @@
-- Technic CNC v1.0 by kpo
-- Based on the NonCubic Blocks MOD v1.4 by yves_de_beck
local shape = {}
local onesize_products = {
slope = 2,
slope_edge = 1,
slope_inner_edge = 1,
pyramid = 2,
spike = 1,
cylinder = 2,
sphere = 1,
stick = 8,
slope_upsdown = 2,
slope_edge_upsdown = 1,
slope_inner_edge_upsdown = 1,
cylinder_horizontal = 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,
}
--cnc_recipes ={}
--registered_cnc_recipes_count=1
--
--function register_cnc_recipe (string1,string2)
-- cnc_recipes[registered_cnc_recipes_count]={}
-- cnc_recipes[registered_cnc_recipes_count].src_name=string1
-- cnc_recipes[registered_cnc_recipes_count].dst_name=string2
-- registered_cnc_recipes_count=registered_cnc_recipes_count+1
-- if unified_inventory then
-- unified_inventory.register_craft({
-- type = "cnc milling",
-- output = string2,
-- items = {string1},
-- width = 0,
-- })
-- end
--end
local cnc_formspec =
"invsize[9,11;]"..
"label[1,0;Choose Milling Program:]"..
"image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]"..
"image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]"..
"image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]"..
"image_button[4,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]"..
"image_button[5,0.5;1,1;technic_cnc_spike.png;spike; ]"..
"image_button[6,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]"..
"image_button[7,0.5;1,1;technic_cnc_sphere.png;sphere; ]"..
"image_button[8,0.5;1,1;technic_cnc_stick.png;stick; ]"..
"image_button[1,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdown; ]"..
"image_button[2,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]"..
"image_button[3,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]"..
"image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]"..
"image_button[1,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]"..
"image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]"..
"image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]"..
"label[1,3.5;Slim Elements half / normal height:]"..
"image_button[1,4;1,0.5;technic_cnc_full.png;full; ]"..
"image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]"..
"image_button[2,4;1,1;technic_cnc_element_straight.png;element_straight; ]"..
"image_button[3,4;1,1;technic_cnc_element_end.png;element_end; ]"..
"image_button[4,4;1,1;technic_cnc_element_cross.png;element_cross; ]"..
"image_button[5,4;1,1;technic_cnc_element_t.png;element_t; ]"..
"image_button[6,4;1,1;technic_cnc_element_edge.png;element_edge; ]"..
"label[0, 5.5;In:]"..
"list[current_name;src;0.5,5.5;1,1;]"..
"label[4, 5.5;Out:]"..
"list[current_name;dst;5,5.5;4,1;]"..
"list[current_player;main;0,7;8,4;]"
local cnc_power_formspec=
"label[0,3;Power]"..
"image[0,1;1,2;technic_power_meter_bg.png]"
local size = 1;
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 = {cracky=2},
legacy_facedir_simple = true,
technic_power_machine=1,
internal_EU_buffer=0;
internal_EU_buffer_size=5000;
cnc_time = 0;
src_time = 0; -- fixme
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("infotext", "CNC machine")
meta:set_float("technic_power_machine", 1)
meta:set_float("internal_EU_buffer", 0)
meta:set_float("internal_EU_buffer_size", 5000)
meta:set_string("formspec", cnc_formspec..cnc_power_formspec)
meta:set_float("cnc_time", 0)
local inv = meta:get_inventory()
inv:set_size("src", 1)
inv:set_size("dst", 4)
meta:set_string("formspec", cnc_formspec)
meta:set_string("infotext", "CNC Milling Machine")
end,
can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory()
if not inv:is_empty("src") or not inv:is_empty("dst") 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_receive_fields = function(pos, formname, fields, sender)
-- REGISTER MILLING PROGRAMS AND OUTPUTS:
------------------------------------------
-- Program for half/full size
if fields["full"] then
size = 1
return
end
if fields["half"] then
size = 2
return
end
-- Resolve the node name and the number of items to make
local meta = minetest.env:get_meta(pos)
local inv = meta:get_inventory()
local inputstack = inv:get_stack("src", 1)
local inputname = inputstack:get_name()
local multiplier = 0
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
meta:set_float( "cnc_multiplier", multiplier)
meta:set_string("cnc_user", sender:get_player_name())
end
if onesize_products[k] ~= nil or (twosize_products[k] ~= nil and size==2) then
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k)
break
end
if twosize_products[k] ~= nil and size==1 then
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k .. "_double")
break
end
end
return
end, -- callback function
})
minetest.register_node("technic:cnc_active", {
description = "CNC 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_active.png"},
paramtype2 = "facedir",
groups = {cracky=2,not_in_creative_inventory=1},
legacy_facedir_simple = true,
can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory()
if not inv:is_empty("src") or not inv:is_empty("dst") 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,
})
minetest.register_abm(
{
nodenames = {"technic:cnc","technic:cnc_active"},
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local meta = minetest.env:get_meta(pos)
local charge= meta:get_float("internal_EU_buffer")
local max_charge= meta:get_float("internal_EU_buffer_size")
local cnc_cost=350
local load = math.floor((charge/max_charge)*100)
meta:set_string("formspec", cnc_formspec..
"image[0,1;1,2;technic_power_meter_bg.png^[lowpart:"..
(load)..":technic_power_meter_fg.png]"
)
local inv = meta:get_inventory()
local srclist = inv:get_list("src")
if inv:is_empty("src") then
meta:set_float("cnc_on",0)
meta:set_string("cnc_product", "") -- Reset the program
end
if (meta:get_float("cnc_on") == 1) then
if charge>=cnc_cost then
charge=charge-cnc_cost;
meta:set_float("internal_EU_buffer",charge)
meta:set_float("src_time", meta:get_float("src_time") + 1)
if meta:get_float("src_time") >= meta:get_float("cnc_time") then
local product = meta:get_string("cnc_product")
if inv:room_for_item("dst",product) then
-- CNC does the transformation
------------------------------
if minetest.registered_nodes[product] ~= nil then
inv:add_item("dst",product .. " " .. meta:get_float("cnc_multiplier"))
srcstack = inv:get_stack("src", 1)
srcstack:take_item()
inv:set_stack("src",1,srcstack)
if inv:is_empty("src") then
meta:set_float("cnc_on",0)
meta:set_string("cnc_product", "") -- Reset the program
-- print("cnc product reset")
end
else
minetest.chat_send_player(meta:get_string("cnc_user"), "CNC machine does not know how to handle this material. Please remove it.");
end
else
minetest.chat_send_player(meta:get_string("cnc_user"), "CNC inventory full!")
end
meta:set_float("src_time", 0)
end
end
end
if (meta:get_float("cnc_on")==0) then
if not inv:is_empty("src") then
local product = meta:get_string("cnc_product")
if minetest.registered_nodes[product] ~= nil then
meta:set_float("cnc_on",1)
hacky_swap_node(pos,"technic:cnc_active")
meta:set_string("infotext", "CNC Machine Active")
cnc_time=3
meta:set_float("cnc_time",cnc_time)
meta:set_float("src_time", 0)
return
end
else
hacky_swap_node(pos,"technic:cnc")
meta:set_string("infotext", "CNC Machine Inactive")
end
end
end
})
register_LV_machine ("technic:cnc","RE")
register_LV_machine ("technic:cnc_active","RE")
-------------------------
-- CNC 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'},
},
})
-------------------------

970
technic/cnc_api.lua Normal file

@ -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_edge_upsdown(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_edge_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 = slopeupdwnboxedge,
},
groups = groups,
})
end
-- SLOPE INNER EDGE UPSIDE DOWN
-------------------------------
function technic_cnc_api.register_slope_inner_edge_upsdown(recipeitem, groups, images, description)
if recipename == "default:dirt" then
return
end
minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_inner_edge_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 = {
{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_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_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge)
technic_cnc_api.register_slope_inner_edge_upsdown(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

354
technic/cnc_nodes.lua Normal file

@ -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")

@ -27,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")

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B