diff --git a/common/abo/pipes/items/PipeItemsCompactorInventory.java b/common/abo/pipes/items/PipeItemsCompactorInventory.java index 6916586..a21e154 100644 --- a/common/abo/pipes/items/PipeItemsCompactorInventory.java +++ b/common/abo/pipes/items/PipeItemsCompactorInventory.java @@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import buildcraft.api.core.SafeTimeTracker; -import buildcraft.core.utils.Utils; +import buildcraft.core.inventory.InvUtils; public class PipeItemsCompactorInventory { private class InventorySlot { @@ -101,16 +101,13 @@ public void addItemStack(World worldObj, ItemStack stack) { */ public void dropContents(World worldObj, int xCoord, int yCoord, int zCoord) { for (InventorySlot inventorySlot : inventoryContents) { - Utils.dropItems(worldObj, inventorySlot.getItemStack(), xCoord, yCoord, zCoord); + InvUtils.dropItems(worldObj, inventorySlot.getItemStack(), xCoord, yCoord, zCoord); } inventoryContents.clear(); } /** - * finds a stack in the list which fulfills on of these criteria: - * - stackSize is larger than stackSize - * - has not been changed since unchangedSince ticks - * - stack is full or not stackable + * finds a stack in the list which fulfills on of these criteria: - stackSize is larger than stackSize - has not been changed since unchangedSince ticks - stack is full or not stackable * * @param stackSize * @param unchangedSince @@ -120,8 +117,7 @@ public ItemStack findItemStackToRemove(World worldObj, int stackSize, int unchan for (Iterator inventorySlots = inventoryContents.iterator(); inventorySlots.hasNext();) { InventorySlot inventorySlot = inventorySlots.next(); - if (inventorySlot.getItemStack().stackSize >= stackSize || inventorySlot.isItemStackFull() - || inventorySlot.isNotModifiedSince(worldObj, unchangedSince)) { + if (inventorySlot.getItemStack().stackSize >= stackSize || inventorySlot.isItemStackFull() || inventorySlot.isNotModifiedSince(worldObj, unchangedSince)) { inventorySlots.remove(); return inventorySlot.getItemStack(); } diff --git a/common/abo/pipes/items/PipeItemsCrossover.java b/common/abo/pipes/items/PipeItemsCrossover.java index 157465a..d122419 100644 --- a/common/abo/pipes/items/PipeItemsCrossover.java +++ b/common/abo/pipes/items/PipeItemsCrossover.java @@ -12,25 +12,51 @@ package abo.pipes.items; +import java.util.LinkedList; + import net.minecraftforge.common.ForgeDirection; import abo.PipeIconProvider; import abo.pipes.ABOPipe; -import buildcraft.transport.pipes.PipeLogicStone; +import buildcraft.api.core.Position; +import buildcraft.transport.IPipeTransportItemsHook; +import buildcraft.transport.PipeTransportItems; +import buildcraft.transport.TravelingItem; /** - * This pipe will always prefer to use the opposite direction, so items will go - * "straight through" + * This pipe will always prefer to use the opposite direction, so items will go "straight through" * * @author blakmajik ported to BC > 2.2 by Flow86 */ -public class PipeItemsCrossover extends ABOPipe { +public class PipeItemsCrossover extends ABOPipe implements IPipeTransportItemsHook { public PipeItemsCrossover(int itemID) { - super(new PipeTransportItemsCrossover(), new PipeLogicStone(), itemID); + super(new PipeTransportItems(), itemID); } @Override public int getIconIndex(ForgeDirection direction) { return PipeIconProvider.PipeItemsCrossover; } + + @Override + public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, TravelingItem item) { + LinkedList list = new LinkedList(); + + pos.moveForwards(1.0); + if (transport.canReceivePipeObjects(pos.orientation, item)) + list.add(pos.orientation); + else + list = possibleOrientations; + + return list; + } + + @Override + public void entityEntered(TravelingItem item, ForgeDirection orientation) { + } + + @Override + public void readjustSpeed(TravelingItem item) { + transport.defaultReajustSpeed(item); + } } diff --git a/common/abo/pipes/items/PipeItemsExtraction.java b/common/abo/pipes/items/PipeItemsExtraction.java index 7edddc7..908902f 100644 --- a/common/abo/pipes/items/PipeItemsExtraction.java +++ b/common/abo/pipes/items/PipeItemsExtraction.java @@ -12,42 +12,38 @@ package abo.pipes.items; +import java.util.LinkedList; + +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import abo.ABO; import abo.PipeIconProvider; import buildcraft.api.core.IIconProvider; +import buildcraft.api.core.Position; import buildcraft.api.power.IPowerReceptor; -import buildcraft.transport.Pipe; -import buildcraft.transport.PipeTransportItems; +import buildcraft.api.transport.IPipe; +import buildcraft.transport.IPipeTransportItemsHook; +import buildcraft.transport.PipeConnectionBans; +import buildcraft.transport.TravelingItem; import buildcraft.transport.pipes.PipeItemsWood; -import cpw.mods.fml.relauncher.ReflectionHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** - * This pipe will always prefer to insert it's objects into another pipe over - * one that is not a pipe. + * This pipe will always prefer to insert it's objects into another pipe over one that is not a pipe. * * @author Scott Chamberlain (Leftler) ported to BC > 2.2 by Flow86 */ -public class PipeItemsExtraction extends PipeItemsWood implements IPowerReceptor { - private final int baseTexture = PipeIconProvider.PipeItemsExtraction; - private final int sideTexture = PipeIconProvider.PipeItemsExtractionSide; +public class PipeItemsExtraction extends PipeItemsWood implements IPowerReceptor, IPipeTransportItemsHook { + private final int standardIconIndex = PipeIconProvider.PipeItemsExtraction; + private final int solidIconIndex = PipeIconProvider.PipeItemsExtractionSide; public PipeItemsExtraction(int itemID) { - super(itemID, new PipeTransportItemsExtraction()); - - ((PipeTransportItems) transport).allowBouncing = true; - - // THIS IS DAMN UGLY - but I have no other chance to change logic - // afterwards :/ - try { - ReflectionHelper.setPrivateValue(Pipe.class, this, new PipeLogicExtraction(), "logic"); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (SecurityException e) { - e.printStackTrace(); - } + super(itemID); + + PipeConnectionBans.banConnection(PipeItemsExtraction.class, PipeItemsWood.class); + + transport.allowBouncing = true; } @Override @@ -59,14 +55,49 @@ public IIconProvider getIconProvider() { @Override public int getIconIndex(ForgeDirection direction) { if (direction == ForgeDirection.UNKNOWN) - return baseTexture; + return standardIconIndex; else { - int metadata = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int metadata = container.getBlockMetadata(); if (metadata == direction.ordinal()) - return sideTexture; + return solidIconIndex; + else + return standardIconIndex; + } + } + + @Override + public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, TravelingItem item) { + LinkedList nonPipesList = new LinkedList(); + LinkedList pipesList = new LinkedList(); + + item.blacklist.add(item.input.getOpposite()); - return baseTexture; + for (ForgeDirection o : possibleOrientations) { + if (!item.blacklist.contains(o) && container.pipe.outputOpen(o)) { + if (transport.canReceivePipeObjects(o, item)) { + + TileEntity entity = container.getTile(o); + if (entity instanceof IPipe) + pipesList.add(o); + else + nonPipesList.add(o); + } + } } + + if (!pipesList.isEmpty()) + return pipesList; + else + return nonPipesList; + } + + @Override + public void entityEntered(TravelingItem item, ForgeDirection orientation) { + } + + @Override + public void readjustSpeed(TravelingItem item) { + transport.defaultReajustSpeed(item); } } diff --git a/common/abo/pipes/items/PipeItemsInsertion.java b/common/abo/pipes/items/PipeItemsInsertion.java index 8b94fea..9cb3a5b 100644 --- a/common/abo/pipes/items/PipeItemsInsertion.java +++ b/common/abo/pipes/items/PipeItemsInsertion.java @@ -12,28 +12,68 @@ package abo.pipes.items; +import java.util.LinkedList; + +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import abo.PipeIconProvider; import abo.pipes.ABOPipe; +import buildcraft.api.core.Position; +import buildcraft.api.transport.IPipe; +import buildcraft.transport.IPipeTransportItemsHook; import buildcraft.transport.PipeTransportItems; -import buildcraft.transport.pipes.PipeLogicStone; +import buildcraft.transport.TravelingItem; /** - * This pipe will always prefer to insert it's objects into a tile that is not a - * pipe over another pipe. + * This pipe will always prefer to insert it's objects into a tile that is not a pipe over another pipe. * * @author Scott Chamberlain (Leftler) ported to BC > 2.2 by Flow86 */ -public class PipeItemsInsertion extends ABOPipe { +public class PipeItemsInsertion extends ABOPipe implements IPipeTransportItemsHook { public PipeItemsInsertion(int itemID) { - super(new PipeTransportItemsInsertion(), new PipeLogicStone(), itemID); + super(new PipeTransportItems(), itemID); - ((PipeTransportItems) transport).allowBouncing = true; + transport.allowBouncing = true; } @Override public int getIconIndex(ForgeDirection direction) { return PipeIconProvider.PipeItemsInsertion; } + + @Override + public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, TravelingItem item) { + LinkedList nonPipesList = new LinkedList(); + LinkedList pipesList = new LinkedList(); + + item.blacklist.add(item.input.getOpposite()); + + for (ForgeDirection o : possibleOrientations) { + if (!item.blacklist.contains(o) && container.pipe.outputOpen(o)) { + if (transport.canReceivePipeObjects(o, item)) { + + TileEntity entity = container.getTile(o); + if (entity instanceof IPipe) + pipesList.add(o); + else + nonPipesList.add(o); + } + } + } + + if (!nonPipesList.isEmpty()) + return nonPipesList; + + return pipesList; + } + + @Override + public void entityEntered(TravelingItem item, ForgeDirection orientation) { + } + + @Override + public void readjustSpeed(TravelingItem item) { + transport.defaultReajustSpeed(item); + } } diff --git a/common/abo/pipes/items/PipeItemsRoundRobin.java b/common/abo/pipes/items/PipeItemsRoundRobin.java index 90efb95..d61b756 100644 --- a/common/abo/pipes/items/PipeItemsRoundRobin.java +++ b/common/abo/pipes/items/PipeItemsRoundRobin.java @@ -12,23 +12,66 @@ package abo.pipes.items; +import java.util.LinkedList; + +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.ForgeDirection; import abo.PipeIconProvider; import abo.pipes.ABOPipe; -import buildcraft.transport.pipes.PipeLogicStone; +import buildcraft.api.core.Position; +import buildcraft.transport.IPipeTransportItemsHook; +import buildcraft.transport.PipeTransportItems; +import buildcraft.transport.TravelingItem; /** * @author Flow86 * */ -public class PipeItemsRoundRobin extends ABOPipe { +public class PipeItemsRoundRobin extends ABOPipe implements IPipeTransportItemsHook { + private int lastOrientation = 0; public PipeItemsRoundRobin(int itemID) { - super(new PipeTransportItemsRoundRobin(), new PipeLogicStone(), itemID); + super(new PipeTransportItems(), itemID); } @Override public int getIconIndex(ForgeDirection direction) { return PipeIconProvider.PipeItemsRoundRobin; } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + + lastOrientation = nbttagcompound.getInteger("lastOrientation"); + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + + nbttagcompound.setInteger("lastOrientation", lastOrientation); + } + + @Override + public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, TravelingItem item) { + if (possibleOrientations.size() == 0) { + return new LinkedList(); + } else { + lastOrientation = (lastOrientation + 1) % possibleOrientations.size(); + + LinkedList newPossibleOrientations = new LinkedList(); + newPossibleOrientations.add(possibleOrientations.get(lastOrientation)); + return newPossibleOrientations; + } + } + + @Override + public void entityEntered(TravelingItem item, ForgeDirection orientation) { + } + + @Override + public void readjustSpeed(TravelingItem item) { + transport.defaultReajustSpeed(item); + } } diff --git a/common/abo/pipes/items/PipeItemsStripes.java b/common/abo/pipes/items/PipeItemsStripes.java index f68e122..8cc8fd1 100644 --- a/common/abo/pipes/items/PipeItemsStripes.java +++ b/common/abo/pipes/items/PipeItemsStripes.java @@ -16,27 +16,26 @@ import abo.PipeIconProvider; import abo.pipes.ABOPipe; import buildcraft.api.core.Position; -import buildcraft.api.power.IPowerProvider; import buildcraft.api.power.IPowerReceptor; -import buildcraft.api.power.PowerFramework; -import buildcraft.api.transport.IPipedItem; -import buildcraft.core.EntityPassiveItem; import buildcraft.core.proxy.CoreProxy; import buildcraft.core.utils.BlockUtil; import buildcraft.core.utils.Utils; -import buildcraft.transport.EntityData; import buildcraft.transport.IItemTravelingHook; +import buildcraft.transport.PipeConnectionBans; import buildcraft.transport.PipeTransportItems; +import buildcraft.transport.pipes.PipeItemsObsidian; -public class PipeItemsStripes extends ABOPipe implements IItemTravelingHook, IPowerReceptor { +public class PipeItemsStripes extends ABOPipe implements IItemTravelingHook, IPowerReceptor { private static final int powerToBreakABlock = 50; private IPowerProvider powerProvider; public PipeItemsStripes(int itemID) { - super(new PipeTransportItems(), new PipeLogicStripes(), itemID); + super(new PipeTransportItems(), itemID); - ((PipeTransportItems) transport).travelHook = this; + PipeConnectionBans.banConnection(PipeItemsObsidian.class, PipeItemsStripes.class); + + transport.travelHook = this; powerProvider = PowerFramework.currentFramework.createPowerProvider(); powerProvider.configure(25, 0, powerToBreakABlock / 2, powerToBreakABlock, powerToBreakABlock * 10); @@ -79,25 +78,13 @@ public void drop(PipeTransportItems pipe, EntityData data) { p.moveForwards(1.0); /* - * if (convertPipe(pipe, data)) - * if(CoreProxy.proxy.isSimulating(worldObj)) - * BuildCraftTransport.pipeItemsStipes.onItemUseFirst(new - * ItemStack(BuildCraftTransport.pipeItemsStipes), - * CoreProxy.proxy.getBuildCraftPlayer(worldObj), worldObj, (int) p.x, - * (int) p.y - 1, (int) p.z, 1); else + * if (convertPipe(pipe, data)) if(CoreProxy.proxy.isSimulating(worldObj)) BuildCraftTransport.pipeItemsStipes.onItemUseFirst(new ItemStack(BuildCraftTransport.pipeItemsStipes), + * CoreProxy.proxy.getBuildCraftPlayer(worldObj), worldObj, (int) p.x, (int) p.y - 1, (int) p.z, 1); else */ if (worldObj.getBlockId((int) p.x, (int) p.y, (int) p.z) == 0) - data.item - .getItemStack() - .getItem() - .onItemUse(data.item.getItemStack(), CoreProxy.proxy.getBuildCraftPlayer(worldObj), worldObj, (int) p.x, (int) p.y - 1, (int) p.z, 1, 0.0f, - 0.0f, 0.0f); + data.item.getItemStack().getItem().onItemUse(data.item.getItemStack(), CoreProxy.proxy.getBuildCraftPlayer(worldObj), worldObj, (int) p.x, (int) p.y - 1, (int) p.z, 1, 0.0f, 0.0f, 0.0f); else - data.item - .getItemStack() - .getItem() - .onItemUse(data.item.getItemStack(), CoreProxy.proxy.getBuildCraftPlayer(worldObj), worldObj, (int) p.x, (int) p.y, (int) p.z, 1, 0.0f, - 0.0f, 0.0f); + data.item.getItemStack().getItem().onItemUse(data.item.getItemStack(), CoreProxy.proxy.getBuildCraftPlayer(worldObj), worldObj, (int) p.x, (int) p.y, (int) p.z, 1, 0.0f, 0.0f, 0.0f); } @Override @@ -107,32 +94,20 @@ public void centerReached(PipeTransportItems pipe, EntityData data) { } /* - * @SuppressWarnings("unchecked") public boolean - * convertPipe(PipeTransportItems pipe, EntityData data) { + * @SuppressWarnings("unchecked") public boolean convertPipe(PipeTransportItems pipe, EntityData data) { * - * if (data.item.getItemStack().getItem() instanceof ItemPipe) { if - * (!(data.item.getItemStack().itemID == - * BuildCraftTransport.pipeItemsStipes.shiftedIndex)) { + * if (data.item.getItemStack().getItem() instanceof ItemPipe) { if (!(data.item.getItemStack().itemID == BuildCraftTransport.pipeItemsStipes.shiftedIndex)) { * - * Pipe newPipe = - * BlockGenericPipe.createPipe(data.item.getItemStack().itemID); - * if(newPipe.transport instanceof PipeTransportItems) { - * newPipe.setTile(this.container); this.container.pipe = newPipe; - * ((PipeTransportItems) newPipe.transport).travelingEntities = - * (TreeMap) pipe.travelingEntities .clone(); + * Pipe newPipe = BlockGenericPipe.createPipe(data.item.getItemStack().itemID); if(newPipe.transport instanceof PipeTransportItems) { newPipe.setTile(this.container); this.container.pipe = + * newPipe; ((PipeTransportItems) newPipe.transport).travelingEntities = (TreeMap) pipe.travelingEntities .clone(); * * * - * int blockID = BuildCraftTransport.genericPipeBlock.blockID; if - * (BlockGenericPipe.placePipe(newPipe, worldObj, xCoord, yCoord, zCoord, - * blockID, 0)) { + * int blockID = BuildCraftTransport.genericPipeBlock.blockID; if (BlockGenericPipe.placePipe(newPipe, worldObj, xCoord, yCoord, zCoord, blockID, 0)) { * - * //Block.blocksList[blockID].onBlockPlacedBy(worldObj, xCoord, yCoord, - * zCoord, entityplayer); + * //Block.blocksList[blockID].onBlockPlacedBy(worldObj, xCoord, yCoord, zCoord, entityplayer); * - * data.item.getItemStack().stackSize--; } if - * (data.item.getItemStack().stackSize <= 0){ ((PipeTransportItems) - * newPipe.transport).travelingEntities.remove(data.item.getEntityId()); + * data.item.getItemStack().stackSize--; } if (data.item.getItemStack().stackSize <= 0){ ((PipeTransportItems) newPipe.transport).travelingEntities.remove(data.item.getEntityId()); * * pipe.scheduleRemoval(data.item); } * diff --git a/common/abo/pipes/items/PipeLogicExtraction.java b/common/abo/pipes/items/PipeLogicExtraction.java deleted file mode 100644 index f55c733..0000000 --- a/common/abo/pipes/items/PipeLogicExtraction.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (C) 2011-2013 Flow86 - * - * AdditionalBuildcraftObjects is open-source. - * - * It is distributed under the terms of my Open Source License. - * It grants rights to read, modify, compile or run the code. - * It does *NOT* grant the right to redistribute this software or its - * modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package abo.pipes.items; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import buildcraft.transport.Pipe; -import buildcraft.transport.TileGenericPipe; -import buildcraft.transport.pipes.PipeLogicWood; - -/** - * This pipe will always prefer to insert it's objects into another pipe over - * one that is not a pipe. - * - * @author Scott Chamberlain (Leftler) ported to BC > 2.2 by Flow86 - */ -public class PipeLogicExtraction extends PipeLogicWood { - - @Override - public boolean canPipeConnect(TileEntity tile, ForgeDirection side) { - Pipe pipe2 = null; - - if (tile instanceof TileGenericPipe) { - pipe2 = ((TileGenericPipe) tile).pipe; - } - - return (pipe2 == null || (pipe2.logic instanceof PipeLogicExtraction || !(pipe2.logic instanceof PipeLogicWood))) && super.canPipeConnect(tile, side); - } -} diff --git a/common/abo/pipes/items/PipeLogicStripes.java b/common/abo/pipes/items/PipeLogicStripes.java deleted file mode 100644 index 1630620..0000000 --- a/common/abo/pipes/items/PipeLogicStripes.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) SpaceToad, 2011 - * http://www.mod-buildcraft.com - * - * BuildCraft is distributed under the terms of the Minecraft Mod Public - * License 1.0, or MMPL. Please check the contents of the license located in - * http://www.mod-buildcraft.com/MMPL-1.0.txt - */ - -package abo.pipes.items; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import buildcraft.transport.Pipe; -import buildcraft.transport.TileGenericPipe; -import buildcraft.transport.pipes.PipeLogic; -import buildcraft.transport.pipes.PipeLogicObsidian; - -public class PipeLogicStripes extends PipeLogic { - - @Override - public boolean canPipeConnect(TileEntity tile, ForgeDirection side) { - Pipe pipe2 = null; - - if (tile instanceof TileGenericPipe) - pipe2 = ((TileGenericPipe) tile).pipe; - - return (pipe2 == null || !(pipe2.logic instanceof PipeLogicStripes) && !(pipe2.logic instanceof PipeLogicObsidian)) && super.canPipeConnect(tile, side); - } - -} diff --git a/common/abo/pipes/items/PipeTransportItemsCrossover.java b/common/abo/pipes/items/PipeTransportItemsCrossover.java deleted file mode 100644 index 4f5fedb..0000000 --- a/common/abo/pipes/items/PipeTransportItemsCrossover.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (C) 2011-2013 Flow86 - * - * AdditionalBuildcraftObjects is open-source. - * - * It is distributed under the terms of my Open Source License. - * It grants rights to read, modify, compile or run the code. - * It does *NOT* grant the right to redistribute this software or its - * modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package abo.pipes.items; - -import java.util.LinkedList; - -import net.minecraftforge.common.ForgeDirection; -import buildcraft.api.core.Position; -import buildcraft.transport.EntityData; -import buildcraft.transport.PipeTransportItems; - -/** - * This pipe will always prefer to use the opposite direction, so items will go - * "straight through" - * - * @author blakmajik ported to BC > 2.2 by Flow86 - */ -public class PipeTransportItemsCrossover extends PipeTransportItems { - - @Override - public LinkedList getPossibleMovements(EntityData data) { - LinkedList list = new LinkedList(); - - Position newPos = new Position(xCoord, yCoord, zCoord, data.input); - newPos.moveForwards(1.0); - if (canReceivePipeObjects(newPos.orientation, data.item)) - list.add(newPos.orientation); - else - list = super.getPossibleMovements(data); - - return list; - } -} diff --git a/common/abo/pipes/items/PipeTransportItemsExtraction.java b/common/abo/pipes/items/PipeTransportItemsExtraction.java deleted file mode 100644 index b7301d3..0000000 --- a/common/abo/pipes/items/PipeTransportItemsExtraction.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (C) 2011-2013 Flow86 - * - * AdditionalBuildcraftObjects is open-source. - * - * It is distributed under the terms of my Open Source License. - * It grants rights to read, modify, compile or run the code. - * It does *NOT* grant the right to redistribute this software or its - * modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package abo.pipes.items; - -import java.util.LinkedList; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import buildcraft.api.transport.IPipeEntry; -import buildcraft.transport.EntityData; -import buildcraft.transport.PipeTransportItems; - -/** - * This pipe will always prefer to insert it's objects into another pipe over - * one that is not a pipe. - * - * @author Scott Chamberlain (Leftler) ported to BC > 2.2 by Flow86 - */ -public class PipeTransportItemsExtraction extends PipeTransportItems { - @Override - public LinkedList getPossibleMovements(EntityData data) { - LinkedList nonPipesList = new LinkedList(); - LinkedList pipesList = new LinkedList(); - - data.blacklist.add(data.input.getOpposite()); - - for (ForgeDirection o : ForgeDirection.VALID_DIRECTIONS) { - if (!data.blacklist.contains(o) && container.pipe.outputOpen(o)) { - if (canReceivePipeObjects(o, data.item)) { - - TileEntity entity = container.getTile(o); - if (entity instanceof IPipeEntry) - pipesList.add(o); - else - nonPipesList.add(o); - } - } - } - - if (!pipesList.isEmpty()) - return pipesList; - else - return nonPipesList; - } -} diff --git a/common/abo/pipes/items/PipeTransportItemsInsertion.java b/common/abo/pipes/items/PipeTransportItemsInsertion.java deleted file mode 100644 index a1237e0..0000000 --- a/common/abo/pipes/items/PipeTransportItemsInsertion.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (C) 2011-2013 Flow86 - * - * AdditionalBuildcraftObjects is open-source. - * - * It is distributed under the terms of my Open Source License. - * It grants rights to read, modify, compile or run the code. - * It does *NOT* grant the right to redistribute this software or its - * modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package abo.pipes.items; - -import java.util.LinkedList; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import buildcraft.api.transport.IPipeEntry; -import buildcraft.transport.EntityData; -import buildcraft.transport.PipeTransportItems; - -/** - * This pipe will always prefer to insert it's objects into a tile that is not a - * pipe over another pipe. - * - * @author Scott Chamberlain (Leftler) ported to BC > 2.2 by Flow86 - */ -public class PipeTransportItemsInsertion extends PipeTransportItems { - - @Override - public LinkedList getPossibleMovements(EntityData data) { - LinkedList nonPipesList = new LinkedList(); - LinkedList pipesList = new LinkedList(); - - data.blacklist.add(data.input.getOpposite()); - - for (ForgeDirection o : ForgeDirection.VALID_DIRECTIONS) { - if (!data.blacklist.contains(o) && container.pipe.outputOpen(o)) { - if (canReceivePipeObjects(o, data.item)) { - - TileEntity entity = container.getTile(o); - if (entity instanceof IPipeEntry) - pipesList.add(o); - else - nonPipesList.add(o); - } - } - } - - if (!nonPipesList.isEmpty()) - return nonPipesList; - - return pipesList; - } -} diff --git a/common/abo/pipes/items/PipeTransportItemsRoundRobin.java b/common/abo/pipes/items/PipeTransportItemsRoundRobin.java deleted file mode 100644 index ca096b5..0000000 --- a/common/abo/pipes/items/PipeTransportItemsRoundRobin.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (C) 2011-2013 Flow86 - * - * AdditionalBuildcraftObjects is open-source. - * - * It is distributed under the terms of my Open Source License. - * It grants rights to read, modify, compile or run the code. - * It does *NOT* grant the right to redistribute this software or its - * modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package abo.pipes.items; - -import java.util.LinkedList; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.ForgeDirection; -import buildcraft.transport.EntityData; -import buildcraft.transport.PipeTransportItems; - -/** - * @author Flow86 - * - */ -public class PipeTransportItemsRoundRobin extends PipeTransportItems { - private int lastOrientation = 0; - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - - lastOrientation = nbttagcompound.getInteger("lastOrientation"); - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); - - nbttagcompound.setInteger("lastOrientation", lastOrientation); - } - - @Override - public ForgeDirection resolveDestination(EntityData data) { - LinkedList listOfPossibleMovements = getPossibleMovements(data); - - if (listOfPossibleMovements.size() == 0) { - return ForgeDirection.UNKNOWN; - } else { - lastOrientation = (lastOrientation + 1) % listOfPossibleMovements.size(); - - return listOfPossibleMovements.get(lastOrientation); - } - } -} diff --git a/common/abo/pipes/liquids/PipeLiquidsBalance.java b/common/abo/pipes/liquids/PipeLiquidsBalance.java index 4462d03..85066fa 100644 --- a/common/abo/pipes/liquids/PipeLiquidsBalance.java +++ b/common/abo/pipes/liquids/PipeLiquidsBalance.java @@ -16,36 +16,34 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.liquids.ILiquidTank; -import net.minecraftforge.liquids.ITankContainer; -import net.minecraftforge.liquids.LiquidStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; import abo.PipeIconProvider; import abo.pipes.ABOPipe; -import buildcraft.transport.PipeTransportLiquids; +import buildcraft.transport.PipeTransportFluids; import buildcraft.transport.TileGenericPipe; -import buildcraft.transport.pipes.PipeLogicStone; /** * @author Flow86 * */ class Neighbor { - public Neighbor(ITankContainer container, ForgeDirection orientation) { + public Neighbor(IFluidTank container, ForgeDirection orientation) { c = container; o = orientation; } public int getLiquidId() { - ILiquidTank tank = getTank(); + IFluidTank tank = getTank(); if (tank == null) return 0; - LiquidStack liquid = tank.getLiquid(); + FluidStack liquid = tank.getFluid(); return liquid != null ? liquid.itemID : 0; } public int getLiquidCapacity() { - ILiquidTank tank = getTank(); + IFluidTank tank = getTank(); if (tank == null) return 0; @@ -53,15 +51,15 @@ public int getLiquidCapacity() { } public int getLiquidAmount() { - ILiquidTank tank = getTank(); + IFluidTank tank = getTank(); if (tank == null) return 0; - LiquidStack liquid = tank.getLiquid(); + FluidStack liquid = tank.getFluid(); return liquid != null ? liquid.amount : 0; } - public ILiquidTank getTank() { + public IFluidTank getTank() { try { return c.getTanks(o.getOpposite())[0]; } catch (ArrayIndexOutOfBoundsException e) { @@ -73,7 +71,7 @@ public ILiquidTank getTank() { } } - public ITankContainer getTankEntity() { + public IFluidTank getTankEntity() { return c; } @@ -81,7 +79,7 @@ public ForgeDirection getOrientation() { return o; } - private final ITankContainer c; + private final IFluidTank c; private final ForgeDirection o; } @@ -92,14 +90,14 @@ public ForgeDirection getOrientation() { * @author Flow86 * */ -public class PipeLiquidsBalance extends ABOPipe { +public class PipeLiquidsBalance extends ABOPipe { private final int blockTexture = 5 * 16 + 0; public PipeLiquidsBalance(int itemID) { - super(new PipeTransportLiquids(), new PipeLogicStone(), itemID); + super(new PipeTransportFluids(), itemID); - ((PipeTransportLiquids) transport).flowRate = 160; - ((PipeTransportLiquids) transport).travelDelay = 1; + transport.flowRate = 160; + transport.travelDelay = 1; } @Override @@ -116,7 +114,7 @@ public void updateEntity() { @Override public boolean canPipeConnect(TileEntity tile, ForgeDirection side) { - if (tile == null || !(tile instanceof ITankContainer) || tile instanceof TileGenericPipe) + if (tile == null || !(tile instanceof IFluidTank) || tile instanceof TileGenericPipe) return false; return super.canPipeConnect(tile, side); @@ -127,33 +125,33 @@ public void doWork() { LinkedList neighbors = new LinkedList(); for (ForgeDirection o : ForgeDirection.VALID_DIRECTIONS) { - TileEntity tile = container.tileBuffer[o.ordinal()].getTile(); - if (tile == null || tile instanceof TileGenericPipe || !(tile instanceof ITankContainer)) + TileEntity tile = container.getTile(o); + if (tile == null || tile instanceof TileGenericPipe || !(tile instanceof IFluidTank)) continue; - Neighbor neighbor = new Neighbor((ITankContainer) tile, o); + Neighbor neighbor = new Neighbor((IFluidTank) tile, o); neighbors.add(neighbor); } - PipeTransportLiquids ltransport = (PipeTransportLiquids) transport; + PipeTransportFluids ltransport = transport; int liquidID = 0; int liquidAmount = 0; int liquidCapacity = 0; int liquidNeighbors = 0; - for (ILiquidTank tank : ltransport.getTanks(ForgeDirection.UNKNOWN)) { + for (IFluidTank tank : ltransport.getTanks(ForgeDirection.UNKNOWN)) { if (tank == null) continue; - LiquidStack liquid = tank.getLiquid(); + FluidStack liquid = tank.getLiquid(); if (liquid != null) liquidAmount += liquid.amount; } - ILiquidTank tank = ltransport.getTanks(ForgeDirection.UNKNOWN)[ForgeDirection.UNKNOWN.ordinal()]; - LiquidStack liquid = null; + IFluidTank tank = ltransport.getTanks(ForgeDirection.UNKNOWN)[ForgeDirection.UNKNOWN.ordinal()]; + FluidStack liquid = null; if (tank != null) liquid = tank.getLiquid(); @@ -194,7 +192,7 @@ public void doWork() { if (liquidToExtract > 1) { // drain tank (read available liquid) - LiquidStack liquidExtracted = neighbor.getTankEntity().drain(neighbor.getOrientation(), liquidToExtract > ltransport.flowRate ? ltransport.flowRate : liquidToExtract, false); + FluidStack liquidExtracted = neighbor.getTankEntity().drain(neighbor.getOrientation(), liquidToExtract > ltransport.flowRate ? ltransport.flowRate : liquidToExtract, false); if (liquidExtracted != null) { // fill pipe int filled = ltransport.fill(neighbor.getOrientation(), liquidExtracted, true); @@ -206,7 +204,7 @@ public void doWork() { } else if (liquidToExtract < 1) { // drain pipe (read available liquid) - LiquidStack liquidExtracted = ltransport.drain(neighbor.getOrientation().getOpposite(), liquidToExtract > ltransport.flowRate ? ltransport.flowRate : liquidToExtract, false); + FluidStack liquidExtracted = ltransport.drain(neighbor.getOrientation().getOpposite(), liquidToExtract > ltransport.flowRate ? ltransport.flowRate : liquidToExtract, false); if (liquidExtracted != null) { // fill tank int filled = neighbor.getTankEntity().fill(neighbor.getOrientation().getOpposite(), liquidExtracted, true); diff --git a/common/abo/pipes/liquids/PipeLiquidsDiamond.java b/common/abo/pipes/liquids/PipeLiquidsDiamond.java index 2ef6f0c..f10ab49 100644 --- a/common/abo/pipes/liquids/PipeLiquidsDiamond.java +++ b/common/abo/pipes/liquids/PipeLiquidsDiamond.java @@ -22,8 +22,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.liquids.ILiquidTank; -import net.minecraftforge.liquids.LiquidStack; import abo.ABO; import abo.PipeIconProvider; import abo.gui.ABOGuiIds; @@ -31,19 +29,19 @@ import buildcraft.core.network.IClientState; import buildcraft.core.utils.Utils; import buildcraft.transport.BlockGenericPipe; -import buildcraft.transport.PipeTransportLiquids; +import buildcraft.transport.PipeTransportFluids; /** * @author Flow86 * */ -public class PipeLiquidsDiamond extends ABOPipe implements IClientState { +public class PipeLiquidsDiamond extends ABOPipe implements IClientState { public PipeLiquidsDiamond(int itemID) { - super(new PipeTransportLiquids(), new PipeLogicLiquidsDiamond(), itemID); + super(new PipeTransportFluids(), new PipeLogicLiquidsDiamond(), itemID); - ((PipeTransportLiquids) transport).flowRate = 160; - ((PipeTransportLiquids) transport).travelDelay = 2; + transport.flowRate = 160; + transport.travelDelay = 2; } @Override @@ -89,7 +87,7 @@ public boolean outputOpen(ForgeDirection to) { if (!super.outputOpen(to)) return false; - PipeTransportLiquids transportLiquids = (PipeTransportLiquids) transport; + PipeTransportFluids transportLiquids = transport; ILiquidTank[] tanks = transportLiquids.getTanks(ForgeDirection.UNKNOWN); diff --git a/common/abo/pipes/liquids/PipeLiquidsGoldenIron.java b/common/abo/pipes/liquids/PipeLiquidsGoldenIron.java index 686adc6..de82a45 100644 --- a/common/abo/pipes/liquids/PipeLiquidsGoldenIron.java +++ b/common/abo/pipes/liquids/PipeLiquidsGoldenIron.java @@ -12,39 +12,124 @@ package abo.pipes.liquids; +import java.util.LinkedList; +import java.util.Map; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.fluids.IFluidTank; import abo.PipeIconProvider; import abo.pipes.ABOPipe; -import buildcraft.transport.PipeTransportLiquids; +import buildcraft.BuildCraftTransport; +import buildcraft.api.gates.IAction; +import buildcraft.transport.Pipe; +import buildcraft.transport.PipeTransportFluids; +import buildcraft.transport.TileGenericPipe; +import buildcraft.transport.pipes.PipeFluidsWood; import buildcraft.transport.pipes.PipeLogicIron; +import buildcraft.transport.triggers.ActionPipeDirection; /** * @author Flow86 * */ -public class PipeLiquidsGoldenIron extends ABOPipe { +public class PipeLiquidsGoldenIron extends ABOPipe { + + private final int standardIconIndex = PipeIconProvider.PipeLiquidsGoldenIron; + private final int solidIconIndex = PipeIconProvider.PipeLiquidsGoldenIronSide; - private final int baseTexture = PipeIconProvider.PipeLiquidsGoldenIron; - private final int sideTexture = PipeIconProvider.PipeLiquidsGoldenIronSide; + private final PipeLogicIron logic = new PipeLogicIron(this) { + @Override + protected boolean isValidFacing(ForgeDirection facing) { + TileEntity tile = pipe.container.getTile(facing); + if (tile instanceof TileGenericPipe) { + Pipe otherPipe = ((TileGenericPipe) tile).pipe; + if (otherPipe instanceof PipeFluidsWood) + return false; + if (otherPipe.transport instanceof PipeTransportFluids) + return true; + return false; + } + if (tile instanceof IFluidTank) + return true; + return false; + } + }; public PipeLiquidsGoldenIron(int itemID) { - super(new PipeTransportLiquids(), new PipeLogicIron(), itemID); + super(new PipeTransportFluids(), itemID); + + transport.flowRate = 80; + transport.travelDelay = 2; + } + + @Override + public boolean blockActivated(EntityPlayer entityplayer) { + return logic.blockActivated(entityplayer); + } - ((PipeTransportLiquids) transport).flowRate = 80; - ((PipeTransportLiquids) transport).travelDelay = 2; + @Override + public void onNeighborBlockChange(int blockId) { + logic.switchOnRedstone(); + super.onNeighborBlockChange(blockId); + } + + @Override + public void onBlockPlaced() { + logic.onBlockPlaced(); + super.onBlockPlaced(); + } + + @Override + public void initialize() { + logic.initialize(); + super.initialize(); + } + + @Override + public boolean outputOpen(ForgeDirection to) { + return super.outputOpen(to) && logic.outputOpen(to); } @Override public int getIconIndex(ForgeDirection direction) { if (direction == ForgeDirection.UNKNOWN) - return baseTexture; + return standardIconIndex; else { - int metadata = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int metadata = container.getBlockMetadata(); + + if (metadata != direction.ordinal()) + return solidIconIndex; + else + return standardIconIndex; + } + } + + @Override + protected void actionsActivated(Map actions) { + super.actionsActivated(actions); - if (metadata == direction.ordinal()) - return baseTexture; + for (Map.Entry action : actions.entrySet()) { + if (action.getKey() instanceof ActionPipeDirection && action.getValue() != null && action.getValue()) { + logic.setFacing(((ActionPipeDirection) action.getKey()).direction); + break; + } + } + } - return sideTexture; + @Override + public LinkedList getActions() { + LinkedList action = super.getActions(); + for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { + if (container.isPipeConnected(direction)) + action.add(BuildCraftTransport.actionPipeDirection[direction.ordinal()]); } + return action; + } + + @Override + public boolean canConnectRedstone() { + return true; } } diff --git a/common/abo/pipes/liquids/PipeLiquidsPump.java b/common/abo/pipes/liquids/PipeLiquidsPump.java index d173d7b..bf8b3b3 100644 --- a/common/abo/pipes/liquids/PipeLiquidsPump.java +++ b/common/abo/pipes/liquids/PipeLiquidsPump.java @@ -14,21 +14,22 @@ import net.minecraft.block.Block; import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.liquids.LiquidStack; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; import abo.PipeIconProvider; import abo.pipes.ABOPipe; -import buildcraft.transport.PipeTransportLiquids; +import buildcraft.core.utils.BlockUtil; +import buildcraft.transport.PipeTransportFluids; /** - * a pump pipe like in AdditionalPipes, but possibility to enable it for - * different liquids (standard one is for water). + * a pump pipe like in AdditionalPipes, but possibility to enable it for different liquids (standard one is for water). * * Original authors: Zeldo, DaStormBringer, Kyprus and/or tcooc * * @author Flow86 * */ -public class PipeLiquidsPump extends ABOPipe { +public class PipeLiquidsPump extends ABOPipe { private final Block liquid; @@ -37,18 +38,18 @@ public PipeLiquidsPump(int itemID) { } public PipeLiquidsPump(int itemID, Block liquidStill) { - super(new PipeTransportLiquids(), new PipeLogicPump(), itemID); + super(new PipeTransportFluids(), itemID); liquid = liquidStill; - ((PipeTransportLiquids) transport).flowRate = 80; - ((PipeTransportLiquids) transport).travelDelay = 4; + transport.flowRate = 80; + transport.travelDelay = 4; } @Override public void updateEntity() { super.updateEntity(); - if (worldObj.getBlockId(xCoord, yCoord - 1, zCoord) == liquid.blockID) { - ((PipeTransportLiquids) transport).fill(ForgeDirection.DOWN, new LiquidStack(liquid, 100), true); + if (container.worldObj.getBlockId(container.xCoord, container.yCoord - 1, container.zCoord) == liquid.blockID) { + transport.fill(ForgeDirection.DOWN, new FluidStack(BlockUtil.getFluid(liquid.blockID), FluidContainerRegistry.BUCKET_VOLUME / 10), true); } } diff --git a/common/abo/pipes/liquids/PipeLogicPump.java b/common/abo/pipes/liquids/PipeLogicPump.java deleted file mode 100644 index 4d4b0d1..0000000 --- a/common/abo/pipes/liquids/PipeLogicPump.java +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (C) 2011-2013 Flow86 - * - * AdditionalBuildcraftObjects is open-source. - * - * It is distributed under the terms of my Open Source License. - * It grants rights to read, modify, compile or run the code. - * It does *NOT* grant the right to redistribute this software or its - * modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package abo.pipes.liquids; - -import buildcraft.transport.pipes.PipeLogic; - -public class PipeLogicPump extends PipeLogic { - -}