10 Commits

Author SHA1 Message Date
18df2813a0 Comment print statements in battery_box.lua (#650) 2024-09-06 19:10:04 +02:00
221fc1376e technic_cnc: use programs definition to generate formspec (#647)
This deprecates the variables onesize_products and twosize_products by using a shared definition table.
With these changes, it should be easier to add new programs in the future.

New feature: Tooltips are added to all programs. (only applies to newly placed nodes)
2024-08-10 10:50:51 +02:00
9f373d6528 technic_cnc: Add group 'cracky'
Fixes a regression from ba2bdf836 where stone-like nodes could no longer be dug.
New sanity check to avoid such issues in the future.
2024-08-03 08:25:13 +02:00
6731db14e5 Add compressor recipes for nether racks (#644) 2024-07-07 18:53:15 +02:00
a9079c49e0 Expose technic.get/set_charge functions (#645) 2024-07-07 18:45:03 +02:00
f80372a0f8 Frames: Fix error in node placement callback execution 2024-05-18 18:05:44 +02:00
80dee96dbe Add grinding recipe for nether lump + refactor grinder recipes (#638)
Maintenance:

* Sort dependency-based entries alphabetically
* Refactor dust registration

Features:

* Add grinding recipe for nether lump and ingot + image for nether dust
2024-05-06 17:33:22 +02:00
d65c4aadd2 Add grinder crafting recipe from everness desert stone (#637)
Add two alternative grinder crafting recipes with the two everness desert stones
2024-05-06 17:31:13 +02:00
98675a2ae9 Add compressor recipes for nether brick and lump (#639)
Another addition with nether, similar to the previous one, just this time for compressor.

Clears nether's default recipes for compressed nether brick and nether lump, using the compressor instead for these tasks.
2024-04-30 17:44:51 +02:00
ba2bdf8368 technic_cnc: Use client-side translation API (#636) 2024-04-28 18:41:52 +02:00
18 changed files with 537 additions and 476 deletions

View File

@ -160,6 +160,11 @@ Unsorted functions:
* If `technic.power_tools[itemstack:get_name()]` is `nil` (or `false`), this * If `technic.power_tools[itemstack:get_name()]` is `nil` (or `false`), this
function does nothing, else that value is the maximum charge. function does nothing, else that value is the maximum charge.
* The itemstack metadata is changed to contain the charge. * The itemstack metadata is changed to contain the charge.
* `technic.get_charge(itemstack)`
* Returns the charge and max charge of the given itemstack.
* If the itemstack is not an RE chargeable item, both return values will be zero.
* `technic.set_charge(itemstack, charge)`
* Modifies the charge of the given itemstack.
### Node-specific ### Node-specific
* `technic.get_or_load_node(pos)` * `technic.get_or_load_node(pos)`

View File

@ -9,5 +9,25 @@ minetest.register_craft({
} }
}) })
if (minetest.get_modpath('everness')) then
minetest.register_craft({
output = 'technic:lv_grinder',
recipe = {
{'everness:coral_desert_stone', 'default:diamond', 'everness:coral_desert_stone'},
{'everness:coral_desert_stone', 'technic:machine_casing', 'everness:coral_desert_stone'},
{'technic:granite', 'technic:lv_cable', 'technic:granite'},
}
})
minetest.register_craft({
output = 'technic:lv_grinder',
recipe = {
{'everness:forsaken_desert_stone', 'default:diamond', 'everness:forsaken_desert_stone'},
{'everness:forsaken_desert_stone', 'technic:machine_casing', 'everness:forsaken_desert_stone'},
{'technic:granite', 'technic:lv_cable', 'technic:granite'},
}
})
end
technic.register_grinder({tier="LV", demand={200}, speed=1}) technic.register_grinder({tier="LV", demand={200}, speed=1})

View File

@ -324,6 +324,7 @@ for zp = 0, 1 do
on_rightclick = function(pos, node, placer, itemstack, pointed_thing) on_rightclick = function(pos, node, placer, itemstack, pointed_thing)
if is_supported_node(itemstack:get_name()) then if is_supported_node(itemstack:get_name()) then
-- Stripped down version of "core.item_place_node"
if minetest.is_protected(pos, placer:get_player_name()) then if minetest.is_protected(pos, placer:get_player_name()) then
minetest.log("action", placer:get_player_name() minetest.log("action", placer:get_player_name()
.. " tried to place " .. itemstack:get_name() .. " tried to place " .. itemstack:get_name()
@ -347,8 +348,7 @@ for zp = 0, 1 do
end end
-- Run script hook -- Run script hook
local callback = nil for _, callback in ipairs(minetest.registered_on_placenodes) do
for _, _ in ipairs(minetest.registered_on_placenodes) do
-- Copy pos and node because callback can modify them -- Copy pos and node because callback can modify them
local pos_copy = { x = pos.x, y = pos.y, z = pos.z } local pos_copy = { x = pos.x, y = pos.y, z = pos.z }
local newnode_copy = { name = def.name, param1 = 0, param2 = 0 } local newnode_copy = { name = def.name, param1 = 0, param2 = 0 }

View File

@ -92,7 +92,7 @@ local dirtab = {
local tube = { local tube = {
insert_object = function(pos, node, stack, direction) insert_object = function(pos, node, stack, direction)
print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) --print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2)
if direction.y == 1 if direction.y == 1
or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then
return stack return stack
@ -106,7 +106,7 @@ local tube = {
end end
end, end,
can_insert = function(pos, node, stack, direction) can_insert = function(pos, node, stack, direction)
print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) --print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2)
if direction.y == 1 if direction.y == 1
or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then
return false return false
@ -409,7 +409,7 @@ minetest.register_on_player_receive_fields(
end end
) )
local function default_get_charge(itemstack) function technic.get_charge(itemstack)
-- check if is chargable -- check if is chargable
local tool_name = itemstack:get_name() local tool_name = itemstack:get_name()
if not technic.power_tools[tool_name] then if not technic.power_tools[tool_name] then
@ -419,7 +419,7 @@ local function default_get_charge(itemstack)
return item_meta:get_int("technic:charge"), technic.power_tools[tool_name] return item_meta:get_int("technic:charge"), technic.power_tools[tool_name]
end end
local function default_set_charge(itemstack, charge) function technic.set_charge(itemstack, charge)
local tool_name = itemstack:get_name() local tool_name = itemstack:get_name()
if technic.power_tools[tool_name] then if technic.power_tools[tool_name] then
technic.set_RE_wear(itemstack, charge, technic.power_tools[tool_name]) technic.set_RE_wear(itemstack, charge, technic.power_tools[tool_name])
@ -437,8 +437,8 @@ function technic.charge_tools(meta, batt_charge, charge_step)
-- get callbacks -- get callbacks
local src_def = src_stack:get_definition() local src_def = src_stack:get_definition()
local technic_get_charge = src_def.technic_get_charge or default_get_charge local technic_get_charge = src_def.technic_get_charge or technic.get_charge
local technic_set_charge = src_def.technic_set_charge or default_set_charge local technic_set_charge = src_def.technic_set_charge or technic.set_charge
-- get tool charge -- get tool charge
local tool_charge, item_max_charge = technic_get_charge(src_stack) local tool_charge, item_max_charge = technic_get_charge(src_stack)
@ -471,8 +471,8 @@ function technic.discharge_tools(meta, batt_charge, charge_step, max_charge)
-- get callbacks -- get callbacks
local src_def = src_stack:get_definition() local src_def = src_stack:get_definition()
local technic_get_charge = src_def.technic_get_charge or default_get_charge local technic_get_charge = src_def.technic_get_charge or technic.get_charge
local technic_set_charge = src_def.technic_set_charge or default_set_charge local technic_set_charge = src_def.technic_set_charge or technic.set_charge
-- get tool charge -- get tool charge
local tool_charge, item_max_charge = technic_get_charge(src_stack) local tool_charge, item_max_charge = technic_get_charge(src_stack)

View File

@ -8,6 +8,71 @@ function technic.register_compressor_recipe(data)
technic.register_recipe("compressing", data) technic.register_recipe("compressing", data)
end end
-- Defuse the default recipes, since we have
-- the compressor to take over in a more realistic manner.
local crafts_to_clear = {
"default:desert_sand",
"default:sand",
"default:silver_sand",
}
local dependent_crafts_to_clear = {
everness = {
"everness:coral_sand",
"everness:coral_forest_deep_ocean_sand",
"everness:coral_white_sand",
"everness:crystal_sand",
"everness:cursed_sand",
"everness:cursed_lands_deep_ocean_sand",
"everness:crystal_forest_deep_ocean_sand",
"everness:mineral_sand",
},
nether = {
"nether:brick",
"nether:brick_compressed",
"nether:rack",
"nether:rack_deep",
},
}
-- Add dependent recipes to main collection of
-- recipes to be cleared if their mods are used.
for dependency, crafts in pairs(dependent_crafts_to_clear) do
if minetest.get_modpath(dependency) then
for _, craft_entry in ipairs(crafts) do
table.insert(crafts_to_clear, craft_entry)
end
end
end
-- Clear recipes
for _, craft_name in ipairs(crafts_to_clear) do
-- Regular bricks are 2x2 shaped, nether bricks are 3x3 shaped (irregular)
local is_regular = string.sub(craft_name, 1, 12) ~= "nether:brick"
local shaped_recipe
if is_regular then
shaped_recipe = {
{craft_name, craft_name},
{craft_name, craft_name},
}
else
shaped_recipe = {
{craft_name, craft_name, craft_name},
{craft_name, craft_name, craft_name},
{craft_name, craft_name, craft_name},
}
end
minetest.clear_craft({
type = "shaped",
recipe = shaped_recipe,
})
end
--
-- Compile compressor recipes
--
local recipes = { local recipes = {
{"default:snowblock", "default:ice"}, {"default:snowblock", "default:ice"},
{"default:sand 2", "default:sandstone"}, {"default:sand 2", "default:sandstone"},
@ -21,8 +86,8 @@ local recipes = {
{"technic:uranium35_ingot 5", "technic:uranium_fuel"}, {"technic:uranium35_ingot 5", "technic:uranium_fuel"},
} }
if minetest.get_modpath("everness") then local dependent_recipes = {
local everness_sand_to_sandstone_recipes = { everness = {
{"everness:coral_deep_ocean_sand 2", "everness:coral_deep_ocean_sandstone_block"}, {"everness:coral_deep_ocean_sand 2", "everness:coral_deep_ocean_sandstone_block"},
{"everness:coral_sand 2", "everness:coral_sandstone"}, {"everness:coral_sand 2", "everness:coral_sandstone"},
{"everness:coral_white_sand 2", "everness:coral_white_sandstone"}, {"everness:coral_white_sand 2", "everness:coral_white_sandstone"},
@ -31,47 +96,26 @@ if minetest.get_modpath("everness") then
{"everness:cursed_lands_deep_ocean_sand 2", "everness:cursed_lands_deep_ocean_sandstone_block"}, {"everness:cursed_lands_deep_ocean_sand 2", "everness:cursed_lands_deep_ocean_sandstone_block"},
{"everness:cursed_sand 2", "everness:cursed_sandstone_block"}, {"everness:cursed_sand 2", "everness:cursed_sandstone_block"},
{"everness:mineral_sand 2", "everness:mineral_sandstone"}, {"everness:mineral_sand 2", "everness:mineral_sandstone"},
} },
nether = {
for _, data in ipairs(everness_sand_to_sandstone_recipes) do {"nether:brick 9", "nether:brick_compressed"},
table.insert(recipes, {data[1], data[2]}) {"nether:brick_compressed 9", "nether:nether_lump"},
end {"nether:rack", "nether:brick",},
end {"nether:rack_deep", "nether:brick_deep"},
},
-- defuse the default sandstone recipe, since we have the compressor to take over in a more realistic manner
local crafts_to_clear = {
"default:desert_sand",
"default:sand",
"default:silver_sand"
} }
if minetest.get_modpath("everness") then -- Add dependent recipes to main recipe collection
local everness_crafts_to_clear = { -- if their mods are used.
"everness:coral_sand", for dependency, recipes_to_add in pairs(dependent_recipes) do
"everness:coral_forest_deep_ocean_sand", if minetest.get_modpath(dependency) then
"everness:coral_white_sand", for _, recipe_entry in ipairs(recipes_to_add) do
"everness:crystal_sand", table.insert(recipes, recipe_entry)
"everness:cursed_sand", end
"everness:cursed_lands_deep_ocean_sand",
"everness:crystal_forest_deep_ocean_sand",
"everness:mineral_sand",
}
for _, sand_name in ipairs(everness_crafts_to_clear) do
table.insert(crafts_to_clear, sand_name)
end end
end end
for _, sand_name in ipairs(crafts_to_clear) do -- Register compressor recipes
minetest.clear_craft({
type = "shaped",
recipe = {
{sand_name, sand_name},
{sand_name, sand_name},
},
})
end
for _, data in pairs(recipes) do for _, data in pairs(recipes) do
technic.register_compressor_recipe({input = {data[1]}, output = data[2]}) technic.register_compressor_recipe({input = {data[1]}, output = data[2]})
end end

View File

@ -36,73 +36,73 @@ local recipes = {
{"default:ice", "default:snowblock"}, {"default:ice", "default:snowblock"},
} }
if minetest.get_modpath("everness") then local dependent_recipes = {
table.insert(recipes, {"everness:coral_deep_ocean_sandstone_block", "everness:coral_deep_ocean_sand 2"}) -- Sandstones
table.insert(recipes, {"everness:coral_sandstone", "everness:coral_sand 2"}) everness = {
table.insert(recipes, {"everness:coral_white_sandstone", "everness:coral_white_sand 2"}) {"everness:coral_deep_ocean_sandstone_block", "everness:coral_deep_ocean_sand 2"},
table.insert(recipes, {"everness:crystal_forest_deep_ocean_sandstone_block", "everness:crystal_forest_deep_ocean_sand 2"}) {"everness:coral_sandstone", "everness:coral_sand 2"},
table.insert(recipes, {"everness:crystal_sandstone", "everness:crystal_sand 2"}) {"everness:coral_white_sandstone", "everness:coral_white_sand 2"},
table.insert(recipes, {"everness:cursed_lands_deep_ocean_sandstone_block", "everness:cursed_lands_deep_ocean_sand 2"}) {"everness:crystal_forest_deep_ocean_sandstone_block", "everness:crystal_forest_deep_ocean_sand 2"},
table.insert(recipes, {"everness:cursed_sandstone_block", "everness:cursed_sand 2"}) {"everness:crystal_sandstone", "everness:crystal_sand 2"},
table.insert(recipes, {"everness:mineral_sandstone", "everness:mineral_sand 2"}) {"everness:cursed_lands_deep_ocean_sandstone_block", "everness:cursed_lands_deep_ocean_sand 2"},
{"everness:cursed_sandstone_block", "everness:cursed_sand 2"},
{"everness:mineral_sandstone", "everness:mineral_sand 2"},
-- Lumps and wheat
{"everness:pyrite_lump", "technic:pyrite_dust 2"},
},
farming = {
{"farming:seed_wheat", "farming:flour 1"},
},
gloopores = {
{"gloopores:alatro_lump", "technic:alatro_dust 2"},
{"gloopores:kalite_lump", "technic:kalite_dust 2"},
{"gloopores:arol_lump", "technic:arol_dust 2"},
{"gloopores:talinite_lump", "technic:talinite_dust 2"},
{"gloopores:akalin_lump", "technic:akalin_dust 2"},
},
homedecor = {
{"home_decor:brass_ingot", "technic:brass_dust 1"},
},
moreores = {
{"moreores:mithril_lump", "technic:mithril_dust 2"},
{"moreores:silver_lump", "technic:silver_dust 2"},
},
nether = {
{"nether:nether_lump", "technic:nether_dust 2"},
},
}
for dependency, materials_to_add in pairs(dependent_recipes) do
if minetest.get_modpath(dependency) then
for _, material_entry in ipairs(materials_to_add) do
table.insert(recipes, material_entry)
end
end
end end
-- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe) -- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe)
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"default:sandstone"}},
{"default:sandstone"}
},
}) })
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"default:desert_sandstone"}},
{"default:desert_sandstone"}
},
}) })
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"default:silver_sandstone"}},
{"default:silver_sandstone"}
},
}) })
if minetest.get_modpath("everness") then if minetest.get_modpath("everness") then
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"everness:mineral_sandstone"}},
{"everness:mineral_sandstone"}
},
}) })
-- Currently (2024-03-09), there seem to be no reverse recipes for any of the other everness sandstones. -- Currently (2024-03-09), there seem to be no reverse recipes for any of the other everness sandstones.
end end
if minetest.get_modpath("farming") then for _, data in ipairs(recipes) do
table.insert(recipes, {"farming:seed_wheat", "farming:flour 1"})
end
if minetest.get_modpath("moreores") then
table.insert(recipes, {"moreores:mithril_lump", "technic:mithril_dust 2"})
table.insert(recipes, {"moreores:silver_lump", "technic:silver_dust 2"})
end
if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then
table.insert(recipes, {"gloopores:alatro_lump", "technic:alatro_dust 2"})
table.insert(recipes, {"gloopores:kalite_lump", "technic:kalite_dust 2"})
table.insert(recipes, {"gloopores:arol_lump", "technic:arol_dust 2"})
table.insert(recipes, {"gloopores:talinite_lump", "technic:talinite_dust 2"})
table.insert(recipes, {"gloopores:akalin_lump", "technic:akalin_dust 2"})
end
if minetest.get_modpath("homedecor") then
table.insert(recipes, {"home_decor:brass_ingot", "technic:brass_dust 1"})
end
if minetest.get_modpath("everness") then
table.insert(recipes, {"everness:pyrite_lump", "technic:pyrite_dust 2"})
end
for _, data in pairs(recipes) do
technic.register_grinder_recipe({input = {data[1]}, output = data[2]}) technic.register_grinder_recipe({input = {data[1]}, output = data[2]})
end end
-- dusts -- Dusts
local function register_dust(name, ingot) local function register_dust(name, ingot)
local lname = string.lower(name) local lname = string.lower(name)
lname = string.gsub(lname, ' ', '_') lname = string.gsub(lname, ' ', '_')
@ -120,36 +120,57 @@ local function register_dust(name, ingot)
end end
end end
-- Sorted alphibeticaly -- Sorted alphabetically
register_dust("Brass", "basic_materials:brass_ingot") local dusts = {
register_dust("Bronze", "default:bronze_ingot") {"Brass", "basic_materials:brass_ingot"},
register_dust("Carbon Steel", "technic:carbon_steel_ingot") {"Bronze", "default:bronze_ingot"},
register_dust("Cast Iron", "technic:cast_iron_ingot") {"Carbon Steel", "technic:carbon_steel_ingot"},
register_dust("Chernobylite", "technic:chernobylite_block") {"Cast Iron", "technic:cast_iron_ingot"},
register_dust("Chromium", "technic:chromium_ingot") {"Chernobylite", "technic:chernobylite_block"},
register_dust("Coal", nil) {"Chromium", "technic:chromium_ingot"},
register_dust("Copper", "default:copper_ingot") {"Coal", nil},
register_dust("Lead", "technic:lead_ingot") {"Copper", "default:copper_ingot"},
register_dust("Gold", "default:gold_ingot") {"Lead", "technic:lead_ingot"},
register_dust("Mithril", "moreores:mithril_ingot") {"Gold", "default:gold_ingot"},
register_dust("Silver", "moreores:silver_ingot") {"Mithril", "moreores:mithril_ingot"},
register_dust("Stainless Steel", "technic:stainless_steel_ingot") {"Silver", "moreores:silver_ingot"},
register_dust("Stone", "default:stone") {"Stainless Steel", "technic:stainless_steel_ingot"},
register_dust("Sulfur", nil) {"Stone", "default:stone"},
register_dust("Tin", "default:tin_ingot") {"Sulfur", nil},
register_dust("Wrought Iron", "technic:wrought_iron_ingot") {"Tin", "default:tin_ingot"},
register_dust("Zinc", "technic:zinc_ingot") {"Wrought Iron", "technic:wrought_iron_ingot"},
if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then {"Zinc", "technic:zinc_ingot"},
register_dust("Akalin", "glooptest:akalin_ingot") }
register_dust("Alatro", "glooptest:alatro_ingot")
register_dust("Arol", "glooptest:arol_ingot") local dependent_dusts = {
register_dust("Kalite", nil) everness = {
register_dust("Talinite", "glooptest:talinite_ingot") {"Pyrite", "everness:pyrite_ingot"},
end },
if minetest.get_modpath("everness") then gloopores = {
register_dust("Pyrite", "everness:pyrite_ingot") {"Akalin", "glooptest:akalin_ingot"},
{"Alatro", "glooptest:alatro_ingot"},
{"Arol", "glooptest:arol_ingot"},
{"Kalite", nil},
{"Talinite", "glooptest:talinite_ingot"},
},
nether = {
{"Nether", "nether:nether_ingot"},
},
}
for dependency, dusts_to_add in pairs(dependent_dusts) do
if minetest.get_modpath(dependency) then
for _, dust_entry in pairs(dusts_to_add) do
table.insert(dusts, dust_entry)
end
end
end end
for _, data in ipairs(dusts) do
register_dust(data[1], data[2])
end
-- Uranium
for p = 0, 35 do for p = 0, 35 do
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
local psuffix = p == 7 and "" or p local psuffix = p == 7 and "" or p
@ -185,6 +206,7 @@ for pa = 0, 34 do
end end
end end
-- Fuels
minetest.register_craft({ minetest.register_craft({
type = "fuel", type = "fuel",
recipe = "technic:coal_dust", recipe = "technic:coal_dust",

View File

@ -1,3 +1,3 @@
name = technic name = technic
depends = default, pipeworks, technic_worldgen, basic_materials depends = default, pipeworks, technic_worldgen, basic_materials
optional_depends = bucket, screwdriver, mesecons, mesecons_mvps, digilines, digiline_remote, intllib, unified_inventory, vector_extras, dye, craftguide, i3, everness optional_depends = bucket, screwdriver, mesecons, mesecons_mvps, digilines, digiline_remote, intllib, unified_inventory, vector_extras, dye, craftguide, i3, everness, nether

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

View File

@ -29,7 +29,7 @@ if technic_cnc.use_technic then
allow_metadata_inventory_take = technic.machine_inventory_take allow_metadata_inventory_take = technic.machine_inventory_take
allow_metadata_inventory_move = technic.machine_inventory_move allow_metadata_inventory_move = technic.machine_inventory_move
can_dig = technic.machine_can_dig can_dig = technic.machine_can_dig
desc_tr = S("%s CNC Machine"):format("LV") desc_tr = S("@1 CNC Machine", S("LV"))
else else
minetest.register_craft({ minetest.register_craft({
output = 'technic:cnc', output = 'technic:cnc',
@ -72,74 +72,68 @@ else
end end
end end
local onesize_products = { local function add_buttons(do_variants, t, x, y)
slope = 2, local X_OFFSET = 1
slope_edge = 1, local BUTTONS_PER_ROW = 7
slope_inner_edge = 1,
pyramid = 2,
spike = 1,
cylinder = 2,
oblate_spheroid = 1,
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 = 2,
element_end = 2,
element_cross = 1,
element_t = 1,
element_edge = 2,
}
local cnc_formspec = -- ipairs: only iterate over continuous integers
"size[9,11;]".. for _, data in ipairs(technic_cnc.programs) do
"label[1,0;"..S("Choose Milling Program:").."]".. -- Never add full variants. Only add half variants when asked
"image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]".. if not data.half_counterpart and (do_variants == (data.full_counterpart ~= nil)) then
"image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]".. --print("add", data.suffix)
"image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]".. t[#t + 1] = ("image_button[%g,%g;1,1;%s.png;%s; ]"):format(
"image_button[4,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]".. x + X_OFFSET, y, data.suffix, data.short_name
"image_button[5,0.5;1,1;technic_cnc_spike.png;spike; ]".. )
"image_button[6,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]".. t[#t + 1] = ("tooltip[%s;%s]"):format(
"image_button[7,0.5;1,1;technic_cnc_oblate_spheroid.png;oblate_spheroid; ]".. data.short_name, minetest.formspec_escape(data.desc .. " (* " .. data.output .. ")")
"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; ]".. x = x + 1
"image_button[2,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]".. if x == BUTTONS_PER_ROW then
"image_button[3,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]".. x = 0
"image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]".. y = y + 1
"image_button[5,1.5;1,1;technic_cnc_sphere.png;sphere; ]".. end
end
end
end
"image_button[1,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]".. local function make_formspec()
"image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]".. local t = {
"image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]".. "size[9,11;]",
"label[1,0;"..S("Choose Milling Program:").."]",
}
add_buttons(false, t, 0, 0.5)
"label[1,3.5;"..S("Slim Elements half / normal height:").."]".. t[#t + 1] = (
"label[1,3.5;"..S("Slim Elements half / normal height:").."]"..
"image_button[1,4;1,0.5;technic_cnc_full.png;full; ]"..
"image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]"
)
add_buttons(true, t, 1, 4)
"image_button[1,4;1,0.5;technic_cnc_full.png;full; ]".. t[#t + 1] = (
"image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]".. "label[0, 5;"..S("In:").."]"..
"image_button[2,4;1,1;technic_cnc_element_straight.png;element_straight; ]".. "list[current_name;src;0.5,5.5;1,1;]"..
"image_button[3,4;1,1;technic_cnc_element_end.png;element_end; ]".. "label[4, 5;"..S("Out:").."]"..
"image_button[4,4;1,1;technic_cnc_element_cross.png;element_cross; ]".. "list[current_name;dst;5,5.5;4,1;]"..
"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;"..S("In:").."]".. "list[current_player;main;0,7;8,4;]"..
"list[current_name;src;0.5,5.5;1,1;]".. "listring[current_name;dst]"..
"label[4, 5.5;"..S("Out:").."]".. "listring[current_player;main]"..
"list[current_name;dst;5,5.5;4,1;]".. "listring[current_name;src]"..
"listring[current_player;main]"
)
return table.concat(t)
end
local cnc_formspec = nil
minetest.register_on_mods_loaded(function()
technic_cnc._populate_shortcuts()
cnc_formspec = make_formspec()
end)
"list[current_player;main;0,7;8,4;]"..
"listring[current_name;dst]"..
"listring[current_player;main]"..
"listring[current_name;src]"..
"listring[current_player;main]"
-- The form handler is declared here because we need it in both the inactive and active modes -- The form handler is declared here because we need it in both the inactive and active modes
-- in order to be able to change programs wile it is running. -- in order to be able to change programs wile it is running.
@ -168,27 +162,28 @@ local function form_handler(pos, formname, fields, sender)
for k, _ in pairs(fields) do for k, _ in pairs(fields) do
-- Set a multipier for the half/full size capable blocks -- Set a multipier for the half/full size capable blocks
local multiplier local program = technic_cnc.programs["technic_cnc_" .. k]
if twosize_products[k] ~= nil then if size == 1 and program and program.full_counterpart then
multiplier = size * twosize_products[k] program = technic_cnc.programs["technic_cnc_" .. k .. "_double"]
else
multiplier = onesize_products[k]
end end
if program then
local multiplier = program.output
local product = inputname .. "_" .. program.suffix
if onesize_products[k] ~= nil or twosize_products[k] ~= nil then
meta:set_float( "cnc_multiplier", multiplier) meta:set_float( "cnc_multiplier", multiplier)
meta:set_string("cnc_user", sender:get_player_name()) meta:set_string("cnc_user", sender:get_player_name())
end
if onesize_products[k] ~= nil or (twosize_products[k] ~= nil and size==2) then if program.half_counterpart then -- is full
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k) if size == 1 then
--print(inputname .. "_technic_cnc_" .. k) meta:set_string("cnc_product", product)
break --print(product, multiplier)
end end
break -- no larger sizes allowed
end
if twosize_products[k] ~= nil and size==1 then -- half for normal
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k .. "_double") meta:set_string("cnc_product", product)
--print(inputname .. "_technic_cnc_" .. k .. "_double") --print(product, multiplier)
break break
end end
end end
@ -221,7 +216,7 @@ local run = function(pos, node)
(not minetest.registered_nodes[result]) or (not minetest.registered_nodes[result]) or
(not inv:room_for_item("dst", result)) then (not inv:room_for_item("dst", result)) then
technic.swap_node(pos, machine_node) technic.swap_node(pos, machine_node)
meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_string("infotext", S("@1 Idle", machine_name))
meta:set_string("cnc_product", "") meta:set_string("cnc_product", "")
meta:set_int("LV_EU_demand", 0) meta:set_int("LV_EU_demand", 0)
return return
@ -229,14 +224,14 @@ local run = function(pos, node)
if eu_input < demand then if eu_input < demand then
technic.swap_node(pos, machine_node) technic.swap_node(pos, machine_node)
meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) meta:set_string("infotext", S("@1 Unpowered", machine_name))
elseif eu_input >= demand then elseif eu_input >= demand then
technic.swap_node(pos, machine_node.."_active") technic.swap_node(pos, machine_node.."_active")
meta:set_string("infotext", S("%s Active"):format(machine_name)) meta:set_string("infotext", S("@1 Active", machine_name))
meta:set_int("src_time", meta:get_int("src_time") + 1) meta:set_int("src_time", meta:get_int("src_time") + 1)
if meta:get_int("src_time") >= 3 then -- 3 ticks per output if meta:get_int("src_time") >= 3 then -- 3 ticks per output
meta:set_int("src_time", 0) meta:set_int("src_time", 0)
srcstack = inv:get_stack("src", 1) local srcstack = inv:get_stack("src", 1)
srcstack:take_item() srcstack:take_item()
inv:set_stack("src", 1, srcstack) inv:set_stack("src", 1, srcstack)
inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier")) inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier"))

View File

@ -8,16 +8,27 @@ local ALPHA_CLIP = minetest.features.use_texture_alpha_string_modes and "clip" o
------------------------------------------------------ ------------------------------------------------------
-- Define slope boxes for the various nodes -- Define slope boxes for the various nodes
--[[
Additional keys after registration:
programs[program.suffix] = program
Additional fields after registration:
program.short_name = (trimmed suffix)
program.full_counterpart = suffix (optional, for full/half variants)
program.half_counterpart = suffix (optional, for full/half variants)
]]
------------------------------------------- -------------------------------------------
technic_cnc.programs = { technic_cnc.programs = {
{ suffix = "technic_cnc_stick", { suffix = "technic_cnc_stick",
model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}, model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
desc = S("Stick") desc = S("Stick"),
output = 8
}, },
{ suffix = "technic_cnc_element_end_double", { suffix = "technic_cnc_element_end_double",
model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5}, model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
desc = S("Element End Double") desc = S("Element End Double"),
output = 2
}, },
{ suffix = "technic_cnc_element_cross_double", { suffix = "technic_cnc_element_cross_double",
@ -25,7 +36,8 @@ technic_cnc.programs = {
{0.3, -0.5, -0.3, 0.5, 0.5, 0.3}, {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.3, -0.5, -0.5, 0.3, 0.5, 0.5},
{-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
desc = S("Element Cross Double") desc = S("Element Cross Double"),
output = 1
}, },
{ suffix = "technic_cnc_element_t_double", { suffix = "technic_cnc_element_t_double",
@ -33,24 +45,28 @@ technic_cnc.programs = {
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, {-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.5, -0.5, -0.3, -0.3, 0.5, 0.3},
{0.3, -0.5, -0.3, 0.5, 0.5, 0.3}}, {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}},
desc = S("Element T Double") desc = S("Element T Double"),
output = 1
}, },
{ suffix = "technic_cnc_element_edge_double", { suffix = "technic_cnc_element_edge_double",
model = { model = {
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, {-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.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
desc = S("Element Edge Double") desc = S("Element Edge Double"),
output = 2
}, },
{ suffix = "technic_cnc_element_straight_double", { suffix = "technic_cnc_element_straight_double",
model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
desc = S("Element Straight Double") desc = S("Element Straight Double"),
output = 2
}, },
{ suffix = "technic_cnc_element_end", { suffix = "technic_cnc_element_end",
model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5}, model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
desc = S("Element End") desc = S("Element End"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_cross", { suffix = "technic_cnc_element_cross",
@ -58,7 +74,8 @@ technic_cnc.programs = {
{0.3, -0.5, -0.3, 0.5, 0, 0.3}, {0.3, -0.5, -0.3, 0.5, 0, 0.3},
{-0.3, -0.5, -0.5, 0.3, 0, 0.5}, {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
{-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
desc = S("Element Cross") desc = S("Element Cross"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_t", { suffix = "technic_cnc_element_t",
@ -66,19 +83,22 @@ technic_cnc.programs = {
{-0.3, -0.5, -0.5, 0.3, 0, 0.3}, {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
{-0.5, -0.5, -0.3, -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}}, {0.3, -0.5, -0.3, 0.5, 0, 0.3}},
desc = S("Element T") desc = S("Element T"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_edge", { suffix = "technic_cnc_element_edge",
model = { model = {
{-0.3, -0.5, -0.5, 0.3, 0, 0.3}, {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
{-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
desc = S("Element Edge") desc = S("Element Edge"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_straight", { suffix = "technic_cnc_element_straight",
model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
desc = S("Element Straight") desc = S("Element Straight"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_oblate_spheroid", { suffix = "technic_cnc_oblate_spheroid",
@ -91,32 +111,38 @@ technic_cnc.programs = {
{ -8/16, -4/16, -8/16, 8/16, 4/16, 8/16 }, { -8/16, -4/16, -8/16, 8/16, 4/16, 8/16 },
{ -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 } { -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_sphere", { suffix = "technic_cnc_sphere",
model = "technic_cnc_sphere.obj", model = "technic_cnc_sphere.obj",
desc = S("Sphere") desc = S("Sphere"),
output = 1
}, },
{ suffix = "technic_cnc_cylinder_horizontal", { suffix = "technic_cnc_cylinder_horizontal",
model = "technic_cnc_cylinder_horizontal.obj", model = "technic_cnc_cylinder_horizontal.obj",
desc = S("Horizontal Cylinder") desc = S("Horizontal Cylinder"),
output = 2
}, },
{ suffix = "technic_cnc_cylinder", { suffix = "technic_cnc_cylinder",
model = "technic_cnc_cylinder.obj", model = "technic_cnc_cylinder.obj",
desc = S("Cylinder") desc = S("Cylinder"),
output = 2
}, },
{ suffix = "technic_cnc_twocurvededge", { suffix = "technic_cnc_twocurvededge",
model = "technic_cnc_two_curved_edge.obj", model = "technic_cnc_two_curved_edge.obj",
desc = S("Two Curved Edge/Corner Block") desc = S("Two Curved Edge/Corner Block"),
output = 1
}, },
{ suffix = "technic_cnc_onecurvededge", { suffix = "technic_cnc_onecurvededge",
model = "technic_cnc_one_curved_edge.obj", model = "technic_cnc_one_curved_edge.obj",
desc = S("One Curved Edge Block") desc = S("One Curved Edge Block"),
output = 1
}, },
{ suffix = "technic_cnc_spike", { suffix = "technic_cnc_spike",
@ -130,7 +156,8 @@ technic_cnc.programs = {
{ -6/16, -4/16, -6/16, 6/16, 0, 6/16 }, { -6/16, -4/16, -6/16, 6/16, 0, 6/16 },
{ -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_pyramid", { suffix = "technic_cnc_pyramid",
@ -144,7 +171,8 @@ technic_cnc.programs = {
{ -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 }, { -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 },
{ -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }
} }
} },
output = 2
}, },
{ suffix = "technic_cnc_slope_inner_edge_upsdown", { suffix = "technic_cnc_slope_inner_edge_upsdown",
@ -165,7 +193,8 @@ technic_cnc.programs = {
{ -0.5, 0.25, -0.25, 0.5, 0, 0.5 }, { -0.5, 0.25, -0.25, 0.5, 0, 0.5 },
{ -0.5, 0.5, -0.5, 0.5, 0.25, 0.5 } { -0.5, 0.5, -0.5, 0.5, 0.25, 0.5 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_edge_upsdown", { suffix = "technic_cnc_slope_edge_upsdown",
@ -179,7 +208,8 @@ technic_cnc.programs = {
{ 0, 0, 0, 8/16, -4/16, 8/16 }, { 0, 0, 0, 8/16, -4/16, 8/16 },
{ 4/16, -4/16, 4/16, 8/16, -8/16, 8/16 } { 4/16, -4/16, 4/16, 8/16, -8/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_inner_edge", { suffix = "technic_cnc_slope_inner_edge",
@ -200,7 +230,8 @@ technic_cnc.programs = {
{ -0.5, 0.25, 0.25, 0.5, 0.5, 0.5 }, { -0.5, 0.25, 0.25, 0.5, 0.5, 0.5 },
{ 0.25, 0.25, -0.5, 0.5, 0.5, 0.5 } { 0.25, 0.25, -0.5, 0.5, 0.5, 0.5 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_edge", { suffix = "technic_cnc_slope_edge",
@ -214,7 +245,8 @@ technic_cnc.programs = {
{ -4/16, -4/16, -4/16, 8/16, 0, 8/16 }, { -4/16, -4/16, -4/16, 8/16, 0, 8/16 },
{ -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_upsdown", { suffix = "technic_cnc_slope_upsdown",
@ -228,7 +260,8 @@ technic_cnc.programs = {
{ -8/16, 0, 0, 8/16, -4/16, 8/16 }, { -8/16, 0, 0, 8/16, -4/16, 8/16 },
{ -8/16, -4/16, 4/16, 8/16, -8/16, 8/16 } { -8/16, -4/16, 4/16, 8/16, -8/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_lying", { suffix = "technic_cnc_slope_lying",
@ -242,7 +275,8 @@ technic_cnc.programs = {
{ -4/16, -8/16, -4/16, 0, 8/16, 8/16 }, { -4/16, -8/16, -4/16, 0, 8/16, 8/16 },
{ -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 } { -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 }
} }
} },
output = 2
}, },
{ suffix = "technic_cnc_slope", { suffix = "technic_cnc_slope",
@ -256,11 +290,40 @@ technic_cnc.programs = {
{ -8/16, -4/16, -4/16, 8/16, 0, 8/16 }, { -8/16, -4/16, -4/16, 8/16, 0, 8/16 },
{ -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
} }
} },
output = 2
}, },
} }
technic_cnc._populate_shortcuts = function()
-- Program quick access by string key
for _, data in ipairs(technic_cnc.programs) do
technic_cnc.programs[data.suffix] = data
data.short_name = assert(data.suffix:match("technic_cnc_(%S+)"))
end
-- Detect half/full counterparts
for k, data in pairs(technic_cnc.programs) do
if type(k) == "string" then
local full = technic_cnc.programs[k .. "_double"]
if full then
full.half_counterpart = k
data.full_counterpart = k .. "_double"
data.output = full.output * 2
--print("populate", k)
end
end
end
-- Final checks
for _, data in ipairs(technic_cnc.programs) do
assert(type(data.output) == "number", data.suffix)
assert(type(data.short_name) == "string", data.suffix)
end
end
-- Allow disabling certain programs for some node. Default is allowing all types for all nodes -- Allow disabling certain programs for some node. Default is allowing all types for all nodes
technic_cnc.programs_disable = { technic_cnc.programs_disable = {
-- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick -- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick
@ -327,44 +390,3 @@ function technic_cnc.register_all(recipeitem, groups, images, description)
end end
end end
-- REGISTER NEW TECHNIC_CNC_API's PART 2: technic_cnc..register_element_end(subname, recipeitem, groups, images, desc_element_xyz)
-----------------------------------------------------------------------------------------------------------------------
function technic_cnc.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_spheroid, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end)
-- TODO: Remove this evil sorcery
technic_cnc.register_slope(recipeitem, groups, images, desc_slope)
technic_cnc.register_slope_lying(recipeitem, groups, images, desc_slope_lying)
technic_cnc.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown)
technic_cnc.register_slope_edge(recipeitem, groups, images, desc_slope_edge)
technic_cnc.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge)
technic_cnc.register_slope_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge)
technic_cnc.register_slope_inner_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_inner_edge)
technic_cnc.register_pyramid(recipeitem, groups, images, desc_pyramid)
technic_cnc.register_spike(recipeitem, groups, images, desc_spike)
technic_cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge)
technic_cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge)
technic_cnc.register_cylinder(recipeitem, groups, images, desc_cylinder)
technic_cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal)
technic_cnc.register_spheroid(recipeitem, groups, images, desc_spheroid)
technic_cnc.register_element_straight(recipeitem, groups, images, desc_element_straight)
technic_cnc.register_element_edge(recipeitem, groups, images, desc_element_edge)
technic_cnc.register_element_t(recipeitem, groups, images, desc_element_t)
technic_cnc.register_element_cross(recipeitem, groups, images, desc_element_cross)
technic_cnc.register_element_end(recipeitem, groups, images, desc_element_end)
end
-- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz)
------------------------------------------------------------------------------------------------------------
function technic_cnc.register_stick_etc(recipeitem, groups, images, desc_stick)
-- TODO: Remove this evil sorcery
technic_cnc.register_stick(recipeitem, groups, images, desc_stick)
end
function technic_cnc.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)
-- TODO: Remove this evil sorcery
technic_cnc.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double)
technic_cnc.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double)
technic_cnc.register_element_t_double(recipeitem, groups, images, desc_element_t_double)
technic_cnc.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double)
technic_cnc.register_element_end_double(recipeitem, groups, images, desc_element_end_double)
end

View File

@ -3,129 +3,68 @@
local S = technic_cnc.getter local S = technic_cnc.getter
-- DIRT local function register_material(nodename, tiles_override, descr_override)
------- local ndef = minetest.registered_nodes[nodename]
technic_cnc.register_all("default:dirt", if not ndef then
{snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1}, return
{"default_dirt.png"}, end
S("Dirt"))
-- (DIRT WITH) GRASS
--------------------
technic_cnc.register_all("default:dirt_with_grass",
{snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
{"default_grass.png"},
S("Grassy dirt"))
-- WOOD
-------
technic_cnc.register_all("default:wood",
{snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
{"default_wood.png"},
S("Wooden"))
-- STONE
--------
technic_cnc.register_all("default:stone",
{cracky=3, not_in_creative_inventory=1},
{"default_stone.png"},
S("Stone"))
-- COBBLE
---------
technic_cnc.register_all("default:cobble",
{cracky=3, not_in_creative_inventory=1},
{"default_cobble.png"},
S("Cobble"))
-- BRICK
--------
technic_cnc.register_all("default:brick",
{cracky=3, not_in_creative_inventory=1},
{"default_brick.png"},
S("Brick"))
-- SANDSTONE local groups = {
------------ cracky = ndef.groups.cracky,
technic_cnc.register_all("default:sandstone", crumbly = ndef.groups.crumbly,
{crumbly=2, cracky=3, not_in_creative_inventory=1}, choppy = ndef.groups.choppy,
{"default_sandstone.png"}, flammable = ndef.groups.flammable,
S("Sandstone")) level = ndef.groups.level,
snappy = ndef.groups.snappy,
wood = ndef.groups.wood,
oddly_breakable_by_hand = ndef.groups.oddly_breakable_by_hand,
not_in_creative_inventory = 1,
}
local count = 0
for _ in pairs(groups) do
count = count + 1
end
assert(count >= 2, "Too few groups. node name=" .. nodename)
-- LEAVES local tiles = tiles_override or { ndef.tiles[#ndef.tiles] }
--------- assert(tiles and #tiles == 1, "Unknown tile format in node name=" .. nodename)
technic_cnc.register_all("default:leaves",
{snappy=2, choppy=2, oddly_breakable_by_hand=3, not_in_creative_inventory=1},
{"default_leaves.png"},
S("Leaves"))
-- TREE
-------
technic_cnc.register_all("default:tree",
{snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, wood=1, not_in_creative_inventory=1},
{"default_tree.png"},
S("Tree"))
-- Bronze technic_cnc.register_all(nodename,
-------- groups,
technic_cnc.register_all("default:bronzeblock", tiles,
{cracky=1, level=2, not_in_creative_inventory=1}, descr_override or ndef.description or "<unknown>"
{"default_bronze_block.png"}, )
S("Bronze"))
local steeltex = "default_steel_block.png"
local steelname = "Steel"
if technic_cnc.technic_modpath then
steeltex = "technic_wrought_iron_block.png"
steelname = "Wrought Iron"
-- Stainless Steel
--------
technic_cnc.register_all("technic:stainless_steel_block",
{cracky=1, level=2, not_in_creative_inventory=1},
{"technic_stainless_steel_block.png"},
S("Stainless Steel"))
-- Marble
------------
technic_cnc.register_all("technic:marble",
{cracky=3, not_in_creative_inventory=1},
{"technic_marble.png"},
S("Marble"))
-- Granite
------------
technic_cnc.register_all("technic:granite",
{cracky=1, not_in_creative_inventory=1},
{"technic_granite.png"},
S("Granite"))
-- Blast-resistant concrete
---------------------------
technic_cnc.register_all("technic:blast_resistant_concrete",
{cracky=2, level=2, not_in_creative_inventory=1},
{"technic_blast_resistant_concrete_block.png"},
S("Blast-resistant concrete"))
end end
-- STEEL register_material("default:dirt")
--------------- register_material("default:dirt_with_grass", {"default_grass.png"}, S("Grassy dirt"))
technic_cnc.register_all("default:steelblock", register_material("default:wood", nil, S("Wooden"))
{cracky=1, level=2, not_in_creative_inventory=1}, register_material("default:stone")
{steeltex}, register_material("default:cobble")
S(steelname)) register_material("default:sandstone")
register_material("default:leaves")
register_material("default:tree")
register_material("default:bronzeblock", nil, S("Bronze"))
local steelname = S("Steel")
if technic_cnc.technic_modpath then
steelname = S("Wrought Iron")
register_material("technic:stainless_steel_block", nil, S("Stainless Steel"))
register_material("technic:stainless_steel_block")
register_material("technic:marble")
register_material("technic:granite")
register_material("technic:blast_resistant_concrete")
register_material("technic:blast_resistant_concrete")
end
register_material("default:steelblock", nil, steelname)
-- CONCRETE AND CEMENT -- CONCRETE AND CEMENT
---------------------- ----------------------
technic_cnc.register_all("basic_materials:concrete_block", register_material("basic_materials:concrete_block")
{cracky=2, level=2, not_in_creative_inventory=1}, register_material("basic_materials:cement_block")
{"basic_materials_concrete_block.png"}, register_material("basic_materials:brass_block")
S("Concrete"))
technic_cnc.register_all("basic_materials:cement_block",
{cracky=2, level=2, not_in_creative_inventory=1},
{"basic_materials_cement_block.png"},
S("Cement"))
technic_cnc.register_all("basic_materials:brass_block",
{cracky=1, level=2, not_in_creative_inventory=1},
{"basic_materials_brass_block.png"},
S("Brass block"))

View File

@ -3,25 +3,11 @@ local modpath = minetest.get_modpath("technic_cnc")
technic_cnc = {} technic_cnc = {}
technic_cnc.technic_modpath = minetest.get_modpath("technic") technic_cnc.technic_modpath = minetest.get_modpath("technic")
technic_cnc.getter = minetest.get_translator("technic_cnc")
technic_cnc.use_technic = technic_cnc.technic_modpath technic_cnc.use_technic = technic_cnc.technic_modpath
and minetest.settings:get_bool("technic_cnc_use_technic") ~= false and minetest.settings:get_bool("technic_cnc_use_technic") ~= false
if rawget(_G, "intllib") then
technic_cnc.getter = intllib.Getter()
else
-- Intllib copypasta: TODO replace with the client-side translation API
technic_cnc.getter = function(s,a,...)
if a==nil then return s end
a={a,...}
return s:gsub("(@?)@(%(?)(%d+)(%)?)", function(e,o,n,c)
if e==""then
return a[tonumber(n)]..(o==""and c or"")
end
return "@"..o..n..c
end)
end
end
dofile(modpath.."/cnc.lua") dofile(modpath.."/cnc.lua")
dofile(modpath.."/cnc_api.lua") dofile(modpath.."/cnc_api.lua")

View File

@ -1,36 +0,0 @@
## CNC
CNC Machine = CNC-Maschine
%s CNC Machine = %s CNC-Maschine
Cylinder = Zylinder
Element Cross = Halbes Kreuzelement
Element Cross Double = Kreuzelement
Element Edge = Halbes Eckelement
Element Edge Double = Eckelement
Element End = Halbes Endelement
Element End Double = Endelement
Element Straight = Halbes aufrechtes Element
Element Straight Double = Aufrechtes Element
Element T = Halbes T-Element
Element T Double = T-Element
Horizontal Cylinder = Liegender Zylinder
One Curved Edge Block = Block mit einer abgerundeten Kante
Pyramid = Pyramide
Slope = Schraege
Slope Edge = Schraege mit Ecke
Slope Inner Edge = Schraege mit Innenecke
Slope Lying = Liegende Schraege
Slope Upside Down = Umgedrehte Schraege
Slope Upside Down Edge = Umgedrehte Schraege mit Ecke
Slope Upside Down Inner Edge = Umgedrehte Schraege mit Innenecke
Sphere = Kugel
Spike = Spitze
Stick = Stange
Two Curved Edge Block = Block mit zwei abgerundeten Kanten
Brick = Ziegel:
Cobble = Pflasterstein:
Dirt = Erde:
Leaves = Laub:
Sandstone = Sandstein:
Stone = Stein:
Tree = Baumstamm:
Wooden = Holz:

View File

@ -0,0 +1,50 @@
# textdomain: technic_cnc
## CNC
##[ cnc.lua ]##
CNC Machine=CNC-Maschine
@1 CNC Machine=@1 CNC-Maschine
LV=LV
Choose Milling Program:=Wähle das Fräsprogramm aus:
Slim Elements half / normal height:=Schmale halb- / normalhohe Elemente:
In:=Eingabe:
Out:=Ausgabe:
@1 Idle=@1 (wartend)
@1 Unpowered=@1 (unbestromt)
@1 Active=@1 (aktiv)
##[ cnc_api.lua ]##
Stick=Stock
Element End Double=Endelement
Element Cross Double=Kreuzelement
Element T Double=T-Element
Element Edge Double=Eckelement
Element Straight Double=Gerades Element
Element End=Halbes Endelement
Element Cross=Halbes Kreuzelement
Element T=Halbes T-Element
Element Edge=Halbes Eckelement
Element Straight=Halbes Gerades Eleent
Oblate spheroid=Sphärenstück
Sphere=Sphäre
Horizontal Cylinder=Horizontaler Zylinder
Cylinder=Zylinder
Two Curved Edge/Corner Block=Doppelt gekrümmter Eck/-Randblock
One Curved Edge Block=Einfach gekrümmter Eckblock
Spike=Spitze
Pyramid=Pyramide
Slope Upside Down Inner Edge/Corner=Schräge (kopfüber), innere Ecke
Slope Upside Down Outer Edge/Corner=Schräge (kopfüber), äussere Ecke
Slope Inner Edge/Corner=Schräge, innere Ecke
Slope Outer Edge/Corner=Schräge äussere Ecke
Slope Upside Down=Schräge (kopfüber)
Slope Lying=Liegende Schräge
Slope=Schräge
##[ cnc_materials.lua ]##
Grassy dirt=Erde mit Gras
Wooden=Holz
Bronze=Bronze
Steel=Stahl
Wrought Iron=Schmiedeeisen
Stainless Steel=Edelstahl

View File

@ -1,36 +1,50 @@
# textdomain: technic_cnc
## CNC ## CNC
CNC Machine =
%s CNC Machine = ##[ cnc.lua ]##
Cylinder = CNC Machine=
Element Cross = @1 CNC Machine=
Element Cross Double = LV=
Element Edge = Choose Milling Program:=
Element Edge Double = Slim Elements half / normal height:=
Element End = In:=
Element End Double = Out:=
Element Straight = @1 Idle=
Element Straight Double = @1 Unpowered=
Element T = @1 Active=
Element T Double =
Horizontal Cylinder = ##[ cnc_api.lua ]##
One Curved Edge Block = Stick=
Pyramid = Element End Double=
Slope = Element Cross Double=
Slope Edge = Element T Double=
Slope Inner Edge = Element Edge Double=
Slope Lying = Element Straight Double=
Slope Upside Down = Element End=
Slope Upside Down Edge = Element Cross=
Slope Upside Down Inner Edge = Element T=
Sphere = Element Edge=
Spike = Element Straight=
Stick = Oblate spheroid=
Two Curved Edge Block = Sphere=
Brick = Horizontal Cylinder=
Cobble = Cylinder=
Dirt = Two Curved Edge/Corner Block=
Leaves = One Curved Edge Block=
Sandstone = Spike=
Stone = Pyramid=
Tree = Slope Upside Down Inner Edge/Corner=
Wooden = Slope Upside Down Outer Edge/Corner=
Slope Inner Edge/Corner=
Slope Outer Edge/Corner=
Slope Upside Down=
Slope Lying=
Slope=
##[ cnc_materials.lua ]##
Grassy dirt=
Wooden=
Bronze=
Steel=
Wrought Iron=
Stainless Steel=

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB