Call on_secondary_use when object is right-clicked

This commit is contained in:
sfan5 2019-11-10 00:36:29 +01:00
parent 3b0df9760b
commit 4d668f32a6
4 changed files with 15 additions and 7 deletions

View File

@ -6432,9 +6432,9 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
-- default: minetest.item_place -- default: minetest.item_place
on_secondary_use = function(itemstack, user, pointed_thing), on_secondary_use = function(itemstack, user, pointed_thing),
-- Same as on_place but called when pointing at nothing. -- Same as on_place but called when not pointing at a node.
-- The user may be any ObjectRef or nil. -- The user may be any ObjectRef or nil.
-- pointed_thing: always { type = "nothing" } -- default: nil
on_drop = function(itemstack, dropper, pos), on_drop = function(itemstack, dropper, pos),
-- Shall drop item and return the leftover itemstack. -- Shall drop item and return the leftover itemstack.

View File

@ -1316,6 +1316,13 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
<< pointed_object->getDescription() << std::endl; << pointed_object->getDescription() << std::endl;
// Do stuff // Do stuff
if (m_script->item_OnSecondaryUse(
selected_item, playersao, pointed)) {
if (playersao->setWieldedItem(selected_item)) {
SendInventory(playersao, true);
}
}
pointed_object->rightClick(playersao); pointed_object->rightClick(playersao);
} else if (m_script->item_OnPlace( } else if (m_script->item_OnPlace(
selected_item, playersao, pointed)) { selected_item, playersao, pointed)) {
@ -1376,8 +1383,10 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
actionstream << player->getName() << " activates " actionstream << player->getName() << " activates "
<< selected_item.name << std::endl; << selected_item.name << std::endl;
pointed.type = POINTEDTHING_NOTHING; // can only ever be NOTHING
if (m_script->item_OnSecondaryUse( if (m_script->item_OnSecondaryUse(
selected_item, playersao)) { selected_item, playersao, pointed)) {
if (playersao->setWieldedItem(selected_item)) { if (playersao->setWieldedItem(selected_item)) {
SendInventory(playersao, true); SendInventory(playersao, true);
} }

View File

@ -115,7 +115,8 @@ bool ScriptApiItem::item_OnUse(ItemStack &item,
return true; return true;
} }
bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item, ServerActiveObject *user) bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item,
ServerActiveObject *user, const PointedThing &pointed)
{ {
SCRIPTAPI_PRECHECKHEADER SCRIPTAPI_PRECHECKHEADER
@ -126,8 +127,6 @@ bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item, ServerActiveObject *use
LuaItemStack::create(L, item); LuaItemStack::create(L, item);
objectrefGetOrCreate(L, user); objectrefGetOrCreate(L, user);
PointedThing pointed;
pointed.type = POINTEDTHING_NOTHING;
pushPointedThing(pointed); pushPointedThing(pointed);
PCALL_RES(lua_pcall(L, 3, 1, error_handler)); PCALL_RES(lua_pcall(L, 3, 1, error_handler));
if (!lua_isnil(L, -1)) { if (!lua_isnil(L, -1)) {

View File

@ -42,7 +42,7 @@ public:
bool item_OnUse(ItemStack &item, bool item_OnUse(ItemStack &item,
ServerActiveObject *user, const PointedThing &pointed); ServerActiveObject *user, const PointedThing &pointed);
bool item_OnSecondaryUse(ItemStack &item, bool item_OnSecondaryUse(ItemStack &item,
ServerActiveObject *user); ServerActiveObject *user, const PointedThing &pointed);
bool item_OnCraft(ItemStack &item, ServerActiveObject *user, bool item_OnCraft(ItemStack &item, ServerActiveObject *user,
const InventoryList *old_craft_grid, const InventoryLocation &craft_inv); const InventoryList *old_craft_grid, const InventoryLocation &craft_inv);
bool item_CraftPredict(ItemStack &item, ServerActiveObject *user, bool item_CraftPredict(ItemStack &item, ServerActiveObject *user,