Fixes by the dozen

This commit is contained in:
Aidan Brady 2013-11-25 16:34:59 -05:00
parent 824817cef5
commit 19feb2e602
20 changed files with 159 additions and 156 deletions

View file

@ -11,14 +11,23 @@ import java.util.Set;
import mekanism.api.transmitters.DynamicNetwork; import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.ITransmitter; import mekanism.api.transmitters.ITransmitter;
import mekanism.api.transmitters.TransmissionType; import mekanism.api.transmitters.TransmissionType;
import mekanism.common.FluidNetwork.FluidTransferEvent;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event; import net.minecraftforge.event.Event;
import net.minecraftforge.fluids.FluidStack;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork> public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
{ {
public int transferDelay = 0;
public float gasScale;
public float prevGasScale;
public EnumGas refGas = null;
public GasNetwork(ITransmitter<GasNetwork>... varPipes) public GasNetwork(ITransmitter<GasNetwork>... varPipes)
{ {
transmitters.addAll(Arrays.asList(varPipes)); transmitters.addAll(Arrays.asList(varPipes));
@ -48,6 +57,11 @@ public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
public synchronized int emit(int gasToSend, EnumGas transferType, TileEntity emitter) public synchronized int emit(int gasToSend, EnumGas transferType, TileEntity emitter)
{ {
if(refGas != null && refGas != transferType)
{
return gasToSend;
}
List availableAcceptors = Arrays.asList(getAcceptors(transferType).toArray()); List availableAcceptors = Arrays.asList(getAcceptors(transferType).toArray());
Collections.shuffle(availableAcceptors); Collections.shuffle(availableAcceptors);
@ -79,14 +93,56 @@ public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
} }
} }
if(prevSending > gasToSend && FMLCommonHandler.instance().getEffectiveSide().isServer()) int sent = prevSending-gasToSend;
if(sent > 0 && FMLCommonHandler.instance().getEffectiveSide().isServer())
{ {
MinecraftForge.EVENT_BUS.post(new GasTransferEvent(this, transferType)); if(transferType == refGas)
{
gasScale = Math.min(1, gasScale+((float)sent/100));
}
else if(refGas == null)
{
refGas = transferType;
gasScale = Math.min(1, ((float)sent/100));
}
transferDelay = 2;
} }
return gasToSend; return gasToSend;
} }
@Override
public void tick()
{
super.tick();
if(FMLCommonHandler.instance().getEffectiveSide().isServer())
{
if(transferDelay == 0)
{
if(gasScale > 0)
{
gasScale -= .02;
}
else {
refGas = null;
}
}
else {
transferDelay--;
}
if(gasScale != prevGasScale)
{
MinecraftForge.EVENT_BUS.post(new GasTransferEvent(this, refGas, gasScale));
}
prevGasScale = gasScale;
}
}
@Override @Override
public synchronized Set<IGasAcceptor> getAcceptors(Object... data) public synchronized Set<IGasAcceptor> getAcceptors(Object... data)
{ {
@ -163,11 +219,13 @@ public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
public final GasNetwork gasNetwork; public final GasNetwork gasNetwork;
public final EnumGas transferType; public final EnumGas transferType;
public final float gasScale;
public GasTransferEvent(GasNetwork network, EnumGas type) public GasTransferEvent(GasNetwork network, EnumGas type, float scale)
{ {
gasNetwork = network; gasNetwork = network;
transferType = type; transferType = type;
gasScale = scale;
} }
} }

View file

@ -206,7 +206,7 @@ public abstract class DynamicNetwork<A, N> implements ITransmitterNetwork<A, N>
} }
} }
ITransmitterNetwork<A, N> newNetwork = create(newNetCables); ITransmitterNetwork<A, N> newNetwork = create(newNetCables);
newNetwork.refresh(); newNetwork.refresh();
} }
} }

View file

