}
}
+u16 CraftItem::getDropCount()
+{
+ // Special cases
+ if(m_subname == "rat")
+ return 1;
+ // Default
+ else
+ return InventoryItem::getDropCount();
+}
+
bool CraftItem::isCookable()
{
if(m_subname == "lump_of_iron")
virtual std::string getText() { return ""; }
// Creates an object from the item, to be placed in the world.
virtual ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos);
+ // Gets amount of items that dropping one SAO will decrement
+ virtual u16 getDropCount(){ return getCount(); }
/*
Quantity methods
}
ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos);
+ u16 getDropCount();
virtual bool addableTo(InventoryItem *other)
{
dout_server<<"Placed object"<<std::endl;
- // If item has count<=1, delete it
- if(item->getCount() <= 1)
+ if(g_settings.getBool("creative_mode") == false)
{
- InventoryList *ilist = player->inventory.getList("main");
- if(g_settings.getBool("creative_mode") == false && ilist)
+ // Delete the right amount of items from the slot
+ u16 dropcount = item->getDropCount();
+
+ // Delete item if all gone
+ if(item->getCount() <= dropcount)
{
- // Remove from inventory and send inventory
- ilist->deleteItem(item_i);
- // Send inventory
- SendInventory(peer_id);
+ if(item->getCount() < dropcount)
+ dstream<<"WARNING: Server: dropped more items"
+ <<" than the slot contains"<<std::endl;
+
+ InventoryList *ilist = player->inventory.getList("main");
+ if(ilist)
+ // Remove from inventory and send inventory
+ ilist->deleteItem(item_i);
}
- }
- // Else decrement it
- else
- {
- item->remove(1);
+ // Else decrement it
+ else
+ item->remove(dropcount);
+
// Send inventory
SendInventory(peer_id);
}