package net.minecraft.world.level.block;

import com.google.common.collect.UnmodifiableIterator;
import java.util.Iterator;
import net.minecraft.world.level.block.state.properties.WoodType;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.level.block.piston.MovingPistonBlock;
import net.minecraft.world.level.block.piston.PistonHeadBlock;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.level.block.grower.DarkOakTreeGrower;
import net.minecraft.world.level.block.grower.AcaciaTreeGrower;
import net.minecraft.world.level.block.grower.JungleTreeGrower;
import net.minecraft.world.level.block.grower.BirchTreeGrower;
import net.minecraft.world.level.block.grower.SpruceTreeGrower;
import net.minecraft.world.level.block.grower.AbstractTreeGrower;
import net.minecraft.world.level.block.grower.OakTreeGrower;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.levelgen.feature.HugeFungusConfiguration;
import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.core.Registry;
import net.minecraft.world.level.block.piston.PistonBaseBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.level.block.state.properties.BedPart;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.entity.EntityType;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.state.properties.Property;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.BlockState;
import java.util.function.ToIntFunction;

public class Blocks {
    public static final Block AIR;
    public static final Block STONE;
    public static final Block GRANITE;
    public static final Block POLISHED_GRANITE;
    public static final Block DIORITE;
    public static final Block POLISHED_DIORITE;
    public static final Block ANDESITE;
    public static final Block POLISHED_ANDESITE;
    public static final Block GRASS_BLOCK;
    public static final Block DIRT;
    public static final Block COARSE_DIRT;
    public static final Block PODZOL;
    public static final Block COBBLESTONE;
    public static final Block OAK_PLANKS;
    public static final Block SPRUCE_PLANKS;
    public static final Block BIRCH_PLANKS;
    public static final Block JUNGLE_PLANKS;
    public static final Block ACACIA_PLANKS;
    public static final Block DARK_OAK_PLANKS;
    public static final Block OAK_SAPLING;
    public static final Block SPRUCE_SAPLING;
    public static final Block BIRCH_SAPLING;
    public static final Block JUNGLE_SAPLING;
    public static final Block ACACIA_SAPLING;
    public static final Block DARK_OAK_SAPLING;
    public static final Block BEDROCK;
    public static final Block WATER;
    public static final Block LAVA;
    public static final Block SAND;
    public static final Block RED_SAND;
    public static final Block GRAVEL;
    public static final Block GOLD_ORE;
    public static final Block IRON_ORE;
    public static final Block COAL_ORE;
    public static final Block NETHER_GOLD_ORE;
    public static final Block OAK_LOG;
    public static final Block SPRUCE_LOG;
    public static final Block BIRCH_LOG;
    public static final Block JUNGLE_LOG;
    public static final Block ACACIA_LOG;
    public static final Block DARK_OAK_LOG;
    public static final Block STRIPPED_SPRUCE_LOG;
    public static final Block STRIPPED_BIRCH_LOG;
    public static final Block STRIPPED_JUNGLE_LOG;
    public static final Block STRIPPED_ACACIA_LOG;
    public static final Block STRIPPED_DARK_OAK_LOG;
    public static final Block STRIPPED_OAK_LOG;
    public static final Block OAK_WOOD;
    public static final Block SPRUCE_WOOD;
    public static final Block BIRCH_WOOD;
    public static final Block JUNGLE_WOOD;
    public static final Block ACACIA_WOOD;
    public static final Block DARK_OAK_WOOD;
    public static final Block STRIPPED_OAK_WOOD;
    public static final Block STRIPPED_SPRUCE_WOOD;
    public static final Block STRIPPED_BIRCH_WOOD;
    public static final Block STRIPPED_JUNGLE_WOOD;
    public static final Block STRIPPED_ACACIA_WOOD;
    public static final Block STRIPPED_DARK_OAK_WOOD;
    public static final Block OAK_LEAVES;
    public static final Block SPRUCE_LEAVES;
    public static final Block BIRCH_LEAVES;
    public static final Block JUNGLE_LEAVES;
    public static final Block ACACIA_LEAVES;
    public static final Block DARK_OAK_LEAVES;
    public static final Block SPONGE;
    public static final Block WET_SPONGE;
    public static final Block GLASS;
    public static final Block LAPIS_ORE;
    public static final Block LAPIS_BLOCK;
    public static final Block DISPENSER;
    public static final Block SANDSTONE;
    public static final Block CHISELED_SANDSTONE;
    public static final Block CUT_SANDSTONE;
    public static final Block NOTE_BLOCK;
    public static final Block WHITE_BED;
    public static final Block ORANGE_BED;
    public static final Block MAGENTA_BED;
    public static final Block LIGHT_BLUE_BED;
    public static final Block YELLOW_BED;
    public static final Block LIME_BED;
    public static final Block PINK_BED;
    public static final Block GRAY_BED;
    public static final Block LIGHT_GRAY_BED;
    public static final Block CYAN_BED;
    public static final Block PURPLE_BED;
    public static final Block BLUE_BED;
    public static final Block BROWN_BED;
    public static final Block GREEN_BED;
    public static final Block RED_BED;
    public static final Block BLACK_BED;
    public static final Block POWERED_RAIL;
    public static final Block DETECTOR_RAIL;
    public static final Block STICKY_PISTON;
    public static final Block COBWEB;
    public static final Block GRASS;
    public static final Block FERN;
    public static final Block DEAD_BUSH;
    public static final Block SEAGRASS;
    public static final Block TALL_SEAGRASS;
    public static final Block PISTON;
    public static final Block PISTON_HEAD;
    public static final Block WHITE_WOOL;
    public static final Block ORANGE_WOOL;
    public static final Block MAGENTA_WOOL;
    public static final Block LIGHT_BLUE_WOOL;
    public static final Block YELLOW_WOOL;
    public static final Block LIME_WOOL;
    public static final Block PINK_WOOL;
    public static final Block GRAY_WOOL;
    public static final Block LIGHT_GRAY_WOOL;
    public static final Block CYAN_WOOL;
    public static final Block PURPLE_WOOL;
    public static final Block BLUE_WOOL;
    public static final Block BROWN_WOOL;
    public static final Block GREEN_WOOL;
    public static final Block RED_WOOL;
    public static final Block BLACK_WOOL;
    public static final Block MOVING_PISTON;
    public static final Block DANDELION;
    public static final Block POPPY;
    public static final Block BLUE_ORCHID;
    public static final Block ALLIUM;
    public static final Block AZURE_BLUET;
    public static final Block RED_TULIP;
    public static final Block ORANGE_TULIP;
    public static final Block WHITE_TULIP;
    public static final Block PINK_TULIP;
    public static final Block OXEYE_DAISY;
    public static final Block CORNFLOWER;
    public static final Block WITHER_ROSE;
    public static final Block LILY_OF_THE_VALLEY;
    public static final Block BROWN_MUSHROOM;
    public static final Block RED_MUSHROOM;
    public static final Block GOLD_BLOCK;
    public static final Block IRON_BLOCK;
    public static final Block BRICKS;
    public static final Block TNT;
    public static final Block BOOKSHELF;
    public static final Block MOSSY_COBBLESTONE;
    public static final Block OBSIDIAN;
    public static final Block TORCH;
    public static final Block WALL_TORCH;
    public static final Block FIRE;
    public static final Block SOUL_FIRE;
    public static final Block SPAWNER;
    public static final Block OAK_STAIRS;
    public static final Block CHEST;
    public static final Block REDSTONE_WIRE;
    public static final Block DIAMOND_ORE;
    public static final Block DIAMOND_BLOCK;
    public static final Block CRAFTING_TABLE;
    public static final Block WHEAT;
    public static final Block FARMLAND;
    public static final Block FURNACE;
    public static final Block OAK_SIGN;
    public static final Block SPRUCE_SIGN;
    public static final Block BIRCH_SIGN;
    public static final Block ACACIA_SIGN;
    public static final Block JUNGLE_SIGN;
    public static final Block DARK_OAK_SIGN;
    public static final Block OAK_DOOR;
    public static final Block LADDER;
    public static final Block RAIL;
    public static final Block COBBLESTONE_STAIRS;
    public static final Block OAK_WALL_SIGN;
    public static final Block SPRUCE_WALL_SIGN;
    public static final Block BIRCH_WALL_SIGN;
    public static final Block ACACIA_WALL_SIGN;
    public static final Block JUNGLE_WALL_SIGN;
    public static final Block DARK_OAK_WALL_SIGN;
    public static final Block LEVER;
    public static final Block STONE_PRESSURE_PLATE;
    public static final Block IRON_DOOR;
    public static final Block OAK_PRESSURE_PLATE;
    public static final Block SPRUCE_PRESSURE_PLATE;
    public static final Block BIRCH_PRESSURE_PLATE;
    public static final Block JUNGLE_PRESSURE_PLATE;
    public static final Block ACACIA_PRESSURE_PLATE;
    public static final Block DARK_OAK_PRESSURE_PLATE;
    public static final Block REDSTONE_ORE;
    public static final Block REDSTONE_TORCH;
    public static final Block REDSTONE_WALL_TORCH;
    public static final Block STONE_BUTTON;
    public static final Block SNOW;
    public static final Block ICE;
    public static final Block SNOW_BLOCK;
    public static final Block CACTUS;
    public static final Block CLAY;
    public static final Block SUGAR_CANE;
    public static final Block JUKEBOX;
    public static final Block OAK_FENCE;
    public static final Block PUMPKIN;
    public static final Block NETHERRACK;
    public static final Block SOUL_SAND;
    public static final Block SOUL_SOIL;
    public static final Block BASALT;
    public static final Block POLISHED_BASALT;
    public static final Block SOUL_TORCH;
    public static final Block SOUL_WALL_TORCH;
    public static final Block GLOWSTONE;
    public static final Block NETHER_PORTAL;
    public static final Block CARVED_PUMPKIN;
    public static final Block JACK_O_LANTERN;
    public static final Block CAKE;
    public static final Block REPEATER;
    public static final Block WHITE_STAINED_GLASS;
    public static final Block ORANGE_STAINED_GLASS;
    public static final Block MAGENTA_STAINED_GLASS;
    public static final Block LIGHT_BLUE_STAINED_GLASS;
    public static final Block YELLOW_STAINED_GLASS;
    public static final Block LIME_STAINED_GLASS;
    public static final Block PINK_STAINED_GLASS;
    public static final Block GRAY_STAINED_GLASS;
    public static final Block LIGHT_GRAY_STAINED_GLASS;
    public static final Block CYAN_STAINED_GLASS;
    public static final Block PURPLE_STAINED_GLASS;
    public static final Block BLUE_STAINED_GLASS;
    public static final Block BROWN_STAINED_GLASS;
    public static final Block GREEN_STAINED_GLASS;
    public static final Block RED_STAINED_GLASS;
    public static final Block BLACK_STAINED_GLASS;
    public static final Block OAK_TRAPDOOR;
    public static final Block SPRUCE_TRAPDOOR;
    public static final Block BIRCH_TRAPDOOR;
    public static final Block JUNGLE_TRAPDOOR;
    public static final Block ACACIA_TRAPDOOR;
    public static final Block DARK_OAK_TRAPDOOR;
    public static final Block STONE_BRICKS;
    public static final Block MOSSY_STONE_BRICKS;
    public static final Block CRACKED_STONE_BRICKS;
    public static final Block CHISELED_STONE_BRICKS;
    public static final Block INFESTED_STONE;
    public static final Block INFESTED_COBBLESTONE;
    public static final Block INFESTED_STONE_BRICKS;
    public static final Block INFESTED_MOSSY_STONE_BRICKS;
    public static final Block INFESTED_CRACKED_STONE_BRICKS;
    public static final Block INFESTED_CHISELED_STONE_BRICKS;
    public static final Block BROWN_MUSHROOM_BLOCK;
    public static final Block RED_MUSHROOM_BLOCK;
    public static final Block MUSHROOM_STEM;
    public static final Block IRON_BARS;
    public static final Block CHAIN;
    public static final Block GLASS_PANE;
    public static final Block MELON;
    public static final Block ATTACHED_PUMPKIN_STEM;
    public static final Block ATTACHED_MELON_STEM;
    public static final Block PUMPKIN_STEM;
    public static final Block MELON_STEM;
    public static final Block VINE;
    public static final Block OAK_FENCE_GATE;
    public static final Block BRICK_STAIRS;
    public static final Block STONE_BRICK_STAIRS;
    public static final Block MYCELIUM;
    public static final Block LILY_PAD;
    public static final Block NETHER_BRICKS;
    public static final Block NETHER_BRICK_FENCE;
    public static final Block NETHER_BRICK_STAIRS;
    public static final Block NETHER_WART;
    public static final Block ENCHANTING_TABLE;
    public static final Block BREWING_STAND;
    public static final Block CAULDRON;
    public static final Block END_PORTAL;
    public static final Block END_PORTAL_FRAME;
    public static final Block END_STONE;
    public static final Block DRAGON_EGG;
    public static final Block REDSTONE_LAMP;
    public static final Block COCOA;
    public static final Block SANDSTONE_STAIRS;
    public static final Block EMERALD_ORE;
    public static final Block ENDER_CHEST;
    public static final Block TRIPWIRE_HOOK;
    public static final Block TRIPWIRE;
    public static final Block EMERALD_BLOCK;
    public static final Block SPRUCE_STAIRS;
    public static final Block BIRCH_STAIRS;
    public static final Block JUNGLE_STAIRS;
    public static final Block COMMAND_BLOCK;
    public static final Block BEACON;
    public static final Block COBBLESTONE_WALL;
    public static final Block MOSSY_COBBLESTONE_WALL;
    public static final Block FLOWER_POT;
    public static final Block POTTED_OAK_SAPLING;
    public static final Block POTTED_SPRUCE_SAPLING;
    public static final Block POTTED_BIRCH_SAPLING;
    public static final Block POTTED_JUNGLE_SAPLING;
    public static final Block POTTED_ACACIA_SAPLING;
    public static final Block POTTED_DARK_OAK_SAPLING;
    public static final Block POTTED_FERN;
    public static final Block POTTED_DANDELION;
    public static final Block POTTED_POPPY;
    public static final Block POTTED_BLUE_ORCHID;
    public static final Block POTTED_ALLIUM;
    public static final Block POTTED_AZURE_BLUET;
    public static final Block POTTED_RED_TULIP;
    public static final Block POTTED_ORANGE_TULIP;
    public static final Block POTTED_WHITE_TULIP;
    public static final Block POTTED_PINK_TULIP;
    public static final Block POTTED_OXEYE_DAISY;
    public static final Block POTTED_CORNFLOWER;
    public static final Block POTTED_LILY_OF_THE_VALLEY;
    public static final Block POTTED_WITHER_ROSE;
    public static final Block POTTED_RED_MUSHROOM;
    public static final Block POTTED_BROWN_MUSHROOM;
    public static final Block POTTED_DEAD_BUSH;
    public static final Block POTTED_CACTUS;
    public static final Block CARROTS;
    public static final Block POTATOES;
    public static final Block OAK_BUTTON;
    public static final Block SPRUCE_BUTTON;
    public static final Block BIRCH_BUTTON;
    public static final Block JUNGLE_BUTTON;
    public static final Block ACACIA_BUTTON;
    public static final Block DARK_OAK_BUTTON;
    public static final Block SKELETON_SKULL;
    public static final Block SKELETON_WALL_SKULL;
    public static final Block WITHER_SKELETON_SKULL;
    public static final Block WITHER_SKELETON_WALL_SKULL;
    public static final Block ZOMBIE_HEAD;
    public static final Block ZOMBIE_WALL_HEAD;
    public static final Block PLAYER_HEAD;
    public static final Block PLAYER_WALL_HEAD;
    public static final Block CREEPER_HEAD;
    public static final Block CREEPER_WALL_HEAD;
    public static final Block DRAGON_HEAD;
    public static final Block DRAGON_WALL_HEAD;
    public static final Block ANVIL;
    public static final Block CHIPPED_ANVIL;
    public static final Block DAMAGED_ANVIL;
    public static final Block TRAPPED_CHEST;
    public static final Block LIGHT_WEIGHTED_PRESSURE_PLATE;
    public static final Block HEAVY_WEIGHTED_PRESSURE_PLATE;
    public static final Block COMPARATOR;
    public static final Block DAYLIGHT_DETECTOR;
    public static final Block REDSTONE_BLOCK;
    public static final Block NETHER_QUARTZ_ORE;
    public static final Block HOPPER;
    public static final Block QUARTZ_BLOCK;
    public static final Block CHISELED_QUARTZ_BLOCK;
    public static final Block QUARTZ_PILLAR;
    public static final Block QUARTZ_STAIRS;
    public static final Block ACTIVATOR_RAIL;
    public static final Block DROPPER;
    public static final Block WHITE_TERRACOTTA;
    public static final Block ORANGE_TERRACOTTA;
    public static final Block MAGENTA_TERRACOTTA;
    public static final Block LIGHT_BLUE_TERRACOTTA;
    public static final Block YELLOW_TERRACOTTA;
    public static final Block LIME_TERRACOTTA;
    public static final Block PINK_TERRACOTTA;
    public static final Block GRAY_TERRACOTTA;
    public static final Block LIGHT_GRAY_TERRACOTTA;
    public static final Block CYAN_TERRACOTTA;
    public static final Block PURPLE_TERRACOTTA;
    public static final Block BLUE_TERRACOTTA;
    public static final Block BROWN_TERRACOTTA;
    public static final Block GREEN_TERRACOTTA;
    public static final Block RED_TERRACOTTA;
    public static final Block BLACK_TERRACOTTA;
    public static final Block WHITE_STAINED_GLASS_PANE;
    public static final Block ORANGE_STAINED_GLASS_PANE;
    public static final Block MAGENTA_STAINED_GLASS_PANE;
    public static final Block LIGHT_BLUE_STAINED_GLASS_PANE;
    public static final Block YELLOW_STAINED_GLASS_PANE;
    public static final Block LIME_STAINED_GLASS_PANE;
    public static final Block PINK_STAINED_GLASS_PANE;
    public static final Block GRAY_STAINED_GLASS_PANE;
    public static final Block LIGHT_GRAY_STAINED_GLASS_PANE;
    public static final Block CYAN_STAINED_GLASS_PANE;
    public static final Block PURPLE_STAINED_GLASS_PANE;
    public static final Block BLUE_STAINED_GLASS_PANE;
    public static final Block BROWN_STAINED_GLASS_PANE;
    public static final Block GREEN_STAINED_GLASS_PANE;
    public static final Block RED_STAINED_GLASS_PANE;
    public static final Block BLACK_STAINED_GLASS_PANE;
    public static final Block ACACIA_STAIRS;
    public static final Block DARK_OAK_STAIRS;
    public static final Block SLIME_BLOCK;
    public static final Block BARRIER;
    public static final Block IRON_TRAPDOOR;
    public static final Block PRISMARINE;
    public static final Block PRISMARINE_BRICKS;
    public static final Block DARK_PRISMARINE;
    public static final Block PRISMARINE_STAIRS;
    public static final Block PRISMARINE_BRICK_STAIRS;
    public static final Block DARK_PRISMARINE_STAIRS;
    public static final Block PRISMARINE_SLAB;
    public static final Block PRISMARINE_BRICK_SLAB;
    public static final Block DARK_PRISMARINE_SLAB;
    public static final Block SEA_LANTERN;
    public static final Block HAY_BLOCK;
    public static final Block WHITE_CARPET;
    public static final Block ORANGE_CARPET;
    public static final Block MAGENTA_CARPET;
    public static final Block LIGHT_BLUE_CARPET;
    public static final Block YELLOW_CARPET;
    public static final Block LIME_CARPET;
    public static final Block PINK_CARPET;
    public static final Block GRAY_CARPET;
    public static final Block LIGHT_GRAY_CARPET;
    public static final Block CYAN_CARPET;
    public static final Block PURPLE_CARPET;
    public static final Block BLUE_CARPET;
    public static final Block BROWN_CARPET;
    public static final Block GREEN_CARPET;
    public static final Block RED_CARPET;
    public static final Block BLACK_CARPET;
    public static final Block TERRACOTTA;
    public static final Block COAL_BLOCK;
    public static final Block PACKED_ICE;
    public static final Block SUNFLOWER;
    public static final Block LILAC;
    public static final Block ROSE_BUSH;
    public static final Block PEONY;
    public static final Block TALL_GRASS;
    public static final Block LARGE_FERN;
    public static final Block WHITE_BANNER;
    public static final Block ORANGE_BANNER;
    public static final Block MAGENTA_BANNER;
    public static final Block LIGHT_BLUE_BANNER;
    public static final Block YELLOW_BANNER;
    public static final Block LIME_BANNER;
    public static final Block PINK_BANNER;
    public static final Block GRAY_BANNER;
    public static final Block LIGHT_GRAY_BANNER;
    public static final Block CYAN_BANNER;
    public static final Block PURPLE_BANNER;
    public static final Block BLUE_BANNER;
    public static final Block BROWN_BANNER;
    public static final Block GREEN_BANNER;
    public static final Block RED_BANNER;
    public static final Block BLACK_BANNER;
    public static final Block WHITE_WALL_BANNER;
    public static final Block ORANGE_WALL_BANNER;
    public static final Block MAGENTA_WALL_BANNER;
    public static final Block LIGHT_BLUE_WALL_BANNER;
    public static final Block YELLOW_WALL_BANNER;
    public static final Block LIME_WALL_BANNER;
    public static final Block PINK_WALL_BANNER;
    public static final Block GRAY_WALL_BANNER;
    public static final Block LIGHT_GRAY_WALL_BANNER;
    public static final Block CYAN_WALL_BANNER;
    public static final Block PURPLE_WALL_BANNER;
    public static final Block BLUE_WALL_BANNER;
    public static final Block BROWN_WALL_BANNER;
    public static final Block GREEN_WALL_BANNER;
    public static final Block RED_WALL_BANNER;
    public static final Block BLACK_WALL_BANNER;
    public static final Block RED_SANDSTONE;
    public static final Block CHISELED_RED_SANDSTONE;
    public static final Block CUT_RED_SANDSTONE;
    public static final Block RED_SANDSTONE_STAIRS;
    public static final Block OAK_SLAB;
    public static final Block SPRUCE_SLAB;
    public static final Block BIRCH_SLAB;
    public static final Block JUNGLE_SLAB;
    public static final Block ACACIA_SLAB;
    public static final Block DARK_OAK_SLAB;
    public static final Block STONE_SLAB;
    public static final Block SMOOTH_STONE_SLAB;
    public static final Block SANDSTONE_SLAB;
    public static final Block CUT_SANDSTONE_SLAB;
    public static final Block PETRIFIED_OAK_SLAB;
    public static final Block COBBLESTONE_SLAB;
    public static final Block BRICK_SLAB;
    public static final Block STONE_BRICK_SLAB;
    public static final Block NETHER_BRICK_SLAB;
    public static final Block QUARTZ_SLAB;
    public static final Block RED_SANDSTONE_SLAB;
    public static final Block CUT_RED_SANDSTONE_SLAB;
    public static final Block PURPUR_SLAB;
    public static final Block SMOOTH_STONE;
    public static final Block SMOOTH_SANDSTONE;
    public static final Block SMOOTH_QUARTZ;
    public static final Block SMOOTH_RED_SANDSTONE;
    public static final Block SPRUCE_FENCE_GATE;
    public static final Block BIRCH_FENCE_GATE;
    public static final Block JUNGLE_FENCE_GATE;
    public static final Block ACACIA_FENCE_GATE;
    public static final Block DARK_OAK_FENCE_GATE;
    public static final Block SPRUCE_FENCE;
    public static final Block BIRCH_FENCE;
    public static final Block JUNGLE_FENCE;
    public static final Block ACACIA_FENCE;
    public static final Block DARK_OAK_FENCE;
    public static final Block SPRUCE_DOOR;
    public static final Block BIRCH_DOOR;
    public static final Block JUNGLE_DOOR;
    public static final Block ACACIA_DOOR;
    public static final Block DARK_OAK_DOOR;
    public static final Block END_ROD;
    public static final Block CHORUS_PLANT;
    public static final Block CHORUS_FLOWER;
    public static final Block PURPUR_BLOCK;
    public static final Block PURPUR_PILLAR;
    public static final Block PURPUR_STAIRS;
    public static final Block END_STONE_BRICKS;
    public static final Block BEETROOTS;
    public static final Block GRASS_PATH;
    public static final Block END_GATEWAY;
    public static final Block REPEATING_COMMAND_BLOCK;
    public static final Block CHAIN_COMMAND_BLOCK;
    public static final Block FROSTED_ICE;
    public static final Block MAGMA_BLOCK;
    public static final Block NETHER_WART_BLOCK;
    public static final Block RED_NETHER_BRICKS;
    public static final Block BONE_BLOCK;
    public static final Block STRUCTURE_VOID;
    public static final Block OBSERVER;
    public static final Block SHULKER_BOX;
    public static final Block WHITE_SHULKER_BOX;
    public static final Block ORANGE_SHULKER_BOX;
    public static final Block MAGENTA_SHULKER_BOX;
    public static final Block LIGHT_BLUE_SHULKER_BOX;
    public static final Block YELLOW_SHULKER_BOX;
    public static final Block LIME_SHULKER_BOX;
    public static final Block PINK_SHULKER_BOX;
    public static final Block GRAY_SHULKER_BOX;
    public static final Block LIGHT_GRAY_SHULKER_BOX;
    public static final Block CYAN_SHULKER_BOX;
    public static final Block PURPLE_SHULKER_BOX;
    public static final Block BLUE_SHULKER_BOX;
    public static final Block BROWN_SHULKER_BOX;
    public static final Block GREEN_SHULKER_BOX;
    public static final Block RED_SHULKER_BOX;
    public static final Block BLACK_SHULKER_BOX;
    public static final Block WHITE_GLAZED_TERRACOTTA;
    public static final Block ORANGE_GLAZED_TERRACOTTA;
    public static final Block MAGENTA_GLAZED_TERRACOTTA;
    public static final Block LIGHT_BLUE_GLAZED_TERRACOTTA;
    public static final Block YELLOW_GLAZED_TERRACOTTA;
    public static final Block LIME_GLAZED_TERRACOTTA;
    public static final Block PINK_GLAZED_TERRACOTTA;
    public static final Block GRAY_GLAZED_TERRACOTTA;
    public static final Block LIGHT_GRAY_GLAZED_TERRACOTTA;
    public static final Block CYAN_GLAZED_TERRACOTTA;
    public static final Block PURPLE_GLAZED_TERRACOTTA;
    public static final Block BLUE_GLAZED_TERRACOTTA;
    public static final Block BROWN_GLAZED_TERRACOTTA;
    public static final Block GREEN_GLAZED_TERRACOTTA;
    public static final Block RED_GLAZED_TERRACOTTA;
    public static final Block BLACK_GLAZED_TERRACOTTA;
    public static final Block WHITE_CONCRETE;
    public static final Block ORANGE_CONCRETE;
    public static final Block MAGENTA_CONCRETE;
    public static final Block LIGHT_BLUE_CONCRETE;
    public static final Block YELLOW_CONCRETE;
    public static final Block LIME_CONCRETE;
    public static final Block PINK_CONCRETE;
    public static final Block GRAY_CONCRETE;
    public static final Block LIGHT_GRAY_CONCRETE;
    public static final Block CYAN_CONCRETE;
    public static final Block PURPLE_CONCRETE;
    public static final Block BLUE_CONCRETE;
    public static final Block BROWN_CONCRETE;
    public static final Block GREEN_CONCRETE;
    public static final Block RED_CONCRETE;
    public static final Block BLACK_CONCRETE;
    public static final Block WHITE_CONCRETE_POWDER;
    public static final Block ORANGE_CONCRETE_POWDER;
    public static final Block MAGENTA_CONCRETE_POWDER;
    public static final Block LIGHT_BLUE_CONCRETE_POWDER;
    public static final Block YELLOW_CONCRETE_POWDER;
    public static final Block LIME_CONCRETE_POWDER;
    public static final Block PINK_CONCRETE_POWDER;
    public static final Block GRAY_CONCRETE_POWDER;
    public static final Block LIGHT_GRAY_CONCRETE_POWDER;
    public static final Block CYAN_CONCRETE_POWDER;
    public static final Block PURPLE_CONCRETE_POWDER;
    public static final Block BLUE_CONCRETE_POWDER;
    public static final Block BROWN_CONCRETE_POWDER;
    public static final Block GREEN_CONCRETE_POWDER;
    public static final Block RED_CONCRETE_POWDER;
    public static final Block BLACK_CONCRETE_POWDER;
    public static final Block KELP;
    public static final Block KELP_PLANT;
    public static final Block DRIED_KELP_BLOCK;
    public static final Block TURTLE_EGG;
    public static final Block DEAD_TUBE_CORAL_BLOCK;
    public static final Block DEAD_BRAIN_CORAL_BLOCK;
    public static final Block DEAD_BUBBLE_CORAL_BLOCK;
    public static final Block DEAD_FIRE_CORAL_BLOCK;
    public static final Block DEAD_HORN_CORAL_BLOCK;
    public static final Block TUBE_CORAL_BLOCK;
    public static final Block BRAIN_CORAL_BLOCK;
    public static final Block BUBBLE_CORAL_BLOCK;
    public static final Block FIRE_CORAL_BLOCK;
    public static final Block HORN_CORAL_BLOCK;
    public static final Block DEAD_TUBE_CORAL;
    public static final Block DEAD_BRAIN_CORAL;
    public static final Block DEAD_BUBBLE_CORAL;
    public static final Block DEAD_FIRE_CORAL;
    public static final Block DEAD_HORN_CORAL;
    public static final Block TUBE_CORAL;
    public static final Block BRAIN_CORAL;
    public static final Block BUBBLE_CORAL;
    public static final Block FIRE_CORAL;
    public static final Block HORN_CORAL;
    public static final Block DEAD_TUBE_CORAL_FAN;
    public static final Block DEAD_BRAIN_CORAL_FAN;
    public static final Block DEAD_BUBBLE_CORAL_FAN;
    public static final Block DEAD_FIRE_CORAL_FAN;
    public static final Block DEAD_HORN_CORAL_FAN;
    public static final Block TUBE_CORAL_FAN;
    public static final Block BRAIN_CORAL_FAN;
    public static final Block BUBBLE_CORAL_FAN;
    public static final Block FIRE_CORAL_FAN;
    public static final Block HORN_CORAL_FAN;
    public static final Block DEAD_TUBE_CORAL_WALL_FAN;
    public static final Block DEAD_BRAIN_CORAL_WALL_FAN;
    public static final Block DEAD_BUBBLE_CORAL_WALL_FAN;
    public static final Block DEAD_FIRE_CORAL_WALL_FAN;
    public static final Block DEAD_HORN_CORAL_WALL_FAN;
    public static final Block TUBE_CORAL_WALL_FAN;
    public static final Block BRAIN_CORAL_WALL_FAN;
    public static final Block BUBBLE_CORAL_WALL_FAN;
    public static final Block FIRE_CORAL_WALL_FAN;
    public static final Block HORN_CORAL_WALL_FAN;
    public static final Block SEA_PICKLE;
    public static final Block BLUE_ICE;
    public static final Block CONDUIT;
    public static final Block BAMBOO_SAPLING;
    public static final Block BAMBOO;
    public static final Block POTTED_BAMBOO;
    public static final Block VOID_AIR;
    public static final Block CAVE_AIR;
    public static final Block BUBBLE_COLUMN;
    public static final Block POLISHED_GRANITE_STAIRS;
    public static final Block SMOOTH_RED_SANDSTONE_STAIRS;
    public static final Block MOSSY_STONE_BRICK_STAIRS;
    public static final Block POLISHED_DIORITE_STAIRS;
    public static final Block MOSSY_COBBLESTONE_STAIRS;
    public static final Block END_STONE_BRICK_STAIRS;
    public static final Block STONE_STAIRS;
    public static final Block SMOOTH_SANDSTONE_STAIRS;
    public static final Block SMOOTH_QUARTZ_STAIRS;
    public static final Block GRANITE_STAIRS;
    public static final Block ANDESITE_STAIRS;
    public static final Block RED_NETHER_BRICK_STAIRS;
    public static final Block POLISHED_ANDESITE_STAIRS;
    public static final Block DIORITE_STAIRS;
    public static final Block POLISHED_GRANITE_SLAB;
    public static final Block SMOOTH_RED_SANDSTONE_SLAB;
    public static final Block MOSSY_STONE_BRICK_SLAB;
    public static final Block POLISHED_DIORITE_SLAB;
    public static final Block MOSSY_COBBLESTONE_SLAB;
    public static final Block END_STONE_BRICK_SLAB;
    public static final Block SMOOTH_SANDSTONE_SLAB;
    public static final Block SMOOTH_QUARTZ_SLAB;
    public static final Block GRANITE_SLAB;
    public static final Block ANDESITE_SLAB;
    public static final Block RED_NETHER_BRICK_SLAB;
    public static final Block POLISHED_ANDESITE_SLAB;
    public static final Block DIORITE_SLAB;
    public static final Block BRICK_WALL;
    public static final Block PRISMARINE_WALL;
    public static final Block RED_SANDSTONE_WALL;
    public static final Block MOSSY_STONE_BRICK_WALL;
    public static final Block GRANITE_WALL;
    public static final Block STONE_BRICK_WALL;
    public static final Block NETHER_BRICK_WALL;
    public static final Block ANDESITE_WALL;
    public static final Block RED_NETHER_BRICK_WALL;
    public static final Block SANDSTONE_WALL;
    public static final Block END_STONE_BRICK_WALL;
    public static final Block DIORITE_WALL;
    public static final Block SCAFFOLDING;
    public static final Block LOOM;
    public static final Block BARREL;
    public static final Block SMOKER;
    public static final Block BLAST_FURNACE;
    public static final Block CARTOGRAPHY_TABLE;
    public static final Block FLETCHING_TABLE;
    public static final Block GRINDSTONE;
    public static final Block LECTERN;
    public static final Block SMITHING_TABLE;
    public static final Block STONECUTTER;
    public static final Block BELL;
    public static final Block LANTERN;
    public static final Block SOUL_LANTERN;
    public static final Block CAMPFIRE;
    public static final Block SOUL_CAMPFIRE;
    public static final Block SWEET_BERRY_BUSH;
    public static final Block WARPED_STEM;
    public static final Block STRIPPED_WARPED_STEM;
    public static final Block WARPED_HYPHAE;
    public static final Block STRIPPED_WARPED_HYPHAE;
    public static final Block WARPED_NYLIUM;
    public static final Block WARPED_FUNGUS;
    public static final Block WARPED_WART_BLOCK;
    public static final Block WARPED_ROOTS;
    public static final Block NETHER_SPROUTS;
    public static final Block CRIMSON_STEM;
    public static final Block STRIPPED_CRIMSON_STEM;
    public static final Block CRIMSON_HYPHAE;
    public static final Block STRIPPED_CRIMSON_HYPHAE;
    public static final Block CRIMSON_NYLIUM;
    public static final Block CRIMSON_FUNGUS;
    public static final Block SHROOMLIGHT;
    public static final Block WEEPING_VINES;
    public static final Block WEEPING_VINES_PLANT;
    public static final Block TWISTING_VINES;
    public static final Block TWISTING_VINES_PLANT;
    public static final Block CRIMSON_ROOTS;
    public static final Block CRIMSON_PLANKS;
    public static final Block WARPED_PLANKS;
    public static final Block CRIMSON_SLAB;
    public static final Block WARPED_SLAB;
    public static final Block CRIMSON_PRESSURE_PLATE;
    public static final Block WARPED_PRESSURE_PLATE;
    public static final Block CRIMSON_FENCE;
    public static final Block WARPED_FENCE;
    public static final Block CRIMSON_TRAPDOOR;
    public static final Block WARPED_TRAPDOOR;
    public static final Block CRIMSON_FENCE_GATE;
    public static final Block WARPED_FENCE_GATE;
    public static final Block CRIMSON_STAIRS;
    public static final Block WARPED_STAIRS;
    public static final Block CRIMSON_BUTTON;
    public static final Block WARPED_BUTTON;
    public static final Block CRIMSON_DOOR;
    public static final Block WARPED_DOOR;
    public static final Block CRIMSON_SIGN;
    public static final Block WARPED_SIGN;
    public static final Block CRIMSON_WALL_SIGN;
    public static final Block WARPED_WALL_SIGN;
    public static final Block STRUCTURE_BLOCK;
    public static final Block JIGSAW;
    public static final Block COMPOSTER;
    public static final Block TARGET;
    public static final Block BEE_NEST;
    public static final Block BEEHIVE;
    public static final Block HONEY_BLOCK;
    public static final Block HONEYCOMB_BLOCK;
    public static final Block NETHERITE_BLOCK;
    public static final Block ANCIENT_DEBRIS;
    public static final Block CRYING_OBSIDIAN;
    public static final Block RESPAWN_ANCHOR;
    public static final Block POTTED_CRIMSON_FUNGUS;
    public static final Block POTTED_WARPED_FUNGUS;
    public static final Block POTTED_CRIMSON_ROOTS;
    public static final Block POTTED_WARPED_ROOTS;
    public static final Block LODESTONE;
    public static final Block BLACKSTONE;
    public static final Block BLACKSTONE_STAIRS;
    public static final Block BLACKSTONE_WALL;
    public static final Block BLACKSTONE_SLAB;
    public static final Block POLISHED_BLACKSTONE;
    public static final Block POLISHED_BLACKSTONE_BRICKS;
    public static final Block CRACKED_POLISHED_BLACKSTONE_BRICKS;
    public static final Block CHISELED_POLISHED_BLACKSTONE;
    public static final Block POLISHED_BLACKSTONE_BRICK_SLAB;
    public static final Block POLISHED_BLACKSTONE_BRICK_STAIRS;
    public static final Block POLISHED_BLACKSTONE_BRICK_WALL;
    public static final Block GILDED_BLACKSTONE;
    public static final Block POLISHED_BLACKSTONE_STAIRS;
    public static final Block POLISHED_BLACKSTONE_SLAB;
    public static final Block POLISHED_BLACKSTONE_PRESSURE_PLATE;
    public static final Block POLISHED_BLACKSTONE_BUTTON;
    public static final Block POLISHED_BLACKSTONE_WALL;
    public static final Block CHISELED_NETHER_BRICKS;
    public static final Block CRACKED_NETHER_BRICKS;
    public static final Block QUARTZ_BRICKS;
    
