From 5154e4103325029977fb3b42920c2c2e5cf9912e Mon Sep 17 00:00:00 2001 From: Siroshun09 Date: Mon, 20 Nov 2023 03:01:15 +0900 Subject: [PATCH] improve: remove TranslationLoader --- pom.xml | 40 +-- .../ServerConnectorPlugin.java | 111 +++++--- .../command/SlashServerCommand.java | 28 +- .../serverconnector/lang/Messages.java | 242 +++++++----------- .../listener/PlayerListener.java | 31 ++- src/main/resources/en.yml | 37 ++- src/main/resources/ja_JP.yml | 37 ++- 7 files changed, 231 insertions(+), 295 deletions(-) diff --git a/pom.xml b/pom.xml index 20b0f71..5d1b10b 100644 --- a/pom.xml +++ b/pom.xml @@ -65,13 +65,6 @@ 5.4 provided - - - com.github.siroshun09.translationloader - translationloader - 2.0.2 - compile - @@ -90,6 +83,8 @@ + ${project.name}-${project.version} + org.apache.maven.plugins @@ -108,35 +103,8 @@ org.apache.maven.plugins - maven-shade-plugin - 3.5.0 - - ${project.name}-${project.version} - - - *:* - - META-INF/MANIFEST.MF - - - - true - true - - - com.github.siroshun09 - ${project.groupId}.lib - - - - - - package - - shade - - - + maven-jar-plugin + 3.3.0 diff --git a/src/main/java/net/okocraft/serverconnector/ServerConnectorPlugin.java b/src/main/java/net/okocraft/serverconnector/ServerConnectorPlugin.java index b68d5c4..5010543 100644 --- a/src/main/java/net/okocraft/serverconnector/ServerConnectorPlugin.java +++ b/src/main/java/net/okocraft/serverconnector/ServerConnectorPlugin.java @@ -1,36 +1,44 @@ package net.okocraft.serverconnector; -import com.github.siroshun09.translationloader.directory.TranslationDirectory; import com.google.inject.Inject; +import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.event.proxy.ProxyReloadEvent; import com.velocitypowered.api.event.proxy.ProxyShutdownEvent; import com.velocitypowered.api.plugin.annotation.DataDirectory; +import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ProxyServer; -import net.kyori.adventure.key.Key; +import net.kyori.adventure.translation.Translator; import net.okocraft.serverconnector.command.SlashServerCommand; import net.okocraft.serverconnector.config.ServerConnectorConfig; +import net.okocraft.serverconnector.lang.Messages; import net.okocraft.serverconnector.listener.FirstJoinListener; import net.okocraft.serverconnector.listener.PlayerListener; +import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.yaml.YAMLConfigurationLoader; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.io.InputStream; +import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Objects; +import java.util.stream.Stream; public final class ServerConnectorPlugin { private final ProxyServer proxy; private final ServerConnectorConfig config = new ServerConnectorConfig(); - private final TranslationDirectory translationDirectory; + private final Map localizedMessagesMap = new HashMap<>(); private final Path dataDirectory; private final List registeredSlashServerCommands = new ArrayList<>(); @@ -40,29 +48,16 @@ public final class ServerConnectorPlugin { public ServerConnectorPlugin(@NotNull ProxyServer proxy, @DataDirectory Path dataDirectory) { this.proxy = proxy; this.dataDirectory = dataDirectory; - - this.translationDirectory = - TranslationDirectory.newBuilder() - .setDirectory(dataDirectory.resolve("languages")) - .setKey(Key.key("serverconnector", "language")) - .setDefaultLocale(Locale.ENGLISH) - .onDirectoryCreated(this::saveDefaultLanguages) - .build(); - } @Subscribe(order = PostOrder.FIRST) public void onEnable(ProxyInitializeEvent ignored) { try { + Files.createDirectories(this.dataDirectory); this.loadConfig(); - } catch (IOException e) { - throw new IllegalStateException("Failed to load config.yml", e); - } - - try { - translationDirectory.load(); - } catch (IOException e) { - throw new IllegalStateException("Failed to load languages", e); + this.loadMessages(); + } catch (IOException | UncheckedIOException e) { + throw new IllegalStateException("Failed to load config.yml or languages", e); } enablePlayerListener(); @@ -78,17 +73,15 @@ public void onDisable(ProxyShutdownEvent ignored) { getProxy().getEventManager().unregisterListeners(this); - registeredSlashServerCommands.forEach(SlashServerCommand::unregister); - - translationDirectory.unload(); + this.registeredSlashServerCommands.forEach(SlashServerCommand::unregister); + this.registeredSlashServerCommands.clear(); + this.localizedMessagesMap.clear(); } @Subscribe public void onReload(ProxyReloadEvent ignored) { - if (!registeredSlashServerCommands.isEmpty()) { - registeredSlashServerCommands.forEach(SlashServerCommand::unregister); - enableSlashServer(); - } + this.registeredSlashServerCommands.forEach(SlashServerCommand::unregister); + enableSlashServer(); } public @NotNull ProxyServer getProxy() { @@ -99,6 +92,24 @@ public void onReload(ProxyReloadEvent ignored) { return config; } + public @NotNull Messages getLocalizedMessages(@Nullable CommandSource sender) { + if (sender instanceof Player) { + return this.getLocalizedMessages(((Player) sender).getEffectiveLocale()); + } else { + return this.getLocalizedMessages((Locale) null); + } + } + + public @NotNull Messages getLocalizedMessages(@Nullable Locale locale) { + var messages = this.localizedMessagesMap.get(locale); + + if (messages == null && locale != null) { + messages = this.localizedMessagesMap.get(new Locale(locale.getLanguage())); + } + + return messages != null ? messages : this.localizedMessagesMap.get(null); + } + private void loadConfig() throws IOException { var filepath = this.dataDirectory.resolve("config.yml"); @@ -131,6 +142,42 @@ private void loadConfig() throws IOException { this.config.fallbackServer = node.getNode("server-to-send-when-kicked").getString(); } + private void loadMessages() throws IOException { + Path directory = this.dataDirectory.resolve("languages"); + Files.createDirectories(directory); + this.localizedMessagesMap.put(null, new Messages(ConfigurationNode.root())); + this.saveResource("en.yml", directory.resolve("en.yml")); + this.saveResource("ja_JP.yml", directory.resolve("ja_JP.yml")); + try (Stream list = Files.list(directory)) { + list.forEach(this::loadMessageFile); + } + } + + private void loadMessageFile(Path filepath) { + String filename = filepath.getFileName().toString(); + if (!filename.endsWith(".yml")) { + return; + } + + Locale locale = Translator.parseLocale(filename.substring(0, filename.length() - 4)); + + if (locale == null) { + return; + } + + ConfigurationNode source; + + try { + source = YAMLConfigurationLoader.builder().setPath(filepath).build().load(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + + var messageMap = new Messages(source); + this.localizedMessagesMap.put(locale, messageMap); + this.localizedMessagesMap.put(new Locale(locale.getLanguage()), messageMap); + } + private void saveResource(String resourceName, Path filepath) throws IOException { if (!Files.isRegularFile(filepath)) { try (InputStream input = this.getClass().getClassLoader().getResourceAsStream(resourceName)) { @@ -158,14 +205,4 @@ private void enableFirstJoinDetector() { this.firstJoinListener = new FirstJoinListener(this); } } - - private void saveDefaultLanguages(@NotNull Path directory) throws IOException { - var defaultFileName = "en.yml"; - var defaultFile = directory.resolve(defaultFileName); - this.saveResource(defaultFileName, defaultFile); - - var japaneseFileName = "ja_JP.yml"; - var japaneseFile = directory.resolve(japaneseFileName); - this.saveResource(japaneseFileName, japaneseFile); - } } diff --git a/src/main/java/net/okocraft/serverconnector/command/SlashServerCommand.java b/src/main/java/net/okocraft/serverconnector/command/SlashServerCommand.java index 6a0aa0b..097e356 100644 --- a/src/main/java/net/okocraft/serverconnector/command/SlashServerCommand.java +++ b/src/main/java/net/okocraft/serverconnector/command/SlashServerCommand.java @@ -6,8 +6,8 @@ import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.proxy.server.ServerInfo; +import net.kyori.adventure.text.Component; import net.okocraft.serverconnector.ServerConnectorPlugin; -import net.okocraft.serverconnector.lang.Messages; import java.util.Collections; import java.util.List; @@ -45,9 +45,10 @@ public void unregister() { @Override public void execute(Invocation invocation) { var sender = invocation.source(); + var messages = this.plugin.getLocalizedMessages(sender); if (!sender.hasPermission(this.permission)) { - sender.sendMessage(Messages.SLASH_SERVER_NO_PERMISSION.apply(this.permission)); + sender.sendMessage(messages.slashServerNoPermission); return; } @@ -56,40 +57,39 @@ public void execute(Invocation invocation) { if (0 < args.length) { if (!sender.hasPermission(GLOBAL_OTHER_PLAYER_PERMISSION) && !sender.hasPermission(otherPermission)) { - sender.sendMessage(Messages.SLASH_SERVER_NO_PERMISSION.apply(otherPermission)); + sender.sendMessage(messages.slashServerNoPermission); return; } target = this.plugin.getProxy().getPlayer(args[0]).orElse(null); if (target == null) { - sender.sendMessage(Messages.SLASH_SERVER_PLAYER_NOT_FOUND.apply(args[0])); + sender.sendMessage(messages.slashServerPlayerNotFound(args[0])); return; } } else { if (sender instanceof Player) { target = (Player) sender; } else { - sender.sendMessage(Messages.SLASH_SERVER_ONLY_PLAYER); + sender.sendMessage(Component.text("/" + this.serverInfo.getName() + " ")); return; } } var currentServer = target.getCurrentServer().map(ServerConnection::getServerInfo); - if (serverInfo.equals(currentServer.orElse(null))) { - sender.sendMessage(Messages.SLASH_SERVER_ALREADY_CONNECTED); + if (this.serverInfo.equals(currentServer.orElse(null))) { + sender.sendMessage(messages.slashServerAlreadyConnected); return; } - target.createConnectionRequest(server).fireAndForget(); + target.sendMessage(messages.slashServerConnecting(this.serverInfo.getName())); if (sender != target) { - target.sendMessage(Messages.SLASH_SERVER_CONNECTING.apply(serverInfo.getName())); - sender.sendMessage(Messages.SLASH_SERVER_CONNECTING_OTHER.apply(target, serverInfo.getName())); - } else { - sender.sendMessage(Messages.SLASH_SERVER_CONNECTING.apply(serverInfo.getName())); + sender.sendMessage(messages.slashServerConnectingOther(target, this.serverInfo.getName())); } + + target.createConnectionRequest(this.server).fireAndForget(); } @Override @@ -98,9 +98,9 @@ public List suggest(Invocation invocation) { var args = invocation.arguments(); if (args.length <= 1 && (sender.hasPermission(GLOBAL_OTHER_PLAYER_PERMISSION) || sender.hasPermission(otherPermission))) { - return plugin.getProxy().getAllPlayers().stream() + return this.plugin.getProxy().getAllPlayers().stream() .filter(Predicate.not(sender::equals)) - .filter(Predicate.not(player -> serverInfo.equals(player.getCurrentServer().map(ServerConnection::getServerInfo).orElse(null)))) + .filter(Predicate.not(player -> this.serverInfo.equals(player.getCurrentServer().map(ServerConnection::getServerInfo).orElse(null)))) .map(Player::getUsername) .filter(name -> args.length == 0 || name.regionMatches(true, 0, args[0], 0, args[0].length())) .collect(Collectors.toList()); diff --git a/src/main/java/net/okocraft/serverconnector/lang/Messages.java b/src/main/java/net/okocraft/serverconnector/lang/Messages.java index 7fa6fe1..40af044 100644 --- a/src/main/java/net/okocraft/serverconnector/lang/Messages.java +++ b/src/main/java/net/okocraft/serverconnector/lang/Messages.java @@ -1,160 +1,102 @@ package net.okocraft.serverconnector.lang; -import com.github.siroshun09.translationloader.argument.DoubleArgument; -import com.github.siroshun09.translationloader.argument.SingleArgument; import com.velocitypowered.api.proxy.Player; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TranslatableComponent; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import ninja.leaping.configurate.ConfigurationNode; +import org.jetbrains.annotations.NotNull; -import java.util.function.BiFunction; -import java.util.function.Function; +public final class Messages { -import static net.kyori.adventure.text.Component.text; -import static net.kyori.adventure.text.Component.translatable; -import static net.kyori.adventure.text.format.NamedTextColor.AQUA; -import static net.kyori.adventure.text.format.NamedTextColor.GRAY; -import static net.kyori.adventure.text.format.NamedTextColor.RED; -import static net.kyori.adventure.text.format.NamedTextColor.YELLOW; + public final Component proxyNoPermission; + private final String proxyJoin; + private final String proxyFirstJoin; + private final String proxyLeave; + private final String serverNoPermission; + private final String serverKick; + private final String serverSwitch; + public final Component slashServerNoPermission; + public final Component slashServerAlreadyConnected; + private final String slashServerConnecting; + private final String slashServerConnectingOther; + private final String slashServerPlayerNotFound; + + public Messages(@NotNull ConfigurationNode source) { + this.proxyNoPermission = preFormatted(source, "You don't have the permission to connect to the proxy.", "proxy", "no-permission"); + this.proxyJoin = getMessage(source, " joined the proxy.", "proxy", "join"); + this.proxyFirstJoin = getMessage(source, " is logged in for the first time. Welcome to the server!", "proxy", "first-join"); + this.proxyLeave = getMessage(source, " left the proxy.", "proxy", "leave"); + + this.serverNoPermission = getMessage(source, "You don't have the permission to connect to the server .", "server", "no-permission"); + this.serverKick = getMessage(source, "You have been kicked from the server : ", "server", "kick"); + this.serverSwitch = getMessage(source, " has been moved to the server .", "server", "switch"); + + this.slashServerNoPermission = preFormatted(source, "You don't have the permission to execute this command.", "slash-server", "no-permission"); + this.slashServerAlreadyConnected = preFormatted(source, "You are already connected to the same server.", "slash-server", "already-connected"); + this.slashServerConnecting = getMessage(source, "Connecting to the server ...", "slash-server", "connecting"); + this.slashServerConnectingOther = getMessage(source, "Connecting to the server ...", "slash-server", "connecting-other"); + this.slashServerPlayerNotFound = getMessage(source, "The player could not be found.", "slash-server", "player-not-found"); + } -public final class Messages { + public @NotNull Component proxyJoin(@NotNull Player player) { + return format(this.proxyJoin, player(player)); + } + + public @NotNull Component firstJoin(@NotNull Player player) { + return format(this.proxyFirstJoin, player(player)); + } + + public @NotNull Component proxyLeave(@NotNull Player player) { + return format(this.proxyLeave, player(player)); + } + + public @NotNull Component serverNoPermission(@NotNull String serverName) { + return format(this.serverNoPermission, server(serverName)); + } + + public @NotNull Component serverKick(@NotNull String serverName, @NotNull Component reason) { + return format(this.serverKick, server(serverName), Placeholder.component("reason", reason)); + } + + public @NotNull Component serverSwitch(@NotNull Player player, @NotNull String serverName) { + return format(this.serverSwitch, player(player), server(serverName)); + } + + public @NotNull Component slashServerConnecting(@NotNull String serverName) { + return format(this.slashServerConnecting, server(serverName)); + } + + public @NotNull Component slashServerConnectingOther(@NotNull Player player, @NotNull String serverName) { + return format(this.slashServerConnectingOther, player(player), server(serverName)); + } + + public @NotNull Component slashServerPlayerNotFound(@NotNull String arg) { + return format(this.slashServerPlayerNotFound, Placeholder.component("arg", Component.text(arg))); + } + + private static @NotNull Component preFormatted(@NotNull ConfigurationNode source, @NotNull String def, @NotNull Object @NotNull ... keys) { + return MiniMessage.miniMessage().deserialize(getMessage(source, def, keys)); + } + + private static @NotNull Component format(@NotNull String input, @NotNull TagResolver resolver) { + return MiniMessage.miniMessage().deserialize(input, resolver); + } + + private static @NotNull Component format(@NotNull String input, @NotNull TagResolver @NotNull ... resolvers) { + return MiniMessage.miniMessage().deserialize(input, resolvers); + } + + private static @NotNull String getMessage(@NotNull ConfigurationNode source, @NotNull String def, @NotNull Object @NotNull ... keys) { + return source.getNode(keys).getString(def); + } + + private static @NotNull TagResolver player(@NotNull Player player) { + return Placeholder.component("player", Component.text().content(player.getUsername()).hoverEvent(player).build()); + } - private static final TranslatableComponent PREFIX = translatable("serverconnector.prefix", GRAY); - - public static final BiFunction NO_PERMISSION_TO_CONNECT_TO_SERVER = - (serverName, permission) -> - PREFIX.toBuilder() - .append(translatable() - .key("serverconnector.server.no-permission") - .args(text(serverName, AQUA), text(permission, AQUA)) - .color(RED) - .build() - ) - .build(); - - public static final BiFunction KICKED_FROM_SERVER = - (serverName, reason) -> - PREFIX.toBuilder() - .append( - translatable() - .key("serverconnector.server.kick") - .args(text(serverName, AQUA), reason) - .color(RED) - .build() - ) - .build(); - - public static final BiFunction SWITCH_SERVER = - (playerName, serverName) -> - PREFIX.toBuilder() - .append( - translatable() - .key("serverconnector.server.switch") - .args(text(playerName, AQUA), text(serverName, AQUA)) - .color(GRAY) - .build() - ) - .build(); - - public static final Function JOIN_PROXY = - playerName -> - PREFIX.toBuilder() - .append( - translatable() - .key("serverconnector.proxy.join") - .args(text(playerName, AQUA)) - .color(GRAY) - .build() - ) - .build(); - - public static final Function LEFT_PROXY = - playerName -> - PREFIX.toBuilder() - .append( - translatable() - .key("serverconnector.proxy.leave") - .args(text(playerName, AQUA)) - .color(GRAY) - .build() - ) - .build(); - - public static final Function FIRST_JOIN_MESSAGE = - playerName -> - PREFIX.toBuilder() - .append( - translatable() - .key("serverconnector.proxy.first-join.part-1") - .args(text(playerName, AQUA)) - .color(GRAY) - .build() - ) - .append( - translatable() - .key("serverconnector.proxy.first-join.part-2") - .color(YELLOW) - .build() - ) - .build(); - - public static final Component NO_PERMISSION_TO_CONNECT_TO_PROXY = - PREFIX.toBuilder().append( - translatable() - .key("serverconnector.proxy.no-permission") - .color(RED) - .build() - ).build(); - - public static final Component SLASH_SERVER_ONLY_PLAYER = - PREFIX.toBuilder().append(translatable("serverconnector.only-player", RED)).build(); - - public static final Function SLASH_SERVER_NO_PERMISSION = - permission -> - PREFIX.toBuilder() - .append( - translatable() - .key("serverconnector.command.slash-server.no-permission") - .args(text(permission, AQUA)) - .color(RED) - ) - .build(); - - public static final Component SLASH_SERVER_ALREADY_CONNECTED = - PREFIX.toBuilder().append(translatable("serverconnector.command.slash-server.already-connected", RED)).build(); - - public static final Function SLASH_SERVER_CONNECTING = - serverName -> - PREFIX.toBuilder() - .append( - translatable() - .key("serverconnector.command.slash-server.connecting") - .args(text(serverName, AQUA)) - .color(GRAY) - .build() - ) - .build(); - - public static final DoubleArgument SLASH_SERVER_CONNECTING_OTHER = - (player, serverName) -> - PREFIX.append( - translatable() - .key("serverconnector.command.slash-server.connecting-other") - .args(text(player.getUsername(), AQUA), text(serverName, AQUA)) - .color(GRAY) - .build() - ); - - public static final SingleArgument SLASH_SERVER_PLAYER_NOT_FOUND = - playerName -> - PREFIX.append( - translatable() - .key("serverconnector.command.slash-server.player-not-found") - .args(text(playerName, AQUA)) - .color(GRAY) - .build() - ); - - private Messages() { - throw new UnsupportedOperationException(); + private static @NotNull TagResolver server(@NotNull String serverName) { + return Placeholder.component("server", Component.text(serverName)); } } diff --git a/src/main/java/net/okocraft/serverconnector/listener/PlayerListener.java b/src/main/java/net/okocraft/serverconnector/listener/PlayerListener.java index 19b9efb..f3add1c 100644 --- a/src/main/java/net/okocraft/serverconnector/listener/PlayerListener.java +++ b/src/main/java/net/okocraft/serverconnector/listener/PlayerListener.java @@ -13,15 +13,13 @@ import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.proxy.server.ServerInfo; import net.kyori.adventure.text.Component; -import net.kyori.adventure.translation.GlobalTranslator; import net.okocraft.serverconnector.ServerConnectorPlugin; import net.okocraft.serverconnector.lang.Messages; import net.okocraft.serverconnector.util.FirstJoinPlayerHolder; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Locale; -import java.util.Objects; +import java.util.function.Function; public class PlayerListener { @@ -37,9 +35,8 @@ public void onLogin(@NotNull LoginEvent event) { return; } - var locale = Objects.requireNonNullElse(event.getPlayer().getEffectiveLocale(), Locale.ENGLISH); - var translated = GlobalTranslator.render(Messages.NO_PERMISSION_TO_CONNECT_TO_PROXY, locale); - event.setResult(ResultedEvent.ComponentResult.denied(translated)); + var locale = event.getPlayer().getEffectiveLocale(); + event.setResult(ResultedEvent.ComponentResult.denied(this.plugin.getLocalizedMessages(locale).proxyNoPermission)); } @Subscribe @@ -81,8 +78,9 @@ public void onKick(@NotNull KickedFromServerEvent event) { var fallback = this.getFallbackServer(); if (fallback != null && !from.equals(fallback)) { - var message = Messages.KICKED_FROM_SERVER.apply(from.getServerInfo().getName(), event.getServerKickReason().orElse(Component.empty())); - event.setResult(KickedFromServerEvent.RedirectPlayer.create(fallback, message)); + var messages = this.plugin.getLocalizedMessages(event.getPlayer().getEffectiveLocale()); + var serverKickMessage = messages.serverKick(from.getServerInfo().getName(), event.getServerKickReason().orElse(Component.empty())); + event.setResult(KickedFromServerEvent.RedirectPlayer.create(fallback, serverKickMessage)); } } @@ -90,22 +88,21 @@ public void onKick(@NotNull KickedFromServerEvent event) { @Subscribe public void onServerConnect(@NotNull ServerPostConnectEvent event) { var player = event.getPlayer(); - var playerName = player.getUsername(); if (event.getPreviousServer() == null) { if (this.plugin.getConfig().sendJoinMessage) { - this.plugin.getProxy().sendMessage(Messages.JOIN_PROXY.apply(playerName)); + this.broadcastMessage(messages -> messages.proxyJoin(player)); } // The reason for not checking the config setting here is that if it is disabled, the user will not be added to the FirstJoinPlayerHolder. if (FirstJoinPlayerHolder.remove(player.getUniqueId())) { - this.plugin.getProxy().sendMessage(Messages.FIRST_JOIN_MESSAGE.apply(playerName)); + this.broadcastMessage(messages -> messages.firstJoin(player)); } } else if (this.plugin.getConfig().sendSwitchMessage) { var serverName = player.getCurrentServer().map(ServerConnection::getServerInfo).map(ServerInfo::getName).orElse(""); if (!serverName.isEmpty()) { - this.plugin.getProxy().sendMessage(Messages.SWITCH_SERVER.apply(playerName, serverName)); + this.broadcastMessage(messages -> messages.serverSwitch(player, serverName)); } } } @@ -115,7 +112,7 @@ public void onDisconnect(DisconnectEvent event) { var player = event.getPlayer(); if (event.getLoginStatus() == DisconnectEvent.LoginStatus.SUCCESSFUL_LOGIN && this.plugin.getConfig().sendLeaveMessage) { - this.plugin.getProxy().sendMessage(Messages.LEFT_PROXY.apply(player.getUsername())); + this.broadcastMessage(messages -> messages.proxyLeave(player)); } } @@ -127,7 +124,7 @@ private boolean checkServerPermission(@NotNull Player player, @NotNull String se if (this.checkPermissionIfNotNull(player, this.getServerPermission(serverName))) { return true; } else if (sendMessage) { - player.sendMessage(Messages.NO_PERMISSION_TO_CONNECT_TO_SERVER.apply(serverName, this.getServerPermission(serverName))); + player.sendMessage(this.plugin.getLocalizedMessages(player.getEffectiveLocale()).serverNoPermission(serverName)); } return false; @@ -150,4 +147,10 @@ private boolean checkPermissionIfNotNull(@NotNull Player player, @Nullable Strin private boolean shouldIgnore(@NotNull ResultedEvent event) { return !event.getResult().isAllowed() || !this.plugin.getConfig().enableServerPermission; } + + private void broadcastMessage(@NotNull Function messageFunction) { + for (var player : this.plugin.getProxy().getAllPlayers()) { + player.sendMessage(messageFunction.apply(this.plugin.getLocalizedMessages(player.getEffectiveLocale()))); + } + } } diff --git a/src/main/resources/en.yml b/src/main/resources/en.yml index cc6580c..4a65e6c 100644 --- a/src/main/resources/en.yml +++ b/src/main/resources/en.yml @@ -1,22 +1,15 @@ -serverconnector: - prefix: "" - server: - no-permission: "You don''t have the permission to connect to the server {0}: {1}" - kick: "You have been kicked from server {0}: {1}" - switch: "{0} has been moved to server {1}." - proxy: - no-permission: "You don''t have the permission to connect to the proxy." - join: "{0} joined the proxy." - leave: "{0} left the proxy." - first-join: - # the layout of the final message to be sent: " " - part-1: "{0} is logged in for the first time." - part-2: "Welcome to the server!" - command: - slash-server: - only-player: "This command can only be executed by the player." - no-permission: "You don''t have the permission to execute this command: {0}" - already-connected: "You are already connected to the same server." - connecting: "Connecting to server {0}..." - connecting-other: "Connecting {0} to {1}..." - player-not-found: "The player {0} could not be found." +server: + no-permission: "You don't have the permission to connect to the server ." + kick: "You have been kicked from the server : " + switch: " has been moved to the server ." +proxy: + no-permission: "You don't have the permission to connect to the proxy." + join: " joined the proxy." + leave: " left the proxy." + first-join: " is logged in for the first time. Welcome to the server!" +slash-server: + no-permission: "You don't have the permission to execute this command." + already-connected: "You are already connected to the same server." + connecting: "Connecting to the server ..." + connecting-other: "Connecting to the server ..." + player-not-found: "The player could not be found." diff --git a/src/main/resources/ja_JP.yml b/src/main/resources/ja_JP.yml index ba2e8b6..3652e06 100644 --- a/src/main/resources/ja_JP.yml +++ b/src/main/resources/ja_JP.yml @@ -1,22 +1,15 @@ -serverconnector: - prefix: "" - server: - no-permission: "サーバー {0} に接続する権限がありません: {1}" - kick: "サーバー {0} からキックされました: {1}" - switch: "{0} はサーバー {1} に移動しました。" - proxy: - no-permission: "サーバーに接続する権限がありません." - join: "{0} がサーバーにログインしました。" - leave: "{0} がサーバーからログアウトしました。" - first-join: - # 最終的に送信されるメッセージのレイアウト: " " - part-1: "{0} が初めてログインしました。" - part-2: "ようこそサーバーへ!" - command: - slash-server: - only-player: "このコマンドはプレイヤーのみ実行できます。" - no-permission: "このコマンドを実行する権限がありません: {0}" - already-connected: "すでに同じサーバーに接続しています。" - connecting: "{0} に接続しています..." - connecting-other: "{0} を {1} に接続させています..." - player-not-found: "プレイヤー {0} は見つかりませんでした。" +server: + no-permission: "サーバー に接続する権限がありません。" + kick: "サーバー からキックされました: " + switch: " はサーバー に移動しました。" +proxy: + no-permission: "サーバーに接続する権限がありません。" + join: " がサーバーにログインしました。" + leave: " がサーバーにログアウトしました。" + first-join: " が初めてログインしました。ようこそサーバーへ!" +slash-server: + no-permission: "このコマンドを実行する権限がありません。" + already-connected: "すでに同じサーバーに接続しています。" + connecting: "サーバー に接続しています..." + connecting-other: "プレイヤー をサーバー に接続させています..." + player-not-found: "プレイヤー は見つかりませんでした。"