forked from minetest/minetest_game
Allow opening chests when wielding corals
Code simplification by combining the on_place functions.
This commit is contained in:
parent
5b1d5819e5
commit
95aaec6670
|
@ -1996,6 +1996,46 @@ minetest.register_node("default:sand_with_kelp", {
|
||||||
-- Corals
|
-- Corals
|
||||||
--
|
--
|
||||||
|
|
||||||
|
local function coral_on_place(itemstack, placer, pointed_thing)
|
||||||
|
if pointed_thing.type ~= "node" or not placer then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
local player_name = placer:get_player_name()
|
||||||
|
local pos_under = pointed_thing.under
|
||||||
|
local pos_above = pointed_thing.above
|
||||||
|
local node_under = minetest.get_node(pos_under)
|
||||||
|
local def_under = minetest.registered_nodes[node_under.name]
|
||||||
|
|
||||||
|
if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then
|
||||||
|
return def_under.on_rightclick(pos_under, node_under.name,
|
||||||
|
placer, itemstack, pointed_thing) or itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
if node_under.name ~= "default:coral_skeleton" or
|
||||||
|
minetest.get_node(pos_above).name ~= "default:water_source" then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.is_protected(pos_under, player_name) or
|
||||||
|
minetest.is_protected(pos_above, player_name) then
|
||||||
|
minetest.log("action", player_name
|
||||||
|
.. " tried to place " .. itemstack:get_name()
|
||||||
|
.. " at protected position "
|
||||||
|
.. minetest.pos_to_string(pos_under))
|
||||||
|
minetest.record_protection_violation(pos_under, player_name)
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
node_under.name = itemstack:get_name()
|
||||||
|
minetest.set_node(pos_under, node_under)
|
||||||
|
if not (creative and creative.is_enabled_for(player_name)) then
|
||||||
|
itemstack:take_item()
|
||||||
|
end
|
||||||
|
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node("default:coral_green", {
|
minetest.register_node("default:coral_green", {
|
||||||
description = "Green Coral",
|
description = "Green Coral",
|
||||||
drawtype = "plantlike_rooted",
|
drawtype = "plantlike_rooted",
|
||||||
|
@ -2019,34 +2059,7 @@ minetest.register_node("default:coral_green", {
|
||||||
dug = {name = "default_grass_footstep", gain = 0.25},
|
dug = {name = "default_grass_footstep", gain = 0.25},
|
||||||
}),
|
}),
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = coral_on_place,
|
||||||
if pointed_thing.type ~= "node" or not placer then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local player_name = placer:get_player_name()
|
|
||||||
local pos_under = pointed_thing.under
|
|
||||||
local pos_above = pointed_thing.above
|
|
||||||
|
|
||||||
if minetest.get_node(pos_under).name ~= "default:coral_skeleton" or
|
|
||||||
minetest.get_node(pos_above).name ~= "default:water_source" then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.is_protected(pos_under, player_name) or
|
|
||||||
minetest.is_protected(pos_above, player_name) then
|
|
||||||
minetest.chat_send_player(player_name, "Node is protected")
|
|
||||||
minetest.record_protection_violation(pos_under, player_name)
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.set_node(pos_under, {name = "default:coral_green"})
|
|
||||||
if not (creative and creative.is_enabled_for(player_name)) then
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
|
||||||
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
|
|
||||||
after_destruct = function(pos, oldnode)
|
after_destruct = function(pos, oldnode)
|
||||||
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
||||||
|
@ -2076,34 +2089,7 @@ minetest.register_node("default:coral_pink", {
|
||||||
dug = {name = "default_grass_footstep", gain = 0.25},
|
dug = {name = "default_grass_footstep", gain = 0.25},
|
||||||
}),
|
}),
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = coral_on_place,
|
||||||
if pointed_thing.type ~= "node" or not placer then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local player_name = placer:get_player_name()
|
|
||||||
local pos_under = pointed_thing.under
|
|
||||||
local pos_above = pointed_thing.above
|
|
||||||
|
|
||||||
if minetest.get_node(pos_under).name ~= "default:coral_skeleton" or
|
|
||||||
minetest.get_node(pos_above).name ~= "default:water_source" then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.is_protected(pos_under, player_name) or
|
|
||||||
minetest.is_protected(pos_above, player_name) then
|
|
||||||
minetest.chat_send_player(player_name, "Node is protected")
|
|
||||||
minetest.record_protection_violation(pos_under, player_name)
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.set_node(pos_under, {name = "default:coral_pink"})
|
|
||||||
if not (creative and creative.is_enabled_for(player_name)) then
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
|
||||||
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
|
|
||||||
after_destruct = function(pos, oldnode)
|
after_destruct = function(pos, oldnode)
|
||||||
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
||||||
|
@ -2133,34 +2119,7 @@ minetest.register_node("default:coral_cyan", {
|
||||||
dug = {name = "default_grass_footstep", gain = 0.25},
|
dug = {name = "default_grass_footstep", gain = 0.25},
|
||||||
}),
|
}),
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = coral_on_place,
|
||||||
if pointed_thing.type ~= "node" or not placer then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local player_name = placer:get_player_name()
|
|
||||||
local pos_under = pointed_thing.under
|
|
||||||
local pos_above = pointed_thing.above
|
|
||||||
|
|
||||||
if minetest.get_node(pos_under).name ~= "default:coral_skeleton" or
|
|
||||||
minetest.get_node(pos_above).name ~= "default:water_source" then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.is_protected(pos_under, player_name) or
|
|
||||||
minetest.is_protected(pos_above, player_name) then
|
|
||||||
minetest.chat_send_player(player_name, "Node is protected")
|
|
||||||
minetest.record_protection_violation(pos_under, player_name)
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.set_node(pos_under, {name = "default:coral_cyan"})
|
|
||||||
if not (creative and creative.is_enabled_for(player_name)) then
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
|
||||||
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
|
|
||||||
after_destruct = function(pos, oldnode)
|
after_destruct = function(pos, oldnode)
|
||||||
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
||||||
|
|
Loading…
Reference in New Issue
Block a user