The ECServerAPI class is the main entry point for all API functionality. Access it using the singleton pattern:
import com.emberclient.serverapi.ECServerAPI;ECServerAPI api = ECServerAPI.getInstance();
The API instance is available after the ECServerAPI plugin loads. If you declared it as a softdepend in your plugin.yml, it will be available in your onEnable() method.
Send custom packets to Ember Client users. Here’s an example using the attestation register packet:
import com.emberclient.serverapi.packet.impl.attestation.register.OutAttestationRegister;Player player = // ... get player// Only send to Ember Client usersif (api.isPlayerOnEmber(player.getUniqueId())) { OutAttestationRegister packet = new OutAttestationRegister(); api.sendPacket(player, packet);}
import com.emberclient.serverapi.ECServerAPI;import com.emberclient.serverapi.packet.impl.attestation.register.OutAttestationRegister;import org.bukkit.entity.Player;public void requestAttestation(Player player) { ECServerAPI api = ECServerAPI.getInstance(); if (!api.isPlayerOnEmber(player.getUniqueId())) { player.sendMessage("You must use Ember Client for this feature."); return; } OutAttestationRegister packet = new OutAttestationRegister(); api.sendPacket(player, packet); player.sendMessage("Please complete the attestation on your device.");}
The sendPacket() method automatically checks if the player is using Ember Client and silently returns if they’re not. Always verify beforehand if you need to provide user feedback.
import com.emberclient.serverapi.event.EmberPlayerJoinEvent;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;public class EmberListener implements Listener { @EventHandler public void onEmberPlayerJoin(EmberPlayerJoinEvent event) { Player player = event.getPlayer(); player.sendMessage("Ember Client detected! Special features enabled."); // Grant permissions, show custom UI, etc. }}
import com.emberclient.serverapi.event.EmberAttestationRegisterEvent;import com.emberclient.serverapi.packet.impl.attestation.register.AttestationRegisterResult;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import java.security.spec.X509EncodedKeySpec;public class AttestationListener implements Listener { @EventHandler public void onAttestationRegister(EmberAttestationRegisterEvent event) { Player player = event.getPlayer(); AttestationRegisterResult status = event.getStatus(); X509EncodedKeySpec publicKey = event.getPublicKey(); if (status == AttestationRegisterResult.SUCCESS) { // Store the public key for this player // You can now use it for signature verification player.sendMessage("2FA setup complete!"); } else { player.sendMessage("2FA setup failed. Please try again."); } }}
Here’s a complete example that ties everything together:
import com.emberclient.serverapi.ECServerAPI;import com.emberclient.serverapi.event.EmberPlayerJoinEvent;import com.emberclient.serverapi.event.EmberAttestationRegisterEvent;import com.emberclient.serverapi.packet.impl.attestation.register.OutAttestationRegister;import com.emberclient.serverapi.packet.impl.attestation.register.AttestationRegisterResult;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 EmberIntegration extends JavaPlugin implements Listener { @Override public void onEnable() { getServer().getPluginManager().registerEvents(this, this); } @EventHandler public void onEmberJoin(EmberPlayerJoinEvent event) { Player player = event.getPlayer(); player.sendMessage("Welcome! Type /setup2fa to enable two-factor authentication."); } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage("This command is for players only."); return true; } Player player = (Player) sender; ECServerAPI api = ECServerAPI.getInstance(); if (command.getName().equalsIgnoreCase("setup2fa")) { if (!api.isPlayerOnEmber(player.getUniqueId())) { player.sendMessage("You must use Ember Client for 2FA."); return true; } OutAttestationRegister packet = new OutAttestationRegister(); api.sendPacket(player, packet); player.sendMessage("Please complete 2FA setup on your device."); return true; } return false; } @EventHandler public void onRegister(EmberAttestationRegisterEvent event) { Player player = event.getPlayer(); if (event.getStatus() == AttestationRegisterResult.SUCCESS) { // In production, store event.getPublicKey() in your database player.sendMessage("2FA enabled! Your account is now protected."); } }}