Fixes by the dozen
This commit is contained in:
parent
824817cef5
commit
19feb2e602
20 changed files with 159 additions and 156 deletions
|
@ -11,14 +11,23 @@ import java.util.Set;
|
|||
import mekanism.api.transmitters.DynamicNetwork;
|
||||
import mekanism.api.transmitters.ITransmitter;
|
||||
import mekanism.api.transmitters.TransmissionType;
|
||||
import mekanism.common.FluidNetwork.FluidTransferEvent;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.Event;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if(refGas != null && refGas != transferType)
|
||||
{
|
||||
return gasToSend;
|
||||
}
|
||||
|
||||
List availableAcceptors = Arrays.asList(getAcceptors(transferType).toArray());
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@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
|
||||
public synchronized Set<IGasAcceptor> getAcceptors(Object... data)
|
||||
{
|
||||
|
@ -163,11 +219,13 @@ public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
|
|||
public final GasNetwork gasNetwork;
|
||||
|
||||
public final EnumGas transferType;
|
||||
public final float gasScale;
|
||||
|
||||
public GasTransferEvent(GasNetwork network, EnumGas type)
|
||||
public GasTransferEvent(GasNetwork network, EnumGas type, float scale)
|
||||
{
|
||||
gasNetwork = network;
|
||||
transferType = type;
|
||||
gasScale = scale;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ public class ClientTickHandler implements ITickHandler
|
|||
@Override
|
||||
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() {
|
||||
@Override
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,6 +22,7 @@ import net.minecraft.block.Block;
|
|||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
|
@ -113,35 +114,27 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer
|
|||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
if(tileEntity.gasScale > 0 && tileEntity.refGas != null && tileEntity.refGas.hasTexture())
|
||||
EnumGas gasType = tileEntity.getTransmitterNetwork().refGas;
|
||||
float scale = tileEntity.getTransmitterNetwork().gasScale;
|
||||
|
||||
if(scale > 0 && gasType != null && gasType.hasTexture())
|
||||
{
|
||||
push();
|
||||
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, tileEntity.gasScale);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, scale);
|
||||
bindTexture(MekanismRenderer.getBlocksTexture());
|
||||
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++)
|
||||
{
|
||||
if(connectable[i])
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -128,7 +128,7 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
else if(refFluid == null)
|
||||
{
|
||||
refFluid = sendStack.getFluid();
|
||||
fluidScale += Math.min(1, ((float)sendStack.amount/1000F));
|
||||
fluidScale = Math.min(1, ((float)sendStack.amount/1000F));
|
||||
}
|
||||
|
||||
transferDelay = 2;
|
||||
|
|
|
@ -1171,7 +1171,7 @@ public class Mekanism
|
|||
public void onGasTransferred(GasTransferEvent event)
|
||||
{
|
||||
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) {}
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ public class TileComponentEjector implements ITileComponent, IEjector
|
|||
}
|
||||
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))
|
||||
{
|
||||
|
|
|
@ -4,8 +4,8 @@ import java.io.DataOutputStream;
|
|||
|
||||
import mekanism.api.gas.EnumGas;
|
||||
import mekanism.api.transmitters.ITransmitter;
|
||||
import mekanism.client.GasClientUpdate;
|
||||
import mekanism.common.tileentity.TileEntityMechanicalPipe;
|
||||
import mekanism.common.tileentity.TileEntityPressurizedTube;
|
||||
import mekanism.common.tileentity.TileEntityUniversalCable;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
@ -24,6 +24,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
|||
public double power;
|
||||
|
||||
public String gasName;
|
||||
public float gasScale;
|
||||
|
||||
public int fluidType;
|
||||
public float fluidScale;
|
||||
|
@ -31,7 +32,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
|||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return "TransmitterTransferUpdate";
|
||||
return "TransmitterUpdate";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -46,7 +47,8 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
|||
power = (Double)data[2];
|
||||
break;
|
||||
case GAS:
|
||||
gasName = ((EnumGas)data[2]).name;
|
||||
gasName = data[2] != null ? ((EnumGas)data[2]).name : "null";
|
||||
gasScale = (Float)data[3];
|
||||
break;
|
||||
case FLUID:
|
||||
fluidType = (Integer)data[2];
|
||||
|
@ -88,13 +90,16 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
|||
}
|
||||
else if(transmitterType == 2)
|
||||
{
|
||||
EnumGas type = EnumGas.getFromName(dataStream.readUTF());
|
||||
|
||||
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)
|
||||
{
|
||||
new GasClientUpdate(tileEntity, type).clientUpdate();
|
||||
((TileEntityPressurizedTube)tileEntity).getTransmitterNetwork().refGas = gasType;
|
||||
((TileEntityPressurizedTube)tileEntity).getTransmitterNetwork().gasScale = gasScale;
|
||||
}
|
||||
}
|
||||
else if(transmitterType == 3)
|
||||
|
@ -103,7 +108,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
|||
|
||||
int type = dataStream.readInt();
|
||||
Fluid fluidType = type != -1 ? FluidRegistry.getFluid(type) : null;
|
||||
float fluidScale = dataStream.readFloat();
|
||||
fluidScale = dataStream.readFloat();
|
||||
|
||||
if(tileEntity != null)
|
||||
{
|
||||
|
@ -129,6 +134,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
|||
break;
|
||||
case GAS:
|
||||
dataStream.writeUTF(gasName);
|
||||
dataStream.writeFloat(gasScale);
|
||||
break;
|
||||
case FLUID:
|
||||
dataStream.writeInt(fluidType);
|
||||
|
|
|
@ -160,7 +160,7 @@ public class TileEntityAdvancedBoundingBlock extends TileEntityBoundingBlock imp
|
|||
{
|
||||
if(getInv() == null)
|
||||
{
|
||||
return null;
|
||||
return new int[0];
|
||||
}
|
||||
|
||||
return getInv().getBoundSlots(Object3D.get(this), slotID);
|
||||
|
|
|
@ -172,7 +172,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
|
|||
{
|
||||
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))
|
||||
{
|
||||
|
@ -294,7 +294,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
|
|||
@Override
|
||||
public int getSizeInventory()
|
||||
{
|
||||
return 1;
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -408,7 +408,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento
|
|||
return new int[] {0};
|
||||
}
|
||||
|
||||
return null;
|
||||
return new int[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -200,7 +200,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
|
|||
}
|
||||
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))
|
||||
{
|
||||
|
|
|
@ -87,7 +87,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
|
|||
InvStack inInventory = null;
|
||||
boolean hasFilter = false;
|
||||
EnumColor filterColor = color;
|
||||
TItemStackFilter itemFilter = null;
|
||||
int min = 0;
|
||||
|
||||
for(TransporterFilter filter : filters)
|
||||
{
|
||||
|
@ -103,7 +103,12 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
|
|||
|
||||
if(filter instanceof TItemStackFilter)
|
||||
{
|
||||
itemFilter = (TItemStackFilter)filter;
|
||||
TItemStackFilter itemFilter = (TItemStackFilter)filter;
|
||||
|
||||
if(itemFilter.sizeMode)
|
||||
{
|
||||
min = itemFilter.min;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -122,31 +127,25 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
|
|||
|
||||
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(itemFilter == null || itemFilter.canFilter(TransporterManager.getToUse(inInventory.getStack(), rejects)))
|
||||
{
|
||||
used = TransporterManager.getToUse(inInventory.getStack(), rejects);
|
||||
}
|
||||
used = TransporterManager.getToUse(inInventory.getStack(), rejects);
|
||||
}
|
||||
}
|
||||
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(itemFilter == null || itemFilter.canFilter(TransporterManager.getToUse(inInventory.getStack(), rejects)))
|
||||
{
|
||||
used = TransporterManager.getToUse(inInventory.getStack(), rejects);
|
||||
}
|
||||
used = TransporterManager.getToUse(inInventory.getStack(), rejects);
|
||||
}
|
||||
}
|
||||
|
||||
if(used != null)
|
||||
{
|
||||
inInventory.use();
|
||||
inInventory.use(used.stackSize);
|
||||
inventory.onInventoryChanged();
|
||||
setActive(true);
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
|
|||
{
|
||||
needsSync.add(stack);
|
||||
|
||||
if(!TransporterManager.didEmit(stack.itemStack, stack.recalculatePath(this)))
|
||||
if(!TransporterManager.didEmit(stack.itemStack, stack.recalculatePath(this, 0)))
|
||||
{
|
||||
if(!stack.calculateIdle(this))
|
||||
{
|
||||
|
@ -226,7 +226,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
|
|||
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();
|
||||
stack.itemStack = itemStack;
|
||||
|
@ -239,7 +239,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
|
|||
return itemStack;
|
||||
}
|
||||
|
||||
ItemStack rejected = stack.recalculatePath(this);
|
||||
ItemStack rejected = stack.recalculatePath(this, min);
|
||||
|
||||
if(TransporterManager.didEmit(stack.itemStack, rejected))
|
||||
{
|
||||
|
@ -255,7 +255,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
|
|||
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();
|
||||
stack.itemStack = itemStack;
|
||||
|
@ -268,7 +268,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
|
|||
return itemStack;
|
||||
}
|
||||
|
||||
ItemStack rejected = stack.recalculateRRPath(outputter, this);
|
||||
ItemStack rejected = stack.recalculateRRPath(outputter, this, min);
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,12 +16,6 @@ import net.minecraftforge.common.ForgeDirection;
|
|||
|
||||
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
|
||||
public TransmissionType getTransmissionType()
|
||||
{
|
||||
|
@ -114,19 +108,6 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
|
|||
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
|
||||
public boolean canTubeConnect(ForgeDirection side)
|
||||
{
|
||||
|
|
|
@ -59,33 +59,27 @@ public final class InvStack
|
|||
{
|
||||
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);
|
||||
amount -= stack.stackSize;
|
||||
}
|
||||
else {
|
||||
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);
|
||||
amount -= ret.stackSize;
|
||||
}
|
||||
|
||||
if(amount == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void use()
|
||||
{
|
||||
for(int i = 0; i < slotIDs.size(); i++)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
use(getStack().stackSize);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,15 +25,11 @@ public class TransporterManager
|
|||
public static void add(TransporterStack stack)
|
||||
{
|
||||
flowingStacks.add(stack);
|
||||
|
||||
System.out.println("Added " + flowingStacks.size());
|
||||
}
|
||||
|
||||
public static void remove(TransporterStack stack)
|
||||
{
|
||||
flowingStacks.remove(stack);
|
||||
|
||||
System.out.println("Removed " + flowingStacks.size());
|
||||
}
|
||||
|
||||
public static List<TransporterStack> getStacksToDest(Object3D dest)
|
||||
|
@ -42,7 +38,7 @@ public class TransporterManager
|
|||
|
||||
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))
|
||||
{
|
||||
|
@ -64,18 +60,23 @@ public class TransporterManager
|
|||
{
|
||||
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 {
|
||||
ISidedInventory sidedInventory = (ISidedInventory)inv;
|
||||
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++)
|
||||
{
|
||||
int slotID = slots[get];
|
||||
|
||||
ret[slotID] = sidedInventory.getStackInSlot(slotID).copy();
|
||||
ret[slotID] = sidedInventory.getStackInSlot(slotID) != null ? sidedInventory.getStackInSlot(slotID).copy() : null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,6 +99,11 @@ public class TransporterManager
|
|||
}
|
||||
}
|
||||
|
||||
if(inv instanceof TileEntityBin)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(!(inv instanceof ISidedInventory))
|
||||
{
|
||||
for(int i = 0; i <= inv.getSizeInventory() - 1; i++)
|
||||
|
@ -110,7 +116,7 @@ public class TransporterManager
|
|||
}
|
||||
}
|
||||
|
||||
ItemStack inSlot = inv.getStackInSlot(i);
|
||||
ItemStack inSlot = testInv[i];
|
||||
|
||||
if(inSlot == null)
|
||||
{
|
||||
|
@ -166,7 +172,7 @@ public class TransporterManager
|
|||
}
|
||||
}
|
||||
|
||||
ItemStack inSlot = inv.getStackInSlot(slotID);
|
||||
ItemStack inSlot = testInv[slotID];
|
||||
|
||||
if(inSlot == null)
|
||||
{
|
||||
|
@ -242,6 +248,11 @@ public class TransporterManager
|
|||
IInventory inventory = (IInventory)tileEntity;
|
||||
ItemStack[] testInv = copyInvFromSide(inventory, side);
|
||||
|
||||
if(testInv == null)
|
||||
{
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
List<TransporterStack> insertQueue = getStacksToDest(Object3D.get(tileEntity));
|
||||
|
||||
for(TransporterStack tStack : insertQueue)
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
@ -265,7 +265,10 @@ public final class TransporterPathfinder
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
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())
|
||||
{
|
||||
|
@ -286,9 +289,9 @@ public final class TransporterPathfinder
|
|||
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>();
|
||||
|
||||
|
|
|
@ -145,12 +145,12 @@ public class TransporterStack
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -165,9 +165,9 @@ public class TransporterStack
|
|||
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)
|
||||
{
|
||||
|
|
|
@ -190,14 +190,14 @@ public final class TransporterUtils
|
|||
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)
|
||||
|
|
Loading…
Reference in a new issue