Enchantments are now stored in Anvil world and in player inventory
git-svn-id: http://mc-server.googlecode.com/svn/trunk@1541 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
098c237a39
commit
73f787feb3
@ -594,8 +594,16 @@ function HandleTestWndCmd(a_Split, a_Player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local Window = cLuaWindow(WindowType, WindowSizeX, WindowSizeY, "TestWnd");
|
local Window = cLuaWindow(WindowType, WindowSizeX, WindowSizeY, "TestWnd");
|
||||||
|
local Item2 = cItem(E_ITEM_DIAMOND_SWORD, 1, 0, "1=1");
|
||||||
|
local Item3 = cItem(E_ITEM_DIAMOND_SHOVEL);
|
||||||
|
Item3.m_Enchantments:SetLevel(cEnchantments.enchUnbreaking, 4);
|
||||||
|
local Item4 = cItem(E_ITEM_DIAMOND_PICKAXE);
|
||||||
|
Item4.m_Enchantments:SetLevel(cEnchantments.enchUnbreaking, 5);
|
||||||
|
Item4.m_Enchantments:SetLevel(cEnchantments.enchEfficiency, 3);
|
||||||
Window:SetSlot(a_Player, 0, cItem(E_ITEM_DIAMOND, 64));
|
Window:SetSlot(a_Player, 0, cItem(E_ITEM_DIAMOND, 64));
|
||||||
Window:SetSlot(a_Player, 1, cItem(E_ITEM_DIAMOND_SWORD, 1, 0, "1=1"));
|
Window:SetSlot(a_Player, 1, Item2);
|
||||||
|
Window:SetSlot(a_Player, 2, Item3);
|
||||||
|
Window:SetSlot(a_Player, 3, Item4);
|
||||||
Window:SetOnClosing(OnClosing);
|
Window:SetOnClosing(OnClosing);
|
||||||
Window:SetOnSlotChanged(OnSlotChanged);
|
Window:SetOnSlotChanged(OnSlotChanged);
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ void cEnchantments::WriteToNBTCompound(cFastNBTWriter & a_Writer, const AString
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cEnchantments::ParseFromNBT(cParsedNBT & a_NBT, int a_EnchListTagIdx)
|
void cEnchantments::ParseFromNBT(const cParsedNBT & a_NBT, int a_EnchListTagIdx)
|
||||||
{
|
{
|
||||||
// Read the enchantments from the specified NBT list tag (ench or StoredEnchantments)
|
// Read the enchantments from the specified NBT list tag (ench or StoredEnchantments)
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ public:
|
|||||||
void WriteToNBTCompound(cFastNBTWriter & a_Writer, const AString & a_ListTagName) const;
|
void WriteToNBTCompound(cFastNBTWriter & a_Writer, const AString & a_ListTagName) const;
|
||||||
|
|
||||||
/// Reads the enchantments from the specified NBT list tag (ench or StoredEnchantments)
|
/// Reads the enchantments from the specified NBT list tag (ench or StoredEnchantments)
|
||||||
void ParseFromNBT(cParsedNBT & a_NBT, int a_EnchListTagIdx);
|
void ParseFromNBT(const cParsedNBT & a_NBT, int a_EnchListTagIdx);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Maps enchantment ID -> enchantment level
|
/// Maps enchantment ID -> enchantment level
|
||||||
|
@ -90,23 +90,34 @@ bool cItem::IsStackableWith(const cItem & a_OtherStack) const
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cItem::GetJson( Json::Value & a_OutValue ) const
|
void cItem::GetJson(Json::Value & a_OutValue) const
|
||||||
{
|
{
|
||||||
a_OutValue["ID"] = m_ItemType;
|
a_OutValue["ID"] = m_ItemType;
|
||||||
if( m_ItemType > 0 )
|
if (m_ItemType > 0)
|
||||||
{
|
{
|
||||||
a_OutValue["Count"] = m_ItemCount;
|
a_OutValue["Count"] = m_ItemCount;
|
||||||
a_OutValue["Health"] = m_ItemDamage;
|
a_OutValue["Health"] = m_ItemDamage;
|
||||||
|
AString Enchantments(m_Enchantments.ToString());
|
||||||
|
if (!Enchantments.empty())
|
||||||
|
{
|
||||||
|
a_OutValue["ench"] = Enchantments;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cItem::FromJson( const Json::Value & a_Value )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cItem::FromJson(const Json::Value & a_Value)
|
||||||
{
|
{
|
||||||
m_ItemType = (ENUM_ITEM_ID)a_Value.get("ID", -1 ).asInt();
|
m_ItemType = (ENUM_ITEM_ID)a_Value.get("ID", -1 ).asInt();
|
||||||
if( m_ItemType > 0 )
|
if (m_ItemType > 0)
|
||||||
{
|
{
|
||||||
m_ItemCount = (char)a_Value.get("Count", -1 ).asInt();
|
m_ItemCount = (char)a_Value.get("Count", -1 ).asInt();
|
||||||
m_ItemDamage = (short)a_Value.get("Health", -1 ).asInt();
|
m_ItemDamage = (short)a_Value.get("Health", -1 ).asInt();
|
||||||
|
m_Enchantments.Clear();
|
||||||
|
m_Enchantments.AddFromString(a_Value.get("ench", "").asString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -615,7 +615,22 @@ bool cWSSAnvil::LoadItemFromNBT(cItem & a_Item, const cParsedNBT & a_NBT, int a_
|
|||||||
}
|
}
|
||||||
a_Item.m_ItemCount = a_NBT.GetByte(Count);
|
a_Item.m_ItemCount = a_NBT.GetByte(Count);
|
||||||
|
|
||||||
// TODO: enchantments and other item properties
|
// Find the "tag" tag, used for enchantments and other extra data
|
||||||
|
int TagTag = a_NBT.FindChildByName(a_TagIdx, "tag");
|
||||||
|
if (TagTag <= 0)
|
||||||
|
{
|
||||||
|
// No extra data
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load enchantments:
|
||||||
|
const char * EnchName = (a_Item.m_ItemType == E_ITEM_BOOK) ? "StoredEnchantments" : "ench";
|
||||||
|
int EnchTag = a_NBT.FindChildByName(TagTag, EnchName);
|
||||||
|
if (EnchTag > 0)
|
||||||
|
{
|
||||||
|
a_Item.m_Enchantments.ParseFromNBT(a_NBT, EnchTag);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user