Created
September 24, 2012 10:11
-
-
Save SanAndreaP/3775312 to your computer and use it in GitHub Desktop.
A language file manager for mods using MC Forge.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package SanAndreasP.mods; | |
import java.io.BufferedReader; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.io.FileNotFoundException; | |
import java.io.FilenameFilter; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.ArrayList; | |
import java.util.HashMap; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.server.MinecraftServer; | |
import net.minecraft.src.Block; | |
import net.minecraft.src.Entity; | |
import net.minecraft.src.EntityList; | |
import net.minecraft.src.Item; | |
import net.minecraft.src.ItemStack; | |
import net.minecraft.src.StringTranslate; | |
import cpw.mods.fml.common.FMLCommonHandler; | |
import cpw.mods.fml.common.FMLLog; | |
import cpw.mods.fml.common.registry.LanguageRegistry; | |
public class SAP_LanguageManager { | |
private HashMap<String, File> langFiles = new HashMap<String, File>(); | |
private File path; | |
private String version, modname; | |
public SAP_LanguageManager(String par1Path, String par2LangVer, String par3Mod) { | |
try { | |
String cfgpath = "minecraft/config/langs"+par1Path; | |
path = getModDir(cfgpath); | |
if(!(path.exists())) | |
path.mkdirs(); | |
} catch(Throwable e) { | |
e.printStackTrace(); | |
} | |
File[] files = path.listFiles(new LangFileFilter()); | |
for(File langFile : files) { | |
String lang = langFile.getName().replaceAll(".(txt|lang|SAPlang)", ""); | |
if(StringTranslate.getInstance().getLanguageList().containsKey(lang)) | |
langFiles.put(lang, langFile); | |
} | |
version = par2LangVer; | |
modname = par3Mod; | |
} | |
private File getModDir(String par1Path) { | |
if(FMLCommonHandler.instance().getSide().isClient()) | |
return Minecraft.getAppDir(par1Path); | |
else | |
return MinecraftServer.getServer().getFile(par1Path); | |
} | |
public void loadLangPropertyStr(String property, String defName) { | |
LanguageRegistry.instance().addStringLocalization(property, "en_US", defName); | |
boolean langRead = false; | |
String[] langs = langFiles.keySet().toArray(new String[langFiles.size()]); | |
for(String cLang : langs) { | |
File cFile = langFiles.get(cLang); | |
if(!cFile.canRead()) | |
continue; | |
try { | |
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(cFile), "UTF-8")); | |
do { | |
String s = in.readLine(); | |
if(s == null || s.isEmpty()) | |
continue; | |
s = s.replaceAll("\uFEFF", ""); | |
if(s.matches("[ ]{0,}"+property+".*?=.*") ) { | |
LanguageRegistry.instance().addStringLocalization(property, cLang, s.replaceAll(".*?=[ ]{0,}", "")); | |
langRead = true; | |
break; | |
} | |
} while(in.ready()); | |
in.close(); | |
} catch (FileNotFoundException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
if(!langRead) { | |
FMLLog.warning("Cannot find translated name for [%s] in %s lang file %s. pre-defined name is used.", property.replaceAll(".name", ""), modname, cLang); | |
} | |
} | |
} | |
public void loadLangProperty(Object obj, String defName) { | |
String objectName; | |
if(obj == null) | |
throw new IllegalArgumentException(String.format("Illegal object for naming %s",obj)); | |
if (obj instanceof String) { | |
objectName=(String)obj; | |
this.loadLangPropertyStr(objectName, defName); | |
return; | |
} else if (obj instanceof Item) { | |
objectName=((Item)obj).getItemName(); | |
} else if (obj instanceof Block) { | |
objectName=((Block)obj).getBlockName(); | |
} else if (obj instanceof ItemStack) { | |
objectName=((ItemStack)obj).getItem().getItemNameIS((ItemStack)obj); | |
} else if (obj instanceof Class && (Entity.class.isAssignableFrom((Class)obj))){ | |
objectName="entity."+((String)EntityList.classToStringMapping.get((Class)obj)); | |
} else { | |
throw new IllegalArgumentException(String.format("Illegal object for naming %s",obj)); | |
} | |
objectName+=".name"; | |
this.loadLangPropertyStr(objectName, defName); | |
} | |
} | |
class LangFileFilter implements FilenameFilter { | |
@Override | |
public boolean accept(File dir, String name) { | |
if(name.endsWith(".txt") || name.endsWith(".SAPlang") || name.endsWith(".lang")) | |
return true; | |
else return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment