Clean up Recipe API

This commit is contained in:
CovertJaguar 2013-12-01 21:57:31 -08:00
parent 09ef987875
commit cc0298ce5b
20 changed files with 495 additions and 421 deletions

View file

@ -1,14 +1,12 @@
/** /**
* BuildCraft is open-source. It is distributed under the terms of the * BuildCraft is open-source. It is distributed under the terms of the
* BuildCraft Open Source License. It grants rights to read, modify, compile * BuildCraft Open Source License. It grants rights to read, modify, compile or
* or run the code. It does *NOT* grant the right to redistribute this software * run the code. It does *NOT* grant the right to redistribute this software or
* or its modifications in any form, binary or source, except if expressively * its modifications in any form, binary or source, except if expressively
* granted by the copyright holder. * granted by the copyright holder.
*/ */
package buildcraft; package buildcraft;
import java.io.File; import java.io.File;
import java.util.TreeMap; import java.util.TreeMap;
@ -29,6 +27,8 @@ import net.minecraftforge.fluids.IFluidBlock;
import buildcraft.api.core.BuildCraftAPI; import buildcraft.api.core.BuildCraftAPI;
import buildcraft.api.core.IIconProvider; import buildcraft.api.core.IIconProvider;
import buildcraft.api.gates.ActionManager; import buildcraft.api.gates.ActionManager;
import buildcraft.api.recipes.BuildcraftRecipes;
import buildcraft.core.recipes.RefineryRecipeManager;
import buildcraft.core.BlockIndex; import buildcraft.core.BlockIndex;
import buildcraft.core.BlockSpring; import buildcraft.core.BlockSpring;
import buildcraft.core.BuildCraftConfiguration; import buildcraft.core.BuildCraftConfiguration;
@ -64,6 +64,7 @@ import buildcraft.core.triggers.TriggerInventoryLevel;
import buildcraft.core.triggers.TriggerMachine; import buildcraft.core.triggers.TriggerMachine;
import buildcraft.core.utils.BCLog; import buildcraft.core.utils.BCLog;
import buildcraft.core.utils.Localization; import buildcraft.core.utils.Localization;
import buildcraft.core.recipes.AssemblyRecipeManager;
import buildcraft.transport.triggers.TriggerRedstoneInput; import buildcraft.transport.triggers.TriggerRedstoneInput;
import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.EventHandler;
@ -83,42 +84,31 @@ 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,)") @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 class BuildCraftCore {
public static enum RenderMode { public static enum RenderMode {
Full, NoDynamic Full, NoDynamic
}; };
public static RenderMode render = RenderMode.Full; public static RenderMode render = RenderMode.Full;
public static boolean debugMode = false; public static boolean debugMode = false;
public static boolean modifyWorld = false; public static boolean modifyWorld = false;
public static boolean trackNetworkUsage = false; public static boolean trackNetworkUsage = false;
public static boolean colorBlindMode = false; public static boolean colorBlindMode = false;
public static boolean dropBrokenBlocks = true; // Set to false to prevent the filler from dropping broken blocks. public static boolean dropBrokenBlocks = true; // Set to false to prevent the filler from dropping broken blocks.
public static int itemLifespan = 1200; public static int itemLifespan = 1200;
public static int updateFactor = 10; public static int updateFactor = 10;
public static long longUpdateFactor = 40; public static long longUpdateFactor = 40;
public static BuildCraftConfiguration mainConfiguration; public static BuildCraftConfiguration mainConfiguration;
public static TreeMap<BlockIndex, PacketUpdate> bufferedDescriptions = new TreeMap<BlockIndex, PacketUpdate>(); public static TreeMap<BlockIndex, PacketUpdate> bufferedDescriptions = new TreeMap<BlockIndex, PacketUpdate>();
public static final int trackedPassiveEntityId = 156; public static final int trackedPassiveEntityId = 156;
public static boolean continuousCurrentModel; public static boolean continuousCurrentModel;
public static Block springBlock; public static Block springBlock;
public static Item woodenGearItem; public static Item woodenGearItem;
public static Item stoneGearItem; public static Item stoneGearItem;
public static Item ironGearItem; public static Item ironGearItem;
public static Item goldGearItem; public static Item goldGearItem;
public static Item diamondGearItem; public static Item diamondGearItem;
public static Item wrenchItem; public static Item wrenchItem;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public static Icon redLaserTexture; public static Icon redLaserTexture;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@ -127,15 +117,12 @@ public class BuildCraftCore {
public static Icon stripesLaserTexture; public static Icon stripesLaserTexture;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public static Icon transparentTexture; public static Icon transparentTexture;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public static IIconProvider iconProvider; public static IIconProvider iconProvider;
public static int blockByEntityModel; public static int blockByEntityModel;
public static int legacyPipeModel; public static int legacyPipeModel;
public static int markerModel; public static int markerModel;
public static int oilModel; public static int oilModel;
public static BCTrigger triggerMachineActive = new TriggerMachine(DefaultProps.TRIGGER_MACHINE_ACTIVE, true); 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 triggerMachineInactive = new TriggerMachine(DefaultProps.TRIGGER_MACHINE_INACTIVE, false);
public static BCTrigger triggerEmptyInventory = new TriggerInventory(DefaultProps.TRIGGER_EMPTY_INVENTORY, TriggerInventory.State.Empty); public static BCTrigger triggerEmptyInventory = new TriggerInventory(DefaultProps.TRIGGER_EMPTY_INVENTORY, TriggerInventory.State.Empty);
@ -148,22 +135,17 @@ public class BuildCraftCore {
public static BCTrigger triggerFullFluid = new TriggerFluidContainer(DefaultProps.TRIGGER_FULL_LIQUID, TriggerFluidContainer.State.Full); 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 triggerRedstoneActive = new TriggerRedstoneInput(DefaultProps.TRIGGER_REDSTONE_ACTIVE, true);
public static BCTrigger triggerRedstoneInactive = new TriggerRedstoneInput(DefaultProps.TRIGGER_REDSTONE_INACTIVE, false); public static BCTrigger triggerRedstoneInactive = new TriggerRedstoneInput(DefaultProps.TRIGGER_REDSTONE_INACTIVE, false);
public static BCTrigger triggerInventoryBelow25 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_25); public static BCTrigger triggerInventoryBelow25 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_25);
public static BCTrigger triggerInventoryBelow50 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_50); public static BCTrigger triggerInventoryBelow50 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_50);
public static BCTrigger triggerInventoryBelow75 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_75); public static BCTrigger triggerInventoryBelow75 = new TriggerInventoryLevel(TriggerInventoryLevel.TriggerType.BELOW_75);
public static BCAction actionRedstone = new ActionRedstoneOutput(DefaultProps.ACTION_REDSTONE); public static BCAction actionRedstone = new ActionRedstoneOutput(DefaultProps.ACTION_REDSTONE);
public static BCAction actionOn = new ActionMachineControl(DefaultProps.ACTION_ON, Mode.On); 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 actionOff = new ActionMachineControl(DefaultProps.ACTION_OFF, Mode.Off);
public static BCAction actionLoop = new ActionMachineControl(DefaultProps.ACTION_LOOP, Mode.Loop); public static BCAction actionLoop = new ActionMachineControl(DefaultProps.ACTION_LOOP, Mode.Loop);
public static boolean loadDefaultRecipes = true; public static boolean loadDefaultRecipes = true;
public static boolean forcePneumaticPower = true; public static boolean forcePneumaticPower = true;
public static boolean consumeWaterSources = false; public static boolean consumeWaterSources = false;
public static BptItem[] itemBptProps = new BptItem[Item.itemsList.length]; public static BptItem[] itemBptProps = new BptItem[Item.itemsList.length];
@Instance("BuildCraft|Core") @Instance("BuildCraft|Core")
public static BuildCraftCore instance; public static BuildCraftCore instance;
@ -172,6 +154,9 @@ public class BuildCraftCore {
BCLog.initLog(); BCLog.initLog();
BuildcraftRecipes.assemblyTable = AssemblyRecipeManager.INSTANCE;
BuildcraftRecipes.refinery = RefineryRecipeManager.INSTANCE;
mainConfiguration = new BuildCraftConfiguration(new File(evt.getModConfigurationDirectory(), "buildcraft/main.conf")); mainConfiguration = new BuildCraftConfiguration(new File(evt.getModConfigurationDirectory(), "buildcraft/main.conf"));
try { try {
mainConfiguration.load(); mainConfiguration.load();

View file

@ -9,7 +9,8 @@ package buildcraft;
import buildcraft.api.fuels.IronEngineCoolant; import buildcraft.api.fuels.IronEngineCoolant;
import buildcraft.api.fuels.IronEngineFuel; 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.BlockIndex;
import buildcraft.core.BlockSpring; import buildcraft.core.BlockSpring;
import buildcraft.core.DefaultProps; import buildcraft.core.DefaultProps;
@ -81,7 +82,7 @@ public class BuildCraftEnergy {
public static Item bucketFuel; public static Item bucketFuel;
public static Item fuel; public static Item fuel;
public static boolean canOilBurn; public static boolean canOilBurn;
public static double oilWellScalar; public static double oilWellScalar = 1.0;
public static TreeMap<BlockIndex, Integer> saturationStored = new TreeMap<BlockIndex, Integer>(); public static TreeMap<BlockIndex, Integer> saturationStored = new TreeMap<BlockIndex, Integer>();
public static BCTrigger triggerBlueEngineHeat = new TriggerEngineHeat(DefaultProps.TRIGGER_BLUE_ENGINE_HEAT, EnergyStage.BLUE, "buildcraft.engine.stage.blue"); 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"); 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); BucketHandler.INSTANCE.buckets.put(blockFuel, bucketFuel);
MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); 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 // Iron Engine Fuels
// IronEngineFuel.addFuel("lava", 1, 20000); // IronEngineFuel.addFuel("lava", 1, 20000);

View file

@ -9,7 +9,8 @@ package buildcraft;
import buildcraft.api.bptblocks.BptBlockInventory; import buildcraft.api.bptblocks.BptBlockInventory;
import buildcraft.api.bptblocks.BptBlockRotateMeta; 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.DefaultProps;
import buildcraft.core.InterModComms; import buildcraft.core.InterModComms;
import buildcraft.core.ItemRedstoneChipset; import buildcraft.core.ItemRedstoneChipset;
@ -141,91 +142,61 @@ public class BuildCraftSilicon {
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6)}); new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6)});
// / REDSTONE CHIPSETS // / 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"); 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"); 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"); 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"); 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"); CoreProxy.proxy.addName(new ItemStack(redstoneChipset, 1, 4), "Pulsating Chipset");
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 // / REDSTONE GATES
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(redstoneChipset, 1, 0)}, 20000, new ItemStack(
BuildCraftTransport.pipeGate, 1, 0)));
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 0), "Gate"); 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"); 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"); 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"); CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 5), "Diamond AND Gate");
AssemblyRecipe.assemblyRecipes CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 2), "Iron OR Gate");
.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 5), new ItemStack(redstoneChipset, 1, 4), CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 4), "Gold OR Gate");
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, 6), "Diamond OR Gate"); CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 6), "Diamond OR Gate");
AssemblyRecipe.assemblyRecipes CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 0), "Autarchic Gate");
.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeGate, 1, 6), new ItemStack(redstoneChipset, 1, 4), CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), "Autarchic Iron AND Gate");
new ItemStack(redstoneChipset, 1, 1)}, 80000, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6))); 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"); 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 @EventHandler

