diff options
author | Glease <4586901+Glease@users.noreply.github.com> | 2022-05-12 17:47:18 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-12 11:47:18 +0200 |
commit | e1d382876b552ff5d01b8d2cdc5152dd799fd1b5 (patch) | |
tree | d8d67bf778dbccc2c2603151d0f5e736f48debcb /src/main/java | |
parent | a8a1b46c00cd8086dc175e4d828d0c2048eec586 (diff) | |
download | GT5-Unofficial-e1d382876b552ff5d01b8d2cdc5152dd799fd1b5.tar.gz GT5-Unofficial-e1d382876b552ff5d01b8d2cdc5152dd799fd1b5.tar.bz2 GT5-Unofficial-e1d382876b552ff5d01b8d2cdc5152dd799fd1b5.zip |
Don't save unchanged file several hundred times per second (#1047)
* Don't save unchanged file several hundred times per second
* Revise implementation
It turns out Configuration#hasChanged is a nontrivial method, especially in a huge configuration file such as language file
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_LanguageManager.java | 98 |
1 files changed, 51 insertions, 47 deletions
diff --git a/src/main/java/gregtech/api/util/GT_LanguageManager.java b/src/main/java/gregtech/api/util/GT_LanguageManager.java index 2c2324aedd..b71fc7ca2b 100644 --- a/src/main/java/gregtech/api/util/GT_LanguageManager.java +++ b/src/main/java/gregtech/api/util/GT_LanguageManager.java @@ -12,9 +12,12 @@ import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; import java.lang.reflect.Field; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import static gregtech.api.enums.GT_Values.E; @@ -24,18 +27,18 @@ public class GT_LanguageManager { public static String sLanguage = "en_US"; public static boolean sUseEnglishFile = false; public static boolean i18nPlaceholder = true; - + public static String - FACE_ANY = "gt.lang.face.any", - FACE_BOTTOM = "gt.lang.face.bottom", - FACE_TOP = "gt.lang.face.top", - FACE_LEFT = "gt.lang.face.left", - FACE_FRONT = "gt.lang.face.front", - FACE_RIGHT = "gt.lang.face.right", - FACE_BACK = "gt.lang.face.back", + FACE_ANY = "gt.lang.face.any", + FACE_BOTTOM = "gt.lang.face.bottom", + FACE_TOP = "gt.lang.face.top", + FACE_LEFT = "gt.lang.face.left", + FACE_FRONT = "gt.lang.face.front", + FACE_RIGHT = "gt.lang.face.right", + FACE_BACK = "gt.lang.face.back", FACE_NONE = "gt.lang.face.none"; - - public static String[] + + public static String[] FACES = {FACE_BOTTOM, FACE_TOP, FACE_LEFT, FACE_FRONT, FACE_RIGHT, FACE_BACK, FACE_NONE}; @@ -45,10 +48,11 @@ public class GT_LanguageManager { public static synchronized String addStringLocalization(String aKey, String aEnglish, boolean aWriteIntoLangFile) { if (aKey == null) return E; - if (aWriteIntoLangFile){ aEnglish = writeToLangFile(aKey, aEnglish); - if(!LANGMAP.containsKey(aKey)){ - LANGMAP.put(aKey, aEnglish); - } + if (aWriteIntoLangFile && (!LANGMAP.containsKey(aKey) || (sEnglishFile != null && !BUFFERMAP.isEmpty()))) { + aEnglish = writeToLangFile(aKey, aEnglish); + if (!LANGMAP.containsKey(aKey)) { + LANGMAP.put(aKey, aEnglish); + } } TEMPMAP.put(aKey.trim(), aEnglish); LanguageRegistry.instance().injectLanguage(sLanguage, TEMPMAP); @@ -135,13 +139,13 @@ public class GT_LanguageManager { } return aStack.getUnlocalizedName() + ".name"; } - + public static void writePlaceholderStrings(){ addStringLocalization("Interaction_DESCRIPTION_Index_001", "Puts out into adjacent Slot #"); - addStringLocalization("Interaction_DESCRIPTION_Index_002", "Grabs in for own Slot #"); + addStringLocalization("Interaction_DESCRIPTION_Index_002", "Grabs in for own Slot #"); addStringLocalization("Interaction_DESCRIPTION_Index_003", "Normal"); addStringLocalization("Interaction_DESCRIPTION_Index_004", "Inverted"); - addStringLocalization("Interaction_DESCRIPTION_Index_005", "No Work at all"); + addStringLocalization("Interaction_DESCRIPTION_Index_005", "No Work at all"); addStringLocalization("Interaction_DESCRIPTION_Index_006", "Export"); addStringLocalization("Interaction_DESCRIPTION_Index_007", "Import"); addStringLocalization("Interaction_DESCRIPTION_Index_008", "Export (conditional)"); @@ -153,20 +157,20 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_014", "Export allow Input (conditional)"); addStringLocalization("Interaction_DESCRIPTION_Index_015", "Import allow Output (conditional)"); addStringLocalization("Interaction_DESCRIPTION_Index_016", "Export allow Input (invert cond)"); - addStringLocalization("Interaction_DESCRIPTION_Index_017", "Import allow Output (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_017", "Import allow Output (invert cond)"); addStringLocalization("Interaction_DESCRIPTION_Index_018", "Normal"); addStringLocalization("Interaction_DESCRIPTION_Index_019", "Inverted"); addStringLocalization("Interaction_DESCRIPTION_Index_020", "Ready to work"); - addStringLocalization("Interaction_DESCRIPTION_Index_021", "Not ready to work"); + addStringLocalization("Interaction_DESCRIPTION_Index_021", "Not ready to work"); addStringLocalization("Interaction_DESCRIPTION_Index_022", "Import"); addStringLocalization("Interaction_DESCRIPTION_Index_023", "Import (conditional)"); addStringLocalization("Interaction_DESCRIPTION_Index_024", "Import (invert cond)"); addStringLocalization("Interaction_DESCRIPTION_Index_025", "Keep Liquids Away"); addStringLocalization("Interaction_DESCRIPTION_Index_026", "Keep Liquids Away (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_027", "Keep Liquids Away (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_027", "Keep Liquids Away (invert cond)"); addStringLocalization("Interaction_DESCRIPTION_Index_028", "Allow"); addStringLocalization("Interaction_DESCRIPTION_Index_029", "Allow (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_030", "Disallow (conditional)"); + addStringLocalization("Interaction_DESCRIPTION_Index_030", "Disallow (conditional)"); addStringLocalization("Interaction_DESCRIPTION_Index_031", "Normal Universal Storage"); addStringLocalization("Interaction_DESCRIPTION_Index_032", "Inverted Universal Storage"); addStringLocalization("Interaction_DESCRIPTION_Index_033", "Normal Electricity Storage"); @@ -178,20 +182,20 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_039", "Normal Average Electric Output"); addStringLocalization("Interaction_DESCRIPTION_Index_040", "Inverted Average Electric Output"); addStringLocalization("Interaction_DESCRIPTION_Index_041", "Normal Electricity Storage(Including Batteries)"); - addStringLocalization("Interaction_DESCRIPTION_Index_042", "Inverted Electricity Storage(Including Batteries)"); + addStringLocalization("Interaction_DESCRIPTION_Index_042", "Inverted Electricity Storage(Including Batteries)"); addStringLocalization("Interaction_DESCRIPTION_Index_043", "Allow input, no output"); addStringLocalization("Interaction_DESCRIPTION_Index_044", "Deny input, no output"); addStringLocalization("Interaction_DESCRIPTION_Index_045", "Allow input, permit any output"); addStringLocalization("Interaction_DESCRIPTION_Index_046", "Deny input, permit any output"); - addStringLocalization("Interaction_DESCRIPTION_Index_047", "Filter Fluid: "); + addStringLocalization("Interaction_DESCRIPTION_Index_047", "Filter Fluid: "); addStringLocalization("Interaction_DESCRIPTION_Index_048", "Pump speed: "); addStringLocalization("Interaction_DESCRIPTION_Index_049", "L/tick "); - addStringLocalization("Interaction_DESCRIPTION_Index_050", "L/sec"); + addStringLocalization("Interaction_DESCRIPTION_Index_050", "L/sec"); addStringLocalization("Interaction_DESCRIPTION_Index_051", "Normal"); addStringLocalization("Interaction_DESCRIPTION_Index_052", "Inverted"); - addStringLocalization("Interaction_DESCRIPTION_Index_053", "Slot: "); + addStringLocalization("Interaction_DESCRIPTION_Index_053", "Slot: "); addStringLocalization("Interaction_DESCRIPTION_Index_054", "Inverted"); - addStringLocalization("Interaction_DESCRIPTION_Index_055", "Normal"); + addStringLocalization("Interaction_DESCRIPTION_Index_055", "Normal"); addStringLocalization("Interaction_DESCRIPTION_Index_056", "Emit if 1 Maintenance Needed"); addStringLocalization("Interaction_DESCRIPTION_Index_057", "Emit if 1 Maintenance Needed(inverted)"); addStringLocalization("Interaction_DESCRIPTION_Index_058", "Emit if 2 Maintenance Needed"); @@ -206,22 +210,22 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_067", "Emit if rotor needs maintenance(inverted)"); addStringLocalization("Interaction_DESCRIPTION_Index_068", "Emit if any Player is close"); addStringLocalization("Interaction_DESCRIPTION_Index_069", "Emit if other player is close"); - addStringLocalization("Interaction_DESCRIPTION_Index_070", "Emit if you are close"); + addStringLocalization("Interaction_DESCRIPTION_Index_070", "Emit if you are close"); addStringLocalization("Interaction_DESCRIPTION_Index_071", "Conducts strongest Input"); addStringLocalization("Interaction_DESCRIPTION_Index_072", "Conducts from bottom Input"); addStringLocalization("Interaction_DESCRIPTION_Index_073", "Conducts from top Input"); addStringLocalization("Interaction_DESCRIPTION_Index_074", "Conducts from north Input"); addStringLocalization("Interaction_DESCRIPTION_Index_075", "Conducts from south Input"); addStringLocalization("Interaction_DESCRIPTION_Index_076", "Conducts from west Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_077", "Conducts from east Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_077", "Conducts from east Input"); addStringLocalization("Interaction_DESCRIPTION_Index_078", "Signal = "); addStringLocalization("Interaction_DESCRIPTION_Index_079", "Conditional Signal = "); - addStringLocalization("Interaction_DESCRIPTION_Index_080", "Inverted Conditional Signal = "); - addStringLocalization("Interaction_DESCRIPTION_Index_081", "Frequency: "); + addStringLocalization("Interaction_DESCRIPTION_Index_080", "Inverted Conditional Signal = "); + addStringLocalization("Interaction_DESCRIPTION_Index_081", "Frequency: "); addStringLocalization("Interaction_DESCRIPTION_Index_082", "Open if work enabled"); addStringLocalization("Interaction_DESCRIPTION_Index_083", "Open if work disabled"); addStringLocalization("Interaction_DESCRIPTION_Index_084", "Only Output allowed"); - addStringLocalization("Interaction_DESCRIPTION_Index_085", "Only Input allowed"); + addStringLocalization("Interaction_DESCRIPTION_Index_085", "Only Input allowed"); addStringLocalization("Interaction_DESCRIPTION_Index_086", "Auto-Input: "); addStringLocalization("Interaction_DESCRIPTION_Index_087", "Disabled"); addStringLocalization("Interaction_DESCRIPTION_Index_088", "Enabled"); @@ -230,12 +234,12 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_091", "Redstone Output at Side "); addStringLocalization("Interaction_DESCRIPTION_Index_092", " set to: "); addStringLocalization("Interaction_DESCRIPTION_Index_093", "Strong"); - addStringLocalization("Interaction_DESCRIPTION_Index_094", "Weak"); + addStringLocalization("Interaction_DESCRIPTION_Index_094", "Weak"); addStringLocalization("Interaction_DESCRIPTION_Index_095", "Input from Output Side allowed"); - addStringLocalization("Interaction_DESCRIPTION_Index_096", "Input from Output Side forbidden"); + addStringLocalization("Interaction_DESCRIPTION_Index_096", "Input from Output Side forbidden"); addStringLocalization("Interaction_DESCRIPTION_Index_097", "It's dangerous to go alone! Take this."); addStringLocalization("Interaction_DESCRIPTION_Index_098", "Do not regulate Item Stack Size"); - addStringLocalization("Interaction_DESCRIPTION_Index_099", "Regulate Item Stack Size to: "); + addStringLocalization("Interaction_DESCRIPTION_Index_099", "Regulate Item Stack Size to: "); addStringLocalization("Interaction_DESCRIPTION_Index_100", "This is ");//Spartaaaaaaa!!! addStringLocalization("Interaction_DESCRIPTION_Index_101", " Ore."); addStringLocalization("Interaction_DESCRIPTION_Index_102", "There is Lava behind this Rock."); @@ -243,7 +247,7 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_104", "There is an Air Pocket behind this Rock."); addStringLocalization("Interaction_DESCRIPTION_Index_105", "Material is changing behind this Rock."); addStringLocalization("Interaction_DESCRIPTION_Index_106", "Found traces of "); - addStringLocalization("Interaction_DESCRIPTION_Index_107", "No Ores found."); + addStringLocalization("Interaction_DESCRIPTION_Index_107", "No Ores found."); addStringLocalization("Interaction_DESCRIPTION_Index_108", "Outputs Liquids, Steam and Items"); addStringLocalization("Interaction_DESCRIPTION_Index_109", "Outputs Steam and Items"); addStringLocalization("Interaction_DESCRIPTION_Index_110", "Outputs Steam and Liquids"); @@ -251,23 +255,23 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_112", "Outputs Liquids and Items"); addStringLocalization("Interaction_DESCRIPTION_Index_113", "Outputs only Items"); addStringLocalization("Interaction_DESCRIPTION_Index_114", "Outputs only Liquids"); - addStringLocalization("Interaction_DESCRIPTION_Index_115", "Outputs nothing"); + addStringLocalization("Interaction_DESCRIPTION_Index_115", "Outputs nothing"); addStringLocalization("Interaction_DESCRIPTION_Index_116", "Emit Energy to Outputside"); addStringLocalization("Interaction_DESCRIPTION_Index_117", "Don't emit Energy"); addStringLocalization("Interaction_DESCRIPTION_Index_118", "Emit Redstone if no Slot is free"); addStringLocalization("Interaction_DESCRIPTION_Index_119", "Don't emit Redstone"); addStringLocalization("Interaction_DESCRIPTION_Index_120", "Invert Redstone"); - addStringLocalization("Interaction_DESCRIPTION_Index_121", "Don't invert Redstone"); + addStringLocalization("Interaction_DESCRIPTION_Index_121", "Don't invert Redstone"); addStringLocalization("Interaction_DESCRIPTION_Index_122", "Emit Redstone if slots contain something"); addStringLocalization("Interaction_DESCRIPTION_Index_123", "Don't emit Redstone"); addStringLocalization("Interaction_DESCRIPTION_Index_124", "Invert Filter"); addStringLocalization("Interaction_DESCRIPTION_Index_125", "Don't invert Filter"); addStringLocalization("Interaction_DESCRIPTION_Index_126", "Ignore NBT"); - addStringLocalization("Interaction_DESCRIPTION_Index_127", "NBT has to match"); + addStringLocalization("Interaction_DESCRIPTION_Index_127", "NBT has to match"); addStringLocalization("Interaction_DESCRIPTION_Index_128", "Redstone "); addStringLocalization("Interaction_DESCRIPTION_Index_129", "Energy "); addStringLocalization("Interaction_DESCRIPTION_Index_130", "Fluids "); - addStringLocalization("Interaction_DESCRIPTION_Index_131", "Items "); + addStringLocalization("Interaction_DESCRIPTION_Index_131", "Items "); addStringLocalization("Interaction_DESCRIPTION_Index_132", "Pipe is loose."); addStringLocalization("Interaction_DESCRIPTION_Index_133", "Screws are loose."); addStringLocalization("Interaction_DESCRIPTION_Index_134", "Something is stuck."); @@ -280,12 +284,12 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_141", "if it doesn't start."); addStringLocalization("Interaction_DESCRIPTION_Index_142", "Running perfectly."); addStringLocalization("Interaction_DESCRIPTION_Index_143", "Missing Mining Pipe"); - addStringLocalization("Interaction_DESCRIPTION_Index_144", "Missing Turbine Rotor"); + addStringLocalization("Interaction_DESCRIPTION_Index_144", "Missing Turbine Rotor"); addStringLocalization("Interaction_DESCRIPTION_Index_145", "Step Down, In: "); - addStringLocalization("Interaction_DESCRIPTION_Index_146", "Step Up, In: "); - addStringLocalization("Interaction_DESCRIPTION_Index_147", "Amp, Out: "); + addStringLocalization("Interaction_DESCRIPTION_Index_146", "Step Up, In: "); + addStringLocalization("Interaction_DESCRIPTION_Index_147", "Amp, Out: "); addStringLocalization("Interaction_DESCRIPTION_Index_148", " V at "); - addStringLocalization("Interaction_DESCRIPTION_Index_149", " Amp"); + addStringLocalization("Interaction_DESCRIPTION_Index_149", " Amp"); addStringLocalization("Interaction_DESCRIPTION_Index_150", "Chance: "); addStringLocalization("Interaction_DESCRIPTION_Index_151", "Does not get consumed in the process"); addStringLocalization("Interaction_DESCRIPTION_Index_152", "Total: "); @@ -296,8 +300,8 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_157", "Amperage: unspecified"); addStringLocalization("Interaction_DESCRIPTION_Index_158", "Time: "); addStringLocalization("Interaction_DESCRIPTION_Index_159", "Needs Low Gravity"); - addStringLocalization("Interaction_DESCRIPTION_Index_160", "Needs Cleanroom"); - addStringLocalization("Interaction_DESCRIPTION_Index_161", " secs"); + addStringLocalization("Interaction_DESCRIPTION_Index_160", "Needs Cleanroom"); + addStringLocalization("Interaction_DESCRIPTION_Index_161", " secs"); addStringLocalization("Interaction_DESCRIPTION_Index_162", "Name: "); addStringLocalization("Interaction_DESCRIPTION_Index_163", " MetaData: "); addStringLocalization("Interaction_DESCRIPTION_Index_164", "Hardness: "); @@ -306,7 +310,7 @@ public class GT_LanguageManager { addStringLocalization("Interaction_DESCRIPTION_Index_167", "Tank "); addStringLocalization("Interaction_DESCRIPTION_Index_168", "Heat: "); addStringLocalization("Interaction_DESCRIPTION_Index_169", " HEM: "); - addStringLocalization("Interaction_DESCRIPTION_Index_170", " Base EU Output: "); + addStringLocalization("Interaction_DESCRIPTION_Index_170", " Base EU Output: "); addStringLocalization("Interaction_DESCRIPTION_Index_171", "Facing: "); addStringLocalization("Interaction_DESCRIPTION_Index_172", " / Chance: "); addStringLocalization("Interaction_DESCRIPTION_Index_173", "You can remove this with a Wrench"); @@ -384,7 +388,7 @@ public class GT_LanguageManager { addStringLocalization("Item_DESCRIPTION_Index_018", "State: %s"); addStringLocalization("Item_DESCRIPTION_Index_500", "Turbine Efficiency (Loose): %s"); addStringLocalization("Item_DESCRIPTION_Index_501", "Optimal Steam flow (Loose): %s L/t"); - + addStringLocalization(FACE_ANY, "Any Side"); addStringLocalization(FACE_BOTTOM, "Bottom"); addStringLocalization(FACE_TOP, "Top"); |