Exemple #1
0
        public void Cut(Player player, int leaveId = 0, int leaveData = 0)
        {
            RegionSelector selector = RegionSelector.GetSelector(player);

            Clipboard clipboard = new Clipboard(player.Level);

            clipboard.OriginPosition1 = selector.Position1;
            clipboard.OriginPosition2 = selector.Position2;
            clipboard.SourceMask      = new AnyBlockMask();
            clipboard.SourceFuncion   = coordinates =>
            {
                var block = BlockFactory.GetBlockById((byte)leaveId);
                block.Metadata    = (byte)leaveData;
                block.Coordinates = coordinates;
                EditSession.SetBlock(block);
                return(true);
            };
            clipboard.Origin = (BlockCoordinates)player.KnownPosition;
            clipboard.Fill(selector.GetSelectedBlocks());
            selector.Clipboard = clipboard;

            //Task.Run(() =>
            //{
            //	SkyLightCalculations.Calculate(player.Level);
            //	player.CleanCache();
            //	player.ForcedSendChunks(() =>
            //	{
            //		player.SendMessage("Calculated skylights and resent chunks.");
            //	});
            //});
        }
Exemple #2
0
        public void Text(Player player, string text, string fontName = "Arial", int pxSize = 10)
        {
            var font = new Font("SketchFlow Print", 20, GraphicsUnit.Pixel);

            SizeF size;

            // First measure the size of the text
            using (Graphics g = Graphics.FromImage(new Bitmap(1, 1)))
            {
                g.PageUnit      = GraphicsUnit.Pixel;
                g.SmoothingMode = SmoothingMode.None;
                size            = g.MeasureString(text, font);
            }

            Bitmap     bitmap = new Bitmap((int)size.Width, (int)size.Height);
            RectangleF rectf  = new RectangleF(0, 0, size.Width, size.Height);

            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.SmoothingMode = SmoothingMode.None;

                //g.SmoothingMode = SmoothingMode.AntiAlias;
                //g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                //g.PixelOffsetMode = PixelOffsetMode.HighQuality;
                g.DrawString(text, font, Brushes.Black, rectf);
                g.Flush();

                BlockCoordinates coords = (BlockCoordinates)player.KnownPosition;

                int i = 0;
                for (int h = bitmap.Height - 1; h > 0; h--)
                {
                    for (int w = 0; w < bitmap.Width; w++)
                    {
                        Color            color = bitmap.GetPixel(w, h);
                        BlockCoordinates tc    = new BlockCoordinates(0, i, w);
                        if (color.A == 255)
                        {
                            var block = new Sand {
                                Coordinates = tc + coords
                            };
                            Log.Debug($"Pixel at {tc + coords}, {color}");
                            EditSession.SetBlock(block);
                        }
                        else
                        {
                            //Log.Debug($"NO Pixel at {tc + coords}, {color}");
                        }
                    }
                    i++;
                }
            }
        }
Exemple #3
0
        public void Text(Player player, string text, Pattern pattern, string fontName = "Minecraft", int pxSize = 20)
        {
            //var font = new Font("SketchFlow Print", 20, GraphicsUnit.Pixel);
            var font = new Font(fontName, pxSize, GraphicsUnit.Pixel);

            SizeF size;

            // First measure the size of the text
            using (Graphics g = Graphics.FromImage(new Bitmap(1, 1)))
            {
                g.PageUnit      = GraphicsUnit.Pixel;
                g.SmoothingMode = SmoothingMode.None;
                size            = g.MeasureString(text, font);
            }

            Bitmap     bitmap = new Bitmap((int)size.Width, (int)size.Height);
            RectangleF rectf  = new RectangleF(0, 0, size.Width, size.Height);

            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.SmoothingMode = SmoothingMode.None;
                g.DrawString(text, font, Brushes.Black, rectf);
                g.Flush();

                BlockCoordinates coords = player.KnownPosition.ToVector3();

                for (int h = 0; h < bitmap.Height; h++)
                {
                    for (int w = 0; w < bitmap.Width; w++)
                    {
                        Color            color = bitmap.GetPixel(w, h);
                        var              y     = bitmap.Height - 1 - h;
                        BlockCoordinates tc    = new BlockCoordinates(0, y, w);
                        if (color.A == 255)
                        {
                            EditSession.SetBlock(tc + coords, pattern);
                        }
                        //else
                        //{
                        //	var block = new DiamondBlock {Coordinates = tc + coords};
                        //	EditSession.SetBlock(block);
                        //}
                    }
                }
            }
        }
Exemple #4
0
        public void Paste(Player player, bool skipAir = false, bool selectAfter = true, bool pastAtOrigin = false)
        {
            try
            {
                RegionSelector selector = RegionSelector.GetSelector(player);

                Clipboard clipboard = selector.Clipboard;
                if (clipboard == null)
                {
                    player.SendMessage("Nothing in clipboard");
                    return;
                }

                Vector3 to = pastAtOrigin ? clipboard.Origin : (BlockCoordinates)player.KnownPosition;

                var rotateY = clipboard.Transform;

                var clipOffset = clipboard.GetMin() - clipboard.Origin;
                var realTo     = to + Vector3.Transform(clipOffset, rotateY);
                var max        = realTo + Vector3.Transform(clipboard.GetMax() - clipboard.GetMin(), rotateY);

                var blocks = clipboard.GetBuffer();
                foreach (Block block in blocks)
                {
                    if (skipAir && block is Air)
                    {
                        continue;
                    }

                    if (rotateY != Matrix4x4.Identity)
                    {
                        Vector3 vec = Vector3.Transform(block.Coordinates - clipboard.Origin, rotateY);
                        block.Coordinates = vec + to;
                    }
                    else
                    {
                        //Vector3 vec = (block.Coordinates - clipboard.Origin);
                        Vector3 vec = new Vector3(
                            block.Coordinates.X - clipboard.Origin.X + to.X,
                            block.Coordinates.Y - clipboard.Origin.Y + to.Y,
                            block.Coordinates.Z - clipboard.Origin.Z + to.Z);

                        block.Coordinates = vec;
                    }

                    EditSession.SetBlock(block);
                }

                if (selectAfter)
                {
                    selector.Select(realTo, max);
                }

                //Task.Run(() =>
                //{
                //	SkyLightCalculations.Calculate(player.Level);
                //	player.CleanCache();
                //	player.ForcedSendChunks(() =>
                //	{
                //		player.SendMessage("Calculated skylights and resent chunks.");
                //	});
                //});
            }
            catch (Exception e)
            {
                Log.Error("Paste", e);
            }
        }