@ -43,7 +43,7 @@ public class ClientTickHandler implements ITickHandler
@Override @Override
public void tickStart(EnumSet<TickType> type, Object... tickData) public void tickStart(EnumSet<TickType> type, Object... tickData)
{ {
if(!preloadedSounds && mc.sndManager.sndSystem != null) if(!preloadedSounds && mc.sndManager.sndSystem != null && MekanismClient.enableSounds)
{ {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override

View file

@ -1,42 +0,0 @@
package mekanism.client;
import java.util.List;
import mekanism.api.gas.EnumGas;
import mekanism.api.transmitters.TransmissionType;
import mekanism.api.transmitters.DynamicNetwork.NetworkFinder;
import mekanism.api.Object3D;
import mekanism.common.tileentity.TileEntityPressurizedTube;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class GasClientUpdate
{
public NetworkFinder finder;
public World worldObj;
public EnumGas gasType;
public GasClientUpdate(TileEntity head, EnumGas type)
{
worldObj = head.worldObj;
gasType = type;
finder = new NetworkFinder(head.worldObj, TransmissionType.GAS, Object3D.get(head));
}
public void clientUpdate()
{
List<Object3D> found = finder.exploreNetwork();
for(Object3D object : found)
{
TileEntity tileEntity = object.getTileEntity(worldObj);
if(tileEntity instanceof TileEntityPressurizedTube)
{
((TileEntityPressurizedTube)tileEntity).onTransfer(gasType);
}
}
}
}

View file

@ -22,6 +22,7 @@ import net.minecraft.block.Block;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
@ -112,36 +113,28 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer
GL11.glEnable(GL11.GL_CULL_FACE); GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix(); GL11.glPopMatrix();
EnumGas gasType = tileEntity.getTransmitterNetwork().refGas;
float scale = tileEntity.getTransmitterNetwork().gasScale;
if(tileEntity.gasScale > 0 && tileEntity.refGas != null && tileEntity.refGas.hasTexture()) if(scale > 0 && gasType != null && gasType.hasTexture())
{ {
push(); push();
GL11.glColor4f(1.0F, 1.0F, 1.0F, tileEntity.gasScale); GL11.glColor4f(1.0F, 1.0F, 1.0F, scale);
bindTexture(MekanismRenderer.getBlocksTexture()); bindTexture(MekanismRenderer.getBlocksTexture());
GL11.glTranslatef((float)x, (float)y, (float)z); GL11.glTranslatef((float)x, (float)y, (float)z);
if(!Mekanism.proxy.isPaused())
{
if(tileEntity.gasScale > 0)
{
tileEntity.gasScale = Math.max(0, tileEntity.gasScale - .008F);
}
else {
tileEntity.refGas = null;
}
}
for(int i = 0; i < 6; i++) for(int i = 0; i < 6; i++)
{ {
if(connectable[i]) if(connectable[i])
{ {
Block b = Block.blocksList[Object3D.get(tileEntity).getFromSide(ForgeDirection.getOrientation(i)).getBlockId(tileEntity.worldObj)]; Block b = Block.blocksList[Object3D.get(tileEntity).getFromSide(ForgeDirection.getOrientation(i)).getBlockId(tileEntity.worldObj)];
getListAndRender(ForgeDirection.getOrientation(i), tileEntity.refGas, b).render(); getListAndRender(ForgeDirection.getOrientation(i), gasType, b).render();
} }
} }
getListAndRender(ForgeDirection.UNKNOWN, tileEntity.refGas, null).render(); getListAndRender(ForgeDirection.UNKNOWN, gasType, null).render();
pop(); pop();
} }

View file

@ -128,7 +128,7 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
else if(refFluid == null) else if(refFluid == null)
{ {
refFluid = sendStack.getFluid(); refFluid = sendStack.getFluid();
fluidScale += Math.min(1, ((float)sendStack.amount/1000F)); fluidScale = Math.min(1, ((float)sendStack.amount/1000F));
} }
transferDelay = 2; transferDelay = 2;

View file

@ -1171,7 +1171,7 @@ public class Mekanism
public void onGasTransferred(GasTransferEvent event) public void onGasTransferred(GasTransferEvent event)
{ {
try { try {
PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.GAS, event.gasNetwork.transmitters.iterator().next(), event.transferType)); PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.GAS, event.gasNetwork.transmitters.iterator().next(), event.transferType, event.gasScale));
} catch(Exception e) {} } catch(Exception e) {}
} }

View file

