// Copyright (c) 2015, Christopher "BlayTheNinth" Baker
package net.blay09.mods.eirairc;
import net.blay09.mods.eirairc.addon.Compatibility;
import net.blay09.mods.eirairc.api.EiraIRCAPI;
import net.blay09.mods.eirairc.api.IChatHandler;
import net.blay09.mods.eirairc.api.irc.IRCContext;
import net.blay09.mods.eirairc.command.base.CommandIRC;
import net.blay09.mods.eirairc.command.base.CommandServIRC;
import net.blay09.mods.eirairc.command.base.IRCCommandHandler;
import net.blay09.mods.eirairc.command.base.IgnoreCommand;
import net.blay09.mods.eirairc.config.ChannelConfig;
import net.blay09.mods.eirairc.config.ConfigurationHandler;
import net.blay09.mods.eirairc.config.ServerConfig;
import net.blay09.mods.eirairc.handler.ChatSessionHandler;
import net.blay09.mods.eirairc.handler.MCEventHandler;
import net.blay09.mods.eirairc.net.EiraNetHandler;
import net.blay09.mods.eirairc.net.NetworkHandler;
import net.blay09.mods.eirairc.util.ConfigHelper;
import net.blay09.mods.eirairc.util.Globals;
import net.blay09.mods.eirairc.util.Utils;
import net.minecraft.command.CommandHandler;
import net.minecraft.command.ICommandSender;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Mod(modid = EiraIRC.MOD_ID, acceptableRemoteVersions = "*", guiFactory = "net.blay09.mods.eirairc.client.gui.EiraIRCGuiFactory")
public class EiraIRC {
public static final String MOD_ID = "eirairc";
public static final Logger logger = LogManager.getLogger();
@Instance(MOD_ID)
public static EiraIRC instance;
@SidedProxy(serverSide = "net.blay09.mods.eirairc.CommonProxy", clientSide = "net.blay09.mods.eirairc.client.ClientProxy")
public static CommonProxy proxy;
private ChatSessionHandler chatSessionHandler;
private EiraNetHandler netHandler;
private MCEventHandler mcEventHandler;
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
ConfigurationHandler.load(event.getModConfigurationDirectory());
FMLInterModComms.sendRuntimeMessage(this, "VersionChecker", "addVersionCheck", Globals.UPDATE_URL);
}
@EventHandler
public void init(FMLInitializationEvent event) {
chatSessionHandler = new ChatSessionHandler();
netHandler = new EiraNetHandler();
mcEventHandler = new MCEventHandler();
proxy.init();
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(mcEventHandler);
MinecraftForge.EVENT_BUS.register(netHandler);
NetworkHandler.init();
EiraIRCAPI.internalSetupAPI(new InternalMethodsImpl());
EiraIRCAPI.setChatHandler(new IChatHandler() {
@Override
public void addChatMessage(IChatComponent component, IRCContext source) {
addChatMessage(null, component, source);
}
@Override
public void addChatMessage(ICommandSender receiver, IChatComponent component, IRCContext source) {
if (receiver != null) {
receiver.addChatMessage(component);
} else {
Utils.addMessageToChat(component);
}
}
});
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
Compatibility.postInit(event);
proxy.postInit();
}
@EventHandler
public void serverLoad(FMLServerStartingEvent event) {
registerCommands((CommandHandler) event.getServer().getCommandManager(), true);
if (!MinecraftServer.getServer().isSinglePlayer()) {
ConnectionManager.startIRC();
}
}
@EventHandler
public void serverStop(FMLServerStoppingEvent event) {
if (!MinecraftServer.getServer().isSinglePlayer()) {
ConnectionManager.stopIRC();
}
}
@SubscribeEvent
public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) {
if (event.modID.equals(Globals.MOD_ID)) {
if (event.configID.equals("global")) {
ConfigurationHandler.lightReload();
proxy.saveConfig();
} else if (event.configID.startsWith("server:")) {
ServerConfig serverConfig = ConfigurationHandler.getOrCreateServerConfig(event.configID.substring(7));
serverConfig.getTheme().pushDummyConfig();
serverConfig.getBotSettings().pushDummyConfig();
serverConfig.getGeneralSettings().pushDummyConfig();
ConfigurationHandler.saveServers();
} else if (event.configID.startsWith("channel:")) {
ChannelConfig channelConfig = ConfigHelper.resolveChannelConfig(event.configID.substring(8));
if (channelConfig != null) {
channelConfig.getTheme().pushDummyConfig();
channelConfig.getBotSettings().pushDummyConfig();
channelConfig.getGeneralSettings().pushDummyConfig();
ConfigurationHandler.saveServers();
}
}
}
}
public MCEventHandler getMCEventHandler() {
return mcEventHandler;
}
public ChatSessionHandler getChatSessionHandler() {
return chatSessionHandler;
}
public EiraNetHandler getNetHandler() {
return netHandler;
}
public void registerCommands(CommandHandler handler, boolean serverSide) {
if (serverSide) {
handler.registerCommand(new CommandServIRC());
handler.registerCommand(new IgnoreCommand("irc"));
} else {
handler.registerCommand(new CommandIRC());
}
IRCCommandHandler.registerCommands();
}
}