tidy code

This commit is contained in:
tenplus1 2024-08-16 16:07:17 +01:00
parent 91917a507e
commit add0cd4ab2

233
init.lua
View File

@ -1,5 +1,6 @@
-- our API object
-- global
doors = {
mod = "redo",
registered_doors = {},
@ -8,6 +9,8 @@ doors = {
local S = minetest.get_translator("doors") -- translation support
-- replace old doors_owner with new owner
local function replace_old_owner_information(pos)
local meta = minetest.get_meta(pos)
@ -19,8 +22,8 @@ local function replace_old_owner_information(pos)
end
end
-- returns an object to a door object or nil
function doors.get(pos)
local node_name = minetest.get_node(pos).name
@ -34,18 +37,14 @@ function doors.get(pos)
open = function(self, player)
if self:state() then
return false
end
if self:state() then return false end
return doors.door_toggle(self.pos, nil, player)
end,
close = function(self, player)
if not self:state() then
return false
end
if not self:state() then return false end
return doors.door_toggle(self.pos, nil, player)
end,
@ -71,18 +70,14 @@ function doors.get(pos)
open = function(self, player)
if self:state() then
return false
end
if self:state() then return false end
return doors.trapdoor_toggle(self.pos, nil, player)
end,
close = function(self, player)
if not self:state() then
return false
end
if not self:state() then return false end
return doors.trapdoor_toggle(self.pos, nil, player)
end,
@ -100,6 +95,7 @@ function doors.get(pos)
return nil
end
-- node can_dig function
local can_dig_door = function(pos, digger)
@ -128,20 +124,17 @@ local can_dig_door = function(pos, digger)
return false
end
if not minetest.is_protected(pos, pname) then
return true
end
if not minetest.is_protected(pos, pname) then return true end
return false
end
-- can we open door helper function
local can_toggle = function(clicker, pos)
-- check for fake player
if clicker and clicker.is_fake_player then
return true
end
if clicker and clicker.is_fake_player then return true end
if not clicker then return end
@ -151,19 +144,13 @@ local can_toggle = function(clicker, pos)
local pname = clicker:get_player_name()
-- is door open for all
if owner == "" and prot == "" then
return true
end
if owner == "" and prot == "" then return true end
-- do we own door
if owner == pname then
return true
end
if owner == pname then return true end
-- check if door protected and we have permission
if prot ~= "" and not minetest.is_protected(pos, pname) then
return true
end
if prot ~= "" and not minetest.is_protected(pos, pname) then return true end
-- get what's in our hand
local item = clicker and clicker:get_wielded_item()
@ -197,9 +184,9 @@ local can_toggle = function(clicker, pos)
return false
end
-- this hidden node is placed on top of the bottom, and prevents
-- nodes from being placed in the top half of the door.
minetest.register_node("doors:hidden", {
description = S("Hidden Door Segment"),
-- can't use airlike otherwise falling nodes will turn to entities
@ -231,35 +218,28 @@ minetest.register_node("doors:hidden", {
}
})
-- table used to aid door opening/closing
local transform = {
{
{ v = "_a", param2 = 3 },
{ v = "_a", param2 = 0 },
{ v = "_a", param2 = 1 },
{ v = "_a", param2 = 2 }
{ v = "_a", param2 = 3 }, { v = "_a", param2 = 0 },
{ v = "_a", param2 = 1 }, { v = "_a", param2 = 2 }
},
{
{ v = "_b", param2 = 1 },
{ v = "_b", param2 = 2 },
{ v = "_b", param2 = 3 },
{ v = "_b", param2 = 0 }
{ v = "_b", param2 = 1 }, { v = "_b", param2 = 2 },
{ v = "_b", param2 = 3 }, { v = "_b", param2 = 0 }
},
{
{ v = "_b", param2 = 1 },
{ v = "_b", param2 = 2 },
{ v = "_b", param2 = 3 },
{ v = "_b", param2 = 0 }
{ v = "_b", param2 = 1 }, { v = "_b", param2 = 2 },
{ v = "_b", param2 = 3 }, { v = "_b", param2 = 0 }
},
{
{ v = "_a", param2 = 3 },
{ v = "_a", param2 = 0 },
{ v = "_a", param2 = 1 },
{ v = "_a", param2 = 2 }
{ v = "_a", param2 = 3 }, { v = "_a", param2 = 0 },
{ v = "_a", param2 = 1 }, { v = "_a", param2 = 2 }
}
}
-- door node on_rightclick function
function doors.door_toggle(pos, node, clicker)
@ -287,9 +267,7 @@ function doors.door_toggle(pos, node, clicker)
replace_old_owner_information(pos)
if not can_toggle(clicker, pos) then
return false
end
if not can_toggle(clicker, pos) then return false end
-- until Lua-5.2 we have no bitwise operators :(
if state % 2 == 1 then
@ -326,6 +304,7 @@ function doors.door_toggle(pos, node, clicker)
return true
end
-- door on_place helper function
local function on_place_node(place_to, newnode, placer, oldnode, itemstack, pointed_thing)
@ -350,12 +329,11 @@ local function on_place_node(place_to, newnode, placer, oldnode, itemstack, poin
end
end
-- register door function
function doors.register(name, def)
if not name:find(":") then
name = "doors:" .. name
end
if not name:find(":") then name = "doors:" .. name end
-- replace old doors of this type automatically
minetest.register_lbm({
@ -396,7 +374,7 @@ function doors.register(name, def)
-- wipe meta on top node as it's unused
minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z},
{name = "doors:hidden", param2 = p3})
{name = "doors:hidden", param2 = p3})
end
})
@ -409,16 +387,13 @@ function doors.register(name, def)
local pos
if pointed_thing.type ~= "node" then
return itemstack
end
if pointed_thing.type ~= "node" then return itemstack end
local doorname = itemstack:get_name()
local node = minetest.get_node(pointed_thing.under)
local pdef = minetest.registered_nodes[node.name]
if pdef
and pdef.on_rightclick
if pdef and pdef.on_rightclick
and not (placer and placer:is_player()
and placer:get_player_control().sneak) then
@ -433,18 +408,14 @@ function doors.register(name, def)
node = minetest.get_node(pos)
pdef = minetest.registered_nodes[node.name]
if not pdef or not pdef.buildable_to then
return itemstack
end
if not pdef or not pdef.buildable_to then return itemstack end
end
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
local top_node = minetest.get_node_or_nil(above)
local topdef = top_node and minetest.registered_nodes[top_node.name]
if not topdef or not topdef.buildable_to then
return itemstack
end
if not topdef or not topdef.buildable_to then return itemstack end
local pn = placer and placer:get_player_name() or ""
@ -564,9 +535,7 @@ function doors.register(name, def)
local prot = meta:get_string("doors_protected")
-- Door is neither owned not protected
if owner == "" and prot == "" then
return nil
end
if owner == "" and prot == "" then return nil end
-- verify placer is owner of lockable door
if owner ~= pname and prot ~= pname then
@ -592,9 +561,7 @@ function doors.register(name, def)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner") or ""
if owner ~= "" or minetest.is_protected(pos, "") then
return
end
if owner ~= "" or minetest.is_protected(pos, "") then return end
minetest.remove_node(pos)
@ -646,6 +613,7 @@ function doors.register(name, def)
doors.registered_doors[name .. "_b"] = true
end
-- register doors
doors.register("door_wood", {
tiles = {{name = "doors_door_wood.png", backface_culling = true}},
@ -661,7 +629,6 @@ doors.register("door_wood", {
}
})
doors.register("door_steel", {
tiles = {{name = "doors_door_steel.png", backface_culling = true}},
description = S("Steel Door"),
@ -680,7 +647,6 @@ doors.register("door_steel", {
}
})
doors.register("door_glass", {
tiles = { "doors_door_glass.png"},
description = S("Glass Door"),
@ -698,7 +664,6 @@ doors.register("door_glass", {
}
})
doors.register("door_obsidian_glass", {
tiles = { "doors_door_obsidian_glass.png" },
description = S("Obsidian Glass Door"),
@ -716,8 +681,8 @@ doors.register("door_obsidian_glass", {
}
})
-- special doors (CC0 textures by Phiwari123 and IceAgeComing)
doors.register("door_phiwari", {
tiles = {{name = "doors_door_phiwari.png", backface_culling = true}},
description = "Phiwari: " .. S("Wooden Door"),
@ -732,7 +697,6 @@ doors.register("door_phiwari", {
}
})
doors.register("door_iceage", {
tiles = {{name = "doors_door_iceage.png", backface_culling = true}},
description = "IceAge: " .. S("Wooden Door"),
@ -747,13 +711,11 @@ doors.register("door_iceage", {
}
})
-- Capture mods using the old API as best as possible.
function doors.register_door(name, def)
if def.only_placer_can_open then
def.protected = true
end
if def.only_placer_can_open then def.protected = true end
def.only_placer_can_open = nil
@ -777,7 +739,7 @@ function doors.register_door(name, def)
doors.register(name, def)
end
----trapdoor----
-- trapdoor node on_rightclick function
function doors.trapdoor_toggle(pos, node, clicker)
@ -785,9 +747,7 @@ function doors.trapdoor_toggle(pos, node, clicker)
node = node or minetest.get_node(pos)
if not can_toggle(clicker, pos) then
return false
end
if not can_toggle(clicker, pos) then return false end
local def = minetest.registered_nodes[node.name]
@ -811,12 +771,11 @@ function doors.trapdoor_toggle(pos, node, clicker)
end
end
-- register trapdoor function
function doors.register_trapdoor(name, def)
if not name:find(":") then
name = "doors:" .. name
end
if not name:find(":") then name = "doors:" .. name end
local name_closed = name
local name_opened = name.."_open"
@ -867,9 +826,7 @@ function doors.register_trapdoor(name, def)
local prot = meta:get_string("doors_protected")
-- Door is neither owned not protected
if owner == "" and prot == "" then
return nil
end
if owner == "" and prot == "" then return nil end
-- verify placer is owner of lockable door
if owner ~= pname and prot ~= pname then
@ -895,9 +852,7 @@ function doors.register_trapdoor(name, def)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner") or ""
if owner ~= "" or minetest.is_protected(pos, "") then
return
end
if owner ~= "" or minetest.is_protected(pos, "") then return end
minetest.remove_node(pos)
@ -930,14 +885,12 @@ function doors.register_trapdoor(name, def)
def_closed.node_box = def.nodebox_closed
else
def_closed.node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5}
type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5}
}
end
def_closed.selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5}
type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5}
}
def_closed.tiles = {
@ -953,14 +906,12 @@ function doors.register_trapdoor(name, def)
def_opened.node_box = def.nodebox_opened
else
def_opened.node_box = {
type = "fixed",
fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5}
type = "fixed", fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5}
}
end
def_opened.selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5}
type = "fixed", fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5}
}
def_opened.tiles = {
@ -982,6 +933,7 @@ function doors.register_trapdoor(name, def)
doors.registered_trapdoors[name_closed] = true
end
-- register trapdoors with recipes
doors.register_trapdoor("doors:trapdoor", {
description = S("Wooden Trapdoor"),
@ -1026,6 +978,7 @@ minetest.register_craft({
})
-- based on castle_2 texture by sorcerykid's extra_doors mod
doors.register_trapdoor("doors:trapdoor_oak", {
description = S("Oak Trapdoor"),
inventory_image = "doors_trapdoor_oak.png",
@ -1046,7 +999,7 @@ minetest.register_craft({
}
})
-----lock tool-----
-- lock tool and recipe (use on doors to set to open, lock or protect)
minetest.register_tool("doors:lock_tool", {
description = S("Lock Tool"),
@ -1056,8 +1009,7 @@ minetest.register_tool("doors:lock_tool", {
local pos = pointed_thing.under
if pointed_thing.type ~= "node"
or not doors.get(pos) then
if pointed_thing.type ~= "node" or not doors.get(pos) then
return
end
@ -1070,8 +1022,7 @@ minetest.register_tool("doors:lock_tool", {
local ok = 0
local infotext = ""
if prot == ""
and owner == "" then
if prot == "" and owner == "" then
-- flip normal to owned
if minetest.is_protected(pos, player_name) then
@ -1084,8 +1035,7 @@ minetest.register_tool("doors:lock_tool", {
ok = 1
end
elseif prot == ""
and owner ~= "" then
elseif prot == "" and owner ~= "" then
-- flip owned to protected
if player_name == owner then
@ -1096,8 +1046,7 @@ minetest.register_tool("doors:lock_tool", {
ok = 1
end
elseif prot ~= ""
and owner == "" then
elseif prot ~= "" and owner == "" then
-- flip protected to normal
if player_name == prot then
@ -1137,10 +1086,11 @@ minetest.register_craft({
minetest.register_alias("doors:key", "doors:lock_tool")
----fence gate----
-- fence gate tall collision box setting
local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0
-- fence gate node on_rightclick function
function doors.fencegate_toggle(pos, node, clicker)
@ -1152,6 +1102,7 @@ function doors.fencegate_toggle(pos, node, clicker)
max_hear_distance = 8}, true)
end
-- register fence gate function
function doors.register_fencegate(name, def)
@ -1176,8 +1127,7 @@ function doors.register_fencegate(name, def)
end,
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}
type = "fixed", fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}
}
}
@ -1243,6 +1193,7 @@ function doors.register_fencegate(name, def)
})
end
-- register fence gates
doors.register_fencegate("doors:gate_wood", {
description = S("Apple Wood Fence Gate"),
@ -1279,57 +1230,29 @@ doors.register_fencegate("doors:gate_aspen_wood", {
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}
})
----fuels----
-- burnable items
minetest.register_craft({
type = "fuel",
recipe = "doors:trapdoor",
burntime = 7
})
minetest.register_craft({type = "fuel", recipe = "doors:trapdoor", burntime = 7})
minetest.register_craft({
type = "fuel",
recipe = "doors:trapdoor_oak",
burntime = 10
})
minetest.register_craft({type = "fuel", recipe = "doors:trapdoor_oak", burntime = 10})
minetest.register_craft({
type = "fuel",
recipe = "doors:door_wood",
burntime = 14
})
minetest.register_craft({type = "fuel", recipe = "doors:door_wood", burntime = 14})
minetest.register_craft({
type = "fuel",
recipe = "doors:gate_wood_closed",
burntime = 7
})
minetest.register_craft({type = "fuel", recipe = "doors:gate_wood_closed", burntime = 7})
minetest.register_craft({
type = "fuel",
recipe = "doors:gate_acacia_wood_closed",
burntime = 8
})
minetest.register_craft({type = "fuel", recipe = "doors:gate_acacia_wood_closed",
burntime = 8})
minetest.register_craft({
type = "fuel",
recipe = "doors:gate_junglewood_closed",
burntime = 9
})
minetest.register_craft({type = "fuel", recipe = "doors:gate_junglewood_closed",
burntime = 9})
minetest.register_craft({
type = "fuel",
recipe = "doors:gate_pine_wood_closed",
burntime = 6
})
minetest.register_craft({type = "fuel", recipe = "doors:gate_pine_wood_closed",
burntime = 6})
minetest.register_craft({
type = "fuel",
recipe = "doors:gate_aspen_wood_closed",
burntime = 5
})
minetest.register_craft({type = "fuel", recipe = "doors:gate_aspen_wood_closed",
burntime = 5})
-- old key into iron
-- old key into iron recipe
minetest.register_craft({
output = "default:iron_lump",