From c95cd8414b8917a80fe125da18c4c0858d74b1c9 Mon Sep 17 00:00:00 2001 From: BlockMen Date: Tue, 16 Sep 2014 17:11:54 +0200 Subject: [PATCH] Fix xpanes API --- game_api.txt | 6 +----- mods/xpanes/init.lua | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/game_api.txt b/game_api.txt index 4eb2d782..1ad618dc 100644 --- a/game_api.txt +++ b/game_api.txt @@ -120,7 +120,7 @@ Xpanes API Creates panes that automatically connect to each other xpanes.register_pane(subname, def) - -> subname: used for nodename. Result: "xpanes:subname_{1..16}" + -> subname: used for nodename. Result: "xpanes:subname" and "xpanes:subname_{2..15}" -> def: See [#Pane definition] #Pane definition @@ -134,10 +134,6 @@ xpanes.register_pane(subname, def) ^ See [#Default sounds] recipe = {{"","","","","","","","",""}}, ^ Recipe field only - on_construct = function(pos) - update_pane(pos, "pane") - end, - ^ Required to handle rotation correctly } Default sounds diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua index 506b83cb..b9c578eb 100644 --- a/mods/xpanes/init.lua +++ b/mods/xpanes/init.lua @@ -37,9 +37,18 @@ end local function update_nearby(pos, node) node = node or minetest.get_node(pos) - if node.name:sub(1, 7) ~= "xpanes:" then return end - local underscore_pos = node.name:find("_") or 0 - local name = node.name:sub(8, underscore_pos - 1) + local name = node.name + if not name or node.name:sub(1, 7) ~= "xpanes:" then + return + end + local underscore_pos = string.find(name, "_[^_]*$") or 0 + local len = name:len() + local num = tonumber(name:sub(underscore_pos+1, len)) + if not num or num < 1 or num > 15 then + name = name:sub(8) + else + name = name:sub(8, underscore_pos - 1) + end for i, dir in pairs(directions) do update_pane({ x = pos.x + dir.x, @@ -105,7 +114,7 @@ function xpanes.register_pane(name, def) if cnt == 1 then texture = def.textures[1].."^"..def.textures[2] end - minetest.register_node("xpanes:"..name.."_"..i, { + minetest.register_node(":xpanes:"..name.."_"..i, { drawtype = "nodebox", tiles = {def.textures[3], def.textures[3], texture}, paramtype = "light", @@ -123,7 +132,11 @@ function xpanes.register_pane(name, def) }) end - minetest.register_node("xpanes:"..name, def) + def.on_construct = function(pos) + update_pane(pos, name) + end + + minetest.register_node(":xpanes:"..name, def) minetest.register_craft({ output = "xpanes:"..name.." 16", @@ -150,9 +163,6 @@ xpanes.register_pane("pane", { wield_image = "default_glass.png", sounds = default.node_sound_glass_defaults(), groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3, pane=1}, - on_construct = function(pos) - update_pane(pos, "pane") - end, recipe = { {'default:glass', 'default:glass', 'default:glass'}, {'default:glass', 'default:glass', 'default:glass'} @@ -175,9 +185,6 @@ xpanes.register_pane("bar", { wield_image = "xpanes_bar.png", groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3, pane=1}, sounds = default.node_sound_stone_defaults(), - on_construct = function(pos) - update_pane(pos, "bar") - end, recipe = { {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}