1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
vzxv.include "event.lua"
function vzxv.mundane_block(name,visualname,tiles,settings)
settings = settings or {}
settings.description = visualname
if type(tiles)=="string" then tiles = {"vzxv"..tiles..".png"} end
if not tiles then tiles = {name:gsub(':','')..".png"} end
settings.tiles = tiles
minetest.register_node(name, settings)
end
function vzxv.slabs(name,visualname,tiles,settings)
settings = settings or {}
vzxv.mundane_block(name,visualname,tiles,settings)
for i=1, 3 do
local newsettings = {}
for k, v in pairs(settings) do newsettings[k] = v end
newsettings.node_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0.25*i-0.5, 0.5}}
newsettings.drawtype = "nodebox"
vzxv.mundane_block(name..i,(i==2 and "1/2" or i.."/4")..visualname,tiles,newsettings)
end
end
function vzxv.check_adjacent(pos,block)
local gn = minetest.get_node
return
gn{x=pos.x + 1, y=pos.y , z=pos.z }.name == block or
gn{x=pos.x - 1, y=pos.y , z=pos.z }.name == block or
gn{x=pos.x , y=pos.y + 1, z=pos.z }.name == block or
gn{x=pos.x , y=pos.y - 1, z=pos.z }.name == block or
gn{x=pos.x , y=pos.y , z=pos.z + 1}.name == block or
gn{x=pos.x , y=pos.y , z=pos.z - 1}.name == block or
gn{x=pos.x , y=pos.y , z=pos.z }.name == block
end
function vzxv.round_pos(pos)
return {
x = math.floor(pos.x+0.5),
y = math.floor(pos.y+0.5),
z = math.floor(pos.z+0.5),
}
end
-- wrap metadata
function vzxv.meta(pos)
local meta = minetest.get_meta(pos)
local m = meta:to_table()
setmetatable(m, {pos=pos})
return m
end
-- store wrapped metadata
function vzxv.store(data)
local pos = getmetatable(data).pos
return minetest.get_meta(pos):from_table(data)
end
|