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; package mekanism.api.gas;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@ -12,6 +13,7 @@ import java.util.Set;
import mekanism.api.Coord4D; import mekanism.api.Coord4D;
import mekanism.api.transmitters.DynamicNetwork; import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.IGridTransmitter; import mekanism.api.transmitters.IGridTransmitter;
import mekanism.common.Mekanism;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
@ -112,6 +114,8 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
return; 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; buffer.amount += gas.amount;
gas.amount = 0; gas.amount = 0;
} }
@ -132,7 +136,9 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
public int tickEmit(GasStack stack) 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); Collections.shuffle(availableAcceptors);
@ -145,30 +151,26 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
int remaining = toSend % divider; int remaining = toSend % divider;
int sending = (toSend-remaining)/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; currentSending++;
int currentSending = sending; remaining--;
EnumSet<ForgeDirection> sides = acceptorDirections.get(Coord4D.get((TileEntity)acceptor)); }
if(remaining > 0) for(ForgeDirection side : sides)
{
int prev = toSend;
toSend -= acceptor.receiveGas(side, new GasStack(stack.getGas(), currentSending), true);
if(toSend < prev)
{ {
currentSending++; break;
remaining--;
}
for(ForgeDirection side : sides)
{
int prev = toSend;
toSend -= acceptor.receiveGas(side.getOpposite(), new GasStack(stack.getGas(), currentSending), true);
if(toSend < prev)
{
break;
}
} }
} }
} }
@ -301,7 +303,7 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
for(ForgeDirection side : sides) for(ForgeDirection side : sides)
{ {
if(acceptor != null && acceptor.canReceiveGas(side.getOpposite(), type)) if(acceptor != null && acceptor.canReceiveGas(side, type))
{ {
toReturn.add(acceptor); toReturn.add(acceptor);
break; break;

View file

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

View file

@ -95,6 +95,8 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
return; 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; buffer.amount += fluid.amount;
fluid.amount = 0; fluid.amount = 0;
} }
@ -231,7 +233,7 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
if(didTransfer != prevTransfer || needsUpdate) 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; needsUpdate = false;
} }
@ -315,14 +317,12 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
public final FluidNetwork fluidNetwork; public final FluidNetwork fluidNetwork;
public final FluidStack fluidType; public final FluidStack fluidType;
public final float fluidScale;
public final boolean didTransfer; public final boolean didTransfer;
public FluidTransferEvent(FluidNetwork network, FluidStack type, float scale, boolean did) public FluidTransferEvent(FluidNetwork network, FluidStack type, boolean did)
{ {
fluidNetwork = network; fluidNetwork = network;
fluidType = type; fluidType = type;
fluidScale = scale;
didTransfer = did; didTransfer = did;
} }
} }

View file

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

View file

@ -1287,7 +1287,7 @@ public class Mekanism
public void onLiquidTransferred(FluidTransferEvent event) public void onLiquidTransferred(FluidTransferEvent event)
{ {
try { 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) {} } catch(Exception e) {}
} }

View file