@ -122,7 +122,7 @@ public class TileComponentEjector implements ITileComponent, IEjector
} }
else if(tile instanceof TileEntityLogisticalTransporter) else if(tile instanceof TileEntityLogisticalTransporter)
{ {
ItemStack rejects = TransporterUtils.insert(tileEntity, (TileEntityLogisticalTransporter)tile, stack, outputColor, true); ItemStack rejects = TransporterUtils.insert(tileEntity, (TileEntityLogisticalTransporter)tile, stack, outputColor, true, 0);
if(TransporterManager.didEmit(stack, rejects)) if(TransporterManager.didEmit(stack, rejects))
{ {

View file

@ -4,8 +4,8 @@ import java.io.DataOutputStream;
import mekanism.api.gas.EnumGas; import mekanism.api.gas.EnumGas;
import mekanism.api.transmitters.ITransmitter; import mekanism.api.transmitters.ITransmitter;
import mekanism.client.GasClientUpdate;
import mekanism.common.tileentity.TileEntityMechanicalPipe; import mekanism.common.tileentity.TileEntityMechanicalPipe;
import mekanism.common.tileentity.TileEntityPressurizedTube;
import mekanism.common.tileentity.TileEntityUniversalCable; import mekanism.common.tileentity.TileEntityUniversalCable;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
@ -24,6 +24,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
public double power; public double power;
public String gasName; public String gasName;
public float gasScale;
public int fluidType; public int fluidType;
public float fluidScale; public float fluidScale;
@ -31,7 +32,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
@Override @Override
public String getName() public String getName()
{ {
return "TransmitterTransferUpdate"; return "TransmitterUpdate";
} }
@Override @Override
@ -46,7 +47,8 @@ public class PacketTransmitterUpdate implements IMekanismPacket
power = (Double)data[2]; power = (Double)data[2];
break; break;
case GAS: case GAS:
gasName = ((EnumGas)data[2]).name; gasName = data[2] != null ? ((EnumGas)data[2]).name : "null";
gasScale = (Float)data[3];
break; break;
case FLUID: case FLUID:
fluidType = (Integer)data[2]; fluidType = (Integer)data[2];
@ -88,13 +90,16 @@ public class PacketTransmitterUpdate implements IMekanismPacket
} }
else if(transmitterType == 2) else if(transmitterType == 2)
{ {
EnumGas type = EnumGas.getFromName(dataStream.readUTF());
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
String type = dataStream.readUTF();
EnumGas gasType = type.equals("null") ? null : EnumGas.getFromName(type);
gasScale = dataStream.readFloat();
if(tileEntity != null) if(tileEntity != null)
{ {
new GasClientUpdate(tileEntity, type).clientUpdate(); ((TileEntityPressurizedTube)tileEntity).getTransmitterNetwork().refGas = gasType;
((TileEntityPressurizedTube)tileEntity).getTransmitterNetwork().gasScale = gasScale;
} }
} }
else if(transmitterType == 3) else if(transmitterType == 3)
@ -103,7 +108,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
int type = dataStream.readInt(); int type = dataStream.readInt();
Fluid fluidType = type != -1 ? FluidRegistry.getFluid(type) : null; Fluid fluidType = type != -1 ? FluidRegistry.getFluid(type) : null;
float fluidScale = dataStream.readFloat(); fluidScale = dataStream.readFloat();
if(tileEntity != null) if(tileEntity != null)
{ {
@ -129,6 +134,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
break; break;
case GAS: case GAS:
dataStream.writeUTF(gasName); dataStream.writeUTF(gasName);
dataStream.writeFloat(gasScale);
break; break;
case FLUID: case FLUID:
dataStream.writeInt(fluidType); dataStream.writeInt(fluidType);

View file

@ -160,7 +160,7 @@ public class TileEntityAdvancedBoundingBlock extends TileEntityBoundingBlock imp
{ {
if(getInv() == null) if(getInv() == null)
{ {
return null; return new int[0];
} }
return getInv().getBoundSlots(Object3D.get(this), slotID); return getInv().getBoundSlots(Object3D.get(this), slotID);

View file

@ -172,7 +172,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
{ {
TileEntityLogisticalTransporter transporter = (TileEntityLogisticalTransporter)tile; TileEntityLogisticalTransporter transporter = (TileEntityLogisticalTransporter)tile;
ItemStack rejects = TransporterUtils.insert(this, transporter, getStack(), null, true); ItemStack rejects = TransporterUtils.insert(this, transporter, getStack(), null, true, 0);
if(TransporterManager.didEmit(getStack(), rejects)) if(TransporterManager.didEmit(getStack(), rejects))
{ {
@ -294,7 +294,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
@Override @Override
public int getSizeInventory() public int getSizeInventory()
{ {
return 1; return 2;
} }
@Override @Override
@ -408,7 +408,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
return new int[] {0}; return new int[] {0};
} }
return null; return new int[0];
} }
@Override @Override

View file

@ -200,7 +200,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
} }
else if(getEjectInv() instanceof TileEntityLogisticalTransporter) else if(getEjectInv() instanceof TileEntityLogisticalTransporter)
{ {
ItemStack rejected = TransporterUtils.insert(getEjectTile(), (TileEntityLogisticalTransporter)getEjectInv(), getTopEject(false, null), null, true); ItemStack rejected = TransporterUtils.insert(getEjectTile(), (TileEntityLogisticalTransporter)getEjectInv(), getTopEject(false, null), null, true, 0);
if(TransporterManager.didEmit(getTopEject(false, null), rejected)) if(TransporterManager.didEmit(getTopEject(false, null), rejected))
{ {

View file

@ -87,7 +87,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
InvStack inInventory = null; InvStack inInventory = null;
boolean hasFilter = false; boolean hasFilter = false;
EnumColor filterColor = color; EnumColor filterColor = color;
TItemStackFilter itemFilter = null; int min = 0;
for(TransporterFilter filter : filters) for(TransporterFilter filter : filters)
{ {
@ -103,7 +103,12 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
if(filter instanceof TItemStackFilter) if(filter instanceof TItemStackFilter)
{ {
itemFilter = (TItemStackFilter)filter; TItemStackFilter itemFilter = (TItemStackFilter)filter;
if(itemFilter.sizeMode)
{
min = itemFilter.min;
}
} }
break; break;
@ -122,31 +127,25 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
if(!roundRobin) if(!roundRobin)
{ {
ItemStack rejects = TransporterUtils.insert(this, transporter, inInventory.getStack(), filterColor, false); ItemStack rejects = TransporterUtils.insert(this, transporter, inInventory.getStack(), filterColor, true, min);
if(TransporterManager.didEmit(inInventory.getStack(), rejects)) if(TransporterManager.didEmit(inInventory.getStack(), rejects))
{ {
if(itemFilter == null || itemFilter.canFilter(TransporterManager.getToUse(inInventory.getStack(), rejects))) used = TransporterManager.getToUse(inInventory.getStack(), rejects);
{
used = TransporterManager.getToUse(inInventory.getStack(), rejects);
}
} }
} }
else { else {
ItemStack rejects = TransporterUtils.insertRR(this, transporter, inInventory.getStack(), filterColor, false); ItemStack rejects = TransporterUtils.insertRR(this, transporter, inInventory.getStack(), filterColor, true, min);
if(TransporterManager.didEmit(inInventory.getStack(), rejects)) if(TransporterManager.didEmit(inInventory.getStack(), rejects))
{ {
if(itemFilter == null || itemFilter.canFilter(TransporterManager.getToUse(inInventory.getStack(), rejects))) used = TransporterManager.getToUse(inInventory.getStack(), rejects);
{
used = TransporterManager.getToUse(inInventory.getStack(), rejects);
}
} }
} }
if(used != null) if(used != null)
{ {
inInventory.use(); inInventory.use(used.stackSize);
inventory.onInventoryChanged(); inventory.onInventoryChanged();
setActive(true); setActive(true);
} }

View file

@ -209,7 +209,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
{ {
needsSync.add(stack); needsSync.add(stack);
if(!TransporterManager.didEmit(stack.itemStack, stack.recalculatePath(this))) if(!TransporterManager.didEmit(stack.itemStack, stack.recalculatePath(this, 0)))
{ {
if(!stack.calculateIdle(this)) if(!stack.calculateIdle(this))
{ {
@ -226,7 +226,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
return true; return true;
} }
public ItemStack insert(Object3D original, ItemStack itemStack, EnumColor color, boolean doEmit) public ItemStack insert(Object3D original, ItemStack itemStack, EnumColor color, boolean doEmit, int min)
{ {
TransporterStack stack = new TransporterStack(); TransporterStack stack = new TransporterStack();
stack.itemStack = itemStack; stack.itemStack = itemStack;
@ -239,7 +239,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
return itemStack; return itemStack;
} }
ItemStack rejected = stack.recalculatePath(this); ItemStack rejected = stack.recalculatePath(this, min);
if(TransporterManager.didEmit(stack.itemStack, rejected)) if(TransporterManager.didEmit(stack.itemStack, rejected))
{ {
@ -255,7 +255,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
return itemStack; return itemStack;
} }
public ItemStack insertRR(TileEntityLogisticalSorter outputter, ItemStack itemStack, EnumColor color, boolean doEmit) public ItemStack insertRR(TileEntityLogisticalSorter outputter, ItemStack itemStack, EnumColor color, boolean doEmit, int min)
{ {
TransporterStack stack = new TransporterStack(); TransporterStack stack = new TransporterStack();
stack.itemStack = itemStack; stack.itemStack = itemStack;
@ -268,7 +268,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
return itemStack; return itemStack;
} }
ItemStack rejected = stack.recalculateRRPath(outputter, this); ItemStack rejected = stack.recalculateRRPath(outputter, this, min);
if(TransporterManager.didEmit(stack.itemStack, rejected)) if(TransporterManager.didEmit(stack.itemStack, rejected))
{ {
@ -507,7 +507,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
{ {
TileEntity tile = Object3D.get(this).getFromSide(from).getTileEntity(worldObj); TileEntity tile = Object3D.get(this).getFromSide(from).getTileEntity(worldObj);
ItemStack rejects = TransporterUtils.insert(tile, this, stack, null, true); ItemStack rejects = TransporterUtils.insert(tile, this, stack, null, true, 0);
return TransporterManager.getToUse(stack, rejects).stackSize; return TransporterManager.getToUse(stack, rejects).stackSize;
} }

View file

@ -15,13 +15,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork> implements ITubeConnection, IGasTransmitter public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork> implements ITubeConnection, IGasTransmitter
{ {
/** The gas currently displayed in this tube. */
public EnumGas refGas = null;
/** The scale of the gas (0F -> 1F) currently inside this tube. */
public float gasScale;
@Override @Override
public TransmissionType getTransmissionType() public TransmissionType getTransmissionType()
{ {
@ -114,19 +108,6 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
getTransmitterNetwork().refresh(); getTransmitterNetwork().refresh();
} }
public void onTransfer(EnumGas type)
{
if(type == refGas)
{
gasScale = Math.min(1, gasScale+.03F);
}
else if(refGas == null)
{
refGas = type;
gasScale += Math.min(1, gasScale+.03F);
}
}
@Override @Override
public boolean canTubeConnect(ForgeDirection side) public boolean canTubeConnect(ForgeDirection side)
{ {

View file

@ -59,33 +59,27 @@ public final class InvStack
{ {
ItemStack stack = itemStacks.get(i); ItemStack stack = itemStacks.get(i);
if(inventory.getStackInSlot(slotIDs.get(i)).stackSize == stack.stackSize) if(inventory.getStackInSlot(slotIDs.get(i)).stackSize == stack.stackSize && stack.stackSize <= amount)
{ {
inventory.setInventorySlotContents(slotIDs.get(i), null); inventory.setInventorySlotContents(slotIDs.get(i), null);
amount -= stack.stackSize;
} }
else { else {
ItemStack ret = stack.copy(); ItemStack ret = stack.copy();
ret.stackSize = inventory.getStackInSlot(slotIDs.get(i)).stackSize - stack.stackSize; ret.stackSize = inventory.getStackInSlot(slotIDs.get(i)).stackSize - Math.min(stack.stackSize, amount);
inventory.setInventorySlotContents(slotIDs.get(i), ret); inventory.setInventorySlotContents(slotIDs.get(i), ret);
amount -= ret.stackSize;
}
if(amount == 0)
{
return;
} }
} }
} }
public void use() public void use()
{ {
for(int i = 0; i < slotIDs.size(); i++) use(getStack().stackSize);
{
ItemStack stack = itemStacks.get(i);
if(inventory.getStackInSlot(slotIDs.get(i)).stackSize == stack.stackSize)
{
inventory.setInventorySlotContents(slotIDs.get(i), null);
}
else {
ItemStack ret = stack.copy();
ret.stackSize = inventory.getStackInSlot(slotIDs.get(i)).stackSize - stack.stackSize;
inventory.setInventorySlotContents(slotIDs.get(i), ret);
}
}
} }
} }

View file

@ -25,15 +25,11 @@ public class TransporterManager
public static void add(TransporterStack stack) public static void add(TransporterStack stack)
{ {
flowingStacks.add(stack); flowingStacks.add(stack);
System.out.println("Added " + flowingStacks.size());
} }
public static void remove(TransporterStack stack) public static void remove(TransporterStack stack)
{ {
flowingStacks.remove(stack); flowingStacks.remove(stack);
System.out.println("Removed " + flowingStacks.size());
} }
public static List<TransporterStack> getStacksToDest(Object3D dest) public static List<TransporterStack> getStacksToDest(Object3D dest)
@ -42,7 +38,7 @@ public class TransporterManager
for(TransporterStack stack : flowingStacks) for(TransporterStack stack : flowingStacks)
{ {
if(stack != null && stack.pathType != Path.NONE) if(stack != null && stack.pathType != Path.NONE && stack.hasPath())
{ {
if(stack.getDest().equals(dest)) if(stack.getDest().equals(dest))
{ {
@ -64,18 +60,23 @@ public class TransporterManager
{ {
for(int i = 0; i <= inv.getSizeInventory() - 1; i++) for(int i = 0; i <= inv.getSizeInventory() - 1; i++)
{ {
ret[i] = inv.getStackInSlot(i).copy(); ret[i] = inv.getStackInSlot(i) != null ? inv.getStackInSlot(i).copy() : null;
} }
} }
else { else {
ISidedInventory sidedInventory = (ISidedInventory)inv; ISidedInventory sidedInventory = (ISidedInventory)inv;
int[] slots = sidedInventory.getAccessibleSlotsFromSide(ForgeDirection.getOrientation(side).getOpposite().ordinal()); int[] slots = sidedInventory.getAccessibleSlotsFromSide(ForgeDirection.getOrientation(side).getOpposite().ordinal());
if(slots == null || slots.length == 0)
{
return null;
}
for(int get = 0; get <= slots.length - 1; get++) for(int get = 0; get <= slots.length - 1; get++)
{ {
int slotID = slots[get]; int slotID = slots[get];
ret[slotID] = sidedInventory.getStackInSlot(slotID).copy(); ret[slotID] = sidedInventory.getStackInSlot(slotID) != null ? sidedInventory.getStackInSlot(slotID).copy() : null;
} }
} }
@ -97,6 +98,11 @@ public class TransporterManager
return; return;
} }
} }
if(inv instanceof TileEntityBin)
{
return;
}
if(!(inv instanceof ISidedInventory)) if(!(inv instanceof ISidedInventory))
{ {
@ -110,7 +116,7 @@ public class TransporterManager
} }
} }
ItemStack inSlot = inv.getStackInSlot(i); ItemStack inSlot = testInv[i];
if(inSlot == null) if(inSlot == null)
{ {
@ -166,7 +172,7 @@ public class TransporterManager
} }
} }
ItemStack inSlot = inv.getStackInSlot(slotID); ItemStack inSlot = testInv[slotID];
if(inSlot == null) if(inSlot == null)
{ {
@ -242,6 +248,11 @@ public class TransporterManager
IInventory inventory = (IInventory)tileEntity; IInventory inventory = (IInventory)tileEntity;
ItemStack[] testInv = copyInvFromSide(inventory, side); ItemStack[] testInv = copyInvFromSide(inventory, side);
if(testInv == null)
{
return itemStack;
}
List<TransporterStack> insertQueue = getStacksToDest(Object3D.get(tileEntity)); List<TransporterStack> insertQueue = getStacksToDest(Object3D.get(tileEntity));
for(TransporterStack tStack : insertQueue) for(TransporterStack tStack : insertQueue)

View file

@ -244,7 +244,7 @@ public final class TransporterPathfinder
} }
} }
public static List<Destination> getPaths(TileEntityLogisticalTransporter start, TransporterStack stack) public static List<Destination> getPaths(TileEntityLogisticalTransporter start, TransporterStack stack, int min)
{ {
DestChecker checker = new DestChecker() DestChecker checker = new DestChecker()
{ {
@ -265,7 +265,10 @@ public final class TransporterPathfinder
if(p.getPath().size() >= 2) if(p.getPath().size() >= 2)
{ {
paths.add(new Destination(p.getPath(), p.finalScore, false, d.rejects.get(obj))); if(TransporterManager.getToUse(stack.itemStack, d.rejects.get(obj)).stackSize >= min)
{
paths.add(new Destination(p.getPath(), p.finalScore, false, d.rejects.get(obj)));
}
} }
} }
@ -274,9 +277,9 @@ public final class TransporterPathfinder
return paths; return paths;
} }
public static Destination getNewBasePath(TileEntityLogisticalTransporter start, TransporterStack stack) public static Destination getNewBasePath(TileEntityLogisticalTransporter start, TransporterStack stack, int min)
{ {
List<Destination> paths = getPaths(start, stack); List<Destination> paths = getPaths(start, stack, min);
if(paths.isEmpty()) if(paths.isEmpty())
{ {
@ -286,9 +289,9 @@ public final class TransporterPathfinder
return paths.get(0); return paths.get(0);
} }
public static Destination getNewRRPath(TileEntityLogisticalTransporter start, TransporterStack stack, TileEntityLogisticalSorter outputter) public static Destination getNewRRPath(TileEntityLogisticalTransporter start, TransporterStack stack, TileEntityLogisticalSorter outputter, int min)
{ {
List<Destination> paths = getPaths(start, stack); List<Destination> paths = getPaths(start, stack, min);
Map<Object3D, Destination> destPaths = new HashMap<Object3D, Destination>(); Map<Object3D, Destination> destPaths = new HashMap<Object3D, Destination>();

View file

@ -145,12 +145,12 @@ public class TransporterStack
public boolean hasPath() public boolean hasPath()
{ {
return pathToTarget != null; return pathToTarget != null && pathToTarget.size() >= 2;
} }
public ItemStack recalculatePath(TileEntityLogisticalTransporter tileEntity) public ItemStack recalculatePath(TileEntityLogisticalTransporter tileEntity, int min)
{ {
Destination newPath = TransporterPathfinder.getNewBasePath(tileEntity, this); Destination newPath = TransporterPathfinder.getNewBasePath(tileEntity, this, min);
if(newPath == null) if(newPath == null)
{ {
@ -165,9 +165,9 @@ public class TransporterStack
return newPath.rejected; return newPath.rejected;
} }
public ItemStack recalculateRRPath(TileEntityLogisticalSorter outputter, TileEntityLogisticalTransporter tileEntity) public ItemStack recalculateRRPath(TileEntityLogisticalSorter outputter, TileEntityLogisticalTransporter tileEntity, int min)
{ {
Destination newPath = TransporterPathfinder.getNewRRPath(tileEntity, this, outputter); Destination newPath = TransporterPathfinder.getNewRRPath(tileEntity, this, outputter, min);
if(newPath == null) if(newPath == null)
{ {

View file

@ -190,14 +190,14 @@ public final class TransporterUtils
return inventories; return inventories;
} }
public static ItemStack insert(TileEntity outputter, TileEntityLogisticalTransporter tileEntity, ItemStack itemStack, EnumColor color, boolean doEmit) public static ItemStack insert(TileEntity outputter, TileEntityLogisticalTransporter tileEntity, ItemStack itemStack, EnumColor color, boolean doEmit, int min)
{ {
return tileEntity.insert(Object3D.get(outputter), itemStack.copy(), color, doEmit); return tileEntity.insert(Object3D.get(outputter), itemStack.copy(), color, doEmit, min);
} }
public static ItemStack insertRR(TileEntityLogisticalSorter outputter, TileEntityLogisticalTransporter tileEntity, ItemStack itemStack, EnumColor color, boolean doEmit) public static ItemStack insertRR(TileEntityLogisticalSorter outputter, TileEntityLogisticalTransporter tileEntity, ItemStack itemStack, EnumColor color, boolean doEmit, int min)
{ {
return tileEntity.insertRR(outputter, itemStack.copy(), color, doEmit); return tileEntity.insertRR(outputter, itemStack.copy(), color, doEmit, min);
} }
public static EnumColor increment(EnumColor color) public static EnumColor increment(EnumColor color)