add a api to register unbreakable blocks

This commit is contained in:
Yiu Man Ho 2020-08-10 13:57:59 +08:00
parent 409cca2699
commit 6cbe94c4cf
No known key found for this signature in database
GPG Key ID: 7939838BC85BF618
3 changed files with 94 additions and 414 deletions

View File

@ -74,23 +74,43 @@ minetest.register_alias("fake_fire", "maptools:fake_fire")
minetest.register_alias("ffire", "maptools:fake_fire")
minetest.register_alias("igniter", "maptools:igniter")
minetest.register_alias("stone_u", "maptools:stone")
minetest.register_alias("tree_u", "maptools:tree")
minetest.register_alias("cobble_u", "maptools:cobble")
minetest.register_alias("wood_u", "maptools:wood")
minetest.register_alias("sand_u", "maptools:sand")
minetest.register_alias("gravel_u", "maptools:gravel")
minetest.register_alias("brick_u", "maptools:brick")
minetest.register_alias("dirt_u", "maptools:dirt")
minetest.register_alias("glass_u", "maptools:glass")
minetest.register_alias("sandstone_u", "maptools:sandstone")
minetest.register_alias("desert_stone_u", "maptools:desert_stone")
minetest.register_alias("desertstone_u", "maptools:desert_stone")
minetest.register_alias("desert_sand_u", "maptools:desert_sand")
minetest.register_alias("desertsand_u", "maptools:desert_sand")
minetest.register_alias("leaves_u", "maptools:leaves")
minetest.register_alias("grass_u", "maptools:grass")
minetest.register_alias("maptools:stone", "default:stone_u")
minetest.register_alias("maptools:tree", "default:tree_u")
minetest.register_alias("maptools:cobble", "default:cobble_u")
minetest.register_alias("maptools:wood", "default:wood_u")
minetest.register_alias("maptools:sand", "default:sand_u")
minetest.register_alias("maptools:gravel", "default:gravel_u")
minetest.register_alias("maptools:brick", "default:brick_u")
minetest.register_alias("maptools:dirt", "default:dirt_u")
minetest.register_alias("maptools:glass", "default:glass_u")
minetest.register_alias("maptools:sandstone", "default:sandstone_u")
minetest.register_alias("maptools:desert_stone", "default:desert_stone_u")
minetest.register_alias("maptools:desertstone", "default:desert_stone_u")
minetest.register_alias("maptools:desert_sand", "default:desert_sand_u")
minetest.register_alias("maptools:desertsand", "default:desert_sand_u")
minetest.register_alias("maptools:leaves", "default:leaves_u")
minetest.register_alias("maptools:grass", "default:grass_u")
minetest.register_alias("maptools:mossycobble", "default:mossycobble_u")
minetest.register_alias("stone_u", "default:stone_u")
minetest.register_alias("tree_u", "default:tree_u")
minetest.register_alias("cobble_u", "default:cobble_u")
minetest.register_alias("wood_u", "default:wood_u")
minetest.register_alias("sand_u", "default:sand_u")
minetest.register_alias("gravel_u", "default:gravel_u")
minetest.register_alias("brick_u", "default:brick_u")
minetest.register_alias("dirt_u", "default:dirt_u")
minetest.register_alias("glass_u", "default:glass_u")
minetest.register_alias("sandstone_u", "default:sandstone_u")
minetest.register_alias("desert_stone_u", "default:desert_stone_u")
minetest.register_alias("desertstone_u", "default:desert_stone_u")
minetest.register_alias("desert_sand_u", "default:desert_sand_u")
minetest.register_alias("desertsand_u", "default:desert_sand_u")
minetest.register_alias("leaves_u", "default:leaves_u")
minetest.register_alias("grass_u", "default:grass_u")
minetest.register_alias("fullgrass", "maptools:fullgrass")
minetest.register_alias("fullgrass_u", "maptools:fullgrass")
minetest.register_alias("mossycobble_u", "maptools:mossycobble")
minetest.register_alias("mossy_cobble_u", "maptools:mossycobble")
minetest.register_alias("mossycobble_u", "default:mossycobble_u")
minetest.register_alias("mossy_cobble_u", "default:mossycobble_u")

View File

