public override bool PlaceBlock(Level world, Player player, Vector3 blockCoordinates, BlockFace face, Vector3 mouseLocation) { var rawbits = new BitArray(new byte[] { 0x00 }); byte direction = player.GetDirection(); if (face == BlockFace.PositiveY) { switch (direction) { case 0: //South rawbits[1] = true; rawbits[2] = true; break; case 1: //West rawbits[0] = true; rawbits[2] = true; break; case 2: //North rawbits[1] = true; rawbits[2] = true; break; case 3: //East rawbits[0] = true; rawbits[2] = true; break; } } else if (face == BlockFace.NegativeY) { rawbits[0] = true; rawbits[1] = true; rawbits[2] = true; } else if (face == BlockFace.PositiveZ) { rawbits[0] = true; rawbits[1] = true; } else if (face == BlockFace.NegativeZ) { rawbits[2] = true; } else if (face == BlockFace.PositiveX) { rawbits[0] = true; } else if (face == BlockFace.NegativeX) { rawbits[1] = true; } Metadata = ConvertToByte(rawbits); world.SetBlock(this); return true; }
public override bool PlaceBlock(Level world, Player player, Vector3 blockCoordinates, BlockFace face, Vector3 mouseLocation) { var direction = player.GetDirection(); var coordinates = GetNewCoordinatesFromFace(blockCoordinates, face); Block block = new Door(Id); block.Coordinates = coordinates; block.Metadata = direction; var x = (int) blockCoordinates.X; var y = (int) blockCoordinates.Y; var z = (int) blockCoordinates.Z; var xd = 0; var zd = 0; if (direction == 0) zd = 1; if (direction == 1) xd = -1; if (direction == 2) zd = -1; if (direction == 3) xd = 1; var i1 = (world.GetBlock(new Vector3(x - xd, y, z - zd)).IsSolid ? 1 : 0) + (world.GetBlock(new Vector3(x - xd, y + 1, z - zd)).IsSolid ? 1 : 0); var j1 = (world.GetBlock(new Vector3(x + xd, y, z + zd)).IsSolid ? 1 : 0) + (world.GetBlock(new Vector3(x + xd, y + 1, z + zd)).IsSolid ? 1 : 0); var flag = world.GetBlock(new Vector3(x - xd, y, z - zd)).Id == block.Id || world.GetBlock(new Vector3(x - xd, y + 1, z - zd)).Id == block.Id; var flag1 = world.GetBlock(new Vector3(x + xd, y, z + zd)).Id == block.Id || world.GetBlock(new Vector3(x + xd, y + 1, z + zd)).Id == block.Id; var flag2 = false; if (flag && !flag1) { flag2 = true; } else if (j1 > i1) { flag2 = true; } var c2 = coordinates; c2.Y++; Block blockUpper = new Door(Id); blockUpper.Coordinates = c2; blockUpper.Metadata = (byte) (0x08 | (flag2 ? 1 : 0)); world.SetBlock(block); world.SetBlock(blockUpper); return true; }
public override void UseItem(Level world, Player player, Vector3 blockCoordinates, BlockFace face) { blockCoordinates = GetNewCoordinatesFromFace(blockCoordinates, face); if (face == BlockFace.PositiveY) { var bss = new BlockStandingSign { Coordinates = blockCoordinates, Metadata = 0x00 }; var rawbytes = new BitArray(new byte[] {bss.Metadata}); var direction = player.GetDirection(); switch (direction) { case 0: //South rawbytes[2] = true; break; case 1: //West rawbytes[3] = true; break; case 2: //North DONE rawbytes[2] = true; rawbytes[3] = true; break; case 3: //East break; } bss.Metadata = ConvertToByte(rawbytes); world.SetBlock(bss); new SignEditorOpen(player.Wrapper) { Coordinates = blockCoordinates }.Write(); } else { //TODO: implement wall signs } }
public override bool PlaceBlock(Level world, Player player, Vector3 blockCoordinates, BlockFace face, Vector3 mouseLocation) { byte direction = player.GetDirection(); byte upper = (byte)((mouseLocation.Y >= 8 && face != BlockFace.PositiveY) || face == BlockFace.NegativeY ? 0x04 : 0x00); switch (direction) { case 0: Metadata = (byte)(0 | upper); break; case 1: Metadata = (byte)(2 | upper); break; case 2: Metadata = (byte)(1 | upper); break; case 3: Metadata = (byte)(3 | upper); break; } world.SetBlock(this); return true; }