    private static ToIntFunction<BlockState> litBlockEmission(final int integer) {
        return cfj -> cfj.<Boolean>getValue((Property<Boolean>)BlockStateProperties.LIT) ? integer : 0;
    }
    
    private static Boolean never(final BlockState cfj, final BlockGetter bpg, final BlockPos fu, final EntityType<?> aoq) {
        return false;
    }
    
    private static Boolean always(final BlockState cfj, final BlockGetter bpg, final BlockPos fu, final EntityType<?> aoq) {
        return true;
    }
    
    private static Boolean ocelotOrParrot(final BlockState cfj, final BlockGetter bpg, final BlockPos fu, final EntityType<?> aoq) {
        return aoq == EntityType.OCELOT || aoq == EntityType.PARROT;
    }
    
    private static BedBlock bed(final DyeColor bje) {
        return new BedBlock(bje, BlockBehaviour.Properties.of(Material.WOOL, cfj -> (cfj.<BedPart>getValue(BedBlock.PART) == BedPart.FOOT) ? bje.getMaterialColor() : MaterialColor.WOOL).sound(SoundType.WOOD).strength(0.2f).noOcclusion());
    }
    
    private static RotatedPillarBlock log(final MaterialColor cxe1, final MaterialColor cxe2) {
        return new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, cfj -> (cfj.<Direction.Axis>getValue(RotatedPillarBlock.AXIS) == Direction.Axis.Y) ? cxe1 : cxe2).strength(2.0f).sound(SoundType.WOOD));
    }
    
    private static Block netherStem(final MaterialColor cxe) {
        return new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, cfj -> cxe).strength(2.0f).sound(SoundType.STEM));
    }
    
    private static boolean always(final BlockState cfj, final BlockGetter bpg, final BlockPos fu) {
        return true;
    }
    
    private static boolean never(final BlockState cfj, final BlockGetter bpg, final BlockPos fu) {
        return false;
    }
    
    private static StainedGlassBlock stainedGlass(final DyeColor bje) {
        return new StainedGlassBlock(bje, BlockBehaviour.Properties.of(Material.GLASS, bje).strength(0.3f).sound(SoundType.GLASS).noOcclusion().isValidSpawn(Blocks::never).isRedstoneConductor(Blocks::never).isSuffocating(Blocks::never).isViewBlocking(Blocks::never));
    }
    
    private static LeavesBlock leaves() {
        return new LeavesBlock(BlockBehaviour.Properties.of(Material.LEAVES).strength(0.2f).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(Blocks::ocelotOrParrot).isSuffocating(Blocks::never).isViewBlocking(Blocks::never));
    }
    
    private static ShulkerBoxBlock shulkerBox(final DyeColor bje, final BlockBehaviour.Properties c) {
        final BlockEntity cdl4;
        ShulkerBoxBlockEntity ceg5;
        final BlockBehaviour.StatePredicate e3 = (cfj, bpg, fu) -> {
            cdl4 = bpg.getBlockEntity(fu);
            if (!(cdl4 instanceof ShulkerBoxBlockEntity)) {
                return true;
            }
            else {
                ceg5 = (ShulkerBoxBlockEntity)cdl4;
                return ceg5.isClosed();
            }
        };
        return new ShulkerBoxBlock(bje, c.strength(2.0f).dynamicShape().noOcclusion().isSuffocating(e3).isViewBlocking(e3));
    }
    
    private static PistonBaseBlock pistonBase(final boolean boolean1) {
        final BlockBehaviour.StatePredicate e2 = (cfj, bpg, fu) -> !cfj.<Boolean>getValue((Property<Boolean>)PistonBaseBlock.EXTENDED);
        return new PistonBaseBlock(boolean1, BlockBehaviour.Properties.of(Material.PISTON).strength(1.5f).isRedstoneConductor(Blocks::never).isSuffocating(e2).isViewBlocking(e2));
    }
    
    private static Block register(final String string, final Block bvr) {
        return Registry.<Block>register(Registry.BLOCK, string, bvr);
    }
    
    public static void rebuildCache() {
        Block.BLOCK_STATE_REGISTRY.forEach(BlockBehaviour.BlockStateBase::initCache);
    }
    
    static {
        AIR = register("air", new AirBlock(BlockBehaviour.Properties.of(Material.AIR).noCollission().noDrops().air()));
        STONE = register("stone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        GRANITE = register("granite", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.DIRT).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        POLISHED_GRANITE = register("polished_granite", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.DIRT).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        DIORITE = register("diorite", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.QUARTZ).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        POLISHED_DIORITE = register("polished_diorite", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.QUARTZ).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        ANDESITE = register("andesite", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        POLISHED_ANDESITE = register("polished_andesite", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        GRASS_BLOCK = register("grass_block", new GrassBlock(BlockBehaviour.Properties.of(Material.GRASS).randomTicks().strength(0.6f).sound(SoundType.GRASS)));
        DIRT = register("dirt", new Block(BlockBehaviour.Properties.of(Material.DIRT, MaterialColor.DIRT).strength(0.5f).sound(SoundType.GRAVEL)));
        COARSE_DIRT = register("coarse_dirt", new Block(BlockBehaviour.Properties.of(Material.DIRT, MaterialColor.DIRT).strength(0.5f).sound(SoundType.GRAVEL)));
        PODZOL = register("podzol", new SnowyDirtBlock(BlockBehaviour.Properties.of(Material.DIRT, MaterialColor.PODZOL).strength(0.5f).sound(SoundType.GRAVEL)));
        COBBLESTONE = register("cobblestone", new Block(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        OAK_PLANKS = register("oak_planks", new Block(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.WOOD).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        SPRUCE_PLANKS = register("spruce_planks", new Block(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.PODZOL).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        BIRCH_PLANKS = register("birch_planks", new Block(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.SAND).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        JUNGLE_PLANKS = register("jungle_planks", new Block(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.DIRT).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        ACACIA_PLANKS = register("acacia_planks", new Block(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_ORANGE).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        DARK_OAK_PLANKS = register("dark_oak_planks", new Block(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_BROWN).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        OAK_SAPLING = register("oak_sapling", new SaplingBlock(new OakTreeGrower(), BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS)));
        SPRUCE_SAPLING = register("spruce_sapling", new SaplingBlock(new SpruceTreeGrower(), BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS)));
        BIRCH_SAPLING = register("birch_sapling", new SaplingBlock(new BirchTreeGrower(), BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS)));
        JUNGLE_SAPLING = register("jungle_sapling", new SaplingBlock(new JungleTreeGrower(), BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS)));
        ACACIA_SAPLING = register("acacia_sapling", new SaplingBlock(new AcaciaTreeGrower(), BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS)));
        DARK_OAK_SAPLING = register("dark_oak_sapling", new SaplingBlock(new DarkOakTreeGrower(), BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS)));
        BEDROCK = register("bedrock", new Block(BlockBehaviour.Properties.of(Material.STONE).strength(-1.0f, 3600000.0f).noDrops().isValidSpawn(Blocks::never)));
        WATER = register("water", new LiquidBlock(Fluids.WATER, BlockBehaviour.Properties.of(Material.WATER).noCollission().strength(100.0f).noDrops()));
        LAVA = register("lava", new LiquidBlock(Fluids.LAVA, BlockBehaviour.Properties.of(Material.LAVA).noCollission().randomTicks().strength(100.0f).lightLevel(cfj -> 15).noDrops()));
        SAND = register("sand", new SandBlock(14406560, BlockBehaviour.Properties.of(Material.SAND, MaterialColor.SAND).strength(0.5f).sound(SoundType.SAND)));
        RED_SAND = register("red_sand", new SandBlock(11098145, BlockBehaviour.Properties.of(Material.SAND, MaterialColor.COLOR_ORANGE).strength(0.5f).sound(SoundType.SAND)));
        GRAVEL = register("gravel", new GravelBlock(BlockBehaviour.Properties.of(Material.SAND, MaterialColor.STONE).strength(0.6f).sound(SoundType.GRAVEL)));
        GOLD_ORE = register("gold_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.0f, 3.0f)));
        IRON_ORE = register("iron_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.0f, 3.0f)));
        COAL_ORE = register("coal_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.0f, 3.0f)));
        NETHER_GOLD_ORE = register("nether_gold_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(3.0f, 3.0f).sound(SoundType.NETHER_GOLD_ORE)));
        OAK_LOG = register("oak_log", log(MaterialColor.WOOD, MaterialColor.PODZOL));
        SPRUCE_LOG = register("spruce_log", log(MaterialColor.PODZOL, MaterialColor.COLOR_BROWN));
        BIRCH_LOG = register("birch_log", log(MaterialColor.SAND, MaterialColor.QUARTZ));
        JUNGLE_LOG = register("jungle_log", log(MaterialColor.DIRT, MaterialColor.PODZOL));
        ACACIA_LOG = register("acacia_log", log(MaterialColor.COLOR_ORANGE, MaterialColor.STONE));
        DARK_OAK_LOG = register("dark_oak_log", log(MaterialColor.COLOR_BROWN, MaterialColor.COLOR_BROWN));
        STRIPPED_SPRUCE_LOG = register("stripped_spruce_log", log(MaterialColor.PODZOL, MaterialColor.PODZOL));
        STRIPPED_BIRCH_LOG = register("stripped_birch_log", log(MaterialColor.SAND, MaterialColor.SAND));
        STRIPPED_JUNGLE_LOG = register("stripped_jungle_log", log(MaterialColor.DIRT, MaterialColor.DIRT));
        STRIPPED_ACACIA_LOG = register("stripped_acacia_log", log(MaterialColor.COLOR_ORANGE, MaterialColor.COLOR_ORANGE));
        STRIPPED_DARK_OAK_LOG = register("stripped_dark_oak_log", log(MaterialColor.COLOR_BROWN, MaterialColor.COLOR_BROWN));
        STRIPPED_OAK_LOG = register("stripped_oak_log", log(MaterialColor.WOOD, MaterialColor.WOOD));
        OAK_WOOD = register("oak_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.WOOD).strength(2.0f).sound(SoundType.WOOD)));
        SPRUCE_WOOD = register("spruce_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.PODZOL).strength(2.0f).sound(SoundType.WOOD)));
        BIRCH_WOOD = register("birch_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.SAND).strength(2.0f).sound(SoundType.WOOD)));
        JUNGLE_WOOD = register("jungle_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.DIRT).strength(2.0f).sound(SoundType.WOOD)));
        ACACIA_WOOD = register("acacia_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_GRAY).strength(2.0f).sound(SoundType.WOOD)));
        DARK_OAK_WOOD = register("dark_oak_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_BROWN).strength(2.0f).sound(SoundType.WOOD)));
        STRIPPED_OAK_WOOD = register("stripped_oak_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.WOOD).strength(2.0f).sound(SoundType.WOOD)));
        STRIPPED_SPRUCE_WOOD = register("stripped_spruce_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.PODZOL).strength(2.0f).sound(SoundType.WOOD)));
        STRIPPED_BIRCH_WOOD = register("stripped_birch_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.SAND).strength(2.0f).sound(SoundType.WOOD)));
        STRIPPED_JUNGLE_WOOD = register("stripped_jungle_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.DIRT).strength(2.0f).sound(SoundType.WOOD)));
        STRIPPED_ACACIA_WOOD = register("stripped_acacia_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_ORANGE).strength(2.0f).sound(SoundType.WOOD)));
        STRIPPED_DARK_OAK_WOOD = register("stripped_dark_oak_wood", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_BROWN).strength(2.0f).sound(SoundType.WOOD)));
        OAK_LEAVES = register("oak_leaves", leaves());
        SPRUCE_LEAVES = register("spruce_leaves", leaves());
        BIRCH_LEAVES = register("birch_leaves", leaves());
        JUNGLE_LEAVES = register("jungle_leaves", leaves());
        ACACIA_LEAVES = register("acacia_leaves", leaves());
        DARK_OAK_LEAVES = register("dark_oak_leaves", leaves());
        SPONGE = register("sponge", new SpongeBlock(BlockBehaviour.Properties.of(Material.SPONGE).strength(0.6f).sound(SoundType.GRASS)));
        WET_SPONGE = register("wet_sponge", new WetSpongeBlock(BlockBehaviour.Properties.of(Material.SPONGE).strength(0.6f).sound(SoundType.GRASS)));
        GLASS = register("glass", new GlassBlock(BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion().isValidSpawn(Blocks::never).isRedstoneConductor(Blocks::never).isSuffocating(Blocks::never).isViewBlocking(Blocks::never)));
        LAPIS_ORE = register("lapis_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.0f, 3.0f)));
        LAPIS_BLOCK = register("lapis_block", new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.LAPIS).requiresCorrectToolForDrops().strength(3.0f, 3.0f)));
        DISPENSER = register("dispenser", new DispenserBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.5f)));
        SANDSTONE = register("sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(0.8f)));
        CHISELED_SANDSTONE = register("chiseled_sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(0.8f)));
        CUT_SANDSTONE = register("cut_sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(0.8f)));
        NOTE_BLOCK = register("note_block", new NoteBlock(BlockBehaviour.Properties.of(Material.WOOD).sound(SoundType.WOOD).strength(0.8f)));
        WHITE_BED = register("white_bed", bed(DyeColor.WHITE));
        ORANGE_BED = register("orange_bed", bed(DyeColor.ORANGE));
        MAGENTA_BED = register("magenta_bed", bed(DyeColor.MAGENTA));
        LIGHT_BLUE_BED = register("light_blue_bed", bed(DyeColor.LIGHT_BLUE));
        YELLOW_BED = register("yellow_bed", bed(DyeColor.YELLOW));
        LIME_BED = register("lime_bed", bed(DyeColor.LIME));
        PINK_BED = register("pink_bed", bed(DyeColor.PINK));
        GRAY_BED = register("gray_bed", bed(DyeColor.GRAY));
        LIGHT_GRAY_BED = register("light_gray_bed", bed(DyeColor.LIGHT_GRAY));
        CYAN_BED = register("cyan_bed", bed(DyeColor.CYAN));
        PURPLE_BED = register("purple_bed", bed(DyeColor.PURPLE));
        BLUE_BED = register("blue_bed", bed(DyeColor.BLUE));
        BROWN_BED = register("brown_bed", bed(DyeColor.BROWN));
        GREEN_BED = register("green_bed", bed(DyeColor.GREEN));
        RED_BED = register("red_bed", bed(DyeColor.RED));
        BLACK_BED = register("black_bed", bed(DyeColor.BLACK));
        POWERED_RAIL = register("powered_rail", new PoweredRailBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.7f).sound(SoundType.METAL)));
        DETECTOR_RAIL = register("detector_rail", new DetectorRailBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.7f).sound(SoundType.METAL)));
        STICKY_PISTON = register("sticky_piston", pistonBase(true));
        COBWEB = register("cobweb", new WebBlock(BlockBehaviour.Properties.of(Material.WEB).noCollission().requiresCorrectToolForDrops().strength(4.0f)));
        GRASS = register("grass", new TallGrassBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        FERN = register("fern", new TallGrassBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        DEAD_BUSH = register("dead_bush", new DeadBushBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT, MaterialColor.WOOD).noCollission().instabreak().sound(SoundType.GRASS)));
        SEAGRASS = register("seagrass", new Seagrass(BlockBehaviour.Properties.of(Material.REPLACEABLE_WATER_PLANT).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        TALL_SEAGRASS = register("tall_seagrass", new TallSeagrass(BlockBehaviour.Properties.of(Material.REPLACEABLE_WATER_PLANT).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        PISTON = register("piston", pistonBase(false));
        PISTON_HEAD = register("piston_head", new PistonHeadBlock(BlockBehaviour.Properties.of(Material.PISTON).strength(1.5f).noDrops()));
        WHITE_WOOL = register("white_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.SNOW).strength(0.8f).sound(SoundType.WOOL)));
        ORANGE_WOOL = register("orange_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_ORANGE).strength(0.8f).sound(SoundType.WOOL)));
        MAGENTA_WOOL = register("magenta_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_MAGENTA).strength(0.8f).sound(SoundType.WOOL)));
        LIGHT_BLUE_WOOL = register("light_blue_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_BLUE).strength(0.8f).sound(SoundType.WOOL)));
        YELLOW_WOOL = register("yellow_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_YELLOW).strength(0.8f).sound(SoundType.WOOL)));
        LIME_WOOL = register("lime_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_GREEN).strength(0.8f).sound(SoundType.WOOL)));
        PINK_WOOL = register("pink_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_PINK).strength(0.8f).sound(SoundType.WOOL)));
        GRAY_WOOL = register("gray_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_GRAY).strength(0.8f).sound(SoundType.WOOL)));
        LIGHT_GRAY_WOOL = register("light_gray_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_GRAY).strength(0.8f).sound(SoundType.WOOL)));
        CYAN_WOOL = register("cyan_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_CYAN).strength(0.8f).sound(SoundType.WOOL)));
        PURPLE_WOOL = register("purple_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_PURPLE).strength(0.8f).sound(SoundType.WOOL)));
        BLUE_WOOL = register("blue_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BLUE).strength(0.8f).sound(SoundType.WOOL)));
        BROWN_WOOL = register("brown_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BROWN).strength(0.8f).sound(SoundType.WOOL)));
        GREEN_WOOL = register("green_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_GREEN).strength(0.8f).sound(SoundType.WOOL)));
        RED_WOOL = register("red_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_RED).strength(0.8f).sound(SoundType.WOOL)));
        BLACK_WOOL = register("black_wool", new Block(BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BLACK).strength(0.8f).sound(SoundType.WOOL)));
        MOVING_PISTON = register("moving_piston", new MovingPistonBlock(BlockBehaviour.Properties.of(Material.PISTON).strength(-1.0f).dynamicShape().noDrops().noOcclusion().isRedstoneConductor(Blocks::never).isSuffocating(Blocks::never).isViewBlocking(Blocks::never)));
        DANDELION = register("dandelion", new FlowerBlock(MobEffects.SATURATION, 7, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        POPPY = register("poppy", new FlowerBlock(MobEffects.NIGHT_VISION, 5, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        BLUE_ORCHID = register("blue_orchid", new FlowerBlock(MobEffects.SATURATION, 7, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        ALLIUM = register("allium", new FlowerBlock(MobEffects.FIRE_RESISTANCE, 4, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        AZURE_BLUET = register("azure_bluet", new FlowerBlock(MobEffects.BLINDNESS, 8, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        RED_TULIP = register("red_tulip", new FlowerBlock(MobEffects.WEAKNESS, 9, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        ORANGE_TULIP = register("orange_tulip", new FlowerBlock(MobEffects.WEAKNESS, 9, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        WHITE_TULIP = register("white_tulip", new FlowerBlock(MobEffects.WEAKNESS, 9, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        PINK_TULIP = register("pink_tulip", new FlowerBlock(MobEffects.WEAKNESS, 9, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        OXEYE_DAISY = register("oxeye_daisy", new FlowerBlock(MobEffects.REGENERATION, 8, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        CORNFLOWER = register("cornflower", new FlowerBlock(MobEffects.JUMP, 6, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        WITHER_ROSE = register("wither_rose", new WitherRoseBlock(MobEffects.WITHER, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        LILY_OF_THE_VALLEY = register("lily_of_the_valley", new FlowerBlock(MobEffects.POISON, 12, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        BROWN_MUSHROOM = register("brown_mushroom", new MushroomBlock(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_BROWN).noCollission().randomTicks().instabreak().sound(SoundType.GRASS).lightLevel(cfj -> 1).hasPostProcess(Blocks::always)));
        RED_MUSHROOM = register("red_mushroom", new MushroomBlock(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_RED).noCollission().randomTicks().instabreak().sound(SoundType.GRASS).hasPostProcess(Blocks::always)));
        GOLD_BLOCK = register("gold_block", new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.GOLD).requiresCorrectToolForDrops().strength(3.0f, 6.0f).sound(SoundType.METAL)));
        IRON_BLOCK = register("iron_block", new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.METAL).requiresCorrectToolForDrops().strength(5.0f, 6.0f).sound(SoundType.METAL)));
        BRICKS = register("bricks", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_RED).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        TNT = register("tnt", new TntBlock(BlockBehaviour.Properties.of(Material.EXPLOSIVE).instabreak().sound(SoundType.GRASS)));
        BOOKSHELF = register("bookshelf", new Block(BlockBehaviour.Properties.of(Material.WOOD).strength(1.5f).sound(SoundType.WOOD)));
        MOSSY_COBBLESTONE = register("mossy_cobblestone", new Block(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        OBSIDIAN = register("obsidian", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(50.0f, 1200.0f)));
        TORCH = register("torch", new TorchBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().instabreak().lightLevel(cfj -> 14).sound(SoundType.WOOD), ParticleTypes.FLAME));
        WALL_TORCH = register("wall_torch", new WallTorchBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().instabreak().lightLevel(cfj -> 14).sound(SoundType.WOOD).dropsLike(Blocks.TORCH), ParticleTypes.FLAME));
        FIRE = register("fire", new FireBlock(BlockBehaviour.Properties.of(Material.FIRE, MaterialColor.FIRE).noCollission().instabreak().lightLevel(cfj -> 15).sound(SoundType.WOOL)));
        SOUL_FIRE = register("soul_fire", new SoulFireBlock(BlockBehaviour.Properties.of(Material.FIRE, MaterialColor.COLOR_LIGHT_BLUE).noCollission().instabreak().lightLevel(cfj -> 10).sound(SoundType.WOOL)));
        SPAWNER = register("spawner", new SpawnerBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(5.0f).sound(SoundType.METAL).noOcclusion()));
        OAK_STAIRS = register("oak_stairs", new StairBlock(Blocks.OAK_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.OAK_PLANKS)));
        CHEST = register("chest", new ChestBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD), () -> BlockEntityType.CHEST));
        REDSTONE_WIRE = register("redstone_wire", new RedStoneWireBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().instabreak()));
        DIAMOND_ORE = register("diamond_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.0f, 3.0f)));
        DIAMOND_BLOCK = register("diamond_block", new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.DIAMOND).requiresCorrectToolForDrops().strength(5.0f, 6.0f).sound(SoundType.METAL)));
        CRAFTING_TABLE = register("crafting_table", new CraftingTableBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        WHEAT = register("wheat", new CropBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.CROP)));
        FARMLAND = register("farmland", new FarmBlock(BlockBehaviour.Properties.of(Material.DIRT).randomTicks().strength(0.6f).sound(SoundType.GRAVEL).isViewBlocking(Blocks::always)));
        FURNACE = register("furnace", new FurnaceBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.5f).lightLevel(litBlockEmission(13))));
        OAK_SIGN = register("oak_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.OAK));
        SPRUCE_SIGN = register("spruce_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.SPRUCE_LOG.defaultMaterialColor()).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.SPRUCE));
        BIRCH_SIGN = register("birch_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.SAND).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.BIRCH));
        ACACIA_SIGN = register("acacia_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_ORANGE).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.ACACIA));
        JUNGLE_SIGN = register("jungle_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.JUNGLE_LOG.defaultMaterialColor()).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.JUNGLE));
        DARK_OAK_SIGN = register("dark_oak_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.DARK_OAK_LOG.defaultMaterialColor()).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.DARK_OAK));
        OAK_DOOR = register("oak_door", new DoorBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.OAK_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        LADDER = register("ladder", new LadderBlock(BlockBehaviour.Properties.of(Material.DECORATION).strength(0.4f).sound(SoundType.LADDER).noOcclusion()));
        RAIL = register("rail", new RailBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.7f).sound(SoundType.METAL)));
        COBBLESTONE_STAIRS = register("cobblestone_stairs", new StairBlock(Blocks.COBBLESTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.COBBLESTONE)));
        OAK_WALL_SIGN = register("oak_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.OAK_SIGN), WoodType.OAK));
        SPRUCE_WALL_SIGN = register("spruce_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.SPRUCE_LOG.defaultMaterialColor()).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.SPRUCE_SIGN), WoodType.SPRUCE));
        BIRCH_WALL_SIGN = register("birch_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.SAND).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.BIRCH_SIGN), WoodType.BIRCH));
        ACACIA_WALL_SIGN = register("acacia_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_ORANGE).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.ACACIA_SIGN), WoodType.ACACIA));
        JUNGLE_WALL_SIGN = register("jungle_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.JUNGLE_LOG.defaultMaterialColor()).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.JUNGLE_SIGN), WoodType.JUNGLE));
        DARK_OAK_WALL_SIGN = register("dark_oak_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.DARK_OAK_LOG.defaultMaterialColor()).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.DARK_OAK_SIGN), WoodType.DARK_OAK));
        LEVER = register("lever", new LeverBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        STONE_PRESSURE_PLATE = register("stone_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.MOBS, BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().noCollission().strength(0.5f)));
        IRON_DOOR = register("iron_door", new DoorBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.METAL).requiresCorrectToolForDrops().strength(5.0f).sound(SoundType.METAL).noOcclusion()));
        OAK_PRESSURE_PLATE = register("oak_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.WOOD, Blocks.OAK_PLANKS.defaultMaterialColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        SPRUCE_PRESSURE_PLATE = register("spruce_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.WOOD, Blocks.SPRUCE_PLANKS.defaultMaterialColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        BIRCH_PRESSURE_PLATE = register("birch_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.WOOD, Blocks.BIRCH_PLANKS.defaultMaterialColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        JUNGLE_PRESSURE_PLATE = register("jungle_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.WOOD, Blocks.JUNGLE_PLANKS.defaultMaterialColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        ACACIA_PRESSURE_PLATE = register("acacia_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.WOOD, Blocks.ACACIA_PLANKS.defaultMaterialColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        DARK_OAK_PRESSURE_PLATE = register("dark_oak_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.WOOD, Blocks.DARK_OAK_PLANKS.defaultMaterialColor()).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        REDSTONE_ORE = register("redstone_ore", new RedStoneOreBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().randomTicks().lightLevel(litBlockEmission(9)).strength(3.0f, 3.0f)));
        REDSTONE_TORCH = register("redstone_torch", new RedstoneTorchBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().instabreak().lightLevel(litBlockEmission(7)).sound(SoundType.WOOD)));
        REDSTONE_WALL_TORCH = register("redstone_wall_torch", new RedstoneWallTorchBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().instabreak().lightLevel(litBlockEmission(7)).sound(SoundType.WOOD).dropsLike(Blocks.REDSTONE_TORCH)));
        STONE_BUTTON = register("stone_button", new StoneButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f)));
        SNOW = register("snow", new SnowLayerBlock(BlockBehaviour.Properties.of(Material.TOP_SNOW).randomTicks().strength(0.1f).requiresCorrectToolForDrops().sound(SoundType.SNOW)));
        ICE = register("ice", new IceBlock(BlockBehaviour.Properties.of(Material.ICE).friction(0.98f).randomTicks().strength(0.5f).sound(SoundType.GLASS).noOcclusion().isValidSpawn((cfj, bpg, fu, aoq) -> aoq == EntityType.POLAR_BEAR)));
        SNOW_BLOCK = register("snow_block", new Block(BlockBehaviour.Properties.of(Material.SNOW).requiresCorrectToolForDrops().strength(0.2f).sound(SoundType.SNOW)));
        CACTUS = register("cactus", new CactusBlock(BlockBehaviour.Properties.of(Material.CACTUS).randomTicks().strength(0.4f).sound(SoundType.WOOL)));
        CLAY = register("clay", new Block(BlockBehaviour.Properties.of(Material.CLAY).strength(0.6f).sound(SoundType.GRAVEL)));
        SUGAR_CANE = register("sugar_cane", new SugarCaneBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.GRASS)));
        JUKEBOX = register("jukebox", new JukeboxBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.DIRT).strength(2.0f, 6.0f)));
        OAK_FENCE = register("oak_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.OAK_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        PUMPKIN = register("pumpkin", new PumpkinBlock(BlockBehaviour.Properties.of(Material.VEGETABLE, MaterialColor.COLOR_ORANGE).strength(1.0f).sound(SoundType.WOOD)));
        NETHERRACK = register("netherrack", new NetherrackBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(0.4f).sound(SoundType.NETHERRACK)));
        SOUL_SAND = register("soul_sand", new SoulSandBlock(BlockBehaviour.Properties.of(Material.SAND, MaterialColor.COLOR_BROWN).strength(0.5f).speedFactor(0.4f).sound(SoundType.SOUL_SAND).isValidSpawn(Blocks::always).isRedstoneConductor(Blocks::always).isViewBlocking(Blocks::always)));
        SOUL_SOIL = register("soul_soil", new Block(BlockBehaviour.Properties.of(Material.DIRT, MaterialColor.COLOR_BROWN).strength(0.5f).sound(SoundType.SOUL_SOIL)));
        BASALT = register("basalt", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(1.25f, 4.2f).sound(SoundType.BASALT)));
        POLISHED_BASALT = register("polished_basalt", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(1.25f, 4.2f).sound(SoundType.BASALT)));
        SOUL_TORCH = register("soul_torch", new TorchBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().instabreak().lightLevel(cfj -> 10).sound(SoundType.WOOD), ParticleTypes.SOUL_FIRE_FLAME));
        SOUL_WALL_TORCH = register("soul_wall_torch", new WallTorchBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().instabreak().lightLevel(cfj -> 10).sound(SoundType.WOOD).dropsLike(Blocks.SOUL_TORCH), ParticleTypes.SOUL_FIRE_FLAME));
        GLOWSTONE = register("glowstone", new Block(BlockBehaviour.Properties.of(Material.GLASS, MaterialColor.SAND).strength(0.3f).sound(SoundType.GLASS).lightLevel(cfj -> 15)));
        NETHER_PORTAL = register("nether_portal", new NetherPortalBlock(BlockBehaviour.Properties.of(Material.PORTAL).noCollission().randomTicks().strength(-1.0f).sound(SoundType.GLASS).lightLevel(cfj -> 11)));
        CARVED_PUMPKIN = register("carved_pumpkin", new CarvedPumpkinBlock(BlockBehaviour.Properties.of(Material.VEGETABLE, MaterialColor.COLOR_ORANGE).strength(1.0f).sound(SoundType.WOOD).isValidSpawn(Blocks::always)));
        JACK_O_LANTERN = register("jack_o_lantern", new CarvedPumpkinBlock(BlockBehaviour.Properties.of(Material.VEGETABLE, MaterialColor.COLOR_ORANGE).strength(1.0f).sound(SoundType.WOOD).lightLevel(cfj -> 15).isValidSpawn(Blocks::always)));
        CAKE = register("cake", new CakeBlock(BlockBehaviour.Properties.of(Material.CAKE).strength(0.5f).sound(SoundType.WOOL)));
        REPEATER = register("repeater", new RepeaterBlock(BlockBehaviour.Properties.of(Material.DECORATION).instabreak().sound(SoundType.WOOD)));
        WHITE_STAINED_GLASS = register("white_stained_glass", stainedGlass(DyeColor.WHITE));
        ORANGE_STAINED_GLASS = register("orange_stained_glass", stainedGlass(DyeColor.ORANGE));
        MAGENTA_STAINED_GLASS = register("magenta_stained_glass", stainedGlass(DyeColor.MAGENTA));
        LIGHT_BLUE_STAINED_GLASS = register("light_blue_stained_glass", stainedGlass(DyeColor.LIGHT_BLUE));
        YELLOW_STAINED_GLASS = register("yellow_stained_glass", stainedGlass(DyeColor.YELLOW));
        LIME_STAINED_GLASS = register("lime_stained_glass", stainedGlass(DyeColor.LIME));
        PINK_STAINED_GLASS = register("pink_stained_glass", stainedGlass(DyeColor.PINK));
        GRAY_STAINED_GLASS = register("gray_stained_glass", stainedGlass(DyeColor.GRAY));
        LIGHT_GRAY_STAINED_GLASS = register("light_gray_stained_glass", stainedGlass(DyeColor.LIGHT_GRAY));
        CYAN_STAINED_GLASS = register("cyan_stained_glass", stainedGlass(DyeColor.CYAN));
        PURPLE_STAINED_GLASS = register("purple_stained_glass", stainedGlass(DyeColor.PURPLE));
        BLUE_STAINED_GLASS = register("blue_stained_glass", stainedGlass(DyeColor.BLUE));
        BROWN_STAINED_GLASS = register("brown_stained_glass", stainedGlass(DyeColor.BROWN));
        GREEN_STAINED_GLASS = register("green_stained_glass", stainedGlass(DyeColor.GREEN));
        RED_STAINED_GLASS = register("red_stained_glass", stainedGlass(DyeColor.RED));
        BLACK_STAINED_GLASS = register("black_stained_glass", stainedGlass(DyeColor.BLACK));
        OAK_TRAPDOOR = register("oak_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.WOOD).strength(3.0f).sound(SoundType.WOOD).noOcclusion().isValidSpawn(Blocks::never)));
        SPRUCE_TRAPDOOR = register("spruce_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.PODZOL).strength(3.0f).sound(SoundType.WOOD).noOcclusion().isValidSpawn(Blocks::never)));
        BIRCH_TRAPDOOR = register("birch_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.SAND).strength(3.0f).sound(SoundType.WOOD).noOcclusion().isValidSpawn(Blocks::never)));
        JUNGLE_TRAPDOOR = register("jungle_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.DIRT).strength(3.0f).sound(SoundType.WOOD).noOcclusion().isValidSpawn(Blocks::never)));
        ACACIA_TRAPDOOR = register("acacia_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_ORANGE).strength(3.0f).sound(SoundType.WOOD).noOcclusion().isValidSpawn(Blocks::never)));
        DARK_OAK_TRAPDOOR = register("dark_oak_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_BROWN).strength(3.0f).sound(SoundType.WOOD).noOcclusion().isValidSpawn(Blocks::never)));
        STONE_BRICKS = register("stone_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        MOSSY_STONE_BRICKS = register("mossy_stone_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        CRACKED_STONE_BRICKS = register("cracked_stone_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        CHISELED_STONE_BRICKS = register("chiseled_stone_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        INFESTED_STONE = register("infested_stone", new InfestedBlock(Blocks.STONE, BlockBehaviour.Properties.of(Material.CLAY).strength(0.0f, 0.75f)));
        INFESTED_COBBLESTONE = register("infested_cobblestone", new InfestedBlock(Blocks.COBBLESTONE, BlockBehaviour.Properties.of(Material.CLAY).strength(0.0f, 0.75f)));
        INFESTED_STONE_BRICKS = register("infested_stone_bricks", new InfestedBlock(Blocks.STONE_BRICKS, BlockBehaviour.Properties.of(Material.CLAY).strength(0.0f, 0.75f)));
        INFESTED_MOSSY_STONE_BRICKS = register("infested_mossy_stone_bricks", new InfestedBlock(Blocks.MOSSY_STONE_BRICKS, BlockBehaviour.Properties.of(Material.CLAY).strength(0.0f, 0.75f)));
        INFESTED_CRACKED_STONE_BRICKS = register("infested_cracked_stone_bricks", new InfestedBlock(Blocks.CRACKED_STONE_BRICKS, BlockBehaviour.Properties.of(Material.CLAY).strength(0.0f, 0.75f)));
        INFESTED_CHISELED_STONE_BRICKS = register("infested_chiseled_stone_bricks", new InfestedBlock(Blocks.CHISELED_STONE_BRICKS, BlockBehaviour.Properties.of(Material.CLAY).strength(0.0f, 0.75f)));
        BROWN_MUSHROOM_BLOCK = register("brown_mushroom_block", new HugeMushroomBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.DIRT).strength(0.2f).sound(SoundType.WOOD)));
        RED_MUSHROOM_BLOCK = register("red_mushroom_block", new HugeMushroomBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_RED).strength(0.2f).sound(SoundType.WOOD)));
        MUSHROOM_STEM = register("mushroom_stem", new HugeMushroomBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.WOOL).strength(0.2f).sound(SoundType.WOOD)));
        IRON_BARS = register("iron_bars", new IronBarsBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.NONE).requiresCorrectToolForDrops().strength(5.0f, 6.0f).sound(SoundType.METAL).noOcclusion()));
        CHAIN = register("chain", new ChainBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.NONE).requiresCorrectToolForDrops().strength(5.0f, 6.0f).sound(SoundType.CHAIN).noOcclusion()));
        GLASS_PANE = register("glass_pane", new IronBarsBlock(BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        MELON = register("melon", new MelonBlock(BlockBehaviour.Properties.of(Material.VEGETABLE, MaterialColor.COLOR_LIGHT_GREEN).strength(1.0f).sound(SoundType.WOOD)));
        ATTACHED_PUMPKIN_STEM = register("attached_pumpkin_stem", new AttachedStemBlock((StemGrownBlock)Blocks.PUMPKIN, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.WOOD)));
        ATTACHED_MELON_STEM = register("attached_melon_stem", new AttachedStemBlock((StemGrownBlock)Blocks.MELON, BlockBehaviour.Properties.of(Material.PLANT).noCollission().instabreak().sound(SoundType.WOOD)));
        PUMPKIN_STEM = register("pumpkin_stem", new StemBlock((StemGrownBlock)Blocks.PUMPKIN, BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.HARD_CROP)));
        MELON_STEM = register("melon_stem", new StemBlock((StemGrownBlock)Blocks.MELON, BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.HARD_CROP)));
        VINE = register("vine", new VineBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().randomTicks().strength(0.2f).sound(SoundType.VINE)));
        OAK_FENCE_GATE = register("oak_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.OAK_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        BRICK_STAIRS = register("brick_stairs", new StairBlock(Blocks.BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BRICKS)));
        STONE_BRICK_STAIRS = register("stone_brick_stairs", new StairBlock(Blocks.STONE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.STONE_BRICKS)));
        MYCELIUM = register("mycelium", new MyceliumBlock(BlockBehaviour.Properties.of(Material.GRASS, MaterialColor.COLOR_PURPLE).randomTicks().strength(0.6f).sound(SoundType.GRASS)));
        LILY_PAD = register("lily_pad", new WaterlilyBlock(BlockBehaviour.Properties.of(Material.PLANT).instabreak().sound(SoundType.LILY_PAD).noOcclusion()));
        NETHER_BRICKS = register("nether_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(2.0f, 6.0f).sound(SoundType.NETHER_BRICKS)));
        NETHER_BRICK_FENCE = register("nether_brick_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(2.0f, 6.0f).sound(SoundType.NETHER_BRICKS)));
        NETHER_BRICK_STAIRS = register("nether_brick_stairs", new StairBlock(Blocks.NETHER_BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.NETHER_BRICKS)));
        NETHER_WART = register("nether_wart", new NetherWartBlock(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_RED).noCollission().randomTicks().sound(SoundType.NETHER_WART)));
        ENCHANTING_TABLE = register("enchanting_table", new EnchantmentTableBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_RED).requiresCorrectToolForDrops().strength(5.0f, 1200.0f)));
        BREWING_STAND = register("brewing_stand", new BrewingStandBlock(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(0.5f).lightLevel(cfj -> 1).noOcclusion()));
        CAULDRON = register("cauldron", new CauldronBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.STONE).requiresCorrectToolForDrops().strength(2.0f).noOcclusion()));
        END_PORTAL = register("end_portal", new EndPortalBlock(BlockBehaviour.Properties.of(Material.PORTAL, MaterialColor.COLOR_BLACK).noCollission().lightLevel(cfj -> 15).strength(-1.0f, 3600000.0f).noDrops()));
        END_PORTAL_FRAME = register("end_portal_frame", new EndPortalFrameBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GREEN).sound(SoundType.GLASS).lightLevel(cfj -> 1).strength(-1.0f, 3600000.0f).noDrops()));
        END_STONE = register("end_stone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(3.0f, 9.0f)));
        DRAGON_EGG = register("dragon_egg", new DragonEggBlock(BlockBehaviour.Properties.of(Material.EGG, MaterialColor.COLOR_BLACK).strength(3.0f, 9.0f).lightLevel(cfj -> 1).noOcclusion()));
        REDSTONE_LAMP = register("redstone_lamp", new RedstoneLampBlock(BlockBehaviour.Properties.of(Material.BUILDABLE_GLASS).lightLevel(litBlockEmission(15)).strength(0.3f).sound(SoundType.GLASS).isValidSpawn(Blocks::always)));
        COCOA = register("cocoa", new CocoaBlock(BlockBehaviour.Properties.of(Material.PLANT).randomTicks().strength(0.2f, 3.0f).sound(SoundType.WOOD).noOcclusion()));
        SANDSTONE_STAIRS = register("sandstone_stairs", new StairBlock(Blocks.SANDSTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.SANDSTONE)));
        EMERALD_ORE = register("emerald_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.0f, 3.0f)));
        ENDER_CHEST = register("ender_chest", new EnderChestBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(22.5f, 600.0f).lightLevel(cfj -> 7)));
        TRIPWIRE_HOOK = register("tripwire_hook", new TripWireHookBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission()));
        TRIPWIRE = register("tripwire", new TripWireBlock((TripWireHookBlock)Blocks.TRIPWIRE_HOOK, BlockBehaviour.Properties.of(Material.DECORATION).noCollission()));
        EMERALD_BLOCK = register("emerald_block", new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.EMERALD).requiresCorrectToolForDrops().strength(5.0f, 6.0f).sound(SoundType.METAL)));
        SPRUCE_STAIRS = register("spruce_stairs", new StairBlock(Blocks.SPRUCE_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.SPRUCE_PLANKS)));
        BIRCH_STAIRS = register("birch_stairs", new StairBlock(Blocks.BIRCH_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BIRCH_PLANKS)));
        JUNGLE_STAIRS = register("jungle_stairs", new StairBlock(Blocks.JUNGLE_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.JUNGLE_PLANKS)));
        COMMAND_BLOCK = register("command_block", new CommandBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_BROWN).requiresCorrectToolForDrops().strength(-1.0f, 3600000.0f).noDrops()));
        BEACON = register("beacon", new BeaconBlock(BlockBehaviour.Properties.of(Material.GLASS, MaterialColor.DIAMOND).strength(3.0f).lightLevel(cfj -> 15).noOcclusion().isRedstoneConductor(Blocks::never)));
        COBBLESTONE_WALL = register("cobblestone_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.COBBLESTONE)));
        MOSSY_COBBLESTONE_WALL = register("mossy_cobblestone_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.COBBLESTONE)));
        FLOWER_POT = register("flower_pot", new FlowerPotBlock(Blocks.AIR, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_OAK_SAPLING = register("potted_oak_sapling", new FlowerPotBlock(Blocks.OAK_SAPLING, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_SPRUCE_SAPLING = register("potted_spruce_sapling", new FlowerPotBlock(Blocks.SPRUCE_SAPLING, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_BIRCH_SAPLING = register("potted_birch_sapling", new FlowerPotBlock(Blocks.BIRCH_SAPLING, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_JUNGLE_SAPLING = register("potted_jungle_sapling", new FlowerPotBlock(Blocks.JUNGLE_SAPLING, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_ACACIA_SAPLING = register("potted_acacia_sapling", new FlowerPotBlock(Blocks.ACACIA_SAPLING, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_DARK_OAK_SAPLING = register("potted_dark_oak_sapling", new FlowerPotBlock(Blocks.DARK_OAK_SAPLING, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_FERN = register("potted_fern", new FlowerPotBlock(Blocks.FERN, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_DANDELION = register("potted_dandelion", new FlowerPotBlock(Blocks.DANDELION, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_POPPY = register("potted_poppy", new FlowerPotBlock(Blocks.POPPY, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_BLUE_ORCHID = register("potted_blue_orchid", new FlowerPotBlock(Blocks.BLUE_ORCHID, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_ALLIUM = register("potted_allium", new FlowerPotBlock(Blocks.ALLIUM, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_AZURE_BLUET = register("potted_azure_bluet", new FlowerPotBlock(Blocks.AZURE_BLUET, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_RED_TULIP = register("potted_red_tulip", new FlowerPotBlock(Blocks.RED_TULIP, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_ORANGE_TULIP = register("potted_orange_tulip", new FlowerPotBlock(Blocks.ORANGE_TULIP, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_WHITE_TULIP = register("potted_white_tulip", new FlowerPotBlock(Blocks.WHITE_TULIP, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_PINK_TULIP = register("potted_pink_tulip", new FlowerPotBlock(Blocks.PINK_TULIP, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_OXEYE_DAISY = register("potted_oxeye_daisy", new FlowerPotBlock(Blocks.OXEYE_DAISY, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_CORNFLOWER = register("potted_cornflower", new FlowerPotBlock(Blocks.CORNFLOWER, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_LILY_OF_THE_VALLEY = register("potted_lily_of_the_valley", new FlowerPotBlock(Blocks.LILY_OF_THE_VALLEY, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_WITHER_ROSE = register("potted_wither_rose", new FlowerPotBlock(Blocks.WITHER_ROSE, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_RED_MUSHROOM = register("potted_red_mushroom", new FlowerPotBlock(Blocks.RED_MUSHROOM, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_BROWN_MUSHROOM = register("potted_brown_mushroom", new FlowerPotBlock(Blocks.BROWN_MUSHROOM, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_DEAD_BUSH = register("potted_dead_bush", new FlowerPotBlock(Blocks.DEAD_BUSH, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_CACTUS = register("potted_cactus", new FlowerPotBlock(Blocks.CACTUS, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        CARROTS = register("carrots", new CarrotBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.CROP)));
        POTATOES = register("potatoes", new PotatoBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.CROP)));
        OAK_BUTTON = register("oak_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        SPRUCE_BUTTON = register("spruce_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        BIRCH_BUTTON = register("birch_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        JUNGLE_BUTTON = register("jungle_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        ACACIA_BUTTON = register("acacia_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        DARK_OAK_BUTTON = register("dark_oak_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        SKELETON_SKULL = register("skeleton_skull", new SkullBlock(SkullBlock.Types.SKELETON, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f)));
        SKELETON_WALL_SKULL = register("skeleton_wall_skull", new WallSkullBlock(SkullBlock.Types.SKELETON, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f).dropsLike(Blocks.SKELETON_SKULL)));
        WITHER_SKELETON_SKULL = register("wither_skeleton_skull", new WitherSkullBlock(BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f)));
        WITHER_SKELETON_WALL_SKULL = register("wither_skeleton_wall_skull", new WitherWallSkullBlock(BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f).dropsLike(Blocks.WITHER_SKELETON_SKULL)));
        ZOMBIE_HEAD = register("zombie_head", new SkullBlock(SkullBlock.Types.ZOMBIE, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f)));
        ZOMBIE_WALL_HEAD = register("zombie_wall_head", new WallSkullBlock(SkullBlock.Types.ZOMBIE, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f).dropsLike(Blocks.ZOMBIE_HEAD)));
        PLAYER_HEAD = register("player_head", new PlayerHeadBlock(BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f)));
        PLAYER_WALL_HEAD = register("player_wall_head", new PlayerWallHeadBlock(BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f).dropsLike(Blocks.PLAYER_HEAD)));
        CREEPER_HEAD = register("creeper_head", new SkullBlock(SkullBlock.Types.CREEPER, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f)));
        CREEPER_WALL_HEAD = register("creeper_wall_head", new WallSkullBlock(SkullBlock.Types.CREEPER, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f).dropsLike(Blocks.CREEPER_HEAD)));
        DRAGON_HEAD = register("dragon_head", new SkullBlock(SkullBlock.Types.DRAGON, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f)));
        DRAGON_WALL_HEAD = register("dragon_wall_head", new WallSkullBlock(SkullBlock.Types.DRAGON, BlockBehaviour.Properties.of(Material.DECORATION).strength(1.0f).dropsLike(Blocks.DRAGON_HEAD)));
        ANVIL = register("anvil", new AnvilBlock(BlockBehaviour.Properties.of(Material.HEAVY_METAL, MaterialColor.METAL).requiresCorrectToolForDrops().strength(5.0f, 1200.0f).sound(SoundType.ANVIL)));
        CHIPPED_ANVIL = register("chipped_anvil", new AnvilBlock(BlockBehaviour.Properties.of(Material.HEAVY_METAL, MaterialColor.METAL).requiresCorrectToolForDrops().strength(5.0f, 1200.0f).sound(SoundType.ANVIL)));
        DAMAGED_ANVIL = register("damaged_anvil", new AnvilBlock(BlockBehaviour.Properties.of(Material.HEAVY_METAL, MaterialColor.METAL).requiresCorrectToolForDrops().strength(5.0f, 1200.0f).sound(SoundType.ANVIL)));
        TRAPPED_CHEST = register("trapped_chest", new TrappedChestBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        LIGHT_WEIGHTED_PRESSURE_PLATE = register("light_weighted_pressure_plate", new WeightedPressurePlateBlock(15, BlockBehaviour.Properties.of(Material.METAL, MaterialColor.GOLD).requiresCorrectToolForDrops().noCollission().strength(0.5f).sound(SoundType.WOOD)));
        HEAVY_WEIGHTED_PRESSURE_PLATE = register("heavy_weighted_pressure_plate", new WeightedPressurePlateBlock(150, BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().noCollission().strength(0.5f).sound(SoundType.WOOD)));
        COMPARATOR = register("comparator", new ComparatorBlock(BlockBehaviour.Properties.of(Material.DECORATION).instabreak().sound(SoundType.WOOD)));
        DAYLIGHT_DETECTOR = register("daylight_detector", new DaylightDetectorBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(0.2f).sound(SoundType.WOOD)));
        REDSTONE_BLOCK = register("redstone_block", new PoweredBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.FIRE).requiresCorrectToolForDrops().strength(5.0f, 6.0f).sound(SoundType.METAL).isRedstoneConductor(Blocks::never)));
        NETHER_QUARTZ_ORE = register("nether_quartz_ore", new OreBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(3.0f, 3.0f).sound(SoundType.NETHER_ORE)));
        HOPPER = register("hopper", new HopperBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.STONE).requiresCorrectToolForDrops().strength(3.0f, 4.8f).sound(SoundType.METAL).noOcclusion()));
        QUARTZ_BLOCK = register("quartz_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.QUARTZ).requiresCorrectToolForDrops().strength(0.8f)));
        CHISELED_QUARTZ_BLOCK = register("chiseled_quartz_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.QUARTZ).requiresCorrectToolForDrops().strength(0.8f)));
        QUARTZ_PILLAR = register("quartz_pillar", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.QUARTZ).requiresCorrectToolForDrops().strength(0.8f)));
        QUARTZ_STAIRS = register("quartz_stairs", new StairBlock(Blocks.QUARTZ_BLOCK.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.QUARTZ_BLOCK)));
        ACTIVATOR_RAIL = register("activator_rail", new PoweredRailBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.7f).sound(SoundType.METAL)));
        DROPPER = register("dropper", new DropperBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.5f)));
        WHITE_TERRACOTTA = register("white_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_WHITE).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        ORANGE_TERRACOTTA = register("orange_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_ORANGE).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        MAGENTA_TERRACOTTA = register("magenta_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_MAGENTA).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        LIGHT_BLUE_TERRACOTTA = register("light_blue_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_LIGHT_BLUE).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        YELLOW_TERRACOTTA = register("yellow_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_YELLOW).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        LIME_TERRACOTTA = register("lime_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_LIGHT_GREEN).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        PINK_TERRACOTTA = register("pink_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_PINK).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        GRAY_TERRACOTTA = register("gray_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_GRAY).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        LIGHT_GRAY_TERRACOTTA = register("light_gray_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_LIGHT_GRAY).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        CYAN_TERRACOTTA = register("cyan_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_CYAN).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        PURPLE_TERRACOTTA = register("purple_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_PURPLE).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        BLUE_TERRACOTTA = register("blue_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_BLUE).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        BROWN_TERRACOTTA = register("brown_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_BROWN).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        GREEN_TERRACOTTA = register("green_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_GREEN).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        RED_TERRACOTTA = register("red_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_RED).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        BLACK_TERRACOTTA = register("black_terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.TERRACOTTA_BLACK).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        WHITE_STAINED_GLASS_PANE = register("white_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.WHITE, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        ORANGE_STAINED_GLASS_PANE = register("orange_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.ORANGE, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        MAGENTA_STAINED_GLASS_PANE = register("magenta_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.MAGENTA, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        LIGHT_BLUE_STAINED_GLASS_PANE = register("light_blue_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.LIGHT_BLUE, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        YELLOW_STAINED_GLASS_PANE = register("yellow_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.YELLOW, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        LIME_STAINED_GLASS_PANE = register("lime_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.LIME, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        PINK_STAINED_GLASS_PANE = register("pink_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.PINK, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        GRAY_STAINED_GLASS_PANE = register("gray_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.GRAY, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        LIGHT_GRAY_STAINED_GLASS_PANE = register("light_gray_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.LIGHT_GRAY, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        CYAN_STAINED_GLASS_PANE = register("cyan_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.CYAN, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        PURPLE_STAINED_GLASS_PANE = register("purple_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.PURPLE, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        BLUE_STAINED_GLASS_PANE = register("blue_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.BLUE, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        BROWN_STAINED_GLASS_PANE = register("brown_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.BROWN, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        GREEN_STAINED_GLASS_PANE = register("green_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.GREEN, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        RED_STAINED_GLASS_PANE = register("red_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.RED, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        BLACK_STAINED_GLASS_PANE = register("black_stained_glass_pane", new StainedGlassPaneBlock(DyeColor.BLACK, BlockBehaviour.Properties.of(Material.GLASS).strength(0.3f).sound(SoundType.GLASS).noOcclusion()));
        ACACIA_STAIRS = register("acacia_stairs", new StairBlock(Blocks.ACACIA_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.ACACIA_PLANKS)));
        DARK_OAK_STAIRS = register("dark_oak_stairs", new StairBlock(Blocks.DARK_OAK_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.DARK_OAK_PLANKS)));
        SLIME_BLOCK = register("slime_block", new SlimeBlock(BlockBehaviour.Properties.of(Material.CLAY, MaterialColor.GRASS).friction(0.8f).sound(SoundType.SLIME_BLOCK).noOcclusion()));
        BARRIER = register("barrier", new BarrierBlock(BlockBehaviour.Properties.of(Material.BARRIER).strength(-1.0f, 3600000.8f).noDrops().noOcclusion().isValidSpawn(Blocks::never)));
        IRON_TRAPDOOR = register("iron_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(5.0f).sound(SoundType.METAL).noOcclusion()));
        PRISMARINE = register("prismarine", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_CYAN).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        PRISMARINE_BRICKS = register("prismarine_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.DIAMOND).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        DARK_PRISMARINE = register("dark_prismarine", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.DIAMOND).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        PRISMARINE_STAIRS = register("prismarine_stairs", new StairBlock(Blocks.PRISMARINE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.PRISMARINE)));
        PRISMARINE_BRICK_STAIRS = register("prismarine_brick_stairs", new StairBlock(Blocks.PRISMARINE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.PRISMARINE_BRICKS)));
        DARK_PRISMARINE_STAIRS = register("dark_prismarine_stairs", new StairBlock(Blocks.DARK_PRISMARINE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.DARK_PRISMARINE)));
        PRISMARINE_SLAB = register("prismarine_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_CYAN).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        PRISMARINE_BRICK_SLAB = register("prismarine_brick_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.DIAMOND).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        DARK_PRISMARINE_SLAB = register("dark_prismarine_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.DIAMOND).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        SEA_LANTERN = register("sea_lantern", new Block(BlockBehaviour.Properties.of(Material.GLASS, MaterialColor.QUARTZ).strength(0.3f).sound(SoundType.GLASS).lightLevel(cfj -> 15)));
        HAY_BLOCK = register("hay_block", new HayBlock(BlockBehaviour.Properties.of(Material.GRASS, MaterialColor.COLOR_YELLOW).strength(0.5f).sound(SoundType.GRASS)));
        WHITE_CARPET = register("white_carpet", new WoolCarpetBlock(DyeColor.WHITE, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.SNOW).strength(0.1f).sound(SoundType.WOOL)));
        ORANGE_CARPET = register("orange_carpet", new WoolCarpetBlock(DyeColor.ORANGE, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_ORANGE).strength(0.1f).sound(SoundType.WOOL)));
        MAGENTA_CARPET = register("magenta_carpet", new WoolCarpetBlock(DyeColor.MAGENTA, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_MAGENTA).strength(0.1f).sound(SoundType.WOOL)));
        LIGHT_BLUE_CARPET = register("light_blue_carpet", new WoolCarpetBlock(DyeColor.LIGHT_BLUE, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_LIGHT_BLUE).strength(0.1f).sound(SoundType.WOOL)));
        YELLOW_CARPET = register("yellow_carpet", new WoolCarpetBlock(DyeColor.YELLOW, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_YELLOW).strength(0.1f).sound(SoundType.WOOL)));
        LIME_CARPET = register("lime_carpet", new WoolCarpetBlock(DyeColor.LIME, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_LIGHT_GREEN).strength(0.1f).sound(SoundType.WOOL)));
        PINK_CARPET = register("pink_carpet", new WoolCarpetBlock(DyeColor.PINK, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_PINK).strength(0.1f).sound(SoundType.WOOL)));
        GRAY_CARPET = register("gray_carpet", new WoolCarpetBlock(DyeColor.GRAY, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_GRAY).strength(0.1f).sound(SoundType.WOOL)));
        LIGHT_GRAY_CARPET = register("light_gray_carpet", new WoolCarpetBlock(DyeColor.LIGHT_GRAY, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_LIGHT_GRAY).strength(0.1f).sound(SoundType.WOOL)));
        CYAN_CARPET = register("cyan_carpet", new WoolCarpetBlock(DyeColor.CYAN, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_CYAN).strength(0.1f).sound(SoundType.WOOL)));
        PURPLE_CARPET = register("purple_carpet", new WoolCarpetBlock(DyeColor.PURPLE, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_PURPLE).strength(0.1f).sound(SoundType.WOOL)));
        BLUE_CARPET = register("blue_carpet", new WoolCarpetBlock(DyeColor.BLUE, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_BLUE).strength(0.1f).sound(SoundType.WOOL)));
        BROWN_CARPET = register("brown_carpet", new WoolCarpetBlock(DyeColor.BROWN, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_BROWN).strength(0.1f).sound(SoundType.WOOL)));
        GREEN_CARPET = register("green_carpet", new WoolCarpetBlock(DyeColor.GREEN, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_GREEN).strength(0.1f).sound(SoundType.WOOL)));
        RED_CARPET = register("red_carpet", new WoolCarpetBlock(DyeColor.RED, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_RED).strength(0.1f).sound(SoundType.WOOL)));
        BLACK_CARPET = register("black_carpet", new WoolCarpetBlock(DyeColor.BLACK, BlockBehaviour.Properties.of(Material.CLOTH_DECORATION, MaterialColor.COLOR_BLACK).strength(0.1f).sound(SoundType.WOOL)));
        TERRACOTTA = register("terracotta", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_ORANGE).requiresCorrectToolForDrops().strength(1.25f, 4.2f)));
        COAL_BLOCK = register("coal_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(5.0f, 6.0f)));
        PACKED_ICE = register("packed_ice", new Block(BlockBehaviour.Properties.of(Material.ICE_SOLID).friction(0.98f).strength(0.5f).sound(SoundType.GLASS)));
        SUNFLOWER = register("sunflower", new TallFlowerBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        LILAC = register("lilac", new TallFlowerBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        ROSE_BUSH = register("rose_bush", new TallFlowerBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        PEONY = register("peony", new TallFlowerBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        TALL_GRASS = register("tall_grass", new DoublePlantBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        LARGE_FERN = register("large_fern", new DoublePlantBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT).noCollission().instabreak().sound(SoundType.GRASS)));
        WHITE_BANNER = register("white_banner", new BannerBlock(DyeColor.WHITE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        ORANGE_BANNER = register("orange_banner", new BannerBlock(DyeColor.ORANGE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        MAGENTA_BANNER = register("magenta_banner", new BannerBlock(DyeColor.MAGENTA, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        LIGHT_BLUE_BANNER = register("light_blue_banner", new BannerBlock(DyeColor.LIGHT_BLUE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        YELLOW_BANNER = register("yellow_banner", new BannerBlock(DyeColor.YELLOW, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        LIME_BANNER = register("lime_banner", new BannerBlock(DyeColor.LIME, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        PINK_BANNER = register("pink_banner", new BannerBlock(DyeColor.PINK, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        GRAY_BANNER = register("gray_banner", new BannerBlock(DyeColor.GRAY, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        LIGHT_GRAY_BANNER = register("light_gray_banner", new BannerBlock(DyeColor.LIGHT_GRAY, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        CYAN_BANNER = register("cyan_banner", new BannerBlock(DyeColor.CYAN, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        PURPLE_BANNER = register("purple_banner", new BannerBlock(DyeColor.PURPLE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        BLUE_BANNER = register("blue_banner", new BannerBlock(DyeColor.BLUE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        BROWN_BANNER = register("brown_banner", new BannerBlock(DyeColor.BROWN, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        GREEN_BANNER = register("green_banner", new BannerBlock(DyeColor.GREEN, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        RED_BANNER = register("red_banner", new BannerBlock(DyeColor.RED, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        BLACK_BANNER = register("black_banner", new BannerBlock(DyeColor.BLACK, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD)));
        WHITE_WALL_BANNER = register("white_wall_banner", new WallBannerBlock(DyeColor.WHITE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.WHITE_BANNER)));
        ORANGE_WALL_BANNER = register("orange_wall_banner", new WallBannerBlock(DyeColor.ORANGE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.ORANGE_BANNER)));
        MAGENTA_WALL_BANNER = register("magenta_wall_banner", new WallBannerBlock(DyeColor.MAGENTA, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.MAGENTA_BANNER)));
        LIGHT_BLUE_WALL_BANNER = register("light_blue_wall_banner", new WallBannerBlock(DyeColor.LIGHT_BLUE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.LIGHT_BLUE_BANNER)));
        YELLOW_WALL_BANNER = register("yellow_wall_banner", new WallBannerBlock(DyeColor.YELLOW, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.YELLOW_BANNER)));
        LIME_WALL_BANNER = register("lime_wall_banner", new WallBannerBlock(DyeColor.LIME, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.LIME_BANNER)));
        PINK_WALL_BANNER = register("pink_wall_banner", new WallBannerBlock(DyeColor.PINK, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.PINK_BANNER)));
        GRAY_WALL_BANNER = register("gray_wall_banner", new WallBannerBlock(DyeColor.GRAY, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.GRAY_BANNER)));
        LIGHT_GRAY_WALL_BANNER = register("light_gray_wall_banner", new WallBannerBlock(DyeColor.LIGHT_GRAY, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.LIGHT_GRAY_BANNER)));
        CYAN_WALL_BANNER = register("cyan_wall_banner", new WallBannerBlock(DyeColor.CYAN, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.CYAN_BANNER)));
        PURPLE_WALL_BANNER = register("purple_wall_banner", new WallBannerBlock(DyeColor.PURPLE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.PURPLE_BANNER)));
        BLUE_WALL_BANNER = register("blue_wall_banner", new WallBannerBlock(DyeColor.BLUE, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.BLUE_BANNER)));
        BROWN_WALL_BANNER = register("brown_wall_banner", new WallBannerBlock(DyeColor.BROWN, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.BROWN_BANNER)));
        GREEN_WALL_BANNER = register("green_wall_banner", new WallBannerBlock(DyeColor.GREEN, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.GREEN_BANNER)));
        RED_WALL_BANNER = register("red_wall_banner", new WallBannerBlock(DyeColor.RED, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.RED_BANNER)));
        BLACK_WALL_BANNER = register("black_wall_banner", new WallBannerBlock(DyeColor.BLACK, BlockBehaviour.Properties.of(Material.WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.BLACK_BANNER)));
        RED_SANDSTONE = register("red_sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_ORANGE).requiresCorrectToolForDrops().strength(0.8f)));
        CHISELED_RED_SANDSTONE = register("chiseled_red_sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_ORANGE).requiresCorrectToolForDrops().strength(0.8f)));
        CUT_RED_SANDSTONE = register("cut_red_sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_ORANGE).requiresCorrectToolForDrops().strength(0.8f)));
        RED_SANDSTONE_STAIRS = register("red_sandstone_stairs", new StairBlock(Blocks.RED_SANDSTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.RED_SANDSTONE)));
        OAK_SLAB = register("oak_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.WOOD).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        SPRUCE_SLAB = register("spruce_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.PODZOL).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        BIRCH_SLAB = register("birch_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.SAND).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        JUNGLE_SLAB = register("jungle_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.DIRT).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        ACACIA_SLAB = register("acacia_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_ORANGE).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        DARK_OAK_SLAB = register("dark_oak_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_BROWN).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        STONE_SLAB = register("stone_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        SMOOTH_STONE_SLAB = register("smooth_stone_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        SANDSTONE_SLAB = register("sandstone_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        CUT_SANDSTONE_SLAB = register("cut_sandstone_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        PETRIFIED_OAK_SLAB = register("petrified_oak_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.WOOD).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        COBBLESTONE_SLAB = register("cobblestone_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        BRICK_SLAB = register("brick_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_RED).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        STONE_BRICK_SLAB = register("stone_brick_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        NETHER_BRICK_SLAB = register("nether_brick_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(2.0f, 6.0f).sound(SoundType.NETHER_BRICKS)));
        QUARTZ_SLAB = register("quartz_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.QUARTZ).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        RED_SANDSTONE_SLAB = register("red_sandstone_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_ORANGE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        CUT_RED_SANDSTONE_SLAB = register("cut_red_sandstone_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_ORANGE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        PURPUR_SLAB = register("purpur_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_MAGENTA).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        SMOOTH_STONE = register("smooth_stone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        SMOOTH_SANDSTONE = register("smooth_sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        SMOOTH_QUARTZ = register("smooth_quartz", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.QUARTZ).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        SMOOTH_RED_SANDSTONE = register("smooth_red_sandstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_ORANGE).requiresCorrectToolForDrops().strength(2.0f, 6.0f)));
        SPRUCE_FENCE_GATE = register("spruce_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.SPRUCE_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        BIRCH_FENCE_GATE = register("birch_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.BIRCH_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        JUNGLE_FENCE_GATE = register("jungle_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.JUNGLE_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        ACACIA_FENCE_GATE = register("acacia_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.ACACIA_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        DARK_OAK_FENCE_GATE = register("dark_oak_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.DARK_OAK_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        SPRUCE_FENCE = register("spruce_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.SPRUCE_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        BIRCH_FENCE = register("birch_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.BIRCH_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        JUNGLE_FENCE = register("jungle_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.JUNGLE_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        ACACIA_FENCE = register("acacia_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.ACACIA_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        DARK_OAK_FENCE = register("dark_oak_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.DARK_OAK_PLANKS.defaultMaterialColor()).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        SPRUCE_DOOR = register("spruce_door", new DoorBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.SPRUCE_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        BIRCH_DOOR = register("birch_door", new DoorBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.BIRCH_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        JUNGLE_DOOR = register("jungle_door", new DoorBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.JUNGLE_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        ACACIA_DOOR = register("acacia_door", new DoorBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.ACACIA_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        DARK_OAK_DOOR = register("dark_oak_door", new DoorBlock(BlockBehaviour.Properties.of(Material.WOOD, Blocks.DARK_OAK_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        END_ROD = register("end_rod", new EndRodBlock(BlockBehaviour.Properties.of(Material.DECORATION).instabreak().lightLevel(cfj -> 14).sound(SoundType.WOOD).noOcclusion()));
        CHORUS_PLANT = register("chorus_plant", new ChorusPlantBlock(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_PURPLE).strength(0.4f).sound(SoundType.WOOD).noOcclusion()));
        CHORUS_FLOWER = register("chorus_flower", new ChorusFlowerBlock((ChorusPlantBlock)Blocks.CHORUS_PLANT, BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_PURPLE).randomTicks().strength(0.4f).sound(SoundType.WOOD).noOcclusion()));
        PURPUR_BLOCK = register("purpur_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_MAGENTA).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        PURPUR_PILLAR = register("purpur_pillar", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_MAGENTA).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        PURPUR_STAIRS = register("purpur_stairs", new StairBlock(Blocks.PURPUR_BLOCK.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.PURPUR_BLOCK)));
        END_STONE_BRICKS = register("end_stone_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(3.0f, 9.0f)));
        BEETROOTS = register("beetroots", new BeetrootBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().randomTicks().instabreak().sound(SoundType.CROP)));
        GRASS_PATH = register("grass_path", new GrassPathBlock(BlockBehaviour.Properties.of(Material.DIRT).strength(0.65f).sound(SoundType.GRASS).isViewBlocking(Blocks::always)));
        END_GATEWAY = register("end_gateway", new EndGatewayBlock(BlockBehaviour.Properties.of(Material.PORTAL, MaterialColor.COLOR_BLACK).noCollission().lightLevel(cfj -> 15).strength(-1.0f, 3600000.0f).noDrops()));
        REPEATING_COMMAND_BLOCK = register("repeating_command_block", new CommandBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_PURPLE).requiresCorrectToolForDrops().strength(-1.0f, 3600000.0f).noDrops()));
        CHAIN_COMMAND_BLOCK = register("chain_command_block", new CommandBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_GREEN).requiresCorrectToolForDrops().strength(-1.0f, 3600000.0f).noDrops()));
        FROSTED_ICE = register("frosted_ice", new FrostedIceBlock(BlockBehaviour.Properties.of(Material.ICE).friction(0.98f).randomTicks().strength(0.5f).sound(SoundType.GLASS).noOcclusion().isValidSpawn((cfj, bpg, fu, aoq) -> aoq == EntityType.POLAR_BEAR)));
        MAGMA_BLOCK = register("magma_block", new MagmaBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().lightLevel(cfj -> 3).randomTicks().strength(0.5f).isValidSpawn((cfj, bpg, fu, aoq) -> aoq.fireImmune()).hasPostProcess(Blocks::always).emissiveRendering(Blocks::always)));
        NETHER_WART_BLOCK = register("nether_wart_block", new Block(BlockBehaviour.Properties.of(Material.GRASS, MaterialColor.COLOR_RED).strength(1.0f).sound(SoundType.WART_BLOCK)));
        RED_NETHER_BRICKS = register("red_nether_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(2.0f, 6.0f).sound(SoundType.NETHER_BRICKS)));
        BONE_BLOCK = register("bone_block", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.SAND).requiresCorrectToolForDrops().strength(2.0f).sound(SoundType.BONE_BLOCK)));
        STRUCTURE_VOID = register("structure_void", new StructureVoidBlock(BlockBehaviour.Properties.of(Material.STRUCTURAL_AIR).noCollission().noDrops()));
        OBSERVER = register("observer", new ObserverBlock(BlockBehaviour.Properties.of(Material.STONE).strength(3.0f).requiresCorrectToolForDrops().isRedstoneConductor(Blocks::never)));
        SHULKER_BOX = register("shulker_box", shulkerBox(null, BlockBehaviour.Properties.of(Material.SHULKER_SHELL)));
        WHITE_SHULKER_BOX = register("white_shulker_box", shulkerBox(DyeColor.WHITE, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.SNOW)));
        ORANGE_SHULKER_BOX = register("orange_shulker_box", shulkerBox(DyeColor.ORANGE, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_ORANGE)));
        MAGENTA_SHULKER_BOX = register("magenta_shulker_box", shulkerBox(DyeColor.MAGENTA, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_MAGENTA)));
        LIGHT_BLUE_SHULKER_BOX = register("light_blue_shulker_box", shulkerBox(DyeColor.LIGHT_BLUE, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_LIGHT_BLUE)));
        YELLOW_SHULKER_BOX = register("yellow_shulker_box", shulkerBox(DyeColor.YELLOW, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_YELLOW)));
        LIME_SHULKER_BOX = register("lime_shulker_box", shulkerBox(DyeColor.LIME, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_LIGHT_GREEN)));
        PINK_SHULKER_BOX = register("pink_shulker_box", shulkerBox(DyeColor.PINK, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_PINK)));
        GRAY_SHULKER_BOX = register("gray_shulker_box", shulkerBox(DyeColor.GRAY, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_GRAY)));
        LIGHT_GRAY_SHULKER_BOX = register("light_gray_shulker_box", shulkerBox(DyeColor.LIGHT_GRAY, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_LIGHT_GRAY)));
        CYAN_SHULKER_BOX = register("cyan_shulker_box", shulkerBox(DyeColor.CYAN, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_CYAN)));
        PURPLE_SHULKER_BOX = register("purple_shulker_box", shulkerBox(DyeColor.PURPLE, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.TERRACOTTA_PURPLE)));
        BLUE_SHULKER_BOX = register("blue_shulker_box", shulkerBox(DyeColor.BLUE, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_BLUE)));
        BROWN_SHULKER_BOX = register("brown_shulker_box", shulkerBox(DyeColor.BROWN, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_BROWN)));
        GREEN_SHULKER_BOX = register("green_shulker_box", shulkerBox(DyeColor.GREEN, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_GREEN)));
        RED_SHULKER_BOX = register("red_shulker_box", shulkerBox(DyeColor.RED, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_RED)));
        BLACK_SHULKER_BOX = register("black_shulker_box", shulkerBox(DyeColor.BLACK, BlockBehaviour.Properties.of(Material.SHULKER_SHELL, MaterialColor.COLOR_BLACK)));
        WHITE_GLAZED_TERRACOTTA = register("white_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.WHITE).requiresCorrectToolForDrops().strength(1.4f)));
        ORANGE_GLAZED_TERRACOTTA = register("orange_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.ORANGE).requiresCorrectToolForDrops().strength(1.4f)));
        MAGENTA_GLAZED_TERRACOTTA = register("magenta_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.MAGENTA).requiresCorrectToolForDrops().strength(1.4f)));
        LIGHT_BLUE_GLAZED_TERRACOTTA = register("light_blue_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.LIGHT_BLUE).requiresCorrectToolForDrops().strength(1.4f)));
        YELLOW_GLAZED_TERRACOTTA = register("yellow_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.YELLOW).requiresCorrectToolForDrops().strength(1.4f)));
        LIME_GLAZED_TERRACOTTA = register("lime_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.LIME).requiresCorrectToolForDrops().strength(1.4f)));
        PINK_GLAZED_TERRACOTTA = register("pink_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.PINK).requiresCorrectToolForDrops().strength(1.4f)));
        GRAY_GLAZED_TERRACOTTA = register("gray_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.GRAY).requiresCorrectToolForDrops().strength(1.4f)));
        LIGHT_GRAY_GLAZED_TERRACOTTA = register("light_gray_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.LIGHT_GRAY).requiresCorrectToolForDrops().strength(1.4f)));
        CYAN_GLAZED_TERRACOTTA = register("cyan_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.CYAN).requiresCorrectToolForDrops().strength(1.4f)));
        PURPLE_GLAZED_TERRACOTTA = register("purple_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.PURPLE).requiresCorrectToolForDrops().strength(1.4f)));
        BLUE_GLAZED_TERRACOTTA = register("blue_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.BLUE).requiresCorrectToolForDrops().strength(1.4f)));
        BROWN_GLAZED_TERRACOTTA = register("brown_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.BROWN).requiresCorrectToolForDrops().strength(1.4f)));
        GREEN_GLAZED_TERRACOTTA = register("green_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.GREEN).requiresCorrectToolForDrops().strength(1.4f)));
        RED_GLAZED_TERRACOTTA = register("red_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.RED).requiresCorrectToolForDrops().strength(1.4f)));
        BLACK_GLAZED_TERRACOTTA = register("black_glazed_terracotta", new GlazedTerracottaBlock(BlockBehaviour.Properties.of(Material.STONE, DyeColor.BLACK).requiresCorrectToolForDrops().strength(1.4f)));
        WHITE_CONCRETE = register("white_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.WHITE).requiresCorrectToolForDrops().strength(1.8f)));
        ORANGE_CONCRETE = register("orange_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.ORANGE).requiresCorrectToolForDrops().strength(1.8f)));
        MAGENTA_CONCRETE = register("magenta_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.MAGENTA).requiresCorrectToolForDrops().strength(1.8f)));
        LIGHT_BLUE_CONCRETE = register("light_blue_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.LIGHT_BLUE).requiresCorrectToolForDrops().strength(1.8f)));
        YELLOW_CONCRETE = register("yellow_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.YELLOW).requiresCorrectToolForDrops().strength(1.8f)));
        LIME_CONCRETE = register("lime_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.LIME).requiresCorrectToolForDrops().strength(1.8f)));
        PINK_CONCRETE = register("pink_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.PINK).requiresCorrectToolForDrops().strength(1.8f)));
        GRAY_CONCRETE = register("gray_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.GRAY).requiresCorrectToolForDrops().strength(1.8f)));
        LIGHT_GRAY_CONCRETE = register("light_gray_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.LIGHT_GRAY).requiresCorrectToolForDrops().strength(1.8f)));
        CYAN_CONCRETE = register("cyan_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.CYAN).requiresCorrectToolForDrops().strength(1.8f)));
        PURPLE_CONCRETE = register("purple_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.PURPLE).requiresCorrectToolForDrops().strength(1.8f)));
        BLUE_CONCRETE = register("blue_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.BLUE).requiresCorrectToolForDrops().strength(1.8f)));
        BROWN_CONCRETE = register("brown_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.BROWN).requiresCorrectToolForDrops().strength(1.8f)));
        GREEN_CONCRETE = register("green_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.GREEN).requiresCorrectToolForDrops().strength(1.8f)));
        RED_CONCRETE = register("red_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.RED).requiresCorrectToolForDrops().strength(1.8f)));
        BLACK_CONCRETE = register("black_concrete", new Block(BlockBehaviour.Properties.of(Material.STONE, DyeColor.BLACK).requiresCorrectToolForDrops().strength(1.8f)));
        WHITE_CONCRETE_POWDER = register("white_concrete_powder", new ConcretePowderBlock(Blocks.WHITE_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.WHITE).strength(0.5f).sound(SoundType.SAND)));
        ORANGE_CONCRETE_POWDER = register("orange_concrete_powder", new ConcretePowderBlock(Blocks.ORANGE_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.ORANGE).strength(0.5f).sound(SoundType.SAND)));
        MAGENTA_CONCRETE_POWDER = register("magenta_concrete_powder", new ConcretePowderBlock(Blocks.MAGENTA_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.MAGENTA).strength(0.5f).sound(SoundType.SAND)));
        LIGHT_BLUE_CONCRETE_POWDER = register("light_blue_concrete_powder", new ConcretePowderBlock(Blocks.LIGHT_BLUE_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.LIGHT_BLUE).strength(0.5f).sound(SoundType.SAND)));
        YELLOW_CONCRETE_POWDER = register("yellow_concrete_powder", new ConcretePowderBlock(Blocks.YELLOW_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.YELLOW).strength(0.5f).sound(SoundType.SAND)));
        LIME_CONCRETE_POWDER = register("lime_concrete_powder", new ConcretePowderBlock(Blocks.LIME_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.LIME).strength(0.5f).sound(SoundType.SAND)));
        PINK_CONCRETE_POWDER = register("pink_concrete_powder", new ConcretePowderBlock(Blocks.PINK_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.PINK).strength(0.5f).sound(SoundType.SAND)));
        GRAY_CONCRETE_POWDER = register("gray_concrete_powder", new ConcretePowderBlock(Blocks.GRAY_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.GRAY).strength(0.5f).sound(SoundType.SAND)));
        LIGHT_GRAY_CONCRETE_POWDER = register("light_gray_concrete_powder", new ConcretePowderBlock(Blocks.LIGHT_GRAY_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.LIGHT_GRAY).strength(0.5f).sound(SoundType.SAND)));
        CYAN_CONCRETE_POWDER = register("cyan_concrete_powder", new ConcretePowderBlock(Blocks.CYAN_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.CYAN).strength(0.5f).sound(SoundType.SAND)));
        PURPLE_CONCRETE_POWDER = register("purple_concrete_powder", new ConcretePowderBlock(Blocks.PURPLE_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.PURPLE).strength(0.5f).sound(SoundType.SAND)));
        BLUE_CONCRETE_POWDER = register("blue_concrete_powder", new ConcretePowderBlock(Blocks.BLUE_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.BLUE).strength(0.5f).sound(SoundType.SAND)));
        BROWN_CONCRETE_POWDER = register("brown_concrete_powder", new ConcretePowderBlock(Blocks.BROWN_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.BROWN).strength(0.5f).sound(SoundType.SAND)));
        GREEN_CONCRETE_POWDER = register("green_concrete_powder", new ConcretePowderBlock(Blocks.GREEN_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.GREEN).strength(0.5f).sound(SoundType.SAND)));
        RED_CONCRETE_POWDER = register("red_concrete_powder", new ConcretePowderBlock(Blocks.RED_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.RED).strength(0.5f).sound(SoundType.SAND)));
        BLACK_CONCRETE_POWDER = register("black_concrete_powder", new ConcretePowderBlock(Blocks.BLACK_CONCRETE, BlockBehaviour.Properties.of(Material.SAND, DyeColor.BLACK).strength(0.5f).sound(SoundType.SAND)));
        KELP = register("kelp", new KelpBlock(BlockBehaviour.Properties.of(Material.WATER_PLANT).noCollission().randomTicks().instabreak().sound(SoundType.WET_GRASS)));
        KELP_PLANT = register("kelp_plant", new KelpPlantBlock(BlockBehaviour.Properties.of(Material.WATER_PLANT).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        DRIED_KELP_BLOCK = register("dried_kelp_block", new Block(BlockBehaviour.Properties.of(Material.GRASS, MaterialColor.COLOR_GREEN).strength(0.5f, 2.5f).sound(SoundType.GRASS)));
        TURTLE_EGG = register("turtle_egg", new TurtleEggBlock(BlockBehaviour.Properties.of(Material.EGG, MaterialColor.SAND).strength(0.5f).sound(SoundType.METAL).randomTicks().noOcclusion()));
        DEAD_TUBE_CORAL_BLOCK = register("dead_tube_coral_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        DEAD_BRAIN_CORAL_BLOCK = register("dead_brain_coral_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        DEAD_BUBBLE_CORAL_BLOCK = register("dead_bubble_coral_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        DEAD_FIRE_CORAL_BLOCK = register("dead_fire_coral_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        DEAD_HORN_CORAL_BLOCK = register("dead_horn_coral_block", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        TUBE_CORAL_BLOCK = register("tube_coral_block", new CoralBlock(Blocks.DEAD_TUBE_CORAL_BLOCK, BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLUE).requiresCorrectToolForDrops().strength(1.5f, 6.0f).sound(SoundType.CORAL_BLOCK)));
        BRAIN_CORAL_BLOCK = register("brain_coral_block", new CoralBlock(Blocks.DEAD_BRAIN_CORAL_BLOCK, BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_PINK).requiresCorrectToolForDrops().strength(1.5f, 6.0f).sound(SoundType.CORAL_BLOCK)));
        BUBBLE_CORAL_BLOCK = register("bubble_coral_block", new CoralBlock(Blocks.DEAD_BUBBLE_CORAL_BLOCK, BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_PURPLE).requiresCorrectToolForDrops().strength(1.5f, 6.0f).sound(SoundType.CORAL_BLOCK)));
        FIRE_CORAL_BLOCK = register("fire_coral_block", new CoralBlock(Blocks.DEAD_FIRE_CORAL_BLOCK, BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_RED).requiresCorrectToolForDrops().strength(1.5f, 6.0f).sound(SoundType.CORAL_BLOCK)));
        HORN_CORAL_BLOCK = register("horn_coral_block", new CoralBlock(Blocks.DEAD_HORN_CORAL_BLOCK, BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_YELLOW).requiresCorrectToolForDrops().strength(1.5f, 6.0f).sound(SoundType.CORAL_BLOCK)));
        DEAD_TUBE_CORAL = register("dead_tube_coral", new BaseCoralPlantBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_BRAIN_CORAL = register("dead_brain_coral", new BaseCoralPlantBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_BUBBLE_CORAL = register("dead_bubble_coral", new BaseCoralPlantBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_FIRE_CORAL = register("dead_fire_coral", new BaseCoralPlantBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_HORN_CORAL = register("dead_horn_coral", new BaseCoralPlantBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        TUBE_CORAL = register("tube_coral", new CoralPlantBlock(Blocks.DEAD_TUBE_CORAL, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_BLUE).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        BRAIN_CORAL = register("brain_coral", new CoralPlantBlock(Blocks.DEAD_BRAIN_CORAL, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_PINK).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        BUBBLE_CORAL = register("bubble_coral", new CoralPlantBlock(Blocks.DEAD_BUBBLE_CORAL, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_PURPLE).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        FIRE_CORAL = register("fire_coral", new CoralPlantBlock(Blocks.DEAD_FIRE_CORAL, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_RED).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        HORN_CORAL = register("horn_coral", new CoralPlantBlock(Blocks.DEAD_HORN_CORAL, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_YELLOW).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        DEAD_TUBE_CORAL_FAN = register("dead_tube_coral_fan", new BaseCoralFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_BRAIN_CORAL_FAN = register("dead_brain_coral_fan", new BaseCoralFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_BUBBLE_CORAL_FAN = register("dead_bubble_coral_fan", new BaseCoralFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_FIRE_CORAL_FAN = register("dead_fire_coral_fan", new BaseCoralFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        DEAD_HORN_CORAL_FAN = register("dead_horn_coral_fan", new BaseCoralFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak()));
        TUBE_CORAL_FAN = register("tube_coral_fan", new CoralFanBlock(Blocks.DEAD_TUBE_CORAL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_BLUE).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        BRAIN_CORAL_FAN = register("brain_coral_fan", new CoralFanBlock(Blocks.DEAD_BRAIN_CORAL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_PINK).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        BUBBLE_CORAL_FAN = register("bubble_coral_fan", new CoralFanBlock(Blocks.DEAD_BUBBLE_CORAL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_PURPLE).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        FIRE_CORAL_FAN = register("fire_coral_fan", new CoralFanBlock(Blocks.DEAD_FIRE_CORAL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_RED).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        HORN_CORAL_FAN = register("horn_coral_fan", new CoralFanBlock(Blocks.DEAD_HORN_CORAL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_YELLOW).noCollission().instabreak().sound(SoundType.WET_GRASS)));
        DEAD_TUBE_CORAL_WALL_FAN = register("dead_tube_coral_wall_fan", new BaseCoralWallFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak().dropsLike(Blocks.DEAD_TUBE_CORAL_FAN)));
        DEAD_BRAIN_CORAL_WALL_FAN = register("dead_brain_coral_wall_fan", new BaseCoralWallFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak().dropsLike(Blocks.DEAD_BRAIN_CORAL_FAN)));
        DEAD_BUBBLE_CORAL_WALL_FAN = register("dead_bubble_coral_wall_fan", new BaseCoralWallFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak().dropsLike(Blocks.DEAD_BUBBLE_CORAL_FAN)));
        DEAD_FIRE_CORAL_WALL_FAN = register("dead_fire_coral_wall_fan", new BaseCoralWallFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak().dropsLike(Blocks.DEAD_FIRE_CORAL_FAN)));
        DEAD_HORN_CORAL_WALL_FAN = register("dead_horn_coral_wall_fan", new BaseCoralWallFanBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_GRAY).requiresCorrectToolForDrops().noCollission().instabreak().dropsLike(Blocks.DEAD_HORN_CORAL_FAN)));
        TUBE_CORAL_WALL_FAN = register("tube_coral_wall_fan", new CoralWallFanBlock(Blocks.DEAD_TUBE_CORAL_WALL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_BLUE).noCollission().instabreak().sound(SoundType.WET_GRASS).dropsLike(Blocks.TUBE_CORAL_FAN)));
        BRAIN_CORAL_WALL_FAN = register("brain_coral_wall_fan", new CoralWallFanBlock(Blocks.DEAD_BRAIN_CORAL_WALL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_PINK).noCollission().instabreak().sound(SoundType.WET_GRASS).dropsLike(Blocks.BRAIN_CORAL_FAN)));
        BUBBLE_CORAL_WALL_FAN = register("bubble_coral_wall_fan", new CoralWallFanBlock(Blocks.DEAD_BUBBLE_CORAL_WALL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_PURPLE).noCollission().instabreak().sound(SoundType.WET_GRASS).dropsLike(Blocks.BUBBLE_CORAL_FAN)));
        FIRE_CORAL_WALL_FAN = register("fire_coral_wall_fan", new CoralWallFanBlock(Blocks.DEAD_FIRE_CORAL_WALL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_RED).noCollission().instabreak().sound(SoundType.WET_GRASS).dropsLike(Blocks.FIRE_CORAL_FAN)));
        HORN_CORAL_WALL_FAN = register("horn_coral_wall_fan", new CoralWallFanBlock(Blocks.DEAD_HORN_CORAL_WALL_FAN, BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_YELLOW).noCollission().instabreak().sound(SoundType.WET_GRASS).dropsLike(Blocks.HORN_CORAL_FAN)));
        SEA_PICKLE = register("sea_pickle", new SeaPickleBlock(BlockBehaviour.Properties.of(Material.WATER_PLANT, MaterialColor.COLOR_GREEN).lightLevel(cfj -> SeaPickleBlock.isDead(cfj) ? 0 : (3 + 3 * cfj.<Integer>getValue((Property<Integer>)SeaPickleBlock.PICKLES))).sound(SoundType.SLIME_BLOCK).noOcclusion()));
        BLUE_ICE = register("blue_ice", new HalfTransparentBlock(BlockBehaviour.Properties.of(Material.ICE_SOLID).strength(2.8f).friction(0.989f).sound(SoundType.GLASS)));
        CONDUIT = register("conduit", new ConduitBlock(BlockBehaviour.Properties.of(Material.GLASS, MaterialColor.DIAMOND).strength(3.0f).lightLevel(cfj -> 15).noOcclusion()));
        BAMBOO_SAPLING = register("bamboo_sapling", new BambooSaplingBlock(BlockBehaviour.Properties.of(Material.BAMBOO_SAPLING).randomTicks().instabreak().noCollission().strength(1.0f).sound(SoundType.BAMBOO_SAPLING)));
        BAMBOO = register("bamboo", new BambooBlock(BlockBehaviour.Properties.of(Material.BAMBOO, MaterialColor.PLANT).randomTicks().instabreak().strength(1.0f).sound(SoundType.BAMBOO).noOcclusion()));
        POTTED_BAMBOO = register("potted_bamboo", new FlowerPotBlock(Blocks.BAMBOO, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        VOID_AIR = register("void_air", new AirBlock(BlockBehaviour.Properties.of(Material.AIR).noCollission().noDrops().air()));
        CAVE_AIR = register("cave_air", new AirBlock(BlockBehaviour.Properties.of(Material.AIR).noCollission().noDrops().air()));
        BUBBLE_COLUMN = register("bubble_column", new BubbleColumnBlock(BlockBehaviour.Properties.of(Material.BUBBLE_COLUMN).noCollission().noDrops()));
        POLISHED_GRANITE_STAIRS = register("polished_granite_stairs", new StairBlock(Blocks.POLISHED_GRANITE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_GRANITE)));
        SMOOTH_RED_SANDSTONE_STAIRS = register("smooth_red_sandstone_stairs", new StairBlock(Blocks.SMOOTH_RED_SANDSTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.SMOOTH_RED_SANDSTONE)));
        MOSSY_STONE_BRICK_STAIRS = register("mossy_stone_brick_stairs", new StairBlock(Blocks.MOSSY_STONE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.MOSSY_STONE_BRICKS)));
        POLISHED_DIORITE_STAIRS = register("polished_diorite_stairs", new StairBlock(Blocks.POLISHED_DIORITE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_DIORITE)));
        MOSSY_COBBLESTONE_STAIRS = register("mossy_cobblestone_stairs", new StairBlock(Blocks.MOSSY_COBBLESTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.MOSSY_COBBLESTONE)));
        END_STONE_BRICK_STAIRS = register("end_stone_brick_stairs", new StairBlock(Blocks.END_STONE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.END_STONE_BRICKS)));
        STONE_STAIRS = register("stone_stairs", new StairBlock(Blocks.STONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.STONE)));
        SMOOTH_SANDSTONE_STAIRS = register("smooth_sandstone_stairs", new StairBlock(Blocks.SMOOTH_SANDSTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.SMOOTH_SANDSTONE)));
        SMOOTH_QUARTZ_STAIRS = register("smooth_quartz_stairs", new StairBlock(Blocks.SMOOTH_QUARTZ.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.SMOOTH_QUARTZ)));
        GRANITE_STAIRS = register("granite_stairs", new StairBlock(Blocks.GRANITE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.GRANITE)));
        ANDESITE_STAIRS = register("andesite_stairs", new StairBlock(Blocks.ANDESITE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.ANDESITE)));
        RED_NETHER_BRICK_STAIRS = register("red_nether_brick_stairs", new StairBlock(Blocks.RED_NETHER_BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.RED_NETHER_BRICKS)));
        POLISHED_ANDESITE_STAIRS = register("polished_andesite_stairs", new StairBlock(Blocks.POLISHED_ANDESITE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_ANDESITE)));
        DIORITE_STAIRS = register("diorite_stairs", new StairBlock(Blocks.DIORITE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.DIORITE)));
        POLISHED_GRANITE_SLAB = register("polished_granite_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_GRANITE)));
        SMOOTH_RED_SANDSTONE_SLAB = register("smooth_red_sandstone_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.SMOOTH_RED_SANDSTONE)));
        MOSSY_STONE_BRICK_SLAB = register("mossy_stone_brick_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.MOSSY_STONE_BRICKS)));
        POLISHED_DIORITE_SLAB = register("polished_diorite_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_DIORITE)));
        MOSSY_COBBLESTONE_SLAB = register("mossy_cobblestone_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.MOSSY_COBBLESTONE)));
        END_STONE_BRICK_SLAB = register("end_stone_brick_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.END_STONE_BRICKS)));
        SMOOTH_SANDSTONE_SLAB = register("smooth_sandstone_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.SMOOTH_SANDSTONE)));
        SMOOTH_QUARTZ_SLAB = register("smooth_quartz_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.SMOOTH_QUARTZ)));
        GRANITE_SLAB = register("granite_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.GRANITE)));
        ANDESITE_SLAB = register("andesite_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.ANDESITE)));
        RED_NETHER_BRICK_SLAB = register("red_nether_brick_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.RED_NETHER_BRICKS)));
        POLISHED_ANDESITE_SLAB = register("polished_andesite_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_ANDESITE)));
        DIORITE_SLAB = register("diorite_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.DIORITE)));
        BRICK_WALL = register("brick_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.BRICKS)));
        PRISMARINE_WALL = register("prismarine_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.PRISMARINE)));
        RED_SANDSTONE_WALL = register("red_sandstone_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.RED_SANDSTONE)));
        MOSSY_STONE_BRICK_WALL = register("mossy_stone_brick_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.MOSSY_STONE_BRICKS)));
        GRANITE_WALL = register("granite_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.GRANITE)));
        STONE_BRICK_WALL = register("stone_brick_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.STONE_BRICKS)));
        NETHER_BRICK_WALL = register("nether_brick_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.NETHER_BRICKS)));
        ANDESITE_WALL = register("andesite_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.ANDESITE)));
        RED_NETHER_BRICK_WALL = register("red_nether_brick_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.RED_NETHER_BRICKS)));
        SANDSTONE_WALL = register("sandstone_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.SANDSTONE)));
        END_STONE_BRICK_WALL = register("end_stone_brick_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.END_STONE_BRICKS)));
        DIORITE_WALL = register("diorite_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.DIORITE)));
        SCAFFOLDING = register("scaffolding", new ScaffoldingBlock(BlockBehaviour.Properties.of(Material.DECORATION, MaterialColor.SAND).noCollission().sound(SoundType.SCAFFOLDING).dynamicShape()));
        LOOM = register("loom", new LoomBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        BARREL = register("barrel", new BarrelBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        SMOKER = register("smoker", new SmokerBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.5f).lightLevel(litBlockEmission(13))));
        BLAST_FURNACE = register("blast_furnace", new BlastFurnaceBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.5f).lightLevel(litBlockEmission(13))));
        CARTOGRAPHY_TABLE = register("cartography_table", new CartographyTableBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        FLETCHING_TABLE = register("fletching_table", new FletchingTableBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        GRINDSTONE = register("grindstone", new GrindstoneBlock(BlockBehaviour.Properties.of(Material.HEAVY_METAL, MaterialColor.METAL).requiresCorrectToolForDrops().strength(2.0f, 6.0f).sound(SoundType.STONE)));
        LECTERN = register("lectern", new LecternBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        SMITHING_TABLE = register("smithing_table", new SmithingTableBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(2.5f).sound(SoundType.WOOD)));
        STONECUTTER = register("stonecutter", new StonecutterBlock(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(3.5f)));
        BELL = register("bell", new BellBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.GOLD).requiresCorrectToolForDrops().strength(5.0f).sound(SoundType.ANVIL)));
        LANTERN = register("lantern", new Lantern(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(3.5f).sound(SoundType.LANTERN).lightLevel(cfj -> 15).noOcclusion()));
        SOUL_LANTERN = register("soul_lantern", new Lantern(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(3.5f).sound(SoundType.LANTERN).lightLevel(cfj -> 10).noOcclusion()));
        CAMPFIRE = register("campfire", new CampfireBlock(true, 1, BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.PODZOL).strength(2.0f).sound(SoundType.WOOD).lightLevel(litBlockEmission(15)).noOcclusion()));
        SOUL_CAMPFIRE = register("soul_campfire", new CampfireBlock(false, 2, BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.PODZOL).strength(2.0f).sound(SoundType.WOOD).lightLevel(litBlockEmission(10)).noOcclusion()));
        SWEET_BERRY_BUSH = register("sweet_berry_bush", new SweetBerryBushBlock(BlockBehaviour.Properties.of(Material.PLANT).randomTicks().noCollission().sound(SoundType.SWEET_BERRY_BUSH)));
        WARPED_STEM = register("warped_stem", netherStem(MaterialColor.WARPED_STEM));
        STRIPPED_WARPED_STEM = register("stripped_warped_stem", netherStem(MaterialColor.WARPED_STEM));
        WARPED_HYPHAE = register("warped_hyphae", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.WARPED_HYPHAE).strength(2.0f).sound(SoundType.STEM)));
        STRIPPED_WARPED_HYPHAE = register("stripped_warped_hyphae", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.WARPED_HYPHAE).strength(2.0f).sound(SoundType.STEM)));
        WARPED_NYLIUM = register("warped_nylium", new NyliumBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.WARPED_NYLIUM).requiresCorrectToolForDrops().strength(0.4f).sound(SoundType.NYLIUM).randomTicks()));
        WARPED_FUNGUS = register("warped_fungus", new FungusBlock(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_CYAN).instabreak().noCollission().sound(SoundType.FUNGUS), () -> Feature.HUGE_FUNGUS.configured(HugeFungusConfiguration.HUGE_WARPED_FUNGI_PLANTED_CONFIG)));
        WARPED_WART_BLOCK = register("warped_wart_block", new Block(BlockBehaviour.Properties.of(Material.GRASS, MaterialColor.WARPED_WART_BLOCK).strength(1.0f).sound(SoundType.WART_BLOCK)));
        WARPED_ROOTS = register("warped_roots", new RootsBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT, MaterialColor.COLOR_CYAN).noCollission().instabreak().sound(SoundType.ROOTS)));
        NETHER_SPROUTS = register("nether_sprouts", new NetherSproutsBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT, MaterialColor.COLOR_CYAN).noCollission().instabreak().sound(SoundType.NETHER_SPROUTS)));
        CRIMSON_STEM = register("crimson_stem", netherStem(MaterialColor.CRIMSON_STEM));
        STRIPPED_CRIMSON_STEM = register("stripped_crimson_stem", netherStem(MaterialColor.CRIMSON_STEM));
        CRIMSON_HYPHAE = register("crimson_hyphae", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.CRIMSON_HYPHAE).strength(2.0f).sound(SoundType.STEM)));
        STRIPPED_CRIMSON_HYPHAE = register("stripped_crimson_hyphae", new RotatedPillarBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.CRIMSON_HYPHAE).strength(2.0f).sound(SoundType.STEM)));
        CRIMSON_NYLIUM = register("crimson_nylium", new NyliumBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.CRIMSON_NYLIUM).requiresCorrectToolForDrops().strength(0.4f).sound(SoundType.NYLIUM).randomTicks()));
        CRIMSON_FUNGUS = register("crimson_fungus", new FungusBlock(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.NETHER).instabreak().noCollission().sound(SoundType.FUNGUS), () -> Feature.HUGE_FUNGUS.configured(HugeFungusConfiguration.HUGE_CRIMSON_FUNGI_PLANTED_CONFIG)));
        SHROOMLIGHT = register("shroomlight", new Block(BlockBehaviour.Properties.of(Material.GRASS, MaterialColor.COLOR_RED).strength(1.0f).sound(SoundType.SHROOMLIGHT).lightLevel(cfj -> 15)));
        WEEPING_VINES = register("weeping_vines", new WeepingVines(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.NETHER).randomTicks().noCollission().instabreak().sound(SoundType.WEEPING_VINES)));
        WEEPING_VINES_PLANT = register("weeping_vines_plant", new WeepingVinesPlant(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.NETHER).noCollission().instabreak().sound(SoundType.WEEPING_VINES)));
        TWISTING_VINES = register("twisting_vines", new TwistingVines(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_CYAN).randomTicks().noCollission().instabreak().sound(SoundType.WEEPING_VINES)));
        TWISTING_VINES_PLANT = register("twisting_vines_plant", new TwistingVinesPlant(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_CYAN).noCollission().instabreak().sound(SoundType.WEEPING_VINES)));
        CRIMSON_ROOTS = register("crimson_roots", new RootsBlock(BlockBehaviour.Properties.of(Material.REPLACEABLE_PLANT, MaterialColor.NETHER).noCollission().instabreak().sound(SoundType.ROOTS)));
        CRIMSON_PLANKS = register("crimson_planks", new Block(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.CRIMSON_STEM).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        WARPED_PLANKS = register("warped_planks", new Block(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.WARPED_STEM).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        CRIMSON_SLAB = register("crimson_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.NETHER).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        WARPED_SLAB = register("warped_slab", new SlabBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.COLOR_CYAN).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        CRIMSON_PRESSURE_PLATE = register("crimson_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.NETHER).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        WARPED_PRESSURE_PLATE = register("warped_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.COLOR_CYAN).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        CRIMSON_FENCE = register("crimson_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.NETHER).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        WARPED_FENCE = register("warped_fence", new FenceBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.COLOR_CYAN).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        CRIMSON_TRAPDOOR = register("crimson_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.NETHER).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        WARPED_TRAPDOOR = register("warped_trapdoor", new TrapDoorBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.COLOR_CYAN).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        CRIMSON_FENCE_GATE = register("crimson_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.NETHER).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        WARPED_FENCE_GATE = register("warped_fence_gate", new FenceGateBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.COLOR_CYAN).strength(2.0f, 3.0f).sound(SoundType.WOOD)));
        CRIMSON_STAIRS = register("crimson_stairs", new StairBlock(Blocks.CRIMSON_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.CRIMSON_PLANKS)));
        WARPED_STAIRS = register("warped_stairs", new StairBlock(Blocks.WARPED_PLANKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.WARPED_PLANKS)));
        CRIMSON_BUTTON = register("crimson_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        WARPED_BUTTON = register("warped_button", new WoodButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f).sound(SoundType.WOOD)));
        CRIMSON_DOOR = register("crimson_door", new DoorBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, Blocks.CRIMSON_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        WARPED_DOOR = register("warped_door", new DoorBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, Blocks.WARPED_PLANKS.defaultMaterialColor()).strength(3.0f).sound(SoundType.WOOD).noOcclusion()));
        CRIMSON_SIGN = register("crimson_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.NETHER).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.CRIMSON));
        WARPED_SIGN = register("warped_sign", new StandingSignBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD, MaterialColor.COLOR_CYAN).noCollission().strength(1.0f).sound(SoundType.WOOD), WoodType.WARPED));
        CRIMSON_WALL_SIGN = register("crimson_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.CRIMSON_SIGN), WoodType.CRIMSON));
        WARPED_WALL_SIGN = register("warped_wall_sign", new WallSignBlock(BlockBehaviour.Properties.of(Material.NETHER_WOOD).noCollission().strength(1.0f).sound(SoundType.WOOD).dropsLike(Blocks.WARPED_SIGN), WoodType.WARPED));
        STRUCTURE_BLOCK = register("structure_block", new StructureBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_LIGHT_GRAY).requiresCorrectToolForDrops().strength(-1.0f, 3600000.0f).noDrops()));
        JIGSAW = register("jigsaw", new JigsawBlock(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_LIGHT_GRAY).requiresCorrectToolForDrops().strength(-1.0f, 3600000.0f).noDrops()));
        COMPOSTER = register("composter", new ComposterBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(0.6f).sound(SoundType.WOOD)));
        TARGET = register("target", new TargetBlock(BlockBehaviour.Properties.of(Material.GRASS, MaterialColor.QUARTZ).strength(0.5f).sound(SoundType.GRASS)));
        BEE_NEST = register("bee_nest", new BeehiveBlock(BlockBehaviour.Properties.of(Material.WOOD, MaterialColor.COLOR_YELLOW).strength(0.3f).sound(SoundType.WOOD)));
        BEEHIVE = register("beehive", new BeehiveBlock(BlockBehaviour.Properties.of(Material.WOOD).strength(0.6f).sound(SoundType.WOOD)));
        HONEY_BLOCK = register("honey_block", new HoneyBlock(BlockBehaviour.Properties.of(Material.CLAY, MaterialColor.COLOR_ORANGE).speedFactor(0.4f).jumpFactor(0.5f).noOcclusion().sound(SoundType.HONEY_BLOCK)));
        HONEYCOMB_BLOCK = register("honeycomb_block", new Block(BlockBehaviour.Properties.of(Material.CLAY, MaterialColor.COLOR_ORANGE).strength(0.6f).sound(SoundType.CORAL_BLOCK)));
        NETHERITE_BLOCK = register("netherite_block", new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(50.0f, 1200.0f).sound(SoundType.NETHERITE_BLOCK)));
        ANCIENT_DEBRIS = register("ancient_debris", new Block(BlockBehaviour.Properties.of(Material.METAL, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(30.0f, 1200.0f).sound(SoundType.ANCIENT_DEBRIS)));
        CRYING_OBSIDIAN = register("crying_obsidian", new CryingObsidianBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(50.0f, 1200.0f).lightLevel(cfj -> 10)));
        RESPAWN_ANCHOR = register("respawn_anchor", new RespawnAnchorBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(50.0f, 1200.0f).lightLevel(cfj -> RespawnAnchorBlock.getScaledChargeLevel(cfj, 15))));
        POTTED_CRIMSON_FUNGUS = register("potted_crimson_fungus", new FlowerPotBlock(Blocks.CRIMSON_FUNGUS, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_WARPED_FUNGUS = register("potted_warped_fungus", new FlowerPotBlock(Blocks.WARPED_FUNGUS, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_CRIMSON_ROOTS = register("potted_crimson_roots", new FlowerPotBlock(Blocks.CRIMSON_ROOTS, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        POTTED_WARPED_ROOTS = register("potted_warped_roots", new FlowerPotBlock(Blocks.WARPED_ROOTS, BlockBehaviour.Properties.of(Material.DECORATION).instabreak().noOcclusion()));
        LODESTONE = register("lodestone", new Block(BlockBehaviour.Properties.of(Material.HEAVY_METAL).requiresCorrectToolForDrops().strength(3.5f).sound(SoundType.LODESTONE)));
        BLACKSTONE = register("blackstone", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().strength(1.5f, 6.0f)));
        BLACKSTONE_STAIRS = register("blackstone_stairs", new StairBlock(Blocks.BLACKSTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.BLACKSTONE)));
        BLACKSTONE_WALL = register("blackstone_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE)));
        BLACKSTONE_SLAB = register("blackstone_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE).strength(2.0f, 6.0f)));
        POLISHED_BLACKSTONE = register("polished_blackstone", new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE).strength(2.0f, 6.0f)));
        POLISHED_BLACKSTONE_BRICKS = register("polished_blackstone_bricks", new Block(BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE).strength(1.5f, 6.0f)));
        CRACKED_POLISHED_BLACKSTONE_BRICKS = register("cracked_polished_blackstone_bricks", new Block(BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE_BRICKS)));
        CHISELED_POLISHED_BLACKSTONE = register("chiseled_polished_blackstone", new Block(BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE).strength(1.5f, 6.0f)));
        POLISHED_BLACKSTONE_BRICK_SLAB = register("polished_blackstone_brick_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE_BRICKS).strength(2.0f, 6.0f)));
        POLISHED_BLACKSTONE_BRICK_STAIRS = register("polished_blackstone_brick_stairs", new StairBlock(Blocks.POLISHED_BLACKSTONE_BRICKS.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE_BRICKS)));
        POLISHED_BLACKSTONE_BRICK_WALL = register("polished_blackstone_brick_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE_BRICKS)));
        GILDED_BLACKSTONE = register("gilded_blackstone", new Block(BlockBehaviour.Properties.copy(Blocks.BLACKSTONE).sound(SoundType.GILDED_BLACKSTONE)));
        POLISHED_BLACKSTONE_STAIRS = register("polished_blackstone_stairs", new StairBlock(Blocks.POLISHED_BLACKSTONE.defaultBlockState(), BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE)));
        POLISHED_BLACKSTONE_SLAB = register("polished_blackstone_slab", new SlabBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE)));
        POLISHED_BLACKSTONE_PRESSURE_PLATE = register("polished_blackstone_pressure_plate", new PressurePlateBlock(PressurePlateBlock.Sensitivity.MOBS, BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).requiresCorrectToolForDrops().noCollission().strength(0.5f)));
        POLISHED_BLACKSTONE_BUTTON = register("polished_blackstone_button", new StoneButtonBlock(BlockBehaviour.Properties.of(Material.DECORATION).noCollission().strength(0.5f)));
        POLISHED_BLACKSTONE_WALL = register("polished_blackstone_wall", new WallBlock(BlockBehaviour.Properties.copy(Blocks.POLISHED_BLACKSTONE)));
        CHISELED_NETHER_BRICKS = register("chiseled_nether_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(2.0f, 6.0f).sound(SoundType.NETHER_BRICKS)));
        CRACKED_NETHER_BRICKS = register("cracked_nether_bricks", new Block(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.NETHER).requiresCorrectToolForDrops().strength(2.0f, 6.0f).sound(SoundType.NETHER_BRICKS)));
        QUARTZ_BRICKS = register("quartz_bricks", new Block(BlockBehaviour.Properties.copy(Blocks.QUARTZ_BLOCK)));
        for (final Block bvr2 : Registry.BLOCK) {
            for (final BlockState cfj2 : bvr2.getStateDefinition().getPossibleStates()) {
                Block.BLOCK_STATE_REGISTRY.add(cfj2);
            }
            bvr2.getLootTable();
        }
    }
}