@ -7,270 +7,69 @@ Licensed under the zlib license. See LICENSE.md for more information.
local S = maptools.S
local function shallowCopy(original)
local copy = {}
for key, value in pairs(original) do
copy[key] = value
end
return copy
end
maptools.creative = maptools.config["hide_from_creative_inventory"]
minetest.register_node("maptools:stone", {
description = S("Unbreakable Stone"),
range = 12,
stack_max = 10000,
tiles = {"default_stone.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
function maptools.register_unbreakable_node(name)
local src_def = minetest.registered_nodes[name]
if not(src_def) then
minetest.log("[maptools] Can't register unbreakable node "..name.."_u : source not is nil!")
return false
end
local dst_def = shallowCopy(src_def)
dst_def.description = "Unbreakable "..src_def.description
dst_def.range = 12
dst_def.stack_max = 10000
dst_def.drop = ""
dst_def.groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}
dst_def.on_drop = maptools.drop_msg
minetest.register_node(":"..name.."_u", dst_def)
end
minetest.register_node("maptools:stonebrick", {
description = S("Unbreakable Stone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_stone_brick.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
maptools.register_unbreakable_node("default:stone")
maptools.register_unbreakable_node("default:stonebrick")
maptools.register_unbreakable_node("default:tree")
maptools.register_unbreakable_node("default:jungletree")
maptools.register_unbreakable_node("default:cactus")
maptools.register_unbreakable_node("default:papyrus")
maptools.register_unbreakable_node("default:dirt")
maptools.register_unbreakable_node("default:wood")
maptools.register_unbreakable_node("default:junglewood")
maptools.register_unbreakable_node("default:glass")
maptools.register_unbreakable_node("default:leaves")
maptools.register_unbreakable_node("default:sand")
maptools.register_unbreakable_node("default:clay")
maptools.register_unbreakable_node("default:desert_sand")
maptools.register_unbreakable_node("default:sandstone")
maptools.register_unbreakable_node("default:sandstone_brick")
maptools.register_unbreakable_node("default:desert_stone")
maptools.register_unbreakable_node("default:desert_cobble")
maptools.register_unbreakable_node("default:desert_stonebrick")
maptools.register_unbreakable_node("default:grass")
maptools.register_unbreakable_node("default:cobble")
maptools.register_unbreakable_node("default:mossycobble")
maptools.register_unbreakable_node("default:brick")
maptools.register_unbreakable_node("default:coalblock")
maptools.register_unbreakable_node("default:steelblock")
maptools.register_unbreakable_node("default:goldblock")
maptools.register_unbreakable_node("default:copperblock")
maptools.register_unbreakable_node("default:bronzeblock")
maptools.register_unbreakable_node("default:diamondblock")
minetest.register_node("maptools:tree", {
description = S("Unbreakable Tree"),
range = 12,
stack_max = 10000,
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node,
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:jungletree", {
description = S("Unbreakable Jungle Tree"),
range = 12,
stack_max = 10000,
tiles = {
"default_jungletree_top.png",
"default_jungletree_top.png",
"default_jungletree.png",
},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node,
on_drop = maptools.drop_msg
})
-- Farming:
minetest.register_node("maptools:cactus", {
description = S("Unbreakable Cactus"),
range = 12,
stack_max = 10000,
tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node,
on_drop = maptools.drop_msg
})
maptools.register_unbreakable_node("farming:soil_wet")
maptools.register_unbreakable_node("farming:desert_sand_soil_wet")
minetest.register_node("maptools:papyrus", {
description = S("Unbreakable Papyrus"),
drawtype = "plantlike",
range = 12,
stack_max = 10000,
tiles = {"default_papyrus.png"},
inventory_image = "default_papyrus.png",
wield_image = "default_papyrus.png",
walkable = false,
paramtype = "light",
sunlight_propagates = true,
drop = "",
selection_box = {
type = "fixed",
fixed = {-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}
},
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_leaves_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:dirt", {
description = S("Unbreakable Dirt"),
range = 12,
stack_max = 10000,
tiles = {"default_dirt.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:wood", {
description = S("Unbreakable Wooden Planks"),
range = 12,
stack_max = 10000,
tiles = {"default_wood.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:junglewood", {
description = S("Unbreakable Junglewood Planks"),
range = 12,
stack_max = 10000,
tiles = {"default_junglewood.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:glass", {
description = S("Unbreakable Glass"),
range = 12,
stack_max = 10000,
drawtype = "glasslike",
tiles = {"default_glass.png"},
paramtype = "light",
sunlight_propagates = true,
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_glass_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:leaves", {
description = S("Unbreakable Leaves"),
range = 12,
stack_max = 10000,
drawtype = "allfaces_optional",
tiles = {"default_leaves.png"},
paramtype = "light",
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_leaves_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:sand", {
description = S("Unbreakable Sand"),
range = 12,
stack_max = 10000,
tiles = {"default_sand.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:gravel", {
description = S("Unbreakable Gravel"),
range = 12,
stack_max = 10000,
tiles = {"default_gravel.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_gravel_footstep", gain=0.35},
dug = {name="default_gravel_footstep", gain=0.6},
}),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:clay", {
description = S("Unbreakable Clay"),
range = 12,
stack_max = 10000,
tiles = {"default_clay.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:desert_sand", {
description = S("Unbreakable Desert Sand"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_sand.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:sandstone", {
description = S("Unbreakable Sandstone"),
range = 12,
stack_max = 10000,
tiles = {"default_sandstone.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:sandstone_brick", {
description = S("Unbreakable Sandstone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_sandstone_brick.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:desert_stone", {
description = S("Unbreakable Desert Stone"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_stone.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:desert_cobble", {
description = S("Unbreakable Desert Cobble"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_cobble.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:desert_stonebrick", {
description = S("Unbreakable Desert Stone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_stone_brick.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:grass", {
description = S("Unbreakable Dirt with Grass"),
range = 12,
stack_max = 10000,
tiles = {
"default_grass.png",
"default_dirt.png",
"default_dirt.png^default_grass_side.png",
},
paramtype2 = "facedir",
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain = 0.4},
}),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:fullgrass", {
description = S("Unbreakable Full Grass"),
@ -311,142 +110,3 @@ for slab_num = 1,3,1 do
on_drop = maptools.drop_msg
})
end
minetest.register_node("maptools:cobble", {
description = S("Unbreakable Cobblestone"),
range = 12,
stack_max = 10000,
tiles = {"default_cobble.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:mossycobble", {
description = S("Unbreakable Mossy Cobblestone"),
range = 12,
stack_max = 10000,
tiles = {"default_mossycobble.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:brick", {
description = S("Unbreakable Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_brick.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:coalblock", {
description = S("Unbreakable Coal Block"),
range = 12,
stack_max = 10000,
tiles = {"default_coal_block.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:steelblock", {
description = S("Unbreakable Steel Block"),
range = 12,
stack_max = 10000,
tiles = {"default_steel_block.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:goldblock", {
description = S("Unbreakable Gold Block"),
range = 12,
stack_max = 10000,
tiles = {"default_gold_block.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:copperblock", {
description = S("Unbreakable Copper Block"),
range = 12,
stack_max = 10000,
tiles = {"default_copper_block.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:bronzeblock", {
description = S("Unbreakable Bronze Block"),
range = 12,
stack_max = 10000,
tiles = {"default_bronze_block.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:diamondblock", {
description = S("Unbreakable Diamond Block"),
range = 12,
stack_max = 10000,
tiles = {"default_diamond_block.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
-- Farming:
minetest.register_node("maptools:soil_wet", {
description = "Wet Soil",
range = 12,
stack_max = 10000,
tiles = {
"default_dirt.png^farming_soil_wet.png",
"default_dirt.png^farming_soil_wet_side.png",
},
drop = "",
groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
soil = 3,
wet = 1,
grassland = 1,
},
sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:desert_sand_soil_wet", {
description = "Wet Desert Sand Soil",
range = 12,
stack_max = 10000,
drop = "",
tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"},
groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
soil = 3,
wet = 1,
desert = 1,
},
sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg
})

View File

@ -1,5 +1,5 @@
name = maptools
description = Adds various special versions of normal blocks, tools, and other map maintainer tools.
depends = default
depends = default, farming
optional_depends = moreores
min_minetest_version = 5.0.0