コード例 #1
0
        //ReadEntityMetadata

        public void WriteEntityMetadata(EntityMetadataManager data)
        {
            using (MCBEBinary stream = new MCBEBinary())
            {
                Dictionary <int, EntityData> entityDatas = data.GetEntityDatas();
                stream.WriteUVarInt((uint)entityDatas.Count);
                int[] keys = entityDatas.Keys.ToArray();
                for (int i = 0; i < keys.Length; ++i)
                {
                    int                id         = keys[i];
                    EntityData         entityData = entityDatas[id];
                    EntityMetadataType type       = entityData.Type;
                    stream.WriteUVarInt((uint)id);
                    stream.WriteUVarInt((uint)type);
                    if (type == EntityMetadataType.DATA_TYPE_BYTE)
                    {
                        stream.WriteByte(data.GetByte(id));
                    }
                    else if (type == EntityMetadataType.DATA_TYPE_SHORT)
                    {
                        stream.WriteLShort((ushort)data.GetShort(id));
                    }
                    else if (type == EntityMetadataType.DATA_TYPE_INT)
                    {
                        stream.WriteSVarInt(data.GetInt(id));
                    }
                    else if (type == EntityMetadataType.DATA_TYPE_FLOAT)
                    {
                        stream.WriteLFloat(data.GetFloat(id));
                    }
                    else if (type == EntityMetadataType.DATA_TYPE_STRING)
                    {
                        stream.WriteString(data.GetString(id));
                    }
                    else if (type == EntityMetadataType.DATA_TYPE_SLOT)
                    {
                        stream.WriteItem(data.GetSlot(id));
                    }
                    else if (type == EntityMetadataType.DATA_TYPE_LONG)
                    {
                        stream.WriteSVarLong(data.GetLong(id));
                    }
                    else if (type == EntityMetadataType.DATA_TYPE_VECTOR)
                    {
                        stream.WriteVector3(data.GetVector(id));
                    }
                }
                this.WriteBytes(stream.ToArray());
            }
        }
コード例 #2
0
        public async Task WriteEntityMetdata(byte index, EntityMetadataType type, object value, bool optional = false)
        {
            await this.WriteUnsignedByteAsync(index);

            await this.WriteVarIntAsync((int)type);

            switch (type)
            {
            case EntityMetadataType.Byte:
                await this.WriteUnsignedByteAsync((byte)value);

                break;

            case EntityMetadataType.VarInt:
                await this.WriteVarIntAsync((int)value);

                break;

            case EntityMetadataType.Float:
                await this.WriteFloatAsync((float)value);

                break;

            case EntityMetadataType.String:
                await this.WriteStringAsync((string)value);

                break;

            case EntityMetadataType.Chat:
                await this.WriteChatAsync((ChatMessage)value);

                break;

            case EntityMetadataType.OptChat:
                await this.WriteBooleanAsync(optional);

                if (optional)
                {
                    await this.WriteChatAsync((ChatMessage)value);
                }
                break;

            case EntityMetadataType.Slot:
                await this.WriteSlotAsync((ItemStack)value);

                break;

            case EntityMetadataType.Boolean:
                await this.WriteBooleanAsync((bool)value);

                break;

            case EntityMetadataType.Rotation:
                break;

            case EntityMetadataType.Position:
                await this.WritePositionAsync((Position)value);

                break;

            case EntityMetadataType.OptPosition:
                await this.WriteBooleanAsync(optional);

                if (optional)
                {
                    await this.WritePositionAsync((Position)value);
                }

                break;

            case EntityMetadataType.Direction:
                break;

            case EntityMetadataType.OptUuid:
                await this.WriteBooleanAsync(optional);

                if (optional)
                {
                    await this.WriteUuidAsync((Guid)value);
                }
                break;

            case EntityMetadataType.OptBlockId:
                await this.WriteVarIntAsync((int)value);

                break;

            case EntityMetadataType.Nbt:
            case EntityMetadataType.Particle:
            case EntityMetadataType.VillagerData:
            case EntityMetadataType.OptVarInt:
                if (optional)
                {
                    await this.WriteVarIntAsync(0);

                    break;
                }
                await this.WriteVarIntAsync(1 + (int)value);

                break;

            case EntityMetadataType.Pose:
                await this.WriteVarIntAsync((Pose)value);

                break;

            default:
                break;
            }
        }
コード例 #3
0
 public void WriteEntityMetadataType(byte index, EntityMetadataType entityMetadataType)
 {
     WriteUnsignedByte(index);
     WriteVarInt((int)entityMetadataType);
 }
コード例 #4
0
 public static BinaryWriter WriteAsEntityMetadata(this BinaryWriter bw, byte index, EntityMetadataType type)
 {
     bw.WriteAsByte(index);
     bw.WriteAsByte((byte)type);
     return(bw);
 }
コード例 #5
0
 public static int GetIndex(this EntityMetadataType type)
 {
     return((int)type);
 }
コード例 #6
0
 public EntityMetadata(byte index, EntityMetadataType type, object value)
 {
     Index = index;
     Type  = type;
     Value = value;
 }