Пример #1
0
        public override void UseItem(Level world, Player player, BlockCoordinates blockCoordinates, BlockFace face, Vector3 faceCoords)
        {
            byte direction = player.GetDirection();

            var coordinates = GetNewCoordinatesFromFace(blockCoordinates, face);

            // Base block, meta sets orientation

            Bed block = new Bed
            {
                Coordinates = coordinates
            };

            switch (direction)
            {
            case 1:
                block.Metadata = 0;
                break;                         // West

            case 2:
                block.Metadata = 1;
                break;                         // North

            case 3:
                block.Metadata = 2;
                break;                         // East

            case 0:
                block.Metadata = 3;
                break;                         // South
            }

            if (!block.CanPlace(world, blockCoordinates, face))
            {
                return;
            }

            BlockFace lowerFace = BlockFace.None;

            switch (block.Metadata)
            {
            case 0:
                lowerFace = (BlockFace)3;
                break;                         // West

            case 1:
                lowerFace = (BlockFace)4;
                break;                         // North

            case 2:
                lowerFace = (BlockFace)2;
                break;                         // East

            case 3:
                lowerFace = (BlockFace)5;
                break;                         // South
            }

            Bed blockUpper = new Bed
            {
                Coordinates = GetNewCoordinatesFromFace(coordinates, lowerFace),
                Metadata    = (byte)(block.Metadata | 0x08)
            };

            if (!blockUpper.CanPlace(world, blockCoordinates, face))
            {
                return;
            }

            //TODO: Check down from both blocks, must be solids

            world.SetBlock(block);
            world.SetBlockEntity(new BedBlockEntity
            {
                Coordinates = block.Coordinates,
                Color       = (byte)Metadata
            });

            world.SetBlock(blockUpper);
            world.SetBlockEntity(new BedBlockEntity
            {
                Coordinates = blockUpper.Coordinates,
                Color       = (byte)Metadata
            });
        }