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/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-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..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; @@ -21,11 +20,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/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..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 @@ -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; @@ -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 0dfde15dd..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,6 +48,12 @@ 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", + "# 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/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..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 @@ -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; @@ -14,7 +13,6 @@ protected AbstractTranslation(Language language) { this.language = language; } - @Override public Language getLanguage() { return this.language; } @@ -23,5 +21,4 @@ public Language getLanguage() { public Resource resource(File folder) { 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 97% 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..e69129b8f 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,10 @@ 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 String getLang() { return this.lang; } @@ -69,12 +73,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 270245462..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; @@ -178,18 +176,11 @@ interface ItemSection { Notice enchantedMessageBy(); } - interface LanguageSection { - Notice languageChanged(); - - List decorationItems(); - } - interface ContainerSection { Notice genericContainerOpened(); Notice genericContainerOpenedBy(); Notice genericContainerOpenedFor(); } - Language getLanguage(); // argument section ArgumentMessages argument(); // format section @@ -235,8 +226,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..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 @@ -1,13 +1,10 @@ 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 { @@ -15,25 +12,11 @@ class TranslationManagerSetup { @Bean TranslationManager translationManager( ConfigurationManager configurationManager, - LanguageService languageService, - LanguageConfiguration languageConfiguration + PluginConfiguration pluginConfiguration ) { - 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; + Language language = pluginConfiguration.language; + ReloadableTranslation translation = TranslationFactory.create(language); + configurationManager.load(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..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 @@ -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; @@ -21,7 +20,9 @@ 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; import lombok.experimental.Accessors; import net.dzikoysk.cdn.entity.Contextual; @@ -38,12 +39,8 @@ @Accessors(fluent = true) public class ENTranslation extends AbstractTranslation { - ENTranslation(Language language) { - super(language); - } - - ENTranslation() { - this(Language.EN); + public ENTranslation(Language language) { + super(Language.EN); } @Description({ @@ -535,25 +532,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..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; @@ -9,25 +8,23 @@ 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; 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; @@ -39,7 +36,7 @@ @Accessors(fluent = true) public class PLTranslation extends AbstractTranslation { - PLTranslation() { + public PLTranslation(Language language) { super(Language.PL); } @@ -560,25 +557,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(); 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..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 @@ -1,19 +1,17 @@ package com.eternalcode.core.translation.implementation; -import com.eternalcode.core.feature.language.Language; 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 + Language.EN, () -> new ENTranslation(Language.EN), + Language.PL, () -> new PLTranslation(Language.PL) ); private TranslationFactory() { @@ -28,5 +26,4 @@ public static AbstractTranslation create(Language language) { 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;