Fix xpanes API
authorBlockMen <nmuelll@web.de>
Tue, 16 Sep 2014 15:11:54 +0000 (17:11 +0200)
committerBlockMen <nmuelll@web.de>
Tue, 16 Sep 2014 15:11:54 +0000 (17:11 +0200)
game_api.txt
mods/xpanes/init.lua

index 4eb2d7827109adf23eb339b5c6d3d7d36014c1df..1ad618dc46829fa31785933f0e4e8f31c8394753 100644 (file)
@@ -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
index 506b83cbff2f6890b7b3680849410a450779eebe..b9c578eba037c65af5f8c493dacaca22d725a7f2 100644 (file)
@@ -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'}