Fix null pointer when joining some multiverse servers

This commit is contained in:
James Seibel
2023-11-25 11:39:53 -06:00
parent 83c01cabfb
commit dd60c7620f
3 changed files with 14 additions and 11 deletions
@@ -27,6 +27,7 @@ import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkSource;
import net.minecraft.world.level.chunk.ChunkStatus;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.concurrent.ConcurrentHashMap;
@@ -54,8 +55,14 @@ public class ClientLevelWrapper implements IClientLevelWrapper
// wrapper logic //
//===============//
public static IClientLevelWrapper getWrapper(ClientLevel level)
@Nullable
public static IClientLevelWrapper getWrapper(@Nullable ClientLevel level)
{
if (level == null)
{
return null;
}
// used if the client is connected to a server that defines the currently loaded level
if (KEYED_CLIENT_LEVEL_MANAGER.getUseOverrideWrapper())
{
@@ -64,10 +71,7 @@ public class ClientLevelWrapper implements IClientLevelWrapper
return getWrapperIgnoringOverride(level);
}
public static IClientLevelWrapper getWrapperIgnoringOverride(ClientLevel level)
{
return LEVEL_WRAPPER_BY_CLIENT_LEVEL.computeIfAbsent(level, ClientLevelWrapper::new);
}
public static IClientLevelWrapper getWrapperIgnoringOverride(@NotNull ClientLevel level) { return LEVEL_WRAPPER_BY_CLIENT_LEVEL.computeIfAbsent(level, ClientLevelWrapper::new); }
@Nullable
@Override
@@ -27,9 +27,9 @@ public class MixinClientPacketListener
void onHandleLoginEnd(CallbackInfo ci) { ClientApi.INSTANCE.onClientOnlyConnected(); }
@Inject(method = "handleRespawn", at = @At("HEAD"))
void onHandleRespawnStart(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(level)); }
void onHandleRespawnStart(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(this.level)); }
@Inject(method = "handleRespawn", at = @At("RETURN"))
void onHandleRespawnEnd(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper(level)); }
void onHandleRespawnEnd(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper(this.level)); }
#if PRE_MC_1_19_4
@Inject(method = "cleanup", at = @At("HEAD"))
@@ -38,10 +38,9 @@ public class MixinClientPacketListener
#endif
void onCleanupStart(CallbackInfo ci)
{
// TODO Is this even needed here?
if (level != null)
if (this.level != null)
{
ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(level));
ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(this.level));
}
ClientApi.INSTANCE.onClientOnlyDisconnected();
}