Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.xreatlabs.space/llms.txt

Use this file to discover all available pages before exploring further.

API Overview

The NexAuth API provides comprehensive interfaces for integrating authentication functionality into your plugins and applications.

Getting Started

Dependency

Add NexAuth as a dependency in your build file: Gradle:
repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    compileOnly 'com.github.XreatLabs:NexAuth:API:x.x.x'
}
Maven:
<repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</repository>

<dependency>
    <groupId>com.github.XreatLabs</groupId>
    <artifactId>NexAuth-API</artifactId>
    <version>x.x.x</version>
    <scope>provided</scope>
</dependency>

Basic Usage

import com.nexauth.api.NexAuthAPI;
import com.nexauth.api.AuthResult;
import com.nexauth.api.PlayerAccount;

public class MyPlugin extends JavaPlugin {
    private NexAuthAPI nexauth;
    
    @Override
    public void onEnable() {
        // Get NexAuth API instance
        nexauth = NexAuthAPI.getInstance();
        
        // Check if NexAuth is loaded
        if (!nexauth.isEnabled()) {
            getLogger().warning("NexAuth not found!");
            return;
        }
    }
    
    public void checkAuth(Player player) {
        // Check if player is authenticated
        if (nexauth.isAuthenticated(player)) {
            player.sendMessage("You are authenticated!");
        }
    }
}

Core Components

Authentication Manager

Handle player authentication operations:
AuthManager authManager = nexauth.getAuthManager();

// Authenticate player
AuthResult result = authManager.authenticate(player, "password");

if (result.isSuccess()) {
    // Authentication successful
} else {
    // Handle failure
    player.sendMessage(result.getErrorMessage());
}

// Register new player
AuthResult registerResult = authManager.register(player, "password");

// Check authentication status
boolean authenticated = authManager.isAuthenticated(player);

// Get player account
Optional<PlayerAccount> account = authManager.getAccount(player);

Session Manager

Manage player sessions:
SessionManager sessionManager = nexauth.getSessionManager();

// Create session
Session session = sessionManager.createSession(player, Duration.ofHours(24));

// Get session
Optional<Session> session = sessionManager.getSession(player);

// Validate session
boolean valid = sessionManager.validateSession(player, ipAddress);

// Invalidate session
sessionManager.invalidateSession(player);

Event System

Listen to authentication events:
import com.nexauth.api.events.PlayerLoginEvent;
import com.nexauth.api.events.PlayerRegisterEvent;
import com.nexauth.api.events.SessionExpireEvent;

public class AuthListener implements Listener {
    
    @EventHandler
    public void onPlayerLogin(PlayerLoginEvent event) {
        Player player = event.getPlayer();
        
        if (event.isSuccess()) {
            getLogger().info(player.getName() + " logged in successfully");
        } else {
            getLogger().warning(player.getName() + " failed to login");
        }
    }
    
    @EventHandler
    public void onPlayerRegister(PlayerRegisterEvent event) {
        Player player = event.getPlayer();
        getLogger().info(player.getName() + " registered new account");
    }
    
    @EventHandler
    public void onSessionExpire(SessionExpireEvent event) {
        Session session = event.getSession();
        getLogger().info("Session expired for " + session.getPlayerName());
    }
}

API Features

Player Account API

PlayerAccount account = nexauth.getAuthManager().getAccount(player).orElse(null);

if (account != null) {
    // Account information
    UUID uuid = account.getUUID();
    String username = account.getUsername();
    long registeredAt = account.getRegisteredAt();
    long lastLogin = account.getLastLogin();
    
    // Account status
    boolean isPremium = account.isPremium();
    boolean has2FA = account.hasTwoFactorAuth();
    
    // Account operations
    account.changePassword("newPassword");
    account.enableTwoFactorAuth("secret");
    account.disableTwoFactorAuth();
}

Premium Authentication

PremiumManager premiumManager = nexauth.getPremiumManager();

// Check premium status
boolean isPremium = premiumManager.isPremium(player);

// Get premium UUID
Optional<UUID> premiumUUID = premiumManager.getPremiumUUID(username);

// Force premium refresh
premiumManager.refreshPremiumData(player);

// Link premium account
premiumManager.linkPremiumAccount(player, offlineUsername);

Two-Factor Authentication

TOTPManager totpManager = nexauth.getTOTPManager();

// Enable 2FA
String secret = totpManager.generateSecret(player);
totpManager.enableTOTP(player, secret);

// Verify code
boolean valid = totpManager.verifyCode(player, "123456");

// Generate backup codes
List<String> backupCodes = totpManager.generateBackupCodes(player);

// Disable 2FA
totpManager.disableTOTP(player);

Advanced Usage

Custom Authentication Provider

public class CustomAuthProvider implements AuthProvider {
    
    @Override
    public AuthResult authenticate(String username, String password) {
        // Custom authentication logic
        if (verifyWithCustomSystem(username, password)) {
            return AuthResult.success();
        } else {
            return AuthResult.failure("Invalid credentials");
        }
    }
    
    @Override
    public boolean isPremium(String username) {
        // Custom premium check
        return checkPremiumStatus(username);
    }
    
    // Implement other methods...
}

// Register custom provider
nexauth.registerProvider("custom", new CustomAuthProvider());

Database Integration

DatabaseManager dbManager = nexauth.getDatabaseManager();

// Execute custom queries
dbManager.executeQuery("SELECT * FROM custom_table", (resultSet) -> {
    while (resultSet.next()) {
        // Process results
    }
});

// Batch operations
dbManager.executeBatch(statements -> {
    statements.add("INSERT INTO table (...) VALUES (...)");
    statements.add("UPDATE table SET ...");
});

// Transactions
dbManager.executeTransaction(() -> {
    // Multiple related operations
});

Plugin Integration

Vault Integration

// NexAuth provides Vault integration for economy permissions
// Use Vault's Chat and Permission hooks with authenticated players

Permission perms = getServer().getServicesManager()
    .getRegistration(Permission.class).getProvider();

// Check if player is authenticated before permission checks
if (nexauth.getAuthManager().isAuthenticated(player)) {
    // Player is authenticated, apply permissions
    perms.playerAdd(player, "permission.node");
}

PlaceholderAPI Integration

// NexAuth provides PlaceholderAPI placeholders
// Use these in other plugins or scripts

// %nexauth_authenticated% - Authentication status
// %nexauth_premium% - Premium status
// %nexauth_2fa_enabled% - 2FA status
// %nexauth_registered_date% - Registration date
// %nexauth_last_login% - Last login time

String placeholder = PlaceholderAPI
    .setPlaceholders(player, "%nexauth_authenticated%");

Error Handling

try {
    AuthResult result = authManager.authenticate(player, password);
    
    if (result.isSuccess()) {
        // Success
    } else {
        // Handle specific error
        switch (result.getErrorType()) {
            case INVALID_PASSWORD:
                player.sendMessage("Incorrect password");
                break;
            case ACCOUNT_LOCKED:
                player.sendMessage("Account is locked");
                break;
            case DATABASE_ERROR:
                player.sendMessage("Authentication error");
                break;
        }
    }
} catch (NexAuthException e) {
    // Handle exceptions
    getLogger().severe("Authentication error: " + e.getMessage());
}

Best Practices

Support

API Support

Get help with API integration on GitHub Discussions.

Next Steps

Providers API

Learn about authentication providers.