Fixed an issue where networks would be forgotten, made shift-M turn jetpack off immediately, simplified network code a bit

This commit is contained in:
Aidan Brady 2014-08-06 18:25:33 -04:00
parent 321411ee3a
commit 78c0cc4c7c
9 changed files with 68 additions and 38 deletions

View file

@ -45,14 +45,12 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
public GasNetwork(IGridTransmitter<GasNetwork>... varPipes)
{
transmitters.addAll(Arrays.asList(varPipes));
updateCapacity();
register();
}
public GasNetwork(Collection<IGridTransmitter<GasNetwork>> collection)
{
transmitters.addAll(collection);
updateCapacity();
register();
}
@ -97,8 +95,6 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
gasScale = getScale();
updateCapacity();
fullRefresh();
register();
}

View file

@ -12,6 +12,7 @@ import java.util.Set;
import mekanism.api.Coord4D;
import mekanism.api.IClientTicker;
import mekanism.common.Mekanism;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
@ -52,8 +53,20 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
{
Coord4D coord = Coord4D.get(transmitter.getTile()).getFromSide(side);
possibleAcceptors.remove(coord);
acceptorDirections.remove(coord.getTileEntity(transmitter.getTile().getWorldObj()));
if(possibleAcceptors.containsKey(coord))
{
clearIfNecessary(coord, transmitter, side.getOpposite());
}
}
}
protected void clearIfNecessary(Coord4D acceptor, IGridTransmitter<N> transmitter, ForgeDirection side)
{
if(acceptor.getTileEntity(getWorld()) == null || acceptor.getTileEntity(getWorld()).isInvalid() || transmitter.canConnectToAcceptor(side, true))
{
possibleAcceptors.remove(acceptor);
acceptorDirections.remove(acceptor.getTileEntity(getWorld()));
}
}
@ -92,14 +105,14 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
return packetRange;
}
public int getDimension()
public World getWorld()
{
if(getSize() == 0)
{
return 0;
return null;
}
return transmitters.iterator().next().getTile().getWorldObj().provider.dimensionId;
return transmitters.iterator().next().getTile().getWorldObj();
}
protected AxisAlignedBB genPacketRange()
@ -198,7 +211,8 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
return possibleAcceptors.size();
}
public synchronized void updateCapacity() {
public synchronized void updateCapacity()
{
updateMeanCapacity();
capacity = (int)meanCapacity * transmitters.size();
}

View file

@ -9,6 +9,7 @@ import java.util.Set;
import mekanism.api.EnumColor;
import mekanism.api.IClientTicker;
import mekanism.api.StackUtils;
import mekanism.api.gas.GasStack;
import mekanism.client.sound.GasMaskSound;
import mekanism.client.sound.JetpackSound;
@ -36,7 +37,6 @@ import mekanism.common.network.PacketScubaTankData.ScubaTankPacket;
import mekanism.common.network.PacketWalkieTalkieState.WalkieTalkieStateMessage;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.api.StackUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.entity.player.EntityPlayer;
@ -312,8 +312,15 @@ public class ClientTickHandler
{
if(!lastTickUpdate)
{
((ItemJetpack)jetpack.getItem()).incrementMode(jetpack);
Mekanism.packetHandler.sendToServer(new JetpackDataMessage(JetpackPacket.MODE, null, false));
if(mc.thePlayer.isSneaking())
{
((ItemJetpack)jetpack.getItem()).setMode(stack, JetpackMode.DISABLED);
}
else {
((ItemJetpack)jetpack.getItem()).incrementMode(jetpack);
}
Mekanism.packetHandler.sendToServer(new JetpackDataMessage(JetpackPacket.MODE, null, mc.thePlayer.isSneaking()));
SoundHandler.playSound("mekanism:etc.Hydraulic");
lastTickUpdate = true;
}

View file

@ -43,22 +43,15 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
public EnergyNetwork(IGridTransmitter<EnergyNetwork>... varCables)
{
transmitters.addAll(Arrays.asList(varCables));
updateCapacity();
register();
}
public EnergyNetwork(Collection<IGridTransmitter<EnergyNetwork>> collection)
{
transmitters.addAll(collection);
updateCapacity();
register();
}
public static double round(double d)
{
return Math.round(d * 10000)/10000;
}
public EnergyNetwork(Set<EnergyNetwork> networks)
{
for(EnergyNetwork net : networks)
@ -80,9 +73,13 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
}
}
fullRefresh();
register();
}
public static double round(double d)
{
return Math.round(d * 10000)/10000;
}
@Override
protected synchronized void updateMeanCapacity()

View file

@ -43,14 +43,12 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
public FluidNetwork(IGridTransmitter<FluidNetwork>... varPipes)
{
transmitters.addAll(Arrays.asList(varPipes));
updateCapacity();
register();
}
public FluidNetwork(Collection<IGridTransmitter<FluidNetwork>> collection)
{
transmitters.addAll(collection);
updateCapacity();
register();
}
@ -95,9 +93,6 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
fluidScale = getScale();
updateCapacity();
fullRefresh();
register();
}

View file

@ -1424,7 +1424,7 @@ public class Mekanism
public void onEnergyTransferred(EnergyTransferEvent event)
{
try {
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.ENERGY, Coord4D.get((TileEntity)event.energyNetwork.transmitters.iterator().next()), event.power), event.energyNetwork.getDimension());
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.ENERGY, Coord4D.get((TileEntity)event.energyNetwork.transmitters.iterator().next()), event.power), event.energyNetwork.getWorld().provider.dimensionId);
} catch(Exception e) {}
}
@ -1432,7 +1432,7 @@ public class Mekanism
public void onGasTransferred(GasTransferEvent event)
{
try {
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.GAS, Coord4D.get((TileEntity)event.gasNetwork.transmitters.iterator().next()), event.transferType, event.didTransfer), event.gasNetwork.getDimension());
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.GAS, Coord4D.get((TileEntity)event.gasNetwork.transmitters.iterator().next()), event.transferType, event.didTransfer), event.gasNetwork.getWorld().provider.dimensionId);
} catch(Exception e) {}
}
@ -1440,7 +1440,7 @@ public class Mekanism
public void onLiquidTransferred(FluidTransferEvent event)
{
try {
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.FLUID, Coord4D.get((TileEntity)event.fluidNetwork.transmitters.iterator().next()), event.fluidType, event.didTransfer), event.fluidNetwork.getDimension());
packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.FLUID, Coord4D.get((TileEntity)event.fluidNetwork.transmitters.iterator().next()), event.fluidType, event.didTransfer), event.fluidNetwork.getWorld().provider.dimensionId);
} catch(Exception e) {}
}

View file

@ -101,6 +101,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
if(connectedNets.size() == 0)
{
theNetwork = createNetworkFromSingleTransmitter((IGridTransmitter<N>)tile());
theNetwork.fullRefresh();
theNetwork.updateCapacity();
}
else if(connectedNets.size() == 1)
{
@ -114,6 +116,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
else {
theNetwork = createNetworkByMergingSet(connectedNets);
theNetwork.transmitters.add((IGridTransmitter<N>)tile());
theNetwork.fullRefresh();
theNetwork.updateCapacity();
}
}

View file

@ -134,7 +134,9 @@ public class PartUniversalCable extends PartTransmitter<EnergyNetwork> implement
super.refreshTransmitterNetwork();
if(MekanismUtils.useBuildCraft())
{
reconfigure();
}
}
@Override

View file

@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.item.ItemJetpack;
import mekanism.common.item.ItemJetpack.JetpackMode;
import mekanism.common.network.PacketJetpackData.JetpackDataMessage;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@ -39,7 +40,13 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
if(stack != null && stack.getItem() instanceof ItemJetpack)
{
((ItemJetpack)stack.getItem()).incrementMode(stack);
if(!message.value)
{
((ItemJetpack)stack.getItem()).incrementMode(stack);
}
else {
((ItemJetpack)stack.getItem()).setMode(stack, JetpackMode.DISABLED);
}
}
}
@ -58,11 +65,11 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
public JetpackDataMessage(JetpackPacket type, String name, boolean state)
{
packetType = type;
value = state;
if(packetType == JetpackPacket.UPDATE)
{
username = name;
value = state;
}
}
@ -71,7 +78,11 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
{
dataStream.writeInt(packetType.ordinal());
if(packetType == JetpackPacket.UPDATE)
if(packetType == JetpackPacket.MODE)
{
dataStream.writeBoolean(value);
}
else if(packetType == JetpackPacket.UPDATE)
{
PacketHandler.writeString(dataStream, username);
dataStream.writeBoolean(value);
@ -92,7 +103,16 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
{
packetType = JetpackPacket.values()[dataStream.readInt()];
if(packetType == JetpackPacket.FULL)
if(packetType == JetpackPacket.MODE)
{
value = dataStream.readBoolean();
}
else if(packetType == JetpackPacket.UPDATE)
{
username = PacketHandler.readString(dataStream);
value = dataStream.readBoolean();
}
else if(packetType == JetpackPacket.FULL)
{
Mekanism.jetpackOn.clear();
@ -103,11 +123,6 @@ public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IM
Mekanism.jetpackOn.add(PacketHandler.readString(dataStream));
}
}
else if(packetType == JetpackPacket.UPDATE)
{
username = PacketHandler.readString(dataStream);
value = dataStream.readBoolean();
}
}
}