diff --git a/pom.xml b/pom.xml index 39457243b..b458765d5 100644 --- a/pom.xml +++ b/pom.xml @@ -302,6 +302,7 @@ config.yml wiki.json + languages/translators.json tags/*.json languages/**/*.yml diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java index d1c8f9fcd..0ab9c5f14 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java @@ -38,7 +38,6 @@ public class Contributor { private final TriStateOptional headTexture = TriStateOptional.createNew(); private Optional uuid = Optional.empty(); - private boolean immutable = false; /** * This creates a new {@link Contributor} with the given ingame name and GitHub profile. @@ -84,9 +83,7 @@ public class Contributor { Validate.notNull(role, "The role cannot be null!"); Validate.isTrue(commits >= 0, "Contributions cannot be negative"); - if (!immutable || role.startsWith("translator,")) { - contributions.put(role, commits); - } + contributions.put(role, commits); } /** @@ -259,13 +256,4 @@ public class Contributor { public int getPosition() { return -getTotalContributions(); } - - /** - * This marks this {@link Contributor} as immutable. - * Immutable {@link Contributor Contributors} will no longer be assigned any contributions. - * This is useful when you want to prevent some commits from counting twice. - */ - public void setImmutable() { - immutable = true; - } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java index 701800576..86ee1d2a7 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java @@ -9,6 +9,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -16,7 +17,6 @@ import javax.annotation.Nullable; import org.apache.commons.lang.Validate; import io.github.thebusybiscuit.cscorelib2.config.Config; -import io.github.thebusybiscuit.slimefun4.core.services.localization.Translators; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.HeadTexture; @@ -88,7 +88,12 @@ public class GitHubService { addContributor("nahkd123", "&aWinner of the 2020 Addon Jam"); // Translators - new Translators(this); + try { + TranslatorsReader translators = new TranslatorsReader(this); + translators.load(); + } catch (Exception x) { + SlimefunPlugin.logger().log(Level.SEVERE, "Failed to read 'translators.json'", x); + } } private void addContributor(@Nonnull String name, @Nonnull String role) { @@ -113,6 +118,17 @@ public class GitHubService { return contributor; } + @Nonnull + public Contributor addContributor(@Nonnull String username, @Nonnull String role, int commits) { + Validate.notNull(username, "Username must not be null."); + Validate.notNull(role, "Role should not be null."); + Validate.isTrue(commits >= 0, "Commit count cannot be negative."); + + Contributor contributor = contributors.computeIfAbsent(username, key -> new Contributor(username)); + contributor.setContributions(role, commits); + return contributor; + } + private void loadConnectors(boolean logging) { this.logging = logging; addDefaultContributors(); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/TranslatorsReader.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/TranslatorsReader.java new file mode 100644 index 000000000..58a6e7c29 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/TranslatorsReader.java @@ -0,0 +1,63 @@ +package io.github.thebusybiscuit.slimefun4.core.services.github; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; + +/** + * This class reads all translators of this project. + * A translator is equivalent to the class {@link Contributor} as it also uses that internally. + * + * @author TheBusyBiscuit + * + * @see Contributor + * + */ +final class TranslatorsReader { + + private final GitHubService github; + + // We maybe should switch to a json file in our resources folder at some point. + TranslatorsReader(@Nonnull GitHubService github) { + this.github = github; + } + + public void load() { + InputStream inputStream = SlimefunPlugin.class.getResourceAsStream("/languages/translators.json"); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) { + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(reader.lines().collect(Collectors.joining(""))); + JsonObject json = element.getAsJsonObject(); + + for (Map.Entry entry : json.entrySet()) { + String languageCode = entry.getKey(); + + if (entry.getValue().isJsonArray()) { + String role = ContributorRole.TRANSLATOR.getId() + ',' + languageCode; + JsonArray users = entry.getValue().getAsJsonArray(); + + for (JsonElement user : users) { + github.addContributor(user.getAsString(), role, 0); + } + } + } + } catch (Exception e) { + SlimefunPlugin.logger().log(Level.SEVERE, "Failed to load translators.json file", e); + } + } + +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Translators.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Translators.java deleted file mode 100644 index 7179dc1c7..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Translators.java +++ /dev/null @@ -1,220 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.localization; - -import javax.annotation.Nonnull; -import javax.annotation.ParametersAreNonnullByDefault; - -import io.github.thebusybiscuit.slimefun4.core.services.github.Contributor; -import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubService; - -/** - * This class holds all {@link Translators} of this project. - * A translator is equivalent to the class {@link Contributor} as it also uses that internally. - * - * @author TheBusyBiscuit - * - * @see Contributor - * - */ -public class Translators { - - private final GitHubService github; - - // We maybe should switch to a json file in our resources folder at some point. - public Translators(@Nonnull GitHubService github) { - this.github = github; - - // Translators - German - addTranslator("TheBusyBiscuit", SupportedLanguage.GERMAN, false); - addTranslator("MeerBiene", SupportedLanguage.GERMAN, true); - addTranslator("daro2404", SupportedLanguage.GERMAN, true); - - // Translators - French - addTranslator("JustDams", "D4ms_", SupportedLanguage.FRENCH, true); - addTranslator("edkerforne", SupportedLanguage.FRENCH, true); - addTranslator("tnthomastn", SupportedLanguage.FRENCH, true); - addTranslator("Noumaa", SupportedLanguage.FRENCH, true); - addTranslator("ishi-sama", SupportedLanguage.FRENCH, true); - addTranslator("amarcais53", SupportedLanguage.FRENCH, true); - addTranslator("NinoFutur", SupportedLanguage.FRENCH, true); - addTranslator("TheRetix", SupportedLanguage.FRENCH, true); - addTranslator("Aeris1One", SupportedLanguage.FRENCH, true); - addTranslator("Aomitsu", SupportedLanguage.FRENCH, true); - - // Translators - Italian - addTranslator("xXDOTTORXx", SupportedLanguage.ITALIAN, true); - addTranslator("Sfiguz7", SupportedLanguage.ITALIAN, false); - addTranslator("ThatsCube", SupportedLanguage.ITALIAN, true); - addTranslator("alessandrobasi", SupportedLanguage.ITALIAN, true); - addTranslator("dracrus", SupportedLanguage.ITALIAN, true); - addTranslator("prolletto64", SupportedLanguage.ITALIAN, true); - - // Translators - Spanish - addTranslator("Luu7", "_Luu", SupportedLanguage.SPANISH, true); - addTranslator("Vravinite", SupportedLanguage.SPANISH, true); - addTranslator("NotUmBr4", SupportedLanguage.SPANISH, true); - addTranslator("dbzjjoe", SupportedLanguage.SPANISH, true); - addTranslator("DaHolyCheese", SupportedLanguage.SPANISH, true); - addTranslator("d-l-n", SupportedLanguage.SPANISH, true); - - // Translators - Latvian - addTranslator("AgnisT", "NIKNAIZ", SupportedLanguage.LATVIAN, true); - - // Translators - Hungarian - addTranslator("andris155", SupportedLanguage.HUNGARIAN, true); - addTranslator("KingDeadZ", SupportedLanguage.HUNGARIAN, true); - addTranslator("poma123", SupportedLanguage.HUNGARIAN, false); - - // Translators - Vietnamese - addTranslator("HSGamer", SupportedLanguage.VIETNAMESE, false); - addTranslator("JustMangoT", "JFF_JustMango", SupportedLanguage.VIETNAMESE, true); - addTranslator("Julie-Sigtuna", SupportedLanguage.VIETNAMESE, true); - addTranslator("nahkd123", SupportedLanguage.VIETNAMESE, true); - addTranslator("JustAPieOP", SupportedLanguage.VIETNAMESE, true); - addTranslator("that4life", SupportedLanguage.VIETNAMESE, true); - addTranslator("CactusTheGuy", SupportedLanguage.VIETNAMESE, true); - addTranslator("hniV", SupportedLanguage.VIETNAMESE, true); - - // Translators - Slovak - addTranslator("KillerXCoder", SupportedLanguage.SLOVAK, true); - addTranslator("PixelHotDog", SupportedLanguage.SLOVAK, true); - - // Translators - Czech - addTranslator("Nekomitsuki", SupportedLanguage.CZECH, true); - addTranslator("GGGEDR", SupportedLanguage.CZECH, true); - addTranslator("jakmanda05", SupportedLanguage.CZECH, true); - addTranslator("Aile-Minicraftcz", SupportedLanguage.CZECH, true); - addTranslator("Tengoblinekcz", SupportedLanguage.CZECH, true); - addTranslator("sirhCCC", SupportedLanguage.CZECH, true); - addTranslator("Thezerix", SupportedLanguage.CZECH, true); - addTranslator("IsLineCZ", SupportedLanguage.CZECH, true); - addTranslator("MrFriggo", SupportedLanguage.CZECH, true); - addTranslator("100petr", SupportedLanguage.CZECH, true); - addTranslator("frfole", SupportedLanguage.CZECH, true); - addTranslator("bobhenl", SupportedLanguage.CZECH, true); - addTranslator("janvrska", SupportedLanguage.CZECH, true); - addTranslator("LirCZE", SupportedLanguage.CZECH, true); - - // Translators - Russian - addTranslator("SoSeDiK", SupportedLanguage.RUSSIAN, false); - addTranslator("KostaTV", SupportedLanguage.RUSSIAN, true); - addTranslator("TomWiskis", "MrWiskis", SupportedLanguage.RUSSIAN, true); - addTranslator("cyb3rm4n", "GP_CyberMan", SupportedLanguage.RUSSIAN, true); - - // Translators - Ukrainian - addTranslator("SoSeDiK", SupportedLanguage.UKRAINIAN, false); - - // Translators - Swedish - addTranslator("NihilistBrew", "ma1yang2", SupportedLanguage.SWEDISH, false); - addTranslator("Tra-sh", "TurretTrash", SupportedLanguage.SWEDISH, true); - - // Translators - Finnish - addTranslator("developer-pseudo", SupportedLanguage.FINNISH, true); - - // Translators - Dutch - addTranslator("Dr4gonD", "DragonD", SupportedLanguage.DUTCH, true); - addTranslator("svr333", SupportedLanguage.DUTCH, false); - addTranslator("PabloMarcendo", SupportedLanguage.DUTCH, true); - addTranslator("milvantiou", SupportedLanguage.DUTCH, true); - addTranslator("Sven313D", SupportedLanguage.DUTCH, true); - addTranslator("TypischTeun", SupportedLanguage.DUTCH, true); - addTranslator("peppower", SupportedLanguage.DUTCH, true); - - // Translators - Danish - addTranslator("Mini-kun", SupportedLanguage.DANISH, true); - - // Translators - Polish - addTranslator("ascpixel", "kbartek_", SupportedLanguage.POLISH, true); - addTranslator("Xylitus", SupportedLanguage.POLISH, true); - addTranslator("Wirusiu", SupportedLanguage.POLISH, true); - addTranslator("koloksk", SupportedLanguage.POLISH, true); - - // Translators - Chinese (China) - addTranslator("StarWishsama", "StarWish_Sama", SupportedLanguage.CHINESE_CHINA, false); - addTranslator("Rothes", SupportedLanguage.CHINESE_CHINA, true); - addTranslator("Chihsiao", SupportedLanguage.CHINESE_CHINA, true); - addTranslator("Jiejue233", SupportedLanguage.CHINESE_CHINA, true); - - // Translators - Chinese (Taiwan) - addTranslator("BrineYT", "HeroBrineKing", SupportedLanguage.CHINESE_TAIWAN, true); - addTranslator("mio9", SupportedLanguage.CHINESE_TAIWAN, true); - addTranslator("ALiangLiang", SupportedLanguage.CHINESE_TAIWAN, true); - - // Translators - Arabic - addTranslator("mohkamfer", "AgentBabbie", SupportedLanguage.ARABIC, false); - - // Translators - Hebrew - addTranslator("dhtdht020", SupportedLanguage.HEBREW, true); - addTranslator("Eylonnn", SupportedLanguage.HEBREW, true); - addTranslator("sarhatabaot", SupportedLanguage.HEBREW, false); - addTranslator("Timotiyadeyhakesem", SupportedLanguage.HEBREW, true); - addTranslator("PaladinBear", SupportedLanguage.HEBREW, true); - addTranslator("Molioron", SupportedLanguage.HEBREW, true); - addTranslator("McAlmog", SupportedLanguage.HEBREW, true); - - // Translators - Japanese - addTranslator("bito-blosh", "Bloshop", SupportedLanguage.JAPANESE, false); - - // Translators - Korean - addTranslator("kwonms871", SupportedLanguage.KOREAN, true); - addTranslator("yumjunstar", SupportedLanguage.KOREAN, true); - addTranslator("BlWon", SupportedLanguage.KOREAN, true); - addTranslator("20181241", SupportedLanguage.KOREAN, true); - addTranslator("kudansul", SupportedLanguage.KOREAN, true); - - // Translators - Indonesian - addTranslator("diradho", SupportedLanguage.INDONESIAN, false); - addTranslator("Frozenkamui", SupportedLanguage.INDONESIAN, false); - addTranslator("aril3721", SupportedLanguage.INDONESIAN, false); - addTranslator("JunederZ", SupportedLanguage.INDONESIAN, false); - addTranslator("EnderWingZ", SupportedLanguage.INDONESIAN, false); - - // Translators - Thai - addTranslator("phoomin2012", SupportedLanguage.THAI, false); - addTranslator("film2860", SupportedLanguage.THAI, false); - addTranslator("Rafrael17k", SupportedLanguage.THAI, false); - addTranslator("Cupjok", SupportedLanguage.THAI, false); - - // Translators - Turkish - addTranslator("Yunuskrn", SupportedLanguage.TURKISH, true); - addTranslator("LinoxGH", "ajan_12", SupportedLanguage.TURKISH, false); - - // Translators - Macedonian - addTranslator("TheSilentPro", SupportedLanguage.MACEDONIAN, true); - - // Translators - Bulgarian - addTranslator("DNBGlol", SupportedLanguage.BULGARIAN, true); - addTranslator("Pukejoy", SupportedLanguage.BULGARIAN, true); - - // Translators - Tagalog - addTranslator("sccooottttie", SupportedLanguage.TAGALOG, true); - - // Translators - Portuguese - addTranslator("Gusstavo", SupportedLanguage.PORTUGUESE_PORTUGAL, true); - - // Translators - Portuguese (Brazil) - addTranslator("G4stavoM1ster", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("yurinogueira", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("Sakanas", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("krazybeat", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("FaolanMalcadh", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("Gusstavo", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("Day-OS", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("ooicram", SupportedLanguage.PORTUGUESE_BRAZIL, true); - addTranslator("Sxigames", SupportedLanguage.PORTUGUESE_BRAZIL, true); - } - - @ParametersAreNonnullByDefault - private void addTranslator(String name, SupportedLanguage lang, boolean lock) { - addTranslator(name, name, lang, lock); - } - - @ParametersAreNonnullByDefault - private void addTranslator(String username, String minecraftName, SupportedLanguage lang, boolean lock) { - Contributor contributor = github.addContributor(minecraftName, "https://github.com/" + username, "translator," + lang.getLanguageId(), 0); - - if (lock) { - contributor.setImmutable(); - } - } - -} diff --git a/src/main/resources/languages/translators.json b/src/main/resources/languages/translators.json new file mode 100644 index 000000000..99825f674 --- /dev/null +++ b/src/main/resources/languages/translators.json @@ -0,0 +1,178 @@ +{ + "de" : [ + "TheBusyBiscuit", + "MeerBiene", + "daro2404" + ], + "fr" : [ + "JustDams", + "edkerforne", + "tnthomastn", + "Noumaa", + "ishi-sama", + "amarcais53", + "NinoFutur", + "TheRetix", + "Aeris1One", + "Aomitsu" + ], + "es" : [ + "Luu7", + "Vravinite", + "NotUmBr4", + "dbzjjoe", + "DaHolyCheese", + "d-l-n" + ], + "it" : [ + "Sfiguz7", + "xXDOTTORXx", + "ThatsCube", + "alessandrobasi", + "dracrus", + "prolletto64" + ], + "lv" : [ + "AgnisT" + ], + "hu" : [ + "poma123", + "andris155", + "KingDeadZ" + ], + "vi" : [ + "HSGamer", + "JustMangoT", + "Julie-Sigtuna", + "nahkd123", + "JustAPieOP", + "that4life", + "CactusTheGuy", + "hniV" + ], + "sk" : [ + "KillerXCoder", + "PixelHotDog" + ], + "cs" : [ + "Nekomitsuki", + "GGGEDR", + "jakmanda05", + "Aile-Minicraftcz", + "Tengoblinekcz", + "sirhCCC", + "Thezerix", + "IsLineCZ", + "MrFriggo", + "100petr", + "frfole", + "bobhenl", + "janvrska", + "LirCZE" + ], + "ru" : [ + "SoSeDiK", + "KostaTV", + "TomWiskis", + "cyb3rm4n" + ], + "sv" : [ + "NihilistBrew", + "Tra-sh" + ], + "fi" : [ + "developer-pseudo" + ], + "nl" : [ + "Dr4gonD", + "svr333", + "PabloMarcendo", + "milvantiou", + "Sven313D", + "TypischTeun", + "peppower" + ], + "da" : [ + "Mini-kun" + ], + "pl" : [ + "ascpixel", + "Xylitus", + "Wirusiu", + "koloksk" + ], + "zh-CN" : [ + "StarWishsama", + "Rothes", + "Chihsiao", + "Jiejue233" + ], + "zh-TW" : [ + "BrineYT", + "mio9", + "ALiangLiang" + ], + "ar" : [ + "mohkamfer" + ], + "he" : [ + "dhtdht020", + "Eylonnn", + "sarhatabaot", + "Timotiyadeyhakesem", + "PaladinBear", + "Molioron", + "McAlmog" + ], + "ja" : [ + "bito-blosh" + ], + "ko" : [ + "kwonms871", + "yumjunstar", + "BlWon", + "20181241", + "kudansul" + ], + "id" : [ + "diradho", + "Frozenkamui", + "aril3721", + "JunederZ", + "EnderWingZ" + ], + "th" : [ + "phoomin2012", + "film2860", + "Rafrael17k", + "Cupjok" + ], + "tr" : [ + "Yunuskrn", + "LinoxGH" + ], + "mk" : [ + "TheSilentPro" + ], + "bg" : [ + "DNBGlol", + "Pukejoy" + ], + "tl" : [ + "sccooottttie" + ], + "pt" : [ + "Gusstavo" + ], + "pt-BR" : [ + "G4stavoM1ster", + "yurinogueira", + "Sakanas", + "krazybeat", + "FaolanMalcadh", + "Gusstavo", + "Day-OS", + "ooicram", + "Sxigames" + ] +}