Convert spaces to tabs and add unknown node checks to xpanes
authorShadowNinja <shadowninja@minetest.net>
Mon, 7 Jul 2014 01:49:47 +0000 (21:49 -0400)
committerShadowNinja <shadowninja@minetest.net>
Mon, 7 Jul 2014 01:49:47 +0000 (21:49 -0400)
mods/xpanes/init.lua

index 60ec68c15874616b8a1f122a15018d867f850f4e..a3f7828bf14fa9ceccdc658cc4f7bbc0ca35ab1e 100644 (file)
 xpanes = {}
 
 local function rshift(x, by)
-  return math.floor(x / 2 ^ by)
+       return math.floor(x / 2 ^ by)
 end
 
 local directions = {
-    {x = 1, y = 0, z = 0},
-    {x = 0, y = 0, z = 1},
-    {x = -1, y = 0, z = 0},
-    {x = 0, y = 0, z = -1},
+       {x = 1, y = 0, z = 0},
+       {x = 0, y = 0, z = 1},
+       {x = -1, y = 0, z = 0},
+       {x = 0, y = 0, z = -1},
 }
 
-local function update_pane(pos,name)
-    if minetest.get_node(pos).name:find("xpanes:"..name) == nil then
-        return
-    end
-    local sum = 0
-    for i = 1, 4 do
-        local node = minetest.get_node({x = pos.x + directions[i].x, y = pos.y + directions[i].y, z = pos.z + directions[i].z})
-       local pane_num = minetest.registered_nodes[node.name].groups.pane or 0
-        if (minetest.registered_nodes[node.name].walkable ~= false and minetest.registered_nodes[node.name].drawtype ~= "nodebox") or pane_num > 0 then
-            sum = sum + 2 ^ (i - 1)
-        end
-    end
-    if sum == 0 then
-        sum = 15
-    end
-    minetest.set_node(pos, {name = "xpanes:"..name.."_"..sum})
+local function update_pane(pos, name)
+       if not minetest.get_node(pos).name:find("^xpanes:"..name) then
+               return
+       end
+       local sum = 0
+       for i, dir in pairs(directions) do
+               local node = minetest.get_node({
+                       x = pos.x + dir.x,
+                       y = pos.y + dir.y,
+                       z = pos.z + dir.z
+               })
+               local def = minetest.registered_nodes[node.name]
+               local pane_num = def and def.groups.pane or 0
+               if pane_num > 0 or not def or (def.walkable ~= false and
+                               def.drawtype ~= "nodebox") then
+                       sum = sum + 2 ^ (i - 1)
+               end
+       end
+       if sum == 0 then
+               sum = 15
+       end
+       minetest.set_node(pos, {name = "xpanes:"..name.."_"..sum})
 end
 
-local function update_nearby(pos,n)
-    if n == nil then n = minetest.get_node(pos) end
-    if not n or not n.name then return end
-    local name = string.sub(n.name,8,10)
-    if name ~=  "bar" then name = "pane" end
-    for i = 1,4 do
-        update_pane({x = pos.x + directions[i].x, y = pos.y + directions[i].y, z = pos.z + directions[i].z}, name)
-    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)
+       for i, dir in pairs(directions) do
+               update_pane({
+                       x = pos.x + dir.x,
+                       y = pos.y + dir.y,
+                       z = pos.z + dir.z
+               }, name)
+       end
 end
 
-local half_blocks = {
-    {0, -0.5, -1/32, 0.5, 0.5, 1/32},
-    {-1/32, -0.5, 0, 1/32, 0.5, 0.5},
-    {-0.5, -0.5, -1/32, 0, 0.5, 1/32},
-    {-1/32, -0.5, -0.5, 1/32, 0.5, 0}
+local half_boxes = {
+       {0,     -0.5, -1/32, 0.5,  0.5, 1/32},
+       {-1/32, -0.5, 0,     1/32, 0.5, 0.5},
+       {-0.5,  -0.5, -1/32, 0,    0.5, 1/32},
+       {-1/32, -0.5, -0.5,  1/32, 0.5, 0}
 }
 
-local full_blocks = {
-    {-0.5, -0.5, -1/32, 0.5, 0.5, 1/32},
-    {-1/32, -0.5, -0.5, 1/32, 0.5, 0.5}
+local full_boxes = {
+       {-0.5,  -0.5, -1/32, 0.5,  0.5, 1/32},
+       {-1/32, -0.5, -0.5,  1/32, 0.5, 0.5}
 }
 
-local sb_half_blocks = {
-    {0, -0.5, -0.06, 0.5, 0.5, 0.06},
-    {-0.06, -0.5, 0, 0.06, 0.5, 0.5},
-    {-0.5, -0.5, -0.06, 0, 0.5, 0.06},
-    {-0.06, -0.5, -0.5, 0.06, 0.5, 0}
+local sb_half_boxes = {
+       {0,     -0.5, -0.06, 0.5,  0.5, 0.06},
+       {-0.06, -0.5, 0,     0.06, 0.5, 0.5},
+       {-0.5,  -0.5, -0.06, 0,    0.5, 0.06},
+       {-0.06, -0.5, -0.5,  0.06, 0.5, 0}
 }
 
-local sb_full_blocks = {
-    {-0.5, -0.5, -0.06, 0.5, 0.5, 0.06},
-    {-0.06, -0.5, -0.5, 0.06, 0.5, 0.5}
+local sb_full_boxes = {
+       {-0.5,  -0.5, -0.06, 0.5,  0.5, 0.06},
+       {-0.06, -0.5, -0.5,  0.06, 0.5, 0.5}
 }
---register panes and bars
+
 function xpanes.register_pane(name, def)
-for i = 1, 15 do
-    local need = {}
-    local cnt = 0
-    for j = 1, 4 do
-        if rshift(i, j - 1) % 2 == 1 then
-            need[j] = true
-            cnt = cnt + 1
-        end
-    end
-    local take = {}
-    local take2 = {}
-    if need[1] == true and need[3] == true then
-        need[1] = nil
-        need[3] = nil
-        table.insert(take, full_blocks[1])
-        table.insert(take2, sb_full_blocks[1])
-    end
-    if need[2] == true and need[4] == true then
-        need[2] = nil
-        need[4] = nil
-        table.insert(take, full_blocks[2])
-        table.insert(take2, sb_full_blocks[2])
-    end
-    for k in pairs(need) do
-        table.insert(take, half_blocks[k])
-        table.insert(take2, sb_half_blocks[k])
-    end
-    local texture = def.textures[1]
-    if cnt == 1 then
-        texture = def.textures[1].."^"..def.textures[2]
-    end
-    minetest.register_node("xpanes:"..name.."_"..i, {
-        drawtype = "nodebox",
-        tiles = {def.textures[3], def.textures[3], texture},
-        paramtype = "light",
-        groups = def.groups,
-        drop = "xpanes:"..name,
-       sounds = def.sounds,
-        node_box = {
-            type = "fixed",
-            fixed = take
-        },
-        selection_box = {
-            type = "fixed",
-            fixed = take2
-        }
-    })
-end
+       for i = 1, 15 do
+               local need = {}
+               local cnt = 0
+               for j = 1, 4 do
+                       if rshift(i, j - 1) % 2 == 1 then
+                               need[j] = true
+                               cnt = cnt + 1
+                       end
+               end
+               local take = {}
+               local take2 = {}
+               if need[1] == true and need[3] == true then
+                       need[1] = nil
+                       need[3] = nil
+                       table.insert(take, full_boxes[1])
+                       table.insert(take2, sb_full_boxes[1])
+               end
+               if need[2] == true and need[4] == true then
+                       need[2] = nil
+                       need[4] = nil
+                       table.insert(take, full_boxes[2])
+                       table.insert(take2, sb_full_boxes[2])
+               end
+               for k in pairs(need) do
+                       table.insert(take, half_boxes[k])
+                       table.insert(take2, sb_half_boxes[k])
+               end
+               local texture = def.textures[1]
+               if cnt == 1 then
+                       texture = def.textures[1].."^"..def.textures[2]
+               end
+               minetest.register_node("xpanes:"..name.."_"..i, {
+                       drawtype = "nodebox",
+                       tiles = {def.textures[3], def.textures[3], texture},
+                       paramtype = "light",
+                       groups = def.groups,
+                       drop = "xpanes:"..name,
+                       sounds = def.sounds,
+                       node_box = {
+                               type = "fixed",
+                               fixed = take
+                       },
+                       selection_box = {
+                               type = "fixed",
+                               fixed = take2
+                       }
+               })
+       end
 
-minetest.register_node("xpanes:"..name, def)
+       minetest.register_node("xpanes:"..name, def)
 
-minetest.register_craft({
-       output = "xpanes:"..name.." 16",
-       recipe = def.recipe
-})
+       minetest.register_craft({
+               output = "xpanes:"..name.." 16",
+               recipe = def.recipe
+       })
 end
 
 minetest.register_on_placenode(update_nearby)
 minetest.register_on_dignode(update_nearby)
 
 xpanes.register_pane("pane", {
-    description = "Glass Pane",
-    tiles = {"xpanes_space.png"},
-    drawtype = "airlike",
-    paramtype = "light",
-    sunlight_propagates = true,
-    walkable = false,
-    pointable = false,
-    diggable = false,
-    buildable_to = true,
-    air_equivalent = true,
-    textures = {"default_glass.png","xpanes_pane_half.png","xpanes_white.png"},
-    inventory_image = "default_glass.png",
-    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 = {
+       description = "Glass Pane",
+       tiles = {"xpanes_space.png"},
+       drawtype = "airlike",
+       paramtype = "light",
+       sunlight_propagates = true,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true,
+       air_equivalent = true,
+       textures = {"default_glass.png","xpanes_pane_half.png","xpanes_white.png"},
+       inventory_image = "default_glass.png",
+       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'}
+               {'default:glass', 'default:glass', 'default:glass'}
        }
 })
 
 xpanes.register_pane("bar", {
-    description = "Iron bar",
-    tiles = {"xpanes_space.png"},
-    drawtype = "airlike",
-    paramtype = "light",
-    sunlight_propagates = true,
-    walkable = false,
-    pointable = false,
-    diggable = false,
-    buildable_to = true,
-    air_equivalent = true,
-    textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_space.png"},
-    inventory_image = "xpanes_bar.png",
-    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 = {
+       description = "Iron bar",
+       tiles = {"xpanes_space.png"},
+       drawtype = "airlike",
+       paramtype = "light",
+       sunlight_propagates = true,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true,
+       air_equivalent = true,
+       textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_space.png"},
+       inventory_image = "xpanes_bar.png",
+       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:glass', 'default:glass'},
-        {'default:glass', 'default:glass', 'default:glass'}
+               {'default:glass', 'default:glass', 'default:glass'}
        }
 })
+