[workbench] Update to Git commit 74dd1af & patch b964323:

https://github.com/minetest-mods/workbench/tree/74dd1af
https://github.com/AntumDeluge/mtmod-workbench/tree/b964323
This commit is contained in:
AntumDeluge 2017-05-12 11:47:48 -07:00
parent fda741886a
commit 3a8e08f723
4 changed files with 73 additions and 43 deletions

View File

@ -90,7 +90,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
* [compassgps][] ([WTFPL][lic.wtfpl] / [CC0][lic.cc0] / [CC BY-SA][lic.ccbysa]) -- version: [96892a0 Git][ver.compassgps] *2015-07-31* ([patched][patch.compassgps]) * [compassgps][] ([WTFPL][lic.wtfpl] / [CC0][lic.cc0] / [CC BY-SA][lic.ccbysa]) -- version: [96892a0 Git][ver.compassgps] *2015-07-31* ([patched][patch.compassgps])
* [tools_obsidian][] ([LGPL / CC BY-SA][lic.tools_obsidian]) -- version: [f77fd79][ver.tools_obsidian] *2016-03-19* * [tools_obsidian][] ([LGPL / CC BY-SA][lic.tools_obsidian]) -- version: [f77fd79][ver.tools_obsidian] *2016-03-19*
* [torches][] ([LGPL / CC-BY-SA](mods/tools/torches/README.txt)) -- version: [e19c772 Git][ver.torches] *2015-11-12* * [torches][] ([LGPL / CC-BY-SA](mods/tools/torches/README.txt)) -- version: [e19c772 Git][ver.torches] *2015-11-12*
* [workbench][] ([GPL / WTFPL](mods/tools/workbench/LICENSE)) * [workbench][] ([GPL / WTFPL](mods/tools/workbench/LICENSE)) -- version: [74dd1af Git][ver.workbench] *2017-02-07* ([patched][patch.workbench])
* transport/ * transport/
* [helicopter][] ([GPL][lic.gpl2.0]) -- version: [10f1433 Git][ver.helicopter] ([patched][patch.helicopter]) *2015-07-15* * [helicopter][] ([GPL][lic.gpl2.0]) -- version: [10f1433 Git][ver.helicopter] ([patched][patch.helicopter]) *2015-07-15*
* [hovercraft][] ([LGPL / CC BY-SA / CC0][lic.hovercraft]) * [hovercraft][] ([LGPL / CC BY-SA / CC0][lic.hovercraft])
@ -454,6 +454,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[ver.walking_light]: https://github.com/petermaloney/walking_light/tree/b9de302 [ver.walking_light]: https://github.com/petermaloney/walking_light/tree/b9de302
[ver.wardrobe]: https://github.com/prestidigitator/minetest-mod-wardrobe/tree/c48b011 [ver.wardrobe]: https://github.com/prestidigitator/minetest-mod-wardrobe/tree/c48b011
[ver.windmill]: https://github.com/Sokomine/windmill/tree/47b029d [ver.windmill]: https://github.com/Sokomine/windmill/tree/47b029d
[ver.workbench]: https://github.com/minetest-mods/workbench/tree/74dd1af
[patch.adv_spawning]: https://github.com/AntumDeluge/mtmod-adv_spawning/tree/572688b [patch.adv_spawning]: https://github.com/AntumDeluge/mtmod-adv_spawning/tree/572688b
[patch.bags]: https://github.com/AntumDeluge/mtmod-bags/tree/4363284 [patch.bags]: https://github.com/AntumDeluge/mtmod-bags/tree/4363284
@ -480,3 +481,4 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[patch.unifieddyes]: https://github.com/AntumDeluge/mtmod-unifieddyes/tree/df3f1b1 [patch.unifieddyes]: https://github.com/AntumDeluge/mtmod-unifieddyes/tree/df3f1b1
[patch.walking_light]: https://github.com/AntumDeluge/mtmod-walking_light/tree/00ebab8 [patch.walking_light]: https://github.com/AntumDeluge/mtmod-walking_light/tree/00ebab8
[patch.windmill]: https://github.com/AntumDeluge/mtmod-windmill/tree/7756ab4 [patch.windmill]: https://github.com/AntumDeluge/mtmod-windmill/tree/7756ab4
[patch.workbench]: https://github.com/AntumDeluge/mtmod-workbench/tree/b964323

