Rewrite node registration

This commit is contained in:
Jordan Irwin 2021-08-25 07:20:33 -07:00
parent 111f4b611c
commit 4d5d39fc02
6 changed files with 58 additions and 251 deletions

View File

@ -1,35 +0,0 @@
--- Glass craft recipes.
--
-- @module crafting
--- Cooking Recipes.
--
-- @section cooking
--- Glass recipe.
--
-- @recipe glass:plain
-- @rtype cooking
-- @output 1
-- @input group:sand
core.register_craft({
type = "cooking",
output = "glass:plain",
recipe = "group:sand",
})
--- Obsidian glass recipe.
--
-- @recipe glass:obsidian
-- @rtype cooking
-- @output 1
-- @input default:obsidian_shard
core.register_craft({
type = "cooking",
output = "glass:obsidian",
recipe = "default:obsidian_shard",
})

View File

@ -1,24 +0,0 @@
--- Glass functions.
--
-- @module functions
--- Sounds
--
-- @section sounds
--- Retrieves sounds for glass nodes.
--
-- @function glass.node_sounds
-- @tparam tbl table
function glass.node_sounds(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or {name="glass_footstep", gain=0.3}
tbl.dig = tbl.dig or {name="glass_footstep", gain=0.5}
tbl.dug = tbl.dug or {name="glass_break", gain=1.0}
default.node_sound_defaults(tbl)
return tbl
end

View File

@ -1,13 +1,4 @@
--- Glass initialization script.
--
-- @module init
if not core.global_exists("sounds") and not core.global_exists("default") then
error("this mod requires either \"sounds\" or \"default\"")
end
glass = {}
glass.modname = core.get_current_modname()
glass.modpath = core.get_modpath(glass.modname)
@ -28,11 +19,9 @@ end
local scripts = {
--"functions",
"nodes",
--"crafting",
}
for _, s in ipairs(scripts) do
dofile(glass.modpath .. "/" .. s .. ".lua")
for _, script in ipairs(scripts) do
dofile(glass.modpath .. "/" .. script .. ".lua")
end

View File

@ -2,5 +2,4 @@ name = glass
description = Enhances default glass to make it colorable.
version = 1.1
author = Jordan Irwin (AntumDeluge)
depends = unifieddyes
optional_depends = sounds, default, stairs
optional_depends = sounds, default, unifieddyes, stairs

230
nodes.lua
View File

@ -7,190 +7,66 @@
local S = core.get_translator()
local glass_nodes = {
-- default
{
name = "default:glass",
description = S("Glass"),
tiles = {"glass_plain.png", "glass_plain_detail.png"},
local colored = core.global_exists("unifieddyes") ~= nil
local glass_sounds = core.global_exists("sounds") and sounds.node_glass() or nil
local base_def = {
drawtype = "glasslike_framed_optional",
paramtype = "light",
paramtype2 = colored and "color" or "glasslikeliquidlevel",
palette = colored and "unifieddyes_palette_extended.png" or nil,
sunlight_propagates = true,
is_ground_content = false,
sounds = glass_sounds,
groups = {
cracky = 3,
oddly_breakable_by_hand = 3,
ud_param2_colorable = colored and 1 or nil,
},
{
name = "default:obsidian_glass",
description = S("Obsidian Glass"),
tiles = {"glass_obsidian.png", "glass_obsidian_detail.png"},
},
-- stairs
{
name = "stairs:stair_glass",
},
{
name = "stairs:stair_inner_glass",
},
{
name = "stairs:stair_outer_glass",
},
{
name = "stairs:slab_glass",
},
{
name = "stairs:stair_obsidian_glass",
},
{
name = "stairs:stair_inner_obsidian_glass",
},
{
name = "stairs:stair_outer_obsidian_glass",
},
{
name = "stairs:slab_obsidian_glass",
},
-- ???
{
name = "default:glass_cube",
},
{
name = "default:glass_doublepanel",
},
{
name = "default:glass_micropanel",
},
{
name = "default:glass_microslab",
},
{
name = "default:glass_nanoslab",
},
{
name = "default:glass_panel",
},
{
name = "default:obsidian_glass_cube",
},
{
name = "default:obsidian_glass_doublepanel",
},
{
name = "default:obsidian_glass_micropanel",
},
{
name = "default:obsidian_glass_microslab",
},
{
name = "default:obsidian_glass_nanoslab",
},
{
name = "default:obsidian_glass_panel",
},
-- xpanes
--[[ FIXME:
- overriding paramtype2 = "facedir" causes ugly connections
- connected nodes change color
{
name = "xpanes:pane_flat",
description = S("Glass Pane"),
paramtype2 = "facedir",
drawtype = "nodebox",
tiles = {
"glass_plain_edge.png",
"glass_plain_edge.png",
"glass_plain_edge.png",
"glass_plain_edge.png",
"glass_plain.png",
"glass_plain.png",
},
inventory_image = "default_glass.png",
wield_image = "default_glass.png",
node_box = {
type = "fixed",
fixed = {
{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32},
},
},
selection_box = {
type = "fixed",
fixed = {
{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32},
},
},
connect_sides = {"left", "right"},
groups = {cracky=3, oddly_breakable_by_hand=3, pane=1},
craft = {
recipe = {
{"default:glass", "default:glass", "default:glass"},
{"default:glass", "default:glass", "default:glass"},
},
},
},
]]
}
local nodes = {
plain = {
description = S("Glass"),
tiles = {"glass_plain.png", "glass_plain_detail.png"},
recipe = "group:sand",
},
obsidian = {
description = S("Obsidian Glass"),
tiles = {"glass_obsidian.png", "glass_obsidian_detail.png"},
recipe = core.registered_items["default:obsidian_shard"] and "default:obsidian_shard" or nil,
},
}
local next = next
for _, gn in ipairs(glass_nodes) do
if not gn.name or gn.name:trim() == "" then
glass.log("error", "cannot register node without \"name\" attribute")
else
local node = core.registered_nodes[gn.name]
for name, def in pairs(nodes) do
for k, v in pairs(base_def) do
def[k] = v
end
if node then
glass.log("info", "overriding node \"" .. gn.name .. "\" to be colorable")
core.register_node("glass:" .. name, def)
local groups = node.groups
groups["ud_param2_colorable"] = 1
core.override_item(gn.name, {
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
groups = groups,
on_dig = unifieddyes.on_dig,
})
elseif gn.tiles then
glass.log("info", "registering colorable node \"" .. gn.name .. "\"")
local def = {
description = gn.description,
drawtype = gn.drawtype or "glasslike_framed_optional",
tiles = gn.tiles,
inventory_image = gn.inventory_image,
wield_image = gn.wield_image,
node_box = gn.node_box,
selection_box = gn.selection_box,
connect_sides = gn.connect_sides,
--use_texture_alpha = "clip",
paramtype = "light",
--paramtype2 = gn.paramtype2 or "color",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
sunlight_propagates = true,
is_ground_content = false,
groups = gn.groups or {cracky=3, oddly_breakable_by_hand=3},
sounds = sounds.node_glass(),
on_dig = unifieddyes.on_dig,
}
def.groups["ud_param2_colorable"] = 1
core.register_node(":" .. gn.name, def)
if gn.craft then
core.unregister_craft({recipe=gn.craft.recipe})
local craft_def = {
output = gn.craft.output or gn.name,
recipe = gn.craft.recipe,
}
if gn.craft.count then craft_def.output = craft_def.output .. " " .. gn.craft.count end
core.register_craft(craft_def)
end
end
if def.recipe then
core.register_craft({
type = "cooking",
output = "glass:" .. name,
recipe = def.recipe,
})
end
end
-- backward compat (1.0)
if core.registered_nodes["default:glass"] then
core.register_alias("glass:plain", "default:glass")
end
if core.registered_nodes["default:obsidian_glass"] then
core.register_alias("glass:obsidian", "default:obsidian_glass")
if core.settings:get_bool("glass.override_default", true) then
local glass_overrides = {
["default:glass"] = "glass:plain",
["default:obsidian_glass"] = "glass:obsidian",
}
for glass_old, glass_new in pairs(glass_overrides) do
if core.registered_nodes[glass_old] then
core.unregister_item(glass_old)
core.clear_craft({output=glass_old})
end
core.register_alias(glass_old, glass_new)
end
end

2
settingtypes.txt Normal file
View File

@ -0,0 +1,2 @@
glass.override_default (Override default glass) bool true