complete example
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() + ")");
}
}