mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-26 18:09:33 +01:00
7039bf9e7d
Set up a basic "on_place" function. Made _mcl_copper_waxed_variant and _mcl_copper_unwaxed_variant node parameters so that the waxing_copper_block and scraping_copper_block functions can be made generic. Adjusted said functions to look first for the variants, and added in protection checks for the blocks
260 lines
8.2 KiB
Lua
260 lines
8.2 KiB
Lua
--local deepslate_mod = minetest.get_modpath("mcl_deepslate")
|
|
|
|
-- a basic on_place()
|
|
function mcl_copper.on_place (itemstack, placer, pointed_thing)
|
|
if pointed_thing.type ~= "node" then
|
|
return itemstack
|
|
end
|
|
local node = minetest.get_node(pointed_thing.under)
|
|
local pos = pointed_thing.under
|
|
local node_name = node.name
|
|
|
|
if mcl_util.check_position_protection(pos, placer) then
|
|
return itemstack
|
|
end
|
|
|
|
-- Use pointed node's on_rightclick function first, if present
|
|
local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing)
|
|
if new_stack then
|
|
return new_stack
|
|
end
|
|
|
|
local placed = ItemStack(itemstack:get_name())
|
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
|
itemstack:take_item()
|
|
end
|
|
minetest.item_place(placed, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under)))
|
|
|
|
return itemstack
|
|
|
|
end
|
|
|
|
local function register_oxidation_abm(abm_name, node_name, oxidized_variant)
|
|
minetest.register_abm({
|
|
label = abm_name,
|
|
nodenames = { node_name },
|
|
interval = 500,
|
|
chance = 3,
|
|
action = function(pos, node)
|
|
minetest.swap_node(pos, { name = oxidized_variant, param2 = node.param2 })
|
|
end,
|
|
})
|
|
end
|
|
|
|
function waxing_copper_block(pos, node, player, itemstack, convert_to)
|
|
if itemstack:get_name() == "mcl_honey:honeycomb" then
|
|
-- prevent modification of protected nodes.
|
|
if mcl_util.check_position_protection(pos, player) then
|
|
return
|
|
end
|
|
|
|
local def = minetest.registered_nodes(node.name)
|
|
|
|
if def and def._mcl_copper_waxed_variant then
|
|
node.name = def._mcl_copper_waxed_variant
|
|
end
|
|
|
|
minetest.set_node(pos, node)
|
|
awards.unlock(player:get_player_name(), "mcl:wax_on")
|
|
if not minetest.is_creative_enabled(player:get_player_name()) then
|
|
itemstack:take_item()
|
|
end
|
|
return itemstack
|
|
|
|
else
|
|
return -- changed to work with mcl_util.call_on_rightclick()
|
|
end
|
|
end
|
|
|
|
function scraping_copper_block(pos, node, player, itemstack, convert_to)
|
|
if itemstack:get_name():find("axe") then
|
|
-- prevent modification of protected nodes.
|
|
if mcl_util.check_position_protection(pos, player) then
|
|
return
|
|
end
|
|
|
|
local def = minetest.registered_nodes(node.name)
|
|
|
|
if def and def._mcl_copper_unwaxed_variant then
|
|
node.name = def._mcl_copper_unwaxed_variant
|
|
end
|
|
|
|
minetest.set_node(pos, node)
|
|
awards.unlock(player:get_player_name(), "mcl:wax_off")
|
|
if not minetest.is_creative_enabled(player:get_player_name()) then
|
|
local tool = itemstack:get_name()
|
|
local wear = mcl_autogroup.get_wear(tool, "axey")
|
|
itemstack:add_wear(wear)
|
|
end
|
|
else
|
|
return
|
|
end
|
|
end
|
|
|
|
--[[
|
|
local stairs = {
|
|
{"stair", "exposed", "_inner", "cut_inner"},
|
|
{"stair", "weathered", "_inner", "exposed_cut_inner"},
|
|
{"stair", "exposed", "_outer", "cut_outer"},
|
|
{"stair", "weathered", "_outer", "exposed_cut_outer"},
|
|
{"stair", "oxidized", "_outer", "weathered_cut_outer"},
|
|
{"stair", "oxidized", "_inner", "weathered_cut_inner"},
|
|
{"slab", "exposed", "","cut"},
|
|
{"slab", "oxidized", "","weathered_cut"},
|
|
{"slab", "weathered", "","exposed_cut"},
|
|
{"slab", "exposed", "_top","cut_top"},
|
|
{"slab", "oxidized", "_top", "weathered_cut_top"},
|
|
{"slab", "weathered", "_top","exposed_cut_top"},
|
|
{"slab", "exposed", "_double","cut_double"},
|
|
{"slab", "oxidized", "_double","weathered_cut_double"},
|
|
{"slab", "weathered", "_double","exposed_cut_double"},
|
|
{"stair", "exposed", "","cut"},
|
|
{"stair", "oxidized", "", "weathered_cut"},
|
|
{"stair", "weathered", "", "exposed_cut"},
|
|
}]]
|
|
|
|
--[[
|
|
local function anti_oxidation_particles(pointed_thing)
|
|
local pos = pointed_thing.under
|
|
minetest.add_particlespawner({
|
|
amount = 8,
|
|
time = 1,
|
|
minpos = {x = pos.x - 1, y = pos.y - 1, z = pos.z - 1},
|
|
maxpos = {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1},
|
|
minvel = {x = 0, y = 0, z = 0},
|
|
maxvel = {x = 0, y = 0, z = 0},
|
|
minacc = {x = 0, y = 0, z = 0},
|
|
maxacc = {x = 0, y = 0, z = 0},
|
|
minexptime = 0.5,
|
|
maxexptime = 1,
|
|
minsize = 1,
|
|
maxsize = 2.5,
|
|
collisiondetection = false,
|
|
vertical = false,
|
|
texture = "mcl_copper_anti_oxidation_particle.png",
|
|
glow = 5,
|
|
})
|
|
end
|
|
|
|
local function add_wear(placer, itemstack)
|
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
|
local tool = itemstack:get_name()
|
|
local wear = mcl_autogroup.get_wear(tool, "axey")
|
|
itemstack:add_wear(wear)
|
|
end
|
|
end
|
|
|
|
local function anti_oxidation(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type ~= "node" then return end
|
|
|
|
local node = minetest.get_node(pointed_thing.under)
|
|
local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
|
|
|
|
if not placer:get_player_control().sneak and noddef.on_rightclick then
|
|
return minetest.item_place(itemstack, placer, pointed_thing)
|
|
end
|
|
|
|
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
|
|
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
|
|
return itemstack
|
|
end
|
|
|
|
if noddef._mcl_stripped_variant == nil then
|
|
for _, c in pairs(stairs) do
|
|
if noddef.name == "mcl_stairs:"..c[1].."_copper_"..c[2].."_cut"..c[3] then
|
|
minetest.swap_node(pointed_thing.under, {name="mcl_stairs:"..c[1].."_copper_"..c[4], param2=node.param2})
|
|
anti_oxidation_particles(pointed_thing)
|
|
add_wear(placer, itemstack)
|
|
end
|
|
end
|
|
if noddef._mcl_anti_oxidation_variant ~= nil then
|
|
minetest.swap_node(pointed_thing.under, {name=noddef._mcl_anti_oxidation_variant, param2=node.param2})
|
|
anti_oxidation_particles(pointed_thing)
|
|
add_wear(placer, itemstack)
|
|
end
|
|
elseif noddef._mcl_stripped_variant ~= nil then
|
|
minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2})
|
|
add_wear(placer, itemstack)
|
|
else
|
|
return itemstack
|
|
end
|
|
return itemstack
|
|
end
|
|
|
|
local function register_axe_override(axe_name)
|
|
minetest.override_item("mcl_tools:axe_"..axe_name, {
|
|
on_place = anti_oxidation,
|
|
})
|
|
end]]
|
|
|
|
--[[ Commented out for now because there the discussion how to handle this is ongoing
|
|
local stonelike = {"mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite"}
|
|
if not deepslate_mod then
|
|
if minetest.settings:get_bool("mcl_generate_ores", true) then
|
|
minetest.register_ore({
|
|
ore_type = "scatter",
|
|
ore = "mcl_copper:stone_with_copper",
|
|
wherein = stonelike,
|
|
clust_scarcity = 830,
|
|
clust_num_ores = 5,
|
|
clust_size = 3,
|
|
y_min = mcl_vars.mg_overworld_min,
|
|
y_max = mcl_worlds.layer_to_y(39),
|
|
})
|
|
minetest.register_ore({
|
|
ore_type = "scatter",
|
|
ore = "mcl_copper:stone_with_copper",
|
|
wherein = stonelike,
|
|
clust_scarcity = 1660,
|
|
clust_num_ores = 4,
|
|
clust_size = 2,
|
|
y_min = mcl_worlds.layer_to_y(40),
|
|
y_max = mcl_worlds.layer_to_y(63),
|
|
})
|
|
end
|
|
end
|
|
--]]
|
|
local block_oxidation = {
|
|
{ "", "_exposed" },
|
|
{ "_cut", "_exposed_cut" },
|
|
{ "_exposed", "_weathered" },
|
|
{ "_exposed_cut", "_weathered_cut" },
|
|
{ "_weathered", "_oxidized" },
|
|
{ "_weathered_cut", "_oxidized_cut" }
|
|
}
|
|
|
|
local stair_oxidation = {
|
|
{ "slab", "cut", "exposed_cut" },
|
|
{ "slab", "exposed_cut", "weathered_cut" },
|
|
{ "slab", "weathered_cut", "oxidized_cut" },
|
|
{ "slab", "cut_top", "exposed_cut_top" },
|
|
{ "slab", "exposed_cut_top", "weathered_cut_top" },
|
|
{ "slab", "weathered_cut_top", "oxidized_cut_double" },
|
|
{ "slab", "cut_double", "exposed_cut_double" },
|
|
{ "slab", "exposed_cut_double", "weathered_cut_double" },
|
|
{ "slab", "weathered_cut_double", "oxidized_cut_double" },
|
|
{ "stair", "cut", "exposed_cut" },
|
|
{ "stair", "exposed_cut", "weathered_cut" },
|
|
{ "stair", "weathered_cut", "oxidized_cut" },
|
|
{ "stair", "cut_inner", "exposed_cut_inner" },
|
|
{ "stair", "exposed_cut_inner", "weathered_cut_inner" },
|
|
{ "stair", "weathered_cut_inner", "oxidized_cut_inner" },
|
|
{ "stair", "cut_outer", "exposed_cut_outer" },
|
|
{ "stair", "exposed_cut_outer", "weathered_cut_outer" },
|
|
{ "stair", "weathered_cut_outer", "oxidized_cut_outer" }
|
|
}
|
|
|
|
for _, b in pairs(block_oxidation) do
|
|
register_oxidation_abm("Copper oxidation", "mcl_copper:block" .. b[1], "mcl_copper:block" .. b[2])
|
|
end
|
|
|
|
for _, s in pairs(stair_oxidation) do
|
|
register_oxidation_abm("Copper oxidation", "mcl_stairs:" .. s[1] .. "_copper_" .. s[2], "mcl_stairs:" .. s[1] .. "_copper_" .. s[3])
|
|
end
|
|
|
|
--local axes = {"wood", "stone", "iron", "gold", "diamond"}
|
|
--[[
|
|
for _, axe in pairs(axes) do
|
|
register_axe_override(axe)
|
|
end
|
|
]]
|