From 4d680e6b6c9c651614bad6d82f7501b130c69764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Mon, 5 Apr 2021 17:22:24 +0200 Subject: [PATCH] Code duplication cleanup (#827) * Code duplication cleanup * Fix torches, no immortal variants for some nodes --- mods/ctf/ctf_map/ctf_map_core/nodes.lua | 840 +----------------------- mods/mtg/default/torch.lua | 175 +++-- 2 files changed, 113 insertions(+), 902 deletions(-) diff --git a/mods/ctf/ctf_map/ctf_map_core/nodes.lua b/mods/ctf/ctf_map/ctf_map_core/nodes.lua index c446752..472b71b 100644 --- a/mods/ctf/ctf_map/ctf_map_core/nodes.lua +++ b/mods/ctf/ctf_map/ctf_map_core/nodes.lua @@ -76,814 +76,42 @@ do }) end --- Indestructible nodes from MTG's default mod -do - -- Stone - - minetest.register_node(":ctf_map:stone", { - description = "Indestructible Stone", - tiles = {"default_stone.png"}, - groups = {immortal = 1}, - sounds = default.node_sound_stone_defaults(), - }) - - minetest.register_node(":ctf_map:cobble", { - description = "Indestructible Cobblestone", - tiles = {"default_cobble.png"}, - is_ground_content = false, - groups = {immortal = 1}, - sounds = default.node_sound_stone_defaults(), - }) - - minetest.register_node(":ctf_map:stonebrick", { - description = "Indestructible Stone Brick", - paramtype2 = "facedir", - place_param2 = 0, - 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 = = - --wall_bottom = = - --wall_side = = - }, - 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, - }) +local mod_prefixes = { + default = ""; + stairs = ""; + wool = "wool_"; +} + +-- See Lua API, section "Node-only groups" +local preserved_groups = { + bouncy = true; + connect_to_raillike = true; + disable_jump = true; + fall_damage_add_percent = true; + slippery = true; +} + +local function make_immortal(def) + local groups = {immortal = 1} + for group in pairs(preserved_groups) do + groups[group] = def.groups[group] + end + def.groups = groups + def.floodable = false + def.description = def.description and ("Indestructible " .. def.description) end --- Indestructible torches from MTG's default mod -do - minetest.register_node(":ctf_map:torch", { - 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 = {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) +for name, def in pairs(minetest.registered_nodes) do + local mod, nodename = name:match"(..-):(.+)" + local prefix = mod_prefixes[mod] + if nodename and prefix and not (def.buildable_to or (def.groups and (def.groups.immortal or def.groups.mortal))) then + -- HACK to preserve backwards compatibility + local new_name = ":ctf_map:" .. prefix .. nodename + local new_def = table.copy(def) + if def.drop == name then + new_def.drop = new_name end + make_immortal(new_def) + minetest.register_node(new_name, new_def) end end diff --git a/mods/mtg/default/torch.lua b/mods/mtg/default/torch.lua index 5de5f89..37d393a 100644 --- a/mods/mtg/default/torch.lua +++ b/mods/mtg/default/torch.lua @@ -13,105 +13,88 @@ local function on_flood(pos, oldnode, newnode) return false end -minetest.register_node("default:torch", { - 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}, - drop = "default:torch", - selection_box = { - type = "wallmounted", - wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8}, +local torch_suffix = {[0] = "_ceiling", "", "_wall", "_wall", "_wall", "_wall"} +function default.torch_on_place(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local nodedef = minetest.registered_nodes[node.name] + if nodedef and nodedef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return nodedef.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 name = itemstack:get_name() + itemstack:set_name(name .. torch_suffix[wdir]) + itemstack = minetest.item_place(itemstack, placer, pointed_thing, wdir) + itemstack:set_name(name) + return itemstack +end + +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(), - 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("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}, + ceiling = { + mesh = "torch_ceiling.obj", + 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, - on_flood = on_flood, -}) - -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}, + wall = { + mesh = "torch_wall.obj", + selection_box = { + type = "wallmounted", + wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8}, + }, }, - sounds = default.node_sound_wood_defaults(), - floodable = true, - on_flood = on_flood, -}) +} +default.register_torch("default:torch", default.torch) minetest.register_lbm({ name = "default:3dtorch",