示例#1
0
        public override Metadata Read()
        {
            var v    = new Metadata();
            var v2   = new Dictionary <int, Metadata.MetadataInfo>();
            var vi   = new MinecraftVarInt(Stream);
            var b    = new MinecraftByte(Stream);
            var func = typeof(MinecraftPacket).GetMethod("ReadFromStream");

            while (true)
            {
                byte val = b.Read();
                if (val == 0xff)
                {
                    break;
                }
                var t = Types.Forward[vi.Read()];
                v2.Add(val, new Metadata.MetadataInfo()
                {
                    Type  = t,
                    value = func.MakeGenericMethod(t).Invoke(null, new object[] { Stream })
                });
            }
            v.Infos = v2;
            return(v);
        }
示例#2
0
        public override UInt16 Read()
        {
            var MinecraftByte = new MinecraftByte(Stream);
            var value         = (ushort)(
                (MinecraftByte.Read() << 8) |
                MinecraftByte.Read());

            return(value);
        }
示例#3
0
        public override UInt32 Read()
        {
            var Uint8 = new MinecraftByte(Stream);
            var value = (UInt32)(
                (Uint8.Read() << 24) |
                (Uint8.Read() << 16) |
                (Uint8.Read() << 8) |
                Uint8.Read());

            return(value);
        }
示例#4
0
        public override void Write(ItemStack value)
        {
            var Uint8 = new MinecraftByte(Stream);

            new MinecraftShort(Stream).Write((short)value.ProtocolId);
            if (value.ProtocolId != -1)
            {
                Uint8.Write(value.ItemCount);
                new MinecraftNbtCompound(Stream).Write(value.GetNbt());
            }
        }
示例#5
0
        public override void Write(VarInt value)
        {
            var MinecraftByte = new MinecraftByte(Stream);

            while ((value & -128) != 0)
            {
                MinecraftByte.Write((byte)(value & 127 | 128));
                value = (int)(((uint)value.value) >> 7);
            }

            MinecraftByte.Write((byte)value);
        }
示例#6
0
        public override String Read()
        {
            Int32 length = new MinecraftVarInt(Stream).Read();

            if (length == 0)
            {
                return(string.Empty);
            }
            var data  = new MinecraftByte(Stream).ReadArray(length);
            var value = Encoding.UTF8.GetString(data);

            return(value);
        }
示例#7
0
        public override void Write(Metadata value)
        {
            var vi   = new MinecraftVarInt(Stream);
            var b    = new MinecraftByte(Stream);
            var func = typeof(MinecraftPacket).GetMethod("WriteToStream", BindingFlags.Static | BindingFlags.Public);
            var f2   = typeof(MinecraftMetadata).GetMethod("C", BindingFlags.Static | BindingFlags.Public);

            foreach (var v in value.Infos)
            {
                b.Write((byte)v.Key);
                vi.Write(Types.Reverse[v.Value.Type]);
                var v2 = f2.MakeGenericMethod(v.Value.Type).Invoke(null, new object[] { v.Value.value });
                func.MakeGenericMethod(v.Value.Type).Invoke(null, new object[] { Stream, v2 });
            }
            b.Write(0xff);
        }
示例#8
0
        public override ItemStack Read()
        {
            var Uint8  = new MinecraftByte(Stream);
            var ItemId = new MinecraftShort(Stream).Read();

            if (ItemId != -1)
            {
                var Count = Uint8.Read();
                //NBT
                Uint8.Read(); //Just Read Out the NBT
                ItemStack value = ItemStack.GetItem(ItemId);
                value.ItemCount = Count;
                value.SetNbt(new MinecraftNbtCompound(Stream).Read());
                return(value);
            }
            else
            {
                return(ItemStack.Null);
            }
        }
示例#9
0
        public override UInt64 Read()
        {
            var UInt8 = new MinecraftByte(Stream);
            var v1    = (ulong)UInt8.Read();
            var v2    = (ulong)UInt8.Read();
            var v3    = (ulong)UInt8.Read();
            var v4    = (ulong)UInt8.Read();
            var v5    = (ulong)UInt8.Read();
            var v6    = (ulong)UInt8.Read();
            var v7    = (ulong)UInt8.Read();
            var v8    = (ulong)UInt8.Read();
            var value = unchecked (
                (v1 << 56) |
                (v2 << 48) |
                (v3 << 40) |
                (v4 << 32) |
                (v5 << 24) |
                (v6 << 16) |
                (v7 << 8) |
                (v8));

            return(value);
        }
示例#10
0
        public override VarInt Read()
        {
            var MinecraftByte = new MinecraftByte(Stream);
            var v             = 0;
            var size          = 0;
            int b;

            while (((b = MinecraftByte.Read()) & 0x80) == 0x80)
            {
                if (b == -1)
                {
                    throw new EndOfStreamException();
                }

                v |= (b & 0x7F) << (size++ *7);
                if (size > 5)
                {
                    throw new IOException("VarInt too long. Hehe that's punny.");
                }
            }
            var value = (v | ((b & 0x7F) << (size * 7)));

            return(value);
        }
示例#11
0
        public override Boolean Read()
        {
            var v = new MinecraftByte(Stream).Read() != 0;

            return(v);
        }