当前位置: 首页>>代码示例>>C++>>正文


C++ cParsedNBT类代码示例

本文整理汇总了C++中cParsedNBT的典型用法代码示例。如果您正苦于以下问题:C++ cParsedNBT类的具体用法?C++ cParsedNBT怎么用?C++ cParsedNBT使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了cParsedNBT类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: LoadEntityBaseFromNBT

bool cWSSAnvil::LoadEntityBaseFromNBT(cEntity & a_Entity, const cParsedNBT & a_NBT, int a_TagIdx)
{
    double Pos[3];
    if (!LoadDoublesListFromNBT(Pos, 3, a_NBT, a_NBT.FindChildByName(a_TagIdx, "Pos")))
    {
        return false;
    }
    a_Entity.SetPosition(Pos[0], Pos[1], Pos[2]);

    double Speed[3];
    if (!LoadDoublesListFromNBT(Speed, 3, a_NBT, a_NBT.FindChildByName(a_TagIdx, "Motion")))
    {
        return false;
    }
    a_Entity.SetSpeed(Speed[0], Speed[1], Speed[2]);

    double Rotation[3];
    if (!LoadDoublesListFromNBT(Rotation, 2, a_NBT, a_NBT.FindChildByName(a_TagIdx, "Rotation")))
    {
        return false;
    }
    a_Entity.SetRotation(Rotation[0]);
    a_Entity.SetRoll    (Rotation[1]);

    return true;
}
开发者ID:stpinker,项目名称:MCServer,代码行数:26,代码来源:WSSAnvil.cpp

示例2: CopyNBTData

void cWSSAnvil::CopyNBTData(const cParsedNBT & a_NBT, int a_Tag, const AString & a_ChildName, char * a_Destination, int a_Length)
{
    int Child = a_NBT.FindChildByName(a_Tag, a_ChildName);
    if ((Child >= 0) && (a_NBT.GetType(Child) == TAG_ByteArray) && (a_NBT.GetDataLength(Child) == a_Length))
    {
        memcpy(a_Destination, a_NBT.GetData(Child), a_Length);
    }
}
开发者ID:stpinker,项目名称:MCServer,代码行数:8,代码来源:WSSAnvil.cpp

示例3: LoadDoublesListFromNBT

bool cWSSAnvil::LoadDoublesListFromNBT(double * a_Doubles, int a_NumDoubles, const cParsedNBT & a_NBT, int a_TagIdx)
{
    if ((a_TagIdx < 0) || (a_NBT.GetType(a_TagIdx) != TAG_List) || (a_NBT.GetChildrenType(a_TagIdx) != TAG_Double))
    {
        return false;
    }
    int idx = 0;
    for (int Tag = a_NBT.GetFirstChild(a_TagIdx); (Tag > 0) && (idx < a_NumDoubles); Tag = a_NBT.GetNextSibling(Tag), ++idx)
    {
        a_Doubles[idx] = a_NBT.GetDouble(Tag);
    }  // for Tag - PosTag[]
    return (idx == a_NumDoubles);  // Did we read enough doubles?
}
开发者ID:stpinker,项目名称:MCServer,代码行数:13,代码来源:WSSAnvil.cpp

示例4: LoadJukeboxFromNBT

void cWSSAnvil::LoadJukeboxFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx)
{
    ASSERT(a_NBT.GetType(a_TagIdx) == TAG_Compound);
    int x, y, z;
    if (!GetBlockEntityNBTPos(a_NBT, a_TagIdx, x, y, z))
    {
        return;
    }
    std::auto_ptr<cJukeboxEntity> Jukebox(new cJukeboxEntity(x, y, z, m_World));
    int Record = a_NBT.FindChildByName(a_TagIdx, "Record");
    if (Record >= 0)
    {
        Jukebox->SetRecord(a_NBT.GetInt(Record));
    }
    a_BlockEntities.push_back(Jukebox.release());
}
开发者ID:stpinker,项目名称:MCServer,代码行数:16,代码来源:WSSAnvil.cpp

示例5: LoadNoteFromNBT

void cWSSAnvil::LoadNoteFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx)
{
    ASSERT(a_NBT.GetType(a_TagIdx) == TAG_Compound);
    int x, y, z;
    if (!GetBlockEntityNBTPos(a_NBT, a_TagIdx, x, y, z))
    {
        return;
    }
    std::auto_ptr<cNoteEntity> Note(new cNoteEntity(x, y, z, m_World));
    int note = a_NBT.FindChildByName(a_TagIdx, "note");
    if (note >= 0)
    {
        Note->SetPitch(a_NBT.GetByte(note));
    }
    a_BlockEntities.push_back(Note.release());
}
开发者ID:stpinker,项目名称:MCServer,代码行数:16,代码来源:WSSAnvil.cpp

示例6: LoadHopperFromNBT

void cWSSAnvil::LoadHopperFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx)
{
    ASSERT(a_NBT.GetType(a_TagIdx) == TAG_Compound);
    int x, y, z;
    if (!GetBlockEntityNBTPos(a_NBT, a_TagIdx, x, y, z))
    {
        return;
    }
    int Items = a_NBT.FindChildByName(a_TagIdx, "Items");
    if ((Items < 0) || (a_NBT.GetType(Items) != TAG_List))
    {
        return;  // Make it an empty hopper - the chunk loader will provide an empty cHopperEntity for this
    }
    std::auto_ptr<cHopperEntity> Hopper(new cHopperEntity(x, y, z, m_World));
    LoadItemGridFromNBT(Hopper->GetContents(), a_NBT, Items);
    a_BlockEntities.push_back(Hopper.release());
}
开发者ID:stpinker,项目名称:MCServer,代码行数:17,代码来源:WSSAnvil.cpp

示例7: LoadMinecartCFromNBT

void cWSSAnvil::LoadMinecartCFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
    int Items = a_NBT.FindChildByName(a_TagIdx, "Items");
    if ((Items < 0) || (a_NBT.GetType(Items) != TAG_List))
    {
        return;  // Make it an empty chest - the chunk loader will provide an empty cChestEntity for this
    }
    std::auto_ptr<cMinecartWithChest> Minecart(new cMinecartWithChest(0, 0, 0));
    if (!LoadEntityBaseFromNBT(*Minecart.get(), a_NBT, a_TagIdx))
    {
        return;
    }
    for (int Child = a_NBT.GetFirstChild(Items); Child != -1; Child = a_NBT.GetNextSibling(Child))
    {
        int Slot = a_NBT.FindChildByName(Child, "Slot");
        if ((Slot < 0) || (a_NBT.GetType(Slot) != TAG_Byte))
        {
            continue;
        }
        cItem Item;
        if (LoadItemFromNBT(Item, a_NBT, Child))
        {
            Minecart->SetSlot(a_NBT.GetByte(Slot), Item);
        }
    }  // for itr - ItemDefs[]
    a_Entities.push_back(Minecart.release());
}
开发者ID:stpinker,项目名称:MCServer,代码行数:27,代码来源:WSSAnvil.cpp

示例8: LoadProjectileBaseFromNBT

bool cWSSAnvil::LoadProjectileBaseFromNBT(cProjectileEntity & a_Entity, const cParsedNBT & a_NBT, int a_TagIdx)
{
    if (!LoadEntityBaseFromNBT(a_Entity, a_NBT, a_TagIdx))
    {
        return false;
    }

    bool IsInGround = false;
    int InGroundIdx = a_NBT.FindChildByName(a_TagIdx, "inGround");
    if (InGroundIdx > 0)
    {
        IsInGround = (a_NBT.GetByte(InGroundIdx) != 0);
    }
    a_Entity.SetIsInGround(IsInGround);

    // TODO: Load inTile, TileCoords

    return true;
}
开发者ID:stpinker,项目名称:MCServer,代码行数:19,代码来源:WSSAnvil.cpp

示例9: LoadPickupFromNBT

void cWSSAnvil::LoadPickupFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
    int ItemTag = a_NBT.FindChildByName(a_TagIdx, "Item");
    if ((ItemTag < 0) || (a_NBT.GetType(ItemTag) != TAG_Compound))
    {
        return;
    }
    cItem Item;
    if (!LoadItemFromNBT(Item, a_NBT, ItemTag))
    {
        return;
    }
    std::auto_ptr<cPickup> Pickup(new cPickup(0, 0, 0, Item, false)); // Pickup delay doesn't matter, just say false
    if (!LoadEntityBaseFromNBT(*Pickup.get(), a_NBT, a_TagIdx))
    {
        return;
    }
    a_Entities.push_back(Pickup.release());
}
开发者ID:stpinker,项目名称:MCServer,代码行数:19,代码来源:WSSAnvil.cpp

示例10: LoadArrowFromNBT

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 (!LoadProjectileBaseFromNBT(*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());
}
开发者ID:stpinker,项目名称:MCServer,代码行数:34,代码来源:WSSAnvil.cpp

示例11: LoadItemGridFromNBT

