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

View file

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

View file

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

View file

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

View file

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

View file

@ -1424,7 +1424,7 @@ public class Mekanism
public void onEnergyTransferred(EnergyTransferEvent event) public void onEnergyTransferred(EnergyTransferEvent event)
{ {
try { 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) {} } catch(Exception e) {}
} }
@ -1432,7 +1432,7 @@ public class Mekanism
public void onGasTransferred(GasTransferEvent event) public void onGasTransferred(GasTransferEvent event)
{ {
try { 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) {} } catch(Exception e) {}
} }
@ -1440,7 +1440,7 @@ public class Mekanism
public void onLiquidTransferred(FluidTransferEvent event) public void onLiquidTransferred(FluidTransferEvent event)
{ {
try { 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) {} } catch(Exception e) {}
} }

View file

@ -101,6 +101,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
if(connectedNets.size() == 0) if(connectedNets.size() == 0)
{ {
theNetwork = createNetworkFromSingleTransmitter((IGridTransmitter<N>)tile()); theNetwork = createNetworkFromSingleTransmitter((IGridTransmitter<N>)tile());
theNetwork.fullRefresh();
theNetwork.updateCapacity();
} }
else if(connectedNets.size() == 1) else if(connectedNets.size() == 1)
{ {
@ -114,6 +116,8 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends Pa
else { else {
theNetwork = createNetworkByMergingSet(connectedNets); theNetwork = createNetworkByMergingSet(connectedNets);
theNetwork.transmitters.add((IGridTransmitter<N>)tile()); 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(); super.refreshTransmitterNetwork();
if(MekanismUtils.useBuildCraft()) if(MekanismUtils.useBuildCraft())
{
reconfigure(); reconfigure();
}
} }
@Override @Override

View file

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