From b929efc9a6c7fcf5a1e016a82f760298f49ee51e Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sun, 16 Jun 2013 14:12:25 +0000 Subject: [PATCH] cItem: Added useful utility functions git-svn-id: http://mc-server.googlecode.com/svn/trunk@1599 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Item.cpp | 34 ++++++++++++++++++++++++++++++++++ source/Item.h | 24 +++++++++++++++++++++--- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/source/Item.cpp b/source/Item.cpp index fce4a431b..31a09a608 100644 --- a/source/Item.cpp +++ b/source/Item.cpp @@ -3,6 +3,7 @@ #include "Item.h" #include +#include "Items/ItemHandler.h" @@ -19,6 +20,20 @@ cItem cItem::CopyOne(void) const +cItem & cItem::AddCount(char a_AmountToAdd) +{ + m_ItemCount += a_AmountToAdd; + if (m_ItemCount <= 0) + { + Empty(); + } + return *this; +} + + + + + short cItem::GetMaxDamage(void) const { switch (m_ItemType) @@ -97,6 +112,25 @@ bool cItem::IsStackableWith(const cItem & a_OtherStack) const +bool cItem::IsFullStack(void) const +{ + return (m_ItemCount >= ItemHandler(m_ItemType)->GetMaxStackSize()); +} + + + + + +/// Returns the cItemHandler responsible for this item type +cItemHandler * cItem::GetHandler(void) const +{ + return ItemHandler(m_ItemType); +} + + + + + void cItem::GetJson(Json::Value & a_OutValue) const { a_OutValue["ID"] = m_ItemType; diff --git a/source/Item.h b/source/Item.h index d0ba37b41..fc54da51d 100644 --- a/source/Item.h +++ b/source/Item.h @@ -16,6 +16,9 @@ +// fwd: +class cItemHandler; + namespace Json { class Value; @@ -110,6 +113,9 @@ public: /// Returns a copy of this item with m_ItemCount set to 1. Useful to preserve enchantments etc. on stacked items cItem CopyOne(void) const; + /// Adds the specified count to this object and returns the reference to self (useful for chaining) + cItem & AddCount(char a_AmountToAdd); + /// Returns the maximum damage value that this item can have; zero if damage is not applied short GetMaxDamage(void) const; @@ -120,14 +126,26 @@ public: /// Returns true if this itemstack can stack with the specified stack (types match, enchantments etc.) ItemCounts are ignored! bool IsStackableWith(const cItem & a_OtherStack) const; + + /// Returns true if the item is stacked up to its maximum stacking. + bool IsFullStack(void) const; // tolua_end - void GetJson( Json::Value & a_OutValue ) const; - void FromJson( const Json::Value & a_Value ); - // tolua_begin + /// Returns the cItemHandler responsible for this item type + cItemHandler * GetHandler(void) const; + + /// Saves the item data into JSON representation + void GetJson(Json::Value & a_OutValue) const; + + /// Loads the item data from JSON representation + void FromJson(const Json::Value & a_Value); + + /// Returns true if the specified item type is enchantable (as per 1.2.5 protocol requirements) static bool IsEnchantable(short a_ItemType); + // tolua_begin + short m_ItemType; char m_ItemCount; short m_ItemDamage;