1
0
mirror of https://github.com/GeyserMC/Floodgate.git synced 2026-01-06 15:42:03 +00:00

Translate player messages

This commit is contained in:
DoctorMacc
2020-08-19 15:17:00 -04:00
parent 1125c0a24d
commit f217f8b298
11 changed files with 86 additions and 44 deletions

View File

@@ -48,6 +48,7 @@ import org.geysermc.floodgate.platform.command.CommandRegistration;
import org.geysermc.floodgate.platform.command.util.CommandUtil;
import org.geysermc.floodgate.platform.listener.ListenerRegistration;
import org.geysermc.floodgate.util.BungeeCommandUtil;
import org.geysermc.floodgate.util.LanguageManager;
@RequiredArgsConstructor
public final class BungeePlatformModule extends AbstractModule {
@@ -95,8 +96,8 @@ public final class BungeePlatformModule extends AbstractModule {
@Provides
@Singleton
public CommandUtil commandUtil(FloodgateLogger logger) {
return new BungeeCommandUtil(logger);
public CommandUtil commandUtil(FloodgateLogger logger, LanguageManager languageManager) {
return new BungeeCommandUtil(logger, languageManager);
}
@Provides

View File

@@ -30,7 +30,9 @@ import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import org.geysermc.floodgate.api.FloodgateApi;
import org.geysermc.floodgate.api.logger.FloodgateLogger;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
import org.geysermc.floodgate.platform.command.CommandMessage;
import org.geysermc.floodgate.platform.command.util.CommandResponseCache;
import org.geysermc.floodgate.platform.command.util.CommandUtil;
@@ -38,10 +40,21 @@ import org.geysermc.floodgate.platform.command.util.CommandUtil;
@RequiredArgsConstructor
public final class BungeeCommandUtil extends CommandResponseCache<BaseComponent[]> implements CommandUtil {
private final FloodgateLogger logger;
private final LanguageManager manager;
@Override
public void sendMessage(Object player, CommandMessage message, Object... args) {
cast(player).sendMessage(getOrAddCachedMessage(message, args));
ProxiedPlayer proxiedPlayer = cast(player);
FloodgatePlayer floodgatePlayer =
FloodgateApi.getInstance().getPlayer(proxiedPlayer.getUniqueId());
if (floodgatePlayer != null) {
proxiedPlayer.sendMessage(transformMessage(
manager.getPlayerLocaleString(message.getMessage(),
floodgatePlayer.getLanguageCode(), args)));
} else {
proxiedPlayer.sendMessage(transformMessage(
manager.getLocaleStringLog(message.getMessage(), args)));
}
}
@Override

View File

@@ -33,14 +33,15 @@ import org.geysermc.floodgate.platform.command.CommandMessage;
* Messages (or part of messages) that are used in two or more commands and thus are 'commonly used'
*/
public enum CommonCommandMessage implements CommandMessage {
NOT_A_PLAYER("Please head over to your Minecraft Account and link from there."),
CHECK_CONSOLE("Please check the console for more info!"),
IS_LINKED_ERROR("&cError while checking if the given player is linked. " + CHECK_CONSOLE);
NOT_A_PLAYER("floodgate.commands.not_a_player"),
CHECK_CONSOLE("floodgate.commands.check_console"),
// TODO used to also have console check
IS_LINKED_ERROR("floodgate.commands.is_linked_error");
@Getter private final String message;
CommonCommandMessage(String message) {
this.message = message.replace('&', COLOR_CHAR);
this.message = message;
}
@Override

View File

@@ -146,26 +146,22 @@ public final class LinkAccountCommand implements Command {
}
public enum Message implements CommandMessage {
ALREADY_LINKED("&cYour account is already linked!\n" +
"&cIf you want to link to a different account, run &6/unlinkaccount&c and try it again."
),
JAVA_USAGE("&cUsage: /linkaccount <gamertag>"),
LINK_REQUEST_CREATED("&aLog in as {} on Bedrock and run &6/linkaccount {} {}\n" +
"&cWarning: Any progress on your Bedrock account will not be carried over! Save any items in your inventory first.\n" +
"&cIf you change your mind you can run &6/unlinkaccount&c to get your progess back."
),
BEDROCK_USAGE("&cStart the process from Java! Usage: /linkaccount <gamertag>"),
LINK_REQUEST_EXPIRED("&cThe code you entered is expired! Run &6/linkaccount&c again on your Java account"),
LINK_REQUEST_COMPLETED("You are successfully linked to {}!\nIf you want to undo this run /unlinkaccount"),
LINK_REQUEST_ERROR("&cAn error occurred while linking. " + CommonCommandMessage.CHECK_CONSOLE),
INVALID_CODE("&cInvalid code! Please check your code or run the &6/linkaccount&c command again on your Java account."),
NO_LINK_REQUESTED("&cThis player has not requested an account link! Please log in on Java and request one with &6/linkaccount"),
LINK_REQUEST_DISABLED("&cLinking is not enabled on this server.");
ALREADY_LINKED("floodgate.command.link_account.already_linked"),
JAVA_USAGE("floodgate.command.link_account.java_usage"),
LINK_REQUEST_CREATED("floodgate.command.link_account.link_request_created"),
BEDROCK_USAGE("floodgate.command.link_account.bedrock_usage"),
LINK_REQUEST_EXPIRED("floodgate.command.link_account.link_request_expired"),
LINK_REQUEST_COMPLETED("floodgate.command.link_account.link_request_completed"),
// TODO this also used to have another message
LINK_REQUEST_ERROR("floodgate.command.link_request.error"),
INVALID_CODE("floodgate.command.link_account.invalid_code"),
NO_LINK_REQUESTED("floodgate.command.link_account.no_link_requested"),
LINK_REQUEST_DISABLED("floodgate.command.link_request.disabled");
@Getter private final String message;
Message(String message) {
this.message = message.replace('&', COLOR_CHAR);
this.message = message;
}
}
}

View File

@@ -90,15 +90,16 @@ public final class UnlinkAccountCommand implements Command {
}
public enum Message implements CommandMessage {
NOT_LINKED("&cYour account isn't linked"),
UNLINK_SUCCESS("&cUnlink successful! Rejoin to return to your Bedrock account"),
UNLINK_ERROR("&cAn error occurred while unlinking player! " + CommonCommandMessage.CHECK_CONSOLE),
LINKING_NOT_ENABLED("&cLinking is not enabled on this server");
NOT_LINKED("floodgate.command.unlink_account.not_linked"),
UNLINK_SUCCESS("floodgate.command.unlink_account.unlink_success"),
// TODO also used to have CHECK_CONSOLE
UNLINK_ERROR("floodgate.command.unlink_account.error"),
LINKING_NOT_ENABLED("floodgate.command.unlink_account.disabled");
@Getter private final String message;
Message(String message) {
this.message = message.replace('&', COLOR_CHAR);
this.message = message;
}
}
}

View File

@@ -38,18 +38,19 @@ import java.util.Locale;
import java.util.Map;
import java.util.Properties;
/**
* Manages translations for strings in Floodgate
*/
public class LanguageManager {
private final Map<String, Properties> LOCALE_MAPPINGS = new HashMap<>();
private final FloodgateLogger logger;
/**
* The locale used in console and as a fallback
*/
private String defaultLocale;
private final Map<String, Properties> LOCALE_MAPPINGS = new HashMap<>();
private final FloodgateLogger logger;
public LanguageManager(FloodgateLogger logger) {
this.logger = logger;
}
@@ -62,14 +63,16 @@ public class LanguageManager {
public void initialize(FloodgateConfig config) {
loadFloodgateLocale("en_US"); // Fallback
if (config.getDefaultLocale() != null && isValidLanguage(formatLocale(config.getDefaultLocale()))) {
if (config.getDefaultLocale() != null &&
isValidLanguage(formatLocale(config.getDefaultLocale()))) {
loadFloodgateLocale(formatLocale(config.getDefaultLocale()));
defaultLocale = formatLocale(config.getDefaultLocale());
} else {
String systemLocale = formatLocale(Locale.getDefault().getLanguage() + "_" + Locale.getDefault().getCountry());
String systemLocale = formatLocale(Locale.getDefault().getLanguage() + "_" +
Locale.getDefault().getCountry());
if (isValidLanguage(systemLocale)) {
loadFloodgateLocale(systemLocale);
defaultLocale = formatLocale(systemLocale);
defaultLocale = systemLocale;
} else {
defaultLocale = "en_US";
}
@@ -77,7 +80,7 @@ public class LanguageManager {
}
/**
* Loads a Geyser locale from resources, if the file doesn't exist it just logs a warning
* Loads a Floodgate locale from resources; if the file doesn't exist it just logs a warning
*
* @param locale Locale to load
*/

View File

@@ -45,6 +45,7 @@ import org.geysermc.floodgate.logger.JavaDefaultFloodgateLogger;
import org.geysermc.floodgate.platform.command.CommandRegistration;
import org.geysermc.floodgate.platform.listener.ListenerRegistration;
import org.geysermc.floodgate.platform.command.util.CommandUtil;
import org.geysermc.floodgate.util.LanguageManager;
import org.geysermc.floodgate.util.SpigotCommandUtil;
@RequiredArgsConstructor
@@ -88,8 +89,8 @@ public final class SpigotPlatformModule extends AbstractModule {
@Provides
@Singleton
public CommandUtil commandUtil(FloodgateLogger logger) {
return new SpigotCommandUtil(plugin, logger);
public CommandUtil commandUtil(FloodgateLogger logger, LanguageManager languageManager) {
return new SpigotCommandUtil(plugin, logger, languageManager);
}
@Provides

View File

@@ -30,7 +30,9 @@ import lombok.RequiredArgsConstructor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.geysermc.floodgate.api.FloodgateApi;
import org.geysermc.floodgate.api.logger.FloodgateLogger;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
import org.geysermc.floodgate.platform.command.CommandMessage;
import org.geysermc.floodgate.platform.command.util.CommandResponseCache;
import org.geysermc.floodgate.platform.command.util.CommandUtil;
@@ -39,10 +41,19 @@ import org.geysermc.floodgate.platform.command.util.CommandUtil;
public final class SpigotCommandUtil extends CommandResponseCache<String> implements CommandUtil {
private final JavaPlugin plugin;
private final FloodgateLogger logger;
private final LanguageManager manager;
@Override
public void sendMessage(Object player, CommandMessage message, Object... args) {
cast(player).sendMessage(format(message, args));
Player bukkitPlayer = cast(player);
FloodgatePlayer floodgatePlayer =
FloodgateApi.getInstance().getPlayer(bukkitPlayer.getUniqueId());
if (floodgatePlayer != null) {
bukkitPlayer.sendMessage(manager.getPlayerLocaleString(message.getMessage(),
floodgatePlayer.getLanguageCode(), args));
} else {
bukkitPlayer.sendMessage(manager.getLocaleStringLog(message.getMessage(), args));
}
}
@Override

View File

@@ -48,6 +48,7 @@ import org.geysermc.floodgate.logger.Slf4jLogger;
import org.geysermc.floodgate.platform.command.CommandRegistration;
import org.geysermc.floodgate.platform.command.util.CommandUtil;
import org.geysermc.floodgate.platform.listener.ListenerRegistration;
import org.geysermc.floodgate.util.LanguageManager;
import org.geysermc.floodgate.util.VelocityCommandUtil;
import org.slf4j.Logger;
@@ -90,8 +91,9 @@ public final class VelocityPlatformModule extends AbstractModule {
@Provides
@Singleton
public VelocityCommandUtil commandUtil(FloodgateLogger logger) {
return new VelocityCommandUtil(logger);
public VelocityCommandUtil commandUtil(FloodgateLogger logger,
LanguageManager languageManager) {
return new VelocityCommandUtil(logger, languageManager);
}
@Provides

View File

@@ -30,7 +30,9 @@ import com.velocitypowered.api.proxy.Player;
import lombok.RequiredArgsConstructor;
import net.kyori.text.TextComponent;
import net.kyori.text.serializer.legacy.LegacyComponentSerializer;
import org.geysermc.floodgate.api.FloodgateApi;
import org.geysermc.floodgate.api.logger.FloodgateLogger;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
import org.geysermc.floodgate.platform.command.CommandMessage;
import org.geysermc.floodgate.platform.command.util.CommandResponseCache;
import org.geysermc.floodgate.platform.command.util.CommandUtil;
@@ -38,10 +40,21 @@ import org.geysermc.floodgate.platform.command.util.CommandUtil;
@RequiredArgsConstructor
public final class VelocityCommandUtil extends CommandResponseCache<TextComponent> implements CommandUtil {
private final FloodgateLogger logger;
private final LanguageManager manager;
@Override
public void sendMessage(Object player, CommandMessage message, Object... args) {
cast(player).sendMessage(getOrAddCachedMessage(message, args));
Player velocityPlayer = cast(player);
FloodgatePlayer floodgatePlayer =
FloodgateApi.getInstance().getPlayer(velocityPlayer.getUniqueId());
if (floodgatePlayer != null) {
velocityPlayer.sendMessage(
transformMessage(manager.getPlayerLocaleString(message.getMessage(),
floodgatePlayer.getLanguageCode(), args)));
} else {
velocityPlayer.sendMessage(
transformMessage(manager.getLocaleStringLog(message.getMessage(), args)));
}
}
@Override