parent
5886faecc4
commit
9a465cff69
3 changed files with 38 additions and 30 deletions
|
@ -9,18 +9,7 @@
|
|||
|
||||
package buildcraft.transport;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import cpw.mods.fml.common.network.PacketDispatcher;
|
||||
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import buildcraft.api.core.Position;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.inventory.ISpecialInventory;
|
||||
|
@ -34,7 +23,14 @@ import buildcraft.core.network.PacketIds;
|
|||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.transport.network.PacketPipeTransportContent;
|
||||
|
||||
import cpw.mods.fml.common.network.PacketDispatcher;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
import net.minecraft.src.EntityItem;
|
||||
import net.minecraft.src.IInventory;
|
||||
import net.minecraft.src.ItemStack;
|
||||
|
@ -42,6 +38,7 @@ import net.minecraft.src.NBTTagCompound;
|
|||
import net.minecraft.src.NBTTagList;
|
||||
import net.minecraft.src.Packet;
|
||||
import net.minecraft.src.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
public class PipeTransportItems extends PipeTransport {
|
||||
|
||||
|
@ -165,10 +162,11 @@ public class PipeTransportItems extends PipeTransport {
|
|||
|
||||
data.blacklist.add(data.input.getOpposite());
|
||||
|
||||
for (ForgeDirection o : ForgeDirection.VALID_DIRECTIONS)
|
||||
for (ForgeDirection o : ForgeDirection.VALID_DIRECTIONS) {
|
||||
if (!data.blacklist.contains(o) && container.pipe.outputOpen(o))
|
||||
if (canReceivePipeObjects(o, data.item))
|
||||
result.add(o);
|
||||
}
|
||||
|
||||
if (result.size() == 0 && allowBouncing) {
|
||||
if (canReceivePipeObjects(data.input.getOpposite(), data.item))
|
||||
|
@ -345,7 +343,7 @@ public class PipeTransportItems extends PipeTransport {
|
|||
|
||||
NBTTagList nbttaglist = nbt.getTagList("travelingEntities");
|
||||
|
||||
for (int j = 0; j < nbttaglist.tagCount(); ++j)
|
||||
for (int j = 0; j < nbttaglist.tagCount(); ++j) {
|
||||
try {
|
||||
NBTTagCompound dataTag = (NBTTagCompound) nbttaglist.tagAt(j);
|
||||
|
||||
|
@ -369,6 +367,7 @@ public class PipeTransportItems extends PipeTransport {
|
|||
// It may be the case that entities cannot be reloaded between
|
||||
// two versions - ignore these errors.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -403,7 +402,7 @@ public class PipeTransportItems extends PipeTransport {
|
|||
|
||||
EntityData data = travelingEntities.remove(packet.getEntityId());
|
||||
|
||||
IPipedItem item = null;
|
||||
IPipedItem item;
|
||||
if(data == null) {
|
||||
item = EntityPassiveItem.getOrCreate(worldObj, packet.getEntityId());
|
||||
} else {
|
||||
|
|
|
@ -137,12 +137,14 @@ public class PipeTransportLiquids extends PipeTransport implements ITankContaine
|
|||
|
||||
public byte initClient = 0;
|
||||
public short travelDelay = 12;
|
||||
public short flowRate = 20;
|
||||
public short flowRate = 10;
|
||||
public LiquidStack[] renderCache = new LiquidStack[orientations.length];
|
||||
|
||||
private final PipeSection[] internalTanks = new PipeSection[orientations.length];
|
||||
|
||||
private final TransferState[] transferState = new TransferState[directions.length];
|
||||
|
||||
private final int[] inputPerTick = new int[directions.length];
|
||||
|
||||
private final short[] inputTTL = new short[] { 0, 0, 0, 0, 0, 0 };
|
||||
private final short[] outputTTL = new short[] { OUTPUT_TTL, OUTPUT_TTL, OUTPUT_TTL, OUTPUT_TTL, OUTPUT_TTL, OUTPUT_TTL };
|
||||
|
@ -358,7 +360,6 @@ public class PipeTransportLiquids extends PipeTransport implements ITankContaine
|
|||
}
|
||||
|
||||
private void moveToCenter() {
|
||||
int [] maxInput = new int[] {0,0,0,0,0,0};
|
||||
int transferInCount = 0;
|
||||
LiquidStack stackInCenter = internalTanks[ForgeDirection.UNKNOWN.ordinal()].drain(flowRate, false);
|
||||
int spaceAvailable = internalTanks[ForgeDirection.UNKNOWN.ordinal()].getCapacity();
|
||||
|
@ -367,27 +368,35 @@ public class PipeTransportLiquids extends PipeTransport implements ITankContaine
|
|||
}
|
||||
|
||||
|
||||
for (ForgeDirection direction : directions){
|
||||
LiquidStack testStack = internalTanks[direction.ordinal()].drain(flowRate, false);
|
||||
if (testStack == null) continue;
|
||||
if (stackInCenter != null && !stackInCenter.isLiquidEqual(testStack)) continue;
|
||||
maxInput[direction.ordinal()] = testStack.amount;
|
||||
for (ForgeDirection dir : directions) {
|
||||
inputPerTick[dir.ordinal()] = 0;
|
||||
if (transferState[dir.ordinal()] == TransferState.Output) {
|
||||
continue;
|
||||
}
|
||||
LiquidStack testStack = internalTanks[dir.ordinal()].drain(flowRate, false);
|
||||
if (testStack == null) {
|
||||
continue;
|
||||
}
|
||||
if (stackInCenter != null && !stackInCenter.isLiquidEqual(testStack)) {
|
||||
continue;
|
||||
}
|
||||
inputPerTick[dir.ordinal()] = testStack.amount;
|
||||
transferInCount++;
|
||||
}
|
||||
|
||||
for (ForgeDirection direction : directions){
|
||||
for (ForgeDirection dir : directions) {
|
||||
//Move liquid from input sides to the center
|
||||
if (transferState[direction.ordinal()] != TransferState.Output && maxInput[direction.ordinal()] > 0){
|
||||
if (transferState[dir.ordinal()] != TransferState.Output && inputPerTick[dir.ordinal()] > 0) {
|
||||
|
||||
int ammountToDrain = (int) ((double) maxInput[direction.ordinal()] / (double) flowRate / (double) transferInCount * (double) Math.min(flowRate, spaceAvailable));
|
||||
if (ammountToDrain < 1){
|
||||
int ammountToDrain = (int) ((double) inputPerTick[dir.ordinal()] / (double) flowRate / (double) transferInCount * (double) Math.min(flowRate, spaceAvailable));
|
||||
if (ammountToDrain < 1) {
|
||||
ammountToDrain++;
|
||||
}
|
||||
|
||||
LiquidStack liquidToPush = internalTanks[direction.ordinal()].drain(ammountToDrain, false);
|
||||
LiquidStack liquidToPush = internalTanks[dir.ordinal()].drain(ammountToDrain, false);
|
||||
if (liquidToPush != null) {
|
||||
int filled = internalTanks[ForgeDirection.UNKNOWN.ordinal()].fill(liquidToPush, true);
|
||||
internalTanks[direction.ordinal()].drain(filled, true);
|
||||
internalTanks[dir.ordinal()].drain(filled, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,17 +8,17 @@
|
|||
|
||||
package buildcraft.transport.pipes;
|
||||
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import buildcraft.core.DefaultProps;
|
||||
import buildcraft.transport.Pipe;
|
||||
import buildcraft.transport.PipeTransportLiquids;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
public class PipeLiquidsGold extends Pipe {
|
||||
|
||||
public PipeLiquidsGold(int itemID) {
|
||||
super(new PipeTransportLiquids(), new PipeLogicGold(), itemID);
|
||||
|
||||
((PipeTransportLiquids) transport).flowRate = 80;
|
||||
((PipeTransportLiquids) transport).flowRate = 40;
|
||||
((PipeTransportLiquids) transport).travelDelay = 4;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue