package net.sourceforge.pain.plugin.social;
import net.sourceforge.pain.*;
import net.sourceforge.pain.plugin.*;
import net.sourceforge.pain.plugin.command.*;
import net.sourceforge.pain.util.*;
import java.io.*;
import java.util.*;
/**
* this plugin adds socials to game. Socials area registered after commands so have a lower priority
* net.sourceforge.pain.logic.event.Social is used with this plugin
*/
public final class SocialPlugin extends Plugin {
Map socials = new HashMap();
CommandMapper commandMapper;
protected void init() throws Exception {
Log.debug("Socials Plug INIT");
commandMapper = (CommandMapper) loader.plm.getPlugin("command.CommandMapper"); //dependency will be added automatically
if (commandMapper == null) {
throw new RuntimeException("CommandMapper plugin is not loaded!");
}
loadSocials();
Log.debug("Socials Plug INIT OK");
}
protected void deinit() {
Log.debug("Socials Plug DEINIT");
removeCommandMapping();
Log.debug("Socials Plug DEINIT OK");
}
public SocialEntry getSocial(String name) {
return (SocialEntry) socials.get(name);
}
private void loadSocials() throws Exception {
socials = new HashMap();
String fileName = Core.getApplicationPath() + "/etc/socials.cfg";
BufferedReader reader = new BufferedReader(new FileReader(fileName));
SocialParser parser = new SocialParser();
try {
Collection c = parser.parseSocials(reader);
Log.debug("Socials parsed OK");
for (Iterator it = c.iterator(); it.hasNext();) {
SocialEntry entry = (SocialEntry) it.next();
commandMapper.registerCommand(entry.tag, "SocialHandler", entry.tag);
socials.put(entry.tag, entry);
}
} finally {
reader.close();
}
}
private void removeCommandMapping() {
for (Iterator it = socials.values().iterator(); it.hasNext();) {
commandMapper.unregisterCommand(((SocialEntry) it.next()).tag);
}
socials.clear();
}
}