Fix crash on exiting personal pocket dimension #185

Closed
notabadminer wants to merge 67 commits from master into master
4 changed files with 14 additions and 10 deletions
Showing only changes of commit bb2525d94e - Show all commits

View File

@@ -1,5 +1,6 @@
package StevenDimDoors.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.network.ClientJoinPacket;
import StevenDimDoors.mod_pocketDim.network.DimDoorsNetwork;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -42,17 +43,14 @@ public class ConnectionHandler
@SubscribeEvent
public void connectionClosed(FMLNetworkEvent.ClientDisconnectionFromServerEvent event)
{
if(PocketManager.isConnected)
{
PocketManager.unload();
}
PocketManager.tryUnload();
}
@SubscribeEvent
public void playerLoggedIn(PlayerEvent.PlayerLoggedInEvent event)
{
// Hax... please don't do this! >_<
PocketManager.getDimwatcher().onCreated(new ClientDimData(PocketManager.createDimensionDataDangerously(0)));
// Hax... please don't do this! >_<
DimDoorsNetwork.sendToPlayer(new ClientJoinPacket(), event.player);
}
}

View File

@@ -119,10 +119,9 @@ public class EventHookContainer
// fires before we can use DimensionManager and onServerStarting fires
// after the game tries to generate terrain. If a gateway tries to
// generate before PocketManager has initialized, we get a crash.
if (!PocketManager.isLoaded())
if (!event.world.isRemote && !PocketManager.isLoaded())
{
PocketManager.load();
PocketManager.isConnected = true;
}
}

View File

@@ -629,6 +629,13 @@ public class PocketManager
return (ArrayList<NewDimData>) rootDimensions.clone();
}
public static void tryUnload() {
if (isConnected)
unload();
isLoading = false;
isLoaded = false;
}
public static void unload()
{
System.out.println("Unloading Pocket Dimensions...");

View File

@@ -33,11 +33,11 @@ public class Compactor
{
output.writeInt(dimension.id());
output.writeInt(dimension.root().id());
output.writeInt(dimension.type().index);
output.writeInt(dimension.linkCount());
for (DimLink link : dimension.links())
{
Point4D.write(link.source(), output);
output.writeInt(link.orientation());
(new ClientLinkData(link)).write(output);
}
}