Xpanes: fixes and cleanup

This commit is contained in:
MoNTE48 2020-03-28 16:51:48 +01:00
parent 27cf2c26a3
commit 6b38c1e56f
7 changed files with 195 additions and 0 deletions

View File

@ -8,3 +8,4 @@ Originally by xyz (MIT)
BlockMen (MIT) BlockMen (MIT)
sofar (MIT) sofar (MIT)
Various Minetest developers and contributors (MIT) Various Minetest developers and contributors (MIT)
MultiCraft Development Team (MIT)

2
files/xpanes/depends.txt Normal file
View File

@ -0,0 +1,2 @@
default
dye

View File

@ -0,0 +1,191 @@
local function is_pane(pos)
return minetest.get_item_group(minetest.get_node(pos).name, "pane") > 0
end
local vector_add = vector.add
local function connects_dir(pos, name, dir)
local aside = vector_add(pos, minetest.facedir_to_dir(dir))
if is_pane(aside) then
return true
end
local connects_to = minetest.registered_nodes[name].connects_to
if not connects_to then
return false
end
local list = minetest.find_nodes_in_area(aside, aside, connects_to)
if #list > 0 then
return true
end
return false
end
local function swap(pos, node, name, param2)
if node.name == name and node.param2 == param2 then
return
end
minetest.swap_node(pos, {name = name, param2 = param2})
end
local function update_pane(pos)
if not is_pane(pos) then
return
end
local node = minetest.get_node(pos)
local name = node.name
if name:sub(-5) == "_flat" then
name = name:sub(1, -6)
end
local any = node.param2
local c = {}
local count = 0
for dir = 0, 3 do
c[dir] = connects_dir(pos, name, dir)
if c[dir] then
any = dir
count = count + 1
end
end
if count == 0 then
swap(pos, node, name .. "_flat", any)
elseif count == 1 then
swap(pos, node, name .. "_flat", (any + 1) % 4)
elseif count == 2 then
if (c[0] and c[2]) or (c[1] and c[3]) then
swap(pos, node, name .. "_flat", (any + 1) % 4)
else
swap(pos, node, name, 0)
end
else
swap(pos, node, name, 0)
end
end
minetest.register_on_placenode(function(pos, node)
if minetest.get_item_group(node, "pane") then
update_pane(pos)
end
for i = 0, 3 do
local dir = minetest.facedir_to_dir(i)
update_pane(vector_add(pos, dir))
end
end)
minetest.register_on_dignode(function(pos)
for i = 0, 3 do
local dir = minetest.facedir_to_dir(i)
update_pane(vector_add(pos, dir))
end
end)
xpanes = {}
function xpanes.register_pane(name, def)
local flatgroups = table.copy(def.groups)
flatgroups.pane = 1
minetest.register_node(":xpanes:" .. name .. "_flat", {
description = def.description,
drawtype = "nodebox",
paramtype = "light",
is_ground_content = false,
sunlight_propagates = true,
inventory_image = def.inventory_image,
wield_image = def.wield_image,
paramtype2 = "facedir",
tiles = {
def.textures[2], def.textures[2], def.textures[2],
def.textures[2], def.textures[1], def.textures[1]
},
groups = flatgroups,
drop = "xpanes:" .. name .. "_flat",
sounds = def.sounds,
use_texture_alpha = def.use_texture_alpha or false,
node_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}
},
connect_sides = {"left", "right"}
})
local groups = table.copy(def.groups)
groups.pane = 1
groups.not_in_creative_inventory = 1
minetest.register_node(":xpanes:" .. name, {
drawtype = "nodebox",
paramtype = "light",
is_ground_content = false,
sunlight_propagates = true,
description = def.description,
tiles = {
def.textures[2], def.textures[2], def.textures[1],
def.textures[1], def.textures[1], def.textures[1]
},
groups = groups,
drop = "xpanes:" .. name .. "_flat",
sounds = def.sounds,
use_texture_alpha = def.use_texture_alpha or false,
node_box = {
type = "connected",
fixed = {-1/32, -1/2, -1/32, 1/32, 1/2, 1/32},
connect_front = {-1/32, -1/2, -1/2, 1/32, 1/2, -1/32},
connect_left = {-1/2, -1/2, -1/32, -1/32, 1/2, 1/32},
connect_back = {-1/32, -1/2, 1/32, 1/32, 1/2, 1/2},
connect_right = { 1/32, -1/2, -1/32, 1/2, 1/2, 1/32}
},
connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}
})
if def.recipe then
minetest.register_craft({
output = "xpanes:" .. name .. "_flat " .. def.recipe_items,
recipe = def.recipe
})
end
for i = 1, 15 do
minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat")
end
end
xpanes.register_pane("pane", {
description = "Glass Pane",
textures = {"default_glass.png", "xpanes_top_glass.png"},
sounds = default.node_sound_glass_defaults(),
groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3, glasspane = 1},
recipe = {
{"default:glass", "default:glass", "default:glass"},
{"default:glass", "default:glass", "default:glass"}
},
recipe_items = "16"
})
xpanes.register_pane("bar", {
description = "Steel Bars",
textures = {"xpanes_bar.png", "xpanes_bar_top.png"},
inventory_image = "xpanes_bar.png",
wield_image = "xpanes_bar.png",
groups = {cracky = 2},
sounds = default.node_sound_metal_defaults(),
recipe = {
{"default:steel_ingot", "default:steel_ingot"},
{"default:steel_ingot", "default:steel_ingot"}
},
recipe_items = "12"
})
minetest.register_lbm({
name = "xpanes:gen2",
nodenames = {"group:pane"},
action = function(pos)
update_pane(pos)
for i = 0, 3 do
local dir = minetest.facedir_to_dir(i)
update_pane(vector_add(pos, dir))
end
end
})

View File

@ -6,6 +6,7 @@ Copyright (C) 2014-2016 xyz
Copyright (C) 2014-2016 BlockMen Copyright (C) 2014-2016 BlockMen
Copyright (C) 2016 Auke Kok <sofar@foo-projects.org> Copyright (C) 2016 Auke Kok <sofar@foo-projects.org>
Copyright (C) 2014-2016 Various Minetest developers and contributors Copyright (C) 2014-2016 Various Minetest developers and contributors
Copyright (C) 2019-2020 MultiCraft Development Team
Permission is hereby granted, free of charge, to any person obtaining a copy of this Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software software and associated documentation files (the "Software"), to deal in the Software

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B