package net.minecraft.world.level.block.state.properties;

import java.util.function.Predicate;
import net.minecraft.core.BlockPropertyJigsawOrientation;
import net.minecraft.core.EnumDirection;

public class BlockProperties {

    public static final BlockStateBoolean ATTACHED = BlockStateBoolean.of("attached");
    public static final BlockStateBoolean BOTTOM = BlockStateBoolean.of("bottom");
    public static final BlockStateBoolean CONDITIONAL = BlockStateBoolean.of("conditional");
    public static final BlockStateBoolean DISARMED = BlockStateBoolean.of("disarmed");
    public static final BlockStateBoolean DRAG = BlockStateBoolean.of("drag");
    public static final BlockStateBoolean ENABLED = BlockStateBoolean.of("enabled");
    public static final BlockStateBoolean EXTENDED = BlockStateBoolean.of("extended");
    public static final BlockStateBoolean EYE = BlockStateBoolean.of("eye");
    public static final BlockStateBoolean FALLING = BlockStateBoolean.of("falling");
    public static final BlockStateBoolean HANGING = BlockStateBoolean.of("hanging");
    public static final BlockStateBoolean HAS_BOTTLE_0 = BlockStateBoolean.of("has_bottle_0");
    public static final BlockStateBoolean HAS_BOTTLE_1 = BlockStateBoolean.of("has_bottle_1");
    public static final BlockStateBoolean HAS_BOTTLE_2 = BlockStateBoolean.of("has_bottle_2");
    public static final BlockStateBoolean HAS_RECORD = BlockStateBoolean.of("has_record");
    public static final BlockStateBoolean HAS_BOOK = BlockStateBoolean.of("has_book");
    public static final BlockStateBoolean INVERTED = BlockStateBoolean.of("inverted");
    public static final BlockStateBoolean IN_WALL = BlockStateBoolean.of("in_wall");
    public static final BlockStateBoolean LIT = BlockStateBoolean.of("lit");
    public static final BlockStateBoolean LOCKED = BlockStateBoolean.of("locked");
    public static final BlockStateBoolean OCCUPIED = BlockStateBoolean.of("occupied");
    public static final BlockStateBoolean OPEN = BlockStateBoolean.of("open");
    public static final BlockStateBoolean PERSISTENT = BlockStateBoolean.of("persistent");
    public static final BlockStateBoolean POWERED = BlockStateBoolean.of("powered");
    public static final BlockStateBoolean SHORT = BlockStateBoolean.of("short");
    public static final BlockStateBoolean SIGNAL_FIRE = BlockStateBoolean.of("signal_fire");
    public static final BlockStateBoolean SNOWY = BlockStateBoolean.of("snowy");
    public static final BlockStateBoolean TRIGGERED = BlockStateBoolean.of("triggered");
    public static final BlockStateBoolean UNSTABLE = BlockStateBoolean.of("unstable");
    public static final BlockStateBoolean WATERLOGGED = BlockStateBoolean.of("waterlogged");
    public static final BlockStateBoolean VINE_END = BlockStateBoolean.of("vine_end");
    public static final BlockStateBoolean BERRIES = BlockStateBoolean.of("berries");
    public static final BlockStateEnum<EnumDirection.EnumAxis> HORIZONTAL_AXIS = BlockStateEnum.of("axis", EnumDirection.EnumAxis.class, EnumDirection.EnumAxis.X, EnumDirection.EnumAxis.Z);
    public static final BlockStateEnum<EnumDirection.EnumAxis> AXIS = BlockStateEnum.of("axis", EnumDirection.EnumAxis.class);
    public static final BlockStateBoolean UP = BlockStateBoolean.of("up");
    public static final BlockStateBoolean DOWN = BlockStateBoolean.of("down");
    public static final BlockStateBoolean NORTH = BlockStateBoolean.of("north");
    public static final BlockStateBoolean EAST = BlockStateBoolean.of("east");
    public static final BlockStateBoolean SOUTH = BlockStateBoolean.of("south");
    public static final BlockStateBoolean WEST = BlockStateBoolean.of("west");
    public static final BlockStateDirection FACING = BlockStateDirection.a("facing", EnumDirection.NORTH, EnumDirection.EAST, EnumDirection.SOUTH, EnumDirection.WEST, EnumDirection.UP, EnumDirection.DOWN);
    public static final BlockStateDirection FACING_HOPPER = BlockStateDirection.a("facing", (enumdirection) -> {
        return enumdirection != EnumDirection.UP;
    });
    public static final BlockStateDirection HORIZONTAL_FACING = BlockStateDirection.a("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL);
    public static final BlockStateEnum<BlockPropertyJigsawOrientation> ORIENTATION = BlockStateEnum.of("orientation", BlockPropertyJigsawOrientation.class);
    public static final BlockStateEnum<BlockPropertyAttachPosition> ATTACH_FACE = BlockStateEnum.of("face", BlockPropertyAttachPosition.class);
    public static final BlockStateEnum<BlockPropertyBellAttach> BELL_ATTACHMENT = BlockStateEnum.of("attachment", BlockPropertyBellAttach.class);
    public static final BlockStateEnum<BlockPropertyWallHeight> EAST_WALL = BlockStateEnum.of("east", BlockPropertyWallHeight.class);
    public static final BlockStateEnum<BlockPropertyWallHeight> NORTH_WALL = BlockStateEnum.of("north", BlockPropertyWallHeight.class);
    public static final BlockStateEnum<BlockPropertyWallHeight> SOUTH_WALL = BlockStateEnum.of("south", BlockPropertyWallHeight.class);
    public static final BlockStateEnum<BlockPropertyWallHeight> WEST_WALL = BlockStateEnum.of("west", BlockPropertyWallHeight.class);
    public static final BlockStateEnum<BlockPropertyRedstoneSide> EAST_REDSTONE = BlockStateEnum.of("east", BlockPropertyRedstoneSide.class);
    public static final BlockStateEnum<BlockPropertyRedstoneSide> NORTH_REDSTONE = BlockStateEnum.of("north", BlockPropertyRedstoneSide.class);
    public static final BlockStateEnum<BlockPropertyRedstoneSide> SOUTH_REDSTONE = BlockStateEnum.of("south", BlockPropertyRedstoneSide.class);
    public static final BlockStateEnum<BlockPropertyRedstoneSide> WEST_REDSTONE = BlockStateEnum.of("west", BlockPropertyRedstoneSide.class);
    public static final BlockStateEnum<BlockPropertyDoubleBlockHalf> DOUBLE_BLOCK_HALF = BlockStateEnum.of("half", BlockPropertyDoubleBlockHalf.class);
    public static final BlockStateEnum<BlockPropertyHalf> HALF = BlockStateEnum.of("half", BlockPropertyHalf.class);
    public static final BlockStateEnum<BlockPropertyTrackPosition> RAIL_SHAPE = BlockStateEnum.of("shape", BlockPropertyTrackPosition.class);
    public static final BlockStateEnum<BlockPropertyTrackPosition> RAIL_SHAPE_STRAIGHT = BlockStateEnum.a("shape", BlockPropertyTrackPosition.class, (blockpropertytrackposition) -> {
        return blockpropertytrackposition != BlockPropertyTrackPosition.NORTH_EAST && blockpropertytrackposition != BlockPropertyTrackPosition.NORTH_WEST && blockpropertytrackposition != BlockPropertyTrackPosition.SOUTH_EAST && blockpropertytrackposition != BlockPropertyTrackPosition.SOUTH_WEST;
    });
    public static final int MAX_AGE_1 = 1;
    public static final int MAX_AGE_2 = 2;
    public static final int MAX_AGE_3 = 3;
    public static final int MAX_AGE_5 = 5;
    public static final int MAX_AGE_7 = 7;
    public static final int MAX_AGE_15 = 15;
    public static final int MAX_AGE_25 = 25;
    public static final BlockStateInteger AGE_1 = BlockStateInteger.of("age", 0, 1);
    public static final BlockStateInteger AGE_2 = BlockStateInteger.of("age", 0, 2);
    public static final BlockStateInteger AGE_3 = BlockStateInteger.of("age", 0, 3);
    public static final BlockStateInteger AGE_5 = BlockStateInteger.of("age", 0, 5);
    public static final BlockStateInteger AGE_7 = BlockStateInteger.of("age", 0, 7);
    public static final BlockStateInteger AGE_15 = BlockStateInteger.of("age", 0, 15);
    public static final BlockStateInteger AGE_25 = BlockStateInteger.of("age", 0, 25);
    public static final BlockStateInteger BITES = BlockStateInteger.of("bites", 0, 6);
    public static final BlockStateInteger CANDLES = BlockStateInteger.of("candles", 1, 4);
    public static final BlockStateInteger DELAY = BlockStateInteger.of("delay", 1, 4);
    public static final int MAX_DISTANCE = 7;
    public static final BlockStateInteger DISTANCE = BlockStateInteger.of("distance", 1, 7);
    public static final BlockStateInteger EGGS = BlockStateInteger.of("eggs", 1, 4);
    public static final BlockStateInteger HATCH = BlockStateInteger.of("hatch", 0, 2);
    public static final BlockStateInteger LAYERS = BlockStateInteger.of("layers", 1, 8);
    public static final int MIN_LEVEL = 0;
    public static final int MIN_LEVEL_CAULDRON = 1;
    public static final int MAX_LEVEL_3 = 3;
    public static final int MAX_LEVEL_8 = 8;
    public static final BlockStateInteger LEVEL_CAULDRON = BlockStateInteger.of("level", 1, 3);
    public static final BlockStateInteger LEVEL_COMPOSTER = BlockStateInteger.of("level", 0, 8);
    public static final BlockStateInteger LEVEL_FLOWING = BlockStateInteger.of("level", 1, 8);
    public static final BlockStateInteger LEVEL_HONEY = BlockStateInteger.of("honey_level", 0, 5);
    public static final int MAX_LEVEL_15 = 15;
    public static final BlockStateInteger LEVEL = BlockStateInteger.of("level", 0, 15);
    public static final BlockStateInteger MOISTURE = BlockStateInteger.of("moisture", 0, 7);
    public static final BlockStateInteger NOTE = BlockStateInteger.of("note", 0, 24);
    public static final BlockStateInteger PICKLES = BlockStateInteger.of("pickles", 1, 4);
    public static final BlockStateInteger POWER = BlockStateInteger.of("power", 0, 15);
    public static final BlockStateInteger STAGE = BlockStateInteger.of("stage", 0, 1);
    public static final int STABILITY_MAX_DISTANCE = 7;
    public static final BlockStateInteger STABILITY_DISTANCE = BlockStateInteger.of("distance", 0, 7);
    public static final int MIN_RESPAWN_ANCHOR_CHARGES = 0;
    public static final int MAX_RESPAWN_ANCHOR_CHARGES = 4;
    public static final BlockStateInteger RESPAWN_ANCHOR_CHARGES = BlockStateInteger.of("charges", 0, 4);
    public static final int MAX_ROTATIONS_16 = 15;
    public static final BlockStateInteger ROTATION_16 = BlockStateInteger.of("rotation", 0, 15);
    public static final BlockStateEnum<BlockPropertyBedPart> BED_PART = BlockStateEnum.of("part", BlockPropertyBedPart.class);
    public static final BlockStateEnum<BlockPropertyChestType> CHEST_TYPE = BlockStateEnum.of("type", BlockPropertyChestType.class);
    public static final BlockStateEnum<BlockPropertyComparatorMode> MODE_COMPARATOR = BlockStateEnum.of("mode", BlockPropertyComparatorMode.class);
    public static final BlockStateEnum<BlockPropertyDoorHinge> DOOR_HINGE = BlockStateEnum.of("hinge", BlockPropertyDoorHinge.class);
    public static final BlockStateEnum<BlockPropertyInstrument> NOTEBLOCK_INSTRUMENT = BlockStateEnum.of("instrument", BlockPropertyInstrument.class);
    public static final BlockStateEnum<BlockPropertyPistonType> PISTON_TYPE = BlockStateEnum.of("type", BlockPropertyPistonType.class);
    public static final BlockStateEnum<BlockPropertySlabType> SLAB_TYPE = BlockStateEnum.of("type", BlockPropertySlabType.class);
    public static final BlockStateEnum<BlockPropertyStairsShape> STAIRS_SHAPE = BlockStateEnum.of("shape", BlockPropertyStairsShape.class);
    public static final BlockStateEnum<BlockPropertyStructureMode> STRUCTUREBLOCK_MODE = BlockStateEnum.of("mode", BlockPropertyStructureMode.class);
    public static final BlockStateEnum<BlockPropertyBambooSize> BAMBOO_LEAVES = BlockStateEnum.of("leaves", BlockPropertyBambooSize.class);
    public static final BlockStateEnum<Tilt> TILT = BlockStateEnum.of("tilt", Tilt.class);
    public static final BlockStateDirection VERTICAL_DIRECTION = BlockStateDirection.a("vertical_direction", EnumDirection.UP, EnumDirection.DOWN);
    public static final BlockStateEnum<DripstoneThickness> DRIPSTONE_THICKNESS = BlockStateEnum.of("thickness", DripstoneThickness.class);
    public static final BlockStateEnum<SculkSensorPhase> SCULK_SENSOR_PHASE = BlockStateEnum.of("sculk_sensor_phase", SculkSensorPhase.class);

    public BlockProperties() {}
}
