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.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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.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;
|
||||||
|
|
||||||
|
@ -113,35 +114,27 @@ public class RenderPressurizedTube extends TileEntitySpecialRenderer
|
||||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||||
GL11.glPopMatrix();
|
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();
|
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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,6 @@ 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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,6 +99,11 @@ public class TransporterManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(inv instanceof TileEntityBin)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!(inv instanceof ISidedInventory))
|
if(!(inv instanceof ISidedInventory))
|
||||||
{
|
{
|
||||||
for(int i = 0; i <= inv.getSizeInventory() - 1; i++)
|
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)
|
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)
|
||||||
|
|
|
@ -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()
|
||||||
{
|
{
|
||||||
|
@ -264,19 +264,22 @@ public final class TransporterPathfinder
|
||||||
Pathfinder p = new Pathfinder(checker, start.worldObj, obj, Object3D.get(start), stack);
|
Pathfinder p = new Pathfinder(checker, start.worldObj, obj, Object3D.get(start), stack);
|
||||||
|
|
||||||
if(p.getPath().size() >= 2)
|
if(p.getPath().size() >= 2)
|
||||||
|
{
|
||||||
|
if(TransporterManager.getToUse(stack.itemStack, d.rejects.get(obj)).stackSize >= min)
|
||||||
{
|
{
|
||||||
paths.add(new Destination(p.getPath(), p.finalScore, false, d.rejects.get(obj)));
|
paths.add(new Destination(p.getPath(), p.finalScore, false, d.rejects.get(obj)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Collections.sort(paths);
|
Collections.sort(paths);
|
||||||
|
|
||||||
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>();
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue