コード例 #1
0
        public static void LoadTextureData(Stream stream, Texture2D texture, bool keepSourceImageInTag)
        {
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);
            int num  = texture.Width;
            int num2 = texture.Height;

            byte[] array = new byte[4 * num * num2];
            for (int i = 0; i < texture.MipLevelsCount; i++)
            {
                engineBinaryReader.Read(array, 0, 4 * num * num2);
                if (keepSourceImageInTag && i == 0)
                {
                    Image image = new Image(num, num2);
                    for (int j = 0; j < image.Pixels.Length; j++)
                    {
                        byte r = array[4 * j];
                        byte g = array[4 * j + 1];
                        byte b = array[4 * j + 2];
                        byte a = array[4 * j + 3];
                        image.Pixels[j] = new Color(r, g, b, a);
                    }
                    texture.Tag = image;
                }
                texture.SetData(i, array);
                num  = MathUtils.Max(num / 2, 1);
                num2 = MathUtils.Max(num2 / 2, 1);
            }
        }
コード例 #2
0
        /// <summary>
        /// 导出成普通文本文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="exportFile"></param>
        public static void ExportOnekeyoMod2(string path, string exportFile)
        {
            if (path.IsFileInUse())
            {
                throw new FileLoadException("文件被占用");
            }
            Stream             exportFileStream   = new FileStream(exportFile, FileMode.Create);
            Stream             stream             = File.Open(path, FileMode.Open);
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false);
            string             data = "";
            int MinX = engineBinaryReader.ReadInt32();
            int MinY = engineBinaryReader.ReadInt32();
            int MinZ = engineBinaryReader.ReadInt32();
            int MaxX = engineBinaryReader.ReadInt32();
            int MaxY = engineBinaryReader.ReadInt32();
            int MaxZ = engineBinaryReader.ReadInt32();

            data += $"{MinX}\n{MinY}\n{MinZ}\n{MaxX}\n{MaxY}\n{MaxZ}";
            for (int x = MinX; x <= MaxX; x++)
            {
                for (int y = MinY; y <= MaxY; y++)
                {
                    for (int z = MinZ; z <= MaxZ; z++)
                    {
                        data += $"\n{engineBinaryReader.ReadInt32()}";
                    }
                }
            }
            exportFileStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length);
            engineBinaryReader.Dispose();
            stream.Dispose();
            exportFileStream.Dispose();
        }
コード例 #3
0
        public static void ExportCopywMod(string path, string exportFile)
        {
            if (path.IsFileInUse())
            {
                throw new FileLoadException("文件被占用");
            }
            Stream             exportFileStream   = new FileStream(exportFile, FileMode.Create);
            Stream             stream             = File.Open(path, FileMode.Open);
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false);
            string             data = "";
            int MaxX = engineBinaryReader.ReadInt32();
            int MaxY = engineBinaryReader.ReadInt32();
            int MaxZ = engineBinaryReader.ReadInt32();

            data += $"{MaxX},{MaxY},{MaxZ}";
            for (int x = 0; x <= MaxX; x++)
            {
                for (int y = 0; y <= MaxY; y++)
                {
                    for (int z = 0; z <= MaxZ; z++)
                    {
                        int BlockID = engineBinaryReader.ReadInt32();
                        if (Terrain.ExtractContents(BlockID) != 0)
                        {
                            data += $"\n{x},{y},{z},{BlockID}";
                        }
                    }
                }
            }
            exportFileStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length);
            engineBinaryReader.Dispose();
            stream.Dispose();
            exportFileStream.Dispose();
        }
コード例 #4
0
        public static Texture2D ReadTexture(Stream stream)
        {
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);
            bool      keepSourceImageInTag        = engineBinaryReader.ReadBoolean();
            int       width          = engineBinaryReader.ReadInt32();
            int       height         = engineBinaryReader.ReadInt32();
            int       mipLevelsCount = engineBinaryReader.ReadInt32();
            Texture2D texture2D      = new Texture2D(width, height, mipLevelsCount, ColorFormat.Rgba8888);

            LoadTextureData(stream, texture2D, keepSourceImageInTag);
            return(texture2D);
        }
コード例 #5
0
        public static Image ReadImage(Stream stream)
        {
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);
            int   width  = engineBinaryReader.ReadInt32();
            int   height = engineBinaryReader.ReadInt32();
            Image image  = new Image(width, height);

            for (int i = 0; i < image.Pixels.Length; i++)
            {
                image.Pixels[i] = engineBinaryReader.ReadColor();
            }
            return(image);
        }
コード例 #6
0
        public static void ReadHeaders(Stream stream, out FmtHeader fmtHeader, out DataHeader dataHeader, out long dataStart)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (!BitConverter.IsLittleEndian)
            {
                throw new InvalidOperationException("Unsupported system endianness.");
            }
            if (!IsWavStream(stream))
            {
                throw new InvalidOperationException("Invalid WAV header.");
            }
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);

            fmtHeader        = default(FmtHeader);
            dataHeader       = default(DataHeader);
            dataStart        = 0L;
            stream.Position += 12L;
            bool flag  = false;
            bool flag2 = false;

            while (!flag || !flag2)
            {
                int num = engineBinaryReader.ReadInt32();
                if (num == MakeFourCC("fmt "))
                {
                    stream.Position -= 4L;
                    fmtHeader        = engineBinaryReader.ReadStruct <FmtHeader>();
                    flag             = true;
                }
                else if (num == MakeFourCC("data"))
                {
                    stream.Position -= 4L;
                    dataHeader       = engineBinaryReader.ReadStruct <DataHeader>();
                    dataStart        = stream.Position;
                    flag2            = true;
                }
                else
                {
                    int num2 = engineBinaryReader.ReadInt32();
                    stream.Position += num2;
                }
            }
            if (fmtHeader.Type != 1 || fmtHeader.ChannelsCount < 1 || fmtHeader.ChannelsCount > 2 || fmtHeader.SamplingFrequency < 8000 || fmtHeader.SamplingFrequency > 48000 || fmtHeader.BitsPerChannel != 16)
            {
                throw new InvalidOperationException("Unsupported WAV format.");
            }
        }
コード例 #7
0
        public static ModelData ReadModelData(Stream stream)
        {
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);
            ModelData          modelData          = new ModelData();

            modelData.Bones.Capacity = engineBinaryReader.ReadInt32();
            for (int i = 0; i < modelData.Bones.Capacity; i++)
            {
                ModelBoneData modelBoneData = new ModelBoneData();
                modelData.Bones.Add(modelBoneData);
                modelBoneData.ParentBoneIndex = engineBinaryReader.ReadInt32();
                modelBoneData.Name            = engineBinaryReader.ReadString();
                modelBoneData.Transform       = engineBinaryReader.ReadMatrix();
            }
            modelData.Meshes.Capacity = engineBinaryReader.ReadInt32();
            for (int j = 0; j < modelData.Meshes.Capacity; j++)
            {
                ModelMeshData modelMeshData = new ModelMeshData();
                modelData.Meshes.Add(modelMeshData);
                modelMeshData.ParentBoneIndex    = engineBinaryReader.ReadInt32();
                modelMeshData.Name               = engineBinaryReader.ReadString();
                modelMeshData.MeshParts.Capacity = engineBinaryReader.ReadInt32();
                modelMeshData.BoundingBox        = engineBinaryReader.ReadBoundingBox();
                for (int k = 0; k < modelMeshData.MeshParts.Capacity; k++)
                {
                    ModelMeshPartData modelMeshPartData = new ModelMeshPartData();
                    modelMeshData.MeshParts.Add(modelMeshPartData);
                    modelMeshPartData.BuffersDataIndex = engineBinaryReader.ReadInt32();
                    modelMeshPartData.StartIndex       = engineBinaryReader.ReadInt32();
                    modelMeshPartData.IndicesCount     = engineBinaryReader.ReadInt32();
                    modelMeshPartData.BoundingBox      = engineBinaryReader.ReadBoundingBox();
                }
            }
            modelData.Buffers.Capacity = engineBinaryReader.ReadInt32();
            for (int l = 0; l < modelData.Buffers.Capacity; l++)
            {
                ModelBuffersData modelBuffersData = new ModelBuffersData();
                modelData.Buffers.Add(modelBuffersData);
                VertexElement[] array = new VertexElement[engineBinaryReader.ReadInt32()];
                for (int m = 0; m < array.Length; m++)
                {
                    array[m] = new VertexElement(engineBinaryReader.ReadInt32(), (VertexElementFormat)engineBinaryReader.ReadInt32(), engineBinaryReader.ReadString());
                }
                modelBuffersData.VertexDeclaration = new VertexDeclaration(array);
                modelBuffersData.Vertices          = engineBinaryReader.ReadBytes(engineBinaryReader.ReadInt32());
                modelBuffersData.Indices           = engineBinaryReader.ReadBytes(engineBinaryReader.ReadInt32());
            }
            return(modelData);
        }
コード例 #8
0
        /// <summary>
        /// 导出成普通文本文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="exportFile"></param>
        public static void ExportOnekeyoMod(string path, string exportFile)
        {
            if (path.IsFileInUse())
            {
                throw new FileLoadException("文件被占用");
            }
            Stream             exportFileStream   = new FileStream(exportFile, FileMode.Create);
            Stream             stream             = File.Open(path, FileMode.Open);
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false);
            string             data = "";
            int MinX = engineBinaryReader.ReadInt32();
            int MinY = engineBinaryReader.ReadInt32();
            int MinZ = engineBinaryReader.ReadInt32();
            int MaxX = engineBinaryReader.ReadInt32();
            int MaxY = engineBinaryReader.ReadInt32();
            int MaxZ = engineBinaryReader.ReadInt32();

            //data += $"{MinX}\n{MinY}\n{MinZ}\n{MaxX}\n{MaxY}\n{MaxZ}";
            for (int x = MinX; x <= MaxX; x++)
            {
                for (int y = MinY; y <= MaxY; y++)
                {
                    for (int z = MinZ; z <= MaxZ; z++)
                    {
                        int blockID = engineBinaryReader.ReadInt32();
                        if (Terrain.ExtractContents(blockID) == 0)
                        {
                            continue;
                        }
                        if (x == MaxX && y == MaxY && z == MaxZ)
                        {
                            data += $"{x},{y},{z},{blockID}\n";
                            continue;
                        }
                        data += $"{x},{y},{z},{blockID}\n";
                    }
                }
            }
            exportFileStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length);
            engineBinaryReader.Dispose();
            stream.Dispose();
            exportFileStream.Dispose();
        }
コード例 #9
0
        /// <summary>
        /// 一键生成
        /// </summary>
        /// <param name="creatorAPI"></param>
        /// <param name="path"></param>
        /// <param name="position"></param>
        public static void GenerationData(CreatorAPI creatorAPI, string path, Point3 position)
        {
            ChunkData chunkData = new ChunkData(creatorAPI);

            creatorAPI.revokeData = new ChunkData(creatorAPI);
            ComponentPlayer    player       = creatorAPI.componentMiner.ComponentPlayer;
            Stream             fileStream   = new FileStream(path, FileMode.Open).CreateStream();
            EngineBinaryReader binaryReader = new EngineBinaryReader(fileStream, false);
            int count = 0;
            int MinX  = binaryReader.ReadInt32();
            int MinY  = binaryReader.ReadInt32();
            int MInZ  = binaryReader.ReadInt32();
            int MaxX  = binaryReader.ReadInt32();
            int MaxY  = binaryReader.ReadInt32();
            int MaxZ  = binaryReader.ReadInt32();

            for (int PositionX = MinX; PositionX <= MaxX; PositionX++)
            {
                for (int PositionY = MinY; PositionY <= MaxY; PositionY++)
                {
                    for (int PositionZ = MInZ; PositionZ <= MaxZ; PositionZ++)
                    {
                        if (!creatorAPI.launch)
                        {
                            return;
                        }
                        int id = binaryReader.ReadInt32();
                        if (!creatorAPI.AirIdentify && Terrain.ExtractContents(id) == 0)
                        {
                            continue;
                        }
                        creatorAPI.CreateBlock(position.X + PositionX, position.Y + PositionY, position.Z + PositionZ, id, chunkData);
                        count++;
                    }
                }
            }
            binaryReader.Dispose();
            fileStream.Dispose();
            chunkData.Render();
            creatorAPI.componentMiner.ComponentPlayer.ComponentGui.DisplaySmallMessage($"操作成功,共{count}个方块", true, true);
        }
コード例 #10
0
        internal static void InitializeBitmapFont(Stream stream, BitmapFont bitmapFont)
        {
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);
            int num = engineBinaryReader.ReadInt32();

            BitmapFont.Glyph[] array = new BitmapFont.Glyph[num];
            for (int i = 0; i < num; i++)
            {
                char    code      = engineBinaryReader.ReadChar();
                Vector2 texCoord  = engineBinaryReader.ReadVector2();
                Vector2 texCoord2 = engineBinaryReader.ReadVector2();
                Vector2 offset    = engineBinaryReader.ReadVector2();
                float   width     = engineBinaryReader.ReadSingle();
                array[i] = new BitmapFont.Glyph(code, texCoord, texCoord2, offset, width);
            }
            float     glyphHeight  = engineBinaryReader.ReadSingle();
            Vector2   spacing      = engineBinaryReader.ReadVector2();
            float     scale        = engineBinaryReader.ReadSingle();
            char      fallbackCode = engineBinaryReader.ReadChar();
            Texture2D texture      = TextureContentReader.ReadTexture(stream);

            bitmapFont.Initialize(texture, null, array, fallbackCode, glyphHeight, spacing, scale);
        }
コード例 #11
0
        private static void FontSave(Stream stream, Stream lstStream)
        {
            EngineBinaryReader binaryReader = new EngineBinaryReader(stream, false);
            int    num  = binaryReader.ReadInt32();
            string data = "";

            data += num + "\n";
            for (int i = 0; i < num; i++)
            {
                data += binaryReader.ReadChar() + "\t";
                data += binaryReader.ReadSingle() + "\t";
                data += binaryReader.ReadSingle() + "\t";
                data += binaryReader.ReadSingle() + "\t";
                data += binaryReader.ReadSingle() + "\t";
                data += binaryReader.ReadSingle() + "\t";
                data += binaryReader.ReadSingle() + "\t";
                data += binaryReader.ReadSingle() + "\n";
            }
            data += binaryReader.ReadSingle() + "\n";
            data += binaryReader.ReadSingle() + "\t" + binaryReader.ReadSingle() + "\n";
            data += binaryReader.ReadSingle() + "\n";
            data += binaryReader.ReadChar();
            lstStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length);
        }
コード例 #12
0
        public static void UnpackData(string text, string typeName)
        {
            if (typeName == "System.String")
            {
                FileStream         input        = File.OpenRead(text);
                EngineBinaryReader binaryReader = new EngineBinaryReader(input);
                binaryReader.BaseStream.Position = 0;
                string s = binaryReader.ReadString();
                binaryReader.Close();
                FileStream fileStream = File.Create(text + ".txt");
                fileStream.Write(Encoding.UTF8.GetBytes(s), 0, Encoding.UTF8.GetBytes(s).Length);
                fileStream.Close();
                File.Delete(text);
                return;
            }
            if (typeName == "System.Xml.Linq.XElement")
            {
                FileStream         input2        = File.OpenRead(text);
                EngineBinaryReader binaryReader2 = new EngineBinaryReader(input2);
                binaryReader2.BaseStream.Position = 0;
                string s2 = binaryReader2.ReadString();
                binaryReader2.Close();
                FileStream fileStream2 = File.Create(text + ".xml");
                fileStream2.Write(Encoding.UTF8.GetBytes(s2), 0, Encoding.UTF8.GetBytes(s2).Length);
                fileStream2.Close();
                File.Delete(text);
                return;
            }
            if (typeName == "Engine.Graphics.Texture2D")
            {
                FileStream         stream             = File.OpenRead(text);
                EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream, false);
                engineBinaryReader.ReadByte();
                int   width  = engineBinaryReader.ReadInt32();
                int   height = engineBinaryReader.ReadInt32();
                Image image  = new Image(width, height);
                engineBinaryReader.ReadInt32();
                for (int i = 0; i < image.Pixels.Length; i++)
                {
                    image.Pixels[i] = engineBinaryReader.ReadColor();
                }
                engineBinaryReader.Close();
                File.Delete(text);
                FileStream fileStream3 = File.Create(text + ".png");
                Png.Save(image, fileStream3, Png.Format.RGBA8);
                fileStream3.Close();

                /*FileStream fileStream = File.OpenRead(text);
                 * FileStream fileStream2 = File.Create(text + ".png");
                 * fileStream.ReadByte();
                 * Image image = ImageContentReader.ReadImage(fileStream);
                 * Png.Save(image,fileStream2,Png.Format.RGBA8);
                 * fileStream2.Close();
                 * fileStream.Close();
                 * File.Delete(text);*/
            }
            if (typeName == "Engine.Audio.SoundBuffer")
            {
                FileStream input      = File.OpenRead(text);
                FileStream fileStream = File.Create(text + ".wav?");
                input.CopyTo(fileStream);
                input.Close();
                fileStream.Close();
                File.Delete(text);

                /*ContentStream stream = new ContentStream(text);
                 * FileStream fileStream = File.Create(text + ".wav");
                 * SoundBuffer data = Read(stream,null);
                 * int ad = data.SamplesCount;
                 * Console.WriteLine(ad);
                 * SoundData sounddata = new SoundData((int)data.ChannelsCount,(int)data.SamplingFrequency,ad);
                 * Wav.Save(sounddata, fileStream);
                 * stream.Close();
                 * fileStream.Close();
                 * File.Delete(text);*/
            }
            if (typeName == "Engine.Graphics.Model")
            {
                FileStream stream = File.OpenRead(text);
                if (Program.size != 0f && Program.size > 1f && Program.size < 255f)
                {
                    string texts = dir + $"\\x{Program.size}Model\\";
                    if (!Directory.Exists(texts))
                    {
                        Directory.CreateDirectory(texts);
                    }
                    string name = Path.GetFileNameWithoutExtension(text);
                    //Console.WriteLine(texts + name + Program.size + "x.dae?");
                    FileStream i = File.Create(texts + name + Program.size + "x.dae?");
                    bool       keepSourceVertexDataInTags = new BinaryReader(stream).ReadBoolean();
                    new BinaryWriter(i).Write(keepSourceVertexDataInTags);
                    ModelData j = ModelDataContentReader.ReadModelData(stream);
                    ModelDataContentWriter w = new ModelDataContentWriter();
                    w.ModelData = text;
                    Vector3 scale = default(Vector3);
                    if (scale == default(Vector3))
                    {
                        scale = new Vector3(Program.size, Program.size, Program.size);
                    }
                    ModelDataContentWriter.WriteModelData(i, j, scale);
                    i.Close();
                }
                FileStream fileStream = File.Create(text + ".dae?");
                stream.CopyTo(fileStream);
                stream.Close();
                fileStream.Close();
                File.Delete(text);


                /*FileStream input = File.OpenRead(text);
                 * FileStream fileStream = File.Create(text + ".dae?");
                 * input.CopyTo(fileStream);
                 * input.Close();
                 * fileStream.Close();
                 * File.Delete(text);*/
            }
            if (typeName == "Engine.Graphics.Shader")
            {
                FileStream input      = File.OpenRead(text);
                FileStream fileStream = File.Create(text + ".shader?");
                input.CopyTo(fileStream);
                input.Close();
                fileStream.Close();
                File.Delete(text);
                return;
            }
            if (typeName == "Engine.Media.BitmapFont")
            {
                FileStream input      = File.OpenRead(text);
                FileStream fileStream = File.Create(text + ".font?");
                input.CopyTo(fileStream);
                input.Close();
                fileStream.Close();
                File.Delete(text);
                return;
            }
            if (typeName == "Engine.Media.StreamingSource")
            {
                FileStream input      = File.OpenRead(text);
                FileStream fileStream = File.Create(text + ".ogg");
                input.CopyTo(fileStream);
                input.Close();
                fileStream.Close();
                File.Delete(text);
                return;
            }
        }
