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."); // }); //}); }
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++; } } }
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); //} } } } }
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); } }