package tonius.neiintegration.mods.mcforge.dumpers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import net.minecraft.entity.EntityList;
import codechicken.nei.config.DataDumper;
import com.google.common.collect.ListMultimap;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.EntityRegistry.EntityRegistration;
import cpw.mods.fml.relauncher.ReflectionHelper;
public class EntityDumper extends DataDumper {
private static final String GLOBAL = "(global)";
public EntityDumper() {
super("tools.dump.neiintegration.entity");
}
@Override
public String[] header() {
return new String[] { "Mod", "ID", "Name", "Class Name" };
}
@Override
public Iterable<String[]> dump(int mode) {
List<String[]> list = new LinkedList<String[]>();
List<Integer> ids = new ArrayList<Integer>();
ids.addAll(EntityList.IDtoClassMapping.keySet());
Collections.sort(ids);
for (int id : ids) {
list.add(new String[] { GLOBAL, String.valueOf(id), EntityList.getStringFromID(id), EntityList.getClassFromID(id).getName() });
}
ListMultimap<ModContainer, EntityRegistration> modEntities = ReflectionHelper.getPrivateValue(EntityRegistry.class, EntityRegistry.instance(), "entityRegistrations");
for (Entry<ModContainer, EntityRegistration> e : modEntities.entries()) {
EntityRegistration er = e.getValue();
list.add(new String[] { e.getKey().getModId(), String.valueOf(er.getModEntityId()), e.getKey().getModId() + "." + er.getEntityName(), er.getEntityClass().getName() });
}
Collections.sort(list, new Comparator<String[]>() {
@Override
public int compare(String[] s1, String[] s2) {
if (s1[0].equals(GLOBAL) && !s1[0].equals(s2[0])) {
return -1;
}
int i = s1[0].compareTo(s2[0]);
if (i != 0) {
return i;
}
return Integer.compare(Integer.valueOf(s1[1]), Integer.valueOf(s2[1]));
}
});
return list;
}
@Override
public int modeCount() {
return 1;
}
}