diff --git a/src/main/java/forestry/Forestry.java b/src/main/java/forestry/Forestry.java index daeb987b1..aa0c10996 100755 --- a/src/main/java/forestry/Forestry.java +++ b/src/main/java/forestry/Forestry.java @@ -53,12 +53,9 @@ import net.minecraft.item.Item; version = Version.VERSION, dependencies = "required-after:Forge@[10.13.0.1207,);" + "after:Buildcraft|Core;" - + "after:Buildcraft|Transport;" + "after:ExtrabiomesXL;" + "after:BiomesOPlenty;" - + "after:IC2;" - + "after:Natura;" - + "after:mod_EE") + + "after:IC2") //, certificateFingerprint = Version.FINGERPRINT) public class Forestry { diff --git a/src/main/java/forestry/core/CommandForestry.java b/src/main/java/forestry/core/CommandForestry.java index e220ffdfd..d06923d10 100755 --- a/src/main/java/forestry/core/CommandForestry.java +++ b/src/main/java/forestry/core/CommandForestry.java @@ -13,7 +13,6 @@ package forestry.core; import java.util.List; import forestry.core.utils.StringUtil; -import forestry.plugins.PluginModule; import net.minecraft.command.CommandException; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; @@ -97,7 +96,7 @@ public class CommandForestry extends CommandMC { String pluginList = ""; - for (PluginModule pluginModule : PluginManager.getLoadedModules()) { + for (PluginManager.Module pluginModule : PluginManager.getLoadedModules()) { if (!pluginList.isEmpty()) pluginList += ", "; pluginList += makeListEntry(pluginModule.instance()); @@ -112,7 +111,7 @@ public class CommandForestry extends CommandMC { throw new WrongUsageException("/" + getCommandName() + " plugins info "); ForestryPlugin found = null; - for (PluginModule pluginModule : PluginManager.getLoadedModules()) { + for (PluginManager.Module pluginModule : PluginManager.getLoadedModules()) { Plugin info = pluginModule.instance().getClass().getAnnotation(Plugin.class); if (info == null) continue; diff --git a/src/main/java/forestry/core/config/Defaults.java b/src/main/java/forestry/core/config/Defaults.java index bdca13f1f..d4c77cf3e 100755 --- a/src/main/java/forestry/core/config/Defaults.java +++ b/src/main/java/forestry/core/config/Defaults.java @@ -125,7 +125,6 @@ public class Defaults { public static final int ID_PACKAGE_MACHINE_STILL = 1; public static final int ID_PACKAGE_MACHINE_BOTTLER = 2; public static final int ID_PACKAGE_MACHINE_RAINTANK = 3; - public static final int ID_PACKAGE_MACHINE_GENERATOR = 4; public static final int ID_PACKAGE_MACHINE_CARPENTER = 5; public static final int ID_PACKAGE_MACHINE_MOISTENER = 6; public static final int ID_PACKAGE_MACHINE_APIARY = 7; diff --git a/src/main/java/forestry/core/gadgets/BlockBase.java b/src/main/java/forestry/core/gadgets/BlockBase.java index db8f63bd1..dfc1dcd99 100755 --- a/src/main/java/forestry/core/gadgets/BlockBase.java +++ b/src/main/java/forestry/core/gadgets/BlockBase.java @@ -110,11 +110,7 @@ public class BlockBase extends BlockForestry { if (metadata >= definitions.size() || definitions.get(metadata) == null) metadata = 0; - MachineDefinition definition = definitions.get(metadata); - if (definition == null) - return null; - - return definition.createMachine(); + return definitions.get(metadata).createMachine(); } @Override @@ -211,9 +207,6 @@ public class BlockBase extends BlockForestry { public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { IOwnable tile = (IOwnable) world.getTileEntity(x, y, z); - if (tile == null) - return world.setBlockToAir(x, y, z); - if (tile.isOwnable() && !tile.allowsRemoval(player)) return false; @@ -241,8 +234,6 @@ public class BlockBase extends BlockForestry { @Override public void registerBlockIcons(IIconRegister register) { for (MachineDefinition def : definitions) { - if (def == null) - continue; def.registerIcons(register); } } diff --git a/src/main/java/forestry/core/gadgets/TileMachine.java b/src/main/java/forestry/core/gadgets/TileMachine.java index 2c7871773..2cb47a929 100755 --- a/src/main/java/forestry/core/gadgets/TileMachine.java +++ b/src/main/java/forestry/core/gadgets/TileMachine.java @@ -10,7 +10,20 @@ ******************************************************************************/ package forestry.core.gadgets; +import java.util.HashMap; +import java.util.LinkedList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.common.util.ForgeDirection; + import buildcraft.api.gates.ITrigger; + import forestry.api.core.EnumHumidity; import forestry.api.core.EnumTemperature; import forestry.api.core.ISpecialInventory; @@ -27,19 +40,7 @@ import forestry.plugins.PluginApiculture; import forestry.plugins.PluginCore; import forestry.plugins.PluginEnergy; import forestry.plugins.PluginFactory; -import forestry.plugins.PluginIC2; import forestry.plugins.PluginMail; -import forestry.plugins.PluginManager; -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import java.util.HashMap; -import java.util.LinkedList; public abstract class TileMachine extends TileForestry implements ISpecialInventory, IClimatised, IHintSource { @@ -152,8 +153,7 @@ public abstract class TileMachine extends TileForestry implements ISpecialInvent machineMap.put(Defaults.ID_PACKAGE_MACHINE_SQUEEZER, PluginFactory.definitionSqueezer); machineMap.put(Defaults.ID_PACKAGE_MACHINE_STILL, PluginFactory.definitionStill); machineMap.put(Defaults.ID_PACKAGE_MACHINE_APIARY, PluginApiculture.definitionApiary); - if (PluginManager.isModuleLoaded(PluginIC2.class)) - machineMap.put(Defaults.ID_PACKAGE_MACHINE_GENERATOR, PluginIC2.definitionGenerator); + machineMap.put(4, PluginEnergy.definitionGenerator); definitionMap.put(ForestryBlock.factoryTESR.block(), machineMap); HashMap millMap = new HashMap(); @@ -168,8 +168,7 @@ public abstract class TileMachine extends TileForestry implements ISpecialInvent HashMap engineMap = new HashMap(); engineMap.put(0, PluginEnergy.definitionEngineBronze); engineMap.put(1, PluginEnergy.definitionEngineCopper); - if (PluginManager.isModuleLoaded(PluginIC2.class)) - engineMap.put(2, PluginIC2.definitionEngineTin); + engineMap.put(2, PluginEnergy.definitionEngineTin); definitionMap.put(ForestryBlock.engine.block(), engineMap); } diff --git a/src/main/java/forestry/energy/gadgets/EngineTin.java b/src/main/java/forestry/energy/gadgets/EngineTin.java index 107f4ec13..b138b889f 100755 --- a/src/main/java/forestry/energy/gadgets/EngineTin.java +++ b/src/main/java/forestry/energy/gadgets/EngineTin.java @@ -10,7 +10,6 @@ ******************************************************************************/ package forestry.energy.gadgets; -import forestry.plugins.PluginManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; @@ -64,8 +63,7 @@ public class EngineTin extends Engine implements ISocketable, IInventory { super(Defaults.ENGINE_TIN_HEAT_MAX, 10000, 400); setHints(Config.hints.get("engine.tin")); - if (PluginManager.isModuleLoaded(PluginIC2.class)) - ic2EnergySink = new BasicSink(this, euConfig.euStorage, 3); + if (PluginIC2.instance.isAvailable()) ic2EnergySink = new BasicSink(this, euConfig.euStorage, 3); } @Override diff --git a/src/main/java/forestry/energy/gadgets/MachineGenerator.java b/src/main/java/forestry/energy/gadgets/MachineGenerator.java index f3e43a26d..8527de339 100755 --- a/src/main/java/forestry/energy/gadgets/MachineGenerator.java +++ b/src/main/java/forestry/energy/gadgets/MachineGenerator.java @@ -10,6 +10,19 @@ ******************************************************************************/ package forestry.energy.gadgets; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; +import net.minecraftforge.fluids.FluidStack; + +import ic2.api.energy.prefab.BasicSource; + import forestry.api.core.ForestryAPI; import forestry.api.core.ISpecialInventory; import forestry.api.fuels.FuelManager; @@ -17,8 +30,9 @@ import forestry.api.fuels.GeneratorFuel; import forestry.core.EnumErrorCode; import forestry.core.config.Config; import forestry.core.config.Defaults; -import forestry.core.fluids.TankManager; +import forestry.core.fluids.tanks.StandardTank; import forestry.core.fluids.tanks.FilteredTank; +import forestry.core.fluids.TankManager; import forestry.core.gadgets.TileBase; import forestry.core.interfaces.ILiquidTankContainer; import forestry.core.interfaces.IRenderableMachine; @@ -30,18 +44,8 @@ import forestry.core.utils.LiquidHelper; import forestry.core.utils.StackUtils; import forestry.core.utils.Utils; import forestry.plugins.PluginIC2; -import forestry.plugins.PluginManager; -import ic2.api.energy.prefab.BasicSource; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; public class MachineGenerator extends TileBase implements ISpecialInventory, ILiquidTankContainer, IRenderableMachine { @@ -63,7 +67,7 @@ public class MachineGenerator extends TileBase implements ISpecialInventory, ILi resourceTank = new FilteredTank(Defaults.PROCESSOR_TANK_CAPACITY, FuelManager.generatorFuel.keySet()); tankManager = new TankManager(resourceTank); - if (PluginManager.isModuleLoaded(PluginIC2.class)) { + if (PluginIC2.instance.isAvailable()) { ic2EnergySource = new BasicSource(this, maxEnergy, 1); } } diff --git a/src/main/java/forestry/plugins/ForestryPlugin.java b/src/main/java/forestry/plugins/ForestryPlugin.java index c967e011f..c1027b777 100755 --- a/src/main/java/forestry/plugins/ForestryPlugin.java +++ b/src/main/java/forestry/plugins/ForestryPlugin.java @@ -11,18 +11,20 @@ package forestry.plugins; import cpw.mods.fml.common.IFuelHandler; +import java.util.Random; + +import net.minecraft.command.ICommand; +import net.minecraft.world.World; + import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import cpw.mods.fml.common.network.IGuiHandler; + import forestry.core.interfaces.IOreDictionaryHandler; import forestry.core.interfaces.IPacketHandler; import forestry.core.interfaces.IPickupHandler; import forestry.core.interfaces.IResupplyHandler; import forestry.core.interfaces.ISaveEventHandler; -import net.minecraft.command.ICommand; -import net.minecraft.world.World; - -import java.util.HashSet; -import java.util.Random; +import java.util.EnumSet; public abstract class ForestryPlugin { @@ -34,11 +36,8 @@ public abstract class ForestryPlugin { return ""; } - public HashSet> getDependencies() { - HashSet> dependencies = new HashSet>(); - dependencies.add(PluginCore.class); - - return dependencies; + public EnumSet getDependancies() { + return EnumSet.of(PluginManager.Module.CORE); } protected void preInit() { diff --git a/src/main/java/forestry/plugins/PluginEnergy.java b/src/main/java/forestry/plugins/PluginEnergy.java index aed55c9b3..95f98caf4 100755 --- a/src/main/java/forestry/plugins/PluginEnergy.java +++ b/src/main/java/forestry/plugins/PluginEnergy.java @@ -10,8 +10,15 @@ ******************************************************************************/ package forestry.plugins; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; + +import net.minecraftforge.fluids.FluidStack; + import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.network.IGuiHandler; + import forestry.api.circuits.ChipsetManager; import forestry.api.circuits.ICircuitLayout; import forestry.api.fuels.FuelManager; @@ -19,6 +26,7 @@ import forestry.api.fuels.GeneratorFuel; import forestry.core.GameMode; import forestry.core.circuits.Circuit; import forestry.core.circuits.CircuitId; +import forestry.core.config.Config; import forestry.core.config.Defaults; import forestry.core.config.ForestryBlock; import forestry.core.config.ForestryItem; @@ -42,19 +50,17 @@ import forestry.energy.gadgets.EngineDefinition; import forestry.energy.gadgets.EngineTin; import forestry.energy.gadgets.MachineGenerator; import forestry.energy.proxy.ProxyEnergy; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraftforge.fluids.FluidStack; @Plugin(pluginID = "Energy", name = "Energy", author = "SirSengir", url = Defaults.URL, description = "Adds several engines compatible with BuildCraft 3 as well as a generator for IC2.") public class PluginEnergy extends ForestryPlugin { @SidedProxy(clientSide = "forestry.energy.proxy.ClientProxyEnergy", serverSide = "forestry.energy.proxy.ProxyEnergy") public static ProxyEnergy proxy; + public static MachineDefinition definitionEngineTin; public static MachineDefinition definitionEngineCopper; public static MachineDefinition definitionEngineBronze; public static MachineDefinition definitionEngineClockwork; + public static MachineDefinition definitionGenerator; @Override public void preInit() { @@ -62,6 +68,16 @@ public class PluginEnergy extends ForestryPlugin { ForestryBlock.engine.registerBlock(new BlockBase(Material.iron, true), ItemForestryBlock.class, "engine"); + definitionEngineTin = ((BlockBase) ForestryBlock.engine.block()).addDefinition(new EngineDefinition(Defaults.DEFINITION_ENGINETIN_META, "forestry.EngineTin", EngineTin.class, + PluginEnergy.proxy.getRenderDefaultEngine(Defaults.TEXTURE_PATH_BLOCKS + "/engine_tin_"), ShapedRecipeCustom.createShapedRecipe( + ForestryBlock.engine.getItemStack(1, Defaults.DEFINITION_ENGINETIN_META), + "###", + " X ", + "YVY", + '#', "ingotTin", + 'X', Blocks.glass, + 'Y', "gearTin", + 'V', Blocks.piston))); definitionEngineCopper = ((BlockBase) ForestryBlock.engine.block()).addDefinition(new EngineDefinition(Defaults.DEFINITION_ENGINECOPPER_META, "forestry.EngineCopper", EngineCopper.class, PluginEnergy.proxy.getRenderDefaultEngine(Defaults.TEXTURE_PATH_BLOCKS + "/engine_copper_"), ShapedRecipeCustom.createShapedRecipe( ForestryBlock.engine.getItemStack(1, Defaults.DEFINITION_ENGINECOPPER_META), @@ -83,6 +99,16 @@ public class PluginEnergy extends ForestryPlugin { 'Y', "gearBronze", 'V', Blocks.piston))); + definitionGenerator = ((BlockBase) ForestryBlock.engine.block()).addDefinition(new MachineDefinition(Defaults.DEFINITION_GENERATOR_META, "forestry.Generator", MachineGenerator.class, + Proxies.render.getRenderDefaultMachine(Defaults.TEXTURE_PATH_BLOCKS + "/generator_"), ShapedRecipeCustom.createShapedRecipe( + ForestryBlock.engine.getItemStack(1, Defaults.DEFINITION_GENERATOR_META), + "X#X", + "XYX", + "X#X", + '#', Blocks.glass, + 'X', Items.gold_ingot, + 'Y', ForestryItem.sturdyCasing))); + ShapedRecipeCustom clockworkRecipe = null; if (GameMode.getGameMode().getBooleanSetting("energy.engine.clockwork")) clockworkRecipe = ShapedRecipeCustom.createShapedRecipe( @@ -110,8 +136,10 @@ public class PluginEnergy extends ForestryPlugin { public void doInit() { super.doInit(); + definitionEngineTin.register(); definitionEngineCopper.register(); definitionEngineBronze.register(); + definitionGenerator.register(); definitionEngineClockwork.register(); FluidStack ethanol = LiquidHelper.getLiquid(Defaults.LIQUID_ETHANOL, 1); diff --git a/src/main/java/forestry/plugins/PluginFactory.java b/src/main/java/forestry/plugins/PluginFactory.java index a93eb3b69..099f50696 100755 --- a/src/main/java/forestry/plugins/PluginFactory.java +++ b/src/main/java/forestry/plugins/PluginFactory.java @@ -22,6 +22,7 @@ import cpw.mods.fml.common.network.IGuiHandler; import forestry.api.recipes.ICraftingProvider; import forestry.api.recipes.RecipeManagers; import forestry.core.GameMode; +import forestry.core.config.Config; import forestry.core.config.Defaults; import forestry.core.config.ForestryBlock; import forestry.core.config.ForestryItem; @@ -263,6 +264,9 @@ public class PluginFactory extends ForestryPlugin { " X ", "#X#", "XXX", '#', Items.redstone, 'X', Blocks.obsidian}); RecipeManagers.fabricatorManager.addRecipe(null, LiquidHelper.getLiquid(Defaults.LIQUID_GLASS, 500), ForestryItem.tubes.getItemStack(4, 7), new Object[]{ " X ", "#X#", "XXX", '#', Items.redstone, 'X', Items.blaze_powder}); + if (PluginIC2.rubber != null) + RecipeManagers.fabricatorManager.addRecipe(null, LiquidHelper.getLiquid(Defaults.LIQUID_GLASS, 500), ForestryItem.tubes.getItemStack(4, 8), + new Object[]{" X ", "#X#", "XXX", '#', Items.redstone, 'X', PluginIC2.rubber}); RecipeManagers.fabricatorManager.addRecipe(null, LiquidHelper.getLiquid(Defaults.LIQUID_GLASS, 500), ForestryItem.tubes.getItemStack(4, 9), new Object[]{ " X ", "#X#", "XXX", '#', Items.redstone, 'X', Items.emerald}); RecipeManagers.fabricatorManager.addRecipe(null, LiquidHelper.getLiquid(Defaults.LIQUID_GLASS, 500), ForestryItem.tubes.getItemStack(4, 10), diff --git a/src/main/java/forestry/plugins/PluginFarming.java b/src/main/java/forestry/plugins/PluginFarming.java index 4cfa1a823..7c22cd04c 100755 --- a/src/main/java/forestry/plugins/PluginFarming.java +++ b/src/main/java/forestry/plugins/PluginFarming.java @@ -10,17 +10,30 @@ ******************************************************************************/ package forestry.plugins; +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.GameData; import cpw.mods.fml.common.registry.GameRegistry; + +import net.minecraftforge.common.MinecraftForge; + import forestry.api.circuits.ChipsetManager; import forestry.api.circuits.ICircuitLayout; import forestry.api.farming.Farmables; import forestry.api.farming.IFarmable; import forestry.core.circuits.Circuit; import forestry.core.circuits.CircuitLayout; +import forestry.core.config.Config; import forestry.core.config.Defaults; import forestry.core.config.ForestryBlock; import forestry.core.config.ForestryItem; @@ -66,15 +79,6 @@ import forestry.farming.proxy.ProxyFarming; import forestry.farming.triggers.TriggerLowFertilizer; import forestry.farming.triggers.TriggerLowLiquid; import forestry.farming.triggers.TriggerLowSoil; -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.MinecraftForge; - -import java.util.ArrayList; @Plugin(pluginID = "Farming", name = "Farming", author = "SirSengir", url = Defaults.URL, description = "Adds automatic farms and harvesters for a wide variety of products.") public class PluginFarming extends ForestryPlugin { @@ -178,6 +182,7 @@ public class PluginFarming extends ForestryPlugin { Circuit.farmCocoaManual = new CircuitFarmLogic("manualCocoa", FarmLogicCocoa.class).setManual(); Circuit.farmOrchardManual = new CircuitFarmLogic("manualOrchard", FarmLogicOrchard.class); + Circuit.farmRubberManual = new CircuitFarmLogic("manualRubber", FarmLogicRubber.class); MinecraftForge.EVENT_BUS.register(new EventHandlerFarming()); } @@ -346,5 +351,8 @@ public class PluginFarming extends ForestryPlugin { ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 6), Circuit.farmGourdManual); ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 10), Circuit.farmShroomManual); ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 11), Circuit.farmCocoaManual); + + if (PluginIC2.resin != null && PluginIC2.rubberwood != null) + ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 8), Circuit.farmRubberManual); } } diff --git a/src/main/java/forestry/plugins/PluginIC2.java b/src/main/java/forestry/plugins/PluginIC2.java index 2bbb578e6..5b7c67ebb 100644 --- a/src/main/java/forestry/plugins/PluginIC2.java +++ b/src/main/java/forestry/plugins/PluginIC2.java @@ -10,54 +10,37 @@ ******************************************************************************/ package forestry.plugins; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameData; -import forestry.api.circuits.ChipsetManager; -import forestry.api.circuits.ICircuitLayout; + +import ic2.api.item.IC2Items; +import ic2.api.recipe.RecipeInputItemStack; +import ic2.api.recipe.Recipes; + import forestry.api.recipes.RecipeManagers; import forestry.api.storage.BackpackManager; import forestry.core.GameMode; -import forestry.core.circuits.Circuit; import forestry.core.config.Config; import forestry.core.config.Configuration; import forestry.core.config.Defaults; -import forestry.core.config.ForestryBlock; import forestry.core.config.ForestryItem; -import forestry.core.gadgets.BlockBase; -import forestry.core.gadgets.MachineDefinition; import forestry.core.items.ItemCrated; import forestry.core.proxy.Proxies; import forestry.core.utils.LiquidHelper; import forestry.core.utils.RecipeUtil; -import forestry.core.utils.ShapedRecipeCustom; import forestry.core.utils.StackUtils; -import forestry.energy.gadgets.EngineDefinition; -import forestry.energy.gadgets.EngineTin; -import forestry.energy.gadgets.MachineGenerator; -import forestry.farming.circuits.CircuitFarmLogic; -import forestry.farming.logic.FarmLogicRubber; -import ic2.api.item.IC2Items; -import ic2.api.recipe.RecipeInputItemStack; -import ic2.api.recipe.Recipes; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import java.util.HashSet; @Plugin(pluginID = "IC2", name = "IndustrialCraft2", author = "SirSengir", url = Defaults.URL, description = "Compatibility plugin for IC2.") public class PluginIC2 extends ForestryPlugin { public static PluginIC2 instance; public static Configuration config; - // Ignore IC2? public static boolean ignore; - - // Forestry Stuff - public static MachineDefinition definitionGenerator; - public static MachineDefinition definitionEngineTin; - // IC2 stuff public static ItemStack plantBall; public static ItemStack compressedPlantBall; @@ -91,41 +74,6 @@ public class PluginIC2 extends ForestryPlugin { return "IndustrialCraft2 not found"; } - @Override - public HashSet> getDependencies() { - HashSet> dependencies = super.getDependencies(); - dependencies.add(PluginFactory.class); - dependencies.add(PluginFarming.class); - dependencies.add(PluginEnergy.class); - - return dependencies; - } - - @Override - public void preInit() { - - definitionEngineTin = ((BlockBase) ForestryBlock.engine.block()).addDefinition(new EngineDefinition(Defaults.DEFINITION_ENGINETIN_META, "forestry.EngineTin", EngineTin.class, - PluginEnergy.proxy.getRenderDefaultEngine(Defaults.TEXTURE_PATH_BLOCKS + "/engine_tin_"), ShapedRecipeCustom.createShapedRecipe( - ForestryBlock.engine.getItemStack(1, Defaults.DEFINITION_ENGINETIN_META), - "###", - " X ", - "YVY", - '#', "ingotTin", - 'X', Blocks.glass, - 'Y', "gearTin", - 'V', Blocks.piston))); - - definitionGenerator = ((BlockBase) ForestryBlock.engine.block()).addDefinition(new MachineDefinition(Defaults.DEFINITION_GENERATOR_META, "forestry.Generator", MachineGenerator.class, - Proxies.render.getRenderDefaultMachine(Defaults.TEXTURE_PATH_BLOCKS + "/generator_"), ShapedRecipeCustom.createShapedRecipe( - ForestryBlock.engine.getItemStack(1, Defaults.DEFINITION_GENERATOR_META), - "X#X", - "XYX", - "X#X", - '#', Blocks.glass, - 'X', Items.gold_ingot, - 'Y', ForestryItem.sturdyCasing))); - } - @Override public void doInit() { config = Config.config; @@ -134,31 +82,11 @@ public class PluginIC2 extends ForestryPlugin { initRubberChain(); initFermentation(); - definitionEngineTin.register(); - definitionGenerator.register(); - - if (resin != null && rubberwood != null) { - Circuit.farmRubberManual = new CircuitFarmLogic("manualRubber", FarmLogicRubber.class); - } - // Remove some items from the recycler Recipes.recyclerBlacklist.add(new RecipeInputItemStack(ForestryItem.beeQueenGE.getItemStack())); Recipes.recyclerBlacklist.add(new RecipeInputItemStack(ForestryItem.beePrincessGE.getItemStack())); } - @Override - public void registerRecipes() { - if (rubber != null) { - RecipeManagers.fabricatorManager.addRecipe(null, LiquidHelper.getLiquid(Defaults.LIQUID_GLASS, 500), ForestryItem.tubes.getItemStack(4, 8), - new Object[]{" X ", "#X#", "XXX", '#', Items.redstone, 'X', rubber}); - } - - if (Circuit.farmRubberManual != null) { - ICircuitLayout layoutManual = ChipsetManager.circuitRegistry.getLayout("forestry.farms.manual"); - ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 8), Circuit.farmRubberManual); - } - } - @Override protected void registerBackpackItems() { if (BackpackManager.backpackItems == null) diff --git a/src/main/java/forestry/plugins/PluginManager.java b/src/main/java/forestry/plugins/PluginManager.java index e5d3bcdc9..3c63764b9 100755 --- a/src/main/java/forestry/plugins/PluginManager.java +++ b/src/main/java/forestry/plugins/PluginManager.java @@ -11,18 +11,28 @@ package forestry.plugins; import com.google.common.collect.ImmutableList; +import java.util.ArrayList; + import com.google.common.collect.Lists; + import cpw.mods.fml.common.IFuelHandler; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.GameRegistry; import forestry.Forestry; + import forestry.core.interfaces.IOreDictionaryHandler; import forestry.core.interfaces.IPacketHandler; import forestry.core.interfaces.IPickupHandler; import forestry.core.interfaces.IResupplyHandler; import forestry.core.interfaces.ISaveEventHandler; import forestry.core.proxy.Proxies; +import java.io.File; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.Locale; +import java.util.Random; +import java.util.Set; import net.minecraft.command.CommandHandler; import net.minecraft.command.ICommand; import net.minecraft.server.MinecraftServer; @@ -30,16 +40,6 @@ import net.minecraft.world.World; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Random; -import java.util.Set; - public class PluginManager { public static final String MODULE_CONFIG_FILE_NAME = "modules.cfg"; @@ -52,8 +52,8 @@ public class PluginManager { public static ArrayList resupplyHandlers = Lists.newArrayList(); public static ArrayList dictionaryHandlers = Lists.newArrayList(); - private static ArrayList loadedModules; - private static ArrayList unloadedModules; + private static final Set loadedModules = EnumSet.noneOf(Module.class); + private static final Set unloadedModules = EnumSet.allOf(Module.class); private static Stage stage = Stage.SETUP; public enum Stage { @@ -61,52 +61,51 @@ public class PluginManager { SETUP, PRE_INIT, INIT, POST_INIT, INIT_DISABLED, FINISHED; } - private static HashMap, PluginModule> pluginModules = new HashMap, PluginModule>(); + public enum Module { - static { - ArrayList> pluginClasses = new ArrayList>(); - pluginClasses.add(PluginCore.class); - pluginClasses.add(PluginApiculture.class); - pluginClasses.add(PluginArboriculture.class); - pluginClasses.add(PluginEnergy.class); - pluginClasses.add(PluginFactory.class); - pluginClasses.add(PluginFarming.class); - pluginClasses.add(PluginFood.class); - pluginClasses.add(PluginLepidopterology.class); - pluginClasses.add(PluginMail.class); - pluginClasses.add(PluginStorage.class); - pluginClasses.add(PluginBuildCraft.class); - pluginClasses.add(PluginPropolisPipe.class); - pluginClasses.add(PluginEE.class); - pluginClasses.add(PluginFarmCraftory.class); - pluginClasses.add(PluginIC2.class); - pluginClasses.add(PluginNatura.class); + CORE(new PluginCore()), + APICULTURE(new PluginApiculture()), + ARBORICULTURE(new PluginArboriculture()), + ENERGY(new PluginEnergy()), + FACTORY(new PluginFactory()), + FARMING(new PluginFarming()), + FOOD(new PluginFood()), + LEPIDOPTEROLOGY(new PluginLepidopterology()), + MAIL(new PluginMail()), + STORAGE(new PluginStorage()), + BUILDCRAFT(new PluginBuildCraft()), + PROPOLIS_PIPE(new PluginPropolisPipe()), + EQUIVELENT_EXCHANGE(new PluginEE()), + FARM_CRAFTORY(new PluginFarmCraftory()), + INDUSTRIALCRAFT(new PluginIC2()), + NATURA(new PluginNatura()),; - unloadedModules = new ArrayList(); - loadedModules = new ArrayList(); + private final ForestryPlugin instance; - for (ClasspluginClass : pluginClasses) { - PluginModule pluginModule = new PluginModule(pluginClass); - pluginModules.put(pluginClass, pluginModule); - unloadedModules.add(pluginModule); + private Module(ForestryPlugin plugin) { + this.instance = plugin; } + + public ForestryPlugin instance() { + return instance; + } + + public boolean isEnabled() { + return isModuleLoaded(this); + } + } public static Stage getStage() { return stage; } - public static PluginModule getPluginModule(Class pluginClass) { - return pluginModules.get(pluginClass); + public static EnumSet getLoadedModules() { + return EnumSet.copyOf(loadedModules); } - public static List getLoadedModules() { - return new ArrayList(loadedModules); - } - - public static boolean isModuleLoaded(Class pluginClass) { - PluginModule pluginModule = pluginModules.get(pluginClass); - return loadedModules.contains(pluginModule); + public static boolean isModuleLoaded(Module module) { + return loadedModules.contains(module); } public static void addPlugin(ForestryPlugin plugin) { @@ -124,20 +123,21 @@ public class PluginManager { config.addCustomCategoryComment(CATEGORY_MODULES, "Disabling these modules can greatly change how the mod functions.\n" + "Your milage may vary, please report any issues."); - ArrayList toLoad = new ArrayList(unloadedModules); - Iterator it = toLoad.iterator(); + Set toLoad = EnumSet.allOf(Module.class); + Iterator it = toLoad.iterator(); while (it.hasNext()) { - PluginModule m = it.next(); - if (m == getPluginModule(PluginCore.class)) + Module m = it.next(); + if (m == Module.CORE) continue; if (!isEnabled(config, m)) { it.remove(); Proxies.log.info("Module disabled: {0}", m); continue; } - if (m.instance() == null) { + ForestryPlugin plugin = m.instance; + if (!plugin.isAvailable()) { it.remove(); - Proxies.log.info("Module {0} failed to load.", m); + Proxies.log.info("Module {0} failed to load: {1}", plugin, plugin.getFailMessage()); continue; } } @@ -146,17 +146,12 @@ public class PluginManager { changed = false; it = toLoad.iterator(); while (it.hasNext()) { - PluginModule m = it.next(); - - Set> dependenciesClasses = m.instance().getDependencies(); - Set dependencies = new HashSet(); - for (Class depClass : dependenciesClasses) - dependencies.add(getPluginModule(depClass)); - - if (!toLoad.containsAll(dependencies)) { + Module m = it.next(); + Set deps = m.instance().getDependancies(); + if (!toLoad.containsAll(deps)) { it.remove(); changed = true; - Proxies.log.warning("Module {0} is missing dependencies: {1}", m, dependencies); + Proxies.log.warning("Module {0} is missing dependancies: {1}", m, deps); continue; } } @@ -171,8 +166,8 @@ public class PluginManager { Locale.setDefault(locale); stage = Stage.PRE_INIT; - for (PluginModule m : loadedModules) { - ForestryPlugin plugin = m.instance(); + for (Module m : loadedModules) { + ForestryPlugin plugin = m.instance; loadPlugin(plugin); Proxies.log.fine("Pre-Init Start: {0}", plugin); plugin.preInit(); @@ -215,8 +210,8 @@ public class PluginManager { public static void runInit() { stage = Stage.INIT; - for (PluginModule m : loadedModules) { - ForestryPlugin plugin = m.instance(); + for (Module m : loadedModules) { + ForestryPlugin plugin = m.instance; Proxies.log.fine("Init Start: {0}", plugin); plugin.registerBackpackItems(); plugin.registerCrates(); @@ -227,8 +222,8 @@ public class PluginManager { public static void runPostInit() { stage = Stage.POST_INIT; - for (PluginModule m : loadedModules) { - ForestryPlugin plugin = m.instance(); + for (Module m : loadedModules) { + ForestryPlugin plugin = m.instance; Proxies.log.fine("Post-Init Start: {0}", plugin); plugin.registerRecipes(); plugin.postInit(); @@ -236,12 +231,11 @@ public class PluginManager { } stage = Stage.INIT_DISABLED; - for (PluginModule m : unloadedModules) { - ForestryPlugin plugin = m.instance(); - Proxies.log.fine("Disabled-Init Start: {0}", m); - if (plugin != null) - plugin.disabledInit(); - Proxies.log.fine("Disabled-Init Complete: {0}", m); + for (Module m : unloadedModules) { + ForestryPlugin plugin = m.instance; + Proxies.log.fine("Disabled-Init Start: {0}", plugin); + plugin.disabledInit(); + Proxies.log.fine("Disabled-Init Complete: {0}", plugin); } stage = Stage.FINISHED; } @@ -249,8 +243,8 @@ public class PluginManager { public static void serverStarting(MinecraftServer server) { CommandHandler commandManager = (CommandHandler) server.getCommandManager(); - for (PluginModule m : loadedModules) { - ForestryPlugin plugin = m.instance(); + for (Module m : loadedModules) { + ForestryPlugin plugin = m.instance; ICommand[] commands = plugin.getConsoleCommands(); if (commands == null) continue; @@ -261,21 +255,21 @@ public class PluginManager { public static void processIMCMessages(ImmutableList messages) { for (FMLInterModComms.IMCMessage message : messages) - for (PluginModule m : loadedModules) { - ForestryPlugin plugin = m.instance(); + for (Module m : loadedModules) { + ForestryPlugin plugin = m.instance; if (plugin.processIMCMessage(message)) break; } } public static void generateSurface(World world, Random rand, int chunkX, int chunkZ) { - for (PluginModule m : loadedModules) { - ForestryPlugin plugin = m.instance(); + for (Module m : loadedModules) { + ForestryPlugin plugin = m.instance; plugin.generateSurface(world, rand, chunkX, chunkZ); } } - private static boolean isEnabled(Configuration config, PluginModule m) { + private static boolean isEnabled(Configuration config, Module m) { boolean defaultValue = true; Property prop = config.get(CATEGORY_MODULES, m.toString().toLowerCase(Locale.ENGLISH).replace('_', '.'), defaultValue); return prop.getBoolean(true); diff --git a/src/main/java/forestry/plugins/PluginModule.java b/src/main/java/forestry/plugins/PluginModule.java deleted file mode 100644 index 76aabf933..000000000 --- a/src/main/java/forestry/plugins/PluginModule.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011-2014 SirSengir. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser Public License v3 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl-3.0.txt - * - * Various Contributors including, but not limited to: - * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges - ******************************************************************************/ -package forestry.plugins; - -import forestry.core.proxy.Proxies; - -public class PluginModule { - - private final String pluginName; - private final ForestryPlugin instance; - - public PluginModule(Class pluginClass) { - Plugin info = pluginClass.getAnnotation(Plugin.class); - if (info == null) { - String error = "Forestry Plugin missing @Plugin annotation: " + pluginClass.getName(); - Proxies.log.severe(error); - throw new RuntimeException(error); - } - this.pluginName = info.name(); - ForestryPlugin plugin; - - try { - plugin = pluginClass.newInstance(); - if (!plugin.isAvailable()) - plugin = null; - } catch (Throwable e) { - plugin = null; - } - - this.instance = plugin; - } - - public ForestryPlugin instance() { - return instance; - } - - @Override - public String toString() { - return this.pluginName; - } -} diff --git a/src/main/java/forestry/plugins/PluginNatura.java b/src/main/java/forestry/plugins/PluginNatura.java index 62fecb34f..8391a2963 100755 --- a/src/main/java/forestry/plugins/PluginNatura.java +++ b/src/main/java/forestry/plugins/PluginNatura.java @@ -26,11 +26,6 @@ import forestry.core.config.Defaults; import forestry.core.proxy.Proxies; import forestry.core.utils.LiquidHelper; -@Plugin(pluginID = "Natura", - name = "Natura", - author = "SirSengir", - url = Defaults.URL, - description = "Adds support for Natura seeds, saplings, and berries.") public class PluginNatura extends ForestryPlugin { private static final String NATURA = "Natura"; diff --git a/src/main/java/forestry/plugins/PluginPropolisPipe.java b/src/main/java/forestry/plugins/PluginPropolisPipe.java index 0caf3d356..883484346 100755 --- a/src/main/java/forestry/plugins/PluginPropolisPipe.java +++ b/src/main/java/forestry/plugins/PluginPropolisPipe.java @@ -19,8 +19,6 @@ import forestry.pipes.GuiHandlerPipes; import forestry.pipes.network.PacketHandlerPipes; import forestry.pipes.proxy.ProxyPipes; import java.util.EnumSet; -import java.util.HashSet; -import java.util.Set; @Plugin(pluginID = "Pipes", name = "Pipes", author = "SirSengir", url = Defaults.URL, description = "Adds the apiarist's pipe for beekeeping if apiculture is enabled and BuildCraft 6 is present.") public class PluginPropolisPipe extends ForestryPlugin { @@ -48,11 +46,10 @@ public class PluginPropolisPipe extends ForestryPlugin { } @Override - public HashSet> getDependencies() { - HashSet> dependencies = super.getDependencies(); - dependencies.add(PluginBuildCraft.class); - - return dependencies; + public EnumSet getDependancies() { + EnumSet deps = super.getDependancies(); + deps.add(PluginManager.Module.BUILDCRAFT); + return deps; } @Override