mirror of
				https://github.com/luanti-org/minetest_game.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Add glasspanes and ironbars
This commit is contained in:
		
							
								
								
									
										13
									
								
								mods/xpanes/README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								mods/xpanes/README.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
Minetest 0.4.x mod: xpanes
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
License:
 | 
			
		||||
--------
 | 
			
		||||
Copyright (C) xyz
 | 
			
		||||
modified by BlockMen (iron bars)
 | 
			
		||||
 | 
			
		||||
This program is free software. It comes without any warranty, to
 | 
			
		||||
the extent permitted by applicable law. You can redistribute it
 | 
			
		||||
and/or modify it under the terms of the Do What The Fuck You Want
 | 
			
		||||
To Public License, Version 2, as published by Sam Hocevar. See
 | 
			
		||||
http://sam.zoy.org/wtfpl/COPYING for more details.
 | 
			
		||||
							
								
								
									
										1
									
								
								mods/xpanes/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								mods/xpanes/depends.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
default
 | 
			
		||||
							
								
								
									
										173
									
								
								mods/xpanes/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								mods/xpanes/init.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,173 @@
 | 
			
		||||
local function rshift(x, 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},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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})
 | 
			
		||||
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
 | 
			
		||||
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 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 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_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}
 | 
			
		||||
}
 | 
			
		||||
--register panes and bars
 | 
			
		||||
local function register_panes(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
 | 
			
		||||
 | 
			
		||||
minetest.register_node("xpanes:"..name, def)
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "xpanes:"..name.." 16",
 | 
			
		||||
	recipe = def.recipe
 | 
			
		||||
})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_on_placenode(update_nearby)
 | 
			
		||||
minetest.register_on_dignode(update_nearby)
 | 
			
		||||
 | 
			
		||||
register_panes("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 = {
 | 
			
		||||
		{'default:glass', 'default:glass', 'default:glass'},
 | 
			
		||||
        {'default:glass', 'default:glass', 'default:glass'}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
register_panes("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 = {
 | 
			
		||||
		{'default:steel_ingot', 'default:glass', 'default:glass'},
 | 
			
		||||
        {'default:glass', 'default:glass', 'default:glass'}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_bar.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_bar.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 410 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_grey.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_grey.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 128 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_pane_half.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_pane_half.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 108 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_space.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_space.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 151 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_white.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mods/xpanes/textures/xpanes_white.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 150 B  | 
		Reference in New Issue
	
	Block a user