package forgeperms;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
import cpw.mods.fml.common.event.FMLServerStartedEvent;
import cpw.mods.fml.common.network.NetworkMod;
import forgeperms.api.ForgePermsAPI;
import forgeperms.api.IChatManager;
import forgeperms.api.IEconomyManager;
import forgeperms.api.IPermissionManager;
import forgeperms.impl.ItemEconomy;
import forgeperms.impl.LastResortChat;
import forgeperms.impl.LastResortPerms;
import forgeperms.impl.PEXPermissions;
import forgeperms.impl.StandardChat;
@Mod(modid = "ForgePerms", name = "ForgePerms", version = "@VERSION@.@BUILD_NUMBER@")
@NetworkMod(clientSideRequired = false, serverSideRequired = true)
public class ForgePerms {
public static String MOD_NAME = "ForgePerms";
public static File sourceFile;
public static void registerPermissionManager(IPermissionManager permManager) {
Log.info("Permission manager %s being registered", permManager.getName());
if (ForgePermsAPI.permManager == null) {
if (permManager.load()) {
ForgePermsAPI.permManager = permManager;
} else {
Log.info("%s failed to load because %s", permManager.getName(), permManager.getLoadError());
}
} else {
Log.info("Permission Manager(%s) already loaded. Did not load %s", ForgePermsAPI.permManager.getName(), permManager.getName());
}
}
public static void registerChatManager(IChatManager chatManager) {
Log.info("Chat manager %s being registered", chatManager.getName());
if (ForgePermsAPI.chatManager == null) {
if (chatManager.load()) {
ForgePermsAPI.chatManager = chatManager;
} else {
Log.info("%s failed to load because %s", chatManager.getName(), chatManager.getLoadError());
}
} else {
Log.info("Chat Manager(%s) already loaded. Did not load %s", ForgePermsAPI.chatManager.getName(), chatManager.getName());
}
}
public static void registerEconomyManager(IEconomyManager economyManager) {
Log.info("Economy manager %s being registered", economyManager.getName());
if (ForgePermsAPI.econManager == null) {
if (economyManager.load()) {
ForgePermsAPI.econManager = economyManager;
} else {
Log.info("%s failed to load because %s", economyManager.getName(), economyManager.getLoadError());
}
} else {
Log.info("Economy Manager(%s) already loaded. Did not load %s", ForgePermsAPI.econManager.getName(), economyManager.getName());
}
}
public static IPermissionManager getPermissionManager() {
return ForgePermsAPI.permManager;
}
public static IChatManager getChatManager() {
return ForgePermsAPI.chatManager;
}
public static IEconomyManager getEconomyManager() {
return ForgePermsAPI.econManager;
}
@EventHandler
public void preInit(FMLPreInitializationEvent ev) {
sourceFile = ev.getSourceFile();
}
@Mod.EventHandler
public void serverAboutToStart(FMLServerAboutToStartEvent ev) {
File pluginsFolder = new File("./plugins");
if (ev.getServer().getServerModName().contains("mcpc") && pluginsFolder.exists()) {
injectBukkitBridge(sourceFile, pluginsFolder);
}
}
@EventHandler
public void serverStarted(FMLServerStartedEvent event) {
ForgePerms.registerPermissionManager(new PEXPermissions());
ForgePerms.registerChatManager(new StandardChat());
ForgePerms.registerEconomyManager(new ItemEconomy());
ForgePerms.registerPermissionManager(new LastResortPerms());
ForgePerms.registerChatManager(new LastResortChat());
}
private void injectBukkitBridge(File self, File pluginFolder) {
Log.info("Injecting ForgePermsCBBridge!");
try {
ZipFile zip = new ZipFile(self);
ZipEntry entry = zip.getEntry("ForgePermsCBBridge.jar");
if (entry == null) {
Log.severe("Mod doesn't contain ForgePermsCBBridge! If using MCPC, you need this!");
zip.close();
return;
}
InputStream stream = zip.getInputStream(entry);
FileOutputStream outStream = new FileOutputStream(new File(pluginFolder, entry.getName()));
byte[] tmp = new byte[4*1024];
int size = 0;
while ((size = stream.read(tmp)) != -1) {
outStream.write(tmp, 0, size);
}
outStream.close();
zip.close();
} catch (Exception e) {
Log.severe("Failed to inject ForgePermsCBBridge! ", e);
}
Log.info("Injected ForgePermsCBBridge successfully!");
}
}