Restore some client-side network stuff. More fixes

This commit is contained in:
Ben Spiers 2015-04-06 01:29:07 +01:00
parent ede0015eec
commit 16ce88f09a
13 changed files with 67 additions and 59 deletions

View file

@ -1,5 +1,6 @@
package mekanism.api.gas;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@ -12,6 +13,7 @@ import java.util.Set;
import mekanism.api.Coord4D;
import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.IGridTransmitter;
import mekanism.common.Mekanism;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge;
@ -112,6 +114,8 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
return;
}
if(!gas.isGasEqual(buffer)) Mekanism.logger.warn("Gas type " + gas.getGas().getName() + " of buffer doesn't match type " + buffer.getGas().getName() + " of absorbing network");
buffer.amount += gas.amount;
gas.amount = 0;
}
@ -132,7 +136,9 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
public int tickEmit(GasStack stack)
{
List availableAcceptors = Arrays.asList(getAcceptors(stack.getGas()).toArray());
List<IGasHandler> availableAcceptors = new ArrayList<>();
availableAcceptors.addAll(getAcceptors(stack.getGas()));
Collections.shuffle(availableAcceptors);
@ -145,30 +151,26 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
int remaining = toSend % divider;
int sending = (toSend-remaining)/divider;
for(Object obj : availableAcceptors)
for(IGasHandler acceptor : availableAcceptors)
{
if(obj instanceof IGasHandler)
int currentSending = sending;
EnumSet<ForgeDirection> sides = acceptorDirections.get(Coord4D.get((TileEntity)acceptor));
if(remaining > 0)
{
IGasHandler acceptor = (IGasHandler)obj;
int currentSending = sending;
EnumSet<ForgeDirection> sides = acceptorDirections.get(Coord4D.get((TileEntity)acceptor));
currentSending++;
remaining--;
}
if(remaining > 0)
{
currentSending++;
remaining--;
}
for(ForgeDirection side : sides)
{
int prev = toSend;
for(ForgeDirection side : sides)
toSend -= acceptor.receiveGas(side, new GasStack(stack.getGas(), currentSending), true);
if(toSend < prev)
{
int prev = toSend;
toSend -= acceptor.receiveGas(side.getOpposite(), new GasStack(stack.getGas(), currentSending), true);
if(toSend < prev)
{
break;
}
break;
}
}
}
@ -301,7 +303,7 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
for(ForgeDirection side : sides)
{
if(acceptor != null && acceptor.canReceiveGas(side.getOpposite(), type))
if(acceptor != null && acceptor.canReceiveGas(side, type))
{
toReturn.add(acceptor);
break;

View file

@ -357,16 +357,7 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
}
@Override
public void clientTick()
{
ticksSinceCreate++;
if(ticksSinceCreate == 5 && getSize() > 0)
{
TileEntity tile = (TileEntity)transmitters.iterator().next();
MinecraftForge.EVENT_BUS.post(new NetworkClientRequest(tile));
}
}
public void clientTick() {}
public void queueClientUpdate(Collection<IGridTransmitter<A, N>> newTransmitters)
{

View file

@ -514,7 +514,7 @@ public class RenderPartTransmitter implements IIconSelfRegister
public void renderContents(PartPressurizedTube tube, Vector3 pos)
{
if(tube.getTransmitter().getTransmitterNetwork().refGas == null || tube.getTransmitter().getTransmitterNetwork().gasScale == 0)
if(!tube.getTransmitter().hasTransmitterNetwork() || tube.getTransmitter().getTransmitterNetwork().refGas == null || tube.getTransmitter().getTransmitterNetwork().gasScale == 0)
{
return;
}

View file

@ -95,6 +95,8 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
return;
}
if(!fluid.isFluidEqual(buffer)) Mekanism.logger.warn("Fluid type " + fluid.getFluid().getName() + " of buffer doesn't match type " + buffer.getFluid().getName() + " of absorbing network");
buffer.amount += fluid.amount;
fluid.amount = 0;
}
@ -231,7 +233,7 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
if(didTransfer != prevTransfer || needsUpdate)
{
MinecraftForge.EVENT_BUS.post(new FluidTransferEvent(this, buffer, getScale(), didTransfer));
MinecraftForge.EVENT_BUS.post(new FluidTransferEvent(this, buffer, didTransfer));
needsUpdate = false;
}
@ -315,14 +317,12 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
public final FluidNetwork fluidNetwork;
public final FluidStack fluidType;
public final float fluidScale;
public final boolean didTransfer;
public FluidTransferEvent(FluidNetwork network, FluidStack type, float scale, boolean did)
public FluidTransferEvent(FluidNetwork network, FluidStack type, boolean did)
{
fluidNetwork = network;
fluidType = type;
fluidScale = scale;
didTransfer = did;
}
}

View file

@ -61,16 +61,16 @@ public class InventoryNetwork extends DynamicNetwork<IInventory, InventoryNetwor
for(ForgeDirection side : sides)
{
ItemStack returned = TransporterManager.getPredictedInsert((TileEntity)acceptor, color, stack, side.ordinal());
ItemStack returned = TransporterManager.getPredictedInsert((TileEntity)acceptor, color, stack, side.getOpposite().ordinal());
if(TransporterManager.didEmit(stack, returned))
{
if(data == null)
{
data = new AcceptorData(coord, returned, side);
data = new AcceptorData(coord, returned, side.getOpposite());
}
else {
data.sides.add(side);
data.sides.add(side.getOpposite());
}
}
}
@ -131,7 +131,7 @@ public class InventoryNetwork extends DynamicNetwork<IInventory, InventoryNetwor
@Override
public String toString()
{
return "[FluidNetwork] " + transmitters.size() + " transmitters, " + possibleAcceptors.size() + " acceptors.";
return "[InventoryNetwork] " + transmitters.size() + " transmitters, " + possibleAcceptors.size() + " acceptors.";
}
@Override

View file

@ -1287,7 +1287,7 @@ public class Mekanism
public void onLiquidTransferred(FluidTransferEvent event)
{
try {
packetHandler.sendToReceivers(new TransmitterUpdateMessage(PacketType.FLUID, event.fluidNetwork.transmitters.iterator().next().coord(), event.fluidType, event.fluidScale, event.didTransfer), event.fluidNetwork.getPacketRange());
packetHandler.sendToReceivers(new TransmitterUpdateMessage(PacketType.FLUID, event.fluidNetwork.transmitters.iterator().next().coord(), event.fluidType, event.didTransfer), event.fluidNetwork.getPacketRange());
} catch(Exception e) {}
}

View file

@ -13,6 +13,7 @@ import mekanism.api.Coord4D;
import mekanism.common.InventoryNetwork;
import mekanism.common.InventoryNetwork.AcceptorData;
import mekanism.common.base.ILogisticalTransporter;
import mekanism.common.base.ITransporterTile;
import mekanism.common.content.transporter.PathfinderCache.PathData;
import mekanism.common.content.transporter.TransporterPathfinder.Pathfinder.DestChecker;
import mekanism.common.content.transporter.TransporterStack.Path;
@ -377,7 +378,7 @@ public final class TransporterPathfinder
for(int i = 0; i < 6; i++)
{
ForgeDirection direction = ForgeDirection.getOrientation(i);
Coord4D neighbor = start.translate(direction.offsetX, direction.offsetY, direction.offsetZ);
Coord4D neighbor = start.getFromSide(direction);
if(!transportStack.canInsertToTransporter(neighbor.getTileEntity(worldObj), direction) && (!neighbor.equals(finalNode) || !destChecker.isValid(transportStack, i, neighbor.getTileEntity(worldObj))))
{
@ -424,7 +425,7 @@ public final class TransporterPathfinder
TileEntity tile = neighbor.getTileEntity(worldObj);
double tentativeG = gScore.get(currentNode) + currentNode.distanceTo(neighbor);
tentativeG += ((ILogisticalTransporter)tile).getCost();
tentativeG += ((ITransporterTile)tile).getTransmitter().getCost();
if(closedSet.contains(neighbor))
{

View file

@ -214,7 +214,7 @@ public class TransporterStack
public boolean isFinal(ILogisticalTransporter transporter)
{
return pathToTarget.indexOf(transporter) == (pathType == Path.NONE ? 0 : 1);
return pathToTarget.indexOf(transporter.coord()) == (pathType == Path.NONE ? 0 : 1);
}
public Coord4D getNext(ILogisticalTransporter transporter)
@ -301,8 +301,6 @@ public class TransporterStack
public boolean canInsertToTransporter(ILogisticalTransporter transporter, ForgeDirection side)
{
TileEntity from = transporter.coord().getFromSide(side.getOpposite()).getTileEntity(transporter.world());
if(!transporter.canConnectMutual(side))
{
return false;

View file

@ -46,13 +46,13 @@ public class PartLogisticalTransporter extends PartTransmitter<IInventory, Inven
{
public Tier.TransporterTier tier = Tier.TransporterTier.BASIC;
public static TransmitterIcons transporterIcons = new TransmitterIcons(3, 4);
public static TransmitterIcons transporterIcons = new TransmitterIcons(8, 16);
public int pullDelay = 0;
public PartLogisticalTransporter(TransporterTier transporterTier)
{
super();
this();
tier = transporterTier;
}

View file

@ -80,7 +80,7 @@ public class PartPressurizedTube extends PartTransmitter<IGasHandler, GasNetwork
}
else {
float targetScale = getTransmitter().getTransmitterNetwork().gasScale;
float targetScale = getTransmitter().hasTransmitterNetwork() ? getTransmitter().getTransmitterNetwork().gasScale : (float)buffer.getStored()/(float)buffer.getMaxGas();
if(Math.abs(currentScale - targetScale) > 0.01)
{

View file

@ -47,6 +47,7 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
{
IGridTransmitter transmitter = ((ITransmitterTile)tileEntity).getTransmitter();
DynamicNetwork network = transmitter.hasTransmitterNetwork() && !message.newNetwork ? transmitter.getTransmitterNetwork() : transmitter.createEmptyNetwork();
network.register();
transmitter.setTransmitterNetwork(network);
for(Coord4D coord : message.transmitterCoords)
{
@ -57,6 +58,7 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
((ITransmitterTile)tile).getTransmitter().setTransmitterNetwork(network);
}
}
network.updateCapacity();
}
}
else if(message.packetType == PacketType.ENERGY)
@ -109,8 +111,8 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
net.refFluid = message.fluidType;
}
net.buffer = message.fluidStack;
net.didTransfer = message.didFluidTransfer;
net.fluidScale = message.fluidScale;
}
}
}
@ -200,7 +202,7 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
break;
case FLUID:
dataStream.writeInt(fluidStack != null ? fluidStack.getFluid().getID() : -1);
dataStream.writeFloat(fluidStack != null ? fluidScale : 0);
dataStream.writeInt(fluidStack != null ? fluidStack.amount : 0);
dataStream.writeBoolean(didFluidTransfer);
break;
default:
@ -245,8 +247,13 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
{
int type = dataStream.readInt();
fluidType = type != -1 ? FluidRegistry.getFluid(type) : null;
fluidScale = dataStream.readFloat();
amount = dataStream.readInt();
didFluidTransfer = dataStream.readBoolean();
if(fluidType != null)
{
fluidStack = new FluidStack(fluidType, amount);
}
}
}
}

