Code duplication cleanup (#827)

* Code duplication cleanup

* Fix torches, no immortal variants for some nodes
This commit is contained in:
Lars Müller 2021-04-05 17:22:24 +02:00 committed by GitHub
parent 433509bcdd
commit 4d680e6b6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 113 additions and 902 deletions

View file

@ -76,814 +76,42 @@ do
}) })
end end
-- Indestructible nodes from MTG's default mod local mod_prefixes = {
do default = "";
-- Stone stairs = "";
wool = "wool_";
minetest.register_node(":ctf_map:stone", { }
description = "Indestructible Stone",
tiles = {"default_stone.png"}, -- See Lua API, section "Node-only groups"
groups = {immortal = 1}, local preserved_groups = {
sounds = default.node_sound_stone_defaults(), bouncy = true;
}) connect_to_raillike = true;
disable_jump = true;
minetest.register_node(":ctf_map:cobble", { fall_damage_add_percent = true;
description = "Indestructible Cobblestone", slippery = true;
tiles = {"default_cobble.png"}, }
is_ground_content = false,
groups = {immortal = 1}, local function make_immortal(def)
sounds = default.node_sound_stone_defaults(), local groups = {immortal = 1}
}) for group in pairs(preserved_groups) do
groups[group] = def.groups[group]
minetest.register_node(":ctf_map:stonebrick", { end
description = "Indestructible Stone Brick", def.groups = groups
paramtype2 = "facedir", def.floodable = false
place_param2 = 0, def.description = def.description and ("Indestructible " .. def.description)
tiles = {"default_stone_brick.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:stone_block", {
description = "Indestructible Stone Block",
tiles = {"default_stone_block.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:mossycobble", {
description = "Indestructible Mossy Cobblestone",
tiles = {"default_mossycobble.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:desert_stone", {
description = "Indestructible Desert Stone",
tiles = {"default_desert_stone.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:desert_cobble", {
description = "Indestructible Desert Cobblestone",
tiles = {"default_desert_cobble.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:desert_stonebrick", {
description = "Indestructible Desert Stone Brick",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_desert_stone_brick.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:desert_stone_block", {
description = "Indestructible Desert Stone Block",
tiles = {"default_desert_stone_block.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:sandstone", {
description = "Indestructible Sandstone",
tiles = {"default_sandstone.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:sandstonebrick", {
description = "Indestructible Sandstone Brick",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_sandstone_brick.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:sandstone_block", {
description = "Indestructible Sandstone Block",
tiles = {"default_sandstone_block.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:desert_sandstone", {
description = "Indestructible Desert Sandstone",
tiles = {"default_desert_sandstone.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:desert_sandstone_brick", {
description = "Indestructible Desert Sandstone Brick",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_desert_sandstone_brick.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:desert_sandstone_block", {
description = "Indestructible Desert Sandstone Block",
tiles = {"default_desert_sandstone_block.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:silver_sandstone", {
description = "Indestructible Silver Sandstone",
tiles = {"default_silver_sandstone.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:silver_sandstone_brick", {
description = "Indestructible Silver Sandstone Brick",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_silver_sandstone_brick.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:silver_sandstone_block", {
description = "Indestructible Silver Sandstone Block",
tiles = {"default_silver_sandstone_block.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
-- Soft / Non-Stone
minetest.register_node(":ctf_map:dirt", {
description = "Indestructible Dirt",
tiles = {"default_dirt.png"},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults(),
})
minetest.register_node(":ctf_map:dirt_with_grass", {
description = "Indestructible Dirt with Grass",
tiles = {"default_grass.png", "default_dirt.png",
{name = "default_dirt.png^default_grass_side.png",
tileable_vertical = false}},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_grass_footstep", gain = 0.25},
}),
})
minetest.register_node(":ctf_map:dirt_with_dry_grass", {
description = "Indestructible Dirt with Dry Grass",
tiles = {"default_dry_grass.png",
"default_dirt.png",
{name = "default_dirt.png^default_dry_grass_side.png",
tileable_vertical = false}},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_grass_footstep", gain = 0.4},
}),
})
minetest.register_node(":ctf_map:dirt_with_snow", {
description = "Indestructible Dirt with Snow",
tiles = {"default_snow.png", "default_dirt.png",
{name = "default_dirt.png^default_snow_side.png",
tileable_vertical = false}},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_snow_footstep", gain = 0.15},
}),
})
minetest.register_node(":ctf_map:dirt_with_rainforest_litter", {
description = "Indestructible Dirt with Rainforest Litter",
tiles = {
"default_rainforest_litter.png",
"default_dirt.png",
{name = "default_dirt.png^default_rainforest_litter_side.png",
tileable_vertical = false}
},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_grass_footstep", gain = 0.4},
}),
})
minetest.register_node(":ctf_map:sand", {
description = "Indestructible Sand",
tiles = {"default_sand.png"},
groups = {immortal = 1},
sounds = default.node_sound_sand_defaults(),
})
minetest.register_node(":ctf_map:desert_sand", {
description = "Indestructible Desert Sand",
tiles = {"default_desert_sand.png"},
groups = {immortal = 1},
sounds = default.node_sound_sand_defaults(),
})
minetest.register_node(":ctf_map:silver_sand", {
description = "Indestructible Silver Sand",
tiles = {"default_silver_sand.png"},
groups = {immortal = 1},
sounds = default.node_sound_sand_defaults(),
})
minetest.register_node(":ctf_map:gravel", {
description = "Indestructible Gravel",
tiles = {"default_gravel.png"},
groups = {immortal = 1},
sounds = default.node_sound_gravel_defaults(),
})
minetest.register_node(":ctf_map:clay", {
description = "Indestructible Clay",
tiles = {"default_clay.png"},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults(),
})
minetest.register_node(":ctf_map:snow", {
description = "Indestructible Snow",
tiles = {"default_snow.png"},
inventory_image = "default_snowball.png",
wield_image = "default_snowball.png",
paramtype = "light",
buildable_to = true,
floodable = true,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
},
},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_snow_footstep", gain = 0.15},
dug = {name = "default_snow_footstep", gain = 0.2},
dig = {name = "default_snow_footstep", gain = 0.2}
})
})
minetest.register_node(":ctf_map:snowblock", {
description = "Indestructible Snow Block",
tiles = {"default_snow.png"},
groups = {immortal = 1},
sounds = default.node_sound_dirt_defaults({
footstep = {name = "default_snow_footstep", gain = 0.15},
dug = {name = "default_snow_footstep", gain = 0.2},
dig = {name = "default_snow_footstep", gain = 0.2}
})
})
minetest.register_node(":ctf_map:ice", {
description = "Indestructible Ice",
tiles = {"default_ice.png"},
is_ground_content = false,
paramtype = "light",
groups = {immortal = 1, slippery = 4},
sounds = default.node_sound_glass_defaults(),
})
-- Trees
minetest.register_node(":ctf_map:tree", {
description = "Indestructible Tree",
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node
})
minetest.register_node(":ctf_map:wood", {
description = "Indestructible Wooden Planks",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_wood.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node(":ctf_map:leaves", {
description = "Indestructible Leaves",
drawtype = "allfaces_optional",
waving = 1,
tiles = {"default_leaves.png"},
special_tiles = {"default_leaves_simple.png"},
paramtype = "light",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node(":ctf_map:apple", {
description = "Indestructible Apple",
drawtype = "plantlike",
tiles = {"default_apple.png"},
inventory_image = "default_apple.png",
stack_max = 99,
paramtype = "light",
sunlight_propagates = true,
walkable = false,
is_ground_content = false,
selection_box = {
type = "fixed",
fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16}
},
groups = {immortal = 1},
sounds = default.node_sound_leaves_defaults()
})
minetest.register_node(":ctf_map:papyrus", {
description = "Indestructible Papyrus",
drawtype = "plantlike",
tiles = {"default_papyrus.png"},
inventory_image = "default_papyrus.png",
wield_image = "default_papyrus.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
},
groups = {immortal = 1},
sounds = default.node_sound_leaves_defaults(),
after_dig_node = function(pos, node, metadata, digger)
default.dig_up(pos, node, digger)
end,
})
minetest.register_node(":ctf_map:jungletree", {
description = "Indestructible Jungle Tree",
tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
"default_jungletree.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node
})
minetest.register_node(":ctf_map:junglewood", {
description = "Indestructible Jungle Wood Planks",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_junglewood.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node(":ctf_map:jungleleaves", {
description = "Indestructible Jungle Leaves",
drawtype = "allfaces_optional",
waving = 1,
tiles = {"default_jungleleaves.png"},
special_tiles = {"default_jungleleaves_simple.png"},
paramtype = "light",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node(":ctf_map:pine_tree", {
description = "Indestructible Pine Tree",
tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
"default_pine_tree.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node
})
minetest.register_node(":ctf_map:pine_wood", {
description = "Indestructible Pine Wood Planks",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_pine_wood.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node(":ctf_map:pine_needles",{
description = "Indestructible Pine Needles",
drawtype = "allfaces_optional",
tiles = {"default_pine_needles.png"},
waving = 1,
paramtype = "light",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node(":ctf_map:acacia_tree", {
description = "Indestructible Acacia Tree",
tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
"default_acacia_tree.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node
})
minetest.register_node(":ctf_map:acacia_wood", {
description = "Indestructible Acacia Wood Planks",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_acacia_wood.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node(":ctf_map:acacia_leaves", {
description = "Indestructible Acacia Leaves",
drawtype = "allfaces_optional",
tiles = {"default_acacia_leaves.png"},
special_tiles = {"default_acacia_leaves_simple.png"},
waving = 1,
paramtype = "light",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node(":ctf_map:aspen_tree", {
description = "Indestructible Aspen Tree",
tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
"default_aspen_tree.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node
})
minetest.register_node(":ctf_map:aspen_wood", {
description = "Indestructible Aspen Wood Planks",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_aspen_wood.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node(":ctf_map:aspen_leaves", {
description = "Indestructible Aspen Leaves",
drawtype = "allfaces_optional",
tiles = {"default_aspen_leaves.png"},
waving = 1,
paramtype = "light",
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_leaves_defaults(),
})
--
-- Ores
--
minetest.register_node(":ctf_map:stone_with_coal", {
description = "Indestructible Coal Ore",
tiles = {"default_stone.png^default_mineral_coal.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:coalblock", {
description = "Indestructible Coal Block",
tiles = {"default_coal_block.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:stone_with_iron", {
description = "Indestructible Iron Ore",
tiles = {"default_stone.png^default_mineral_iron.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:stone_with_copper", {
description = "Indestructible Copper Ore",
tiles = {"default_stone.png^default_mineral_copper.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:stone_with_tin", {
description = "Indestructible Tin Ore",
tiles = {"default_stone.png^default_mineral_tin.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:bronzeblock", {
description = "Indestructible Bronze Block",
tiles = {"default_bronze_block.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_metal_defaults(),
})
minetest.register_node(":ctf_map:stone_with_mese", {
description = "Indestructible Mese Ore",
tiles = {"default_stone.png^default_mineral_mese.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:mese", {
description = "Indestructible Mese Block",
tiles = {"default_mese_block.png"},
paramtype = "light",
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
light_source = 3,
})
minetest.register_node(":ctf_map:stone_with_diamond", {
description = "Indestructible Diamond Ore",
tiles = {"default_stone.png^default_mineral_diamond.png"},
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
-- Plantlife (non-cubic)
minetest.register_node(":ctf_map:cactus", {
description = "Indestructible Cactus",
tiles = {"default_cactus_top.png", "default_cactus_top.png",
"default_cactus_side.png"},
paramtype2 = "facedir",
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node,
})
minetest.register_node(":ctf_map:ladder_wood", {
description = "Indestructible Wooden Ladder",
drawtype = "signlike",
tiles = {"default_ladder_wood.png"},
inventory_image = "default_ladder_wood.png",
wield_image = "default_ladder_wood.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {
type = "wallmounted",
--wall_top = = <default>
--wall_bottom = = <default>
--wall_side = = <default>
},
groups = {immortal = 1},
legacy_wallmounted = true,
sounds = default.node_sound_wood_defaults(),
})
default.register_fence(":ctf_map:fence_wood", {
description = "Indestructible Wooden Fence",
texture = "default_fence_wood.png",
inventory_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
material = "ctf_map:wood",
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults()
})
default.register_fence(":ctf_map:fence_acacia_wood", {
description = "Indestructible Acacia Fence",
texture = "default_fence_acacia_wood.png",
inventory_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
material = "ctf_map:acacia_wood",
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults()
})
default.register_fence(":ctf_map:fence_junglewood", {
description = "Indestructible Jungle Wood Fence",
texture = "default_fence_junglewood.png",
inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
material = "ctf_map:junglewood",
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults()
})
default.register_fence(":ctf_map:fence_pine_wood", {
description = "Indestructible Pine Fence",
texture = "default_fence_pine_wood.png",
inventory_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
material = "ctf_map:pine_wood",
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults()
})
default.register_fence(":ctf_map:fence_aspen_wood", {
description = "Indestructible Aspen Fence",
texture = "default_fence_aspen_wood.png",
inventory_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
material = "ctf_map:aspen_wood",
groups = {immortal = 1},
sounds = default.node_sound_wood_defaults()
})
minetest.register_node(":ctf_map:glass", {
description = "Indestructible Glass",
drawtype = "glasslike_framed_optional",
tiles = {"default_glass.png", "default_glass_detail.png"},
paramtype = "light",
paramtype2 = "glasslikeliquidlevel",
sunlight_propagates = true,
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node(":ctf_map:brick", {
description = "Indestructible Brick Block",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_brick.png"},
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node(":ctf_map:meselamp", {
description = "Indestructible Mese Lamp",
drawtype = "glasslike",
tiles = {"default_meselamp.png"},
paramtype = "light",
sunlight_propagates = true,
is_ground_content = false,
groups = {immortal = 1},
sounds = default.node_sound_glass_defaults(),
light_source = default.LIGHT_MAX,
})
end end
-- Indestructible torches from MTG's default mod for name, def in pairs(minetest.registered_nodes) do
do local mod, nodename = name:match"(..-):(.+)"
minetest.register_node(":ctf_map:torch", { local prefix = mod_prefixes[mod]
description = "Torch", if nodename and prefix and not (def.buildable_to or (def.groups and (def.groups.immortal or def.groups.mortal))) then
drawtype = "mesh", -- HACK to preserve backwards compatibility
mesh = "torch_floor.obj", local new_name = ":ctf_map:" .. prefix .. nodename
inventory_image = "default_torch_on_floor.png", local new_def = table.copy(def)
wield_image = "default_torch_on_floor.png", if def.drop == name then
tiles = {{ new_def.drop = new_name
name = "default_torch_on_floor_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
}},
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
liquids_pointable = false,
light_source = 12,
groups = {attached_node = 1, torch = 1},
drop = "ctf_map:torch",
selection_box = {
type = "wallmounted",
wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8},
},
sounds = default.node_sound_wood_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local under = pointed_thing.under
local node = minetest.get_node(under)
local def = minetest.registered_nodes[node.name]
if def and def.on_rightclick and
not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return def.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack
end
local above = pointed_thing.above
local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
local fakestack = itemstack
if wdir == 0 then
fakestack:set_name(":ctf_map:torch_ceiling")
elseif wdir == 1 then
fakestack:set_name(":ctf_map:torch")
else
fakestack:set_name(":ctf_map:torch_wall")
end
itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir)
itemstack:set_name(":ctf_map:torch")
return itemstack
end,
})
minetest.register_node(":ctf_map:torch_wall", {
drawtype = "mesh",
mesh = "torch_wall.obj",
tiles = {{
name = "default_torch_on_floor_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
}},
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
light_source = 12,
groups = {not_in_creative_inventory = 1, attached_node = 1, torch = 1},
drop = "ctf_map:torch",
selection_box = {
type = "wallmounted",
wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8},
},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node(":ctf_map:torch_ceiling", {
drawtype = "mesh",
mesh = "torch_ceiling.obj",
tiles = {{
name = "default_torch_on_floor_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
}},
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
light_source = 12,
groups = {immortal = 1, not_in_creative_inventory = 1, attached_node = 1, torch = 1},
drop = "ctf_map:torch",
selection_box = {
type = "wallmounted",
wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8},
},
sounds = default.node_sound_wood_defaults(),
})
end
-- Register indestructible variants of nodes from MTGs' stairs and wool mods
do
local nodes = table.copy(minetest.registered_nodes)
for name, nodedef in pairs(nodes) do
if name:find("stairs") then
nodedef = table.copy(nodedef)
if nodedef.description then
nodedef.description = "Indestructible " .. nodedef.description
end
nodedef.groups = {immortal = 1}
minetest.register_node(":ctf_map:" .. name:split(":")[2], nodedef)
elseif name:find("wool") then
local color = name:split(":")[2]
nodedef = table.copy(nodedef)
if nodedef.description then
nodedef.description = "Indestructible " .. nodedef.description
end
nodedef.groups = {immortal = 1}
minetest.register_node(":ctf_map:wool_" .. color, nodedef)
minetest.register_alias("ctf_map:" .. color, "ctf_map:wool_" .. color)
end end
make_immortal(new_def)
minetest.register_node(new_name, new_def)
end end
end end

View file

@ -13,105 +13,88 @@ local function on_flood(pos, oldnode, newnode)
return false return false
end end
minetest.register_node("default:torch", { local torch_suffix = {[0] = "_ceiling", "", "_wall", "_wall", "_wall", "_wall"}
description = "Torch", function default.torch_on_place(itemstack, placer, pointed_thing)
drawtype = "mesh", local under = pointed_thing.under
mesh = "torch_floor.obj", local node = minetest.get_node(under)
inventory_image = "default_torch_on_floor.png", local nodedef = minetest.registered_nodes[node.name]
wield_image = "default_torch_on_floor.png", if nodedef and nodedef.on_rightclick and
tiles = {{ not (placer and placer:is_player() and
name = "default_torch_on_floor_animated.png", placer:get_player_control().sneak) then
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} return nodedef.on_rightclick(under, node, placer, itemstack,
}}, pointed_thing) or itemstack
paramtype = "light", end
paramtype2 = "wallmounted",
sunlight_propagates = true, local above = pointed_thing.above
walkable = false, local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
liquids_pointable = false, local name = itemstack:get_name()
light_source = 12, itemstack:set_name(name .. torch_suffix[wdir])
groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, itemstack = minetest.item_place(itemstack, placer, pointed_thing, wdir)
drop = "default:torch", itemstack:set_name(name)
selection_box = { return itemstack
type = "wallmounted", end
wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8},
function default.register_torch(name, defs)
local def = defs.floor
def.drop = def.drop or name
def.on_place = def.on_place or default.torch_on_place
minetest.register_node(":" .. name, def)
local def_ceiling = table.copy(def)
for key, value in pairs(defs.ceiling) do
def_ceiling[key] = value
end
def_ceiling.groups.not_in_creative_inventory = 1
minetest.register_node(":" .. name .. "_ceiling", def_ceiling)
local def_wall = table.copy(def)
for key, value in pairs(defs.wall) do
def_wall[key] = value
end
def_wall.groups.not_in_creative_inventory = 1
minetest.register_node(":" .. name .. "_wall", def_wall)
end
default.torch = {
floor = {
description = "Torch",
drawtype = "mesh",
mesh = "torch_floor.obj",
inventory_image = "default_torch_on_floor.png",
wield_image = "default_torch_on_floor.png",
tiles = {{
name = "default_torch_on_floor_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
}},
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
liquids_pointable = false,
light_source = 12,
groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1},
selection_box = {
type = "wallmounted",
wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8},
},
sounds = default.node_sound_wood_defaults(),
floodable = true,
on_flood = on_flood,
}, },
sounds = default.node_sound_wood_defaults(), ceiling = {
on_place = function(itemstack, placer, pointed_thing) mesh = "torch_ceiling.obj",
local under = pointed_thing.under selection_box = {
local node = minetest.get_node(under) type = "wallmounted",
local def = minetest.registered_nodes[node.name] wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8},
if def and def.on_rightclick and },
not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return def.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack
end
local above = pointed_thing.above
local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
local fakestack = itemstack
if wdir == 0 then
fakestack:set_name("default:torch_ceiling")
elseif wdir == 1 then
fakestack:set_name("default:torch")
else
fakestack:set_name("default:torch_wall")
end
itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir)
itemstack:set_name("default:torch")
return itemstack
end,
floodable = true,
on_flood = on_flood,
})
minetest.register_node("default:torch_wall", {
drawtype = "mesh",
mesh = "torch_wall.obj",
tiles = {{
name = "default_torch_on_floor_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
}},
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
light_source = 12,
groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1},
drop = "default:torch",
selection_box = {
type = "wallmounted",
wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8},
}, },
sounds = default.node_sound_wood_defaults(), wall = {
floodable = true, mesh = "torch_wall.obj",
on_flood = on_flood, selection_box = {
}) type = "wallmounted",
wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8},
minetest.register_node("default:torch_ceiling", { },
drawtype = "mesh",
mesh = "torch_ceiling.obj",
tiles = {{
name = "default_torch_on_floor_animated.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
}},
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
light_source = 12,
groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1},
drop = "default:torch",
selection_box = {
type = "wallmounted",
wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8},
}, },
sounds = default.node_sound_wood_defaults(), }
floodable = true, default.register_torch("default:torch", default.torch)
on_flood = on_flood,
})
minetest.register_lbm({ minetest.register_lbm({
name = "default:3dtorch", name = "default:3dtorch",