package com.xcompwiz.lookingglass; import java.io.File; import net.minecraft.command.ServerCommandManager; import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import com.google.common.collect.ImmutableList; import com.xcompwiz.lookingglass.apiimpl.APIProviderImpl; import com.xcompwiz.lookingglass.command.CommandCreateView; import com.xcompwiz.lookingglass.core.CommonProxy; import com.xcompwiz.lookingglass.core.LookingGlassForgeEventHandler; import com.xcompwiz.lookingglass.imc.IMCHandler; import com.xcompwiz.lookingglass.network.LookingGlassPacketManager; import com.xcompwiz.lookingglass.network.ServerPacketDispatcher; import com.xcompwiz.lookingglass.network.packet.PacketChunkInfo; import com.xcompwiz.lookingglass.network.packet.PacketCloseView; import com.xcompwiz.lookingglass.network.packet.PacketCreateView; import com.xcompwiz.lookingglass.network.packet.PacketRequestChunk; import com.xcompwiz.lookingglass.network.packet.PacketRequestTE; import com.xcompwiz.lookingglass.network.packet.PacketRequestWorldInfo; import com.xcompwiz.lookingglass.network.packet.PacketTileEntityNBT; import com.xcompwiz.lookingglass.network.packet.PacketWorldInfo; import com.xcompwiz.lookingglass.proxyworld.LookingGlassEventHandler; import com.xcompwiz.lookingglass.proxyworld.ModConfigs; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent; import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.event.FMLServerStoppedEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; @Mod(modid = LookingGlass.MODID, name = "LookingGlass", version = LookingGlass.VERSION) public class LookingGlass { public static final String MODID = "LookingGlass"; public static final String VERSION = "@VERSION@"; @Instance(LookingGlass.MODID) public static LookingGlass instance; @SidedProxy(clientSide = "com.xcompwiz.lookingglass.client.ClientProxy", serverSide = "com.xcompwiz.lookingglass.core.CommonProxy") public static CommonProxy sidedProxy; @EventHandler public void preinit(FMLPreInitializationEvent event) { //Initialize the packet handling LookingGlassPacketManager.registerPacketHandler(new PacketCreateView(), (byte) 10); LookingGlassPacketManager.registerPacketHandler(new PacketCloseView(), (byte) 11); LookingGlassPacketManager.registerPacketHandler(new PacketWorldInfo(), (byte) 100); LookingGlassPacketManager.registerPacketHandler(new PacketChunkInfo(), (byte) 101); LookingGlassPacketManager.registerPacketHandler(new PacketTileEntityNBT(), (byte) 102); LookingGlassPacketManager.registerPacketHandler(new PacketRequestWorldInfo(), (byte) 200); LookingGlassPacketManager.registerPacketHandler(new PacketRequestChunk(), (byte) 201); LookingGlassPacketManager.registerPacketHandler(new PacketRequestTE(), (byte) 202); LookingGlassPacketManager.bus = NetworkRegistry.INSTANCE.newEventDrivenChannel(LookingGlassPacketManager.CHANNEL); LookingGlassPacketManager.bus.register(new LookingGlassPacketManager()); // Load our basic configs ModConfigs.loadConfigs(new Configuration(event.getSuggestedConfigurationFile())); // Here we use the recommended config file to establish a good place to put a log file for any proxy world error logs. Used primarily to log the full errors when ticking or rendering proxy worlds. File configroot = event.getSuggestedConfigurationFile().getParentFile(); // Main tick handler. Handles FML events. FMLCommonHandler.instance().bus().register(new LookingGlassEventHandler(new File(configroot.getParentFile(), "logs/proxyworlds.log"))); // Forge event handler MinecraftForge.EVENT_BUS.register(new LookingGlassForgeEventHandler()); // Initialize the API provider system. Beware, this way be dragons. APIProviderImpl.init(); } @EventHandler public void init(FMLInitializationEvent event) { // Our one and only entity. EntityRegistry.registerModEntity(com.xcompwiz.lookingglass.entity.EntityPortal.class, "lookingglass.portal", 216, this, 64, 10, false); sidedProxy.init(); } @EventHandler public void handleIMC(IMCEvent event) { // Catch IMC messages and send them off to our IMC handler ImmutableList<IMCMessage> messages = event.getMessages(); IMCHandler.process(messages); } @EventHandler public void postinit(FMLPostInitializationEvent event) {} @EventHandler public void serverStart(FMLServerStartingEvent event) { MinecraftServer mcserver = event.getServer(); // Register commands ((ServerCommandManager) mcserver.getCommandManager()).registerCommand(new CommandCreateView()); // Start up the packet dispatcher we use for throttled data to client. ServerPacketDispatcher.getInstance().start(); //Note: This might need to be preceded by a force init of the ServerPacketDispatcher. Doesn't seem to currently have any issues, though. } @EventHandler public void serverStop(FMLServerStoppedEvent event) { // Shutdown our throttled packet dispatcher ServerPacketDispatcher.getInstance().halt(); ServerPacketDispatcher.shutdown(); } }