mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-24 17:09:32 +01:00
0a474ee578
It was possible to duplicate snow layers by placing them and then mining them using a tool enchanted with silk touch. This commit fixes the “snow dupe” by reducing the amount of snow layers dropped in this case by one.
1071 lines
38 KiB
Lua
1071 lines
38 KiB
Lua
local S = minetest.get_translator(minetest.get_current_modname())
|
|
|
|
-- Simple solid cubic nodes, most of them are the ground materials and simple building blocks
|
|
|
|
local translucent_ice = minetest.settings:get_bool("mcl_translucent_ice", false)
|
|
local ice_drawtype, ice_texture_alpha
|
|
if translucent_ice then
|
|
ice_drawtype = "glasslike"
|
|
ice_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true
|
|
else
|
|
ice_drawtype = "normal"
|
|
ice_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false
|
|
end
|
|
|
|
mcl_core.fortune_drop_ore = {
|
|
discrete_uniform_distribution = true,
|
|
min_count = 2,
|
|
max_count = 1,
|
|
get_chance = function(fortune_level) return 1 - 2 / (fortune_level + 2) end,
|
|
multiply = true,
|
|
}
|
|
|
|
minetest.register_node("mcl_core:stone", {
|
|
description = S("Stone"),
|
|
_doc_items_longdesc = S("One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"default_stone.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
drop = "mcl_core:cobble",
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
_mcl_silk_touch_drop = true,
|
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
if awards and awards.unlock and digger and digger:is_player() then
|
|
awards.unlock(digger:get_player_name(), "mcl:stoneAge")
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stone_with_coal", {
|
|
description = S("Coal Ore"),
|
|
_doc_items_longdesc = S("Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"mcl_core_coal_ore.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, building_block=1, material_stone=1, xp=1},
|
|
drop = "mcl_core:coal_lump",
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = mcl_core.fortune_drop_ore,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stone_with_iron", {
|
|
description = S("Iron Ore"),
|
|
_doc_items_longdesc = S("Some iron contained in stone, it is prety common and can be found below sea level."),
|
|
tiles = {"mcl_core_iron_ore.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=3, building_block=1, material_stone=1},
|
|
drop = "mcl_core:stone_with_iron",
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
|
|
|
|
minetest.register_node("mcl_core:stone_with_gold", {
|
|
description = S("Gold Ore"),
|
|
_doc_items_longdesc = S("This stone contains pure gold, a rare metal."),
|
|
tiles = {"mcl_core_gold_ore.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, building_block=1, material_stone=1},
|
|
drop = "mcl_core:stone_with_gold",
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
|
|
local redstone_timer = 68.28
|
|
local function redstone_ore_activate(pos)
|
|
minetest.swap_node(pos, {name="mcl_core:stone_with_redstone_lit"})
|
|
local t = minetest.get_node_timer(pos)
|
|
t:start(redstone_timer)
|
|
end
|
|
minetest.register_node("mcl_core:stone_with_redstone", {
|
|
description = S("Redstone Ore"),
|
|
_doc_items_longdesc = S("Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon."),
|
|
tiles = {"mcl_core_redstone_ore.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, building_block=1, material_stone=1, xp=7},
|
|
drop = {
|
|
items = {
|
|
max_items = 1,
|
|
{
|
|
items = {"mesecons:redstone 4"},
|
|
rarity = 2,
|
|
},
|
|
{
|
|
items = {"mesecons:redstone 5"},
|
|
},
|
|
}
|
|
},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
on_punch = redstone_ore_activate,
|
|
on_walk_over = redstone_ore_activate, -- Uses walkover mod
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = {
|
|
discrete_uniform_distribution = true,
|
|
items = {"mesecons:redstone"},
|
|
min_count = 4,
|
|
max_count = 5,
|
|
}
|
|
})
|
|
|
|
local function redstone_ore_reactivate(pos)
|
|
local t = minetest.get_node_timer(pos)
|
|
t:start(redstone_timer)
|
|
end
|
|
-- Light the redstone ore up when it has been touched
|
|
minetest.register_node("mcl_core:stone_with_redstone_lit", {
|
|
description = S("Lit Redstone Ore"),
|
|
_doc_items_create_entry = false,
|
|
tiles = {"mcl_core_redstone_ore.png"},
|
|
paramtype = "light",
|
|
light_source = 9,
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, not_in_creative_inventory=1, material_stone=1, xp=7},
|
|
drop = {
|
|
items = {
|
|
max_items = 1,
|
|
{
|
|
items = {"mesecons:redstone 4"},
|
|
rarity = 2,
|
|
},
|
|
{
|
|
items = {"mesecons:redstone 5"},
|
|
},
|
|
}
|
|
},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
-- Reset timer after re-punching or stepping on
|
|
on_punch = redstone_ore_reactivate,
|
|
on_walk_over = redstone_ore_reactivate, -- Uses walkover mod
|
|
-- Turn back to normal node after some time has passed
|
|
on_timer = function(pos, elapsed)
|
|
minetest.swap_node(pos, {name="mcl_core:stone_with_redstone"})
|
|
end,
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = {"mcl_core:stone_with_redstone"},
|
|
_mcl_fortune_drop = {
|
|
discrete_uniform_distribution = true,
|
|
items = {"mesecons:redstone"},
|
|
min_count = 4,
|
|
max_count = 5,
|
|
}
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stone_with_lapis", {
|
|
description = S("Lapis Lazuli Ore"),
|
|
_doc_items_longdesc = S("Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world."),
|
|
tiles = {"mcl_core_lapis_ore.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=3, building_block=1, material_stone=1, xp=6},
|
|
drop = {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {"mcl_dye:blue 8"},rarity = 5},
|
|
{items = {"mcl_dye:blue 7"},rarity = 5},
|
|
{items = {"mcl_dye:blue 6"},rarity = 5},
|
|
{items = {"mcl_dye:blue 5"},rarity = 5},
|
|
{items = {"mcl_dye:blue 4"}},
|
|
}
|
|
},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = mcl_core.fortune_drop_ore,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stone_with_emerald", {
|
|
description = S("Emerald Ore"),
|
|
_doc_items_longdesc = S("Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters."),
|
|
tiles = {"mcl_core_emerald_ore.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, building_block=1, material_stone=1, xp=6},
|
|
drop = "mcl_core:emerald",
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = mcl_core.fortune_drop_ore,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stone_with_diamond", {
|
|
description = S("Diamond Ore"),
|
|
_doc_items_longdesc = S("Diamond ore is rare and can be found in clusters near the bottom of the world."),
|
|
tiles = {"mcl_core_diamond_ore.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, building_block=1, material_stone=1, xp=4},
|
|
drop = "mcl_core:diamond",
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = mcl_core.fortune_drop_ore,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stonebrick", {
|
|
description = S("Stone Bricks"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
tiles = {"default_stone_brick.png"},
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
is_ground_content = false,
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stonebrickcarved", {
|
|
description = S("Chiseled Stone Bricks"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
tiles = {"mcl_core_stonebrick_carved.png"},
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
is_ground_content = false,
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stonebrickcracked", {
|
|
description = S("Cracked Stone Bricks"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
tiles = {"mcl_core_stonebrick_cracked.png"},
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
is_ground_content = false,
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stonebrickmossy", {
|
|
description = S("Mossy Stone Bricks"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
tiles = {"mcl_core_stonebrick_mossy.png"},
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, stonebrick=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
is_ground_content = false,
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:stone_smooth", {
|
|
description = S("Polished Stone"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
tiles = {"mcl_stairs_stone_slab_top.png"},
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
is_ground_content = false,
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:granite", {
|
|
description = S("Granite"),
|
|
_doc_items_longdesc = S("Granite is an igneous rock."),
|
|
tiles = {"mcl_core_granite.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:granite_smooth", {
|
|
description = S("Polished Granite"),
|
|
_doc_items_longdesc = S("Polished granite is a decorative building block made from granite."),
|
|
tiles = {"mcl_core_granite_smooth.png"},
|
|
stack_max = 64,
|
|
is_ground_content = false,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:andesite", {
|
|
description = S("Andesite"),
|
|
_doc_items_longdesc = S("Andesite is an igneous rock."),
|
|
tiles = {"mcl_core_andesite.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:andesite_smooth", {
|
|
description = S("Polished Andesite"),
|
|
_doc_items_longdesc = S("Polished andesite is a decorative building block made from andesite."),
|
|
tiles = {"mcl_core_andesite_smooth.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:diorite", {
|
|
description = S("Diorite"),
|
|
_doc_items_longdesc = S("Diorite is an igneous rock."),
|
|
tiles = {"mcl_core_diorite.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:diorite_smooth", {
|
|
description = S("Polished Diorite"),
|
|
_doc_items_longdesc = S("Polished diorite is a decorative building block made from diorite."),
|
|
tiles = {"mcl_core_diorite_smooth.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, stone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 1.5,
|
|
})
|
|
|
|
-- Grass Block
|
|
minetest.register_node("mcl_core:dirt_with_grass", {
|
|
description = S("Grass Block"),
|
|
_doc_items_longdesc = S("A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt."),
|
|
_doc_items_hidden = false,
|
|
paramtype2 = "color",
|
|
tiles = {"mcl_core_grass_block_top.png", { name="default_dirt.png", color="white" }},
|
|
overlay_tiles = {"mcl_core_grass_block_top.png", "", {name="mcl_core_grass_block_side_overlay.png", tileable_vertical=false}},
|
|
palette = "mcl_core_palette_grass.png",
|
|
palette_index = 0,
|
|
color = "#55aa60",
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1,dirt=2,grass_block=1, grass_block_no_snow=1, soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, spreading_dirt_type=1, enderman_takable=1, building_block=1},
|
|
drop = "mcl_core:dirt",
|
|
sounds = mcl_sounds.node_sound_dirt_defaults({
|
|
footstep = {name="default_grass_footstep", gain=0.1},
|
|
}),
|
|
on_construct = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
if node.param2 == 0 then
|
|
local new_node = mcl_core.get_grass_block_type(pos)
|
|
if new_node.param2 ~= 0 or new_node.name ~= "mcl_core:dirt_with_grass" then
|
|
minetest.set_node(pos, new_node)
|
|
end
|
|
end
|
|
return mcl_core.on_snowable_construct(pos)
|
|
end,
|
|
_mcl_snowed = "mcl_core:dirt_with_grass_snow",
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.6,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
mcl_core.register_snowed_node("mcl_core:dirt_with_grass_snow", "mcl_core:dirt_with_grass", nil, nil, true, S("Dirt with Snow"))
|
|
|
|
minetest.register_node("mcl_core:grass_path", {
|
|
tiles = {"mcl_core_grass_path_top.png", "default_dirt.png", "mcl_core_grass_path_side.png"},
|
|
description = S("Grass Path"),
|
|
_doc_items_longdesc = S("Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block."),
|
|
drop = "mcl_core:dirt",
|
|
is_ground_content = true,
|
|
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
-- 15/16 of the normal height
|
|
{-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5},
|
|
}
|
|
},
|
|
groups = {handy=1,shovely=1, cultivatable=2, dirtifies_below_solid=1, dirtifier=1, deco_block=1 },
|
|
sounds = mcl_sounds.node_sound_dirt_defaults({
|
|
footstep = {name="default_grass_footstep", gain=0.1},
|
|
}),
|
|
_mcl_blast_resistance = 0.65,
|
|
_mcl_hardness = 0.6,
|
|
})
|
|
|
|
-- TODO: Add particles
|
|
minetest.register_node("mcl_core:mycelium", {
|
|
description = S("Mycelium"),
|
|
_doc_items_longdesc = S("Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt."),
|
|
tiles = {"mcl_core_mycelium_top.png", "default_dirt.png", {name="mcl_core_mycelium_side.png", tileable_vertical=false}},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1, dirt=2,spreading_dirt_type=1, enderman_takable=1, building_block=1},
|
|
drop = "mcl_core:dirt",
|
|
sounds = mcl_sounds.node_sound_dirt_defaults({
|
|
footstep = {name="default_grass_footstep", gain=0.1},
|
|
}),
|
|
|
|
on_construct = mcl_core.on_snowable_construct,
|
|
_mcl_snowed = "mcl_core:mycelium_snow",
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.6,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
mcl_core.register_snowed_node("mcl_core:mycelium_snow", "mcl_core:mycelium", nil, nil, false, S("Mycelium with Snow"))
|
|
|
|
minetest.register_node("mcl_core:podzol", {
|
|
description = S("Podzol"),
|
|
_doc_items_longdesc = S("Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it."),
|
|
tiles = {"mcl_core_dirt_podzol_top.png", "default_dirt.png", {name="mcl_core_dirt_podzol_side.png", tileable_vertical=false}},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=3, dirt=2,soil=1, soil_sapling=2, soil_sugarcane=1, enderman_takable=1, building_block=1},
|
|
drop = "mcl_core:dirt",
|
|
sounds = mcl_sounds.node_sound_dirt_defaults(),
|
|
on_construct = mcl_core.on_snowable_construct,
|
|
_mcl_snowed = "mcl_core:podzol_snow",
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.6,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
mcl_core.register_snowed_node("mcl_core:podzol_snow", "mcl_core:podzol", nil, nil, false, S("Podzol with Snow"))
|
|
|
|
minetest.register_node("mcl_core:dirt", {
|
|
description = S("Dirt"),
|
|
_doc_items_longdesc = S("Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"default_dirt.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1, dirt=1,soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, enderman_takable=1, building_block=1},
|
|
sounds = mcl_sounds.node_sound_dirt_defaults(),
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:coarse_dirt", {
|
|
description = S("Coarse Dirt"),
|
|
_doc_items_longdesc = S("Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover."),
|
|
tiles = {"mcl_core_coarse_dirt.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1, dirt=3,soil=1, soil_sugarcane=1, cultivatable=1, enderman_takable=1, building_block=1},
|
|
sounds = mcl_sounds.node_sound_dirt_defaults(),
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:gravel", {
|
|
description = S("Gravel"),
|
|
_doc_items_longdesc = S("This block consists of a couple of loose stones and can't support itself."),
|
|
tiles = {"default_gravel.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1, falling_node=1, enderman_takable=1, building_block=1, material_sand=1},
|
|
drop = {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {"mcl_core:flint"},rarity = 10},
|
|
{items = {"mcl_core:gravel"}}
|
|
}
|
|
},
|
|
sounds = mcl_sounds.node_sound_dirt_defaults({
|
|
footstep = {name="default_gravel_footstep", gain=0.45},
|
|
}),
|
|
_mcl_blast_resistance = 0.6,
|
|
_mcl_hardness = 0.6,
|
|
_mcl_silk_touch_drop = true,
|
|
_mcl_fortune_drop = {
|
|
[1] = {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {"mcl_core:flint"},rarity = 7},
|
|
{items = {"mcl_core:gravel"}}
|
|
}
|
|
},
|
|
[2] = {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {"mcl_core:flint"},rarity = 4},
|
|
{items = {"mcl_core:gravel"}}
|
|
}
|
|
},
|
|
[3] = "mcl_core:flint",
|
|
},
|
|
})
|
|
|
|
-- sandstone --
|
|
minetest.register_node("mcl_core:sand", {
|
|
description = S("Sand"),
|
|
_doc_items_longdesc = S("Sand is found in large quantities at beaches and deserts."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"default_sand.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1, falling_node=1, sand=1, soil_sugarcane=1, enderman_takable=1, building_block=1, material_sand=1},
|
|
sounds = mcl_sounds.node_sound_sand_defaults(),
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:sandstone", {
|
|
description = S("Sandstone"),
|
|
_doc_items_hidden = false,
|
|
_doc_items_longdesc = S("Sandstone is compressed sand and is a rather soft kind of stone."),
|
|
tiles = {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_normal.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:sandstonesmooth", {
|
|
description = S("Cut Sandstone"),
|
|
_doc_items_longdesc = S("Cut sandstone is a decorative building block."),
|
|
tiles = {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_smooth.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:sandstonecarved", {
|
|
description = S("Chiseled Sandstone"),
|
|
_doc_items_longdesc = S("Chiseled sandstone is a decorative building block."),
|
|
tiles = {"mcl_core_sandstone_top.png", "mcl_core_sandstone_bottom.png", "mcl_core_sandstone_carved.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:sandstonesmooth2", {
|
|
description = S("Smooth Sandstone"),
|
|
_doc_items_hidden = false,
|
|
_doc_items_longdesc = S("Smooth sandstone is compressed sand and is a rather soft kind of stone."),
|
|
tiles = {"mcl_core_sandstone_top.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, normal_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
-- red sandstone --
|
|
|
|
minetest.register_node("mcl_core:redsand", {
|
|
description = S("Red Sand"),
|
|
_doc_items_longdesc = S("Red sand is found in large quantities in mesa biomes."),
|
|
tiles = {"mcl_core_red_sand.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1, falling_node=1, sand=1, soil_sugarcane=1, enderman_takable=1, building_block=1, material_sand=1},
|
|
sounds = mcl_sounds.node_sound_sand_defaults(),
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:redsandstone", {
|
|
description = S("Red Sandstone"),
|
|
_doc_items_longdesc = S("Red sandstone is compressed red sand and is a rather soft kind of stone."),
|
|
tiles = {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_normal.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:redsandstonesmooth", {
|
|
description = S("Cut Red Sandstone"),
|
|
_doc_items_longdesc = S("Cut red sandstone is a decorative building block."),
|
|
tiles = {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_smooth.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:redsandstonecarved", {
|
|
description = S("Chiseled Red Sandstone"),
|
|
_doc_items_longdesc = S("Chiseled red sandstone is a decorative building block."),
|
|
tiles = {"mcl_core_red_sandstone_top.png", "mcl_core_red_sandstone_bottom.png", "mcl_core_red_sandstone_carved.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:redsandstonesmooth2", {
|
|
description = S("Smooth Red Sandstone"),
|
|
_doc_items_longdesc = S("Smooth red sandstone is a decorative building block."),
|
|
tiles = {"mcl_core_red_sandstone_top.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, sandstone=1, red_sandstone=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 0.8,
|
|
_mcl_hardness = 0.8,
|
|
})
|
|
|
|
---
|
|
|
|
minetest.register_node("mcl_core:clay", {
|
|
description = S("Clay"),
|
|
_doc_items_longdesc = S("Clay is a versatile kind of earth commonly found at beaches underwater."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"default_clay.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,shovely=1, enderman_takable=1, building_block=1},
|
|
drop = "mcl_core:clay_lump 4",
|
|
sounds = mcl_sounds.node_sound_dirt_defaults(),
|
|
_mcl_blast_resistance = 0.6,
|
|
_mcl_hardness = 0.6,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:brick_block", {
|
|
-- Original name: “Bricks”
|
|
description = S("Brick Block"),
|
|
_doc_items_longdesc = S("Brick blocks are a good building material for building solid houses and can take quite a punch."),
|
|
tiles = {"default_brick.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 2,
|
|
})
|
|
|
|
|
|
minetest.register_node("mcl_core:bedrock", {
|
|
description = S("Bedrock"),
|
|
_doc_items_longdesc = S("Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.").."\n"..
|
|
S("In the End dimension, starting a fire on this block will create an eternal fire."),
|
|
tiles = {"mcl_core_bedrock.png"},
|
|
stack_max = 64,
|
|
groups = {creative_breakable=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
is_ground_content = false,
|
|
on_blast = function() end,
|
|
drop = "",
|
|
_mcl_blast_resistance = 3600000,
|
|
_mcl_hardness = -1,
|
|
|
|
-- Eternal fire on top of bedrock, if in the End dimension
|
|
after_destruct = function(pos)
|
|
pos.y = pos.y + 1
|
|
if minetest.get_node(pos).name == "mcl_fire:eternal_fire" then
|
|
minetest.remove_node(pos)
|
|
end
|
|
end,
|
|
_on_ignite = function(player, pointed_thing)
|
|
local pos = pointed_thing.under
|
|
local dim = mcl_worlds.pos_to_dimension(pos)
|
|
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
local fn = minetest.get_node(flame_pos)
|
|
local pname = player:get_player_name()
|
|
if minetest.is_protected(flame_pos, pname) then
|
|
return minetest.record_protection_violation(flame_pos, pname)
|
|
end
|
|
if dim == "end" and fn.name == "air" and pointed_thing.under.y < pointed_thing.above.y then
|
|
minetest.set_node(flame_pos, {name = "mcl_fire:eternal_fire"})
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:cobble", {
|
|
description = S("Cobblestone"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
_doc_items_hidden = false,
|
|
tiles = {"default_cobble.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 2,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:mossycobble", {
|
|
description = S("Mossy Cobblestone"),
|
|
_doc_items_longdesc = doc.sub.items.temp.build,
|
|
tiles = {"default_mossycobble.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, building_block=1, material_stone=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 2,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:coalblock", {
|
|
description = S("Block of Coal"),
|
|
_doc_items_longdesc = S("Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal."),
|
|
tiles = {"default_coal_block.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=1, flammable=1, building_block=1, material_stone=1, fire_encouragement=5, fire_flammability=5},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:ironblock", {
|
|
description = S("Block of Iron"),
|
|
_doc_items_longdesc = S("A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots."),
|
|
tiles = {"default_steel_block.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=2, building_block=1},
|
|
sounds = mcl_sounds.node_sound_metal_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:goldblock", {
|
|
description = S("Block of Gold"),
|
|
_doc_items_longdesc = S("A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots."),
|
|
tiles = {"default_gold_block.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, building_block=1},
|
|
sounds = mcl_sounds.node_sound_metal_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:diamondblock", {
|
|
description = S("Block of Diamond"),
|
|
_doc_items_longdesc = S("A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds."),
|
|
tiles = {"default_diamond_block.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, building_block=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:lapisblock", {
|
|
description = S("Lapis Lazuli Block"),
|
|
_doc_items_longdesc = S("A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli."),
|
|
tiles = {"mcl_core_lapis_block.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=3, building_block=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 3,
|
|
_mcl_hardness = 3,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:emeraldblock", {
|
|
description = S("Block of Emerald"),
|
|
_doc_items_longdesc = S("A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds."),
|
|
tiles = {"mcl_core_emerald_block.png"},
|
|
is_ground_content = false,
|
|
stack_max = 64,
|
|
groups = {pickaxey=4, building_block=1},
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
_mcl_blast_resistance = 6,
|
|
_mcl_hardness = 5,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:obsidian", {
|
|
description = S("Obsidian"),
|
|
_doc_items_longdesc = S("Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava."),
|
|
tiles = {"default_obsidian.png"},
|
|
is_ground_content = false,
|
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
|
stack_max = 64,
|
|
groups = {pickaxey=5, building_block=1, material_stone=1},
|
|
_mcl_blast_resistance = 1200,
|
|
_mcl_hardness = 50,
|
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
if awards and awards.unlock and digger and digger:is_player() then
|
|
awards.unlock(digger:get_player_name(), "mcl:obsidian")
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:ice", {
|
|
description = S("Ice"),
|
|
_doc_items_longdesc = S("Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source."),
|
|
drawtype = ice_drawtype,
|
|
tiles = {"default_ice.png"},
|
|
is_ground_content = true,
|
|
paramtype = "light",
|
|
use_texture_alpha = ice_texture_alpha,
|
|
stack_max = 64,
|
|
groups = {handy=1,pickaxey=1, slippery=3, building_block=1, ice=1},
|
|
drop = "",
|
|
sounds = mcl_sounds.node_sound_glass_defaults(),
|
|
node_dig_prediction = "mcl_core:water_source",
|
|
after_dig_node = function(pos, oldnode)
|
|
mcl_core.melt_ice(pos)
|
|
end,
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.5,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
|
|
minetest.register_node("mcl_core:packed_ice", {
|
|
description = S("Packed Ice"),
|
|
_doc_items_longdesc = S("Packed ice is a compressed form of ice. It is opaque and solid."),
|
|
tiles = {"mcl_core_ice_packed.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {handy=1,pickaxey=1, slippery=3, building_block=1, ice=1},
|
|
drop = "",
|
|
sounds = mcl_sounds.node_sound_glass_defaults(),
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.5,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
|
|
-- Frosted Ice (4 nodes)
|
|
for i=0,3 do
|
|
local ice = {}
|
|
function ice.increase_age(pos, ice_near, first_melt)
|
|
-- Increase age of frosted age or turn to water source if too old
|
|
local nn = minetest.get_node(pos).name
|
|
local age = tonumber(string.sub(nn, -1))
|
|
local dim = mcl_worlds.pos_to_dimension(pos)
|
|
if age == nil then return end
|
|
if age < 3 then
|
|
minetest.swap_node(pos, { name = "mcl_core:frosted_ice_"..(age+1) })
|
|
else
|
|
if dim ~= "nether" then
|
|
minetest.set_node(pos, { name = "mcl_core:water_source" })
|
|
else
|
|
minetest.remove_node(pos)
|
|
end
|
|
end
|
|
-- Spread aging to neighbor blocks, but not recursively
|
|
if first_melt and i == 3 then
|
|
for j=1, #ice_near do
|
|
ice.increase_age(ice_near[j], false)
|
|
end
|
|
end
|
|
end
|
|
local use_doc = i == 0
|
|
local longdesc
|
|
if use_doc then
|
|
longdesc = S("Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.")
|
|
end
|
|
minetest.register_node("mcl_core:frosted_ice_"..i, {
|
|
description = S("Frosted Ice"),
|
|
_doc_items_create_entry = use_doc,
|
|
_doc_items_longdesc = longdesc,
|
|
drawtype = ice_drawtype,
|
|
tiles = {"mcl_core_frosted_ice_"..i..".png"},
|
|
is_ground_content = false,
|
|
paramtype = "light",
|
|
use_texture_alpha = ice_texture_alpha,
|
|
stack_max = 64,
|
|
groups = {handy=1, frosted_ice=1, slippery=3, not_in_creative_inventory=1, ice=1},
|
|
drop = "",
|
|
sounds = mcl_sounds.node_sound_glass_defaults(),
|
|
on_construct = function(pos)
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:start(1.5)
|
|
end,
|
|
on_timer = function(pos, elapsed)
|
|
local ice_near = minetest.find_nodes_in_area(
|
|
{ x = pos.x - 1, y = pos.y - 1, z = pos.z - 1 },
|
|
{ x = pos.x + 1, y = pos.y + 1, z = pos.z + 1 },
|
|
{ "group:frosted_ice" }
|
|
)
|
|
-- Check condition to increase age
|
|
if (#ice_near < 4 and minetest.get_node_light(pos) > (11 - i)) or math.random(1, 3) == 1 then
|
|
ice.increase_age(pos, ice_near, true)
|
|
end
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:start(1.5)
|
|
end,
|
|
_mcl_blast_resistance = 0.5,
|
|
_mcl_hardness = 0.5,
|
|
})
|
|
|
|
-- Add entry aliases for the Help
|
|
if minetest.get_modpath("doc") and i > 0 then
|
|
doc.add_entry_alias("nodes", "mcl_core:frosted_ice_0", "nodes", "mcl_core:frosted_ice_"..i)
|
|
end
|
|
end
|
|
|
|
for i=1,8 do
|
|
local id, desc, longdesc, usagehelp, tt_help, help, walkable, drawtype, node_box
|
|
if i == 1 then
|
|
id = "mcl_core:snow"
|
|
desc = S("Top Snow")
|
|
tt_help = S("Stackable")
|
|
longdesc = S("Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.").."\n"..S("Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.")
|
|
usagehelp = S("This block can only be placed on full solid blocks and on another top snow (which increases its height).")
|
|
walkable = false
|
|
else
|
|
id = "mcl_core:snow_"..i
|
|
help = false
|
|
if minetest.get_modpath("doc") then
|
|
doc.add_entry_alias("nodes", "mcl_core:snow", "nodes", id)
|
|
end
|
|
walkable = true
|
|
end
|
|
if i ~= 8 then
|
|
drawtype = "nodebox"
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, -0.5 + (2*i)/16, 0.5 },
|
|
}
|
|
end
|
|
local function on_place(itemstack, placer, pointed_thing)
|
|
-- Placement is only allowed on top of solid blocks
|
|
if pointed_thing.type ~= "node" then
|
|
-- no interaction possible with entities
|
|
return itemstack
|
|
end
|
|
local def = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
|
|
local above = pointed_thing.above
|
|
local under = pointed_thing.under
|
|
local unode = minetest.get_node(under)
|
|
|
|
-- Check special rightclick action of pointed node
|
|
if def and def.on_rightclick then
|
|
if not placer:get_player_control().sneak then
|
|
return def.on_rightclick(under, unode, placer, itemstack,
|
|
pointed_thing) or itemstack, false
|
|
end
|
|
end
|
|
|
|
-- Get position where snow would be placed
|
|
local target
|
|
if minetest.registered_nodes[unode.name].buildable_to then
|
|
target = under
|
|
else
|
|
target = above
|
|
end
|
|
local tnode = minetest.get_node(target)
|
|
|
|
-- Stack snow
|
|
local g = minetest.get_item_group(tnode.name, "top_snow")
|
|
if g > 0 then
|
|
local itemstring = itemstack:get_name()
|
|
local itemcount = itemstack:get_count()
|
|
local fakestack = ItemStack(itemstring.." "..itemcount)
|
|
fakestack:set_name("mcl_core:snow_"..math.min(8, (i+g)))
|
|
itemstack = minetest.item_place(fakestack, placer, pointed_thing)
|
|
minetest.sound_play(mcl_sounds.node_sound_snow_defaults().place, {pos = pointed_thing.under}, true)
|
|
itemstack:set_name(itemstring)
|
|
return itemstack
|
|
end
|
|
|
|
-- Place snow normally
|
|
local below = {x=target.x, y=target.y-1, z=target.z}
|
|
local bnode = minetest.get_node(below)
|
|
|
|
if minetest.get_item_group(bnode.name, "solid") == 1 then
|
|
minetest.sound_play(mcl_sounds.node_sound_snow_defaults().place, {pos = below}, true)
|
|
return minetest.item_place_node(itemstack, placer, pointed_thing)
|
|
else
|
|
return itemstack
|
|
end
|
|
end
|
|
|
|
minetest.register_node(id, {
|
|
description = desc,
|
|
_tt_help = tt_help,
|
|
_doc_items_longdesc = longdesc,
|
|
_doc_items_usagehelp = usagehelp,
|
|
_doc_items_create_entry = help,
|
|
_doc_items_hidden = false,
|
|
tiles = {"default_snow.png"},
|
|
wield_image = "default_snow.png",
|
|
wield_scale = { x=1, y=1, z=i },
|
|
is_ground_content = true,
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
buildable_to = true,
|
|
node_placement_prediction = "", -- to prevent client flickering when stacking snow
|
|
drawtype = drawtype,
|
|
stack_max = 64,
|
|
walkable = walkable,
|
|
floodable = true,
|
|
on_flood = function(pos, oldnode, newnode)
|
|
local npos = {x=pos.x, y=pos.y-1, z=pos.z}
|
|
local node = minetest.get_node(npos)
|
|
mcl_core.clear_snow_dirt(npos, node)
|
|
end,
|
|
node_box = node_box,
|
|
groups = {shovely=1, attached_node=1,deco_block=1, dig_by_piston=1, snow_cover=1, top_snow=i},
|
|
sounds = mcl_sounds.node_sound_snow_defaults(),
|
|
on_construct = mcl_core.on_snow_construct,
|
|
on_place = on_place,
|
|
after_destruct = mcl_core.after_snow_destruct,
|
|
drop = "mcl_throwing:snowball "..(i+1),
|
|
_mcl_blast_resistance = 0.1,
|
|
_mcl_hardness = 0.1,
|
|
_mcl_silk_touch_drop = {"mcl_core:snow " .. i},
|
|
})
|
|
end
|
|
|
|
minetest.register_node("mcl_core:snowblock", {
|
|
description = S("Snow"),
|
|
_doc_items_longdesc = S("This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold."),
|
|
_doc_items_hidden = false,
|
|
tiles = {"default_snow.png"},
|
|
is_ground_content = true,
|
|
stack_max = 64,
|
|
groups = {shovely=1, building_block=1, snow_cover=1},
|
|
sounds = mcl_sounds.node_sound_snow_defaults(),
|
|
on_construct = mcl_core.on_snow_construct,
|
|
after_destruct = mcl_core.after_snow_destruct,
|
|
drop = "mcl_throwing:snowball 4",
|
|
_mcl_blast_resistance = 0.2,
|
|
_mcl_hardness = 0.2,
|
|
_mcl_silk_touch_drop = true,
|
|
})
|
|
|
|
-- Add entry aliases for the Help
|
|
if minetest.get_modpath("doc") then
|
|
doc.add_entry_alias("nodes", "mcl_core:stone_with_redstone", "nodes", "mcl_core:stone_with_redstone_lit")
|
|
doc.add_entry_alias("nodes", "mcl_core:water_source", "nodes", "mcl_core:water_flowing")
|
|
doc.add_entry_alias("nodes", "mcl_core:lava_source", "nodes", "mcl_core:lava_flowing")
|
|
end
|
|
|