laptop/hardware_fw.lua

70 lines
2.4 KiB
Lua

-- hardware_fw.lua (Minimal-Version für Deko-Zwecke)
laptop.node_config = {}
-- 1. Die neue, extrem vereinfachte Punch-Funktion
-- Diese Funktion tut nur noch eine Sache: Sie schaltet zum nächsten Node in der Sequenz um.
local function on_punch(pos, node, puncher)
-- Finde die Konfiguration des aktuellen Nodes
local hwdef = laptop.node_config[node.name]
-- Wenn ein "nächster Node" definiert ist, wechsle zu diesem.
if hwdef and hwdef.next_node then
-- KORREKTUR: Wir übergeben auch den alten param2-Wert, um die Ausrichtung beizubehalten.
minetest.swap_node(pos, {name = hwdef.next_node, param2 = node.param2})
end
end
-- 2. Die neue, entschlackte Registrierungs-Funktion
-- Diese "Fabrik" baut die Nodes. Wir haben alles entfernt, was nicht für die reine
-- Darstellung und die simple Punch-Funktion gebraucht wird.
function laptop.register_hardware(name, hwdef)
local default_nodename = name.."_"..hwdef.sequence[1]
for idx, variant in ipairs(hwdef.sequence) do
local nodename = name.."_"..variant
local def = table.copy(hwdef.node_defs[variant])
def.description = hwdef.description
-- Basis-Gruppen, damit man den Node abbauen kann
if def.groups then
def.groups = table.copy(def.groups) -- Behalte ggf. spezifische Gruppen
else
def.groups = {choppy=2, oddly_breakably_by_hand=2, dig_immediate=2}
end
-- Wenn es nicht der Standard-Node ist, droppe den Standard-Node
if nodename ~= default_nodename then
def.drop = default_nodename
def.groups.not_in_creative_inventory = 1
end
-- Weise unsere simple Punch-Funktion zu
def.on_punch = on_punch
-- Registriere den Node bei Minetest
minetest.register_node(nodename, def)
-- Speichere die Konfiguration für unsere Punch-Funktion
local merged_hwdef = {}
merged_hwdef.name = name
merged_hwdef.nodename = nodename
-- Finde den nächsten Node in der Sequenz (z.B. "on" -> "off")
local next_seq = hwdef.sequence[idx+1] or hwdef.sequence[1]
local next_node = name.."_"..next_seq
if next_node ~= nodename then
merged_hwdef.next_node = next_node
end
laptop.node_config[nodename] = merged_hwdef
end
-- Wenn eine spezielle Item-Definition für Batterien etc. da war,
-- ersetzen wir sie durch einen simplen Alias, damit die Crafting-Rezepte nicht ins Leere laufen.
if hwdef.inventory_image then
minetest.register_alias(name.."_item", default_nodename)
end
end