package cyano.electricadvantage; import cyano.electricadvantage.init.*; import cyano.electricadvantage.util.crafting.RecipeDeconstructor; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; 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.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @Mod(modid = ElectricAdvantage.MODID, version = ElectricAdvantage.VERSION, name=ElectricAdvantage.NAME, dependencies = "required-after:poweradvantage;required-after:basemetals", acceptedMinecraftVersions = "[1.10.2,)") public class ElectricAdvantage {/** The identifier for this mod */ public static final String MODID = "electricadvantage"; /** The display name for this mod */ public static final String NAME = "Electric Advantage"; /** The version of this mod, in the format major.minor.update */ public static final String VERSION = "2.2.0"; public static ElectricAdvantage INSTANCE = null; public final Set<String> PLASTIC_FLUID_MATERIALS = new HashSet<>(); // TODO: figure out why metal blocks are causing the Automated Assembler to hang and time-out players from a server public String LASER_SOUND = "block.note.bass"; /** * Pre-initialization step. Used for initializing objects and reading the * config file * @param event FML event object */ @EventHandler public void preInit(FMLPreInitializationEvent event) { INSTANCE = this; Configuration config = new Configuration(event.getSuggestedConfigurationFile()); config.load(); RecipeDeconstructor.RECURSION_LIMIT = config.getInt("recursion_limit", "fabricator", RecipeDeconstructor.RECURSION_LIMIT, 1, 255, "Prevents circular recipes from crashing the fabricator machine. You may need to increase this \n" + "number to fabricate especially complex recipes. If fabricators are causing too much server lag, " + "try reducing this number."); Path orespawnFolder = Paths.get(event.getSuggestedConfigurationFile().toPath().getParent().toString(),"orespawn"); Path orespawnFile = Paths.get(orespawnFolder.toString(),MODID+".json"); if(!Files.exists(orespawnFile)){ try{ Files.createDirectories(orespawnFile.getParent()); Files.write(orespawnFile, Arrays.asList(Data.ORESPAWN_FILE_CONTENTS.split("\n")), Charset.forName("UTF-8")); } catch (IOException e) { FMLLog.severe(MODID+": Error: Failed to write file "+orespawnFile); } } LASER_SOUND = config.getString("laser_sound", "options", LASER_SOUND, "Set the sound to use when the laser fires"); PLASTIC_FLUID_MATERIALS.addAll(Arrays.asList(config.getString("petrolplastic_fluids", "options", "refined_oil;oil", "Semicollon-delemited list of the names of fluids that can be used to make plastic") .split(";"))); config.save(); Blocks.init(); Items.init(); TreasureChests.init(config.getConfigFile().toPath().getParent()); if(event.getSide() == Side.CLIENT){ clientPreInit(event); } if(event.getSide() == Side.SERVER){ serverPreInit(event); } } @SideOnly(Side.CLIENT) private void clientPreInit(FMLPreInitializationEvent event){ // client-only code } @SideOnly(Side.SERVER) private void serverPreInit(FMLPreInitializationEvent event){ // client-only code } /** * Initialization step. Used for adding renderers and most content to the * game * @param event FML event object */ @EventHandler public void init(FMLInitializationEvent event) { Recipes.init(); Entities.init(); GUI.init(); Enchantments.init(); Villages.init(); if(event.getSide() == Side.CLIENT){ clientInit(event); } if(event.getSide() == Side.SERVER){ serverInit(event); } } @SideOnly(Side.CLIENT) private void clientInit(FMLInitializationEvent event){ // client-only code Items.registerItemRenders(event); Blocks.registerItemRenders(event); Entities.registerRenderers(); } @SideOnly(Side.SERVER) private void serverInit(FMLInitializationEvent event){ // client-only code } /** * Post-initialization step. Used for cross-mod options * @param event FML event object */ @EventHandler public void postInit(FMLPostInitializationEvent event) { if(event.getSide() == Side.CLIENT){ clientPostInit(event); } if(event.getSide() == Side.SERVER){ serverPostInit(event); } } @SideOnly(Side.CLIENT) private void clientPostInit(FMLPostInitializationEvent event){ // client-only code } @SideOnly(Side.SERVER) private void serverPostInit(FMLPostInitializationEvent event){ // server-only code } }