From c3b802e4803724d6f0f1989b5151d7647a3c9ab6 Mon Sep 17 00:00:00 2001 From: vLuckyyy Date: Fri, 27 Jun 2025 21:52:19 +0200 Subject: [PATCH 1/5] Simplify language system to single global config-based language --- .../com/eternalcode/core/EternalCoreApi.java | 3 - .../feature/language/LanguageService.java | 20 --- .../eternalcode/core/EternalCoreApiImpl.java | 6 - .../argument/AbstractViewerArgument.java | 4 +- .../contextual/PlayerContextual.java | 2 +- .../contextual/UserContextual.java | 2 +- .../implementation/PluginConfiguration.java | 3 + .../core/feature/afk/AfkKickController.java | 2 +- .../core/feature/afk/AfkPlaceholderSetup.java | 2 +- .../feature/container/DisposalCommand.java | 2 +- .../FullServerBypassController.java | 4 +- .../feature/home/HomePlaceholderSetup.java | 2 +- .../language/BukkitLanguageProvider.java | 48 ----- .../feature/language/LanguageCommand.java | 29 --- .../feature/language/LanguageInventory.java | 166 ------------------ .../language/LanguageLoadController.java | 31 ---- .../feature/language/LanguageRepository.java | 15 -- .../language/LanguageRepositoryImpl.java | 65 ------- .../feature/language/LanguageServiceImpl.java | 80 --------- .../language/config/LanguageConfigItem.java | 23 --- .../config/LanguageConfiguration.java | 100 ----------- .../core/feature/warp/WarpInventory.java | 71 +++----- .../core/notice/NoticeService.java | 15 +- .../core/translation/AbstractTranslation.java | 15 +- .../core/translation/Translation.java | 10 +- .../core/translation/TranslationManager.java | 62 ++----- .../translation/TranslationManagerSetup.java | 32 +--- .../implementation/ENTranslation.java | 34 +--- .../implementation/PLTranslation.java | 29 +-- .../implementation/TranslationFactory.java | 26 +-- 30 files changed, 86 insertions(+), 817 deletions(-) delete mode 100644 eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageService.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/BukkitLanguageProvider.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageCommand.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageInventory.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageLoadController.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepository.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepositoryImpl.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageServiceImpl.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfigItem.java delete mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfiguration.java diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/EternalCoreApi.java b/eternalcore-api/src/main/java/com/eternalcode/core/EternalCoreApi.java index 08eaa6e17..74ca89cf1 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/EternalCoreApi.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/EternalCoreApi.java @@ -4,7 +4,6 @@ import com.eternalcode.core.feature.catboy.CatboyService; import com.eternalcode.core.feature.home.HomeService; import com.eternalcode.core.feature.jail.JailService; -import com.eternalcode.core.feature.language.LanguageService; import com.eternalcode.core.feature.privatechat.PrivateChatService; import com.eternalcode.core.feature.ignore.IgnoreService; import com.eternalcode.core.feature.randomteleport.RandomTeleportService; @@ -24,8 +23,6 @@ public interface EternalCoreApi { JailService getJailService(); - LanguageService getLanguageService(); - PrivateChatService getPrivateChatService(); RandomTeleportService getRandomTeleportService(); diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageService.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageService.java deleted file mode 100644 index 689bbcefe..000000000 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageService.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.eternalcode.core.feature.language; - -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -public interface LanguageService { - - void setDefaultProvider(LanguageProvider defaultProvider); - - LanguageProvider getDefaultProvider(); - - CompletableFuture getLanguage(UUID playerUniqueId); - - Language getLanguageNow(UUID playerUniqueId); - - CompletableFuture setLanguage(UUID playerUniqueId, Language language); - - CompletableFuture setDefaultLanguage(UUID playerUniqueId); - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/EternalCoreApiImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/EternalCoreApiImpl.java index 28998f2c1..b2f7799aa 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/EternalCoreApiImpl.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/EternalCoreApiImpl.java @@ -5,7 +5,6 @@ import com.eternalcode.core.feature.home.HomeService; import com.eternalcode.core.feature.ignore.IgnoreService; import com.eternalcode.core.feature.jail.JailService; -import com.eternalcode.core.feature.language.LanguageService; import com.eternalcode.core.feature.privatechat.PrivateChatService; import com.eternalcode.core.feature.randomteleport.RandomTeleportService; import com.eternalcode.core.feature.spawn.SpawnService; @@ -46,11 +45,6 @@ public JailService getJailService() { return this.dependencyProvider.getDependency(JailService.class); } - @Override - public LanguageService getLanguageService() { - return this.dependencyProvider.getDependency(LanguageService.class); - } - @Override public PrivateChatService getPrivateChatService() { return this.dependencyProvider.getDependency(PrivateChatService.class); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java index d25f49079..3c2305025 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java @@ -21,11 +21,11 @@ protected AbstractViewerArgument(TranslationManager translationManager) { @Override protected ParseResult parse(Invocation invocation, Argument context, String argument) { if (invocation.sender() instanceof Player player) { - Translation translation = this.translationManager.getMessages(player.getUniqueId()); + Translation translation = this.translationManager.getMessages(); return this.parse(invocation, argument, translation); } - Translation translation = this.translationManager.getMessages(Language.DEFAULT); + Translation translation = this.translationManager.getMessages(); return this.parse(invocation, argument, translation); } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/PlayerContextual.java b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/PlayerContextual.java index cc99bbfd1..8a0f550ae 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/PlayerContextual.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/PlayerContextual.java @@ -27,7 +27,7 @@ public ContextResult provide(Invocation invocation) { return ContextResult.ok(() -> player); } - Translation translation = this.translationManager.getDefaultMessages(); + Translation translation = this.translationManager.getMessages(); Notice onlyPlayer = translation.argument().onlyPlayer(); return ContextResult.error(onlyPlayer); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/UserContextual.java b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/UserContextual.java index 6dc29c4e4..e07d8c73c 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/UserContextual.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/contextual/UserContextual.java @@ -32,7 +32,7 @@ public ContextResult provide(Invocation invocation) { .orElseThrow(() -> new IllegalStateException("Player " + player.getName() + " is not registered!"))); } - Translation translation = this.translationManager.getDefaultMessages(); + Translation translation = this.translationManager.getMessages(); Notice onlyPlayer = translation.argument().onlyPlayer(); return ContextResult.error(onlyPlayer); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java index 0dfde15dd..7e851b224 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java @@ -47,6 +47,9 @@ public class PluginConfiguration implements ReloadableConfig { @Description("# Whether the player should receive information about new plugin updates upon joining the server") public boolean shouldReceivePluginUpdates = true; + @Description("# Language, currently supported languages: en, pl") + public String language = "en"; + @Description({ " ", "# Database Section" }) public Database database = new Database(); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkKickController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkKickController.java index ffd047e56..e802974e8 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkKickController.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkKickController.java @@ -60,7 +60,7 @@ void onAfkSwitch(AfkSwitchEvent event) { } User user = this.userManager.getOrCreate(playerUUID, player.getName()); - Translation translation = this.translationManager.getMessages(user.getUniqueId()); + Translation translation = this.translationManager.getMessages(); Component component = this.miniMessage.deserialize(translation.afk().afkKickReason()); player.kickPlayer(legacySection().serialize(component)); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkPlaceholderSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkPlaceholderSetup.java index ac71db826..f92bc4e37 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkPlaceholderSetup.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/afk/AfkPlaceholderSetup.java @@ -31,7 +31,7 @@ void setUpPlaceholders(PlaceholderRegistry placeholderRegistry, AfkService afkSe placeholderRegistry.registerPlaceholder(PlaceholderReplacer.of( "afk_formatted", player -> { - Translation messages = this.translationManager.getMessages(player.getUniqueId()); + Translation messages = this.translationManager.getMessages(); return afkService.isAfk(player.getUniqueId()) ? messages.afk().afkEnabledPlaceholder() : messages.afk().afkDisabledPlaceholder(); })); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/container/DisposalCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/container/DisposalCommand.java index c48be8d0d..0e7eb8d8a 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/container/DisposalCommand.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/container/DisposalCommand.java @@ -35,7 +35,7 @@ class DisposalCommand { @Execute @DescriptionDocs(description = "Opens a disposal") void execute(@Context Player player) { - Translation translation = this.translationManager.getMessages(player.getUniqueId()); + Translation translation = this.translationManager.getMessages(); Component component = this.miniMessage.deserialize(translation.inventory().disposalTitle()); String serialize = AdventureUtil.SECTION_SERIALIZER.serialize(component); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/fullserverbypass/FullServerBypassController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/fullserverbypass/FullServerBypassController.java index fdcd5a252..4a2af9b5f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/fullserverbypass/FullServerBypassController.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/fullserverbypass/FullServerBypassController.java @@ -59,14 +59,14 @@ private String getServerFullMessage(Player player) { if (userOption.isEmpty()) { return Joiner.on("\n") - .join(this.translationManager.getDefaultMessages().player().fullServerSlots()) + .join(this.translationManager.getMessages().player().fullServerSlots()) .toString(); } User user = userOption.get(); return Joiner.on("\n") - .join(this.translationManager.getMessages(user.getUniqueId()).player().fullServerSlots()) + .join(this.translationManager.getMessages().player().fullServerSlots()) .toString(); } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java index f4d695763..c0b37ca6b 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java @@ -54,7 +54,7 @@ static String homesLeft(int homesLimit, int amountOfHomes) { private String ownedHomes(Player targetPlayer) { Collection homes = this.homeService.getHomes(targetPlayer.getUniqueId()); - Translation translation = this.translationManager.getMessages(targetPlayer.getUniqueId()); + Translation translation = this.translationManager.getMessages(); if (homes.isEmpty()) { return translation.home().noHomesOwnedPlaceholder(); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/BukkitLanguageProvider.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/BukkitLanguageProvider.java deleted file mode 100644 index dbfcb1d63..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/BukkitLanguageProvider.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.eternalcode.core.feature.language; - -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.injector.annotations.component.Service; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Locale; -import java.util.UUID; -import org.bukkit.Server; -import org.bukkit.entity.Player; - -@Service -class BukkitLanguageProvider implements LanguageProvider { - - private static Method LOCALE_METHOD; - - private final Server server; - - @Inject - BukkitLanguageProvider(Server server) { - this.server = server; - } - - @Override - public Language getDefaultLanguage(UUID player) { - Player serverPlayer = server.getPlayer(player); - - if (serverPlayer == null) { - return Language.DEFAULT; - } - - return Language.fromLocale(getLocale(serverPlayer)); - } - - private Locale getLocale(Player player) { - try { - // Someday, when we use Paper API, we can remove this - if (LOCALE_METHOD == null) { - LOCALE_METHOD = Player.class.getMethod("locale"); - } - return (Locale) LOCALE_METHOD.invoke(player); - } - catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException exception) { - return Locale.of(player.getLocale()); - } - } - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageCommand.java deleted file mode 100644 index cd5699898..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.eternalcode.core.feature.language; - -import com.eternalcode.annotations.scan.command.DescriptionDocs; -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.user.User; -import dev.rollczi.litecommands.annotations.context.Context; -import dev.rollczi.litecommands.annotations.execute.Execute; -import dev.rollczi.litecommands.annotations.permission.Permission; -import dev.rollczi.litecommands.annotations.command.Command; -import org.bukkit.entity.Player; - -@Command(name = "language", aliases = { "lang" }) -@Permission("eternalcore.language") -class LanguageCommand { - - private final LanguageInventory languageInventory; - - @Inject - LanguageCommand(LanguageInventory languageInventory) { - this.languageInventory = languageInventory; - } - - @Execute - @DescriptionDocs(description = "Open language inventory") - void execute(@Context Player player) { - this.languageInventory.open(player); - } - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageInventory.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageInventory.java deleted file mode 100644 index ab98774b3..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageInventory.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.eternalcode.core.feature.language; - -import com.eternalcode.annotations.scan.feature.FeatureDocs; -import com.eternalcode.commons.adventure.AdventureUtil; -import com.eternalcode.commons.scheduler.Scheduler; -import com.eternalcode.core.configuration.contextual.ConfigItem; -import com.eternalcode.core.feature.language.config.LanguageConfiguration; -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.injector.annotations.component.Service; -import com.eternalcode.core.feature.language.config.LanguageConfigItem; -import com.eternalcode.core.notice.NoticeService; -import com.eternalcode.core.translation.Translation; -import com.eternalcode.core.translation.TranslationManager; -import dev.triumphteam.gui.builder.item.BaseItemBuilder; -import dev.triumphteam.gui.builder.item.ItemBuilder; -import dev.triumphteam.gui.guis.Gui; -import dev.triumphteam.gui.guis.GuiItem; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import org.bukkit.Material; -import org.bukkit.Server; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.stream.Collectors; - -@FeatureDocs( - name = "Language Inventory", - description = "This feature allows you to create a language selector inventory" -) -@Service -class LanguageInventory { - - private final LanguageConfiguration languageConfiguration; - private final TranslationManager translationManager; - private final NoticeService noticeService; - private final Server server; - private final Scheduler scheduler; - private final MiniMessage miniMessage; - private final LanguageService languageService; - - @Inject - LanguageInventory( - LanguageConfiguration languageConfiguration, - TranslationManager translationManager, - NoticeService noticeService, - Server server, - Scheduler scheduler, - MiniMessage miniMessage, - LanguageService languageService - ) { - this.languageConfiguration = languageConfiguration; - this.translationManager = translationManager; - this.noticeService = noticeService; - this.server = server; - this.scheduler = scheduler; - this.miniMessage = miniMessage; - this.languageService = languageService; - } - - void open(Player player) { - this.languageService.getLanguage(player.getUniqueId()).whenComplete((language, throwable) -> { - if (language == null) { - language = Language.DEFAULT; - } - - this.open(player, language); - }); - } - - private void open(Player player, Language language) { - LanguageConfiguration.LanguageSelector languageSelector = this.languageConfiguration.languageSelector; - Translation translation = this.translationManager.getMessages(language); - Translation.LanguageSection languageSection = translation.language(); - - Gui gui = Gui.gui() - .title(this.miniMessage.deserialize(languageSelector.title)) - .rows(languageSelector.rows) - .disableAllInteractions() - .create(); - - if (languageSelector.border.fill) { - ItemBuilder borderItem = ItemBuilder.from(languageSelector.border.material); - - if (!languageSelector.border.name.isEmpty()) { - borderItem.name(AdventureUtil.resetItalic(this.miniMessage.deserialize(languageSelector.border.name))); - } - - if (!languageSelector.border.lore.isEmpty()) { - borderItem.lore(languageSelector.border.lore.stream() - .map(entry -> AdventureUtil.resetItalic(this.miniMessage.deserialize(entry))) - .collect(Collectors.toList())); - } - - GuiItem guiItem = new GuiItem(borderItem.build()); - - switch (languageSelector.border.type) { - case BORDER -> gui.getFiller().fillBorder(guiItem); - case ALL -> gui.getFiller().fill(guiItem); - case TOP -> gui.getFiller().fillTop(guiItem); - case BOTTOM -> gui.getFiller().fillBottom(guiItem); - default -> throw new IllegalStateException("Unexpected value: " + languageSelector.border.type); - } - } - - for (LanguageConfigItem languageConfigItem : languageSelector.languageConfigItemMap) { - BaseItemBuilder baseItemBuilder = this.createItem(languageConfigItem); - GuiItem guiItem = baseItemBuilder.asGuiItem(); - - guiItem.setAction(event -> { - languageService.setLanguage(player.getUniqueId(), languageConfigItem.language); - - player.closeInventory(); - - this.noticeService.create() - .player(player.getUniqueId()) - .notice(translations -> translations.language().languageChanged()) - .send(); - }); - - gui.setItem(languageConfigItem.slot, guiItem); - } - - for (ConfigItem item : languageSection.decorationItems()) { - BaseItemBuilder baseItemBuilder = this.createItem(item); - GuiItem guiItem = baseItemBuilder.asGuiItem(); - - guiItem.setAction(event -> { - if (item.commands.isEmpty()) { - return; - } - - for (String command : item.commands) { - this.server.dispatchCommand(player, command); - } - - player.closeInventory(); - }); - - gui.setItem(item.slot(), guiItem); - } - - scheduler.run(() -> gui.open(player)); - } - - private BaseItemBuilder createItem(ConfigItem item) { - Component name = AdventureUtil.resetItalic(this.miniMessage.deserialize(item.name())); - List lore = item.lore() - .stream() - .map(entry -> AdventureUtil.resetItalic(this.miniMessage.deserialize(entry))) - .toList(); - - if (item.material() == Material.PLAYER_HEAD && !item.texture().isEmpty()) { - return ItemBuilder.skull() - .name(name) - .lore(lore) - .texture(item.texture()) - .glow(item.glow()); - } - - return ItemBuilder.from(item.material()) - .name(name) - .lore(lore) - .glow(item.glow()); - } -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageLoadController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageLoadController.java deleted file mode 100644 index 0808063a0..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageLoadController.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.eternalcode.core.feature.language; - -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.injector.annotations.component.Controller; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerPreLoginEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -@Controller -class LanguageLoadController implements Listener { - - private final LanguageServiceImpl languageService; - - @Inject - LanguageLoadController(LanguageServiceImpl languageService) { - this.languageService = languageService; - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) - void onJoin(AsyncPlayerPreLoginEvent event) { - this.languageService.loadLanguage(event.getUniqueId()); - } - - @EventHandler - void onQuit(PlayerQuitEvent event) { - this.languageService.unloadLanguage(event.getPlayer().getUniqueId()); - } - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepository.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepository.java deleted file mode 100644 index efc9054dd..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.eternalcode.core.feature.language; - -import java.util.Optional; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -interface LanguageRepository { - - CompletableFuture> findLanguage(UUID player); - - CompletableFuture saveLanguage(UUID player, Language language); - - CompletableFuture deleteLanguage(UUID player); - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepositoryImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepositoryImpl.java deleted file mode 100644 index d7b2947bc..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageRepositoryImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.eternalcode.core.feature.language; - -import com.eternalcode.commons.scheduler.Scheduler; -import com.eternalcode.core.database.DatabaseManager; -import com.eternalcode.core.database.wrapper.AbstractRepositoryOrmLite; -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.injector.annotations.component.Repository; -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; -import com.j256.ormlite.table.TableUtils; -import java.sql.SQLException; -import java.util.Locale; -import java.util.Optional; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -@Repository -class LanguageRepositoryImpl extends AbstractRepositoryOrmLite implements LanguageRepository { - - @Inject - LanguageRepositoryImpl(DatabaseManager databaseManager, Scheduler scheduler) throws SQLException { - super(databaseManager, scheduler); - TableUtils.createTableIfNotExists(databaseManager.connectionSource(), LanguageTable.class); - } - - @Override - public CompletableFuture> findLanguage(UUID player) { - return selectSafe(LanguageTable.class, player) - .thenApply(optional -> optional.map(table -> table.toLanguage())); - } - - @Override - public CompletableFuture saveLanguage(UUID player, Language language) { - return save(LanguageTable.class, new LanguageTable(player, language)) - .thenApply(status -> null); - } - - @Override - public CompletableFuture deleteLanguage(UUID player) { - return deleteById(LanguageTable.class, player) - .thenApply(result -> null); - } - - @DatabaseTable(tableName = "eternal_core_languages") - private static class LanguageTable { - - @DatabaseField(columnName = "id", id = true) - private UUID player; - - @DatabaseField - private String language; - - LanguageTable() {} - - LanguageTable(UUID player, Language language) { - this.player = player; - this.language = language.getLang(); - } - - Language toLanguage() { - return Language.fromLocale(Locale.of(language)); - } - } - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageServiceImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageServiceImpl.java deleted file mode 100644 index d7ea3b6a6..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/LanguageServiceImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.eternalcode.core.feature.language; - -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.injector.annotations.component.Service; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; - -@Service -class LanguageServiceImpl implements LanguageService { - - private final LanguageRepository languageRepository; - private final Map cachedLanguages = new ConcurrentHashMap<>(); - private LanguageProvider defaultProvider; - - @Inject - LanguageServiceImpl(LanguageRepository languageRepository, LanguageProvider defaultProvider) { - this.languageRepository = languageRepository; - this.defaultProvider = defaultProvider; - } - - @Override - public void setDefaultProvider(LanguageProvider defaultProvider) { - this.defaultProvider = defaultProvider; - } - - @Override - public LanguageProvider getDefaultProvider() { - return defaultProvider; - } - - @Override - public Language getLanguageNow(UUID playerUniqueId) { - Language language = cachedLanguages.get(playerUniqueId); - if (language != null) { - return language; - } - - return defaultProvider.getDefaultLanguage(playerUniqueId); - } - - @Override - public CompletableFuture getLanguage(UUID playerUniqueId) { - Language language = cachedLanguages.get(playerUniqueId); - if (language != null) { - return CompletableFuture.completedFuture(language); - } - - return this.languageRepository.findLanguage(playerUniqueId) - .thenApply(optional -> optional.orElseGet(() -> this.defaultProvider.getDefaultLanguage(playerUniqueId))); - } - - @Override - public CompletableFuture setLanguage(UUID playerUniqueId, Language language) { - if (language.equals(Language.DEFAULT)) { - return setDefaultLanguage(playerUniqueId); - } - - cachedLanguages.put(playerUniqueId, language); - return languageRepository.saveLanguage(playerUniqueId, language); - } - - @Override - public CompletableFuture setDefaultLanguage(UUID playerUniqueId) { - cachedLanguages.remove(playerUniqueId); - return languageRepository.deleteLanguage(playerUniqueId); - } - - CompletableFuture loadLanguage(UUID playerUniqueId) { - return languageRepository.findLanguage(playerUniqueId) - .thenAccept(language -> language.ifPresent(lang -> cachedLanguages.put(playerUniqueId, lang))); - } - - CompletableFuture unloadLanguage(UUID playerUniqueId) { - return languageRepository.findLanguage(playerUniqueId) - .thenAccept(language -> cachedLanguages.remove(playerUniqueId)); - } - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfigItem.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfigItem.java deleted file mode 100644 index c85b25de1..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfigItem.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.eternalcode.core.feature.language.config; - -import com.eternalcode.core.configuration.contextual.ConfigItem; -import com.eternalcode.core.feature.language.Language; -import net.dzikoysk.cdn.entity.Contextual; -import org.bukkit.Material; - -import java.util.Collections; -import java.util.List; - -@Contextual -public class LanguageConfigItem extends ConfigItem { - - public Language language = Language.EN; - - public LanguageConfigItem(String name, List lore, Material material, String texture, boolean glow, int slot, List commands, Language language) { - super(name, lore, material, texture, glow, slot, commands); - this.language = language; - } - - public LanguageConfigItem() { - } -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfiguration.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfiguration.java deleted file mode 100644 index f7f7a8e36..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/language/config/LanguageConfiguration.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.eternalcode.core.feature.language.config; - -import com.eternalcode.core.configuration.ReloadableConfig; -import com.eternalcode.core.injector.annotations.component.ConfigurationFile; -import com.eternalcode.core.feature.language.Language; -import com.google.common.collect.ImmutableList; -import net.dzikoysk.cdn.entity.Contextual; -import net.dzikoysk.cdn.entity.Description; -import net.dzikoysk.cdn.source.Resource; -import net.dzikoysk.cdn.source.Source; -import org.bukkit.Material; - -import java.io.File; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -@ConfigurationFile -public class LanguageConfiguration implements ReloadableConfig { - - @Description(" ") - public Language defaultLanguage = Language.EN; - public List languages = Arrays.asList(Language.EN, Language.PL); - - @Description(" ") - public LanguageSelector languageSelector = new LanguageSelector(); - - @Contextual - public static class LanguageSelector { - @Description("# Name of inventory") - public String title = "&6Select a language"; - - @Description({ " ", "# Size of inventory" }) - public int rows = 5; - - @Description({ " ", "# Border settings" }) - public Border border = new Border(); - - @Contextual - public static class Border { - public boolean fill = true; - - @Description(" ") - public Material material = Material.GRAY_STAINED_GLASS_PANE; - - @Description({ " ", "# TOP, BOTTOM, BORDER, ALL" }) - public Border.FillType type = Border.FillType.BORDER; - - @Description({ " ", "# Name (If you don't want name just set \"\")" }) - public String name = " "; - - @Description({ " ", "# Lore (If you don't want lore just set [])" }) - public List lore = Collections.emptyList(); - - public enum FillType { - TOP, BOTTOM, BORDER, ALL - } - } - - @Description({ " ", "# List of languages" }) - public List languageConfigItemMap = new ImmutableList.Builder() - .add(new LanguageConfigItem( - "&c&lEnglish", - Collections.singletonList("&7▪ Click to change language!"), - Material.PLAYER_HEAD, - "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODc5ZDk5ZDljNDY0NzRlMjcxM2E3ZTg0YTk1ZTRjZTdlOGZmOGVhNGQxNjQ0MTNhNTkyZTQ0MzVkMmM2ZjlkYyJ9fX0", - false, - 20, - Collections.emptyList(), - Language.EN - )) - .add(new LanguageConfigItem( - "&c&lAuto", - Collections.singletonList("&7▪ Kliknij, aby pobierać język z ustawień klienta!"), - Material.REPEATER, - "none", - false, - 22, - Collections.emptyList(), - Language.DEFAULT - )) - .add(new LanguageConfigItem( - "&c&lPolish", - Collections.singletonList("&7▪ Kliknij aby zmienić język!"), - Material.PLAYER_HEAD, - "ewogICJ0aW1lc3RhbXAiIDogMTYyNzMxOTA4NjYyOCwKICAicHJvZmlsZUlkIiA6ICJiNTM5NTkyMjMwY2I0MmE0OWY5YTRlYmYxNmRlOTYwYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJtYXJpYW5hZmFnIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2IxZDFlZmVkNjIyZTEzMTJlOTg0NGU4OTgzNjQzMzM5MGEyMTFjN2E1NTVhMzQzMWI0OTk2NWMzZTNiMzhiYjYiCiAgICB9CiAgfQp9", - false, - 24, - Collections.emptyList(), - Language.PL - )) - .build(); - } - - @Override - public Resource resource(File folder) { - return Source.of(folder, "language.yml"); - } - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpInventory.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpInventory.java index c5c067d08..c6f7162ff 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpInventory.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpInventory.java @@ -5,8 +5,6 @@ import com.eternalcode.core.configuration.ConfigurationManager; import com.eternalcode.core.configuration.contextual.ConfigItem; import com.eternalcode.core.configuration.implementation.PluginConfiguration; -import com.eternalcode.core.feature.language.Language; -import com.eternalcode.core.feature.language.LanguageService; import com.eternalcode.core.feature.warp.messages.WarpMessages; import com.eternalcode.core.feature.warp.messages.WarpMessages.WarpInventorySection; import com.eternalcode.core.injector.annotations.Inject; @@ -14,7 +12,6 @@ import com.eternalcode.core.translation.AbstractTranslation; import com.eternalcode.core.translation.Translation; import com.eternalcode.core.translation.TranslationManager; -import static com.eternalcode.core.util.FutureHandler.whenSuccess; import dev.triumphteam.gui.builder.item.BaseItemBuilder; import dev.triumphteam.gui.builder.item.ItemBuilder; import dev.triumphteam.gui.guis.Gui; @@ -44,7 +41,6 @@ public class WarpInventory { private static final int UGLY_BORDER_ROW_COUNT = 1; private final TranslationManager translationManager; - private final LanguageService languageService; private final WarpService warpService; private final Server server; private final MiniMessage miniMessage; @@ -56,7 +52,6 @@ public class WarpInventory { @Inject WarpInventory( TranslationManager translationManager, - LanguageService languageService, WarpService warpService, Server server, MiniMessage miniMessage, @@ -66,7 +61,6 @@ public class WarpInventory { Scheduler scheduler ) { this.translationManager = translationManager; - this.languageService = languageService; this.warpService = warpService; this.server = server; this.miniMessage = miniMessage; @@ -77,13 +71,12 @@ public class WarpInventory { } public void openInventory(Player player) { - this.languageService.getLanguage(player.getUniqueId()) - .thenApply(language -> this.createInventory(player, language)) - .whenComplete(whenSuccess(gui -> this.scheduler.run(() -> gui.open(player)))); + Gui gui = this.createInventory(player); + this.scheduler.run(() -> gui.open(player)); } - private Gui createInventory(Player player, Language language) { - Translation translation = this.translationManager.getMessages(language); + private Gui createInventory(Player player) { + Translation translation = this.translationManager.getMessages(); WarpMessages.WarpInventorySection warpSection = translation.warp().warpInventory(); int rowsCount; @@ -222,28 +215,23 @@ public void addWarp(Warp warp) { if (!this.warpService.exists(warp.getName())) { return; } - - for (Language language : this.translationManager.getAvailableLanguages()) { - AbstractTranslation translation = (AbstractTranslation) this.translationManager.getMessages(language); - WarpMessages.WarpInventorySection warpSection = translation.warp().warpInventory(); - int slot = getSlot(warpSection); - - warpSection.addItem( - warp.getName(), - WarpInventoryItem.builder() - .withWarpName(warp.getName()) - .withWarpItem(ConfigItem.builder() - .withName(this.config.warp.itemNamePrefix + warp.getName()) - .withLore(Collections.singletonList(this.config.warp.itemLore)) - .withMaterial(this.config.warp.itemMaterial) - .withTexture(this.config.warp.itemTexture) - .withSlot(slot) - .withGlow(true) - .build()) - .build()); - - this.configurationManager.save(translation); - } + AbstractTranslation translation = (AbstractTranslation) this.translationManager.getMessages(); + WarpMessages.WarpInventorySection warpSection = translation.warp().warpInventory(); + int slot = getSlot(warpSection); + warpSection.addItem( + warp.getName(), + WarpInventoryItem.builder() + .withWarpName(warp.getName()) + .withWarpItem(ConfigItem.builder() + .withName(this.config.warp.itemNamePrefix + warp.getName()) + .withLore(Collections.singletonList(this.config.warp.itemLore)) + .withMaterial(this.config.warp.itemMaterial) + .withTexture(this.config.warp.itemTexture) + .withSlot(slot) + .withGlow(true) + .build()) + .build()); + this.configurationManager.save(translation); } private int getSlot(WarpMessages.WarpInventorySection warpSection) { @@ -264,18 +252,13 @@ public void removeWarp(String warpName) { if (!this.config.warp.autoAddNewWarps) { return; } - - for (Language language : this.translationManager.getAvailableLanguages()) { - AbstractTranslation translation = (AbstractTranslation) this.translationManager.getMessages(language); - WarpMessages.WarpInventorySection warpSection = translation.warp().warpInventory(); - WarpInventoryItem removed = warpSection.removeItem(warpName); - - if (removed != null) { - this.shiftWarpItems(removed, warpSection); - } - - this.configurationManager.save(translation); + AbstractTranslation translation = (AbstractTranslation) this.translationManager.getMessages(); + WarpMessages.WarpInventorySection warpSection = translation.warp().warpInventory(); + WarpInventoryItem removed = warpSection.removeItem(warpName); + if (removed != null) { + this.shiftWarpItems(removed, warpSection); } + this.configurationManager.save(translation); } private void shiftWarpItems(WarpInventoryItem removed, WarpMessages.WarpInventorySection warpSection) { diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/notice/NoticeService.java b/eternalcore-core/src/main/java/com/eternalcode/core/notice/NoticeService.java index 69ecdb76e..fa6951279 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/notice/NoticeService.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/notice/NoticeService.java @@ -1,8 +1,6 @@ package com.eternalcode.core.notice; import com.eternalcode.commons.scheduler.Scheduler; -import com.eternalcode.core.feature.language.Language; -import com.eternalcode.core.feature.language.LanguageService; import com.eternalcode.core.injector.annotations.Inject; import com.eternalcode.core.injector.annotations.component.Service; import com.eternalcode.core.placeholder.PlaceholderRegistry; @@ -40,7 +38,6 @@ public class NoticeService extends Multification { private final MiniMessage miniMessage; private final NoticeResolverRegistry noticeRegistry; - private final LanguageService languageService; @Inject public NoticeService( @@ -51,8 +48,7 @@ public NoticeService( TranslationManager translationManager, PlaceholderRegistry registry, MiniMessage miniMessage, - NoticeResolverRegistry noticeRegistry, - LanguageService languageService + NoticeResolverRegistry noticeRegistry ) { this.userManager = userManager; this.scheduler = scheduler; @@ -62,7 +58,6 @@ public NoticeService( this.registry = registry; this.miniMessage = miniMessage; this.noticeRegistry = noticeRegistry; - this.languageService = languageService; } @Override @@ -88,13 +83,7 @@ public NoticeService( @Override public @NotNull LocaleProvider localeProvider() { - return viewer -> { - if (viewer.isConsole()) { - return Language.DEFAULT.toLocale(); - } - - return languageService.getLanguageNow(viewer.getUniqueId()).toLocale(); - }; + return viewer -> java.util.Locale.ROOT; } @Override diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java index 93b32279e..ad53819eb 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java @@ -1,6 +1,5 @@ package com.eternalcode.core.translation; -import com.eternalcode.core.feature.language.Language; import net.dzikoysk.cdn.source.Resource; import net.dzikoysk.cdn.source.Source; @@ -8,20 +7,18 @@ public abstract class AbstractTranslation implements ReloadableTranslation { - protected final Language language; + protected final String languageCode; - protected AbstractTranslation(Language language) { - this.language = language; + protected AbstractTranslation(String languageCode) { + this.languageCode = languageCode; } - @Override - public Language getLanguage() { - return this.language; + public String getLanguageCode() { + return this.languageCode; } @Override public Resource resource(File folder) { - return Source.of(folder, "lang" + File.separator + this.language.getLang() + "_messages.yml"); + return Source.of(folder, "lang" + File.separator + this.languageCode + "-messages.yml"); } - } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java index 270245462..42e3f0eb3 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java @@ -178,18 +178,12 @@ interface ItemSection { Notice enchantedMessageBy(); } - interface LanguageSection { - Notice languageChanged(); - - List decorationItems(); - } - interface ContainerSection { Notice genericContainerOpened(); Notice genericContainerOpenedBy(); Notice genericContainerOpenedFor(); } - Language getLanguage(); + String getLanguage(); // argument section ArgumentMessages argument(); // format section @@ -235,8 +229,6 @@ interface ContainerSection { ItemEditMessages itemEdit(); // time and weather TimeAndWeatherMessages timeAndWeather(); - // language section - LanguageSection language(); // container section ContainerSection container(); // auto message section diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManager.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManager.java index 31c6fadc4..06c9a4d44 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManager.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManager.java @@ -1,75 +1,33 @@ package com.eternalcode.core.translation; import com.eternalcode.annotations.scan.feature.FeatureDocs; -import com.eternalcode.core.feature.language.Language; -import com.eternalcode.core.feature.language.LanguageService; import com.eternalcode.multification.translation.TranslationProvider; -import java.util.Collections; -import java.util.Set; -import java.util.UUID; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; +import org.jetbrains.annotations.NotNull; @FeatureDocs( name = "Translations", - description = "EternalCore can use multiple languages at once, the player can determine which EternalCore language I want to use, or you can determine from above what language all players want to use" + description = "EternalCore uses only one language set in config.yml." ) public class TranslationManager implements TranslationProvider { - private final LanguageService languageService; - - private final Map translatedMessages = new HashMap<>(); - private Translation defaultTranslation; - - TranslationManager(LanguageService languageService, Translation defaultTranslation) { - this.languageService = languageService; - this.defaultTranslation = defaultTranslation; - } - - public void loadLanguage(Language language, Translation translated) { - this.translatedMessages.put(language, translated); - } - - public Translation getMessages(UUID uniqueId) { - return getMessages(this.languageService.getLanguageNow(uniqueId)); - } - - public Translation getMessages(Language language) { - Translation translation = this.translatedMessages.get(language); - - if (translation != null) { - return translation; - } + private Translation translation; - for (Entry entry : this.translatedMessages.entrySet()) { - if (entry.getKey().isEquals(language)) { - return entry.getValue(); - } - } - - return this.defaultTranslation; + public TranslationManager(Translation translation) { + this.translation = translation; } - public Translation getDefaultMessages() { - return this.defaultTranslation; + public Translation getMessages() { + return this.translation; } - public void setDefaultMessages(Translation defaultTranslation) { - this.defaultTranslation = defaultTranslation; + public void setTranslation(Translation translation) { + this.translation = translation; } @NotNull @Override public Translation provide(Locale locale) { - return this.getMessages(Language.fromLocale(locale)); - } - - public Set getAvailableLanguages() { - return Collections.unmodifiableSet(this.translatedMessages.keySet()); + return this.translation; } - } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java index 7d6e9fba1..58c190596 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java @@ -1,39 +1,19 @@ package com.eternalcode.core.translation; import com.eternalcode.core.configuration.ConfigurationManager; -import com.eternalcode.core.feature.language.LanguageService; +import com.eternalcode.core.configuration.implementation.PluginConfiguration; import com.eternalcode.core.injector.annotations.Bean; import com.eternalcode.core.injector.annotations.component.Setup; -import com.eternalcode.core.feature.language.config.LanguageConfiguration; import com.eternalcode.core.translation.implementation.TranslationFactory; -import java.util.List; -import panda.std.stream.PandaStream; @Setup class TranslationManagerSetup { @Bean - TranslationManager translationManager( - ConfigurationManager configurationManager, - LanguageService languageService, - LanguageConfiguration languageConfiguration - ) { - List usedMessagesList = PandaStream.of(languageConfiguration.languages) - .map(TranslationFactory::create) - .toList(); - - Translation defaultTranslation = PandaStream.of(usedMessagesList) - .find(usedMessages -> usedMessages.getLanguage().equals(languageConfiguration.defaultLanguage)) - .orThrow(() -> new RuntimeException("Default language not found!")); - - TranslationManager translationManager = new TranslationManager(languageService, defaultTranslation); - - for (ReloadableTranslation message : usedMessagesList) { - configurationManager.load(message); - translationManager.loadLanguage(message.getLanguage(), message); - } - - return translationManager; + TranslationManager translationManager(ConfigurationManager configurationManager, PluginConfiguration pluginConfiguration) { + String languageCode = pluginConfiguration.language; + Translation translation = TranslationFactory.create(languageCode); + configurationManager.load((ReloadableTranslation) translation); + return new TranslationManager(translation); } - } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java index 825362fc1..00beaaedd 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java @@ -9,7 +9,6 @@ import com.eternalcode.core.feature.home.messages.ENHomeMessages; import com.eternalcode.core.feature.itemedit.messages.ENItemEditMessages; import com.eternalcode.core.feature.jail.messages.ENJailMessages; -import com.eternalcode.core.feature.language.Language; import com.eternalcode.core.feature.privatechat.messages.ENPrivateMessages; import com.eternalcode.core.feature.randomteleport.messages.ENRandomTeleportMessages; import com.eternalcode.core.feature.seen.messages.ENSeenMessages; @@ -22,6 +21,7 @@ import com.eternalcode.core.feature.warp.messages.ENWarpMessages; import com.eternalcode.core.translation.AbstractTranslation; import com.eternalcode.multification.notice.Notice; +import java.util.Locale; import lombok.Getter; import lombok.experimental.Accessors; import net.dzikoysk.cdn.entity.Contextual; @@ -38,12 +38,8 @@ @Accessors(fluent = true) public class ENTranslation extends AbstractTranslation { - ENTranslation(Language language) { - super(language); - } - - ENTranslation() { - this(Language.EN); + public ENTranslation(String languageCode) { + super(languageCode); } @Description({ @@ -126,6 +122,11 @@ public class ENTranslation extends AbstractTranslation { }) public ENSignEditorMessages signEditor = new ENSignEditorMessages(); + @Override + public String getLanguage() { + return this.languageCode; + } + @Getter @Contextual public static class ENFormatSection implements Format { @@ -535,25 +536,6 @@ public static class ENContainerSection implements ContainerSection { public Notice genericContainerOpenedFor = Notice.chat("The specified container has been opened for {PLAYER}!"); } - @Description({" ", "# Information sent, when the language is changed to English"}) - public ENLanguageSection language = new ENLanguageSection(); - - @Getter - @Contextual - public static class ENLanguageSection implements LanguageSection { - public Notice languageChanged = Notice.chat("Language changed to English!"); - - public List decorationItems = List.of( - ConfigItem.builder() - .withMaterial(Material.SUNFLOWER) - .withGlow(true) - .withSlot(40) - .withName("&7Our discord") - .withLore(Collections.singletonList("&8» &6https://discord.gg/TRbDApaJaJ")) - .build() - ); - } - @Description({" ", "# Set's max players on the server, the messages for the /setslot command"}) public ENSetSlotMessages setSlot = new ENSetSlotMessages(); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java index 8a9bf39f2..1df953c3a 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java @@ -9,7 +9,6 @@ import com.eternalcode.core.feature.helpop.messages.PLHelpOpMessages; import com.eternalcode.core.feature.home.messages.PLHomeMessages; import com.eternalcode.core.feature.jail.messages.PLJailMessages; -import com.eternalcode.core.feature.language.Language; import com.eternalcode.core.feature.seen.messages.PLSeenMessages; import com.eternalcode.core.feature.setslot.messages.PLSetSlotMessages; import com.eternalcode.core.feature.privatechat.messages.PLPrivateChatMessages; @@ -39,8 +38,8 @@ @Accessors(fluent = true) public class PLTranslation extends AbstractTranslation { - PLTranslation() { - super(Language.PL); + public PLTranslation(String languageCode) { + super(languageCode); } @Description({ @@ -560,25 +559,6 @@ public static class PLContainerSection implements ContainerSection { public Notice genericContainerOpenedFor = Notice.chat("Otwarto kontener dla gracza {PLAYER}!"); } - @Description({" ", "# Informacja zwrotna, gdy gracz zmienia język pluginu na polski"}) - public PLLanguageSection language = new PLLanguageSection(); - - @Getter - @Contextual - public static class PLLanguageSection implements LanguageSection { - public Notice languageChanged = Notice.chat("Zmieniono język na Polski!"); - - public List decorationItems = List.of( - ConfigItem.builder() - .withMaterial(Material.SUNFLOWER) - .withGlow(true) - .withSlot(40) - .withName("&7Nasz discord") - .withLore(Collections.singletonList("&8» &6https://discord.gg/TRbDApaJaJ")) - .build() - ); - } - @Description({" ", "# Ta sekcja odpowiada za wiadomości dotyczące pojemnosci serwera"}) public PLSetSlotMessages setSlot = new PLSetSlotMessages(); @@ -587,4 +567,9 @@ public static class PLLanguageSection implements LanguageSection { @Description({" ", "# Ta sekcja odpowiada za wiadomości dotyczące jail'a"}) public PLJailMessages jailSection = new PLJailMessages(); + + @Override + public String getLanguage() { + return this.languageCode; + } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java index 8592b1222..ef094dfb9 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java @@ -1,32 +1,18 @@ package com.eternalcode.core.translation.implementation; -import com.eternalcode.core.feature.language.Language; import com.eternalcode.core.translation.AbstractTranslation; -import java.util.Map; -import java.util.function.Function; -import java.util.function.Supplier; - public final class TranslationFactory { - private static final Function OTHER_LANG_TRANSLATION = ENTranslation::new; - - private static final Map> DEFAULT_TRANSLATIONS = Map.of( - Language.EN, ENTranslation::new, - Language.PL, PLTranslation::new - ); - private TranslationFactory() { } - public static AbstractTranslation create(Language language) { - Supplier translationSupplier = DEFAULT_TRANSLATIONS.get(language); - - if (translationSupplier != null) { - return translationSupplier.get(); + public static AbstractTranslation create(String languageCode) { + // Możesz tu dodać if-y dla własnych klas tłumaczeń + if (languageCode.equalsIgnoreCase("pl") || languageCode.equalsIgnoreCase("pl-pl")) { + return new PLTranslation(languageCode); } - - return OTHER_LANG_TRANSLATION.apply(language); + // Domyślnie angielski + return new ENTranslation(languageCode); } - } From 9bd6bcec019b92cadfbd53d1a647b80b4747a908 Mon Sep 17 00:00:00 2001 From: vLuckyyy Date: Tue, 1 Jul 2025 16:55:18 +0200 Subject: [PATCH 2/5] Refactor language handling to use unified Language class --- .../feature/language/LanguageProvider.java | 9 ------- .../argument/AbstractViewerArgument.java | 1 - .../configuration/ConfigurationManager.java | 3 +-- .../composer/LanguageComposer.java | 2 +- .../core/translation/AbstractTranslation.java | 12 ++++----- .../core/translation}/Language.java | 27 ++++++++++++++----- .../core/translation/Translation.java | 3 --- .../translation/TranslationManagerSetup.java | 4 +-- .../implementation/ENTranslation.java | 10 +++---- .../implementation/PLTranslation.java | 13 +++------ .../implementation/TranslationFactory.java | 23 +++++++++++----- .../language/LanguageComposerTest.java | 2 +- .../com/eternalcode/core/test/MockViewer.java | 1 - 13 files changed, 55 insertions(+), 55 deletions(-) delete mode 100644 eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageProvider.java rename {eternalcore-api/src/main/java/com/eternalcode/core/feature/language => eternalcore-core/src/main/java/com/eternalcode/core/translation}/Language.java (79%) diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageProvider.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageProvider.java deleted file mode 100644 index d3e54b5c5..000000000 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/LanguageProvider.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.eternalcode.core.feature.language; - -import java.util.UUID; - -public interface LanguageProvider { - - Language getDefaultLanguage(UUID player); - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java index 3c2305025..a1ae8b362 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/AbstractViewerArgument.java @@ -1,6 +1,5 @@ package com.eternalcode.core.bridge.litecommand.argument; -import com.eternalcode.core.feature.language.Language; import com.eternalcode.core.translation.Translation; import com.eternalcode.core.translation.TranslationManager; import dev.rollczi.litecommands.argument.Argument; diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/ConfigurationManager.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/ConfigurationManager.java index c6919bbdb..fbccf0cd6 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/ConfigurationManager.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/ConfigurationManager.java @@ -5,7 +5,7 @@ import com.eternalcode.core.configuration.composer.LanguageComposer; import com.eternalcode.core.configuration.composer.PositionComposer; import com.eternalcode.core.configuration.composer.SetComposer; -import com.eternalcode.core.feature.language.Language; +import com.eternalcode.core.translation.Language; import com.eternalcode.core.injector.annotations.Inject; import com.eternalcode.core.injector.annotations.component.Service; import com.eternalcode.core.publish.Publisher; @@ -21,7 +21,6 @@ import net.dzikoysk.cdn.CdnFactory; import net.dzikoysk.cdn.CdnSettings; import net.dzikoysk.cdn.reflect.Visibility; -import org.bukkit.Sound; @Service public class ConfigurationManager { diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java index 514666c88..058ed739a 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java @@ -1,6 +1,6 @@ package com.eternalcode.core.configuration.composer; -import com.eternalcode.core.feature.language.Language; +import com.eternalcode.core.translation.Language; import panda.std.Result; import panda.utilities.text.Joiner; diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java index ad53819eb..2434c3b0c 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/AbstractTranslation.java @@ -7,18 +7,18 @@ public abstract class AbstractTranslation implements ReloadableTranslation { - protected final String languageCode; + protected final Language language; - protected AbstractTranslation(String languageCode) { - this.languageCode = languageCode; + protected AbstractTranslation(Language language) { + this.language = language; } - public String getLanguageCode() { - return this.languageCode; + public Language getLanguage() { + return this.language; } @Override public Resource resource(File folder) { - return Source.of(folder, "lang" + File.separator + this.languageCode + "-messages.yml"); + return Source.of(folder, "lang" + File.separator + this.language.getLang() + "_messages.yml"); } } diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/Language.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Language.java similarity index 79% rename from eternalcore-api/src/main/java/com/eternalcode/core/feature/language/Language.java rename to eternalcore-core/src/main/java/com/eternalcode/core/translation/Language.java index 175dcd9c8..30adb5a08 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/language/Language.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Language.java @@ -1,4 +1,4 @@ -package com.eternalcode.core.feature.language; +package com.eternalcode.core.translation; import java.util.Collections; import java.util.LinkedHashSet; @@ -21,6 +21,26 @@ public Language(String lang, List aliases) { this.aliases = new LinkedHashSet<>(aliases); } + public static Language fromLocale(Locale locale) { + return new Language(locale.getLanguage(), List.of()); + } + + public static Language fromString(String lang) { + if (lang == null || lang.isBlank()) { + return DEFAULT; + } + + String lower = lang.toLowerCase(); + + for (Language language : List.of(PL, EN)) { + if (language.lang.equalsIgnoreCase(lower) || language.aliases.contains(lower)) { + return language; + } + } + + return new Language(lower, List.of()); + } + public String getLang() { return this.lang; } @@ -69,12 +89,7 @@ public int hashCode() { return Objects.hash(this.lang); } - public static Language fromLocale(Locale locale) { - return new Language(locale.getLanguage(), List.of()); - } - public Locale toLocale() { return Locale.of(this.lang); } - } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java index 42e3f0eb3..9eb1641c1 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java @@ -1,7 +1,6 @@ package com.eternalcode.core.translation; import com.eternalcode.core.bridge.litecommand.argument.messages.ArgumentMessages; -import com.eternalcode.core.configuration.contextual.ConfigItem; import com.eternalcode.core.feature.adminchat.messages.AdminChatMessages; import com.eternalcode.core.feature.afk.messages.AfkMessages; import com.eternalcode.core.feature.automessage.messages.AutoMessageMessages; @@ -9,7 +8,6 @@ import com.eternalcode.core.feature.helpop.messages.HelpOpSection; import com.eternalcode.core.feature.home.messages.HomeMessages; import com.eternalcode.core.feature.jail.messages.JailMessages; -import com.eternalcode.core.feature.language.Language; import com.eternalcode.core.feature.privatechat.messages.PrivateChatMessages; import com.eternalcode.core.feature.randomteleport.messages.RandomTeleportMessages; import com.eternalcode.core.feature.seen.messages.SeenMessages; @@ -183,7 +181,6 @@ interface ContainerSection { Notice genericContainerOpenedBy(); Notice genericContainerOpenedFor(); } - String getLanguage(); // argument section ArgumentMessages argument(); // format section diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java index 58c190596..5fe749630 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java @@ -11,8 +11,8 @@ class TranslationManagerSetup { @Bean TranslationManager translationManager(ConfigurationManager configurationManager, PluginConfiguration pluginConfiguration) { - String languageCode = pluginConfiguration.language; - Translation translation = TranslationFactory.create(languageCode); + Language language = Language.fromString(pluginConfiguration.language); + Translation translation = TranslationFactory.create(language); configurationManager.load((ReloadableTranslation) translation); return new TranslationManager(translation); } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java index 00beaaedd..37a1a6ff8 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java @@ -20,6 +20,7 @@ import com.eternalcode.core.feature.time.messages.ENTimeAndWeatherMessages; import com.eternalcode.core.feature.warp.messages.ENWarpMessages; import com.eternalcode.core.translation.AbstractTranslation; +import com.eternalcode.core.translation.Language; import com.eternalcode.multification.notice.Notice; import java.util.Locale; import lombok.Getter; @@ -38,8 +39,8 @@ @Accessors(fluent = true) public class ENTranslation extends AbstractTranslation { - public ENTranslation(String languageCode) { - super(languageCode); + public ENTranslation(Language language) { + super(Language.EN); } @Description({ @@ -122,11 +123,6 @@ public ENTranslation(String languageCode) { }) public ENSignEditorMessages signEditor = new ENSignEditorMessages(); - @Override - public String getLanguage() { - return this.languageCode; - } - @Getter @Contextual public static class ENFormatSection implements Format { diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java index 1df953c3a..d04806a6f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java @@ -1,7 +1,6 @@ package com.eternalcode.core.translation.implementation; import com.eternalcode.core.bridge.litecommand.argument.messages.PLArgumentMessages; -import com.eternalcode.core.configuration.contextual.ConfigItem; import com.eternalcode.core.feature.adminchat.messages.PLAdminChatMessages; import com.eternalcode.core.feature.afk.messages.PLAfkMessages; import com.eternalcode.core.feature.automessage.messages.PLAutoMessageMessages; @@ -14,19 +13,18 @@ import com.eternalcode.core.feature.privatechat.messages.PLPrivateChatMessages; import com.eternalcode.core.feature.randomteleport.messages.PLRandomTeleportMessages; import com.eternalcode.core.feature.signeditor.messages.PLSignEditorMessages; -import com.eternalcode.core.feature.signeditor.messages.SignEditorMessages; import com.eternalcode.core.feature.spawn.messages.PLSpawnMessages; import com.eternalcode.core.feature.sudo.messages.PLSudoMessages; import com.eternalcode.core.feature.teleportrequest.messages.PLTeleportRequestMessages; import com.eternalcode.core.feature.time.messages.PLTimeAndWeatherMessages; import com.eternalcode.core.feature.warp.messages.PLWarpMessages; import com.eternalcode.core.translation.AbstractTranslation; +import com.eternalcode.core.translation.Language; import com.eternalcode.multification.notice.Notice; import lombok.Getter; import lombok.experimental.Accessors; import net.dzikoysk.cdn.entity.Contextual; import net.dzikoysk.cdn.entity.Description; -import org.bukkit.Material; import org.bukkit.event.entity.EntityDamageEvent; import java.util.Arrays; @@ -38,8 +36,8 @@ @Accessors(fluent = true) public class PLTranslation extends AbstractTranslation { - public PLTranslation(String languageCode) { - super(languageCode); + public PLTranslation(Language language) { + super(Language.PL); } @Description({ @@ -567,9 +565,4 @@ public static class PLContainerSection implements ContainerSection { @Description({" ", "# Ta sekcja odpowiada za wiadomości dotyczące jail'a"}) public PLJailMessages jailSection = new PLJailMessages(); - - @Override - public String getLanguage() { - return this.languageCode; - } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java index ef094dfb9..ebbfca83f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java @@ -1,18 +1,29 @@ package com.eternalcode.core.translation.implementation; import com.eternalcode.core.translation.AbstractTranslation; +import com.eternalcode.core.translation.Language; +import java.util.Map; +import java.util.function.Function; +import java.util.function.Supplier; public final class TranslationFactory { + private static final Function OTHER_LANG_TRANSLATION = ENTranslation::new; + + private static final Map> DEFAULT_TRANSLATIONS = Map.of( + Language.EN, ENTranslation::new, + Language.PL, PLTranslation::new + ); private TranslationFactory() { } - public static AbstractTranslation create(String languageCode) { - // Możesz tu dodać if-y dla własnych klas tłumaczeń - if (languageCode.equalsIgnoreCase("pl") || languageCode.equalsIgnoreCase("pl-pl")) { - return new PLTranslation(languageCode); + public static AbstractTranslation create(Language language) { + Supplier translationSupplier = DEFAULT_TRANSLATIONS.get(language); + + if (translationSupplier != null) { + return translationSupplier.get(); } - // Domyślnie angielski - return new ENTranslation(languageCode); + + return OTHER_LANG_TRANSLATION.apply(language); } } diff --git a/eternalcore-core/src/test/java/com/eternalcode/core/configuration/language/LanguageComposerTest.java b/eternalcore-core/src/test/java/com/eternalcode/core/configuration/language/LanguageComposerTest.java index 6a1c9d9b3..e5333c489 100644 --- a/eternalcore-core/src/test/java/com/eternalcode/core/configuration/language/LanguageComposerTest.java +++ b/eternalcore-core/src/test/java/com/eternalcode/core/configuration/language/LanguageComposerTest.java @@ -1,7 +1,7 @@ package com.eternalcode.core.configuration.language; import com.eternalcode.core.configuration.composer.LanguageComposer; -import com.eternalcode.core.feature.language.Language; +import com.eternalcode.core.translation.Language; import org.junit.jupiter.api.Test; import java.util.List; diff --git a/eternalcore-core/src/test/java/com/eternalcode/core/test/MockViewer.java b/eternalcore-core/src/test/java/com/eternalcode/core/test/MockViewer.java index c25eef78c..e28ed4849 100644 --- a/eternalcore-core/src/test/java/com/eternalcode/core/test/MockViewer.java +++ b/eternalcore-core/src/test/java/com/eternalcode/core/test/MockViewer.java @@ -1,6 +1,5 @@ package com.eternalcode.core.test; -import com.eternalcode.core.feature.language.Language; import com.eternalcode.core.viewer.Viewer; import java.util.Objects; import java.util.UUID; From 0ff8a0c4a817baae4517bbbfa6de3a4c7e6a987c Mon Sep 17 00:00:00 2001 From: vLuckyyy Date: Tue, 1 Jul 2025 17:02:16 +0200 Subject: [PATCH 3/5] Refactor TranslationFactory to use lambda --- .../core/translation/implementation/TranslationFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java index ebbfca83f..e28aebf60 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/TranslationFactory.java @@ -10,8 +10,8 @@ public final class TranslationFactory { private static final Function OTHER_LANG_TRANSLATION = ENTranslation::new; private static final Map> DEFAULT_TRANSLATIONS = Map.of( - Language.EN, ENTranslation::new, - Language.PL, PLTranslation::new + Language.EN, () -> new ENTranslation(Language.EN), + Language.PL, () -> new PLTranslation(Language.PL) ); private TranslationFactory() { From ebf8f422f5c1d3c2f357ecda008f974a27097d05 Mon Sep 17 00:00:00 2001 From: vLuckyyy Date: Fri, 4 Jul 2025 05:48:11 +0200 Subject: [PATCH 4/5] Fix. --- .../configuration/composer/LanguageComposer.java | 2 +- .../implementation/PluginConfiguration.java | 8 ++++++-- .../eternalcode/core/translation/Language.java | 16 ---------------- .../translation/TranslationManagerSetup.java | 11 +++++++---- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java index 058ed739a..0c4244acd 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/composer/LanguageComposer.java @@ -14,7 +14,7 @@ public class LanguageComposer implements SimpleComposer { public Result deserialize(String source) { List arguments = Arrays.asList(source.split("\\|")); - return Result.ok(new Language(arguments.get(0), arguments.subList(1, arguments.size()))); + return Result.ok(new Language(arguments.getFirst(), arguments.subList(1, arguments.size()))); } @Override diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java index 7e851b224..f1a4dc9ef 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java @@ -14,6 +14,7 @@ import com.eternalcode.core.feature.teleportrequest.TeleportRequestSettings; import com.eternalcode.core.injector.annotations.Bean; import com.eternalcode.core.injector.annotations.component.ConfigurationFile; +import com.eternalcode.core.translation.Language; import net.dzikoysk.cdn.entity.Contextual; import net.dzikoysk.cdn.entity.Description; import net.dzikoysk.cdn.entity.Exclude; @@ -47,8 +48,11 @@ public class PluginConfiguration implements ReloadableConfig { @Description("# Whether the player should receive information about new plugin updates upon joining the server") public boolean shouldReceivePluginUpdates = true; - @Description("# Language, currently supported languages: en, pl") - public String language = "en"; + @Description({ + "# Language, currently supported languages: en, pl", + "# You need restart server after change." + }) + public Language language = Language.EN; @Description({ " ", "# Database Section" }) public Database database = new Database(); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Language.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Language.java index 30adb5a08..e69129b8f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Language.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Language.java @@ -25,22 +25,6 @@ public static Language fromLocale(Locale locale) { return new Language(locale.getLanguage(), List.of()); } - public static Language fromString(String lang) { - if (lang == null || lang.isBlank()) { - return DEFAULT; - } - - String lower = lang.toLowerCase(); - - for (Language language : List.of(PL, EN)) { - if (language.lang.equalsIgnoreCase(lower) || language.aliases.contains(lower)) { - return language; - } - } - - return new Language(lower, List.of()); - } - public String getLang() { return this.lang; } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java index 5fe749630..5b1e5c548 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/TranslationManagerSetup.java @@ -10,10 +10,13 @@ class TranslationManagerSetup { @Bean - TranslationManager translationManager(ConfigurationManager configurationManager, PluginConfiguration pluginConfiguration) { - Language language = Language.fromString(pluginConfiguration.language); - Translation translation = TranslationFactory.create(language); - configurationManager.load((ReloadableTranslation) translation); + TranslationManager translationManager( + ConfigurationManager configurationManager, + PluginConfiguration pluginConfiguration + ) { + Language language = pluginConfiguration.language; + ReloadableTranslation translation = TranslationFactory.create(language); + configurationManager.load(translation); return new TranslationManager(translation); } } From 0434f9bdb63dd04a4678cd038dbac7d48525052d Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Tue, 12 Aug 2025 01:30:08 +0200 Subject: [PATCH 5/5] Update eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Michał Wojtas <80779749+CitralFlo@users.noreply.github.com> --- .../core/configuration/implementation/PluginConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java index f1a4dc9ef..eb08d9716 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java @@ -50,7 +50,7 @@ public class PluginConfiguration implements ReloadableConfig { @Description({ "# Language, currently supported languages: en, pl", - "# You need restart server after change." + "# You need to restart the server after changes." }) public Language language = Language.EN;