@Override public void setBlockState(BlockState blockState) { Validate.notNull(blockState, "blockState must not be null"); TileEntity te = ((CraftBlockState) blockState).getTileEntity(); Validate.notNull(te, "Invalid tile for " + blockState); boolean valid; switch (material) { case SIGN: case SIGN_POST: case WALL_SIGN: valid = te instanceof TileEntitySign; break; case CHEST: case TRAPPED_CHEST: valid = te instanceof TileEntityChest; break; case BURNING_FURNACE: case FURNACE: valid = te instanceof TileEntityFurnace; break; case DISPENSER: valid = te instanceof TileEntityDispenser; break; case DROPPER: valid = te instanceof TileEntityDropper; break; case END_GATEWAY: valid = te instanceof TileEntityEndGateway; break; case HOPPER: valid = te instanceof TileEntityHopper; break; case MOB_SPAWNER: valid = te instanceof TileEntityMobSpawner; break; case NOTE_BLOCK: valid = te instanceof TileEntityNote; break; case JUKEBOX: valid = te instanceof BlockJukeBox.TileEntityRecordPlayer; break; case BREWING_STAND_ITEM: valid = te instanceof TileEntityBrewingStand; break; case SKULL: valid = te instanceof TileEntitySkull; break; case COMMAND: case COMMAND_REPEATING: case COMMAND_CHAIN: valid = te instanceof TileEntityCommand; break; case BEACON: valid = te instanceof TileEntityBeacon; break; case SHIELD: case BANNER: case WALL_BANNER: case STANDING_BANNER: valid = te instanceof TileEntityBanner; break; case FLOWER_POT_ITEM: valid = te instanceof TileEntityFlowerPot; break; case STRUCTURE_BLOCK: valid = te instanceof TileEntityStructure; break; case WHITE_SHULKER_BOX: case ORANGE_SHULKER_BOX: case MAGENTA_SHULKER_BOX: case LIGHT_BLUE_SHULKER_BOX: case YELLOW_SHULKER_BOX: case LIME_SHULKER_BOX: case PINK_SHULKER_BOX: case GRAY_SHULKER_BOX: case SILVER_SHULKER_BOX: case CYAN_SHULKER_BOX: case PURPLE_SHULKER_BOX: case BLUE_SHULKER_BOX: case BROWN_SHULKER_BOX: case GREEN_SHULKER_BOX: case RED_SHULKER_BOX: case BLACK_SHULKER_BOX: valid = te instanceof TileEntityShulkerBox; break; case ENCHANTMENT_TABLE: valid = te instanceof TileEntityEnchantTable; break; case ENDER_CHEST: valid = te instanceof TileEntityEnderChest; break; case DAYLIGHT_DETECTOR: case DAYLIGHT_DETECTOR_INVERTED: valid = te instanceof TileEntityLightDetector; break; case REDSTONE_COMPARATOR: valid = te instanceof TileEntityComparator; break; default: valid = false; break; } Validate.isTrue(valid, "Invalid blockState for " + material); blockEntityTag = new NBTTagCompound(); te.save(blockEntityTag); }