diff --git a/common/buildcraft/BuildCraftCore.java b/common/buildcraft/BuildCraftCore.java index d11bbce8..ee51449b 100644 --- a/common/buildcraft/BuildCraftCore.java +++ b/common/buildcraft/BuildCraftCore.java @@ -1,14 +1,12 @@ /** * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively + * BuildCraft Open Source License. It grants rights to read, modify, compile or + * run the code. It does *NOT* grant the right to redistribute this software or + * its modifications in any form, binary or source, except if expressively * granted by the copyright holder. */ - package buildcraft; - import java.io.File; import java.util.TreeMap; @@ -29,6 +27,8 @@ import net.minecraftforge.fluids.IFluidBlock; import buildcraft.api.core.BuildCraftAPI; import buildcraft.api.core.IIconProvider; import buildcraft.api.gates.ActionManager; +import buildcraft.api.recipes.BuildcraftRecipes; +import buildcraft.core.recipes.RefineryRecipeManager; import buildcraft.core.BlockIndex; import buildcraft.core.BlockSpring; import buildcraft.core.BuildCraftConfiguration; @@ -64,6 +64,7 @@ import buildcraft.core.triggers.TriggerInventoryLevel; import buildcraft.core.triggers.TriggerMachine; import buildcraft.core.utils.BCLog; import buildcraft.core.utils.Localization; +import buildcraft.core.recipes.AssemblyRecipeManager; import buildcraft.transport.triggers.TriggerRedstoneInput; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -81,61 +82,47 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Mod(name = "BuildCraft", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Core", acceptedMinecraftVersions = "[1.6.4,1.7)", dependencies = "required-after:Forge@[9.11.1.953,)") -@NetworkMod(channels = { DefaultProps.NET_CHANNEL_NAME }, packetHandler = PacketHandler.class, clientSideRequired = true, serverSideRequired = true) +@NetworkMod(channels = {DefaultProps.NET_CHANNEL_NAME}, packetHandler = PacketHandler.class, clientSideRequired = true, serverSideRequired = true) public class BuildCraftCore { + public static enum RenderMode { + Full, NoDynamic }; - public static RenderMode render = RenderMode.Full; - public static boolean debugMode = false; public static boolean modifyWorld = false; public static boolean trackNetworkUsage = false; public static boolean colorBlindMode = false; - public static boolean dropBrokenBlocks = true; // Set to false to prevent the filler from dropping broken blocks. - public static int itemLifespan = 1200; - public static int updateFactor = 10; - public static long longUpdateFactor = 40; - public static BuildCraftConfiguration mainConfiguration; - public static TreeMap bufferedDescriptions = new TreeMap(); - public static final int trackedPassiveEntityId = 156; - public static boolean continuousCurrentModel; - public static Block springBlock; - public static Item woodenGearItem; public static Item stoneGearItem; public static Item ironGearItem; public static Item goldGearItem; public static Item diamondGearItem; public static Item wrenchItem; - @SideOnly(Side.CLIENT) public static Icon redLaserTexture; - @SideOnly(Side.CLIENT) + @SideOnly(Side.CLIENT) public static Icon blueLaserTexture; - @SideOnly(Side.CLIENT) + @SideOnly(Side.CLIENT) public static Icon stripesLaserTexture; - @SideOnly(Side.CLIENT) + @SideOnly(Side.CLIENT) public static Icon transparentTexture; - - @SideOnly(Side.CLIENT) - public static IIconProvider iconProvider; - + @SideOnly(Side.CLIENT) + public static IIconProvider iconProvider; public static int blockByEntityModel; public static int legacyPipeModel; public static int markerModel; public static int oilModel; - public static BCTrigger triggerMachineActive = new TriggerMachine(DefaultProps.TRIGGER_MACHINE_ACTIVE, true); public static BCTrigger triggerMachineInactive = new TriggerMachine(DefaultProps.TRIGGER_MACHINE_INACTIVE, false); public static BCTrigger triggerEmptyInventory = new TriggerInventory(DefaultProps.TRIGGER_EMPTY_INVENTORY, TriggerInventory.State.Empty); @@ -148,34 +135,32 @@ public class BuildCraftCore { public static BCTrigger triggerFullFluid = new TriggerFluidContainer(DefaultProps.TRIGGER_FULL_LIQUID, TriggerFluidContainer.State.Full); public static BCTrigger triggerRedstoneActive = new TriggerRedstoneInput(DefaultProps.TRIGGER_REDSTONE_ACTIVE, true); public static BCTrigger triggerRedstoneInactive = new TriggerRedstoneInput(DefaultProps.TRIGGER_REDSTONE_INACTIVE, false); - public static BCTrigger triggerInventoryBelow25 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_25); public static BCTrigger triggerInventoryBelow50 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_50); public static BCTrigger triggerInventoryBelow75 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_75); - public static BCAction actionRedstone = new ActionRedstoneOutput(DefaultProps.ACTION_REDSTONE); public static BCAction actionOn = new ActionMachineControl(DefaultProps.ACTION_ON, Mode.On); public static BCAction actionOff = new ActionMachineControl(DefaultProps.ACTION_OFF, Mode.Off); public static BCAction actionLoop = new ActionMachineControl(DefaultProps.ACTION_LOOP, Mode.Loop); - public static boolean loadDefaultRecipes = true; public static boolean forcePneumaticPower = true; public static boolean consumeWaterSources = false; - public static BptItem[] itemBptProps = new BptItem[Item.itemsList.length]; - @Instance("BuildCraft|Core") public static BuildCraftCore instance; - @EventHandler + @EventHandler public void loadConfiguration(FMLPreInitializationEvent evt) { BCLog.initLog(); - + + BuildcraftRecipes.assemblyTable = AssemblyRecipeManager.INSTANCE; + BuildcraftRecipes.refinery = RefineryRecipeManager.INSTANCE; + mainConfiguration = new BuildCraftConfiguration(new File(evt.getModConfigurationDirectory(), "buildcraft/main.conf")); try { mainConfiguration.load(); - + Property updateCheck = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_GENERAL, "update.check", true); updateCheck.comment = "set to true for version check on startup"; if (updateCheck.getBoolean(true)) { @@ -233,7 +218,7 @@ public class BuildCraftCore { consumeWaterSources = consumeWater.getBoolean(consumeWaterSources); consumeWater.comment = "set to true if the Pump should consume water"; - if(BuildCraftCore.modifyWorld) { + if (BuildCraftCore.modifyWorld) { springBlock = new BlockSpring(springId.getInt()).setUnlocalizedName("eternalSpring"); CoreProxy.proxy.registerBlock(springBlock, ItemSpring.class); } @@ -252,7 +237,7 @@ public class BuildCraftCore { LanguageRegistry.addName(ironGearItem, "Iron Gear"); CoreProxy.proxy.registerItem(ironGearItem); OreDictionary.registerOre("gearIron", new ItemStack(ironGearItem)); - + goldGearItem = (new ItemBuildCraft(goldenGearId.getInt())).setUnlocalizedName("goldGearItem"); LanguageRegistry.addName(goldGearItem, "Gold Gear"); CoreProxy.proxy.registerItem(goldGearItem); @@ -266,7 +251,7 @@ public class BuildCraftCore { Property colorBlindProp = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_GENERAL, "client.colorblindmode", false); colorBlindProp.comment = "Set to true to enable alternate textures"; colorBlindMode = colorBlindProp.getBoolean(false); - + MinecraftForge.EVENT_BUS.register(this); } finally { @@ -276,8 +261,8 @@ public class BuildCraftCore { } } - @EventHandler - public void initialize(FMLInitializationEvent evt) { + @EventHandler + public void initialize(FMLInitializationEvent evt) { // MinecraftForge.registerConnectionHandler(new ConnectionHandler()); ActionManager.registerTriggerProvider(new DefaultTriggerProvider()); ActionManager.registerActionProvider(new DefaultActionProvider()); @@ -321,29 +306,29 @@ public class BuildCraftCore { } - @EventHandler - public void serverStarting(FMLServerStartingEvent event) { + @EventHandler + public void serverStarting(FMLServerStartingEvent event) { event.registerServerCommand(new CommandBuildCraft()); } @ForgeSubscribe @SideOnly(Side.CLIENT) - public void textureHook(TextureStitchEvent.Pre event){ + public void textureHook(TextureStitchEvent.Pre event) { if (event.map.textureType == 1) { iconProvider = new CoreIconProvider(); iconProvider.registerIcons(event.map); ActionTriggerIconProvider.INSTANCE.registerIcons(event.map); } else if (event.map.textureType == 0) { - BuildCraftCore.redLaserTexture = event.map.registerIcon("buildcraft:blockRedLaser"); - BuildCraftCore.blueLaserTexture = event.map.registerIcon("buildcraft:blockBlueLaser"); - BuildCraftCore.stripesLaserTexture = event.map.registerIcon("buildcraft:blockStripesLaser"); - BuildCraftCore.transparentTexture = event.map.registerIcon("buildcraft:blockTransparentLaser"); + BuildCraftCore.redLaserTexture = event.map.registerIcon("buildcraft:blockRedLaser"); + BuildCraftCore.blueLaserTexture = event.map.registerIcon("buildcraft:blockBlueLaser"); + BuildCraftCore.stripesLaserTexture = event.map.registerIcon("buildcraft:blockStripesLaser"); + BuildCraftCore.transparentTexture = event.map.registerIcon("buildcraft:blockTransparentLaser"); } } public void loadRecipes() { - CoreProxy.proxy.addCraftingRecipe(new ItemStack(wrenchItem), "I I", " G ", " I ", 'I', Item.ingotIron, 'G', stoneGearItem); + CoreProxy.proxy.addCraftingRecipe(new ItemStack(wrenchItem), "I I", " G ", " I ", 'I', Item.ingotIron, 'G', stoneGearItem); CoreProxy.proxy.addCraftingRecipe(new ItemStack(woodenGearItem), " S ", "S S", " S ", 'S', "stickWood"); CoreProxy.proxy.addCraftingRecipe(new ItemStack(stoneGearItem), " I ", "IGI", " I ", 'I', "cobblestone", 'G', woodenGearItem); @@ -351,9 +336,9 @@ public class BuildCraftCore { CoreProxy.proxy.addCraftingRecipe(new ItemStack(goldGearItem), " I ", "IGI", " I ", 'I', Item.ingotGold, 'G', ironGearItem); CoreProxy.proxy.addCraftingRecipe(new ItemStack(diamondGearItem), " I ", "IGI", " I ", 'I', Item.diamond, 'G', goldGearItem); } - + @EventHandler - public void processIMCRequests(FMLInterModComms.IMCEvent event) { - InterModComms.processIMC(event); - } + public void processIMCRequests(FMLInterModComms.IMCEvent event) { + InterModComms.processIMC(event); + } } diff --git a/common/buildcraft/BuildCraftEnergy.java b/common/buildcraft/BuildCraftEnergy.java index 0389e623..71418462 100644 --- a/common/buildcraft/BuildCraftEnergy.java +++ b/common/buildcraft/BuildCraftEnergy.java @@ -9,7 +9,8 @@ package buildcraft; import buildcraft.api.fuels.IronEngineCoolant; import buildcraft.api.fuels.IronEngineFuel; -import buildcraft.api.recipes.RefineryRecipes; +import buildcraft.api.recipes.BuildcraftRecipes; +import buildcraft.core.recipes.RefineryRecipeManager; import buildcraft.core.BlockIndex; import buildcraft.core.BlockSpring; import buildcraft.core.DefaultProps; @@ -81,7 +82,7 @@ public class BuildCraftEnergy { public static Item bucketFuel; public static Item fuel; public static boolean canOilBurn; - public static double oilWellScalar; + public static double oilWellScalar = 1.0; public static TreeMap saturationStored = new TreeMap(); public static BCTrigger triggerBlueEngineHeat = new TriggerEngineHeat(DefaultProps.TRIGGER_BLUE_ENGINE_HEAT, EnergyStage.BLUE, "buildcraft.engine.stage.blue"); public static BCTrigger triggerGreenEngineHeat = new TriggerEngineHeat(DefaultProps.TRIGGER_GREEN_ENGINE_HEAT, EnergyStage.GREEN, "buildcraft.engine.stage.green"); @@ -207,7 +208,7 @@ public class BuildCraftEnergy { BucketHandler.INSTANCE.buckets.put(blockFuel, bucketFuel); MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); - RefineryRecipes.addRecipe(new FluidStack(fluidOil, 1), new FluidStack(fluidFuel, 1), 12, 1); + BuildcraftRecipes.refinery.addRecipe(new FluidStack(fluidOil, 1), new FluidStack(fluidFuel, 1), 12, 1); // Iron Engine Fuels // IronEngineFuel.addFuel("lava", 1, 20000); diff --git a/common/buildcraft/BuildCraftSilicon.java b/common/buildcraft/BuildCraftSilicon.java index b15a4200..a1831f03 100644 --- a/common/buildcraft/BuildCraftSilicon.java +++ b/common/buildcraft/BuildCraftSilicon.java @@ -9,7 +9,8 @@ package buildcraft; import buildcraft.api.bptblocks.BptBlockInventory; import buildcraft.api.bptblocks.BptBlockRotateMeta; -import buildcraft.api.recipes.AssemblyRecipe; +import buildcraft.api.recipes.BuildcraftRecipes; +import buildcraft.core.recipes.AssemblyRecipeManager; import buildcraft.core.DefaultProps; import buildcraft.core.InterModComms; import buildcraft.core.ItemRedstoneChipset; @@ -141,95 +142,65 @@ public class BuildCraftSilicon { new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6)}); // / REDSTONE CHIPSETS - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.redstone)}, 10000, new ItemStack(redstoneChipset, 1, 0))); CoreProxy.proxy.addName(new ItemStack(redstoneChipset, 1, 0), "Redstone Chipset"); - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.redstone), new ItemStack(Item.ingotIron)}, 20000, - new ItemStack(redstoneChipset, 1, 1))); CoreProxy.proxy.addName(new ItemStack(redstoneChipset, 1, 1), "Redstone Iron Chipset"); - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.redstone), new ItemStack(Item.ingotGold)}, 40000, - new ItemStack(redstoneChipset, 1, 2))); CoreProxy.proxy.addName(new ItemStack(redstoneChipset, 1, 2), "Redstone Golden Chipset"); - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.redstone), new ItemStack(Item.diamond)}, 80000, - new ItemStack(redstoneChipset, 1, 3))); CoreProxy.proxy.addName(new ItemStack(redstoneChipset, 1, 3), "Redstone Diamond Chipset"); - // PULSATING CHIPSETS - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.redstone), new ItemStack(Item.enderPearl)}, 40000, - new ItemStack(redstoneChipset, 2, 4))); CoreProxy.proxy.addName(new ItemStack(redstoneChipset, 1, 4), "Pulsating Chipset"); - // / REDSTONE GATES - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 0)}, 20000, new ItemStack( - BuildCraftTransport.pipeGate, 1, 0))); + BuildcraftRecipes.assemblyTable.addRecipe(10000, new ItemStack(redstoneChipset, 1, 0), Item.redstone); + BuildcraftRecipes.assemblyTable.addRecipe(20000, new ItemStack(redstoneChipset, 1, 1), Item.redstone, Item.ingotIron); + BuildcraftRecipes.assemblyTable.addRecipe(40000, new ItemStack(redstoneChipset, 1, 2), Item.redstone, Item.ingotGold); + BuildcraftRecipes.assemblyTable.addRecipe(80000, new ItemStack(redstoneChipset, 1, 3), Item.redstone, Item.diamond); + BuildcraftRecipes.assemblyTable.addRecipe(40000, new ItemStack(redstoneChipset, 2, 4), Item.redstone, Item.enderPearl); + + // / REDSTONE GATES CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 0), "Gate"); - AssemblyRecipe.assemblyRecipes - .add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 0), new ItemStack(redstoneChipset, 1, 4), - new ItemStack(redstoneChipset, 1, 1)}, 10000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 0))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 0), "Autarchic Gate"); - - // / IRON AND GATES - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 1), - new ItemStack(BuildCraftTransport.redPipeWire)}, 40000, new ItemStack(BuildCraftTransport.pipeGate, 1, 1))); CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 1), "Iron AND Gate"); - AssemblyRecipe.assemblyRecipes - .add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 1), new ItemStack(redstoneChipset, 1, 4), - new ItemStack(redstoneChipset, 1, 1)}, 20000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), "Autarchic Iron AND Gate"); - - // / IRON OR GATES - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 1), - new ItemStack(BuildCraftTransport.redPipeWire)}, 40000, new ItemStack(BuildCraftTransport.pipeGate, 1, 2))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 2), "Iron OR Gate"); - AssemblyRecipe.assemblyRecipes - .add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 2), new ItemStack(redstoneChipset, 1, 4), - new ItemStack(redstoneChipset, 1, 1)}, 20000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2), "Autarchic Iron OR Gate"); - - // / GOLD AND GATES - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 2), - new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire)}, 80000, new ItemStack( - BuildCraftTransport.pipeGate, 1, 3))); CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 3), "Gold AND Gate"); - AssemblyRecipe.assemblyRecipes - .add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 3), new ItemStack(redstoneChipset, 1, 4), - new ItemStack(redstoneChipset, 1, 1)}, 40000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3), "Autarchic Gold AND Gate"); - - // / GOLD OR GATES - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 2), - new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire)}, 80000, new ItemStack( - BuildCraftTransport.pipeGate, 1, 4))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 4), "Gold OR Gate"); - AssemblyRecipe.assemblyRecipes - .add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 4), new ItemStack(redstoneChipset, 1, 4), - new ItemStack(redstoneChipset, 1, 1)}, 40000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4), "Autarchic Gold OR Gate"); - - // / DIAMOND AND GATES - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 3), - new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire), - new ItemStack(BuildCraftTransport.greenPipeWire), new ItemStack(BuildCraftTransport.yellowPipeWire)}, 160000, new ItemStack( - BuildCraftTransport.pipeGate, 1, 5))); CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 5), "Diamond AND Gate"); - AssemblyRecipe.assemblyRecipes - .add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 5), new ItemStack(redstoneChipset, 1, 4), - new ItemStack(redstoneChipset, 1, 1)}, 80000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5))); - CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5), "Autarchic Diamond AND Gate"); - - // / DIAMOND OR GATES - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 3), - new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire), - new ItemStack(BuildCraftTransport.greenPipeWire), new ItemStack(BuildCraftTransport.yellowPipeWire)}, 160000, new ItemStack( - BuildCraftTransport.pipeGate, 1, 6))); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 2), "Iron OR Gate"); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 4), "Gold OR Gate"); CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 6), "Diamond OR Gate"); - AssemblyRecipe.assemblyRecipes - .add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 6), new ItemStack(redstoneChipset, 1, 4), - new ItemStack(redstoneChipset, 1, 1)}, 80000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6))); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 0), "Autarchic Gate"); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), "Autarchic Iron AND Gate"); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3), "Autarchic Gold AND Gate"); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5), "Autarchic Diamond AND Gate"); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2), "Autarchic Iron OR Gate"); + CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4), "Autarchic Gold OR Gate"); CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6), "Autarchic Diamond OR Gate"); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGate, 1, 0), 20000, new ItemStack(redstoneChipset, 1, 0)); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGate, 1, 1), 40000, new ItemStack(redstoneChipset, 1, 1), new ItemStack(BuildCraftTransport.redPipeWire)); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGate, 1, 2), 40000, new ItemStack(redstoneChipset, 1, 1), new ItemStack(BuildCraftTransport.redPipeWire)); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 0), 10000, new ItemStack(BuildCraftTransport.pipeGate, 1, 0), new ItemStack(redstoneChipset, 1, 4), new ItemStack(redstoneChipset, 1, 1)); +// +// +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), 20000, new ItemStack(BuildCraftTransport.pipeGate, 1, 1), new ItemStack(redstoneChipset, 1, 4), new ItemStack(redstoneChipset, 1, 1)); +// +// +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2), 20000, new ItemStack(BuildCraftTransport.pipeGate, 1, 2), new ItemStack(redstoneChipset, 1, 4), new ItemStack(redstoneChipset, 1, 1)); +// +// // / GOLD AND GATES +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGate, 1, 3), 80000, new ItemStack(redstoneChipset, 1, 2), new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire)); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 3), new ItemStack(redstoneChipset, 1, 4), new ItemStack(redstoneChipset, 1, 1)}, 40000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3))); +// +// // / GOLD OR GATES +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 2), new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire)}, 80000, new ItemStack( BuildCraftTransport.pipeGate, 1, 4))); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 4), new ItemStack(redstoneChipset, 1, 4), new ItemStack(redstoneChipset, 1, 1)}, 40000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4))); +// +// // / DIAMOND AND GATES +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 3), new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire),new ItemStack(BuildCraftTransport.greenPipeWire), new ItemStack(BuildCraftTransport.yellowPipeWire)}, 160000, new ItemStack(BuildCraftTransport.pipeGate, 1, 5))); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 5), new ItemStack(redstoneChipset, 1, 4), new ItemStack(redstoneChipset, 1, 1)}, 80000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5))); +// +// // / DIAMOND OR GATES +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 3), new ItemStack(BuildCraftTransport.redPipeWire), new ItemStack(BuildCraftTransport.bluePipeWire), new ItemStack(BuildCraftTransport.greenPipeWire), new ItemStack(BuildCraftTransport.yellowPipeWire)}, 160000, new ItemStack(BuildCraftTransport.pipeGate, 1, 6))); +// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 6), new ItemStack(redstoneChipset, 1, 4), new ItemStack(redstoneChipset, 1, 1)}, 80000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6))); + } - + @EventHandler - public void processIMCRequests(FMLInterModComms.IMCEvent event) { - InterModComms.processIMC(event); - } + public void processIMCRequests(FMLInterModComms.IMCEvent event) { + InterModComms.processIMC(event); + } } diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java index 6a6199de..d592b340 100644 --- a/common/buildcraft/BuildCraftTransport.java +++ b/common/buildcraft/BuildCraftTransport.java @@ -10,7 +10,8 @@ package buildcraft; import buildcraft.api.core.IIconProvider; import buildcraft.api.filler.IFillerPattern; import buildcraft.api.gates.ActionManager; -import buildcraft.api.recipes.AssemblyRecipe; +import buildcraft.api.recipes.BuildcraftRecipes; +import buildcraft.core.recipes.AssemblyRecipeManager; import buildcraft.api.transport.IExtractionHandler; import buildcraft.api.transport.IPipe; import buildcraft.api.transport.PipeManager; @@ -450,13 +451,13 @@ public class BuildCraftTransport { // Assembly table recipes, moved from PreInit phase to Init, all mods should be done adding to the OreDictionary by now try { - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(500, new ItemStack(redPipeWire, 8), "dyeRed", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron))); - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(500, new ItemStack(bluePipeWire, 8), "dyeBlue", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron))); - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(500, new ItemStack(greenPipeWire, 8), "dyeGreen", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron))); - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(500, new ItemStack(yellowPipeWire, 8), "dyeYellow", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron))); - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(pipeStructureCobblestone)}, 1000, new ItemStack(plugItem, 8))); + BuildcraftRecipes.assemblyTable.addRecipe(500, new ItemStack(redPipeWire, 8), "dyeRed", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron)); + BuildcraftRecipes.assemblyTable.addRecipe(500, new ItemStack(bluePipeWire, 8), "dyeBlue", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron)); + BuildcraftRecipes.assemblyTable.addRecipe(500, new ItemStack(greenPipeWire, 8), "dyeGreen", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron)); + BuildcraftRecipes.assemblyTable.addRecipe(500, new ItemStack(yellowPipeWire, 8), "dyeYellow", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron)); + BuildcraftRecipes.assemblyTable.addRecipe(1000, new ItemStack(plugItem, 8), new ItemStack(pipeStructureCobblestone)); } catch (Error error) { - BCLog.logErrorAPI("Buildcraft", error, AssemblyRecipe.class); + BCLog.logErrorAPI("Buildcraft", error, BuildcraftRecipes.class); } } diff --git a/common/buildcraft/api/inventory/ISecuredInventory.java b/common/buildcraft/api/inventory/ISecuredInventory.java deleted file mode 100644 index 6ebb99b6..00000000 --- a/common/buildcraft/api/inventory/ISecuredInventory.java +++ /dev/null @@ -1,23 +0,0 @@ -package buildcraft.api.inventory; - -import net.minecraftforge.common.ForgeDirection; - -public interface ISecuredInventory { - - /** - * @param name - * @return true if the user/player with the given name has access permissions on this machine. - */ - boolean canAccess(String name); - - /** - * Informs the inventory with whose permissions the next item or liquid transaction will be performed. It is up to the inventory to determine the effect. - * - * @param orientation - * Orientation the transaction will be performed from. - * @param name - * Name of the user/player who owns the transaction. - */ - void prepareTransaction(ForgeDirection orientation, String name); - -} diff --git a/common/buildcraft/api/inventory/ISelectiveInventory.java b/common/buildcraft/api/inventory/ISelectiveInventory.java deleted file mode 100644 index 0e4d7045..00000000 --- a/common/buildcraft/api/inventory/ISelectiveInventory.java +++ /dev/null @@ -1,23 +0,0 @@ -package buildcraft.api.inventory; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.ForgeDirection; - -public interface ISelectiveInventory extends ISpecialInventory { - /** - * Requests specified items to be extracted from the inventory - * - * @param desired - * Array which can contain ItemStacks, Items, or classes describing the type of item accepted or excluded. - * @param exclusion - * If true desired items are not eligible for returning. - * @param doRemove - * If false no actual extraction may occur. - * @param from - * Orientation the ItemStack is requested from. - * @param maxItemCount - * Maximum amount of items to extract (spread over all returned item stacks) - * @return Array of item stacks extracted from the inventory - */ - ItemStack[] extractItem(Object[] desired, boolean exclusion, boolean doRemove, ForgeDirection from, int maxItemCount); -} diff --git a/common/buildcraft/api/recipes/AssemblyRecipe.java b/common/buildcraft/api/recipes/AssemblyRecipe.java deleted file mode 100644 index 6ab39418..00000000 --- a/common/buildcraft/api/recipes/AssemblyRecipe.java +++ /dev/null @@ -1,88 +0,0 @@ -package buildcraft.api.recipes; - -import java.util.ArrayList; -import java.util.LinkedList; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -public class AssemblyRecipe { - - public static LinkedList assemblyRecipes = new LinkedList(); - public final Object[] input; - public final ItemStack output; - public final float energy; - - public AssemblyRecipe(ItemStack[] input, int energy, ItemStack output) { - this.input = input; - this.output = output; - this.energy = energy; - } - - /** - * This version of AssemblyRecipe supports the OreDictionary - * - * @param input Object... containing either an ItemStack, or a paired string - * and integer(ex: "dyeBlue", 1) - * @param energy MJ cost to produce - * @param output resulting ItemStack - */ - public AssemblyRecipe(int energy, ItemStack output, Object... input) { - this.output = output; - this.energy = energy; - this.input = input; - - for (int i = 0; i < input.length; i++) { - if (input[i] instanceof String) { - input[i] = OreDictionary.getOres((String) input[i]); - } - } - } - - public boolean canBeDone(ItemStack... items) { - for (int i = 0; i < input.length; i++) { - if (input[i] == null) - continue; - - if (input[i] instanceof ItemStack) { - ItemStack requirement = (ItemStack) input[i]; - int found = 0; // Amount of ingredient found in inventory - int expected = requirement.stackSize; - for (ItemStack item : items) { - if (item == null) - continue; - - if (item.isItemEqual(requirement)) - found += item.stackSize; // Adds quantity of stack to amount found - - } - - // Return false if the amount of ingredient found - // is not enough - if (found < expected) - return false; - } else if (input[i] instanceof ArrayList) { - ArrayList oreList = (ArrayList) input[i]; - int found = 0; // Amount of ingredient found in inventory - int expected = (Integer) input[i++ + 1]; - - for (ItemStack item : items) { - if (item == null) - continue; - for (ItemStack oreItem : oreList) { - if (OreDictionary.itemMatches(oreItem, item, true)) { - found += item.stackSize; - break; - } - } - } - - // Return false if the amount of ingredient found - // is not enough - if (found < expected) - return false; - } - } - - return true; - } -} diff --git a/common/buildcraft/api/recipes/BuildcraftRecipes.java b/common/buildcraft/api/recipes/BuildcraftRecipes.java new file mode 100644 index 00000000..c6e6bdc1 --- /dev/null +++ b/common/buildcraft/api/recipes/BuildcraftRecipes.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) SpaceToad, 2011-2012 + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.api.recipes; + +/** + * + * @author CovertJaguar + */ +public final class BuildcraftRecipes { + + public static IAssemblyRecipeManager assemblyTable; + public static IRefineryRecipeManager refinery; + + private BuildcraftRecipes() { + } +} diff --git a/common/buildcraft/api/recipes/IAssemblyRecipeManager.java b/common/buildcraft/api/recipes/IAssemblyRecipeManager.java new file mode 100644 index 00000000..10fb3bc9 --- /dev/null +++ b/common/buildcraft/api/recipes/IAssemblyRecipeManager.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) SpaceToad, 2011-2012 + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.api.recipes; + +import java.util.List; +import net.minecraft.item.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IAssemblyRecipeManager { + + public static interface IAssemblyRecipe { + + ItemStack getOutput(); + + Object[] getInputs(); + + double getEnergyCost(); + } + + /** + * Add an Assembly Table recipe. + * + * @param input Object... containing either an ItemStack, or a paired string + * and integer(ex: "dyeBlue", 1) + * @param energy MJ cost to produce + * @param output resulting ItemStack + */ + void addRecipe(double energyCost, ItemStack output, Object... input); + + List getRecipes(); +} diff --git a/common/buildcraft/api/recipes/IRefineryRecipeManager.java b/common/buildcraft/api/recipes/IRefineryRecipeManager.java new file mode 100644 index 00000000..01ca1a88 --- /dev/null +++ b/common/buildcraft/api/recipes/IRefineryRecipeManager.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) SpaceToad, 2011-2012 + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.api.recipes; + +import java.util.SortedSet; +import net.minecraftforge.fluids.FluidStack; + +/** + * + * @author CovertJaguar + */ +public interface IRefineryRecipeManager { + + void addRecipe(FluidStack ingredient, FluidStack result, int energy, int delay); + + void addRecipe(FluidStack ingredient1, FluidStack ingredient2, FluidStack result, int energy, int delay); + + SortedSet getRecipes(); + + IRefineryRecipe findRefineryRecipe(FluidStack ingredient1, FluidStack ingredient2); + + public static interface IRefineryRecipe { + + FluidStack getIngredient1(); + + FluidStack getIngredient2(); + + FluidStack getResult(); + + int getEnergyCost(); + + int getTimeRequired(); + } +} diff --git a/common/buildcraft/api/recipes/package-info.java b/common/buildcraft/api/recipes/package-info.java index a27517f3..3e41173c 100644 --- a/common/buildcraft/api/recipes/package-info.java +++ b/common/buildcraft/api/recipes/package-info.java @@ -1,3 +1,3 @@ -@API(apiVersion="1.0",owner="BuildCraftAPI|core",provides="BuildCraftAPI|recipes") +@API(apiVersion="2.0",owner="BuildCraftAPI|core",provides="BuildCraftAPI|recipes") package buildcraft.api.recipes; import cpw.mods.fml.common.API; \ No newline at end of file diff --git a/common/buildcraft/core/recipes/AssemblyRecipeManager.java b/common/buildcraft/core/recipes/AssemblyRecipeManager.java new file mode 100644 index 00000000..af9b9eb5 --- /dev/null +++ b/common/buildcraft/core/recipes/AssemblyRecipeManager.java @@ -0,0 +1,148 @@ +package buildcraft.core.recipes; + +import buildcraft.api.recipes.IAssemblyRecipeManager; +import buildcraft.core.inventory.ITransactor; +import buildcraft.core.inventory.InventoryIterator; +import buildcraft.core.inventory.InventoryIterator.IInvSlot; +import buildcraft.core.inventory.Transactor; +import buildcraft.core.inventory.filters.ArrayStackFilter; +import java.util.LinkedList; +import java.util.List; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; + +public class AssemblyRecipeManager implements IAssemblyRecipeManager { + + public static final AssemblyRecipeManager INSTANCE = new AssemblyRecipeManager(); + private List assemblyRecipes = new LinkedList(); + + @Override + public void addRecipe(double energyCost, ItemStack output, Object... input) { + assemblyRecipes.add(new AssemblyRecipe(output, energyCost, input)); + } + + @Override + public List getRecipes() { + return assemblyRecipes; + } + + public static class AssemblyRecipe implements IAssemblyRecipe { + + public final ItemStack output; + public final double energyCost; + private final Object[] originalInput; + private final Object[] processedInput; + + public AssemblyRecipe(ItemStack output, double energyCost, Object... inputs) { + this.output = output.copy(); + this.energyCost = energyCost; + this.originalInput = inputs; + + processedInput = new Object[inputs.length]; + for (int i = 0; i < inputs.length; i++) { + if (inputs[i] instanceof String) + processedInput[i] = OreDictionary.getOres((String) inputs[i]); + if (inputs[i] instanceof Item) + processedInput[i] = new ItemStack((Item) inputs[i]); + else + processedInput[i] = inputs[i]; + } + } + + @Override + public ItemStack getOutput() { + return output.copy(); + } + + @Override + public Object[] getInputs() { + return originalInput; + } + + @Override + public double getEnergyCost() { + return energyCost; + } + + public boolean canBeDone(IInventory inv) { + for (int i = 0; i < processedInput.length; i++) { + if (processedInput[i] == null) + continue; + + if (processedInput[i] instanceof ItemStack) { + ItemStack requirement = (ItemStack) processedInput[i]; + int found = 0; // Amount of ingredient found in inventory + int expected = requirement.stackSize; + for (IInvSlot slot : InventoryIterator.getIterable(inv, ForgeDirection.UNKNOWN)) { + ItemStack item = slot.getStackInSlot(); + if (item == null) + continue; + + if (item.isItemEqual(requirement)) + found += item.stackSize; // Adds quantity of stack to amount found + + if (found >= expected) + break; + } + + // Return false if the amount of ingredient found + // is not enough + if (found < expected) + return false; + } else if (processedInput[i] instanceof List) { + List oreList = (List) processedInput[i]; + int found = 0; // Amount of ingredient found in inventory + int expected = (Integer) processedInput[i++ + 1]; + + for (IInvSlot slot : InventoryIterator.getIterable(inv, ForgeDirection.UNKNOWN)) { + ItemStack item = slot.getStackInSlot(); + if (item == null) + continue; + for (ItemStack oreItem : oreList) { + if (OreDictionary.itemMatches(oreItem, item, true)) { + found += item.stackSize; + break; + } + } + if (found >= expected) + break; + } + + // Return false if the amount of ingredient found + // is not enough + if (found < expected) + return false; + } + } + + return true; + } + + public void useItems(IInventory inv) { + ITransactor tran = Transactor.getTransactorFor(inv); + Object[] input = processedInput; + for (int i = 0; i < input.length; i++) { + if (input[i] instanceof ItemStack) { + ItemStack requirement = (ItemStack) input[i]; + for (int num = 0; num < requirement.stackSize; num++) { + tran.remove(new ArrayStackFilter(requirement), ForgeDirection.UNKNOWN, true); + } + } else if (input[i] instanceof List) { + List oreList = (List) input[i]; + int required = (Integer) input[i + 1]; + for (ItemStack ore : oreList) { + for (int num = 0; num < required; num++) { + if (tran.remove(new ArrayStackFilter(ore), ForgeDirection.UNKNOWN, true) != null) + required--; + } + if (required <= 0) + break; + } + } + } + } + } +} diff --git a/common/buildcraft/api/recipes/RefineryRecipes.java b/common/buildcraft/core/recipes/RefineryRecipeManager.java similarity index 62% rename from common/buildcraft/api/recipes/RefineryRecipes.java rename to common/buildcraft/core/recipes/RefineryRecipeManager.java index 64985bf7..39278c3f 100644 --- a/common/buildcraft/api/recipes/RefineryRecipes.java +++ b/common/buildcraft/core/recipes/RefineryRecipeManager.java @@ -5,33 +5,40 @@ * 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ -package buildcraft.api.recipes; +package buildcraft.core.recipes; +import buildcraft.api.recipes.IRefineryRecipeManager; +import buildcraft.api.recipes.IRefineryRecipeManager.IRefineryRecipe; import com.google.common.base.Objects; import java.util.Collections; import java.util.SortedSet; import java.util.TreeSet; import net.minecraftforge.fluids.FluidStack; -public final class RefineryRecipes { +public final class RefineryRecipeManager implements IRefineryRecipeManager { - private static SortedSet recipes = new TreeSet(); + public static final RefineryRecipeManager INSTANCE = new RefineryRecipeManager(); + private SortedSet recipes = new TreeSet(); - public static void addRecipe(FluidStack ingredient, FluidStack result, int energy, int delay) { + @Override + public void addRecipe(FluidStack ingredient, FluidStack result, int energy, int delay) { addRecipe(ingredient, null, result, energy, delay); } - public static void addRecipe(FluidStack ingredient1, FluidStack ingredient2, FluidStack result, int energy, int delay) { - Recipe recipe = new Recipe(ingredient1, ingredient2, result, energy, delay); + @Override + public void addRecipe(FluidStack ingredient1, FluidStack ingredient2, FluidStack result, int energy, int delay) { + RefineryRecipe recipe = new RefineryRecipe(ingredient1, ingredient2, result, energy, delay); recipes.add(recipe); } - public static SortedSet getRecipes() { + @Override + public SortedSet getRecipes() { return Collections.unmodifiableSortedSet(recipes); } - public static Recipe findRefineryRecipe(FluidStack liquid1, FluidStack liquid2) { - for (Recipe recipe : recipes) { + @Override + public RefineryRecipe findRefineryRecipe(FluidStack liquid1, FluidStack liquid2) { + for (RefineryRecipe recipe : recipes) { if (recipe.matches(liquid1, liquid2)) return recipe; } @@ -39,25 +46,25 @@ public final class RefineryRecipes { return null; } - private RefineryRecipes() { + private RefineryRecipeManager() { } - public static final class Recipe implements Comparable { + public static final class RefineryRecipe implements IRefineryRecipe, Comparable { public final FluidStack ingredient1; public final FluidStack ingredient2; public final FluidStack result; - public final int energy; - public final int delay; + public final int energyCost; + public final int timeRequired; - private Recipe(FluidStack ingredient1, FluidStack ingredient2, FluidStack result, int energy, int delay) { + private RefineryRecipe(FluidStack ingredient1, FluidStack ingredient2, FluidStack result, int energy, int delay) { if (ingredient1 == null) throw new IllegalArgumentException("First Ingredient cannot be null!"); this.ingredient1 = ingredient1; this.ingredient2 = ingredient2; this.result = result; - this.energy = energy; - this.delay = delay; + this.energyCost = energy; + this.timeRequired = delay; } public boolean matches(FluidStack liquid1, FluidStack liquid2) { @@ -90,7 +97,7 @@ public final class RefineryRecipes { // We consider non-null < null in order that one-ingredient recipe is checked after // the failure of matching two-ingredient recipes which include that liquid. @Override - public int compareTo(Recipe other) { + public int compareTo(RefineryRecipe other) { if (other == null) return -1; else if (ingredient1.getFluid() != other.ingredient1.getFluid()) @@ -112,9 +119,9 @@ public final class RefineryRecipes { // equals() should be consistent with compareTo(). @Override public boolean equals(Object obj) { - return obj instanceof Recipe - && Objects.equal(ingredient1, ((Recipe) obj).ingredient1) - && Objects.equal(ingredient2, ((Recipe) obj).ingredient2); + return obj instanceof RefineryRecipe + && Objects.equal(ingredient1, ((RefineryRecipe) obj).ingredient1) + && Objects.equal(ingredient2, ((RefineryRecipe) obj).ingredient2); } // hashCode() should be overridden because equals() was overridden. @@ -122,5 +129,30 @@ public final class RefineryRecipes { public int hashCode() { return Objects.hashCode(ingredient1, ingredient2); } + + @Override + public FluidStack getIngredient1() { + return ingredient1; + } + + @Override + public FluidStack getIngredient2() { + return ingredient2; + } + + @Override + public FluidStack getResult() { + return result; + } + + @Override + public int getEnergyCost() { + return energyCost; + } + + @Override + public int getTimeRequired() { + return timeRequired; + } } } diff --git a/common/buildcraft/factory/TileRefinery.java b/common/buildcraft/factory/TileRefinery.java index a392f206..58eb6f8f 100644 --- a/common/buildcraft/factory/TileRefinery.java +++ b/common/buildcraft/factory/TileRefinery.java @@ -14,8 +14,8 @@ import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.PowerHandler; import buildcraft.api.power.PowerHandler.PowerReceiver; import buildcraft.api.power.PowerHandler.Type; -import buildcraft.api.recipes.RefineryRecipes; -import buildcraft.api.recipes.RefineryRecipes.Recipe; +import buildcraft.core.recipes.RefineryRecipeManager; +import buildcraft.core.recipes.RefineryRecipeManager.RefineryRecipe; import buildcraft.core.IMachine; import buildcraft.core.TileBuildCraft; import buildcraft.core.fluids.SingleUseTank; @@ -130,7 +130,7 @@ public class TileRefinery extends TileBuildCraft implements IFluidHandler, IPowe isActive = false; - Recipe currentRecipe = RefineryRecipes.findRefineryRecipe(tank1.getFluid(), tank2.getFluid()); + RefineryRecipe currentRecipe = RefineryRecipeManager.INSTANCE.findRefineryRecipe(tank1.getFluid(), tank2.getFluid()); if (currentRecipe == null) { decreaseAnimation(); @@ -149,16 +149,16 @@ public class TileRefinery extends TileBuildCraft implements IFluidHandler, IPowe isActive = true; - if (powerHandler.getEnergyStored() >= currentRecipe.energy) { + if (powerHandler.getEnergyStored() >= currentRecipe.energyCost) { increaseAnimation(); } else { decreaseAnimation(); } - if (!time.markTimeIfDelay(worldObj, currentRecipe.delay)) + if (!time.markTimeIfDelay(worldObj, currentRecipe.timeRequired)) return; - float energyUsed = powerHandler.useEnergy(currentRecipe.energy, currentRecipe.energy, true); + float energyUsed = powerHandler.useEnergy(currentRecipe.energyCost, currentRecipe.energyCost, true); if (energyUsed != 0) { if (consumeInput(currentRecipe.ingredient1) && consumeInput(currentRecipe.ingredient2)) { diff --git a/common/buildcraft/factory/gui/GuiRefinery.java b/common/buildcraft/factory/gui/GuiRefinery.java index a8a52d7c..c905ad4f 100644 --- a/common/buildcraft/factory/gui/GuiRefinery.java +++ b/common/buildcraft/factory/gui/GuiRefinery.java @@ -1,16 +1,14 @@ /** - * Copyright (c) SpaceToad, 2011 - * http://www.mod-buildcraft.com + * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com * - * BuildCraft is distributed under the terms of the Minecraft Mod Public - * License 1.0, or MMPL. Please check the contents of the license located in + * BuildCraft is distributed under the terms of the Minecraft Mod Public License + * 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ - package buildcraft.factory.gui; -import buildcraft.api.recipes.RefineryRecipes; -import buildcraft.api.recipes.RefineryRecipes.Recipe; +import buildcraft.core.recipes.RefineryRecipeManager; +import buildcraft.core.recipes.RefineryRecipeManager.RefineryRecipe; import buildcraft.core.DefaultProps; import buildcraft.core.gui.GuiAdvancedInterface; import buildcraft.core.utils.StringUtils; @@ -89,7 +87,7 @@ public class GuiRefinery extends GuiAdvancedInterface { } } else { TileRefinery ref = (TileRefinery) this.tile; - + if (position == 0) container.setFilter(position, ref.tank1.getFluidType()); else if (position == 1) @@ -116,7 +114,7 @@ public class GuiRefinery extends GuiAdvancedInterface { liquid1 = new FluidStack(filter1, FluidContainerRegistry.BUCKET_VOLUME); } - Recipe recipe = RefineryRecipes.findRefineryRecipe(liquid0, liquid1); + RefineryRecipe recipe = RefineryRecipeManager.INSTANCE.findRefineryRecipe(liquid0, liquid1); if (recipe != null) { ((FluidSlot) slots[2]).fluid = recipe.result.getFluid(); @@ -124,5 +122,4 @@ public class GuiRefinery extends GuiAdvancedInterface { ((FluidSlot) slots[2]).fluid = null; } } - } diff --git a/common/buildcraft/silicon/TileAssemblyTable.java b/common/buildcraft/silicon/TileAssemblyTable.java index f855de21..3c40745e 100644 --- a/common/buildcraft/silicon/TileAssemblyTable.java +++ b/common/buildcraft/silicon/TileAssemblyTable.java @@ -1,22 +1,20 @@ package buildcraft.silicon; +import buildcraft.core.recipes.AssemblyRecipeManager; import buildcraft.api.power.ILaserTarget; import buildcraft.api.gates.IAction; -import buildcraft.api.recipes.AssemblyRecipe; import buildcraft.core.DefaultProps; import buildcraft.core.IMachine; -import buildcraft.core.inventory.ITransactor; -import buildcraft.core.inventory.StackHelper; -import buildcraft.core.inventory.Transactor; -import buildcraft.core.inventory.filters.ArrayStackFilter; import buildcraft.core.network.PacketIds; import buildcraft.core.network.PacketNBT; import buildcraft.core.proxy.CoreProxy; import buildcraft.core.utils.Utils; +import buildcraft.core.recipes.AssemblyRecipeManager.AssemblyRecipe; import cpw.mods.fml.common.FMLCommonHandler; -import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.LinkedList; +import java.util.List; +import java.util.Set; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -31,11 +29,11 @@ import net.minecraftforge.common.ForgeDirection; public class TileAssemblyTable extends TileEntity implements IMachine, IInventory, ILaserTarget { ItemStack[] items = new ItemStack[12]; - LinkedHashSet plannedOutput = new LinkedHashSet(); + Set plannedOutput = new LinkedHashSet(); public AssemblyRecipe currentRecipe; - private float currentRequiredEnergy = 0; + private double currentRequiredEnergy = 0; private float energyStored = 0; - private float[] recentEnergy = new float[20]; + private double[] recentEnergy = new double[20]; private int tick = 0; private int recentEnergyAverage; @@ -60,13 +58,12 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor } } - public LinkedList getPotentialOutputs() { - LinkedList result = new LinkedList(); + public List getPotentialOutputs() { + List result = new LinkedList(); - for (AssemblyRecipe recipe : AssemblyRecipe.assemblyRecipes) { - if (recipe.canBeDone(items)) { + for (AssemblyRecipe recipe : AssemblyRecipeManager.INSTANCE.getRecipes()) { + if (recipe.canBeDone(this)) result.add(recipe); - } } return result; @@ -86,19 +83,19 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor if (currentRecipe == null) return; - if (!currentRecipe.canBeDone(items)) { + if (!currentRecipe.canBeDone(this)) { setNextCurrentRecipe(); if (currentRecipe == null) return; } - if (energyStored >= currentRecipe.energy) { + if (energyStored >= currentRecipe.getEnergyCost()) { energyStored = 0; - if (currentRecipe.canBeDone(items)) { + if (currentRecipe.canBeDone(this)) { - useItems(); + currentRecipe.useItems(this); ItemStack remaining = currentRecipe.output.copy(); remaining.stackSize -= Utils.addToRandomInventoryAround(worldObj, xCoord, yCoord, zCoord, remaining); @@ -118,31 +115,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor } } - private void useItems() { - ITransactor tran = Transactor.getTransactorFor(this); - Object[] input = currentRecipe.input; - for (int i = 0; i < input.length; i++) { - if (input[i] instanceof ItemStack) { - ItemStack requirement = (ItemStack) input[i]; - for (int num = 0; num < requirement.stackSize; num++) { - tran.remove(new ArrayStackFilter(requirement), ForgeDirection.UNKNOWN, true); - } - } else if (input[i] instanceof ArrayList) { - ArrayList oreList = (ArrayList) input[i]; - int required = (Integer) input[i + 1]; - for (ItemStack ore : oreList) { - for (int num = 0; num < required; num++) { - if (tran.remove(new ArrayStackFilter(ore), ForgeDirection.UNKNOWN, true) != null) - required--; - } - if (required <= 0) - break; - } - } - } - } - - public float getCompletionRatio(float ratio) { + public double getCompletionRatio(float ratio) { if (currentRecipe == null) return 0; else if (energyStored >= currentRequiredEnergy) @@ -214,21 +187,21 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor } @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); - Utils.readStacksFromNBT(nbttagcompound, "items", items); + Utils.readStacksFromNBT(nbt, "items", items); - energyStored = nbttagcompound.getFloat("energyStored"); + energyStored = nbt.getFloat("energyStored"); - NBTTagList list = nbttagcompound.getTagList("planned"); + NBTTagList list = nbt.getTagList("planned"); for (int i = 0; i < list.tagCount(); ++i) { NBTTagCompound cpt = (NBTTagCompound) list.tagAt(i); ItemStack stack = ItemStack.loadItemStackFromNBT(cpt); - for (AssemblyRecipe r : AssemblyRecipe.assemblyRecipes) { + for (AssemblyRecipe r : AssemblyRecipeManager.INSTANCE.getRecipes()) { if (r.output.itemID == stack.itemID && r.output.getItemDamage() == stack.getItemDamage()) { plannedOutput.add(r); break; @@ -236,8 +209,8 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor } } - if (nbttagcompound.hasKey("recipe")) { - ItemStack stack = ItemStack.loadItemStackFromNBT(nbttagcompound.getCompoundTag("recipe")); + if (nbt.hasKey("recipe")) { + ItemStack stack = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("recipe")); for (AssemblyRecipe r : plannedOutput) { if (r.output.itemID == stack.itemID && r.output.getItemDamage() == stack.getItemDamage()) { @@ -249,12 +222,12 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor } @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); - Utils.writeStacksToNBT(nbttagcompound, "items", items); + Utils.writeStacksToNBT(nbt, "items", items); - nbttagcompound.setFloat("energyStored", energyStored); + nbt.setFloat("energyStored", energyStored); NBTTagList list = new NBTTagList(); @@ -264,12 +237,12 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor list.appendTag(cpt); } - nbttagcompound.setTag("planned", list); + nbt.setTag("planned", list); if (currentRecipe != null) { NBTTagCompound recipe = new NBTTagCompound(); currentRecipe.output.writeToNBT(recipe); - nbttagcompound.setTag("recipe", recipe); + nbt.setTag("recipe", recipe); } } @@ -287,7 +260,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor private void setCurrentRecipe(AssemblyRecipe recipe) { this.currentRecipe = recipe; if (recipe != null) { - this.currentRequiredEnergy = recipe.energy; + this.currentRequiredEnergy = recipe.getEnergyCost(); } else { this.currentRequiredEnergy = 0; } @@ -321,14 +294,14 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor for (AssemblyRecipe recipe : plannedOutput) { if (recipe == currentRecipe) { takeNext = true; - } else if (takeNext && recipe.canBeDone(items)) { + } else if (takeNext && recipe.canBeDone(this)) { setCurrentRecipe(recipe); return; } } for (AssemblyRecipe recipe : plannedOutput) { - if (recipe.canBeDone(items)) { + if (recipe.canBeDone(this)) { setCurrentRecipe(recipe); return; } @@ -338,7 +311,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor } public void handleSelectionMessage(SelectionMessage message) { - for (AssemblyRecipe recipe : AssemblyRecipe.assemblyRecipes) { + for (AssemblyRecipe recipe : AssemblyRecipeManager.INSTANCE.getRecipes()) { if (recipe.output.isItemEqual(message.stack) && ItemStack.areItemStackTagsEqual(recipe.output, message.stack)) { if (message.select) { planOutput(recipe); @@ -352,12 +325,12 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor } public void sendSelectionTo(EntityPlayer player) { - for (AssemblyRecipe r : AssemblyRecipe.assemblyRecipes) { + for (AssemblyRecipe recipe : AssemblyRecipeManager.INSTANCE.getRecipes()) { SelectionMessage message = new SelectionMessage(); - message.stack = r.output; + message.stack = recipe.output; - if (isPlanned(r)) { + if (isPlanned(recipe)) { message.select = true; } else { message.select = false; @@ -446,7 +419,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor return energyStored; } - public float getRequiredEnergy() { + public double getRequiredEnergy() { return currentRequiredEnergy; } @@ -484,7 +457,6 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { - // TODO Auto-generated method stub return true; } diff --git a/common/buildcraft/silicon/gui/GuiAssemblyTable.java b/common/buildcraft/silicon/gui/GuiAssemblyTable.java index 51d06df1..c17ee9c8 100644 --- a/common/buildcraft/silicon/gui/GuiAssemblyTable.java +++ b/common/buildcraft/silicon/gui/GuiAssemblyTable.java @@ -1,16 +1,13 @@ /** - * Copyright (c) SpaceToad, 2011 - * http://www.mod-buildcraft.com + * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com * - * BuildCraft is distributed under the terms of the Minecraft Mod Public - * License 1.0, or MMPL. Please check the contents of the license located in + * BuildCraft is distributed under the terms of the Minecraft Mod Public License + * 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ - package buildcraft.silicon.gui; import buildcraft.BuildCraftCore; -import buildcraft.api.recipes.AssemblyRecipe; import buildcraft.core.CoreIconProvider; import buildcraft.core.DefaultProps; import buildcraft.core.gui.GuiAdvancedInterface; @@ -19,10 +16,11 @@ import buildcraft.core.network.PacketIds; import buildcraft.core.network.PacketNBT; import buildcraft.core.proxy.CoreProxy; import buildcraft.core.utils.StringUtils; +import buildcraft.core.recipes.AssemblyRecipeManager.AssemblyRecipe; import buildcraft.silicon.TileAssemblyTable; import buildcraft.silicon.TileAssemblyTable.SelectionMessage; import java.util.Iterator; -import java.util.LinkedList; +import java.util.List; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -30,10 +28,12 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; public class GuiAssemblyTable extends GuiAdvancedInterface { - private static final ResourceLocation TEXTURE = new ResourceLocation("buildcraft",DefaultProps.TEXTURE_PATH_GUI + "/assembly_table.png"); + + private static final ResourceLocation TEXTURE = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_GUI + "/assembly_table.png"); TileAssemblyTable assemblyTable; class AssemblyLedger extends Ledger { + int headerColour = 0xe1c92f; int subheaderColour = 0xaaafb8; int textColour = 0x000000; @@ -50,7 +50,7 @@ public class GuiAssemblyTable extends GuiAdvancedInterface { drawBackground(x, y); // Draw icon - mc.renderEngine.bindTexture(TextureMap.locationItemsTexture); + mc.renderEngine.bindTexture(TextureMap.locationItemsTexture); drawIcon(BuildCraftCore.iconProvider.getIcon(CoreIconProvider.ENERGY), x + 3, y + 4); if (!isFullyOpened()) @@ -70,7 +70,6 @@ public class GuiAssemblyTable extends GuiAdvancedInterface { public String getTooltip() { return String.format("%3.2f MJ/t", assemblyTable.getRecentEnergyAverage() / 100.0f); } - } class RecipeSlot extends AdvancedSlot { @@ -84,7 +83,7 @@ public class GuiAssemblyTable extends GuiAdvancedInterface { @Override public ItemStack getItemStack() { if (this.recipe != null) - return this.recipe.output; + return this.recipe.getOutput(); else return null; } @@ -118,15 +117,16 @@ public class GuiAssemblyTable extends GuiAdvancedInterface { } public void updateRecipes() { - LinkedList potentialRecipes = assemblyTable.getPotentialOutputs(); + List potentialRecipes = assemblyTable.getPotentialOutputs(); Iterator cur = potentialRecipes.iterator(); - for (int p = 0; p < 8; ++p) + for (int p = 0; p < 8; ++p) { if (cur.hasNext()) { ((RecipeSlot) slots[p]).recipe = cur.next(); } else { ((RecipeSlot) slots[p]).recipe = null; } + } } @Override @@ -140,7 +140,7 @@ public class GuiAssemblyTable extends GuiAdvancedInterface { @Override protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.renderEngine.bindTexture(TEXTURE); int cornerX = (width - xSize) / 2; int cornerY = (height - ySize) / 2; diff --git a/common/buildcraft/transport/ItemFacade.java b/common/buildcraft/transport/ItemFacade.java index eec7a89f..7c19f782 100644 --- a/common/buildcraft/transport/ItemFacade.java +++ b/common/buildcraft/transport/ItemFacade.java @@ -2,7 +2,7 @@ package buildcraft.transport; import buildcraft.BuildCraftTransport; import buildcraft.api.core.Position; -import buildcraft.api.recipes.AssemblyRecipe; +import buildcraft.api.recipes.BuildcraftRecipes; import buildcraft.core.CreativeTabBuildCraft; import buildcraft.core.ItemBuildCraft; import buildcraft.core.proxy.CoreProxy; @@ -160,8 +160,7 @@ public class ItemFacade extends ItemBuildCraft { facade6.stackSize = 6; // 3 Structurepipes + this block makes 6 facades - AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeStructureCobblestone, 3), itemStack}, - 8000, facade6)); + BuildcraftRecipes.assemblyTable.addRecipe(8000, facade6, new ItemStack(BuildCraftTransport.pipeStructureCobblestone, 3), itemStack); if (itemStack.itemID < Block.blocksList.length && Block.blocksList[itemStack.itemID] != null) { Block bl = Block.blocksList[itemStack.itemID]; diff --git a/common/buildcraft/transport/pipes/PipeItemsEmerald.java b/common/buildcraft/transport/pipes/PipeItemsEmerald.java index 2c13ee40..06ec3ae2 100644 --- a/common/buildcraft/transport/pipes/PipeItemsEmerald.java +++ b/common/buildcraft/transport/pipes/PipeItemsEmerald.java @@ -19,7 +19,6 @@ import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.ForgeDirection; import buildcraft.BuildCraftTransport; -import buildcraft.api.inventory.ISelectiveInventory; import buildcraft.api.inventory.ISpecialInventory; import buildcraft.core.GuiIds; import buildcraft.core.gui.buttons.IButtonTextureSet; @@ -108,23 +107,24 @@ public class PipeItemsEmerald extends PipeItemsWood implements IClientState, IGu @Override public ItemStack[] checkExtract(IInventory inventory, boolean doRemove, ForgeDirection from) { - /* ISELECTIVEINVENTORY */ + // ISELECTIVEINVENTORY // non blocking mode is not implemented for ISelectiveInventory yet - if (inventory instanceof ISelectiveInventory) { - ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored()); - if (doRemove) { - for (ItemStack stack : stacks) { - if (stack != null) { - powerHandler.useEnergy(stack.stackSize, stack.stackSize, true); - } - } - incrementFilter(); - } - return stacks; +// if (inventory instanceof ISelectiveInventory) { +// ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored()); +// if (doRemove) { +// for (ItemStack stack : stacks) { +// if (stack != null) { +// powerHandler.useEnergy(stack.stackSize, stack.stackSize, true); +// } +// } +// incrementFilter(); +// } +// return stacks; +// } else - /* ISPECIALINVENTORY */ - // non blocking mode is not needed for ISpecialInventory since its not round robin anyway - } else if (inventory instanceof ISpecialInventory) { + // ISPECIALINVENTORY + // non blocking mode is not needed for ISpecialInventory since its not round robin anyway + if (inventory instanceof ISpecialInventory) { ItemStack[] stacks = ((ISpecialInventory) inventory).extractItem(false, from, (int) powerHandler.getEnergyStored()); if (stacks != null) { for (ItemStack stack : stacks) { diff --git a/common/buildcraft/transport/pipes/PipeItemsEmzuli.java b/common/buildcraft/transport/pipes/PipeItemsEmzuli.java index cb082938..69572f06 100644 --- a/common/buildcraft/transport/pipes/PipeItemsEmzuli.java +++ b/common/buildcraft/transport/pipes/PipeItemsEmzuli.java @@ -21,7 +21,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.ForgeDirection; import buildcraft.BuildCraftTransport; import buildcraft.api.gates.IAction; -import buildcraft.api.inventory.ISelectiveInventory; import buildcraft.api.inventory.ISpecialInventory; import buildcraft.core.GuiIds; import buildcraft.core.inventory.SimpleInventory; @@ -103,19 +102,20 @@ public class PipeItemsEmzuli extends PipeItemsWood implements IGuiReturnHandler } /* ISELECTIVEINVENTORY */ - if (inventory instanceof ISelectiveInventory) { - ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored()); - if (doRemove) { - for (ItemStack stack : stacks) { - if (stack != null) { - powerHandler.useEnergy(stack.stackSize, stack.stackSize, true); - } - } - } - return stacks; +// if (inventory instanceof ISelectiveInventory) { +// ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored()); +// if (doRemove) { +// for (ItemStack stack : stacks) { +// if (stack != null) { +// powerHandler.useEnergy(stack.stackSize, stack.stackSize, true); +// } +// } +// } +// return stacks; +// } else /* ISPECIALINVENTORY */ - } else if (inventory instanceof ISpecialInventory) { + if (inventory instanceof ISpecialInventory) { ItemStack[] stacks = ((ISpecialInventory) inventory).extractItem(false, from, (int) powerHandler.getEnergyStored()); if (stacks != null) { for (ItemStack stack : stacks) {