void cWSSAnvil::LoadItemGridFromNBT(cItemGrid & a_ItemGrid, const cParsedNBT & a_NBT, int a_ItemsTagIdx, int a_SlotOffset)
{
    int NumSlots = a_ItemGrid.GetNumSlots();
    for (int Child = a_NBT.GetFirstChild(a_ItemsTagIdx); Child != -1; Child = a_NBT.GetNextSibling(Child))
    {
        int SlotTag = a_NBT.FindChildByName(Child, "Slot");
        if ((SlotTag < 0) || (a_NBT.GetType(SlotTag) != TAG_Byte))
        {
            continue;
        }
        int SlotNum = (int)(a_NBT.GetByte(SlotTag)) - a_SlotOffset;
        if ((SlotNum < 0) || (SlotNum >= NumSlots))
        {
            // SlotNum outside of the range
            continue;
        }
        cItem Item;
        if (LoadItemFromNBT(Item, a_NBT, Child))
        {
            a_ItemGrid.SetSlot(SlotNum, Item);
        }
    }  // for itr - ItemDefs[]
}
开发者ID:stpinker,项目名称:MCServer,代码行数:23,代码来源:WSSAnvil.cpp

示例12: LoadSignFromNBT

void cWSSAnvil::LoadSignFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx)
{
    ASSERT(a_NBT.GetType(a_TagIdx) == TAG_Compound);
    int x, y, z;
    if (!GetBlockEntityNBTPos(a_NBT, a_TagIdx, x, y, z))
    {
        return;
    }
    std::auto_ptr<cSignEntity> Sign(new cSignEntity(E_BLOCK_SIGN_POST, x, y, z, m_World));

    int currentLine = a_NBT.FindChildByName(a_TagIdx, "Text1");
    if (currentLine >= 0)
    {
        Sign->SetLine(0, a_NBT.GetString(currentLine));
    }

    currentLine = a_NBT.FindChildByName(a_TagIdx, "Text2");
    if (currentLine >= 0)
    {
        Sign->SetLine(1, a_NBT.GetString(currentLine));
    }

    currentLine = a_NBT.FindChildByName(a_TagIdx, "Text3");
    if (currentLine >= 0)
    {
        Sign->SetLine(2, a_NBT.GetString(currentLine));
    }

    currentLine = a_NBT.FindChildByName(a_TagIdx, "Text4");
    if (currentLine >= 0)
    {
        Sign->SetLine(3, a_NBT.GetString(currentLine));
    }

    a_BlockEntities.push_back(Sign.release());
}
开发者ID:stpinker,项目名称:MCServer,代码行数:36,代码来源:WSSAnvil.cpp

示例13: GetBlockEntityNBTPos

bool cWSSAnvil::GetBlockEntityNBTPos(const cParsedNBT & a_NBT, int a_TagIdx, int & a_X, int & a_Y, int & a_Z)
{
    int x = a_NBT.FindChildByName(a_TagIdx, "x");
    if ((x < 0) || (a_NBT.GetType(x) != TAG_Int))
    {
        return false;
    }
    int y = a_NBT.FindChildByName(a_TagIdx, "y");
    if ((y < 0) || (a_NBT.GetType(y) != TAG_Int))
    {
        return false;
    }
    int z = a_NBT.FindChildByName(a_TagIdx, "z");
    if ((z < 0) || (a_NBT.GetType(z) != TAG_Int))
    {
        return false;
    }
    a_X = a_NBT.GetInt(x);
    a_Y = a_NBT.GetInt(y);
    a_Z = a_NBT.GetInt(z);
    return true;
}
开发者ID:stpinker,项目名称:MCServer,代码行数:22,代码来源:WSSAnvil.cpp

示例14: LoadEntitiesFromNBT

void cWSSAnvil::LoadEntitiesFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
    if ((a_TagIdx < 0) || (a_NBT.GetType(a_TagIdx) != TAG_List))
    {
        return;
    }

    for (int Child = a_NBT.GetFirstChild(a_TagIdx); Child != -1; Child = a_NBT.GetNextSibling(Child))
    {
        if (a_NBT.GetType(Child) != TAG_Compound)
        {
            continue;
        }
        int sID = a_NBT.FindChildByName(Child, "id");
        if (sID < 0)
        {
            continue;
        }
        LoadEntityFromNBT(a_Entities, a_NBT, Child, a_NBT.GetData(sID), a_NBT.GetDataLength(sID));
    }  // for Child - a_NBT[]
}
开发者ID:stpinker,项目名称:MCServer,代码行数:21,代码来源:WSSAnvil.cpp

示例15: LoadChunkFromNBT

