Fixed More Bugs

Fixed the issue with integrated servers causing circular updates between
the combined server and client. We now check on the client side whether
the connection we're receiving data from is a memory connection (which
is presumably only used by integrated servers). If so, the client
ignores any incoming packets. We don't just disable update events
altogether because LAN games will require updating remote clients.

Also fixed a bug in PocketManager.unload() - we weren't setting isLoaded
to false after unloading everything and unregisterPockets() had to be
called before setting dimensionData to null.
This commit is contained in:
SenseiKiwi 2013-09-03 21:41:54 -04:00
parent 1a50aa2290
commit 549ee54852
2 changed files with 12 additions and 8 deletions

View file

@ -391,17 +391,16 @@ public class PocketManager
public static void unload()
{
if (!isLoaded)
{
throw new IllegalStateException("Pocket dimensions have already been unloaded!");
}
save();
dimensionData = null;
unregisterPockets();
dimensionData = null;
isLoaded = false;
}
/*
* This isn't needed right now and it's causing me problems due to the iterator's generic type -_-
public static Iterable<NewDimData> getDimensions()
{
return dimensionData.values();
}*/
public static DimLink getLink(int x, int y, int z, World world)
{

View file

@ -38,6 +38,11 @@ public class ClientPacketHandler implements IPacketHandler, IUpdateSource
if (!packet.channel.equals(PacketConstants.CHANNEL_NAME))
return;
// If this is a memory connection, then our client is running an integrated server.
// We can tell by checking if packet size is 0.
if (manager.packetSize() == 0)
return;
try
{
DataInputStream input = new DataInputStream(new ByteArrayInputStream(packet.data));