View file

@ -13,6 +13,7 @@ import mekanism.common.base.IActiveState;
import mekanism.common.base.ILogisticalTransporter;
import mekanism.common.base.IRedstoneControl;
import mekanism.common.base.ISustainedData;
import mekanism.common.base.ITransporterTile;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.content.transporter.Finder.FirstFinder;
import mekanism.common.content.transporter.InvStack;
@ -86,7 +87,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
TileEntity back = Coord4D.get(this).getFromSide(ForgeDirection.getOrientation(facing).getOpposite()).getTileEntity(worldObj);
TileEntity front = Coord4D.get(this).getFromSide(ForgeDirection.getOrientation(facing)).getTileEntity(worldObj);
if(back instanceof IInventory && (front instanceof ILogisticalTransporter || front instanceof IInventory))
if(back instanceof IInventory && (front instanceof ITransporterTile || front instanceof IInventory))
{
IInventory inventory = (IInventory)back;
@ -164,9 +165,9 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
{
ItemStack used = null;
/*TODO if(front instanceof ILogisticalTransporter)
if(front instanceof ITransporterTile)
{
ILogisticalTransporter transporter = (ILogisticalTransporter)front;
ILogisticalTransporter transporter = ((ITransporterTile)front).getTransmitter();
if(!roundRobin)
{
@ -186,14 +187,14 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
}
}
}
else */if(front instanceof IInventory)
else if(front instanceof IInventory)
{
ItemStack rejects = InventoryUtils.putStackInInventory((IInventory)front, inInventory.getStack(), facing, false);
/*TODO if(TransporterManager.didEmit(inInventory.getStack(), rejects))
if(TransporterManager.didEmit(inInventory.getStack(), rejects))
{
used = TransporterManager.getToUse(inInventory.getStack(), rejects);
}*/
}
}
return used;

View file

@ -24,8 +24,16 @@ public abstract class Transmitter<A, N extends DynamicNetwork<A, N>> implements
@Override
public void setTransmitterNetwork(N network)
{
if(world().isRemote && theNetwork != null)
{
theNetwork.transmitters.remove(this);
}
theNetwork = network;
orphaned = network == null;
orphaned = theNetwork == null;
if(world().isRemote && theNetwork != null)
{
theNetwork.transmitters.add(this);
}
}
@Override