Lookup and Statistics

Block target = player.getTargetBlockExact(5);
if (target == null) return;

VHoppersAPI api = VHoppersProvider.get();
if (api.isVHopper(target.getLocation())) {
    player.sendMessage("This is a VHopper.");
}

api.getHopper(location).ifPresent(hopper -> {
    sender.sendMessage("Owner: " + hopper.owner());
    sender.sendMessage("Collected: " + hopper.stats().collectedItems());
    sender.sendMessage("Sold: " + hopper.stats().soldItems());
    sender.sendMessage("Earned: " + hopper.stats().earnedMoney());
});

Modules and Limits

VHoppersAPI api = VHoppersProvider.get();

api.getHopper(location).ifPresent(hopper -> {
    for (VHopperModule module : hopper.modules()) {
        sender.sendMessage("Slot " + module.slot()
                + ": " + module.type()
                + " enabled=" + module.enabled());
    }
});

int limit = VHoppersProvider.get().getHopperLimit(player);
player.sendMessage("Your VHopper limit is " + limit + ".");

Disable Modules

VHoppersAPI api = VHoppersProvider.get();

api.getHopper(location).ifPresent(hopper -> {
    for (VHopperModule module : hopper.modules()) {
        api.setModuleEnabled(hopper.location(), module.slot(), false).thenAccept(success -> {
            if (!success) {
                Bukkit.getLogger().warning("Could not disable module slot " + module.slot());
            }
        });
    }
});

Seller Event Listener

public final class SellListener implements Listener {
    @EventHandler
    public void onSell(VHopperSellEvent event) {
        UUID owner = event.hopper().owner();
        double payout = event.payout();
        int amount = event.amount();

        Bukkit.getLogger().info("VHopper owner " + owner
                + " sold " + amount + " items for " + payout);
    }
}