View file

@ -10,7 +10,8 @@ package buildcraft;
import buildcraft.api.core.IIconProvider; import buildcraft.api.core.IIconProvider;
import buildcraft.api.filler.IFillerPattern; import buildcraft.api.filler.IFillerPattern;
import buildcraft.api.gates.ActionManager; 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.IExtractionHandler;
import buildcraft.api.transport.IPipe; import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.PipeManager; 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 // Assembly table recipes, moved from PreInit phase to Init, all mods should be done adding to the OreDictionary by now
try { try {
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(500, new ItemStack(redPipeWire, 8), "dyeRed", 1, new ItemStack(Item.redstone), new ItemStack(Item.ingotIron))); BuildcraftRecipes.assemblyTable.addRecipe(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))); BuildcraftRecipes.assemblyTable.addRecipe(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))); BuildcraftRecipes.assemblyTable.addRecipe(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))); BuildcraftRecipes.assemblyTable.addRecipe(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(1000, new ItemStack(plugItem, 8), new ItemStack(pipeStructureCobblestone));
} catch (Error error) { } catch (Error error) {
BCLog.logErrorAPI("Buildcraft", error, AssemblyRecipe.class); BCLog.logErrorAPI("Buildcraft", error, BuildcraftRecipes.class);
} }
} }

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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<AssemblyRecipe> assemblyRecipes = new LinkedList<AssemblyRecipe>();
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<ItemStack> oreList = (ArrayList<ItemStack>) 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;
}
}

