package lumien.extendedpotions.asm;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import com.google.common.base.Charsets;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.common.io.Files;
import com.google.common.io.LineProcessor;
public class MCPNames
{
private static Map<String, String> fields;
private static Map<String, String> methods;
static
{
if (mcp())
{
String mappingDir;
mappingDir = "./../mcp/";
fields = readMappings(new File(mappingDir + "fields.csv"));
methods = readMappings(new File(mappingDir + "methods.csv"));
}
else
{
fields = methods = null;
}
}
public static boolean mcp()
{
return LoadingPlugin.IN_MCP;
}
public static String field(String srgName)
{
if (mcp())
{
return fields.get(srgName);
}
else
{
return srgName;
}
}
public static String method(String srgName)
{
if (mcp())
{
return methods.get(srgName);
}
else
{
return srgName;
}
}
private static Map<String, String> readMappings(File file)
{
if (!file.isFile())
{
throw new RuntimeException("Couldn't find MCP mappings.");
}
try
{
return Files.readLines(file, Charsets.UTF_8, new MCPFileParser());
}
catch (IOException e)
{
throw new RuntimeException("Couldn't read SRG->MCP mappings", e);
}
}
private static class MCPFileParser implements LineProcessor<Map<String, String>>
{
private static final Splitter splitter = Splitter.on(',').trimResults();
private final Map<String, String> map = Maps.newHashMap();
private boolean foundFirst;
@Override
public boolean processLine(String line) throws IOException
{
if (!foundFirst)
{
foundFirst = true;
return true;
}
Iterator<String> splitted = splitter.split(line).iterator();
try
{
String srg = splitted.next();
String mcp = splitted.next();
if (!map.containsKey(srg))
{
map.put(srg, mcp);
}
}
catch (NoSuchElementException e)
{
throw new IOException("Invalid Mappings file!", e);
}
return true;
}
@Override
public Map<String, String> getResult()
{
return ImmutableMap.copyOf(map);
}
}
}