diff options
author | madmaxoft <github@xoft.cz> | 2013-08-25 21:32:17 +0200 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2013-08-25 21:32:17 +0200 |
commit | 4bbade9fc6eeeb68644657a0d67f84894dd4a21c (patch) | |
tree | 8f6f0e3e67b317b9a2eb7b7503083834013e2128 /source | |
parent | Added a few API accessors to cArrowEntity. (diff) | |
download | cuberite-4bbade9fc6eeeb68644657a0d67f84894dd4a21c.tar cuberite-4bbade9fc6eeeb68644657a0d67f84894dd4a21c.tar.gz cuberite-4bbade9fc6eeeb68644657a0d67f84894dd4a21c.tar.bz2 cuberite-4bbade9fc6eeeb68644657a0d67f84894dd4a21c.tar.lz cuberite-4bbade9fc6eeeb68644657a0d67f84894dd4a21c.tar.xz cuberite-4bbade9fc6eeeb68644657a0d67f84894dd4a21c.tar.zst cuberite-4bbade9fc6eeeb68644657a0d67f84894dd4a21c.zip |
Diffstat (limited to '')
-rw-r--r-- | source/WorldStorage/WSSAnvil.cpp | 51 | ||||
-rw-r--r-- | source/WorldStorage/WSSAnvil.h | 1 |
2 files changed, 48 insertions, 4 deletions
diff --git a/source/WorldStorage/WSSAnvil.cpp b/source/WorldStorage/WSSAnvil.cpp index 72d583e2b..3ab64148e 100644 --- a/source/WorldStorage/WSSAnvil.cpp +++ b/source/WorldStorage/WSSAnvil.cpp @@ -20,13 +20,13 @@ #include "../Item.h" #include "../ItemGrid.h" #include "../StringCompression.h" -#include "../Entities/Entity.h" #include "../OSSupport/MakeDir.h" #include "FastNBT.h" +#include "../Mobs/Monster.h" #include "../Entities/FallingBlock.h" #include "../Entities/Minecart.h" -#include "../Mobs/Monster.h" #include "../Entities/Pickup.h" +#include "../Entities/ProjectileEntity.h" @@ -956,6 +956,10 @@ void cWSSAnvil::LoadEntityFromNBT(cEntityList & a_Entities, const cParsedNBT & a { LoadPickupFromNBT(a_Entities, a_NBT, a_EntityTagIdx); } + if (strncmp(a_IDTag, "Arrow", a_IDTagLength) == 0) + { + LoadArrowFromNBT(a_Entities, a_NBT, a_EntityTagIdx); + } // TODO: other entities } @@ -1043,7 +1047,7 @@ void cWSSAnvil::LoadMinecartTFromNBT(cEntityList & a_Entities, const cParsedNBT return; } - //TODO: Everything to do with TNT carts + // TODO: Everything to do with TNT carts a_Entities.push_back(Minecart.release()); } @@ -1060,7 +1064,7 @@ void cWSSAnvil::LoadMinecartHFromNBT(cEntityList & a_Entities, const cParsedNBT return; } - //TODO: Everything to do with hopper carts + // TODO: Everything to do with hopper carts a_Entities.push_back(Minecart.release()); } @@ -1093,6 +1097,45 @@ void cWSSAnvil::LoadPickupFromNBT(cEntityList & a_Entities, const cParsedNBT & a +void cWSSAnvil::LoadArrowFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx) +{ + std::auto_ptr<cArrowEntity> Arrow(new cArrowEntity(NULL, 0, 0, 0, Vector3d(0, 0, 0))); + if (!LoadEntityBaseFromNBT(*Arrow.get(), a_NBT, a_TagIdx)) + { + return; + } + + // Load pickup state: + int PickupIdx = a_NBT.FindChildByName(a_TagIdx, "pickup"); + if (PickupIdx > 0) + { + Arrow->SetPickupState((cArrowEntity::ePickupState)a_NBT.GetByte(PickupIdx)); + } + else + { + // Try the older "player" tag: + int PlayerIdx = a_NBT.FindChildByName(a_TagIdx, "player"); + if (PlayerIdx > 0) + { + Arrow->SetPickupState((a_NBT.GetByte(PlayerIdx) == 0) ? cArrowEntity::psNoPickup : cArrowEntity::psInSurvivalOrCreative); + } + } + + // Load damage: + int DamageIdx = a_NBT.FindChildByName(a_TagIdx, "damage"); + if (DamageIdx > 0) + { + Arrow->SetDamageCoeff(a_NBT.GetDouble(DamageIdx)); + } + + // Store the new arrow in the entities list: + a_Entities.push_back(Arrow.release()); +} + + + + + bool cWSSAnvil::LoadEntityBaseFromNBT(cEntity & a_Entity, const cParsedNBT & a_NBT, int a_TagIdx) { double Pos[3]; diff --git a/source/WorldStorage/WSSAnvil.h b/source/WorldStorage/WSSAnvil.h index 47fda3f7b..b2556ab50 100644 --- a/source/WorldStorage/WSSAnvil.h +++ b/source/WorldStorage/WSSAnvil.h @@ -145,6 +145,7 @@ protected: void LoadMinecartTFromNBT (cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx); void LoadMinecartHFromNBT (cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx); void LoadPickupFromNBT (cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx); + void LoadArrowFromNBT (cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx); /// Loads entity common data from the NBT compound; returns true if successful bool LoadEntityBaseFromNBT(cEntity & a_Entity, const cParsedNBT & a_NBT, int a_TagIdx); |