View file

@ -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 <http://www.railcraft.info/>
*/
public final class BuildcraftRecipes {
public static IAssemblyRecipeManager assemblyTable;
public static IRefineryRecipeManager refinery;
private BuildcraftRecipes() {
}
}

View file

@ -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 <http://www.railcraft.info/>
*/
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<? extends IAssemblyRecipe> getRecipes();
}

View file

@ -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 <http://www.railcraft.info/>
*/
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<? extends IRefineryRecipe> getRecipes();
IRefineryRecipe findRefineryRecipe(FluidStack ingredient1, FluidStack ingredient2);
public static interface IRefineryRecipe {
FluidStack getIngredient1();
FluidStack getIngredient2();
FluidStack getResult();
int getEnergyCost();
int getTimeRequired();
}
}

View file

@ -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; package buildcraft.api.recipes;
import cpw.mods.fml.common.API; import cpw.mods.fml.common.API;

View file

@ -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<AssemblyRecipe> assemblyRecipes = new LinkedList<AssemblyRecipe>();
@Override
public void addRecipe(double energyCost, ItemStack output, Object... input) {
assemblyRecipes.add(new AssemblyRecipe(output, energyCost, input));
}
@Override
public List<AssemblyRecipe> 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<ItemStack> oreList = (List<ItemStack>) 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<ItemStack> oreList = (List<ItemStack>) 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;
}
}
}
}
}
}

View file

@ -5,33 +5,40 @@
* 1.0, or MMPL. Please check the contents of the license located in * 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * 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 com.google.common.base.Objects;
import java.util.Collections; import java.util.Collections;
import java.util.SortedSet; import java.util.SortedSet;
import java.util.TreeSet; import java.util.TreeSet;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
public final class RefineryRecipes { public final class RefineryRecipeManager implements IRefineryRecipeManager {
private static SortedSet<Recipe> recipes = new TreeSet<Recipe>(); public static final RefineryRecipeManager INSTANCE = new RefineryRecipeManager();
private SortedSet<RefineryRecipe> recipes = new TreeSet<RefineryRecipe>();
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); addRecipe(ingredient, null, result, energy, delay);
} }
public static void addRecipe(FluidStack ingredient1, FluidStack ingredient2, FluidStack result, int energy, int delay) { @Override
Recipe recipe = new Recipe(ingredient1, ingredient2, result, energy, delay); 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); recipes.add(recipe);
} }
public static SortedSet<Recipe> getRecipes() { @Override
public SortedSet<RefineryRecipe> getRecipes() {
return Collections.unmodifiableSortedSet(recipes); return Collections.unmodifiableSortedSet(recipes);
} }
public static Recipe findRefineryRecipe(FluidStack liquid1, FluidStack liquid2) { @Override
for (Recipe recipe : recipes) { public RefineryRecipe findRefineryRecipe(FluidStack liquid1, FluidStack liquid2) {
for (RefineryRecipe recipe : recipes) {
if (recipe.matches(liquid1, liquid2)) if (recipe.matches(liquid1, liquid2))
return recipe; return recipe;
} }
@ -39,25 +46,25 @@ public final class RefineryRecipes {
return null; return null;
} }
private RefineryRecipes() { private RefineryRecipeManager() {
} }
public static final class Recipe implements Comparable<Recipe> { public static final class RefineryRecipe implements IRefineryRecipe, Comparable<RefineryRecipe> {
public final FluidStack ingredient1; public final FluidStack ingredient1;
public final FluidStack ingredient2; public final FluidStack ingredient2;
public final FluidStack result; public final FluidStack result;
public final int energy; public final int energyCost;
public final int delay; 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) if (ingredient1 == null)
throw new IllegalArgumentException("First Ingredient cannot be null!"); throw new IllegalArgumentException("First Ingredient cannot be null!");
this.ingredient1 = ingredient1; this.ingredient1 = ingredient1;
this.ingredient2 = ingredient2; this.ingredient2 = ingredient2;
this.result = result; this.result = result;
this.energy = energy; this.energyCost = energy;
this.delay = delay; this.timeRequired = delay;
} }
public boolean matches(FluidStack liquid1, FluidStack liquid2) { 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 // 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. // the failure of matching two-ingredient recipes which include that liquid.
@Override @Override
public int compareTo(Recipe other) { public int compareTo(RefineryRecipe other) {
if (other == null) if (other == null)
return -1; return -1;
else if (ingredient1.getFluid() != other.ingredient1.getFluid()) else if (ingredient1.getFluid() != other.ingredient1.getFluid())
@ -112,9 +119,9 @@ public final class RefineryRecipes {
// equals() should be consistent with compareTo(). // equals() should be consistent with compareTo().
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
return obj instanceof Recipe return obj instanceof RefineryRecipe
&& Objects.equal(ingredient1, ((Recipe) obj).ingredient1) && Objects.equal(ingredient1, ((RefineryRecipe) obj).ingredient1)
&& Objects.equal(ingredient2, ((Recipe) obj).ingredient2); && Objects.equal(ingredient2, ((RefineryRecipe) obj).ingredient2);
} }
// hashCode() should be overridden because equals() was overridden. // hashCode() should be overridden because equals() was overridden.
@ -122,5 +129,30 @@ public final class RefineryRecipes {
public int hashCode() { public int hashCode() {
return Objects.hashCode(ingredient1, ingredient2); 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;
}
} }
} }

View file

@ -14,8 +14,8 @@ import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerHandler; import buildcraft.api.power.PowerHandler;
import buildcraft.api.power.PowerHandler.PowerReceiver; import buildcraft.api.power.PowerHandler.PowerReceiver;
import buildcraft.api.power.PowerHandler.Type; import buildcraft.api.power.PowerHandler.Type;
import buildcraft.api.recipes.RefineryRecipes; import buildcraft.core.recipes.RefineryRecipeManager;
import buildcraft.api.recipes.RefineryRecipes.Recipe; import buildcraft.core.recipes.RefineryRecipeManager.RefineryRecipe;
import buildcraft.core.IMachine; import buildcraft.core.IMachine;
import buildcraft.core.TileBuildCraft; import buildcraft.core.TileBuildCraft;
import buildcraft.core.fluids.SingleUseTank; import buildcraft.core.fluids.SingleUseTank;
@ -130,7 +130,7 @@ public class TileRefinery extends TileBuildCraft implements IFluidHandler, IPowe
isActive = false; isActive = false;
Recipe currentRecipe = RefineryRecipes.findRefineryRecipe(tank1.getFluid(), tank2.getFluid()); RefineryRecipe currentRecipe = RefineryRecipeManager.INSTANCE.findRefineryRecipe(tank1.getFluid(), tank2.getFluid());
if (currentRecipe == null) { if (currentRecipe == null) {
decreaseAnimation(); decreaseAnimation();
@ -149,16 +149,16 @@ public class TileRefinery extends TileBuildCraft implements IFluidHandler, IPowe
isActive = true; isActive = true;
if (powerHandler.getEnergyStored() >= currentRecipe.energy) { if (powerHandler.getEnergyStored() >= currentRecipe.energyCost) {
increaseAnimation(); increaseAnimation();
} else { } else {
decreaseAnimation(); decreaseAnimation();
} }
if (!time.markTimeIfDelay(worldObj, currentRecipe.delay)) if (!time.markTimeIfDelay(worldObj, currentRecipe.timeRequired))
return; return;
float energyUsed = powerHandler.useEnergy(currentRecipe.energy, currentRecipe.energy, true); float energyUsed = powerHandler.useEnergy(currentRecipe.energyCost, currentRecipe.energyCost, true);
if (energyUsed != 0) { if (energyUsed != 0) {
if (consumeInput(currentRecipe.ingredient1) && consumeInput(currentRecipe.ingredient2)) { if (consumeInput(currentRecipe.ingredient1) && consumeInput(currentRecipe.ingredient2)) {

View file

@ -1,16 +1,14 @@
/** /**
* Copyright (c) SpaceToad, 2011 * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com
* http://www.mod-buildcraft.com
* *
* BuildCraft is distributed under the terms of the Minecraft Mod Public * BuildCraft is distributed under the terms of the Minecraft Mod Public License
* License 1.0, or MMPL. Please check the contents of the license located in * 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * http://www.mod-buildcraft.com/MMPL-1.0.txt
*/ */
package buildcraft.factory.gui; package buildcraft.factory.gui;
import buildcraft.api.recipes.RefineryRecipes; import buildcraft.core.recipes.RefineryRecipeManager;
import buildcraft.api.recipes.RefineryRecipes.Recipe; import buildcraft.core.recipes.RefineryRecipeManager.RefineryRecipe;
import buildcraft.core.DefaultProps; import buildcraft.core.DefaultProps;
import buildcraft.core.gui.GuiAdvancedInterface; import buildcraft.core.gui.GuiAdvancedInterface;
import buildcraft.core.utils.StringUtils; import buildcraft.core.utils.StringUtils;
@ -116,7 +114,7 @@ public class GuiRefinery extends GuiAdvancedInterface {
liquid1 = new FluidStack(filter1, FluidContainerRegistry.BUCKET_VOLUME); liquid1 = new FluidStack(filter1, FluidContainerRegistry.BUCKET_VOLUME);
} }
Recipe recipe = RefineryRecipes.findRefineryRecipe(liquid0, liquid1); RefineryRecipe recipe = RefineryRecipeManager.INSTANCE.findRefineryRecipe(liquid0, liquid1);
if (recipe != null) { if (recipe != null) {
((FluidSlot) slots[2]).fluid = recipe.result.getFluid(); ((FluidSlot) slots[2]).fluid = recipe.result.getFluid();
@ -124,5 +122,4 @@ public class GuiRefinery extends GuiAdvancedInterface {
((FluidSlot) slots[2]).fluid = null; ((FluidSlot) slots[2]).fluid = null;
} }
} }
} }

View file

@ -1,22 +1,20 @@
package buildcraft.silicon; package buildcraft.silicon;
import buildcraft.core.recipes.AssemblyRecipeManager;
import buildcraft.api.power.ILaserTarget; import buildcraft.api.power.ILaserTarget;
import buildcraft.api.gates.IAction; import buildcraft.api.gates.IAction;
import buildcraft.api.recipes.AssemblyRecipe;
import buildcraft.core.DefaultProps; import buildcraft.core.DefaultProps;
import buildcraft.core.IMachine; 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.PacketIds;
import buildcraft.core.network.PacketNBT; import buildcraft.core.network.PacketNBT;
import buildcraft.core.proxy.CoreProxy; import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.Utils; import buildcraft.core.utils.Utils;
import buildcraft.core.recipes.AssemblyRecipeManager.AssemblyRecipe;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
@ -31,11 +29,11 @@ import net.minecraftforge.common.ForgeDirection;
public class TileAssemblyTable extends TileEntity implements IMachine, IInventory, ILaserTarget { public class TileAssemblyTable extends TileEntity implements IMachine, IInventory, ILaserTarget {
ItemStack[] items = new ItemStack[12]; ItemStack[] items = new ItemStack[12];
LinkedHashSet<AssemblyRecipe> plannedOutput = new LinkedHashSet<AssemblyRecipe>(); Set<AssemblyRecipe> plannedOutput = new LinkedHashSet<AssemblyRecipe>();
public AssemblyRecipe currentRecipe; public AssemblyRecipe currentRecipe;
private float currentRequiredEnergy = 0; private double currentRequiredEnergy = 0;
private float energyStored = 0; private float energyStored = 0;
private float[] recentEnergy = new float[20]; private double[] recentEnergy = new double[20];
private int tick = 0; private int tick = 0;
private int recentEnergyAverage; private int recentEnergyAverage;
@ -60,14 +58,13 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
} }
} }
public LinkedList<AssemblyRecipe> getPotentialOutputs() { public List<AssemblyRecipe> getPotentialOutputs() {
LinkedList<AssemblyRecipe> result = new LinkedList<AssemblyRecipe>(); List<AssemblyRecipe> result = new LinkedList<AssemblyRecipe>();
for (AssemblyRecipe recipe : AssemblyRecipe.assemblyRecipes) { for (AssemblyRecipe recipe : AssemblyRecipeManager.INSTANCE.getRecipes()) {
if (recipe.canBeDone(items)) { if (recipe.canBeDone(this))
result.add(recipe); result.add(recipe);
} }
}
return result; return result;
} }
@ -86,19 +83,19 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
if (currentRecipe == null) if (currentRecipe == null)
return; return;
if (!currentRecipe.canBeDone(items)) { if (!currentRecipe.canBeDone(this)) {
setNextCurrentRecipe(); setNextCurrentRecipe();
if (currentRecipe == null) if (currentRecipe == null)
return; return;
} }
if (energyStored >= currentRecipe.energy) { if (energyStored >= currentRecipe.getEnergyCost()) {
energyStored = 0; energyStored = 0;
if (currentRecipe.canBeDone(items)) { if (currentRecipe.canBeDone(this)) {
useItems(); currentRecipe.useItems(this);
ItemStack remaining = currentRecipe.output.copy(); ItemStack remaining = currentRecipe.output.copy();
remaining.stackSize -= Utils.addToRandomInventoryAround(worldObj, xCoord, yCoord, zCoord, remaining); remaining.stackSize -= Utils.addToRandomInventoryAround(worldObj, xCoord, yCoord, zCoord, remaining);
@ -118,31 +115,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
} }
} }
private void useItems() { public double getCompletionRatio(float ratio) {
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<ItemStack> oreList = (ArrayList<ItemStack>) 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) {
if (currentRecipe == null) if (currentRecipe == null)
return 0; return 0;
else if (energyStored >= currentRequiredEnergy) else if (energyStored >= currentRequiredEnergy)
@ -214,21 +187,21 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
} }
@Override @Override
public void readFromNBT(NBTTagCompound nbttagcompound) { public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbttagcompound); 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) { for (int i = 0; i < list.tagCount(); ++i) {
NBTTagCompound cpt = (NBTTagCompound) list.tagAt(i); NBTTagCompound cpt = (NBTTagCompound) list.tagAt(i);
ItemStack stack = ItemStack.loadItemStackFromNBT(cpt); 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()) { if (r.output.itemID == stack.itemID && r.output.getItemDamage() == stack.getItemDamage()) {
plannedOutput.add(r); plannedOutput.add(r);
break; break;
@ -236,8 +209,8 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
} }
} }
if (nbttagcompound.hasKey("recipe")) { if (nbt.hasKey("recipe")) {
ItemStack stack = ItemStack.loadItemStackFromNBT(nbttagcompound.getCompoundTag("recipe")); ItemStack stack = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("recipe"));
for (AssemblyRecipe r : plannedOutput) { for (AssemblyRecipe r : plannedOutput) {
if (r.output.itemID == stack.itemID && r.output.getItemDamage() == stack.getItemDamage()) { if (r.output.itemID == stack.itemID && r.output.getItemDamage() == stack.getItemDamage()) {
@ -249,12 +222,12 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
} }
@Override @Override
public void writeToNBT(NBTTagCompound nbttagcompound) { public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbttagcompound); 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(); NBTTagList list = new NBTTagList();
@ -264,12 +237,12 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
list.appendTag(cpt); list.appendTag(cpt);
} }
nbttagcompound.setTag("planned", list); nbt.setTag("planned", list);
if (currentRecipe != null) { if (currentRecipe != null) {
NBTTagCompound recipe = new NBTTagCompound(); NBTTagCompound recipe = new NBTTagCompound();
currentRecipe.output.writeToNBT(recipe); 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) { private void setCurrentRecipe(AssemblyRecipe recipe) {
this.currentRecipe = recipe; this.currentRecipe = recipe;
if (recipe != null) { if (recipe != null) {
this.currentRequiredEnergy = recipe.energy; this.currentRequiredEnergy = recipe.getEnergyCost();
} else { } else {
this.currentRequiredEnergy = 0; this.currentRequiredEnergy = 0;
} }
@ -321,14 +294,14 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
for (AssemblyRecipe recipe : plannedOutput) { for (AssemblyRecipe recipe : plannedOutput) {
if (recipe == currentRecipe) { if (recipe == currentRecipe) {
takeNext = true; takeNext = true;
} else if (takeNext && recipe.canBeDone(items)) { } else if (takeNext && recipe.canBeDone(this)) {
setCurrentRecipe(recipe); setCurrentRecipe(recipe);
return; return;
} }
} }
for (AssemblyRecipe recipe : plannedOutput) { for (AssemblyRecipe recipe : plannedOutput) {
if (recipe.canBeDone(items)) { if (recipe.canBeDone(this)) {
setCurrentRecipe(recipe); setCurrentRecipe(recipe);
return; return;
} }
@ -338,7 +311,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
} }
public void handleSelectionMessage(SelectionMessage message) { 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 (recipe.output.isItemEqual(message.stack) && ItemStack.areItemStackTagsEqual(recipe.output, message.stack)) {
if (message.select) { if (message.select) {
planOutput(recipe); planOutput(recipe);
@ -352,12 +325,12 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
} }
public void sendSelectionTo(EntityPlayer player) { public void sendSelectionTo(EntityPlayer player) {
for (AssemblyRecipe r : AssemblyRecipe.assemblyRecipes) { for (AssemblyRecipe recipe : AssemblyRecipeManager.INSTANCE.getRecipes()) {
SelectionMessage message = new SelectionMessage(); SelectionMessage message = new SelectionMessage();
message.stack = r.output; message.stack = recipe.output;
if (isPlanned(r)) { if (isPlanned(recipe)) {
message.select = true; message.select = true;
} else { } else {
message.select = false; message.select = false;
@ -446,7 +419,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
return energyStored; return energyStored;
} }
public float getRequiredEnergy() { public double getRequiredEnergy() {
return currentRequiredEnergy; return currentRequiredEnergy;
} }
@ -484,7 +457,6 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
@Override @Override
public boolean isItemValidForSlot(int i, ItemStack itemstack) { public boolean isItemValidForSlot(int i, ItemStack itemstack) {
// TODO Auto-generated method stub
return true; return true;
} }

View file

@ -1,16 +1,13 @@
/** /**
* Copyright (c) SpaceToad, 2011 * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com
* http://www.mod-buildcraft.com
* *
* BuildCraft is distributed under the terms of the Minecraft Mod Public * BuildCraft is distributed under the terms of the Minecraft Mod Public License
* License 1.0, or MMPL. Please check the contents of the license located in * 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * http://www.mod-buildcraft.com/MMPL-1.0.txt
*/ */
package buildcraft.silicon.gui; package buildcraft.silicon.gui;
import buildcraft.BuildCraftCore; import buildcraft.BuildCraftCore;
import buildcraft.api.recipes.AssemblyRecipe;
import buildcraft.core.CoreIconProvider; import buildcraft.core.CoreIconProvider;
import buildcraft.core.DefaultProps; import buildcraft.core.DefaultProps;
import buildcraft.core.gui.GuiAdvancedInterface; import buildcraft.core.gui.GuiAdvancedInterface;
@ -19,10 +16,11 @@ import buildcraft.core.network.PacketIds;
import buildcraft.core.network.PacketNBT; import buildcraft.core.network.PacketNBT;
import buildcraft.core.proxy.CoreProxy; import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.StringUtils; import buildcraft.core.utils.StringUtils;
import buildcraft.core.recipes.AssemblyRecipeManager.AssemblyRecipe;
import buildcraft.silicon.TileAssemblyTable; import buildcraft.silicon.TileAssemblyTable;
import buildcraft.silicon.TileAssemblyTable.SelectionMessage; import buildcraft.silicon.TileAssemblyTable.SelectionMessage;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.List;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -30,10 +28,12 @@ import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
public class GuiAssemblyTable extends GuiAdvancedInterface { 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; TileAssemblyTable assemblyTable;
class AssemblyLedger extends Ledger { class AssemblyLedger extends Ledger {
int headerColour = 0xe1c92f; int headerColour = 0xe1c92f;
int subheaderColour = 0xaaafb8; int subheaderColour = 0xaaafb8;
int textColour = 0x000000; int textColour = 0x000000;
@ -70,7 +70,6 @@ public class GuiAssemblyTable extends GuiAdvancedInterface {
public String getTooltip() { public String getTooltip() {
return String.format("%3.2f MJ/t", assemblyTable.getRecentEnergyAverage() / 100.0f); return String.format("%3.2f MJ/t", assemblyTable.getRecentEnergyAverage() / 100.0f);
} }
} }
class RecipeSlot extends AdvancedSlot { class RecipeSlot extends AdvancedSlot {
@ -84,7 +83,7 @@ public class GuiAssemblyTable extends GuiAdvancedInterface {
@Override @Override
public ItemStack getItemStack() { public ItemStack getItemStack() {
if (this.recipe != null) if (this.recipe != null)
return this.recipe.output; return this.recipe.getOutput();
else else
return null; return null;
} }
@ -118,16 +117,17 @@ public class GuiAssemblyTable extends GuiAdvancedInterface {
} }
public void updateRecipes() { public void updateRecipes() {
LinkedList<AssemblyRecipe> potentialRecipes = assemblyTable.getPotentialOutputs(); List<AssemblyRecipe> potentialRecipes = assemblyTable.getPotentialOutputs();
Iterator<AssemblyRecipe> cur = potentialRecipes.iterator(); Iterator<AssemblyRecipe> cur = potentialRecipes.iterator();
for (int p = 0; p < 8; ++p) for (int p = 0; p < 8; ++p) {
if (cur.hasNext()) { if (cur.hasNext()) {
((RecipeSlot) slots[p]).recipe = cur.next(); ((RecipeSlot) slots[p]).recipe = cur.next();
} else { } else {
((RecipeSlot) slots[p]).recipe = null; ((RecipeSlot) slots[p]).recipe = null;
} }
} }
}
@Override @Override
protected void drawGuiContainerForegroundLayer(int par1, int par2) { protected void drawGuiContainerForegroundLayer(int par1, int par2) {

View file

@ -2,7 +2,7 @@ package buildcraft.transport;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.core.Position; import buildcraft.api.core.Position;
import buildcraft.api.recipes.AssemblyRecipe; import buildcraft.api.recipes.BuildcraftRecipes;
import buildcraft.core.CreativeTabBuildCraft; import buildcraft.core.CreativeTabBuildCraft;
import buildcraft.core.ItemBuildCraft; import buildcraft.core.ItemBuildCraft;
import buildcraft.core.proxy.CoreProxy; import buildcraft.core.proxy.CoreProxy;
@ -160,8 +160,7 @@ public class ItemFacade extends ItemBuildCraft {
facade6.stackSize = 6; facade6.stackSize = 6;
// 3 Structurepipes + this block makes 6 facades // 3 Structurepipes + this block makes 6 facades
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(BuildCraftTransport.pipeStructureCobblestone, 3), itemStack}, BuildcraftRecipes.assemblyTable.addRecipe(8000, facade6, new ItemStack(BuildCraftTransport.pipeStructureCobblestone, 3), itemStack);
8000, facade6));
if (itemStack.itemID < Block.blocksList.length && Block.blocksList[itemStack.itemID] != null) { if (itemStack.itemID < Block.blocksList.length && Block.blocksList[itemStack.itemID] != null) {
Block bl = Block.blocksList[itemStack.itemID]; Block bl = Block.blocksList[itemStack.itemID];

View file

@ -19,7 +19,6 @@ import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.inventory.ISelectiveInventory;
import buildcraft.api.inventory.ISpecialInventory; import buildcraft.api.inventory.ISpecialInventory;
import buildcraft.core.GuiIds; import buildcraft.core.GuiIds;
import buildcraft.core.gui.buttons.IButtonTextureSet; import buildcraft.core.gui.buttons.IButtonTextureSet;
@ -108,23 +107,24 @@ public class PipeItemsEmerald extends PipeItemsWood implements IClientState, IGu
@Override @Override
public ItemStack[] checkExtract(IInventory inventory, boolean doRemove, ForgeDirection from) { public ItemStack[] checkExtract(IInventory inventory, boolean doRemove, ForgeDirection from) {
/* ISELECTIVEINVENTORY */ // ISELECTIVEINVENTORY
// non blocking mode is not implemented for ISelectiveInventory yet // non blocking mode is not implemented for ISelectiveInventory yet
if (inventory instanceof ISelectiveInventory) { // if (inventory instanceof ISelectiveInventory) {
ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored()); // ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored());
if (doRemove) { // if (doRemove) {
for (ItemStack stack : stacks) { // for (ItemStack stack : stacks) {
if (stack != null) { // if (stack != null) {
powerHandler.useEnergy(stack.stackSize, stack.stackSize, true); // powerHandler.useEnergy(stack.stackSize, stack.stackSize, true);
} // }
} // }
incrementFilter(); // incrementFilter();
} // }
return stacks; // return stacks;
// } else
/* ISPECIALINVENTORY */ // ISPECIALINVENTORY
// non blocking mode is not needed for ISpecialInventory since its not round robin anyway // non blocking mode is not needed for ISpecialInventory since its not round robin anyway
} else if (inventory instanceof ISpecialInventory) { if (inventory instanceof ISpecialInventory) {
ItemStack[] stacks = ((ISpecialInventory) inventory).extractItem(false, from, (int) powerHandler.getEnergyStored()); ItemStack[] stacks = ((ISpecialInventory) inventory).extractItem(false, from, (int) powerHandler.getEnergyStored());
if (stacks != null) { if (stacks != null) {
for (ItemStack stack : stacks) { for (ItemStack stack : stacks) {

View file

@ -21,7 +21,6 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.gates.IAction; import buildcraft.api.gates.IAction;
import buildcraft.api.inventory.ISelectiveInventory;
import buildcraft.api.inventory.ISpecialInventory; import buildcraft.api.inventory.ISpecialInventory;
import buildcraft.core.GuiIds; import buildcraft.core.GuiIds;
import buildcraft.core.inventory.SimpleInventory; import buildcraft.core.inventory.SimpleInventory;
@ -103,19 +102,20 @@ public class PipeItemsEmzuli extends PipeItemsWood implements IGuiReturnHandler
} }
/* ISELECTIVEINVENTORY */ /* ISELECTIVEINVENTORY */
if (inventory instanceof ISelectiveInventory) { // if (inventory instanceof ISelectiveInventory) {
ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored()); // ItemStack[] stacks = ((ISelectiveInventory) inventory).extractItem(new ItemStack[]{getCurrentFilter()}, false, doRemove, from, (int) powerHandler.getEnergyStored());
if (doRemove) { // if (doRemove) {
for (ItemStack stack : stacks) { // for (ItemStack stack : stacks) {
if (stack != null) { // if (stack != null) {
powerHandler.useEnergy(stack.stackSize, stack.stackSize, true); // powerHandler.useEnergy(stack.stackSize, stack.stackSize, true);
} // }
} // }
} // }
return stacks; // return stacks;
// } else
/* ISPECIALINVENTORY */ /* ISPECIALINVENTORY */
} else if (inventory instanceof ISpecialInventory) { if (inventory instanceof ISpecialInventory) {
ItemStack[] stacks = ((ISpecialInventory) inventory).extractItem(false, from, (int) powerHandler.getEnergyStored()); ItemStack[] stacks = ((ISpecialInventory) inventory).extractItem(false, from, (int) powerHandler.getEnergyStored());
if (stacks != null) { if (stacks != null) {
for (ItemStack stack : stacks) { for (ItemStack stack : stacks) {