mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-22 17:18:39 +00:00
Add on_secondary_use when right clicking an item in the air
This commit is contained in:
parent
57b429574e
commit
97908cc656
8 changed files with 71 additions and 0 deletions
|
@ -946,6 +946,7 @@ void Client::interact(u8 action, const PointedThing& pointed)
|
|||
2: digging completed
|
||||
3: place block or item (to abovesurface)
|
||||
4: use item
|
||||
5: perform secondary action of item
|
||||
*/
|
||||
|
||||
NetworkPacket pkt(TOSERVER_INTERACT, 1 + 2 + 0);
|
||||
|
|
12
src/game.cpp
12
src/game.cpp
|
@ -1525,6 +1525,7 @@ protected:
|
|||
void processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
|
||||
GameRunData *runData, f32 dtime, bool show_hud,
|
||||
bool show_debug);
|
||||
void handlePointingAtNothing(GameRunData *runData, const ItemStack &playerItem);
|
||||
void handlePointingAtNode(GameRunData *runData,
|
||||
const PointedThing &pointed, const ItemDefinition &playeritem_def,
|
||||
const ToolCapabilities &playeritem_toolcap, f32 dtime);
|
||||
|
@ -3603,6 +3604,8 @@ void Game::processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
|
|||
} else if (input->getLeftState()) {
|
||||
// When button is held down in air, show continuous animation
|
||||
runData->left_punch = true;
|
||||
} else if (input->getRightClicked()) {
|
||||
handlePointingAtNothing(runData, playeritem);
|
||||
}
|
||||
|
||||
runData->pointed_old = pointed;
|
||||
|
@ -3618,6 +3621,15 @@ void Game::processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
|
|||
}
|
||||
|
||||
|
||||
void Game::handlePointingAtNothing(GameRunData *runData, const ItemStack &playerItem)
|
||||
{
|
||||
infostream << "Right Clicked in Air" << std::endl;
|
||||
PointedThing fauxPointed;
|
||||
fauxPointed.type = POINTEDTHING_NOTHING;
|
||||
client->interact(5, fauxPointed);
|
||||
}
|
||||
|
||||
|
||||
void Game::handlePointingAtNode(GameRunData *runData,
|
||||
const PointedThing &pointed, const ItemDefinition &playeritem_def,
|
||||
const ToolCapabilities &playeritem_toolcap, f32 dtime)
|
||||
|
|
|
@ -1653,6 +1653,23 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
|
|||
}
|
||||
|
||||
} // action == 4
|
||||
|
||||
/*
|
||||
5: rightclick air
|
||||
*/
|
||||
else if (action == 5) {
|
||||
ItemStack item = playersao->getWieldedItem();
|
||||
|
||||
actionstream << player->getName() << " activates "
|
||||
<< item.name << std::endl;
|
||||
|
||||
if (m_script->item_OnSecondaryUse(
|
||||
item, playersao)) {
|
||||
if( playersao->setWieldedItem(item)) {
|
||||
SendInventory(playersao);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -110,6 +110,32 @@ bool ScriptApiItem::item_OnUse(ItemStack &item,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item, ServerActiveObject *user)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
int error_handler = PUSH_ERROR_HANDLER(L);
|
||||
|
||||
if (!getItemCallback(item.name.c_str(), "on_secondary_use"))
|
||||
return false;
|
||||
|
||||
LuaItemStack::create(L, item);
|
||||
objectrefGetOrCreate(L, user);
|
||||
PointedThing pointed;
|
||||
pointed.type = POINTEDTHING_NOTHING;
|
||||
pushPointedThing(pointed);
|
||||
PCALL_RES(lua_pcall(L, 3, 1, error_handler));
|
||||
if (!lua_isnil(L, -1)) {
|
||||
try {
|
||||
item = read_item(L, -1, getServer());
|
||||
} catch (LuaError &e) {
|
||||
throw LuaError(std::string(e.what()) + ". item=" + item.name);
|
||||
}
|
||||
}
|
||||
lua_pop(L, 2); // Pop item and error handler
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user,
|
||||
const InventoryList *old_craft_grid, const InventoryLocation &craft_inv)
|
||||
{
|
||||
|
|
|
@ -42,6 +42,8 @@ public:
|
|||
ServerActiveObject *placer, const PointedThing &pointed);
|
||||
bool item_OnUse(ItemStack &item,
|
||||
ServerActiveObject *user, const PointedThing &pointed);
|
||||
bool item_OnSecondaryUse(ItemStack &item,
|
||||
ServerActiveObject *user);
|
||||
bool item_OnCraft(ItemStack &item, ServerActiveObject *user,
|
||||
const InventoryList *old_craft_grid, const InventoryLocation &craft_inv);
|
||||
bool item_CraftPredict(ItemStack &item, ServerActiveObject *user,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue