forked from luanti-org/minetest_game
		
	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