bool cWSSAnvil::LoadChunkFromNBT(const cChunkCoords & a_Chunk, const cParsedNBT & a_NBT)
{
    // The data arrays, in MCA-native y/z/x ordering (will be reordered for the final chunk data)
    cChunkDef::BlockTypes   BlockTypes;
    cChunkDef::BlockNibbles MetaData;
    cChunkDef::BlockNibbles BlockLight;
    cChunkDef::BlockNibbles SkyLight;

    memset(BlockTypes, E_BLOCK_AIR, sizeof(BlockTypes));
    memset(MetaData,   0,           sizeof(MetaData));
    memset(SkyLight,   0xff,        sizeof(SkyLight));  // By default, data not present in the NBT means air, which means full skylight
    memset(BlockLight, 0x00,        sizeof(BlockLight));

    // Load the blockdata, blocklight and skylight:
    int Level = a_NBT.FindChildByName(0, "Level");
    if (Level < 0)
    {
        return false;
    }
    int Sections = a_NBT.FindChildByName(Level, "Sections");
    if ((Sections < 0) || (a_NBT.GetType(Sections) != TAG_List) || (a_NBT.GetChildrenType(Sections) != TAG_Compound))
    {
        return false;
    }
    for (int Child = a_NBT.GetFirstChild(Sections); Child >= 0; Child = a_NBT.GetNextSibling(Child))
    {
        int y = 0;
        int SectionY = a_NBT.FindChildByName(Child, "Y");
        if ((SectionY < 0) || (a_NBT.GetType(SectionY) != TAG_Byte))
        {
            continue;
        }
        y = a_NBT.GetByte(SectionY);
        if ((y < 0) || (y > 15))
        {
            continue;
        }
        CopyNBTData(a_NBT, Child, "Blocks",     (char *)&(BlockTypes[y * 4096]), 4096);
        CopyNBTData(a_NBT, Child, "Data",       (char *)&(MetaData[y   * 2048]), 2048);
        CopyNBTData(a_NBT, Child, "SkyLight",   (char *)&(SkyLight[y   * 2048]), 2048);
        CopyNBTData(a_NBT, Child, "BlockLight", (char *)&(BlockLight[y * 2048]), 2048);
    }  // for itr - LevelSections[]

    // Load the biomes from NBT, if present and valid. First try MCS-style, then Vanilla-style:
    cChunkDef::BiomeMap BiomeMap;
    cChunkDef::BiomeMap * Biomes = LoadBiomeMapFromNBT(&BiomeMap, a_NBT, a_NBT.FindChildByName(Level, "MCSBiomes"));
    if (Biomes == NULL)
    {
        // MCS-style biomes not available, load vanilla-style:
        Biomes = LoadVanillaBiomeMapFromNBT(&BiomeMap, a_NBT, a_NBT.FindChildByName(Level, "Biomes"));
    }

    // Load the entities from NBT:
    cEntityList      Entities;
    cBlockEntityList BlockEntities;
    LoadEntitiesFromNBT     (Entities,      a_NBT, a_NBT.FindChildByName(Level, "Entities"));
    LoadBlockEntitiesFromNBT(BlockEntities, a_NBT, a_NBT.FindChildByName(Level, "TileEntities"), BlockTypes, MetaData);

    bool IsLightValid = (a_NBT.FindChildByName(Level, "MCSIsLightValid") > 0);

    /*
    // Uncomment this block for really cool stuff :)
    // DEBUG magic: Invert the underground, so that we can see the MC generator in action :)
    bool ShouldInvert[cChunkDef::Width * cChunkDef::Width];
    memset(ShouldInvert, 0, sizeof(ShouldInvert));
    for (int y = cChunkDef::Height - 1; y >= 0; y--)
    {
    	for (int x = 0; x < cChunkDef::Width; x++) for (int z = 0; z < cChunkDef::Width; z++)
    	{
    		int Index = cChunkDef::MakeIndexNoCheck(x, y, z);
    		if (ShouldInvert[x + cChunkDef::Width * z])
    		{
    			BlockTypes[Index] = (BlockTypes[Index] == E_BLOCK_AIR) ? E_BLOCK_STONE : E_BLOCK_AIR;
    		}
    		else
    		{
    			switch (BlockTypes[Index])
    			{
    				case E_BLOCK_AIR:
    				case E_BLOCK_LEAVES:
    				{
    					// nothing needed
    					break;
    				}
    				default:
    				{
    					ShouldInvert[x + cChunkDef::Width * z] = true;
    				}
    			}
    			BlockTypes[Index] = E_BLOCK_AIR;
    		}
    	}
    }  // for y
    //*/

    m_World->SetChunkData(
        a_Chunk.m_ChunkX, a_Chunk.m_ChunkZ,
        BlockTypes, MetaData,
        IsLightValid ? BlockLight : NULL,
        IsLightValid ? SkyLight : NULL,
//.........这里部分代码省略.........
开发者ID:stpinker,项目名称:MCServer,代码行数:101,代码来源:WSSAnvil.cpp


注:本文中的cParsedNBT类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。