Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import li.cinnazeyy.langlibs.core.database.DatabaseConnection;
import li.cinnazeyy.langlibs.core.file.LanguageFile;
import li.cinnazeyy.langlibs.core.language.LanguageUtil;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
Expand Down Expand Up @@ -37,7 +38,16 @@ public static String getPlayerLang(UUID playerUUID) {
if (lang != null) return lang;
else {
try (ResultSet rsUser = DatabaseConnection.createStatement("SELECT uuid, lang FROM langUsers WHERE uuid = ?").setValue(playerUUID.toString()).executeQuery()) {
if (rsUser.next()) playerLocale.put(UUID.fromString(rsUser.getString(1)),rsUser.getString(2));
if (rsUser.next()) {
playerLocale.put(UUID.fromString(rsUser.getString(1)),rsUser.getString(2));
} else {
Player p = Bukkit.getPlayer(playerUUID);
if (p != null) {
playerLocale.put(playerUUID, LanguageUtil.getLocaleTagByPlayer(p));
} else {
playerLocale.put(playerUUID, "en_US");
}
}
DatabaseConnection.closeResultSet(rsUser);
} catch (SQLException e) {
logger.error("A SQL error occurred!", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.spongepowered.configurate.CommentedConfigurationNode;
import org.spongepowered.configurate.ConfigurateException;
import org.spongepowered.configurate.serialize.SerializationException;
import org.spongepowered.configurate.yaml.NodeStyle;
import org.spongepowered.configurate.yaml.YamlConfigurationLoader;

import java.io.BufferedReader;
Expand All @@ -30,7 +31,7 @@ public class LanguageFile {

public String[] additionalLang;
private CommentedConfigurationNode root = null;

private boolean lastTranslationNotSuccessful = false;

public LanguageFile(@NotNull Plugin plugin, double version, Language lang) {
this.plugin = plugin;
Expand All @@ -39,6 +40,7 @@ public LanguageFile(@NotNull Plugin plugin, double version, Language lang) {
this.filePath = plugin.getDataPath().toAbsolutePath().resolve(Paths.get("lang", lang + ".yml"));

languageLoader = YamlConfigurationLoader.builder()
.nodeStyle(NodeStyle.BLOCK)
.path(filePath)
.build();

Expand All @@ -60,7 +62,8 @@ public LanguageFile(Plugin plugin, double version, Language lang, String... addi

public String getTranslation(@NotNull String key) {
String translation = root.node((Object[]) key.split("\\.")).getString();
return translation != null ? translation : "undefined";
lastTranslationNotSuccessful = translation == null;
return translation != null ? translation : "undefined (" + getFileName() + ": " + key + ")";
}

public String getTranslation(String key, String @NotNull ... args) {
Expand All @@ -71,11 +74,14 @@ public String getTranslation(String key, String @NotNull ... args) {

public List<String> getTranslations(@NotNull String key) {
try {
return root.node((Object[]) key.split("\\.")).getList(String.class);
var list = root.node((Object[]) key.split("\\.")).getList(String.class);
lastTranslationNotSuccessful = false;
return list;
} catch (SerializationException e) {
plugin.getComponentLogger().error("Could not parse string list in language file {} with key {}!", filePath.toString(), key);
}
return List.of("undefined");
lastTranslationNotSuccessful = true;
return List.of("undefined (" + getFileName() + ": " + key + ")");
}

public List<String> getTranslations(String key, String @NotNull ... args) {
Expand All @@ -92,6 +98,15 @@ public InputStream getDefaultFileStream() {
return plugin.getResource("lang/" + filePath.toFile().getName());
}

public void setTranslation(String key, Object value) {
try {
root.node((Object[]) key.split("\\.")).raw(value);
saveFile();
} catch (ConfigurateException e) {
plugin.getComponentLogger().error("Could not set key {} in language file {} with value {}!", key, filePath.toString(), value);
}
}

public List<String> readDefaultFile() {
try (InputStream in = getDefaultFileStream()) {
BufferedReader input = new BufferedReader(new InputStreamReader(in));
Expand All @@ -116,4 +131,6 @@ public void loadFile() {
plugin.getComponentLogger().error(Component.text("Could not properly load language file" + filePath), e);
}
}

public boolean lastTranslationWasNotSuccessful() {return lastTranslationNotSuccessful;}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package li.cinnazeyy.langlibs.core.language;

import com.destroystokyo.paper.ClientOption;
import li.cinnazeyy.langlibs.core.LangLibAPI;
import li.cinnazeyy.langlibs.core.file.LanguageFile;
import li.cinnazeyy.langlibs.core.file.LanguageFileFactory;
Expand Down Expand Up @@ -38,8 +37,13 @@ public LanguageUtil(Plugin plugin) {

@SuppressWarnings("unused")
public String get(CommandSender sender, String key) {
return (sender instanceof Player ? getLanguageFileByPlayer(((Player) sender).getUniqueId()) :
languageFiles[0]).getTranslation(key);
if (sender instanceof Player p) {
var languageFile = getLanguageFileByPlayer(p.getUniqueId());
var translation = languageFile.getTranslation(key);
if (languageFile.lastTranslationWasNotSuccessful()) translation = languageFiles[0].getTranslation(key);
return translation;
}
return languageFiles[0].getTranslation(key);
}

@SuppressWarnings("unused")
Expand All @@ -49,8 +53,13 @@ public String get(UUID playerUUID, String key) {

@SuppressWarnings("unused")
public String get(CommandSender sender, String key, String... args) {
return (sender instanceof Player ? getLanguageFileByPlayer(((Player) sender).getUniqueId()) :
languageFiles[0]).getTranslation(key, args);
if (sender instanceof Player p) {
var languageFile = getLanguageFileByPlayer(p.getUniqueId());
var translation = languageFile.getTranslation(key, args);
if (languageFile.lastTranslationWasNotSuccessful()) translation = languageFiles[0].getTranslation(key, args);
return translation;
}
return languageFiles[0].getTranslation(key, args);
}

@SuppressWarnings("unused")
Expand Down Expand Up @@ -86,8 +95,13 @@ public Component getComponent(UUID playerUUID, String key, TextColor baseColor,

@SuppressWarnings("unused")
public List<String> getList(CommandSender sender, String key) {
return (sender instanceof Player ? getLanguageFileByPlayer(((Player) sender).getUniqueId()) :
languageFiles[0]).getTranslations(key);
if (sender instanceof Player p) {
var languageFile = getLanguageFileByPlayer(p.getUniqueId());
var translation = languageFile.getTranslations(key);
if (languageFile.lastTranslationWasNotSuccessful()) translation = languageFiles[0].getTranslations(key);
return translation;
}
return languageFiles[0].getTranslations(key);
}

@SuppressWarnings("unused")
Expand All @@ -97,8 +111,13 @@ public List<String> getList(UUID playerUUID, String key) {

@SuppressWarnings("unused")
public List<String> getList(CommandSender sender, String key, String... args) {
return (sender instanceof Player ? getLanguageFileByPlayer(((Player) sender).getUniqueId()) :
languageFiles[0]).getTranslations(key, args);
if (sender instanceof Player p) {
var languageFile = getLanguageFileByPlayer(p.getUniqueId());
var translation = languageFile.getTranslations(key, args);
if (languageFile.lastTranslationWasNotSuccessful()) translation = languageFiles[0].getTranslations(key, args);
return translation;
}
return languageFiles[0].getTranslations(key, args);
}

@SuppressWarnings("unused")
Expand All @@ -119,7 +138,7 @@ public LanguageFile getLanguageFileByPlayer(@NotNull UUID playerUUID) {
}

@SuppressWarnings("unused")
public String getLocaleTagByPlayer(Player player) {
return player != null ? player.getClientOption(ClientOption.LOCALE) : null;
public static String getLocaleTagByPlayer(Player player) {
return player != null ? player.locale().toString() : null;
}
}
2 changes: 1 addition & 1 deletion langlibs-paper/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ tasks.processResources {
// work around IDEA-296490
duplicatesStrategy = DuplicatesStrategy.INCLUDE
with(copySpec {
from("langui-paper/src/main/resources/plugin.yml") {
from("langui-paper/src/main/resources/paper-plugin.yml") {
expand("version" to version)
}
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.jetbrains.annotations.NotNull;

import java.sql.ResultSet;
import java.sql.SQLException;
Expand All @@ -17,13 +18,12 @@

public class EventListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void onJoin(PlayerJoinEvent event) {
public void onJoin(@NotNull PlayerJoinEvent event) {
Player player = event.getPlayer();
Bukkit.getScheduler().runTaskAsynchronously(LangLibs.getPlugin(), () -> {
String uuid = player.getUniqueId().toString();
try (ResultSet rsUser = DatabaseConnection.createStatement("SELECT uuid, lang FROM langUsers WHERE uuid = ?").setValue(uuid).executeQuery()) {
if (!rsUser.next()) LangLibAPI.setPlayerLang(player,"en_GB");
else LangLibAPI.setPlayerLang(player,rsUser.getString(2));
if (rsUser.next()) LangLibAPI.setPlayerLang(player,rsUser.getString(2));
DatabaseConnection.closeResultSet(rsUser);
} catch (SQLException e) {
LangLibs.getPlugin().getComponentLogger().error(text("A SQL error occurred!"), e);
Expand Down