Compatibility
Minecraft: Java Edition
1.21.x
1.20.x
1.19.x
1.18.x
1.17.x
1.16.x
1.15.x
1.14.x
1.13.x
1.12.x
1.11.x
1.10.x
1.9.x
1.8.x
Platforms
Creators
Details
Licensed Apache-2.0
Published 2 weeks ago
Transcript
AtlasLangAdvanced multilingual system for Minecraft
AtlasLang is a modern and lightweight language management plugin designed to provide a true multilingual experience for Minecraft servers.
It allows servers to manage player languages, translations and localization in a clean, scalable and performance-friendly way, making it suitable for both small servers and large networks.
Features
- Player-based language system (persistent per player)
- Unlimited languages using folders and YML files
- Clean and flexible translation structure
- PlaceholderAPI integration
- Locale support (en_US, es_ES, fr_FR, pt_BR, etc.)
- Database support (H2 and MySQL)
- GitHub synchronization for language files
- Legacy colors, HEX colors and MiniMessage support
- Hot reload without server restart
- Safe fallback system to prevent errors
AtlasLang is built with performance, scalability and developer experience in mind.
One plugin. Unlimited languages.
AtlasAPI
package com.github.nautic.api;
import com.github.nautic.AtlasLang;
import com.github.nautic.database.DatabaseManager;
import com.github.nautic.handler.LangHandler;
import com.github.nautic.manager.LanguageManager;
import org.bukkit.entity.Player;
import java.util.Set;
import java.util.UUID;
/**
* AtlasAPI is the main public API for interacting with the AtlasLang language system.
*
* @author Senkex
* @powered Nautic Studios
*
* This class provides static utility methods to:
* - Retrieve translated messages
* - Manage player languages
* - Validate registered languages
* - Access internal language managers
*
* The API is designed to be simple, safe, and developer-friendly.
*/
public final class AtlasAPI {
/**
* Singleton instance of the AtlasAPI.
*/
private static AtlasAPI instance;
/**
* Handles language file access and message retrieval.
*/
private final LangHandler langHandler;
/**
* Manages registered languages and language resolution.
*/
private final LanguageManager languageManager;
/**
* Private constructor to enforce singleton pattern.
*
* @param langHandler The language handler instance
* @param languageManager The language manager instance
*/
private AtlasAPI(LangHandler langHandler, LanguageManager languageManager) {
this.langHandler = langHandler;
this.languageManager = languageManager;
}
/**
* Initializes the AtlasAPI.
* This method should be called once during plugin startup.
*
* @param plugin The main AtlasLang plugin instance
*/
public static void initialize(AtlasLang plugin) {
if (instance != null) return;
instance = new AtlasAPI(
plugin.getLangHandler(),
plugin.getLanguageManager()
);
}
/**
* Returns the AtlasAPI singleton instance.
*
* @return AtlasAPI instance
* @throws IllegalStateException if the API has not been initialized
*/
public static AtlasAPI get() {
if (instance == null) {
throw new IllegalStateException("[AtlasAPI] Could not be started");
}
return instance;
}
/**
* Retrieves a translated message for a player using their UUID.
*
* @param player The player
* @param path The language path
* @return The translated message
*/
public static String get(Player player, String path) {
return get(player.getUniqueId(), path);
}
/**
* Retrieves a translated message using a player's UUID.
*
* @param uuid The player's UUID
* @param path The language path
* @return The translated message
*/
public static String get(UUID uuid, String path) {
String lang = DatabaseManager.getDatabase().getLanguagePlayer(uuid);
if (lang == null) {
lang = getDefaultLanguage();
}
return get(lang, path);
}
/**
* Retrieves a translated message using a language identifier.
*
* @param langInput The language input (alias, locale, or key)
* @param path The language path
* @return The translated message
*/
public static String get(String langInput, String path) {
String resolved = get().languageManager.resolveLanguageStrict(langInput);
if (resolved == null) {
resolved = getDefaultLanguage();
}
return get().langHandler.get(resolved, "atlasaddon", path);
}
/**
* Retrieves a translated message or returns a fallback value if not found.
*
* @param player The player
* @param path The language path
* @param fallback The fallback value
* @return The translated message or fallback
*/
public static String getOrDefault(Player player, String path, String fallback) {
String value = get(player, path);
return value != null ? value : fallback;
}
/**
* Checks whether a specific path exists for a given language.
*
* @param langInput The language input
* @param path The language path
* @return true if the path exists, false otherwise
*/
public static boolean has(String langInput, String path) {
String resolved = get().languageManager.resolveLanguageStrict(langInput);
if (resolved == null) return false;
return get().langHandler.get(resolved, resolved, path) != null;
}
/**
* Sets the language for a player.
*
* @param player The player
* @param langInput The language input
* @return true if the language was set successfully
*/
public static boolean setLanguage(Player player, String langInput) {
return setLanguage(player.getUniqueId(), langInput);
}
/**
* Sets the language for a player using UUID.
*
* @param uuid The player's UUID
* @param langInput The language input
* @return true if the language was set successfully
*/
public static boolean setLanguage(UUID uuid, String langInput) {
String resolved = get().languageManager.resolveLanguageStrict(langInput);
if (resolved == null) return false;
DatabaseManager.getDatabase().setLanguagePlayer(uuid, resolved);
return true;
}
/**
* Returns the current language of a player.
*
* @param player The player
* @return The player's language
*/
public static String getLanguage(Player player) {
return getLanguage(player.getUniqueId());
}
/**
* Returns the current language of a player using UUID.
*
* @param uuid The player's UUID
* @return The player's language or the default language
*/
public static String getLanguage(UUID uuid) {
String lang = DatabaseManager.getDatabase().getLanguagePlayer(uuid);
return lang != null ? lang : getDefaultLanguage();
}
/**
* Checks if a language is registered in the system.
*
* @param langInput The language input
* @return true if the language exists
*/
public static boolean isLanguageRegistered(String langInput) {
String resolved = get().languageManager.resolveLanguageStrict(langInput);
return resolved != null;
}
/**
* Returns all registered languages.
*
* @return A set of registered language identifiers
*/
public static Set<String> getRegisteredLanguages() {
return get().languageManager.getRegisteredLanguages();
}
/**
* Returns the default language.
*
* @return Default language identifier
*/
public static String getDefaultLanguage() {
return get().languageManager.getDefaultLang();
}
/**
* Provides access to the LanguageManager.
*
* @return LanguageManager instance
*/
public static LanguageManager getLanguageManager() {
return get().languageManager;
}
/**
* Provides access to the LangHandler.
*
* @return LangHandler instance
*/
public static LangHandler getLangHandler() {
return get().langHandler;
}
/**
* Retrieves an addon-specific message for a player.
*
* @param player The player
* @param path The addon language path
* @return The translated addon message
*/
public static String getAddon(Player player, String path) {
return getAddon(player.getUniqueId(), path);
}
/**
* Retrieves an addon-specific message using UUID.
*
* @param uuid The player's UUID
* @param path The addon language path
* @return The translated addon message
*/
public static String getAddon(UUID uuid, String path) {
String lang = DatabaseManager.getDatabase().getLanguagePlayer(uuid);
if (lang == null) lang = getDefaultLanguage();
return getAddon(lang, path);
}
/**
* Retrieves an addon-specific message using a language identifier.
*
* @param langInput The language input
* @param path The addon language path
* @return The translated addon message
*/
public static String getAddon(String langInput, String path) {
String resolved = get().languageManager.resolveLanguageStrict(langInput);
if (resolved == null) resolved = getDefaultLanguage();
return get().langHandler.get(resolved, "atlasaddon", path);
}
}





