70 lines
2.4 KiB
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
|