コード例 #13
0
        /// <summary>
        /// 粘贴
        /// </summary>
        /// <param name="creatorAPI"></param>
        /// <param name="path"></param>
        /// <param name="Start"></param>
        /// <param name="End"></param>
        /// <param name="type"></param>
        public static void PasetData(CreatorAPI creatorAPI, string path, Point3 Start, Point3 End)
        {
            ChunkData chunkData = new ChunkData(creatorAPI);

            creatorAPI.revokeData = new ChunkData(creatorAPI);
            ComponentPlayer    player       = creatorAPI.componentMiner.ComponentPlayer;
            Stream             fileStream   = new FileStream(path, FileMode.Open).CreateStream();
            EngineBinaryReader binaryReader = new EngineBinaryReader(fileStream, false);
            int count = 0;
            int MaxX  = binaryReader.ReadInt32();
            int MaxY  = binaryReader.ReadInt32();
            int MaxZ  = binaryReader.ReadInt32();

            for (int PositionX = 0; PositionX <= MaxX; PositionX++)
            {
                for (int PositionY = 0; PositionY <= MaxY; PositionY++)
                {
                    for (int PositionZ = 0; PositionZ <= MaxZ; PositionZ++)
                    {
                        if (!creatorAPI.launch)
                        {
                            return;
                        }
                        int x, y, z;
                        int id = binaryReader.ReadInt32();
                        if (!creatorAPI.AirIdentify && Terrain.ExtractContents(id) == 0)
                        {
                            continue;
                        }
                        y = Start.Y + PositionY;
                        if (Start.X <= End.X && Start.Z <= End.Z)
                        {
                            x = Start.X + PositionX;
                            z = Start.Z + PositionZ;
                            if (creatorAPI.pasteLimit && (End.X < x || End.Z < z))
                            {
                                continue;
                            }
                            creatorAPI.CreateBlock(x, y, z, id, chunkData);
                        }
                        else if (Start.X >= End.X && Start.Z <= End.Z)
                        {
                            if (!creatorAPI.pasteRotate)
                            {
                                x = Start.X - MaxX + PositionX;
                                z = Start.Z + PositionZ;
                                if (creatorAPI.pasteLimit && (Start.X > x + Start.X - End.X || End.Z < z))
                                {
                                    continue;
                                }
                                creatorAPI.CreateBlock(x, y, z, id, chunkData);
                            }
                            else
                            {
                                int _x = Start.X - PositionZ;
                                int _z = Start.Z + PositionX;
                                if (creatorAPI.pasteLimit && (Start.X > _x + Start.X - End.X || End.Z < _z))
                                {
                                    continue;
                                }
                                creatorAPI.CreateBlock(_x, y, _z, id, chunkData);
                            }
                        }
                        else if (Start.X >= End.X && Start.Z >= End.Z)
                        {
                            if (!creatorAPI.pasteRotate)
                            {
                                x = Start.X - MaxX + PositionX;
                                z = Start.Z - MaxZ + PositionZ;
                                if (creatorAPI.pasteLimit && (Start.X > x + Start.X - End.X || Start.Z > z + Start.Z - End.Z))
                                {
                                    continue;
                                }
                                creatorAPI.CreateBlock(x, y, z, id, chunkData);
                            }
                            else
                            {
                                int _x = Start.X - PositionX;
                                int _z = Start.Z - PositionZ;
                                if (creatorAPI.pasteLimit && (Start.X > _x + Start.X - End.X || Start.Z > _z + Start.Z - End.Z))
                                {
                                    continue;
                                }
                                creatorAPI.CreateBlock(_x, y, _z, id, chunkData);
                            }
                        }
                        else if (Start.X <= End.X && Start.Z >= End.Z)
                        {
                            if (!creatorAPI.pasteRotate)
                            {
                                x = Start.X + PositionX;
                                z = Start.Z - MaxZ + PositionZ;
                                if (creatorAPI.pasteLimit && (End.X < x || Start.Z > z + Start.Z - End.Z))
                                {
                                    continue;
                                }
                                creatorAPI.CreateBlock(x, y, z, id, chunkData);
                            }
                            else
                            {
                                int _x = Start.X + PositionZ;
                                int _z = Start.Z - PositionX;
                                if (creatorAPI.pasteLimit && (End.X < _x || Start.Z > _z + Start.Z - End.Z))
                                {
                                    continue;
                                }
                                creatorAPI.CreateBlock(_x, y, _z, id, chunkData);
                            }
                        }
                        count++;
                    }
                }
            }
            binaryReader.Dispose();
            fileStream.Dispose();
            chunkData.Render();
            creatorAPI.componentMiner.ComponentPlayer.ComponentGui.DisplaySmallMessage($"粘贴成功,共{count}个方块", true, true);
        }