complete example

A full example plugin demonstrating all Shards API features.


Main Plugin Class

package com.example.myplugin;

import bg.pikz.shards.api.ShardsAPIProvider;
import bg.pikz.shards.api.interfaces.*;
import bg.pikz.shards.api.events.ShardGainEvent;
import bg.pikz.shards.api.events.ShardLoseEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.UUID;

public class MyPlugin extends JavaPlugin implements Listener {

    private ShardsAPI shardsAPI;
    private boolean shardsEnabled = false;

    @Override
    public void onEnable() {
        // Hook into Shards
        if (getServer().getPluginManager().getPlugin("Shards") != null) {
            shardsAPI = ShardsAPIProvider.getAPI();
            shardsEnabled = true;
            getLogger().info("Successfully hooked into Shards v" + shardsAPI.getVersion());

            // Register event listeners
            getServer().getPluginManager().registerEvents(this, this);
        } else {
            getLogger().warning("Shards not found! Shard features disabled.");
        }
    }

    /**
     * Check if Shards integration is available
     */
    public boolean isShardsEnabled() {
        return shardsEnabled;
    }

    /**
     * Get a player's shard balance
     */
    public long getPlayerShards(Player player) {
        if (!shardsEnabled) return 0;

        OfflineUserAPI user = shardsAPI.getUserMap().get(player.getUniqueId());
        return user != null ? user.getShards() : 0;
    }

    /**
     * Get a player's shard balance by UUID (works for offline players)
     */
    public long getPlayerShards(UUID uuid) {
        if (!shardsEnabled) return 0;

        OfflineUserAPI user = shardsAPI.getUserMap().get(uuid);
        return user != null ? user.getShards() : 0;
    }

    /**
     * Give shards to a player
     */
    public void giveShards(Player player, long amount) {
        if (!shardsEnabled) return;

        OfflineUserAPI user = shardsAPI.getUserMap().get(player.getUniqueId());
        if (user != null) {
            user.addShards(amount);
        }
    }

    /**
     * Take shards from a player
     * @return true if successful, false if player doesn't have enough
     */
    public boolean takeShards(Player player, long amount) {
        if (!shardsEnabled) return false;

        OfflineUserAPI user = shardsAPI.getUserMap().get(player.getUniqueId());
        if (user != null && user.getShards() >= amount) {
            user.takeShard(amount);
            return true;
        }
        return false;
    }

    /**
     * Check if player can afford a cost
     */
    public boolean canAfford(Player player, long cost) {
        return getPlayerShards(player) >= cost;
    }

    /**
     * Open the shop for a player
     */
    public void openShop(Player player) {
        if (!shardsEnabled) return;

        if (shardsAPI.isFeatureEnabled("shop")) {
            shardsAPI.getShopManager().openShop(player);
        }
    }

    /**
     * Open the leaderboard for a player
     */
    public void openLeaderboard(Player player) {
        if (!shardsEnabled) return;

        if (shardsAPI.isFeatureEnabled("leaderboard")) {
            shardsAPI.getLeaderboardManager().open(player);
        }
    }

    /**
     * Teleport player to AFK zone
     */
    public void teleportToAFK(Player player) {
        if (!shardsEnabled) return;

        if (shardsAPI.isFeatureEnabled("afk")) {
            shardsAPI.getAfkManager().teleportToAFK(player);
        }
    }

    /**
     * Get player's generation bonus
     */
    public long getGenerationBonus(Player player) {
        if (!shardsEnabled) return 0;
        return shardsAPI.getGenMultiplayer().getGenShards(player);
    }

    /**
     * Get player's kill bonus
     */
    public long getKillBonus(Player player) {
        if (!shardsEnabled) return 0;
        return shardsAPI.getKillMultiplayer().getKillShards(player);
    }

    // ==================== EVENT HANDLERS ====================

    @EventHandler
    public void onShardGain(ShardGainEvent event) {
        Player player = event.getPlayer();

        // Example: Bonus shards for players with custom permission
        if (player.hasPermission("myplugin.doubleshards")) {
            if (event.getReason() == ShardGainEvent.GainReason.REGION_GENERATION) {
                event.setAmount(event.getAmount() * 2);
                player.sendMessage("Double shard bonus applied!");
            }
        }

        // Example: Log all gains
        getLogger().info(player.getName() + " gained " + event.getAmount() +
                        " shards (" + event.getReason() + ")");
    }

    @EventHandler
    public void onShardLose(ShardLoseEvent event) {
        Player player = event.getPlayer();

        // Example: 10% discount for VIP on shop purchases
        if (event.getReason() == ShardLoseEvent.LoseReason.SHOP_PURCHASE) {
            if (player.hasPermission("myplugin.discount")) {
                long discount = (long) (event.getAmount() * 0.10);
                event.setAmount(event.getAmount() - discount);
                player.sendMessage("VIP discount: -" + discount + " shards!");
            }
        }

        // Example: Log all purchases
        getLogger().info(player.getName() + " spent " + event.getAmount() +
                        " shards (" + event.getReason() + ")");
    }
}

Helper Utility Class


Command Example


plugin.yml


build.gradle