Code Examples

Practical Java snippets for integrating with the ShyamDuels API on your Spigot/Paper server.

Example 1: Fetching and Modifying ELO Stats

This example demonstrates how to retrieve a player's stats object, view their rating details, add ELO points, and save the data asynchronously:

javaimport com.shyamstudio.shyamduels.api.ShyamDuelsAPI;
import com.shyamstudio.shyamduels.api.ShyamDuelsProvider;
import com.shyamstudio.shyamduels.stats.PlayerStats;
import org.bukkit.entity.Player;

public void rewardElo(Player player, int eloAmount) {
    ShyamDuelsAPI api = ShyamDuelsProvider.get();
    if (api == null) return;

    // Fetch the player stats cached profile
    PlayerStats stats = api.stats().getStats(player);
    if (stats == null) return;

    int oldElo = stats.getElo();
    stats.setElo(oldElo + eloAmount); // Update ELO points

    // Save changes back to database pool asynchronously
    api.stats().saveStats(stats).thenRun(() -> {
        player.sendMessage("§aYour ELO has been updated to: " + stats.getElo());
    });
}

Example 2: Listening to Duel Concludes

Listen for when a match ends to log victory parameters or trigger custom server-wide rewards:

javaimport org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import com.shyamstudio.shyamduels.duel.event.DuelEndEvent;
import com.shyamstudio.shyamduels.duel.Duel;

public class EndMatchListener implements Listener {

    private final JavaPlugin plugin;

    public EndMatchListener(JavaPlugin plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onDuelEnd(DuelEndEvent event) {
        Duel duel = event.getDuel();

        String kitName = duel.getKit().getName();
        String arenaName = duel.getArena().getName();

        plugin.getLogger().info("Duel concluded on arena " + arenaName + " using kit " + kitName);
        plugin.getLogger().info("Team 1 Wins: " + duel.getTeam1Wins() + " | Team 2 Wins: " + duel.getTeam2Wins());
    }
}

Example 3: Programmatically Inviting Players

Generate a match challenge invite using the API, bypassing user commands:

javaimport com.shyamstudio.shyamduels.api.ShyamDuelsAPI;
import com.shyamstudio.shyamduels.api.ShyamDuelsProvider;
import com.shyamstudio.shyamduels.kit.Kit;
import org.bukkit.entity.Player;

public void challengePlayer(Player challenger, Player target, String kitName, int roundCount) {
    ShyamDuelsAPI api = ShyamDuelsProvider.get();
    if (api == null) return;

    // Resolve the kit configuration template
    Kit kit = api.kits().getKit(kitName);
    if (kit == null) {
        challenger.sendMessage("§cSpecified kit was not found!");
        return;
    }

    // Dispatch the invite directly through the DuelService
    api.duels().sendInvite(challenger, target, kit, roundCount);
    challenger.sendMessage("§aDuel challenge sent to " + target.getName());
}