Fix up translations and remove dupes
This commit is contained in:
		| @@ -2510,12 +2510,10 @@ public class DisguiseUtilities { | ||||
|  | ||||
|     public static String translateAlternateColorCodes(String string) { | ||||
|         if (NmsVersion.v1_16.isSupported()) { | ||||
|             return string.replaceAll("&(?=#[0-9a-fA-F]{6})", ChatColor.COLOR_CHAR + ""); | ||||
|             string = string.replaceAll("&(?=#[0-9a-fA-F]{6})", ChatColor.COLOR_CHAR + ""); | ||||
|         } | ||||
|  | ||||
|         string = ChatColor.translateAlternateColorCodes('&', string); | ||||
|  | ||||
|         return string; | ||||
|         return ChatColor.translateAlternateColorCodes('&', string); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package me.libraryaddict.disguise.utilities.translations; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| import me.libraryaddict.disguise.utilities.params.ParamInfo; | ||||
| import me.libraryaddict.disguise.utilities.params.ParamInfoManager; | ||||
| import me.libraryaddict.disguise.utilities.parser.WatcherMethod; | ||||
| @@ -106,7 +107,7 @@ public class TranslateFiller { | ||||
|                 .save("DisgiseType", "Used for the disgiuse modify radius command to list all " + "disguisetypes"); | ||||
|  | ||||
|         for (LibsMsg msg : LibsMsg.values()) { | ||||
|             TranslateType.MESSAGES.save(msg.getRaw(), "Reference: " + msg.name()); | ||||
|             TranslateType.MESSAGES.save(DisguiseUtilities.translateAlternateColorCodes(msg.getRaw()), "Reference: " + msg.name()); | ||||
|         } | ||||
|  | ||||
|         for (TranslateType type : TranslateType.values()) { | ||||
|   | ||||
| @@ -4,13 +4,18 @@ import me.libraryaddict.disguise.DisguiseConfig; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| import me.libraryaddict.disguise.utilities.LibsPremium; | ||||
| import org.apache.commons.lang.StringEscapeUtils; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
| import org.checkerframework.checker.regex.qual.Regex; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.FileWriter; | ||||
| import java.io.IOException; | ||||
| import java.nio.file.Files; | ||||
| import java.util.*; | ||||
| import java.util.regex.Matcher; | ||||
| import java.util.regex.Pattern; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 10/06/2017. | ||||
| @@ -23,7 +28,9 @@ public enum TranslateType { | ||||
|  | ||||
|     private File file; | ||||
|     private LinkedHashMap<String, String> translated = new LinkedHashMap<>(); | ||||
|     private HashMap<String, Boolean> toDeDupe = new HashMap<>(); | ||||
|     private FileWriter writer; | ||||
|     private int written; | ||||
|  | ||||
|     TranslateType(String fileName) { | ||||
|         file = new File("plugins/LibsDisguises/Translations", fileName + ".yml"); | ||||
| @@ -63,10 +70,14 @@ public enum TranslateType { | ||||
|             if (writer != null) { | ||||
|                 writer.close(); | ||||
|                 writer = null; | ||||
|  | ||||
|                 DisguiseUtilities.getLogger().info("Saved " + written + " translations that were not in " + getFile().getName()); | ||||
|             } | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|  | ||||
|         deDupeMessages(); | ||||
|     } | ||||
|  | ||||
|     private void loadTranslations() { | ||||
| @@ -88,7 +99,6 @@ public enum TranslateType { | ||||
|  | ||||
|         try { | ||||
|             config.load(getFile()); | ||||
|             int dupes = 0; | ||||
|  | ||||
|             for (String key : config.getKeys(false)) { | ||||
|                 String value = config.getString(key); | ||||
| @@ -98,18 +108,7 @@ public enum TranslateType { | ||||
|                 } else { | ||||
|                     String newKey = DisguiseUtilities.translateAlternateColorCodes(key); | ||||
|  | ||||
|                     if (translated.containsKey(newKey)) { | ||||
|                         if (dupes++ < 5) { | ||||
|                             DisguiseUtilities.getLogger().severe("Alert! Duplicate translation entry for " + key + " in " + name() + " translations!"); | ||||
|                             continue; | ||||
|                         } else { | ||||
|                             DisguiseUtilities.getLogger() | ||||
|                                     .severe("Too many duplicated keys! It's likely that this file was mildly " + "corrupted by a previous bug!"); | ||||
|                             DisguiseUtilities.getLogger().severe("Delete the file, or you can remove every line after the first " + "duplicate message!"); | ||||
|                             break; | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
|                     toDeDupe.put(newKey, true); | ||||
|                     translated.put(newKey, DisguiseUtilities.translateAlternateColorCodes(value)); | ||||
|  | ||||
|                     if (!newKey.equals(translated.get(newKey))) { | ||||
| @@ -142,14 +141,16 @@ public enum TranslateType { | ||||
|     } | ||||
|  | ||||
|     public void save(String message, String comment) { | ||||
|         String sanitized = StringEscapeUtils.escapeJava(message.replace(ChatColor.COLOR_CHAR + "", "&")); | ||||
|  | ||||
|         toDeDupe.put(sanitized, false); | ||||
|  | ||||
|         if (translated.containsKey(message)) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         translated.put(message, message); | ||||
|  | ||||
|         message = StringEscapeUtils.escapeJava(message.replace(ChatColor.COLOR_CHAR + "", "&")); | ||||
|  | ||||
|         try { | ||||
|             boolean exists = getFile().exists(); | ||||
|  | ||||
| @@ -174,12 +175,73 @@ public enum TranslateType { | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             writer.write("\n" + (comment != null ? "# " + comment + "\n" : "") + "\"" + message + "\": \"" + message + "\"\n"); | ||||
|             writer.write("\n" + (comment != null ? "# " + comment + "\n" : "") + "\"" + sanitized + "\": \"" + sanitized + "\"\n"); | ||||
|             written++; | ||||
|         } catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void deDupeMessages() { | ||||
|         try { | ||||
|             if (!getFile().exists()) { | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             ArrayList<String> disguiseText = new ArrayList(Arrays.asList(new String(Files.readAllBytes(getFile().toPath())).split("\r?\n"))); | ||||
|             int dupes = 0; | ||||
|             int outdated = 0; | ||||
|  | ||||
|             for (Map.Entry<String, Boolean> entry : toDeDupe.entrySet()) { | ||||
|                 String s = entry.getKey(); | ||||
|                 boolean isOutdated = entry.getValue(); | ||||
|                 boolean removedFirst = isOutdated; | ||||
|  | ||||
|                 String str = "\"" + s + "\": \"" + s + "\""; | ||||
|  | ||||
|                 for (int i = 0; i < disguiseText.size(); i++) { | ||||
|                     if (!disguiseText.get(i).equals(str)) { | ||||
|                         continue; | ||||
|                     } | ||||
|  | ||||
|                     if (!removedFirst) { | ||||
|                         removedFirst = true; | ||||
|                         continue; | ||||
|                     } | ||||
|  | ||||
|                     disguiseText.remove(i); | ||||
|  | ||||
|                     if (isOutdated) { | ||||
|                         outdated++; | ||||
|                     } else { | ||||
|                         dupes++; | ||||
|                     } | ||||
|  | ||||
|                     if (disguiseText.get(--i).startsWith("# Reference: ")) { | ||||
|                         disguiseText.remove(i); | ||||
|                     } | ||||
|  | ||||
|                     if (disguiseText.size() <= i || !disguiseText.get(i).isEmpty()) { | ||||
|                         continue; | ||||
|                     } | ||||
|  | ||||
|                     disguiseText.remove(i); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (dupes + outdated > 0) { | ||||
|                 DisguiseUtilities.getLogger().info("Removed " + dupes + " duplicate and " + outdated + " outdated translations from " + getFile().getName() + | ||||
|                         ", this was likely caused by a previous issue in the plugin"); | ||||
|  | ||||
|                 Files.write(getFile().toPath(), StringUtils.join(disguiseText, "\n").getBytes()); | ||||
|             } | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|         } finally { | ||||
|             toDeDupe.clear(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public String reverseGet(String translated) { | ||||
|         if (translated == null || !LibsPremium.isPremium() || !DisguiseConfig.isUseTranslations()) { | ||||
|             return translated; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user