void Blockchange1(Player p, int x, int y, int z, short type) { p.ClearBlockChange(); //p.SendMessage("tile: " + x + " " + y + " " + z + " " + type); p.SendBlockChange(x, (byte)y, z, p.level.GetBlock(x, y, z), p.level.GetMeta(x, y, z)); CuboidData cd = (CuboidData)p.BlockChangeObject; cd.x = x; cd.y = y; cd.z = z; p.BlockChangeObject = cd; p.OnBlockChange += Blockchange2; }
void Blockchange2(Player p, int x, int y, int z, short type) { p.ClearBlockChange(); //p.SendMessage("tile: " + x + " " + y + " " + z + " " + type); p.SendBlockChange(x, (byte)y, z, p.level.GetBlock(x, y, z), p.level.GetMeta(x, y, z)); CuboidData cd = (CuboidData)p.BlockChangeObject; byte meta = (byte)p.inventory.current_item.meta; if (cd.type != -1) { type = cd.type; } if (!FindBlocks.ValidBlock(type)) { type = 0; } int sx = Math.Min(cd.x, x); int ex = Math.Max(cd.x, x); int sy = Math.Min(cd.y, y); int ey = Math.Max(cd.y, y); int sz = Math.Min(cd.z, z); int ez = Math.Max(cd.z, z); int total = 0; p.SendMessage("Cuboiding..."); switch (cd.mode) { case CuboidType.Solid: for (int xx = sx; xx <= ex; xx++) { for (int yy = sy; yy <= ey; yy++) { for (int zz = sz; zz <= ez; zz++) { p.level.BlockChange(xx, yy, zz, (byte)type, meta, false); total++; } } } break; case CuboidType.Hollow: for (int xx = sx; xx <= ex; xx++) { for (int zz = sz; zz <= ez; zz++) { p.level.BlockChange(xx, sy, zz, (byte)type, meta, false); p.level.BlockChange(xx, ey, zz, (byte)type, meta, false); total += 2; } } for (int yy = sy; yy <= ey; yy++) { for (int xx = sx; xx <= ex; xx++) { p.level.BlockChange(xx, yy, sz, (byte)type, meta, false); p.level.BlockChange(xx, yy, ez, (byte)type, meta, false); total += 2; } for (int zz = sz; zz <= ez; zz++) { p.level.BlockChange(sx, yy, zz, (byte)type, meta, false); p.level.BlockChange(ex, yy, zz, (byte)type, meta, false); total += 2; } } break; case CuboidType.Walls: for (int yy = sy; yy <= ey; yy++) { for (int xx = sx; xx <= ex; xx++) { p.level.BlockChange(xx, yy, sz, (byte)type, meta, false); p.level.BlockChange(xx, yy, ez, (byte)type, meta, false); total += 2; } for (int zz = sz; zz <= ez; zz++) { p.level.BlockChange(sx, yy, zz, (byte)type, meta, false); p.level.BlockChange(ex, yy, zz, (byte)type, meta, false); total += 2; } } break; case CuboidType.Holes: bool Checked = true, startZ, startY; for (int xx = sx; xx <= ex; xx++) { startY = Checked; for (int yy = sy; yy <= ey; yy++) { startZ = Checked; for (int zz = sz; zz <= ez; zz++) { Checked = !Checked; if (Checked) { p.level.BlockChange(xx, yy, zz, (byte)type, meta, false); total++; } } Checked = !startZ; } Checked = !startY; } break; case CuboidType.Wire: for (int xx = sx; xx <= ex; xx++) { p.level.BlockChange(xx, sy, sz, (byte)type, meta, false); p.level.BlockChange(xx, sy, ez, (byte)type, meta, false); p.level.BlockChange(xx, ey, sz, (byte)type, meta, false); p.level.BlockChange(xx, ey, ez, (byte)type, meta, false); total += 4; } for (int yy = sy; yy <= ey; yy++) { p.level.BlockChange(sx, yy, sz, (byte)type, meta, false); p.level.BlockChange(sx, yy, ez, (byte)type, meta, false); p.level.BlockChange(ex, yy, sz, (byte)type, meta, false); p.level.BlockChange(ex, yy, ez, (byte)type, meta, false); total += 4; } for (int zz = sz; zz <= ez; zz++) { p.level.BlockChange(sx, sy, zz, (byte)type, meta, false); p.level.BlockChange(sx, ey, zz, (byte)type, meta, false); p.level.BlockChange(ex, sy, zz, (byte)type, meta, false); p.level.BlockChange(ex, ey, zz, (byte)type, meta, false); total += 4; } break; case CuboidType.Random: Random rand = new Random(); for (int xx = sx; xx <= ex; xx++) { for (int yy = sy; yy <= ey; yy++) { for (int zz = sz; zz <= ez; zz++) { if (rand.Next(1, 11) <= 5) { p.level.BlockChange(xx, yy, zz, (byte)type, meta, false); total++; } } } } break; } p.SendMessage(total + " blocks."); }