#include "content_sao.h"
#include "player.h"
#include "log.h"
+#include "mapnode_contentfeatures.h"
+#include "tool.h"
/*
InventoryItem
/*
Create an ItemSAO
*/
+ pos.Y -= BS*0.25; // let it drop a bit
+ // Randomize a bit
+ pos.X += BS*0.2*(float)myrand_range(-1000,1000)/1000.0;
+ pos.Z += BS*0.2*(float)myrand_range(-1000,1000)/1000.0;
// Create object
- ServerActiveObject *obj = new ItemSAO(env, 0, pos, getItemString());
+ ServerActiveObject *obj = new ItemSAO(env, pos, getItemString());
return obj;
}
MaterialItem
*/
+#ifndef SERVER
+video::ITexture * MaterialItem::getImage() const
+{
+ return content_features(m_content).inventory_texture;
+}
+#endif
+
bool MaterialItem::isCookable() const
{
return item_material_is_cookable(m_content);
return item_material_create_cook_result(m_content);
}
+/*
+ ToolItem
+*/
+
+std::string ToolItem::getImageBasename() const
+{
+ return tool_get_imagename(m_toolname);
+}
+
/*
CraftItem
*/
ServerActiveObject* CraftItem::createSAO(ServerEnvironment *env, u16 id, v3f pos)
{
// Special cases
- ServerActiveObject *obj = item_craft_create_object(m_subname, env, id, pos);
+ ServerActiveObject *obj = item_craft_create_object(m_subname, env, pos);
if(obj)
return obj;
// Default
return item_craft_create_cook_result(m_subname);
}
-bool CraftItem::use(ServerEnvironment *env, Player *player)
+bool CraftItem::use(ServerEnvironment *env, ServerActiveObject *user)
{
- if(item_craft_is_eatable(m_subname))
- {
- u16 result_count = getCount() - 1; // Eat one at a time
- s16 hp_change = item_craft_eat_hp_change(m_subname);
- if(player->hp + hp_change > 20)
- player->hp = 20;
- else
- player->hp += hp_change;
+ if(!item_craft_is_eatable(m_subname))
+ return false;
+
+ u16 result_count = getCount() - 1; // Eat one at a time
+ s16 hp_change = item_craft_eat_hp_change(m_subname);
+ s16 hp = user->getHP();
+ hp += hp_change;
+ if(hp < 0)
+ hp = 0;
+ user->setHP(hp);
+
+ if(result_count < 1)
+ return true;
- if(result_count < 1)
- return true;
- else
- setCount(result_count);
- }
+ setCount(result_count);
return false;
}