Make more items respect the node's on_rightclick

- Bone meal
- Fishing rod
- Seeds
- Hopper
- Nether wart
- Sponge
- Bow
- Shovel
This commit is contained in:
Wuzzy 2017-03-02 16:09:13 +01:00
parent 064bf1effe
commit 9cb2f5b392
8 changed files with 72 additions and 3 deletions

View File

@ -217,6 +217,15 @@ minetest.register_craftitem("mcl_dye:white", {
stack_max = 64, stack_max = 64,
groups = dyelocal.dyes[1][3], groups = dyelocal.dyes[1][3],
on_place = function(itemstack, user, pointed_thing) on_place = function(itemstack, user, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if user and not user:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
end
end
-- Use the bone meal on the ground
if(mcl_dye.apply_bone_meal(pointed_thing) and not minetest.setting_getbool("creative_mode")) then if(mcl_dye.apply_bone_meal(pointed_thing) and not minetest.setting_getbool("creative_mode")) then
itemstack:take_item() itemstack:take_item()
end end

View File

@ -46,6 +46,14 @@ function mcl_farming:place_seed(itemstack, placer, pointed_thing, plantname)
if pt.type ~= "node" then if pt.type ~= "node" then
return return
end end
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pt.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pt.under, node, placer, itemstack) or itemstack
end
end
local pos = {x=pt.above.x, y=pt.above.y-1, z=pt.above.z} local pos = {x=pt.above.x, y=pt.above.y-1, z=pt.above.z}
local farmland = minetest.get_node(pos) local farmland = minetest.get_node(pos)

View File

@ -1,6 +1,13 @@
local go_fishing = function(itemstack, user, pointed_thing) local go_fishing = function(itemstack, user, pointed_thing)
if pointed_thing and pointed_thing.under then if pointed_thing and pointed_thing.under then
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under) local node = minetest.get_node(pointed_thing.under)
if user and not user:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
end
end
if string.find(node.name, "mcl_core:water") then if string.find(node.name, "mcl_core:water") then
local itemname local itemname
local itemcount = 1 local itemcount = 1

View File

@ -48,8 +48,17 @@ minetest.register_node("mcl_hoppers:hopper", {
local upos = pointed_thing.under local upos = pointed_thing.under
local apos = pointed_thing.above local apos = pointed_thing.above
local uposnode = minetest.get_node(upos)
local uposnodedef = minetest.registered_nodes[uposnode.name]
-- Use pointed node's on_rightclick function first, if present
if placer and not placer:get_player_control().sneak then
if uposnodedef and uposnodedef.on_rightclick then
return uposnodedef.on_rightclick(pointed_thing.under, uposnode, placer, itemstack) or itemstack
end
end
local bpos local bpos
local uposnodedef = minetest.registered_nodes[minetest.get_node(upos).name]
if uposnodedef.buildable_to then if uposnodedef.buildable_to then
bpos = upos bpos = upos
else else

View File

@ -74,13 +74,22 @@ minetest.register_node("mcl_nether:nether_wart", {
}) })
minetest.register_craftitem("mcl_nether:nether_wart_item", { minetest.register_craftitem("mcl_nether:nether_wart_item", {
description = "Nether Wart", descripointed_thingption = "Nether Wart",
inventory_image = "mcl_nether_nether_wart.png", inventory_image = "mcl_nether_nether_wart.png",
wield_image = "mcl_nether_nether_wart.png", wield_image = "mcl_nether_nether_wart.png",
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then if pointed_thing.type ~= "node" then
return itemstack return itemstack
end end
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
end
end
local placepos = pointed_thing.above local placepos = pointed_thing.above
local soilpos = table.copy(placepos) local soilpos = table.copy(placepos)
soilpos.y = soilpos.y - 1 soilpos.y = soilpos.y - 1

View File

@ -16,6 +16,15 @@ minetest.register_node("mcl_sponges:sponge", {
if pointed_thing.type ~= "node" then if pointed_thing.type ~= "node" then
return itemstack return itemstack
end end
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
end
end
if minetest.is_protected(pointed_thing.above, pn) then if minetest.is_protected(pointed_thing.above, pn) then
return itemstack return itemstack
end end

View File

@ -72,6 +72,16 @@ end
local powerup_function = function(nextbow) local powerup_function = function(nextbow)
return function(itemstack, placer, pointed_thing) return function(itemstack, placer, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
if pointed_thing.type == "node" then
local node = minetest.get_node(pointed_thing.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
end
end
end
if get_arrow(placer) ~= nil then if get_arrow(placer) ~= nil then
local wear = itemstack:get_wear() local wear = itemstack:get_wear()
itemstack:replace(nextbow) itemstack:replace(nextbow)

View File

@ -142,7 +142,15 @@ local get_shovel_dig_group = function(itemstring)
end end
local make_grass_path = function(itemstack, placer, pointed_thing) local make_grass_path = function(itemstack, placer, pointed_thing)
if minetest.get_node(pointed_thing.under).name == "mcl_tools:dirt_with_grass" and pointed_thing.above.y == pointed_thing.under.y then -- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
end
end
if minetest.get_node(node).name == "mcl_tools:dirt_with_grass" and pointed_thing.above.y == pointed_thing.under.y then
local above = table.copy(pointed_thing.under) local above = table.copy(pointed_thing.under)
above.y = above.y + 1 above.y = above.y + 1
if minetest.get_node(above).name == "air" then if minetest.get_node(above).name == "air" then