public void open(Player player) {

        InventoryLayout layout = layouter.getLayout(this, selections);

        int slots = 0;
        for (List<Selection> column : layout.getLayout()) {
            if (column.size() > slots) {
                slots = column.size();
            }
        }
        slots *= 9;

        if (slots > 0) {
            if (inventoryMap.isEmpty()) {
                Bukkit.getPluginManager().registerEvents(this, plugin);
            }

            if (isOpen(player)) {
                close(player);
            }

            Inventory inventory = Bukkit.createInventory(player, slots, title);
            Map<Integer, Selection> slotMap = paint(inventory);

            inventoryMap.put(player, new ViewMap(inventory, player.openInventory(inventory), slotMap));
        }
    }