View File

@ -0,0 +1,8 @@
unused_args = false
allow_defined_top = true
read_globals = {
"minetest",
"default",
"stairs",
}

View File

@ -1,4 +1,4 @@
default default
stairs stairs
xdecor? xdecor?
screwdriver? craft_guide?

View File

@ -1,8 +1,10 @@
local workbench = {} local workbench = {}
WB = {}
screwdriver = screwdriver or {} screwdriver = screwdriver or {}
local min, ceil = math.min, math.ceil
-- Nodes allowed to be cut. -- Nodes allowed to be cut
-- Only the regular, solid blocks without metas or explosivity can be cut. -- Only the regular, solid blocks without metas or explosivity can be cut
local nodes = {} local nodes = {}
for node, def in pairs(minetest.registered_nodes) do for node, def in pairs(minetest.registered_nodes) do
if (def.drawtype == "normal" or def.drawtype:sub(1,5) == "glass") and if (def.drawtype == "normal" or def.drawtype:sub(1,5) == "glass") and
@ -13,8 +15,11 @@ for node, def in pairs(minetest.registered_nodes) do
not def.on_blast and not def.on_blast and
not def.allow_metadata_inventory_take and not def.allow_metadata_inventory_take and
not (def.groups.not_in_creative_inventory == 1) and not (def.groups.not_in_creative_inventory == 1) and
not (def.groups.not_cuttable == 1) and
not def.groups.wool and not def.groups.wool and
not def.description:find("Ore") and (def.tiles and type(def.tiles[1]) == "string" and not
def.tiles[1]:find("default_mineral")) and
not def.mesecons and
def.description and def.description and
def.description ~= "" and def.description ~= "" and
def.light_source == 0 def.light_source == 0
@ -23,7 +28,23 @@ for node, def in pairs(minetest.registered_nodes) do
end end
end end
-- Nodeboxes definitions. -- Optionally, you can register custom cuttable nodes in the workbench
WB.custom_nodes_register = {
-- "default:leaves",
}
setmetatable(nodes, {
__concat = function(t1, t2)
for i=1, #t2 do
t1[#t1+1] = t2[i]
end
return t1
end
})
nodes = nodes..WB.custom_nodes_register
-- Nodeboxes definitions
workbench.defs = { workbench.defs = {
-- Name Yield X Y Z W H L -- Name Yield X Y Z W H L
{"nanoslab", 16, { 0, 0, 0, 8, 1, 8 }}, {"nanoslab", 16, { 0, 0, 0, 8, 1, 8 }},
@ -46,7 +67,7 @@ workbench.defs = {
{ 0, 8, 0, 8, 8, 8 }} { 0, 8, 0, 8, 8, 8 }}
} }
-- Tools allowed to be repaired. -- Tools allowed to be repaired
function workbench:repairable(stack) function workbench:repairable(stack)
local tools = {"pick", "axe", "shovel", "sword", "hoe", "armor", "shield"} local tools = {"pick", "axe", "shovel", "sword", "hoe", "armor", "shield"}
for _, t in pairs(tools) do for _, t in pairs(tools) do
@ -56,13 +77,9 @@ function workbench:repairable(stack)
end end
function workbench:get_output(inv, input, name) function workbench:get_output(inv, input, name)
if inv:is_empty("input") then
inv:set_list("forms", {}) return
end
local output = {} local output = {}
for _, n in pairs(self.defs) do for _, n in pairs(self.defs) do
local count = math.min(n[2] * input:get_count(), input:get_stack_max()) local count = min(n[2] * input:get_count(), input:get_stack_max())
local item = name.."_"..n[1] local item = name.."_"..n[1]
if not n[3] then item = "stairs:"..n[1].."_"..name:match(":(.*)") end if not n[3] then item = "stairs:"..n[1].."_"..name:match(":(.*)") end
output[#output+1] = item.." "..count output[#output+1] = item.." "..count
@ -70,11 +87,11 @@ function workbench:get_output(inv, input, name)
inv:set_list("forms", output) inv:set_list("forms", output)
end end
-- Thanks to kaeza for this function. -- Thanks to kaeza for this function
function workbench:pixelbox(size, boxes) function workbench:pixelbox(size, boxes)
local fixed = {} local fixed = {}
for _, box in pairs(boxes) do for _, box in pairs(boxes) do
-- `unpack` has been changed to `table.unpack` in newest Lua versions. -- `unpack` has been changed to `table.unpack` in newest Lua versions
local x, y, z, w, h, l = unpack(box) local x, y, z, w, h, l = unpack(box)
fixed[#fixed+1] = { fixed[#fixed+1] = {
(x / size) - 0.5, (x / size) - 0.5,
@ -85,11 +102,11 @@ function workbench:pixelbox(size, boxes)
((z + l) / size) - 0.5 ((z + l) / size) - 0.5
} }
end end
return {type = "fixed", fixed = fixed} return {type="fixed", fixed=fixed}
end end
local formspecs = { local formspecs = {
-- Main formspec. -- Main formspec
[[ label[0.9,1.23;Cut] [[ label[0.9,1.23;Cut]
label[0.9,2.23;Repair] label[0.9,2.23;Repair]
box[-0.05,1;2.05,0.9;#555555] box[-0.05,1;2.05,0.9;#555555]
@ -104,14 +121,14 @@ local formspecs = {
list[context;tool;2,2;1,1;] list[context;tool;2,2;1,1;]
list[context;hammer;3,2;1,1;] list[context;hammer;3,2;1,1;]
list[context;forms;4,0;4,3;] ]], list[context;forms;4,0;4,3;] ]],
-- Crafting formspec. -- Crafting formspec
[[ image[5,1;1,1;gui_furnace_arrow_bg.png^[transformR270] [[ image[5,1;1,1;gui_furnace_arrow_bg.png^[transformR270]
button[0,0;1.5,1;back;< Back] button[0,0;1.5,1;back;< Back]
list[current_player;craft;2,0;3,3;] list[current_player;craft;2,0;3,3;]
list[current_player;craftpreview;6,1;1,1;] list[current_player;craftpreview;6,1;1,1;]
listring[current_player;main] listring[current_player;main]
listring[current_player;craft] ]], listring[current_player;craft] ]],
-- Storage formspec. -- Storage formspec
[[ list[context;storage;0,1;8,2;] [[ list[context;storage;0,1;8,2;]
button[0,0;1.5,1;back;< Back] button[0,0;1.5,1;back;< Back]
listring[context;storage] listring[context;storage]
@ -158,10 +175,11 @@ function workbench.timer(pos)
local hammer = inv:get_stack("hammer", 1) local hammer = inv:get_stack("hammer", 1)
if tool:is_empty() or hammer:is_empty() or tool:get_wear() == 0 then if tool:is_empty() or hammer:is_empty() or tool:get_wear() == 0 then
timer:stop() return timer:stop()
return
end end
-- Tool's wearing range: 0-65535 | 0 = new condition. -- Tool's wearing range: 0-65535 | 0 = new condition
tool:add_wear(-500) tool:add_wear(-500)
hammer:add_wear(700) hammer:add_wear(700)
@ -172,7 +190,8 @@ end
function workbench.put(_, listname, _, stack) function workbench.put(_, listname, _, stack)
local stackname = stack:get_name() local stackname = stack:get_name()
if (listname == "tool" and stack:get_wear() > 0 and workbench:repairable(stackname)) or if (listname == "tool" and stack:get_wear() > 0 and
workbench:repairable(stackname)) or
(listname == "input" and minetest.registered_nodes[stackname.."_cube"]) or (listname == "input" and minetest.registered_nodes[stackname.."_cube"]) or
(listname == "hammer" and stackname == "xdecor:hammer") or (listname == "hammer" and stackname == "xdecor:hammer") or
listname == "storage" then listname == "storage" then
@ -181,18 +200,8 @@ function workbench.put(_, listname, _, stack)
return 0 return 0
end end
function workbench.take(_, listname, _, stack, player)
if listname == "forms" then
local inv = player:get_inventory()
if inv:room_for_item("main", stack:get_name()) then return -1 end
return 0
end
return stack:get_count()
end
function workbench.move(_, from_list, _, to_list, _, count) function workbench.move(_, from_list, _, to_list, _, count)
if to_list == "storage" and from_list ~= "forms" then return count end return (to_list == "storage" and from_list ~= "forms") and count or 0
return 0
end end
function workbench.on_put(pos, listname, _, stack) function workbench.on_put(pos, listname, _, stack)
@ -206,20 +215,30 @@ function workbench.on_put(pos, listname, _, stack)
end end
end end
function workbench.on_take(pos, listname, index, stack) function workbench.on_take(pos, listname, index, stack, player)
local inv = minetest.get_meta(pos):get_inventory() local inv = minetest.get_meta(pos):get_inventory()
local input = inv:get_stack("input", 1) local input = inv:get_stack("input", 1)
local inputname = input:get_name()
local stackname = stack:get_name()
if listname == "input" then if listname == "input" then
if stack:get_name() == input:get_name() then if stackname == inputname then
workbench:get_output(inv, input, stack:get_name()) workbench:get_output(inv, input, stackname)
else else
inv:set_list("forms", {}) inv:set_list("forms", {})
end end
elseif listname == "forms" then elseif listname == "forms" then
input:take_item(math.ceil(stack:get_count() / workbench.defs[index][2])) local fromstack = inv:get_stack(listname, index)
if not fromstack:is_empty() and fromstack:get_name() ~= stackname then
local player_inv = player:get_inventory()
if player_inv:room_for_item("main", fromstack) then
player_inv:add_item("main", fromstack)
end
end
input:take_item(ceil(stack:get_count() / workbench.defs[index][2]))
inv:set_stack("input", 1, input) inv:set_stack("input", 1, input)
workbench:get_output(inv, input, input:get_name()) workbench:get_output(inv, input, inputname)
end end
end end
@ -240,7 +259,6 @@ minetest.register_node(":xdecor:workbench", {
on_metadata_inventory_put = workbench.on_put, on_metadata_inventory_put = workbench.on_put,
on_metadata_inventory_take = workbench.on_take, on_metadata_inventory_take = workbench.on_take,
allow_metadata_inventory_put = workbench.put, allow_metadata_inventory_put = workbench.put,
allow_metadata_inventory_take = workbench.take,
allow_metadata_inventory_move = workbench.move allow_metadata_inventory_move = workbench.move
}) })
@ -268,12 +286,13 @@ minetest.register_craft({
}) })
for _, d in pairs(workbench.defs) do for _, d in pairs(workbench.defs) do
for i = 1, #nodes do for i=1, #nodes do
local node = nodes[i] local node = nodes[i]
local def = minetest.registered_nodes[node] local def = minetest.registered_nodes[node]
if d[3] then if d[3] then
local groups, tiles = {}, {} local groups = {}
local tiles
groups.not_in_creative_inventory = 1 groups.not_in_creative_inventory = 1
for k, v in pairs(def.groups) do for k, v in pairs(def.groups) do
@ -293,8 +312,9 @@ for i = 1, #nodes do
end end
if not minetest.registered_nodes["stairs:slab_"..node:match(":(.*)")] then if not minetest.registered_nodes["stairs:slab_"..node:match(":(.*)")] then
stairs.register_stair_and_slab(node:match(":(.*)"), node, groups, tiles, stairs.register_stair_and_slab(node:match(":(.*)"), node,
def.description.." Stair", def.description.." Slab", def.sounds) groups, tiles, def.description.." Stair",
def.description.." Slab", def.sounds)
end end
minetest.register_node(":"..node.."_"..d[1], { minetest.register_node(":"..node.."_"..d[1], {