247 lines
7.8 KiB
Lua
247 lines
7.8 KiB
Lua
local S = minetest.get_translator("morelights_extras")
|
|
|
|
|
|
minetest.register_node("morelights_extras:f_block", {
|
|
description = S("Futuristic Light Block"),
|
|
tiles = {"morelights_extras_f_block.png"},
|
|
paramtype = "light",
|
|
light_source = minetest.LIGHT_MAX,
|
|
groups = {cracky = 2, oddly_breakable_by_hand = 3, handy = 1},
|
|
_mcl_hardness = 0.3,
|
|
sounds = morelights.sounds.glass
|
|
})
|
|
|
|
do
|
|
local def = {
|
|
description = S("Grass Light"),
|
|
tiles = {
|
|
"default_grass.png^morelights_extras_blocklight.png",
|
|
"default_dirt.png",
|
|
"default_dirt.png^default_grass_side.png"
|
|
},
|
|
paramtype = "light",
|
|
light_source = 12,
|
|
groups = {
|
|
cracky = 2,
|
|
oddly_breakable_by_hand = 3,
|
|
handy = 1,
|
|
soil = 1,
|
|
},
|
|
_mcl_hardness = 0.3,
|
|
sounds = morelights.sounds.glass
|
|
}
|
|
|
|
if morelights.game == "mineclone2" then
|
|
-- For MineClone 2, use node coloring to match environment.
|
|
-- See the mcl_core:dirt_with_grass definition in
|
|
-- ITEMS/mcl_core/nodes_base.lua.
|
|
def.tiles = {
|
|
"mcl_core_grass_block_top.png",
|
|
{name = "default_dirt.png", color = "#FFFFFF"}
|
|
}
|
|
def.overlay_tiles = {
|
|
{name = "morelights_extras_blocklight.png", color = "#FFFFFF"},
|
|
"",
|
|
{
|
|
name = "mcl_core_grass_block_side_overlay.png",
|
|
tileable_vertical = false
|
|
}
|
|
}
|
|
def.paramtype2 = "color"
|
|
def.palette = "mcl_core_palette_grass.png"
|
|
def.palette_index = 0
|
|
def.color = "#55aa60"
|
|
def.drop = "morelights_extras:dirt_with_grass"
|
|
|
|
def.on_construct = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
if node.param2 == 0 then
|
|
local grass_node = mcl_core.get_grass_block_type(pos)
|
|
if grass_node.param2 ~= 0 then
|
|
minetest.set_node(pos, {
|
|
name = "morelights_extras:dirt_with_grass",
|
|
param2 = grass_node.param2
|
|
})
|
|
end
|
|
end
|
|
end
|
|
elseif morelights.game == "hades_revisited" then
|
|
-- For Hades Revisited, grass color is seasonal.
|
|
-- See hades_core/dirt.lua, ABM in hades_core/functions.lua.
|
|
def.tiles = {
|
|
"hades_core_grass_cover_colorable.png",
|
|
{name = "default_dirt.png", color = "#FFFFFF"},
|
|
}
|
|
def.overlay_tiles = {
|
|
{name = "morelights_extras_blocklight.png", color = "#FFFFFF"},
|
|
"",
|
|
{
|
|
name = "hades_core_grass_side_cover_colorable.png",
|
|
tileable_vertical = false
|
|
},
|
|
}
|
|
def.paramtype2 = "color"
|
|
def.palette = "hades_core_palette_grass.png"
|
|
def.palette_index = 0
|
|
def.color = "#acef6a"
|
|
-- To enable seasonal grass coloring.
|
|
def.groups.dirt_with_grass = 1
|
|
-- To prevent color retention on digging.
|
|
def.drop = "morelights_extras:dirt_with_grass"
|
|
|
|
def.on_place = function(itemstack, placer, pointed_thing)
|
|
local param2 = hades_core.get_seasonal_grass_color_param2()
|
|
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
|
end
|
|
end
|
|
|
|
minetest.register_node("morelights_extras:dirt_with_grass", def)
|
|
end
|
|
|
|
do
|
|
local tile = "default_stone_block.png"
|
|
if morelights.game == "mineclone2" then
|
|
tile = "mcl_stairs_stone_slab_top.png"
|
|
end
|
|
|
|
minetest.register_node("morelights_extras:stone_block", {
|
|
description = S("Stone Block Light"),
|
|
tiles = {tile .. "^morelights_extras_blocklight.png"},
|
|
paramtype = "light",
|
|
light_source = 12,
|
|
groups = {cracky = 2, oddly_breakable_by_hand = 3, handy = 1},
|
|
_mcl_hardness = 0.3,
|
|
sounds = morelights.sounds.glass
|
|
})
|
|
end
|
|
|
|
do
|
|
local tile = "default_sandstone_block.png"
|
|
if morelights.game == "mineclone2" then
|
|
tile = "mcl_core_sandstone_smooth.png"
|
|
elseif morelights.game == "hades_revisited" then
|
|
tile = "default_sandstone.png"
|
|
end
|
|
|
|
minetest.register_node("morelights_extras:sandstone_block", {
|
|
description = S("Sandstone Block Light"),
|
|
tiles = {tile .. "^morelights_extras_blocklight.png"},
|
|
paramtype = "light",
|
|
light_source = 12,
|
|
groups = {cracky = 2, oddly_breakable_by_hand = 3, handy = 1},
|
|
_mcl_hardness = 0.3,
|
|
sounds = morelights.sounds.glass
|
|
})
|
|
end
|
|
|
|
minetest.register_node("morelights_extras:stairlight", {
|
|
description = S("Stair Light (place on stairs)"),
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {-1/4, -13/16, -1/16, 1/4, -11/16, 0}
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-1/4, -13/16, -1/16, 1/4, -11/16, 0}
|
|
},
|
|
walkable = false,
|
|
tiles = {"morelights_metal_dark.png"},
|
|
overlay_tiles = {"", "morelights_extras_stairlight.png",
|
|
"", "", "morelights_extras_stairlight.png"},
|
|
inventory_image = "morelights_extras_stairlight_inv.png",
|
|
wield_image = "morelights_extras_stairlight_inv.png",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
light_source = 10,
|
|
sunlight_propagates = true,
|
|
groups = {cracky = 2, oddly_breakable_by_hand = 3, handy = 1,
|
|
attached_node = 1},
|
|
_mcl_hardness = 0.15,
|
|
node_placement_prediction = "",
|
|
sounds = morelights.sounds.glass,
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type ~= "node" then
|
|
return itemstack
|
|
end
|
|
|
|
-- See builtin/game/item.lua.
|
|
local node = minetest.get_node(pointed_thing.under)
|
|
|
|
if placer and not placer:get_player_control().sneak then
|
|
local def = minetest.registered_nodes[node.name]
|
|
if def and def.on_rightclick then
|
|
return def.on_rightclick(pointed_thing.under, node, placer,
|
|
itemstack, pointed_thing) or itemstack
|
|
end
|
|
end
|
|
|
|
if node.param2 < 4 and (
|
|
node.name:match("^stairs:stair_")
|
|
or node.name:match("^mcl_stairs:stair_")
|
|
or node.name:match("^hades_stairs:stair_")
|
|
or minetest.get_item_group(node.name, "morelights_supports_stairlight") ~= 0
|
|
) then
|
|
-- Set `above` to the node actually above the stair, since that's
|
|
-- where the node is placed.
|
|
pointed_thing.above =
|
|
vector.add(pointed_thing.under, vector.new(0, 1, 0))
|
|
return minetest.item_place_node(itemstack, placer, pointed_thing,
|
|
node.param2)
|
|
end
|
|
|
|
return itemstack
|
|
end,
|
|
|
|
on_rotate = screwdriver.rotate_simple
|
|
})
|
|
|
|
--
|
|
-- Craft recipes
|
|
--
|
|
|
|
local a = morelights.craft_items
|
|
|
|
minetest.register_craft({
|
|
output = "morelights_extras:f_block",
|
|
recipe = {
|
|
{a.crystal_fragment, a.steel, a.crystal_fragment},
|
|
{a.glass_pane, "morelights:bulb", a.glass_pane},
|
|
{a.crystal_fragment, a.steel, a.crystal_fragment}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "morelights_extras:dirt_with_grass",
|
|
recipe = {
|
|
{"", a.glass_pane, ""},
|
|
{"", "morelights:bulb", ""},
|
|
{a.grass, a.dirt, ""}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "morelights_extras:stone_block",
|
|
recipe = {
|
|
{"", a.glass_pane, ""},
|
|
{"", "morelights:bulb", ""},
|
|
{"", a.stone_block, ""}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "morelights_extras:sandstone_block",
|
|
recipe = {
|
|
{"", a.glass_pane, ""},
|
|
{"", "morelights:bulb", ""},
|
|
{"", a.sandstone_block, ""}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "morelights_extras:stairlight",
|
|
recipe = {
|
|
{a.steel, "morelights:bulb", a.steel}
|
|
}
|
|
})
|