@Override
  public Inventory importInventory(
      ChestOwner chestOwner, WorldGroup worldGroup, BetterEnderChest plugin) throws IOException {
    // Cannot import vanilla chests
    if (chestOwner.isSpecialChest()) {
      return null;
    }

    Player player = chestOwner.getPlayer();
    Inventory betterEnderInventory;
    if (player == null) {

      // Offline, load from file
      File playerDirectory =
          new File(Bukkit.getWorlds().get(0).getWorldFolder().getAbsolutePath() + "/playerdata");

      File playerFile =
          new File(playerDirectory.getAbsolutePath() + "/" + chestOwner.getSaveFileName() + ".dat");
      if (!playerFile.exists()) {
        return null;
      }

      // Load it from the file (mainworld/playerdata/playername.dat)
      betterEnderInventory =
          plugin
              .getNMSHandlers()
              .getSelectedRegistration()
              .loadNBTInventoryFromFile(playerFile, chestOwner, worldGroup, "EnderItems");
      if (betterEnderInventory == null) {
        // Cannot load the inventory from that file, most likely because
        // it is empty
        return null;
      }
    } else {
      // Online, load now
      Inventory vanillaInventory = player.getEnderChest();
      int inventoryRows =
          plugin.getEmptyInventoryProvider().getInventoryRows(chestOwner, vanillaInventory);
      betterEnderInventory =
          plugin
              .getEmptyInventoryProvider()
              .loadEmptyInventory(
                  chestOwner,
                  worldGroup,
                  inventoryRows,
                  plugin.getChestSizes().getDisabledSlots(player));

      // Copy all items
      ListIterator<ItemStack> copyIterator = vanillaInventory.iterator();
      while (copyIterator.hasNext()) {
        int slot = copyIterator.nextIndex();
        ItemStack stack = copyIterator.next();
        if (slot < betterEnderInventory.getSize()) {
          betterEnderInventory.setItem(slot, stack);
        }
      }
    }

    // Check if the inventory is empty
    if (BetterEnderUtils.isInventoryEmpty(betterEnderInventory)) {
      // Empty inventory, return null
      return null;
    } else {
      // Return the inventory
      return betterEnderInventory;
    }
  }