|
1 | 1 | local workbench = {} |
2 | | -WB = {} |
| 2 | +local nodes = {} |
| 3 | + |
3 | 4 | screwdriver = screwdriver or {} |
4 | 5 | local min, ceil = math.min, math.ceil |
5 | | -local registered_nodes = minetest.registered_nodes |
6 | 6 | local S = minetest.get_translator("xdecor") |
7 | 7 | local FS = function(...) return minetest.formspec_escape(S(...)) end |
8 | 8 |
|
9 | 9 | -- Nodes allowed to be cut |
10 | 10 | -- Only the regular, solid blocks without metas or explosivity can be cut |
11 | | -local nodes = {} |
12 | | -for node, def in pairs(registered_nodes) do |
| 11 | +for node, def in pairs(minetest.registered_nodes) do |
13 | 12 | if xdecor.stairs_valid_def(def) then |
14 | 13 | nodes[#nodes + 1] = node |
15 | 14 | end |
16 | 15 | end |
17 | 16 |
|
18 | | --- Optionally, you can register custom cuttable nodes in the workbench |
19 | | -WB.custom_nodes_register = { |
20 | | - -- "default:leaves", |
21 | | -} |
22 | | - |
23 | | -setmetatable(nodes, { |
24 | | - __concat = function(t1, t2) |
25 | | - for i = 1, #t2 do |
26 | | - t1[#t1 + 1] = t2[i] |
27 | | - end |
28 | | - |
29 | | - return t1 |
30 | | - end |
31 | | -}) |
32 | | - |
33 | | -nodes = nodes .. WB.custom_nodes_register |
34 | | - |
35 | 17 | -- Nodeboxes definitions |
36 | 18 | workbench.defs = { |
37 | 19 | -- Name YieldX YZ WH L |
@@ -187,7 +169,7 @@ function workbench.allow_put(pos, listname, index, stack, player) |
187 | 169 | local stackname = stack:get_name() |
188 | 170 | if (listname == "tool" and stack:get_wear() > 0 and |
189 | 171 | workbench:repairable(stackname)) or |
190 | | - (listname == "input" and registered_nodes[stackname .. "_cube"]) or |
| 172 | + (listname == "input" and minetest.registered_nodes[stackname .. "_cube"]) or |
191 | 173 | (listname == "hammer" and stackname == "xdecor:hammer") or |
192 | 174 | listname == "storage" then |
193 | 175 | return stack:get_count() |
@@ -232,7 +214,7 @@ function workbench.on_take(pos, listname, index, stack, player) |
232 | 214 | local stackname = stack:get_name() |
233 | 215 |
|
234 | 216 | if listname == "input" then |
235 | | - if stackname == inputname and registered_nodes[inputname .. "_cube"] then |
| 217 | + if stackname == inputname and minetest.registered_nodes[inputname .. "_cube"] then |
236 | 218 | workbench:get_output(inv, input, stackname) |
237 | 219 | else |
238 | 220 | inv:set_list("forms", {}) |
@@ -274,69 +256,67 @@ xdecor.register("workbench", { |
274 | 256 | allow_metadata_inventory_move = workbench.allow_move |
275 | 257 | }) |
276 | 258 |
|
277 | | -minetest.register_on_mods_loaded(function() |
278 | | - for _, d in ipairs(workbench.defs) do |
279 | | - for i = 1, #nodes do |
280 | | - local node = nodes[i] |
281 | | - local mod_name, item_name = node:match("^(.-):(.*)") |
282 | | - local def = registered_nodes[node] |
283 | | - |
284 | | - if item_name and d[3] then |
285 | | - local groups = {} |
286 | | - local tiles |
287 | | - groups.not_in_creative_inventory = 1 |
288 | | - |
289 | | - for k, v in pairs(def.groups) do |
290 | | - if k ~= "wood" and k ~= "stone" and k ~= "level" then |
291 | | - groups[k] = v |
292 | | - end |
293 | | - end |
| 259 | +for _, d in ipairs(workbench.defs) do |
| 260 | +for i = 1, #nodes do |
| 261 | + local node = nodes[i] |
| 262 | + local mod_name, item_name = node:match("^(.-):(.*)") |
| 263 | + local def = minetest.registered_nodes[node] |
294 | 264 |
|
295 | | - if def.tiles then |
296 | | - if #def.tiles > 1 and (def.drawtype:sub(1,5) ~= "glass") then |
297 | | - tiles = def.tiles |
298 | | - else |
299 | | - tiles = {def.tiles[1]} |
300 | | - end |
301 | | - else |
302 | | - tiles = {def.tile_images[1]} |
| 265 | + if item_name and d[3] then |
| 266 | + local groups = {} |
| 267 | + local tiles |
| 268 | + groups.not_in_creative_inventory = 1 |
| 269 | + |
| 270 | + for k, v in pairs(def.groups) do |
| 271 | + if k ~= "wood" and k ~= "stone" and k ~= "level" then |
| 272 | + groups[k] = v |
303 | 273 | end |
| 274 | + end |
304 | 275 |
|
305 | | - --TODO: Translation support for Stairs/Slab |
306 | | - if not registered_nodes["stairs:slab_" .. item_name] then |
307 | | - stairs.register_stair_and_slab(item_name, node, |
308 | | - groups, tiles, def.description .. " Stair", |
309 | | - def.description .. " Slab", def.sounds) |
| 276 | + if def.tiles then |
| 277 | + if #def.tiles > 1 and (def.drawtype:sub(1,5) ~= "glass") then |
| 278 | + tiles = def.tiles |
| 279 | + else |
| 280 | + tiles = {def.tiles[1]} |
310 | 281 | end |
| 282 | + else |
| 283 | + tiles = {def.tile_images[1]} |
| 284 | + end |
311 | 285 |
|
312 | | - minetest.register_node(":" .. node .. "_" .. d[1], { |
313 | | - --TODO: Translation support |
314 | | - description = def.description .. " " .. d[1]:gsub("^%l", string.upper), |
315 | | - paramtype = "light", |
316 | | - paramtype2 = "facedir", |
317 | | - drawtype = "nodebox", |
318 | | - sounds = def.sounds, |
319 | | - tiles = tiles, |
320 | | - groups = groups, |
321 | | - -- `unpack` has been changed to `table.unpack` in newest Lua versions |
322 | | - node_box = xdecor.pixelbox(16, {unpack(d, 3)}), |
323 | | - sunlight_propagates = true, |
324 | | - on_place = minetest.rotate_node |
325 | | - }) |
326 | | - |
327 | | - elseif item_name and mod_name then |
328 | | - minetest.register_alias_force( |
329 | | - ("%s:%s_innerstair"):format(mod_name, item_name), |
330 | | - ("stairs:stair_inner_%s"):format(item_name) |
331 | | - ) |
332 | | - minetest.register_alias_force( |
333 | | - ("%s:%s_outerstair"):format(mod_name, item_name), |
334 | | - ("stairs:stair_outer_%s"):format(item_name) |
335 | | - ) |
| 286 | + --TODO: Translation support for Stairs/Slab |
| 287 | + if not minetest.registered_nodes["stairs:slab_" .. item_name] then |
| 288 | + stairs.register_stair_and_slab(item_name, node, |
| 289 | + groups, tiles, def.description .. " Stair", |
| 290 | + def.description .. " Slab", def.sounds) |
336 | 291 | end |
| 292 | + |
| 293 | + minetest.register_node(":" .. node .. "_" .. d[1], { |
| 294 | + --TODO: Translation support |
| 295 | + description = def.description .. " " .. d[1]:gsub("^%l", string.upper), |
| 296 | + paramtype = "light", |
| 297 | + paramtype2 = "facedir", |
| 298 | + drawtype = "nodebox", |
| 299 | + sounds = def.sounds, |
| 300 | + tiles = tiles, |
| 301 | + groups = groups, |
| 302 | + -- `unpack` has been changed to `table.unpack` in newest Lua versions |
| 303 | + node_box = xdecor.pixelbox(16, {unpack(d, 3)}), |
| 304 | + sunlight_propagates = true, |
| 305 | + on_place = minetest.rotate_node |
| 306 | + }) |
| 307 | + |
| 308 | + elseif item_name and mod_name then |
| 309 | + minetest.register_alias_force( |
| 310 | + ("%s:%s_innerstair"):format(mod_name, item_name), |
| 311 | + ("stairs:stair_inner_%s"):format(item_name) |
| 312 | + ) |
| 313 | + minetest.register_alias_force( |
| 314 | + ("%s:%s_outerstair"):format(mod_name, item_name), |
| 315 | + ("stairs:stair_outer_%s"):format(item_name) |
| 316 | + ) |
337 | 317 | end |
338 | | - end |
339 | | -end) |
| 318 | +end |
| 319 | +end |
340 | 320 |
|
341 | 321 | -- Craft items |
342 | 322 |
|
|
0 commit comments