@ -13,6 +13,7 @@ import mekanism.api.Coord4D;
import mekanism.common.InventoryNetwork; import mekanism.common.InventoryNetwork;
import mekanism.common.InventoryNetwork.AcceptorData; import mekanism.common.InventoryNetwork.AcceptorData;
import mekanism.common.base.ILogisticalTransporter; import mekanism.common.base.ILogisticalTransporter;
import mekanism.common.base.ITransporterTile;
import mekanism.common.content.transporter.PathfinderCache.PathData; import mekanism.common.content.transporter.PathfinderCache.PathData;
import mekanism.common.content.transporter.TransporterPathfinder.Pathfinder.DestChecker; import mekanism.common.content.transporter.TransporterPathfinder.Pathfinder.DestChecker;
import mekanism.common.content.transporter.TransporterStack.Path; import mekanism.common.content.transporter.TransporterStack.Path;
@ -377,7 +378,7 @@ public final class TransporterPathfinder
for(int i = 0; i < 6; i++) for(int i = 0; i < 6; i++)
{ {
ForgeDirection direction = ForgeDirection.getOrientation(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)))) 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); TileEntity tile = neighbor.getTileEntity(worldObj);
double tentativeG = gScore.get(currentNode) + currentNode.distanceTo(neighbor); double tentativeG = gScore.get(currentNode) + currentNode.distanceTo(neighbor);
tentativeG += ((ILogisticalTransporter)tile).getCost(); tentativeG += ((ITransporterTile)tile).getTransmitter().getCost();
if(closedSet.contains(neighbor)) if(closedSet.contains(neighbor))
{ {

View file

@ -214,7 +214,7 @@ public class TransporterStack
public boolean isFinal(ILogisticalTransporter transporter) 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) public Coord4D getNext(ILogisticalTransporter transporter)
@ -301,8 +301,6 @@ public class TransporterStack
public boolean canInsertToTransporter(ILogisticalTransporter transporter, ForgeDirection side) public boolean canInsertToTransporter(ILogisticalTransporter transporter, ForgeDirection side)
{ {
TileEntity from = transporter.coord().getFromSide(side.getOpposite()).getTileEntity(transporter.world());
if(!transporter.canConnectMutual(side)) if(!transporter.canConnectMutual(side))
{ {
return false; return false;

View file

@ -46,13 +46,13 @@ public class PartLogisticalTransporter extends PartTransmitter<IInventory, Inven
{ {
public Tier.TransporterTier tier = Tier.TransporterTier.BASIC; 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 int pullDelay = 0;
public PartLogisticalTransporter(TransporterTier transporterTier) public PartLogisticalTransporter(TransporterTier transporterTier)
{ {
super(); this();
tier = transporterTier; tier = transporterTier;
} }

View file

@ -80,7 +80,7 @@ public class PartPressurizedTube extends PartTransmitter<IGasHandler, GasNetwork
} }
else { 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) if(Math.abs(currentScale - targetScale) > 0.01)
{ {

View file

@ -47,6 +47,7 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
{ {
IGridTransmitter transmitter = ((ITransmitterTile)tileEntity).getTransmitter(); IGridTransmitter transmitter = ((ITransmitterTile)tileEntity).getTransmitter();
DynamicNetwork network = transmitter.hasTransmitterNetwork() && !message.newNetwork ? transmitter.getTransmitterNetwork() : transmitter.createEmptyNetwork(); DynamicNetwork network = transmitter.hasTransmitterNetwork() && !message.newNetwork ? transmitter.getTransmitterNetwork() : transmitter.createEmptyNetwork();
network.register();
transmitter.setTransmitterNetwork(network); transmitter.setTransmitterNetwork(network);
for(Coord4D coord : message.transmitterCoords) for(Coord4D coord : message.transmitterCoords)
{ {
@ -57,6 +58,7 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
((ITransmitterTile)tile).getTransmitter().setTransmitterNetwork(network); ((ITransmitterTile)tile).getTransmitter().setTransmitterNetwork(network);
} }
} }
network.updateCapacity();
} }
} }
else if(message.packetType == PacketType.ENERGY) else if(message.packetType == PacketType.ENERGY)
@ -109,8 +111,8 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
net.refFluid = message.fluidType; net.refFluid = message.fluidType;
} }
net.buffer = message.fluidStack;
net.didTransfer = message.didFluidTransfer; net.didTransfer = message.didFluidTransfer;
net.fluidScale = message.fluidScale;
} }
} }
} }
@ -200,7 +202,7 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
break; break;
case FLUID: case FLUID:
dataStream.writeInt(fluidStack != null ? fluidStack.getFluid().getID() : -1); dataStream.writeInt(fluidStack != null ? fluidStack.getFluid().getID() : -1);
dataStream.writeFloat(fluidStack != null ? fluidScale : 0); dataStream.writeInt(fluidStack != null ? fluidStack.amount : 0);
dataStream.writeBoolean(didFluidTransfer); dataStream.writeBoolean(didFluidTransfer);
break; break;
default: default:
@ -245,8 +247,13 @@ public class PacketTransmitterUpdate implements IMessageHandler<TransmitterUpdat
{ {
int type = dataStream.readInt(); int type = dataStream.readInt();
fluidType = type != -1 ? FluidRegistry.getFluid(type) : null; fluidType = type != -1 ? FluidRegistry.getFluid(type) : null;
fluidScale = dataStream.readFloat(); amount = dataStream.readInt();
didFluidTransfer = dataStream.readBoolean(); 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.ILogisticalTransporter;
import mekanism.common.base.IRedstoneControl; import mekanism.common.base.IRedstoneControl;
import mekanism.common.base.ISustainedData; import mekanism.common.base.ISustainedData;
import mekanism.common.base.ITransporterTile;
import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.content.transporter.Finder.FirstFinder; import mekanism.common.content.transporter.Finder.FirstFinder;
import mekanism.common.content.transporter.InvStack; 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 back = Coord4D.get(this).getFromSide(ForgeDirection.getOrientation(facing).getOpposite()).getTileEntity(worldObj);
TileEntity front = Coord4D.get(this).getFromSide(ForgeDirection.getOrientation(facing)).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; IInventory inventory = (IInventory)back;
@ -164,9 +165,9 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
{ {
ItemStack used = null; ItemStack used = null;
/*TODO if(front instanceof ILogisticalTransporter) if(front instanceof ITransporterTile)
{ {
ILogisticalTransporter transporter = (ILogisticalTransporter)front; ILogisticalTransporter transporter = ((ITransporterTile)front).getTransmitter();
if(!roundRobin) 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); 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); used = TransporterManager.getToUse(inInventory.getStack(), rejects);
}*/ }
} }
return used; return used;

View file

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