diff --git a/buildcraft_client/net/minecraft/src/buildcraft/factory/RenderTank.java b/buildcraft_client/net/minecraft/src/buildcraft/factory/RenderTank.java index 79108812..670f16b2 100644 --- a/buildcraft_client/net/minecraft/src/buildcraft/factory/RenderTank.java +++ b/buildcraft_client/net/minecraft/src/buildcraft/factory/RenderTank.java @@ -17,6 +17,7 @@ import net.minecraft.src.Item; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntitySpecialRenderer; import net.minecraft.src.World; +import net.minecraft.src.buildcraft.api.liquids.LiquidStack; import net.minecraft.src.buildcraft.core.RenderEntityBlock; import net.minecraft.src.buildcraft.core.RenderEntityBlock.BlockInterface; import net.minecraft.src.forge.ITextureProvider; @@ -30,7 +31,7 @@ public class RenderTank extends TileEntitySpecialRenderer { private HashMap stage = new HashMap(); - private int[] getDisplayLists(int liquidId, World world) { + private int[] getDisplayLists(int liquidId, int damage, World world) { if (stage.containsKey(liquidId)) return stage.get(liquidId); @@ -42,7 +43,7 @@ public class RenderTank extends TileEntitySpecialRenderer { if (liquidId < Block.blocksList.length && Block.blocksList[liquidId] != null) block.texture = Block.blocksList[liquidId].blockIndexInTexture; else - block.texture = Item.itemsList[liquidId].getIconFromDamage(0); + block.texture = Item.itemsList[liquidId].getIconFromDamage(damage); for (int s = 0; s < displayStages; ++s) { d[s] = GLAllocation.generateDisplayLists(1); @@ -69,31 +70,32 @@ public class RenderTank extends TileEntitySpecialRenderer { TileTank tank = ((TileTank) tileentity); - int liquidId = tank.getLiquidId(); + LiquidStack liquid = tank.getLiquid(); - if (tank.getLiquidQuantity() == 0 || liquidId == 0) + if (liquid == null || liquid.amount <= 0 + || liquid.itemID <= 0) return; - int[] d = getDisplayLists(tank.getLiquidId(), tileentity.worldObj); + int[] displayList = getDisplayLists(liquid.itemID, liquid.itemMeta, tileentity.worldObj); GL11.glPushMatrix(); GL11.glDisable(2896 /* GL_LIGHTING */); - Object o = null; + Object obj = null; - if (liquidId < Block.blocksList.length && Block.blocksList[liquidId] != null) - o = Block.blocksList[liquidId]; + if (liquid.itemID < Block.blocksList.length && Block.blocksList[liquid.itemID] != null) + obj = Block.blocksList[liquid.itemID]; else - o = Item.itemsList[liquidId]; + obj = Item.itemsList[liquid.itemID]; - if (o instanceof ITextureProvider) - MinecraftForgeClient.bindTexture(((ITextureProvider) o).getTextureFile()); + if (obj instanceof ITextureProvider) + MinecraftForgeClient.bindTexture(((ITextureProvider) obj).getTextureFile()); else MinecraftForgeClient.bindTexture("/terrain.png"); GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F); - GL11.glCallList(d[(int) ((float) tank.getLiquidQuantity() / (float) (tank.getTankCapacity()) * (displayStages - 1))]); + GL11.glCallList(displayList[(int) ((float) liquid.amount / (float) (tank.getTankCapacity()) * (displayStages - 1))]); GL11.glEnable(2896 /* GL_LIGHTING */); GL11.glPopMatrix(); diff --git a/common/net/minecraft/src/buildcraft/api/BuildCraftAPI.java b/common/net/minecraft/src/buildcraft/api/BuildCraftAPI.java index 499e0c4d..a67badda 100644 --- a/common/net/minecraft/src/buildcraft/api/BuildCraftAPI.java +++ b/common/net/minecraft/src/buildcraft/api/BuildCraftAPI.java @@ -35,7 +35,7 @@ public class BuildCraftAPI { /** * This does not do anything anymore. Use buildcraft.api.liquids.LiquidManager! */ - @Deprecated public static LinkedList liquids = new LinkedList(); + //@Deprecated public static LinkedList liquids = new LinkedList(); /** * This does not do anything anymore. Use buildcraft.api.fuels.IronEngineFuel! */ @@ -47,13 +47,14 @@ public class BuildCraftAPI { /** * This does not do anything anymore. Use buildcraft.api.recipes.RefineryRecipe! */ - @Deprecated private static LinkedList refineryRecipe = new LinkedList(); + //@Deprecated private static LinkedList refineryRecipe = new LinkedList(); private static LinkedList triggerProviders = new LinkedList(); private static LinkedList actionProviders = new LinkedList(); /** * This does not do anything anymore. Use buildcraft.api.liquids.LiquidManager! */ + /* @Deprecated public static int getLiquidForFilledItem(ItemStack filledItem) { if (filledItem == null) { @@ -67,11 +68,12 @@ public class BuildCraftAPI { } return 0; - } + }*/ /** * This does not do anything anymore. Use buildcraft.api.liquids.LiquidManager! */ + /* @Deprecated public static ItemStack getFilledItemForLiquid(int liquidId) { for (LiquidData d : liquids) { @@ -81,11 +83,12 @@ public class BuildCraftAPI { } return null; - } + } */ /** * This does not do anything anymore. Use buildcraft.api.liquids.LiquidManager! */ + /* @Deprecated public static boolean isLiquid(int blockId) { if (blockId == 0) { @@ -99,7 +102,7 @@ public class BuildCraftAPI { } return false; - } + } */ /** * Return true if the block given in parameter is pass through (e.g. air, @@ -139,16 +142,18 @@ public class BuildCraftAPI { /** * This does not do anything anymore. Use buildcraft.api.recipes.RefineryRecipe! */ + /* @Deprecated public static void registerRefineryRecipe(RefineryRecipe recipe) { if (!refineryRecipe.contains(recipe)) { refineryRecipe.add(recipe); } - } + } */ /** * This does not do anything anymore. Use buildcraft.api.recipes.RefineryRecipe! */ + /* @Deprecated public static RefineryRecipe findRefineryRecipe(int liquid1, int qty1, int liquid2, int qty2) { int l1 = qty1 > 0 ? liquid1 : 0; @@ -177,7 +182,8 @@ public class BuildCraftAPI { return null; } - + */ + public static BlockSignature getBlockSignature(Block block) { return blockBptProps[0].getSignature(block); } diff --git a/common/net/minecraft/src/buildcraft/builders/TileFiller.java b/common/net/minecraft/src/buildcraft/builders/TileFiller.java index a8189138..c1b49fbb 100644 --- a/common/net/minecraft/src/buildcraft/builders/TileFiller.java +++ b/common/net/minecraft/src/buildcraft/builders/TileFiller.java @@ -17,12 +17,12 @@ import net.minecraft.src.buildcraft.api.APIProxy; import net.minecraft.src.buildcraft.api.Action; import net.minecraft.src.buildcraft.api.IActionReceptor; import net.minecraft.src.buildcraft.api.IAreaProvider; -import net.minecraft.src.buildcraft.api.ISpecialInventory; import net.minecraft.src.buildcraft.api.LaserKind; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.TileNetworkData; import net.minecraft.src.buildcraft.api.filler.FillerManager; import net.minecraft.src.buildcraft.api.filler.IFillerPattern; +import net.minecraft.src.buildcraft.api.inventory.ISpecialInventory; import net.minecraft.src.buildcraft.api.power.IPowerProvider; import net.minecraft.src.buildcraft.api.power.IPowerReceptor; import net.minecraft.src.buildcraft.api.power.PowerFramework; @@ -302,70 +302,6 @@ public class TileFiller extends TileBuildCraft implements ISpecialInventory, IPo } } - @Override - public boolean addItem(ItemStack stack, boolean doAdd, Orientations from) { - StackUtil stackUtil = new StackUtil(stack); - - boolean added = false; - - for (int i = 9; i < contents.length; ++i) { - if (stackUtil.tryAdding(this, i, doAdd, false)) { - added = true; - break; - } - } - - if (added) { - if (!doAdd) { - return true; - } else if (stack.stackSize == 0) { - return true; - } else { - addItem(stack, added, from); - - return true; - } - } - - if (!added) { - for (int i = 9; i < contents.length; ++i) { - if (stackUtil.tryAdding(this, i, doAdd, true)) { - added = true; - break; - } - } - } - - if (added) { - if (!doAdd) { - return true; - } else if (stack.stackSize == 0) { - return true; - } else { - addItem(stack, added, from); - - return true; - } - } - - return false; - } - - @Override - public ItemStack extractItem(boolean doRemove, Orientations from) { - for (int i = 9; i < contents.length; ++i) { - if (contents[i] != null) { - if (doRemove) { - return decrStackSize(i, 1); - } else { - return contents[i]; - } - } - } - - return null; - } - @Override public void handleDescriptionPacket(PacketUpdate packet) { boolean initialized = box.isInitialized(); @@ -453,4 +389,70 @@ public class TileFiller extends TileBuildCraft implements ISpecialInventory, IPo public boolean allowActions() { return true; } + + /* ISPECIALINVENTORY */ + @Override + public int addItem(ItemStack stack, boolean doAdd, Orientations from) { + StackUtil stackUtil = new StackUtil(stack); + + boolean added = false; + + for (int i = 9; i < contents.length; ++i) { + if (stackUtil.tryAdding(this, i, doAdd, false)) { + added = true; + break; + } + } + + if (added) { + if (!doAdd) { + return stackUtil.itemsAdded; + } else if (stack.stackSize - stackUtil.itemsAdded <= 0) { + return stackUtil.itemsAdded; + } else { + addItem(stack, added, from); + + return stackUtil.itemsAdded; + } + } + + if (!added) { + for (int i = 9; i < contents.length; ++i) { + if (stackUtil.tryAdding(this, i, doAdd, true)) { + added = true; + break; + } + } + } + + if (added) { + if (!doAdd) { + return stackUtil.itemsAdded; + } else if (stack.stackSize - stackUtil.itemsAdded <= 0) { + return stackUtil.itemsAdded; + } else { + addItem(stack, added, from); + + return stackUtil.itemsAdded; + } + } + + return 0; + } + + @Override + public ItemStack[] extractItem(boolean doRemove, Orientations from, int maxItemCount) { + for (int i = 9; i < contents.length; ++i) { + if (contents[i] != null) { + if (doRemove) { + return new ItemStack[] { decrStackSize(i, 1) }; + } else { + return new ItemStack[] { contents[i] }; + } + } + } + + return null; + } + } diff --git a/common/net/minecraft/src/buildcraft/core/DefaultTriggerProvider.java b/common/net/minecraft/src/buildcraft/core/DefaultTriggerProvider.java index 7a0ff446..79c727aa 100644 --- a/common/net/minecraft/src/buildcraft/core/DefaultTriggerProvider.java +++ b/common/net/minecraft/src/buildcraft/core/DefaultTriggerProvider.java @@ -6,7 +6,7 @@ import net.minecraft.src.Block; import net.minecraft.src.BuildCraftCore; import net.minecraft.src.IInventory; import net.minecraft.src.TileEntity; -import net.minecraft.src.buildcraft.api.ILiquidContainer; +import net.minecraft.src.buildcraft.api.liquids.ITankContainer; import net.minecraft.src.buildcraft.api.IOverrideDefaultTriggers; import net.minecraft.src.buildcraft.api.IPipe; import net.minecraft.src.buildcraft.api.ITriggerProvider; @@ -28,7 +28,7 @@ public class DefaultTriggerProvider implements ITriggerProvider { res.add(BuildCraftCore.triggerFullInventory); } - if (tile instanceof ILiquidContainer && ((ILiquidContainer) tile).getLiquidSlots().length > 0) { + if (tile instanceof ITankContainer && ((ITankContainer) tile).getTanks().length > 0) { res.add(BuildCraftCore.triggerEmptyLiquid); res.add(BuildCraftCore.triggerContainsLiquid); res.add(BuildCraftCore.triggerSpaceLiquid); diff --git a/common/net/minecraft/src/buildcraft/core/StackUtil.java b/common/net/minecraft/src/buildcraft/core/StackUtil.java index ea8005a4..4215d6f0 100644 --- a/common/net/minecraft/src/buildcraft/core/StackUtil.java +++ b/common/net/minecraft/src/buildcraft/core/StackUtil.java @@ -15,14 +15,15 @@ import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraft.src.buildcraft.api.ISpecialInventory; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.Position; +import net.minecraft.src.buildcraft.api.inventory.ISpecialInventory; import net.minecraft.src.forge.ISidedInventory; public class StackUtil { public ItemStack items; + public int itemsAdded; public StackUtil(ItemStack stack) { this.items = stack; @@ -51,7 +52,7 @@ public class StackUtil { TileEntity tileInventory = w.getBlockTileEntity((int) pos.x, (int) pos.y, (int) pos.z); if (tileInventory instanceof ISpecialInventory) - if (((ISpecialInventory) tileInventory).addItem(items, false, from)) + if (((ISpecialInventory) tileInventory).addItem(items, false, from) > 0) possibleInventories.add(pos.orientation); if (tileInventory instanceof IInventory) @@ -87,8 +88,14 @@ public class StackUtil { public boolean checkAvailableSlot(IInventory inventory, boolean add, Orientations from) { // First, look for a similar pile - if (inventory instanceof ISpecialInventory) - return ((ISpecialInventory) inventory).addItem(items, add, from); + if (inventory instanceof ISpecialInventory) { + int used = ((ISpecialInventory) inventory).addItem(items, add, from); + if(used <= 0) + return false; + + items.stackSize -= used; + return true; + } boolean added = false; @@ -136,7 +143,7 @@ public class StackUtil { if (added) if (!add) return true; - else if (items.stackSize == 0) + else if (items.stackSize - itemsAdded == 0) return true; else { checkAvailableSlot(inventory, added, from); @@ -192,7 +199,7 @@ public class StackUtil { if (added) { if (!add) return true; - else if (items.stackSize == 0) + else if (items.stackSize - itemsAdded == 0) return true; else { checkAvailableSlot(inventory, added, from); @@ -221,7 +228,7 @@ public class StackUtil { if (doAdd) { stack.stackSize++; - items.stackSize--; + itemsAdded++; } return true; @@ -232,7 +239,7 @@ public class StackUtil { stack = items.copy(); stack.stackSize = 1; - items.stackSize--; + itemsAdded++; inventory.setInventorySlotContents(stackIndex, stack); } diff --git a/common/net/minecraft/src/buildcraft/core/TriggerLiquidContainer.java b/common/net/minecraft/src/buildcraft/core/TriggerLiquidContainer.java index e0c89e8d..6de1944f 100644 --- a/common/net/minecraft/src/buildcraft/core/TriggerLiquidContainer.java +++ b/common/net/minecraft/src/buildcraft/core/TriggerLiquidContainer.java @@ -11,10 +11,10 @@ package net.minecraft.src.buildcraft.core; import net.minecraft.src.TileEntity; import net.minecraft.src.buildcraft.api.BuildCraftAPI; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.LiquidSlot; import net.minecraft.src.buildcraft.api.Trigger; import net.minecraft.src.buildcraft.api.TriggerParameter; +import net.minecraft.src.buildcraft.api.liquids.ILiquidTank; +import net.minecraft.src.buildcraft.api.liquids.ITankContainer; import net.minecraft.src.buildcraft.api.liquids.LiquidManager; public class TriggerLiquidContainer extends Trigger { @@ -68,15 +68,15 @@ public class TriggerLiquidContainer extends Trigger { @Override public boolean isTriggerActive(TileEntity tile, TriggerParameter parameter) { - if (tile instanceof ILiquidContainer) { - ILiquidContainer container = (ILiquidContainer) tile; + if (tile instanceof ITankContainer) { + ITankContainer container = (ITankContainer) tile; int seachedLiquidId = 0; if (parameter != null && parameter.getItem() != null) seachedLiquidId = LiquidManager.getLiquidIDForFilledItem(parameter.getItem()); - LiquidSlot[] liquids = container.getLiquidSlots(); + ILiquidTank[] liquids = container.getTanks(); if (liquids == null || liquids.length == 0) return false; @@ -85,33 +85,33 @@ public class TriggerLiquidContainer extends Trigger { case Empty: if (liquids != null && liquids.length > 0) { - for (LiquidSlot c : liquids) - if (c.getLiquidQty() != 0) + for (ILiquidTank c : liquids) + if (c.getLiquid().amount != 0) return false; return true; } else return false; case Contains: - for (LiquidSlot c : liquids) - if (c.getLiquidQty() != 0) - if (seachedLiquidId == 0 || seachedLiquidId == c.getLiquidId()) + for (ILiquidTank c : liquids) + if (c.getLiquid().amount != 0) + if (seachedLiquidId == 0 || seachedLiquidId == c.getLiquid().itemID) return true; return false; case Space: - for (LiquidSlot c : liquids) - if (c.getLiquidQty() == 0) + for (ILiquidTank c : liquids) + if (c.getLiquid().amount == 0) return true; - else if (c.getLiquidQty() < c.getCapacity()) - if (seachedLiquidId == 0 || seachedLiquidId == c.getLiquidId()) + else if (c.getLiquid().amount < c.getCapacity()) + if (seachedLiquidId == 0 || seachedLiquidId == c.getLiquid().itemID) return true; return false; case Full: - for (LiquidSlot c : liquids) - if (c.getLiquidQty() < c.getCapacity()) + for (ILiquidTank c : liquids) + if (c.getLiquid().amount < c.getCapacity()) return false; return true; diff --git a/common/net/minecraft/src/buildcraft/energy/Engine.java b/common/net/minecraft/src/buildcraft/energy/Engine.java index 531117fa..fa6891be 100644 --- a/common/net/minecraft/src/buildcraft/energy/Engine.java +++ b/common/net/minecraft/src/buildcraft/energy/Engine.java @@ -13,9 +13,9 @@ import net.minecraft.src.ICrafting; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.buildcraft.api.APIProxy; -import net.minecraft.src.buildcraft.api.LiquidSlot; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.TileNetworkData; +import net.minecraft.src.buildcraft.api.liquids.LiquidTank; public abstract class Engine { @@ -146,10 +146,6 @@ public abstract class Engine { } - public LiquidSlot[] getLiquidSlots() { - return new LiquidSlot[0]; - } - public boolean isActive() { return true; } @@ -166,6 +162,11 @@ public abstract class Engine { return currentOutput; } + /* ILIQUIDCONTAINER */ + public LiquidTank[] getLiquidSlots() { + return new LiquidTank[0]; + } + /* IINVENTORY */ public int getSizeInventory() { return 0; } public ItemStack getStackInSlot(int i) { return null; } diff --git a/common/net/minecraft/src/buildcraft/energy/EngineIron.java b/common/net/minecraft/src/buildcraft/energy/EngineIron.java index a0a5126c..ab1c877b 100644 --- a/common/net/minecraft/src/buildcraft/energy/EngineIron.java +++ b/common/net/minecraft/src/buildcraft/energy/EngineIron.java @@ -14,11 +14,11 @@ import net.minecraft.src.ICrafting; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.buildcraft.api.BuildCraftAPI; -import net.minecraft.src.buildcraft.api.LiquidSlot; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.fuels.IronEngineFuel; import net.minecraft.src.buildcraft.api.liquids.LiquidManager; import net.minecraft.src.buildcraft.api.liquids.LiquidStack; +import net.minecraft.src.buildcraft.api.liquids.LiquidTank; import net.minecraft.src.buildcraft.core.DefaultProps; import net.minecraft.src.buildcraft.core.Utils; @@ -125,12 +125,11 @@ public class EngineIron extends Engine { super.update(); if (itemInInventory != null) { - int liquidId = LiquidManager.getLiquidIDForFilledItem(itemInInventory); - - if (liquidId != 0) { - if (fill(Orientations.Unknown, BuildCraftAPI.BUCKET_VOLUME, liquidId, false) == BuildCraftAPI.BUCKET_VOLUME) { - fill(Orientations.Unknown, BuildCraftAPI.BUCKET_VOLUME, liquidId, true); + LiquidStack liquid = LiquidManager.getLiquidForFilledItem(itemInInventory); + if (liquid != null) { + if (fill(Orientations.Unknown, liquid, false) == BuildCraftAPI.BUCKET_VOLUME) { + fill(Orientations.Unknown, liquid, true); tile.setInventorySlotContents(0, Utils.consumeItem(itemInInventory)); } } @@ -178,65 +177,6 @@ public class EngineIron extends Engine { return (int) (((float) liquidQty / (float) (MAX_LIQUID)) * i); } - public int fill(Orientations from, int quantity, int id, boolean doFill) { - if (id == Block.waterStill.blockID) { - return fillCoolant(from, quantity, id, doFill); - } - - int res = 0; - - if (liquidQty > 0 && liquidId != id) { - return 0; - } - - if (IronEngineFuel.getFuelForLiquid(new LiquidStack(id, quantity, 0)) == null) - return 0; - - if (liquidQty + quantity <= MAX_LIQUID) { - if (doFill) { - liquidQty += quantity; - } - - res = quantity; - } else { - res = MAX_LIQUID - liquidQty; - - if (doFill) { - liquidQty = MAX_LIQUID; - } - } - - liquidId = id; - - return res; - } - - private int fillCoolant(Orientations from, int quantity, int id, boolean doFill) { - int res = 0; - - if (coolantQty > 0 && coolantId != id) { - return 0; - } - - if (coolantQty + quantity <= MAX_LIQUID) { - if (doFill) { - coolantQty += quantity; - } - - res = quantity; - } else { - res = MAX_LIQUID - coolantQty; - - if (doFill) { - coolantQty = MAX_LIQUID; - } - } - - coolantId = id; - - return res; - } - @Override public void readFromNBT(NBTTagCompound nbttagcompound) { liquidId = nbttagcompound.getInteger("liquidId"); @@ -319,12 +259,6 @@ public class EngineIron extends Engine { iCrafting.updateCraftingInventoryInfo(containerEngine, 6, coolantId); } - @Override - public LiquidSlot[] getLiquidSlots() { - return new LiquidSlot[] { new LiquidSlot(liquidId, liquidQty, MAX_LIQUID), - new LiquidSlot(coolantId, coolantQty, MAX_LIQUID) }; - } - @Override public boolean isActive() { return penaltyCooling <= 0; @@ -335,6 +269,74 @@ public class EngineIron extends Engine { return heat; } + /* ITANKCONTAINER */ + public int fill(Orientations from, LiquidStack resource, boolean doFill) { + + // Handle coolant + if (resource.itemID == Block.waterStill.blockID) + return fillCoolant(from, resource, doFill); + + int res = 0; + + if (liquidQty > 0 && liquidId != resource.itemID) { + return 0; + } + + if (IronEngineFuel.getFuelForLiquid(resource) == null) + return 0; + + if (liquidQty + resource.amount <= MAX_LIQUID) { + if (doFill) { + liquidQty += resource.amount; + } + + res = resource.amount; + } else { + res = MAX_LIQUID - liquidQty; + + if (doFill) { + liquidQty = MAX_LIQUID; + } + } + + liquidId = resource.itemID; + + return res; + } + + private int fillCoolant(Orientations from, LiquidStack resource, boolean doFill) { + int res = 0; + + if (coolantQty > 0 && coolantId != resource.itemID) { + return 0; + } + + if (coolantQty + resource.amount <= MAX_LIQUID) { + if (doFill) { + coolantQty += resource.amount; + } + + res = resource.amount; + } else { + res = MAX_LIQUID - coolantQty; + + if (doFill) { + coolantQty = MAX_LIQUID; + } + } + + coolantId = resource.itemID; + + return res; + } + + @Override + public LiquidTank[] getLiquidSlots() { + return new LiquidTank[] { new LiquidTank(liquidId, liquidQty, MAX_LIQUID), + new LiquidTank(coolantId, coolantQty, MAX_LIQUID) }; + } + + /* IINVENTORY */ @Override public int getSizeInventory() { return 1; } @Override public ItemStack getStackInSlot(int i) { return itemInInventory; } diff --git a/common/net/minecraft/src/buildcraft/energy/TileEngine.java b/common/net/minecraft/src/buildcraft/energy/TileEngine.java index ec179383..7c4c9696 100644 --- a/common/net/minecraft/src/buildcraft/energy/TileEngine.java +++ b/common/net/minecraft/src/buildcraft/energy/TileEngine.java @@ -20,14 +20,16 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.Packet; import net.minecraft.src.TileEntity; import net.minecraft.src.buildcraft.api.APIProxy; -import net.minecraft.src.buildcraft.api.ILiquidContainer; import net.minecraft.src.buildcraft.api.IOverrideDefaultTriggers; import net.minecraft.src.buildcraft.api.IPipeConnection; -import net.minecraft.src.buildcraft.api.LiquidSlot; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.Position; import net.minecraft.src.buildcraft.api.TileNetworkData; import net.minecraft.src.buildcraft.api.Trigger; +import net.minecraft.src.buildcraft.api.liquids.ILiquidTank; +import net.minecraft.src.buildcraft.api.liquids.ITankContainer; +import net.minecraft.src.buildcraft.api.liquids.LiquidStack; +import net.minecraft.src.buildcraft.api.liquids.LiquidTank; import net.minecraft.src.buildcraft.api.power.IPowerProvider; import net.minecraft.src.buildcraft.api.power.IPowerReceptor; import net.minecraft.src.buildcraft.api.power.PowerFramework; @@ -38,7 +40,7 @@ import net.minecraft.src.buildcraft.core.network.PacketUpdate; //TODO: All Engines need to take func_48081_b into account -public class TileEngine extends TileBuildCraft implements IPowerReceptor, IInventory, ILiquidContainer, IEngineProvider, +public class TileEngine extends TileBuildCraft implements IPowerReceptor, IInventory, ITankContainer, IEngineProvider, IOverrideDefaultTriggers, IPipeConnection, IBuilderInventory { public @TileNetworkData @@ -378,30 +380,6 @@ public class TileEngine extends TileBuildCraft implements IPowerReceptor, IInven return false; } - @Override - public int fill(Orientations from, int quantity, int id, boolean doFill) { - if (engine instanceof EngineIron) { - return ((EngineIron) engine).fill(from, quantity, id, doFill); - } else { - return 0; - } - } - - @Override - public int empty(int quantityMax, boolean doEmpty) { - return 0; - } - - @Override - public int getLiquidQuantity() { - return 0; - } - - @Override - public int getLiquidId() { - return 0; - } - @Override public void openChest() { @@ -446,15 +424,6 @@ public class TileEngine extends TileBuildCraft implements IPowerReceptor, IInven return triggers; } - @Override - public LiquidSlot[] getLiquidSlots() { - if (engine == null) { - return new LiquidSlot[0]; - } else { - return engine.getLiquidSlots(); - } - } - @Override public boolean isPipeConnected(Orientations with) { if (engine instanceof EngineWood) { @@ -472,4 +441,39 @@ public class TileEngine extends TileBuildCraft implements IPowerReceptor, IInven public void checkRedstonePower() { isRedstonePowered = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); } + + /* ILIQUIDCONTAINER */ + @Override + public int fill(Orientations from, LiquidStack resource, boolean doFill) { + if (engine instanceof EngineIron) { + return ((EngineIron) engine).fill(from, resource, doFill); + } else { + return 0; + } + } + + @Override + public int fill(int tankIndex, LiquidStack resource, boolean doFill) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public LiquidStack drain(Orientations from, int maxDrain, boolean doDrain) { + return null; + } + @Override + public LiquidStack drain(int tankIndex, int maxDrain, boolean doDrain) { + return null; + } + + @Override + public LiquidTank[] getTanks() { + if (engine == null) { + return new LiquidTank[0]; + } else { + return engine.getLiquidSlots(); + } + } + } diff --git a/common/net/minecraft/src/buildcraft/factory/BlockRefinery.java b/common/net/minecraft/src/buildcraft/factory/BlockRefinery.java index 92046c83..705d2b52 100644 --- a/common/net/minecraft/src/buildcraft/factory/BlockRefinery.java +++ b/common/net/minecraft/src/buildcraft/factory/BlockRefinery.java @@ -26,6 +26,7 @@ import net.minecraft.src.buildcraft.api.BuildCraftAPI; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.Position; import net.minecraft.src.buildcraft.api.liquids.LiquidManager; +import net.minecraft.src.buildcraft.api.liquids.LiquidStack; import net.minecraft.src.buildcraft.api.tools.IToolWrench; import net.minecraft.src.buildcraft.core.GuiIds; import net.minecraft.src.buildcraft.core.Utils; @@ -103,11 +104,10 @@ public class BlockRefinery extends BlockContainer { return true; } else { - int liquidId = LiquidManager.getLiquidIDForFilledItem(entityplayer.getCurrentEquippedItem()); + LiquidStack liquid = LiquidManager.getLiquidForFilledItem(entityplayer.getCurrentEquippedItem()); - if (liquidId != 0) { - int qty = ((TileRefinery) world.getBlockTileEntity(i, j, k)).fill(Orientations.Unknown, - BuildCraftAPI.BUCKET_VOLUME, liquidId, true); + if (liquid != null) { + int qty = ((TileRefinery) world.getBlockTileEntity(i, j, k)).fill(Orientations.Unknown, liquid, true); if (qty != 0 && !BuildCraftCore.debugMode) { entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, diff --git a/common/net/minecraft/src/buildcraft/factory/BlockTank.java b/common/net/minecraft/src/buildcraft/factory/BlockTank.java index d33cdf41..155053ec 100644 --- a/common/net/minecraft/src/buildcraft/factory/BlockTank.java +++ b/common/net/minecraft/src/buildcraft/factory/BlockTank.java @@ -99,7 +99,7 @@ public class BlockTank extends BlockContainer implements ITextureProvider { // Handle filled containers if (liquid != null) { - int qty = tank.fill(Orientations.Unknown, liquid.amount, liquid.itemID, true); + int qty = tank.fill(Orientations.Unknown, liquid, true); if (qty != 0 && !BuildCraftCore.debugMode) { entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, @@ -111,8 +111,8 @@ public class BlockTank extends BlockContainer implements ITextureProvider { // Handle empty containers } else { - ItemStack filled = LiquidManager.fillLiquidContainer(new LiquidStack(tank.getLiquidId(), - tank.empty(BuildCraftAPI.BUCKET_VOLUME, false)), current); + LiquidStack available = tank.drain(Orientations.Unknown, BuildCraftAPI.BUCKET_VOLUME, false); + ItemStack filled = LiquidManager.fillLiquidContainer(available, current); liquid = LiquidManager.getLiquidForFilledItem(filled); if(liquid != null) { @@ -129,7 +129,7 @@ public class BlockTank extends BlockContainer implements ITextureProvider { entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, filled); } - tank.empty(liquid.amount, true); + tank.drain(Orientations.Unknown, liquid.amount, true); return true; } } diff --git a/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java b/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java index ab689b50..0116e550 100644 --- a/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java +++ b/common/net/minecraft/src/buildcraft/factory/TileAutoWorkbench.java @@ -19,9 +19,9 @@ import net.minecraft.src.InventoryCrafting; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; -import net.minecraft.src.buildcraft.api.ISpecialInventory; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.Position; +import net.minecraft.src.buildcraft.api.inventory.ISpecialInventory; import net.minecraft.src.buildcraft.core.StackUtil; import net.minecraft.src.buildcraft.core.Utils; @@ -122,38 +122,6 @@ public class TileAutoWorkbench extends TileEntity implements ISpecialInventory { Utils.writeStacksToNBT(nbttagcompound, "stackList", stackList); } - @Override - public boolean addItem(ItemStack stack, boolean doAdd, Orientations from) { - StackUtil stackUtils = new StackUtil(stack); - - int minSimilar = Integer.MAX_VALUE; - int minSlot = -1; - - for (int j = 0; j < getSizeInventory(); ++j) { - ItemStack stackInInventory = getStackInSlot(j); - - if (stackInInventory != null && stackInInventory.stackSize > 0 && stackInInventory.itemID == stack.itemID - && stackInInventory.getItemDamage() == stack.getItemDamage() && stackInInventory.stackSize < minSimilar) { - minSimilar = stackInInventory.stackSize; - minSlot = j; - } - } - - if (minSlot != -1) { - if (stackUtils.tryAdding(this, minSlot, doAdd, false)) { - if (doAdd && stack.stackSize != 0) { - addItem(stack, doAdd, from); - } - - return true; - } else { - return false; - } - } else { - return false; - } - } - class StackPointer { IInventory inventory; @@ -229,11 +197,6 @@ public class TileAutoWorkbench extends TileEntity implements ISpecialInventory { return resultStack; } - @Override - public ItemStack extractItem(boolean doRemove, Orientations from) { - return extractItem(doRemove, false); - } - public void resetPointers(LinkedList pointers) { for (StackPointer p : pointers) { ItemStack item = p.inventory.getStackInSlot(p.index); @@ -316,4 +279,42 @@ public class TileAutoWorkbench extends TileEntity implements ISpecialInventory { } + /* ISPECIALINVENTORY */ + @Override + public int addItem(ItemStack stack, boolean doAdd, Orientations from) { + StackUtil stackUtils = new StackUtil(stack); + + int minSimilar = Integer.MAX_VALUE; + int minSlot = -1; + + for (int j = 0; j < getSizeInventory(); ++j) { + ItemStack stackInInventory = getStackInSlot(j); + + if (stackInInventory != null && stackInInventory.stackSize > 0 && stackInInventory.itemID == stack.itemID + && stackInInventory.getItemDamage() == stack.getItemDamage() && stackInInventory.stackSize < minSimilar) { + minSimilar = stackInInventory.stackSize; + minSlot = j; + } + } + + if (minSlot != -1) { + if (stackUtils.tryAdding(this, minSlot, doAdd, false)) { + if (doAdd && stack.stackSize != 0) { + addItem(stack, doAdd, from); + } + + return stackUtils.itemsAdded; + } else { + return stackUtils.itemsAdded; + } + } else { + return 0; + } + } + + @Override + public ItemStack[] extractItem(boolean doRemove, Orientations from, int maxItemCount) { + return new ItemStack[] { extractItem(doRemove, false) }; + } + } diff --git a/common/net/minecraft/src/buildcraft/factory/TileHopper.java b/common/net/minecraft/src/buildcraft/factory/TileHopper.java index 52e9b972..c6a1512e 100644 --- a/common/net/minecraft/src/buildcraft/factory/TileHopper.java +++ b/common/net/minecraft/src/buildcraft/factory/TileHopper.java @@ -6,8 +6,8 @@ import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.buildcraft.api.APIProxy; -import net.minecraft.src.buildcraft.api.ISpecialInventory; import net.minecraft.src.buildcraft.api.Orientations; +import net.minecraft.src.buildcraft.api.inventory.ISpecialInventory; import net.minecraft.src.buildcraft.core.TileBuildCraft; import net.minecraft.src.buildcraft.core.utils.InventoryUtil; import net.minecraft.src.buildcraft.core.utils.SidedInventoryAdapter; @@ -48,7 +48,7 @@ public class TileHopper extends TileBuildCraft implements IInventory { if (tile instanceof ISpecialInventory) { ISpecialInventory special = (ISpecialInventory) tile; ItemStack clonedStack = _inventory.getStackInSlot(internalSlot).copy().splitStack(1); - if (special.addItem(clonedStack, true, Orientations.YPos)) { + if (special.addItem(clonedStack, true, Orientations.YPos) > 0) { _inventory.decrStackSize(internalSlot, 1); } return; diff --git a/common/net/minecraft/src/buildcraft/factory/TilePump.java b/common/net/minecraft/src/buildcraft/factory/TilePump.java index 9525cde3..7c2891e1 100644 --- a/common/net/minecraft/src/buildcraft/factory/TilePump.java +++ b/common/net/minecraft/src/buildcraft/factory/TilePump.java @@ -19,7 +19,6 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.buildcraft.api.APIProxy; import net.minecraft.src.buildcraft.api.BuildCraftAPI; -import net.minecraft.src.buildcraft.api.ILiquidContainer; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.Position; import net.minecraft.src.buildcraft.api.TileNetworkData; @@ -135,10 +134,6 @@ public class TilePump extends TileMachine implements IMachine, IPowerReceptor { internalLiquid -= ((ITankContainer)tile).fill(p.orientation.reverse(), new LiquidStack(liquidId, internalLiquid), true); if(internalLiquid <= 0) break; - } else if (tile instanceof ILiquidContainer) { - internalLiquid -= ((ILiquidContainer) tile).fill(p.orientation.reverse(), internalLiquid, liquidId, true); - if (internalLiquid <= 0) - break; } } } diff --git a/common/net/minecraft/src/buildcraft/factory/TileRefinery.java b/common/net/minecraft/src/buildcraft/factory/TileRefinery.java index 7bd58603..a9c72661 100644 --- a/common/net/minecraft/src/buildcraft/factory/TileRefinery.java +++ b/common/net/minecraft/src/buildcraft/factory/TileRefinery.java @@ -18,8 +18,6 @@ import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.buildcraft.api.APIProxy; import net.minecraft.src.buildcraft.api.BuildCraftAPI; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.LiquidSlot; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.SafeTimeTracker; import net.minecraft.src.buildcraft.api.TileNetworkData; @@ -34,7 +32,7 @@ import net.minecraft.src.buildcraft.api.power.PowerProvider; import net.minecraft.src.buildcraft.api.recipes.RefineryRecipe; import net.minecraft.src.buildcraft.core.IMachine; -public class TileRefinery extends TileMachine implements ILiquidContainer, ITankContainer, IPowerReceptor, IInventory, IMachine { +public class TileRefinery extends TileMachine implements ITankContainer, IPowerReceptor, IInventory, IMachine { private int[] filters = new int[2]; @@ -388,76 +386,6 @@ public class TileRefinery extends TileMachine implements ILiquidContainer, ITank iCrafting.updateCraftingInventoryInfo(container, 1, filters[1]); } - /* ILIQUIDCONTAINER */ - @Override - public int fill(Orientations from, int quantity, int id, boolean doFill) { - int used = 0; - - if (filters[0] != 0 || filters[1] != 0) { - if (filters[0] == id) { - used += slot1.fill(from, quantity, id, doFill); - } - - if (filters[1] == id) { - used += slot2.fill(from, quantity - used, id, doFill); - } - } else { - used += slot1.fill(from, quantity, id, doFill); - used += slot2.fill(from, quantity - used, id, doFill); - } - - if (doFill && used > 0) { - updateNetworkTime.markTime(worldObj); - sendNetworkUpdate(); - } - - return used; - } - - @Override - public int empty(int quantityMax, boolean doEmpty) { - int res = 0; - - if (result.quantity >= quantityMax) { - res = quantityMax; - - if (doEmpty) { - result.quantity -= quantityMax; - } - } else { - res = result.quantity; - - if (doEmpty) { - result.quantity = 0; - } - } - - if (doEmpty && res > 0) { - updateNetworkTime.markTime(worldObj); - sendNetworkUpdate(); - } - - return res; - } - - @Override - public int getLiquidQuantity() { - return result.quantity; - } - - @Override - public int getLiquidId() { - return result.liquidId; - } - - @Override - public LiquidSlot[] getLiquidSlots() { - return new LiquidSlot[] { new LiquidSlot(slot1.liquidId, slot1.quantity, LIQUID_PER_SLOT), - new LiquidSlot(slot2.liquidId, slot2.quantity, LIQUID_PER_SLOT), - new LiquidSlot(result.liquidId, result.quantity, LIQUID_PER_SLOT) }; - } - - /* ITANKCONTAINER */ @Override public int fill(Orientations from, LiquidStack resource, boolean doFill) { diff --git a/common/net/minecraft/src/buildcraft/factory/TileTank.java b/common/net/minecraft/src/buildcraft/factory/TileTank.java index 56806cbb..8ffa4edb 100644 --- a/common/net/minecraft/src/buildcraft/factory/TileTank.java +++ b/common/net/minecraft/src/buildcraft/factory/TileTank.java @@ -15,8 +15,6 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.buildcraft.api.APIProxy; import net.minecraft.src.buildcraft.api.BuildCraftAPI; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.LiquidSlot; import net.minecraft.src.buildcraft.api.Orientations; import net.minecraft.src.buildcraft.api.SafeTimeTracker; import net.minecraft.src.buildcraft.api.TileNetworkData; @@ -27,7 +25,7 @@ import net.minecraft.src.buildcraft.api.liquids.LiquidTank; import net.minecraft.src.buildcraft.core.DefaultProps; import net.minecraft.src.buildcraft.core.TileBuildCraft; -public class TileTank extends TileBuildCraft implements ILiquidContainer, ITankContainer { +public class TileTank extends TileBuildCraft implements ITankContainer { public @TileNetworkData int stored = 0; @@ -128,95 +126,6 @@ public class TileTank extends TileBuildCraft implements ILiquidContainer, ITankC below.stored += moved; } - - /* ILIQUIDCONTAINER */ - @Override - public int fill(Orientations from, int quantity, int id, boolean doFill) { - return getBottomTank().actualFill(from, quantity, id, doFill); - } - - private int actualFill(Orientations from, int quantity, int id, boolean doFill) { - if (stored != 0 && id != liquidId) - return 0; - - liquidId = id; - int used = 0; - - TileTank above = getTankAbove(this); - - if (stored + quantity <= getTankCapacity()) { - if (doFill) { - stored += quantity; - hasUpdate = true; - } - - used = quantity; - } else if (stored <= getTankCapacity()) { - used = getTankCapacity() - stored; - - if (doFill) { - stored = getTankCapacity(); - hasUpdate = true; - } - } - - if (used < quantity && above != null) - used = used + above.actualFill(from, quantity - used, id, doFill); - - return used; - } - - @Override - public int getLiquidQuantity() { - return stored; - } - - public int getTankCapacity() { - return BuildCraftAPI.BUCKET_VOLUME * 16; - } - - @Override - public int empty(int quantityMax, boolean doEmpty) { - return getBottomTank().actualEmtpy(quantityMax, doEmpty); - } - - private int actualEmtpy(int quantityMax, boolean doEmpty) { - - if (stored >= quantityMax) { - if (doEmpty) { - stored -= quantityMax; - hasUpdate = true; - } - - return quantityMax; - - } else { - int result = stored; - - if (doEmpty) { - stored = 0; - hasUpdate = true; - } - - TileTank below = getTankBelow(this); - - if (below != null) - result += below.actualEmtpy(quantityMax - result, doEmpty); - - return result; - } - } - - @Override - public int getLiquidId() { - return liquidId; - } - - @Override - public LiquidSlot[] getLiquidSlots() { - ILiquidTank tank = getTanks()[0]; - return new LiquidSlot[] { new LiquidSlot(tank.getLiquid().itemID, tank.getLiquid().amount, tank.getCapacity()) }; - } /* ITANKCONTAINER */ @Override @@ -286,5 +195,71 @@ public class TileTank extends TileBuildCraft implements ILiquidContainer, ITankC return new ILiquidTank[] { new LiquidTank(resultLiquidId, resultLiquidQty, resultCapacity) }; } + + private int actualFill(Orientations from, int quantity, int id, boolean doFill) { + if (stored != 0 && id != liquidId) + return 0; + + liquidId = id; + int used = 0; + + TileTank above = getTankAbove(this); + + if (stored + quantity <= getTankCapacity()) { + if (doFill) { + stored += quantity; + hasUpdate = true; + } + + used = quantity; + } else if (stored <= getTankCapacity()) { + used = getTankCapacity() - stored; + + if (doFill) { + stored = getTankCapacity(); + hasUpdate = true; + } + } + + if (used < quantity && above != null) + used = used + above.actualFill(from, quantity - used, id, doFill); + + return used; + } + + public int getTankCapacity() { + return BuildCraftAPI.BUCKET_VOLUME * 16; + } + + public LiquidStack getLiquid() { + return new LiquidStack(liquidId, stored, 0); + } + + private int actualEmtpy(int quantityMax, boolean doEmpty) { + + if (stored >= quantityMax) { + if (doEmpty) { + stored -= quantityMax; + hasUpdate = true; + } + + return quantityMax; + + } else { + int result = stored; + + if (doEmpty) { + stored = 0; + hasUpdate = true; + } + + TileTank below = getTankBelow(this); + + if (below != null) + result += below.actualEmtpy(quantityMax - result, doEmpty); + + return result; + } + } }