Restore some client-side network stuff. More fixes
This commit is contained in:
parent
ede0015eec
commit
16ce88f09a
13 changed files with 67 additions and 59 deletions
|
@ -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)
|
||||
for(ForgeDirection side : sides)
|
||||
{
|
||||
int prev = toSend;
|
||||
|
||||
toSend -= acceptor.receiveGas(side, new GasStack(stack.getGas(), currentSending), true);
|
||||
|
||||
if(toSend < prev)
|
||||
{
|
||||
currentSending++;
|
||||
remaining--;
|
||||
}
|
||||
|
||||
for(ForgeDirection side : sides)
|
||||
{
|
||||
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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue