[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])
* [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*
* [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/
* [helicopter][] ([GPL][lic.gpl2.0]) -- version: [10f1433 Git][ver.helicopter] ([patched][patch.helicopter]) *2015-07-15*
* [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.wardrobe]: https://github.com/prestidigitator/minetest-mod-wardrobe/tree/c48b011
[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.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.walking_light]: https://github.com/AntumDeluge/mtmod-walking_light/tree/00ebab8
[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
stairs
xdecor?
screwdriver?
craft_guide?

View File

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