Fix some stuff I missed in the merge, and server-client communication.

This commit is contained in:
Ben Spiers 2015-04-04 02:44:14 +01:00
parent 7a2461540f
commit d29d1580bb
13 changed files with 53 additions and 41 deletions

View file

@ -6,6 +6,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import mekanism.api.Coord4D; import mekanism.api.Coord4D;
import mekanism.api.transmitters.ITransmitterTile;
import mekanism.api.transmitters.TransmissionType; import mekanism.api.transmitters.TransmissionType;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
@ -18,28 +19,6 @@ import net.minecraftforge.common.util.ForgeDirection;
*/ */
public final class GasTransmission public final class GasTransmission
{ {
/**
* Gets all the tubes around a tile entity.
* @param tileEntity - center tile entity
* @return array of TileEntities
*/
public static TileEntity[] getConnectedTubes(TileEntity tileEntity)
{
TileEntity[] tubes = new TileEntity[] {null, null, null, null, null, null};
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{
TileEntity tube = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj());
if(TransmissionType.checkTransmissionType(tube, TransmissionType.GAS, tileEntity))
{
tubes[orientation.ordinal()] = tube;
}
}
return tubes;
}
/** /**
* Gets all the acceptors around a tile entity. * Gets all the acceptors around a tile entity.
* @param tileEntity - center tile entity * @param tileEntity - center tile entity
@ -92,7 +71,7 @@ public final class GasTransmission
*/ */
public static boolean canConnect(TileEntity tileEntity, ForgeDirection side) public static boolean canConnect(TileEntity tileEntity, ForgeDirection side)
{ {
if(tileEntity instanceof ITubeConnection && (!(tileEntity instanceof IGasTransmitter) || TransmissionType.checkTransmissionType(tileEntity, TransmissionType.GAS, tileEntity))) if(tileEntity instanceof ITubeConnection && (!(tileEntity instanceof ITransmitterTile) || TransmissionType.checkTransmissionType(((ITransmitterTile)tileEntity).getTransmitter(), TransmissionType.GAS)))
{ {
if(((ITubeConnection)tileEntity).canTubeConnect(side.getOpposite())) if(((ITubeConnection)tileEntity).canTubeConnect(side.getOpposite()))
{ {

View file

@ -4,7 +4,7 @@ import mekanism.api.transmitters.IGridTransmitter;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
public interface IGasTransmitter extends IGridTransmitter<GasNetwork> public interface IGasTransmitter extends IGridTransmitter<IGasHandler, GasNetwork>
{ {
public boolean canTransferGasToTube(TileEntity tile); public boolean canTransferGasToTube(TileEntity tile);
} }

View file

@ -34,7 +34,7 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
public HashMap<Coord4D, EnumSet<ForgeDirection>> acceptorDirections = new HashMap<Coord4D, EnumSet<ForgeDirection>>(); public HashMap<Coord4D, EnumSet<ForgeDirection>> acceptorDirections = new HashMap<Coord4D, EnumSet<ForgeDirection>>();
public HashMap<IGridTransmitter<A, N>, EnumSet<ForgeDirection>> changedAcceptors = new HashMap<>(); public HashMap<IGridTransmitter<A, N>, EnumSet<ForgeDirection>> changedAcceptors = new HashMap<>();
private List<DelayQueue> updateQueue = new ArrayList<DelayQueue>(); private Set<DelayQueue> updateQueue = new LinkedHashSet<DelayQueue>();
protected Range4D packetRange = null; protected Range4D packetRange = null;
@ -326,7 +326,8 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
q.delay--; q.delay--;
} else } else
{ {
needsUpdate = true; transmittersAdded.addAll(transmitters);
updateDelay = 1;
i.remove(); i.remove();
} }
} }
@ -424,5 +425,17 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
player = p; player = p;
delay = 5; delay = 5;
} }
@Override
public int hashCode()
{
return player.hashCode();
}
@Override
public boolean equals(Object o)
{
return o instanceof DelayQueue && ((DelayQueue)o).player.equals(this.player);
}
} }
} }

View file

@ -179,7 +179,7 @@ public class RenderPartTransmitter implements IIconSelfRegister
GL11.glPushMatrix(); GL11.glPushMatrix();
entityItem.setEntityItemStack(stack.itemStack); entityItem.setEntityItemStack(stack.itemStack);
float[] pos = TransporterUtils.getStackPosition(transporter.getTransmitter(), stack, partialTick*transporter.getTransmitter().tier.speed); float[] pos = TransporterUtils.getStackPosition(transporter.getTransmitter(), stack, partialTick*transporter.tier.speed);
GL11.glTranslated(vec.x + pos[0], vec.y + pos[1] - entityItem.yOffset, vec.z + pos[2]); GL11.glTranslated(vec.x + pos[0], vec.y + pos[1] - entityItem.yOffset, vec.z + pos[2]);
GL11.glScalef(0.75F, 0.75F, 0.75F); GL11.glScalef(0.75F, 0.75F, 0.75F);

View file

@ -30,8 +30,6 @@ public class MultipartTransporter extends MultipartTransmitter<IInventory, Inven
{ {
public HashList<TransporterStack> transit = new HashList<>(); public HashList<TransporterStack> transit = new HashList<>();
public static final int SPEED = 5;
public EnumColor color; public EnumColor color;
public Set<TransporterStack> needsSync = new HashSet<>(); public Set<TransporterStack> needsSync = new HashSet<>();
@ -49,7 +47,7 @@ public class MultipartTransporter extends MultipartTransmitter<IInventory, Inven
{ {
if(stack != null) if(stack != null)
{ {
stack.progress = Math.min(100, stack.progress+SPEED); stack.progress = Math.min(100, stack.progress+getPart().tier.speed);
} }
} }
} }
@ -69,7 +67,7 @@ public class MultipartTransporter extends MultipartTransmitter<IInventory, Inven
} }
} }
stack.progress += SPEED; stack.progress += getPart().tier.speed;
if(stack.progress > 100) if(stack.progress > 100)
{ {
@ -85,7 +83,7 @@ public class MultipartTransporter extends MultipartTransmitter<IInventory, Inven
if(next != null && stack.canInsertToTransporter(stack.getNext(this).getTileEntity(world()), ForgeDirection.getOrientation(stack.getSide(this)))) if(next != null && stack.canInsertToTransporter(stack.getNext(this).getTileEntity(world()), ForgeDirection.getOrientation(stack.getSide(this))))
{ {
ITransporterTile nextTile = (ITransporterTile)next.getTileEntity(world()); ITransporterTile nextTile = (ITransporterTile)next.getTileEntity(world());
nextTile.getTransmitter().entityEntering(stack); nextTile.getTransmitter().entityEntering(stack, stack.progress%100);
remove.add(stack); remove.add(stack);
continue; continue;
@ -325,9 +323,9 @@ public class MultipartTransporter extends MultipartTransmitter<IInventory, Inven
} }
@Override @Override
public void entityEntering(TransporterStack stack) public void entityEntering(TransporterStack stack, int progress)
{ {
stack.progress = 0; stack.progress = progress;
transit.add(stack); transit.add(stack);
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(coord(), getPart().getSyncPacket(stack, false)), new Range4D(coord())); Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(coord(), getPart().getSyncPacket(stack, false)), new Range4D(coord()));
MekanismUtils.saveChunk(getPart().tile()); MekanismUtils.saveChunk(getPart().tile());

View file

@ -6,6 +6,7 @@ import mekanism.api.Coord4D;
import mekanism.api.EnumColor; import mekanism.api.EnumColor;
import mekanism.api.Range4D; import mekanism.api.Range4D;
import mekanism.common.Mekanism; import mekanism.common.Mekanism;
import mekanism.common.Tier.TransporterTier;
import mekanism.common.content.transporter.TransporterStack; import mekanism.common.content.transporter.TransporterStack;
import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils;
@ -43,13 +44,13 @@ public class PartDiversionTransporter extends PartLogisticalTransporter
@Override @Override
public IIcon getSideIcon(boolean opaque) public IIcon getSideIcon(boolean opaque)
{ {
return transporterIcons.getSideIcon(opaque ? 14 : (color != null ? 11 : 10)); return transporterIcons.getSideIcon(opaque ? 14 : (getTransmitter().color != null ? 11 : 10));
} }
@Override @Override
public IIcon getSideIconRotated(boolean opaque) public IIcon getSideIconRotated(boolean opaque)
{ {
return transporterIcons.getSideIcon(opaque ? 15 : (color != null ? 13 : 12)); return transporterIcons.getSideIcon(opaque ? 15 : (getTransmitter().color != null ? 13 : 12));
} }
@Override @Override

View file

@ -42,7 +42,6 @@ import io.netty.buffer.ByteBuf;
import codechicken.lib.vec.Vector3; import codechicken.lib.vec.Vector3;
public class PartLogisticalTransporter extends PartTransmitter<IInventory, InventoryNetwork> implements ITransporterTile public class PartLogisticalTransporter extends PartTransmitter<IInventory, InventoryNetwork> implements ITransporterTile
{ {
public Tier.TransporterTier tier = Tier.TransporterTier.BASIC; public Tier.TransporterTier tier = Tier.TransporterTier.BASIC;
@ -53,7 +52,12 @@ public class PartLogisticalTransporter extends PartTransmitter<IInventory, Inven
public PartLogisticalTransporter(TransporterTier transporterTier) public PartLogisticalTransporter(TransporterTier transporterTier)
{ {
super();
tier = transporterTier; tier = transporterTier;
}
public PartLogisticalTransporter()
{
transmitterDelegate = new MultipartTransporter(this); transmitterDelegate = new MultipartTransporter(this);
} }

View file

@ -28,7 +28,7 @@ import codechicken.lib.vec.Vector3;
public class PartMechanicalPipe extends PartTransmitter<IFluidHandler, FluidNetwork> implements IFluidHandler public class PartMechanicalPipe extends PartTransmitter<IFluidHandler, FluidNetwork> implements IFluidHandler
{ {
public static TransmitterIcons pipeIcons = new TransmitterIcons(4, 2); public static TransmitterIcons pipeIcons = new TransmitterIcons(4, 8);
public float currentScale; public float currentScale;
@ -234,7 +234,7 @@ public class PartMechanicalPipe extends PartTransmitter<IFluidHandler, FluidNetw
@Override @Override
public void takeShare() public void takeShare()
{ {
if(getTransmitter().hasTransmitterNetwork()) if(getTransmitter().hasTransmitterNetwork() && getTransmitter().getTransmitterNetwork().buffer != null && lastWrite != null)
{ {
getTransmitter().getTransmitterNetwork().buffer.amount -= lastWrite.amount; getTransmitter().getTransmitterNetwork().buffer.amount -= lastWrite.amount;
buffer.setFluid(lastWrite); buffer.setFluid(lastWrite);

View file

@ -198,7 +198,7 @@ public class PartPressurizedTube extends PartTransmitter<IGasHandler, GasNetwork
@Override @Override
public TransmitterType getTransmitterType() public TransmitterType getTransmitterType()
{ {
return TransmitterType.PRESSURIZED_TUBE; return tier.type;
} }
@Override @Override

View file

@ -1,5 +1,7 @@
package mekanism.common.multipart; package mekanism.common.multipart;
import mekanism.common.Tier.TransporterTier;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;

View file

@ -3,8 +3,11 @@ package mekanism.common.multipart;
import java.util.Collection; import java.util.Collection;
import mekanism.api.transmitters.DynamicNetwork; import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.DynamicNetwork.NetworkClientRequest;
import mekanism.api.transmitters.ITransmitterTile; import mekanism.api.transmitters.ITransmitterTile;
import mekanism.api.transmitters.TransmitterNetworkRegistry; import mekanism.api.transmitters.TransmitterNetworkRegistry;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
public abstract class PartTransmitter<A, N extends DynamicNetwork<A, N>> extends PartSidedPipe implements ITransmitterTile<A, N> public abstract class PartTransmitter<A, N extends DynamicNetwork<A, N>> extends PartSidedPipe implements ITransmitterTile<A, N>
@ -30,6 +33,10 @@ public abstract class PartTransmitter<A, N extends DynamicNetwork<A, N>> extends
{ {
TransmitterNetworkRegistry.registerOrphanTransmitter(getTransmitter()); TransmitterNetworkRegistry.registerOrphanTransmitter(getTransmitter());
} }
else
{
MinecraftForge.EVENT_BUS.post(new NetworkClientRequest(tile()));
}
} }
public abstract N createNewNetwork(); public abstract N createNewNetwork();

View file

@ -45,7 +45,10 @@ public class PacketDataRequest implements IMessageHandler<DataRequestMessage, IM
{ {
IGridTransmitter transmitter = ((ITransmitterTile)tileEntity).getTransmitter(); IGridTransmitter transmitter = ((ITransmitterTile)tileEntity).getTransmitter();
transmitter.getTransmitterNetwork().addUpdate(player); if(transmitter.hasTransmitterNetwork())
{
transmitter.getTransmitterNetwork().addUpdate(player);
}
} }
Mekanism.packetHandler.sendTo(new TileEntityMessage(Coord4D.get(tileEntity), ((ITileNetwork)tileEntity).getNetworkedData(new ArrayList())), (EntityPlayerMP)player); Mekanism.packetHandler.sendTo(new TileEntityMessage(Coord4D.get(tileEntity), ((ITileNetwork)tileEntity).getNetworkedData(new ArrayList())), (EntityPlayerMP)player);

View file

@ -1,5 +1,10 @@
package mekanism.common.util; package mekanism.common.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import mekanism.api.Coord4D; import mekanism.api.Coord4D;
import mekanism.api.transmitters.ITransmitterTile; import mekanism.api.transmitters.ITransmitterTile;