package eiteam.esteemedinnovation.commons; import eiteam.esteemedinnovation.api.Constants; import eiteam.esteemedinnovation.api.book.*; import eiteam.esteemedinnovation.api.util.SPLog; import eiteam.esteemedinnovation.book.BookModule; import eiteam.esteemedinnovation.commons.capabilities.player.PlayerData; import eiteam.esteemedinnovation.commons.capabilities.player.PlayerDataStorage; import eiteam.esteemedinnovation.commons.handler.GenericEventHandler; import eiteam.esteemedinnovation.commons.handler.GenericTickHandler; import eiteam.esteemedinnovation.commons.handler.GuiHandler; import eiteam.esteemedinnovation.commons.init.ContentModuleHandler; import eiteam.esteemedinnovation.commons.network.CamoPacket; import eiteam.esteemedinnovation.commons.network.CamoPacketHandler; import eiteam.esteemedinnovation.commons.network.JumpValueChangePacket; import eiteam.esteemedinnovation.commons.network.JumpValueChangePacketHandler; import eiteam.esteemedinnovation.commons.util.OreDictHelper; import eiteam.esteemedinnovation.commons.util.ReflectionHelper; import eiteam.esteemedinnovation.metalcasting.MetalcastingBookSection; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; import java.util.List; import static eiteam.esteemedinnovation.book.BookModule.BOOK; import static eiteam.esteemedinnovation.tools.ToolsModule.BRASS_PICKAXE; @Mod( modid = EsteemedInnovation.MOD_ID, name = "Esteemed Innovation", version = Config.VERSION, dependencies = "required-after:CodeChickenLib@[2.4.2,);required-after:Baubles;required-after:" + Constants.API_MODID ) public class EsteemedInnovation { // TODO: Migrate uses of MOD_ID to EI_MODID public static final String MOD_ID = Constants.EI_MODID; @Mod.Instance(MOD_ID) public static EsteemedInnovation instance; @CapabilityInject(PlayerData.class) public static final Capability<PlayerData> PLAYER_DATA = null; public static SPLog log = SPLog.getInstance().setLogLevel(SPLog.NONE); public static SimpleNetworkWrapper channel; public static EnumRarity upgrade; public static CreativeTabs tab; public static CreativeTabs tabTools; public static SoundEvent SOUND_HISS; public static SoundEvent SOUND_ROCKET; public static SoundEvent SOUND_WRENCH; public static SoundEvent SOUND_CANNON; public static SoundEvent SOUND_LEAK; public static SoundEvent SOUND_WHISTLE; @SidedProxy(clientSide = "eiteam.esteemedinnovation.commons.ClientProxy", serverSide = "eiteam.esteemedinnovation.commons.CommonProxy") public static CommonProxy proxy; public static final String BASICS_SECTION = "section.Basics.name"; public static final String FLINTLOCK_SECTION = "section.Flintlock.name"; public static final String CASTING_SECTION = "section.MetalCasting.name"; public static final String GADGET_SECTION = "section.Gadgets.name"; public static final String STEAMPOWER_SECTION = "section.SteamPower.name"; public static final String EXOSUIT_SECTION = "section.SteamExosuit.name"; public static final String MISC_SECTION = "section.Misc.name"; public static final String STEAMTOOL_SECTION = "section.SteamTools.name"; private static SoundEvent registerSound(String soundName) { final ResourceLocation soundID = new ResourceLocation(MOD_ID, soundName); return GameRegistry.register(new SoundEvent(soundID).setRegistryName(soundID)); } @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { Config.load(); tab = new EsteemedInnovationTab(CreativeTabs.getNextID(), MOD_ID, false).setBackgroundImageName("item_search.png"); tabTools = new EsteemedInnovationTab(CreativeTabs.getNextID(), MOD_ID + "Tools", true); upgrade = EnumHelper.addRarity("UPGRADE", TextFormatting.RED, "Upgrade"); channel = NetworkRegistry.INSTANCE.newSimpleChannel("eiChannel"); channel.registerMessage(CamoPacketHandler.class, CamoPacket.class, 0, Side.SERVER); channel.registerMessage(JumpValueChangePacketHandler.class, JumpValueChangePacket.class, 3, Side.SERVER); SOUND_HISS = registerSound("hiss"); SOUND_CANNON = registerSound("cannon"); SOUND_LEAK = registerSound("leaking"); SOUND_ROCKET = registerSound("rocket"); SOUND_WRENCH = registerSound("wrench"); SOUND_WHISTLE = registerSound("horn"); ContentModuleHandler.preInit(); CapabilityManager.INSTANCE.register(PlayerData.class, new PlayerDataStorage(), PlayerData.DefaultImplementation.class); proxy.registerTexturesToStitch(); } @Mod.EventHandler public void load(FMLInitializationEvent event) { NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); ReflectionHelper.init(); MinecraftForge.EVENT_BUS.register(new GenericEventHandler()); MinecraftForge.EVENT_BUS.register(new GenericTickHandler()); ContentModuleHandler.init(); } @Mod.EventHandler public void postInit(FMLPostInitializationEvent event) { long start = System.currentTimeMillis(); String[] ores = OreDictionary.getOreNames(); for (String s : ores) { List<ItemStack> stacks = OreDictionary.getOres(s); for (ItemStack stack : stacks) { OreDictHelper.initializeOreDicts(s, stack); } } OreDictHelper.initializeGeneral(); long end = System.currentTimeMillis(); int time = (int) (end - start); FMLLog.info("Finished initializing Esteemed Innovation OreDictHelper in %s ms", time); // We set up all of the top categories before calling #finish, so that every module has access to every category. // Ideally we'd have a better way to deal with this. I can't really think of anything that is better though. BookPageRegistry.addSection(0, new BookSection(BASICS_SECTION)); // This is actually the Preface section that starts the book. It's barely about the journal, so that's why it's // not in the BookModule. If it is in the BookModule it might get pushed into a strange location in the Basics // category. BookPageRegistry.addCategoryToSection(BASICS_SECTION, 0, new BookCategory("category.Book.name", new BookEntry("research.Book.name", new BookPageItem("research.Book.name", "research.Book.0", new ItemStack(BOOK)), new BookPageCrafting("", "book")))); BookPageRegistry.addSection(1, new BookSection(FLINTLOCK_SECTION)); BookPageRegistry.addSection(2, new MetalcastingBookSection()); BookPageRegistry.addSection(3, new BookSection(GADGET_SECTION)); BookPageRegistry.addSection(4, new BookSection(STEAMPOWER_SECTION)); BookPageRegistry.addSection(5, new BookSection(EXOSUIT_SECTION)); BookPageRegistry.addSection(6, new BookSection(STEAMTOOL_SECTION)); BookPageRegistry.addSection(7, new BookSection(MISC_SECTION)); ContentModuleHandler.postInit(); // FIXME: This is terrible object oriented design. BookModule.generateAllHints(); } // FIXME: This is terrible OOD. private class EsteemedInnovationTab extends CreativeTabs { boolean isToolTab; public EsteemedInnovationTab(int index, String label, boolean toolTab) { super(index, label); isToolTab = toolTab; } @Override @SideOnly(Side.CLIENT) public Item getTabIconItem() { return isToolTab ? BRASS_PICKAXE : BOOK; } @Override public boolean hasSearchBar() { return !isToolTab; } } }