コード例 #1
0
ファイル: DatImporter.cs プロジェクト: rdebath/MCGalaxy
        static void ParseRootObject(Level lvl, JObject obj)
        {
            JFieldDesc[] fields = obj.Desc.Fields;
            object[]     values = obj.ClassData[0].Values;

            for (int i = 0; i < fields.Length; i++)
            {
                JFieldDesc f     = fields[i];
                object     value = values[i];

                // yes height/depth are swapped intentionally
                if (f.Name == "width")
                {
                    lvl.Width = U16(value);
                }
                if (f.Name == "height")
                {
                    lvl.Length = U16(value);
                }
                if (f.Name == "depth")
                {
                    lvl.Height = U16(value);
                }
                if (f.Name == "blocks")
                {
                    lvl.blocks = (byte[])((JArray)value).Values;
                }
                if (f.Name == "xSpawn")
                {
                    lvl.spawnx = U16(value);
                }
                if (f.Name == "ySpawn")
                {
                    lvl.spawny = U16(value);
                }
                if (f.Name == "zSpawn")
                {
                    lvl.spawnz = U16(value);
                }
            }
        }
コード例 #2
0
ファイル: DatImporter.cs プロジェクト: rdebath/MCGalaxy
        static JFieldDesc FieldDesc(DatReader r)
        {
            JFieldDesc desc = new JFieldDesc();
            byte       type = r.ReadUInt8();

            desc.Type = (char)type;

            if (type == 'B' || type == 'C' || type == 'D' || type == 'F' || type == 'I' || type == 'J' || type == 'S' || type == 'Z')
            {
                desc.Name = r.ReadUtf8();
            }
            else if (type == '[' || type == 'L')
            {
                desc.Name      = r.ReadUtf8();
                desc.ClassName = (string)ReadObject(r);
            }
            else
            {
                throw new InvalidDataException("Invalid field type: " + type);
            }
            return(desc);
        }
コード例 #3
0
        public byte[] Load(Stream stream, Game game, out int width, out int height, out int length)
        {
            byte[] map = null;
            width  = 0;
            height = 0;
            length = 0;
            GZipHeaderReader gzHeader = new GZipHeaderReader();

            while (!gzHeader.ReadHeader(stream))
            {
            }

            LocalPlayer p = game.LocalPlayer;

            p.Spawn = Vector3.Zero;

            using (DeflateStream s = new DeflateStream(stream)) {
                reader = new BinaryReader(s);
                if (ReadInt32() != 0x271BB788 || reader.ReadByte() != 0x02)
                {
                    throw new InvalidDataException("Unexpected constant in .dat file");
                }

                JObject      obj    = (JObject)ReadStream();
                JFieldDesc[] fields = obj.Desc.Info.Fields;
                object[]     values = obj.ClassData[0].Values;

                for (int i = 0; i < fields.Length; i++)
                {
                    JFieldDesc field = fields[i];
                    object     value = values[i];

                    if (field.Name == "width")
                    {
                        width = (int)value;
                    }
                    else if (field.Name == "height")
                    {
                        length = (int)value;
                    }
                    else if (field.Name == "depth")
                    {
                        height = (int)value;
                    }
                    else if (field.Name == "blocks")
                    {
                        map = (byte[])((JArray)value).Values;
                    }
                    else if (field.Name == "xSpawn")
                    {
                        p.Spawn.X = (int)value;
                    }
                    else if (field.Name == "ySpawn")
                    {
                        p.Spawn.Y = (int)value;
                    }
                    else if (field.Name == "zSpawn")
                    {
                        p.Spawn.Z = (int)value;
                    }
                }
            }
            return(map);
        }