Skip to content

API Examples

Complete code examples for using the SigmaTools API.

Basic API Access

package com.example.plugin;

import com.sigmatools.api.SigmaToolsAPI;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;

public class MyPlugin extends JavaPlugin {

    private SigmaToolsAPI api;

    @Override
    public void onEnable() {
        // Get API
        this.api = Bukkit.getServicesManager().load(SigmaToolsAPI.class);

        if (api == null) {
            // Try again next tick (load order timing)
            Bukkit.getScheduler().runTask(this, () -> {
                this.api = Bukkit.getServicesManager().load(SigmaToolsAPI.class);
                if (api != null) {
                    getLogger().info("Found SigmaToolsAPI v" + api.getVersion());
                } else {
                    getLogger().warning("SigmaToolsAPI not available");
                }
            });
        } else {
            getLogger().info("Found SigmaToolsAPI v" + api.getVersion());
        }
    }
}

Check if Item is SigmaTool

import org.bukkit.inventory.ItemStack;
import com.sigmatools.api.SigmaToolsAPI;

public boolean isSigmaTool(ItemStack item) {
    if (api == null) return false;
    return api.isSigmaTool(item);
}

Get Tool Type

import java.util.Optional;

public String getToolType(ItemStack item) {
    if (api == null) return null;

    Optional<String> toolType = api.getToolType(item);
    return toolType.orElse(null);
}

Check Protection

import org.bukkit.Location;
import org.bukkit.entity.Player;

public boolean canUseTool(Player player, Location location) {
    if (api == null) return true;
    return api.canUseHere(player, location);
}

Economy Operations

Get Balance

import com.sigmatools.api.EconomyResult;

public void checkBalance(Player player) {
    if (api == null) return;

    EconomyResult result = api.getBalance(player);
    if (result.success()) {
        double balance = result.balanceAfter();
        String currency = result.currency();
        player.sendMessage("Balance: " + balance + " " + currency);
    }
}

Deduct Currency

public boolean deductCurrency(Player player, double amount) {
    if (api == null) return false;

    EconomyResult result = api.deduct(player, amount);
    if (result.success()) {
        player.sendMessage("Deducted " + amount + " " + result.currency());
        return true;
    } else {
        player.sendMessage("Insufficient funds: " + result.message());
        return false;
    }
}

Give Reward

public void giveReward(Player player, double amount) {
    if (api == null) return;

    EconomyResult result = api.reward(player, amount);
    if (result.success()) {
        player.sendMessage("Received " + amount + " " + result.currency());
    }
}

Event Handling

Listen to Tool Usage

import com.sigmatools.api.events.SigmaToolUseEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class ToolListener implements Listener {

    @EventHandler
    public void onToolUse(SigmaToolUseEvent event) {
        Player player = event.getPlayer();
        String toolType = event.getToolType();

        // Log usage
        getLogger().info(player.getName() + " used " + toolType);

        // Apply VIP discount
        if (player.hasPermission("myplugin.vip")) {
            event.setPlannedCost(event.getPlannedCost() * 0.5);
        }
    }
}

Listen to Economy Events

import com.sigmatools.api.events.SigmaToolEconomyDeductEvent;
import com.sigmatools.api.events.SigmaToolEconomyRewardEvent;

public class EconomyListener implements Listener {

    @EventHandler
    public void onDeduct(SigmaToolEconomyDeductEvent event) {
        // Apply discount
        if (event.getPlayer().hasPermission("myplugin.discount")) {
            event.setAmount(event.getAmount() * 0.8);
        }
    }

    @EventHandler
    public void onReward(SigmaToolEconomyRewardEvent event) {
        // Double rewards for VIPs
        if (event.getPlayer().hasPermission("myplugin.vip")) {
            event.setAmount(event.getAmount() * 2.0);
        }
    }
}

Complete Plugin Example

package com.example.plugin;

import com.sigmatools.api.SigmaToolsAPI;
import com.sigmatools.api.events.SigmaToolUseEvent;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class MyPlugin extends JavaPlugin implements Listener {

    private SigmaToolsAPI api;

    @Override
    public void onEnable() {
        // Get API
        this.api = Bukkit.getServicesManager().load(SigmaToolsAPI.class);

        if (api == null) {
            Bukkit.getScheduler().runTask(this, () -> {
                this.api = Bukkit.getServicesManager().load(SigmaToolsAPI.class);
                if (api != null) {
                    getLogger().info("Found SigmaToolsAPI v" + api.getVersion());
                    Bukkit.getPluginManager().registerEvents(this, this);
                }
            });
        } else {
            getLogger().info("Found SigmaToolsAPI v" + api.getVersion());
            Bukkit.getPluginManager().registerEvents(this, this);
        }
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("checktool")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("Only players can use this command!");
                return true;
            }

            Player player = (Player) sender;
            if (api == null) {
                player.sendMessage("SigmaTools API not available!");
                return true;
            }

            // Check if holding SigmaTool
            if (api.isSigmaTool(player.getInventory().getItemInMainHand())) {
                Optional<String> toolType = api.getToolType(player.getInventory().getItemInMainHand());
                player.sendMessage("You are holding a SigmaTools " + toolType.orElse("unknown") + "!");
            } else {
                player.sendMessage("You are not holding a SigmaTool!");
            }

            return true;
        }

        return false;
    }

    @EventHandler
    public void onToolUse(SigmaToolUseEvent event) {
        Player player = event.getPlayer();

        // Log usage
        getLogger().info(player.getName() + " used " + event.getToolType());

        // Apply VIP benefits
        if (player.hasPermission("myplugin.vip")) {
            event.setPlannedCost(event.getPlannedCost() * 0.5);
            event.setPlannedReward(event.getPlannedReward() * 2.0);
        }
    }
}

Best Practices

  1. Check for Null API - Always verify API is available
  2. Handle Optional Returns - Use Optional properly
  3. Async Operations - Use async for heavy operations
  4. Error Handling - Wrap API calls in try-catch
  5. Event Priority - Use appropriate event priorities

Next Steps