2020-11-15 20:25:38 +01:00
|
|
|
morelights = {}
|
|
|
|
|
|
|
|
-- TODO: Change node definition based on game if groups get too unwieldy.
|
|
|
|
|
|
|
|
function morelights.register_variants(variants, fixedDef)
|
|
|
|
for _, variant in ipairs(variants) do
|
|
|
|
local name = variant.name
|
|
|
|
local def = table.copy(fixedDef)
|
|
|
|
|
|
|
|
for k, v in pairs(variant) do
|
|
|
|
if k ~= "name" then
|
|
|
|
def[k] = v
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.register_node(name, def)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function morelights.on_place_hanging(itemstack, placer, pointed_thing,
|
|
|
|
ceilingName)
|
2021-09-05 16:06:04 +02:00
|
|
|
local ceiling = minetest.get_node(
|
|
|
|
vector.add(pointed_thing.above, vector.new(0, 1, 0)))
|
2020-11-15 20:25:38 +01:00
|
|
|
|
|
|
|
if ceiling.name ~= "air"
|
|
|
|
and minetest.get_item_group(ceiling.name, "mounted_ceiling") == 0
|
|
|
|
and not (placer and placer:get_player_control().sneak) then
|
|
|
|
-- Create a dummy itemstack with the ceiling variant's name.
|
|
|
|
local fakeStack = ItemStack(itemstack)
|
|
|
|
fakeStack:set_name(ceilingName)
|
|
|
|
|
|
|
|
minetest.item_place(fakeStack, placer, pointed_thing, 0)
|
|
|
|
|
|
|
|
-- Subtract an item from the real itemstack if a node was placed.
|
|
|
|
itemstack:set_count(fakeStack:get_count())
|
|
|
|
return itemstack
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.item_place(itemstack, placer, pointed_thing, 0)
|
|
|
|
return itemstack
|
|
|
|
end
|
|
|
|
|
|
|
|
function morelights.rotate_and_place(itemstack, placer, pointed_thing, lookup)
|
|
|
|
local dir = minetest.dir_to_wallmounted(
|
|
|
|
vector.subtract(pointed_thing.under, pointed_thing.above))
|
|
|
|
local fDirs = lookup or {[0] = 20, 0, 16, 12, 8, 4}
|
|
|
|
minetest.item_place(itemstack, placer, pointed_thing, fDirs[dir] or 0)
|
|
|
|
return itemstack
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
if minetest.get_modpath("mcl_core") then
|
|
|
|
morelights.game = "mineclone2"
|
|
|
|
elseif minetest.get_modpath("default") then
|
|
|
|
morelights.game = "minetest_game"
|
2021-09-05 16:06:04 +02:00
|
|
|
elseif minetest.get_modpath("hades_core") then
|
|
|
|
morelights.game = "hades_revisited"
|
2020-11-15 20:25:38 +01:00
|
|
|
else
|
|
|
|
error("Morelights requires a compatible game " ..
|
2021-09-05 16:06:04 +02:00
|
|
|
"(Minetest Game, MineClone 2, or Hades Revisited).")
|
2020-11-15 20:25:38 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
if morelights.game == "minetest_game" then
|
|
|
|
morelights.sounds = {
|
|
|
|
default = default.node_sound_defaults(),
|
|
|
|
glass = default.node_sound_glass_defaults(),
|
|
|
|
metal = default.node_sound_metal_defaults()
|
|
|
|
}
|
|
|
|
elseif morelights.game == "mineclone2" then
|
|
|
|
morelights.sounds = {
|
|
|
|
default = mcl_sounds.node_sound_defaults(),
|
|
|
|
glass = mcl_sounds.node_sound_glass_defaults(),
|
|
|
|
metal = mcl_sounds.node_sound_metal_defaults()
|
|
|
|
}
|
2021-09-05 16:06:04 +02:00
|
|
|
elseif morelights.game == "hades_revisited" then
|
|
|
|
morelights.sounds = {
|
|
|
|
default = hades_sounds.node_sound_defaults(),
|
|
|
|
glass = hades_sounds.node_sound_glass_defaults(),
|
|
|
|
metal = hades_sounds.node_sound_metal_defaults()
|
|
|
|
}
|
2020-11-15 20:25:38 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
morelights.craft_items = {
|
|
|
|
glass = "default:glass",
|
|
|
|
glass_pane = "xpanes:pane_flat",
|
|
|
|
steel = "default:steel_ingot",
|
|
|
|
copper = "default:copper_ingot",
|
|
|
|
tin = "default:tin_ingot",
|
|
|
|
crystal_fragment = "default:mese_crystal_fragment",
|
|
|
|
dye_dark = "dye:dark_grey",
|
|
|
|
dye_light = "dye:white",
|
|
|
|
wool_dark = "wool:dark_grey",
|
|
|
|
wool_light = "wool:white",
|
|
|
|
wood_dark = "default:junglewood",
|
|
|
|
stone_block = "default:stone_block",
|
|
|
|
sandstone_block = "default:sandstone_block",
|
|
|
|
dirt = "default:dirt",
|
|
|
|
grass = "default:grass_1",
|
2021-09-05 16:06:04 +02:00
|
|
|
string = "farming:string",
|
2020-11-15 20:25:38 +01:00
|
|
|
stick = "default:stick",
|
|
|
|
}
|
|
|
|
|
|
|
|
local a = morelights.craft_items
|
|
|
|
|
|
|
|
if morelights.game == "mineclone2" then
|
|
|
|
a.glass = "mcl_core:glass"
|
|
|
|
a.glass_pane = "xpanes:pane_natural_flat"
|
|
|
|
a.steel = "mcl_core:iron_ingot"
|
|
|
|
-- MCL has neither copper nor tin. :(
|
|
|
|
a.copper = "mesecons:redstone"
|
|
|
|
a.tin = "mcl_core:iron_ingot"
|
|
|
|
a.crystal_fragment = "mcl_nether:quartz"
|
|
|
|
a.dye_dark = "mcl_dye:dark_grey"
|
|
|
|
a.dye_light = "mcl_dye:white"
|
|
|
|
a.wool_dark = "mcl_wool:grey"
|
|
|
|
a.wool_light = "mcl_wool:white"
|
|
|
|
a.wood_dark = "mcl_core:sprucewood"
|
|
|
|
a.stone_block = "mcl_core:stone_smooth"
|
|
|
|
a.sandstone_block = "mcl_core:sandstonesmooth"
|
|
|
|
a.dirt = "mcl_core:dirt"
|
|
|
|
a.grass = "mcl_flowers:tallgrass"
|
2021-09-05 16:06:04 +02:00
|
|
|
a.string = "mcl_mobitems:string"
|
2020-11-15 20:25:38 +01:00
|
|
|
a.stick = "mcl_core:stick"
|
2021-09-05 16:06:04 +02:00
|
|
|
elseif morelights.game == "hades_revisited" then
|
|
|
|
a.glass = "hades_core:glass"
|
|
|
|
-- HR doesn't have glass panes. :(
|
|
|
|
a.glass_pane = "hades_core:glass"
|
|
|
|
if minetest.get_modpath("hades_xpanes") then
|
|
|
|
a.glass_pane = "hades_xpanes:pane_flat"
|
|
|
|
end
|
|
|
|
|
|
|
|
a.steel = "hades_core:steel_ingot"
|
|
|
|
a.copper = "hades_core:copper_ingot"
|
|
|
|
a.tin = "hades_core:tin_ingot"
|
|
|
|
a.crystal_fragment = "hades_core:mese_crystal_fragment"
|
|
|
|
a.dye_dark = "dye:dark_grey"
|
|
|
|
a.dye_light = "dye:white"
|
|
|
|
a.wool_dark = "wool:grey"
|
|
|
|
a.wool_light = "wool:white"
|
|
|
|
a.wood_dark = "hades_trees:jungle_wood"
|
|
|
|
a.stone_block = "hades_core:stone_block"
|
|
|
|
a.sandstone_block = "hades_core:sandstone"
|
|
|
|
a.dirt = "hades_core:dirt"
|
|
|
|
a.grass = "hades_grass:grass_1"
|
|
|
|
a.string = "hades_farming:cotton"
|
|
|
|
a.stick = "hades_core:stick"
|
2020-11-15 20:25:38 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
-- Use basic_materials brass if available, otherwise register our own.
|
|
|
|
if minetest.get_modpath("basic_materials") then
|
|
|
|
a.brass = "basic_materials:brass_ingot"
|
|
|
|
end
|
|
|
|
|
|
|
|
local path = minetest.get_modpath("morelights")
|
2021-09-05 16:06:04 +02:00
|
|
|
dofile(path .. "/nodes.lua")
|