1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-09-15 18:57:08 +00:00

Unify wield item handling (#8677)

This moves the wield item functions to Player and the tool utils for range calculation
Also 'local_inventory' was removed due to redundancy in Client
This commit is contained in:
SmallJoker 2019-08-07 19:16:31 +02:00 committed by GitHub
parent 003af74213
commit e462a9a5ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 154 additions and 249 deletions

View file

@ -896,18 +896,11 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t p
m_armor_groups["immortal"] = 1;
}
PlayerSAO::~PlayerSAO()
{
if(m_inventory != &m_player->inventory)
delete m_inventory;
}
void PlayerSAO::finalize(RemotePlayer *player, const std::set<std::string> &privs)
{
assert(player);
m_player = player;
m_privs = privs;
m_inventory = &m_player->inventory;
}
v3f PlayerSAO::getEyeOffset() const
@ -1365,13 +1358,9 @@ void PlayerSAO::setBreath(const u16 breath, bool send)
m_env->getGameDef()->SendPlayerBreath(this);
}
Inventory* PlayerSAO::getInventory()
Inventory *PlayerSAO::getInventory() const
{
return m_inventory;
}
const Inventory* PlayerSAO::getInventory() const
{
return m_inventory;
return m_player ? &m_player->inventory : nullptr;
}
InventoryLocation PlayerSAO::getInventoryLocation() const
@ -1381,61 +1370,27 @@ InventoryLocation PlayerSAO::getInventoryLocation() const
return loc;
}
std::string PlayerSAO::getWieldList() const
u16 PlayerSAO::getWieldIndex() const
{
return "main";
return m_player->getWieldIndex();
}
ItemStack PlayerSAO::getWieldedItem() const
{
const Inventory *inv = getInventory();
ItemStack ret;
const InventoryList *mlist = inv->getList(getWieldList());
if (mlist && getWieldIndex() < (s32)mlist->getSize())
ret = mlist->getItem(getWieldIndex());
return ret;
}
ItemStack PlayerSAO::getWieldedItemOrHand() const
{
const Inventory *inv = getInventory();
ItemStack ret;
const InventoryList *mlist = inv->getList(getWieldList());
if (mlist && getWieldIndex() < (s32)mlist->getSize())
ret = mlist->getItem(getWieldIndex());
if (ret.name.empty()) {
const InventoryList *hlist = inv->getList("hand");
if (hlist)
ret = hlist->getItem(0);
}
return ret;
ItemStack selected_item, hand_item;
return m_player->getWieldedItem(&selected_item, &hand_item);
}
bool PlayerSAO::setWieldedItem(const ItemStack &item)
{
Inventory *inv = getInventory();
if (inv) {
InventoryList *mlist = inv->getList(getWieldList());
if (mlist) {
mlist->changeItem(getWieldIndex(), item);
return true;
}
InventoryList *mlist = m_player->inventory.getList(getWieldList());
if (mlist) {
mlist->changeItem(m_player->getWieldIndex(), item);
return true;
}
return false;
}
int PlayerSAO::getWieldIndex() const
{
return m_wield_index;
}
void PlayerSAO::setWieldIndex(int i)
{
if(i != m_wield_index) {
m_wield_index = i;
}
}
void PlayerSAO::disconnected()
{
m_peer_id = 0;