Rewrite node registration
This commit is contained in:
parent
111f4b611c
commit
4d5d39fc02
35
crafting.lua
35
crafting.lua
@ -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",
|
||||
})
|
@ -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
|
15
init.lua
15
init.lua
@ -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
|
||||
|
3
mod.conf
3
mod.conf
@ -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
230
nodes.lua
@ -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
2
settingtypes.txt
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
glass.override_default (Override default glass) bool true
|
Loading…
x
Reference in New Issue
Block a user