Fix LevelWrappers not unloading correctly
This commit is contained in:
+3
-24
@@ -68,22 +68,12 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
||||
return LEVEL_WRAPPER_BY_CLIENT_LEVEL.computeIfAbsent(level, ClientLevelWrapper::new);
|
||||
}
|
||||
|
||||
public static void closeLevel(ClientLevel level) { LEVEL_WRAPPER_BY_CLIENT_LEVEL.remove(level); }
|
||||
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public IServerLevelWrapper tryGetServerSideWrapper()
|
||||
{
|
||||
try
|
||||
{
|
||||
// commented out because this breaks when traveling between dimensions,
|
||||
// serverPlayer.getLevel() will return the previously loaded level, which causes issues
|
||||
// PlayerList serverPlayerList = MinecraftClientWrapper.INSTANCE.mc.getSingleplayerServer().getPlayerList();
|
||||
// ServerPlayer serverPlayer = serverPlayerList.getPlayer(MinecraftClientWrapper.INSTANCE.mc.player.getUUID());
|
||||
// return ServerLevelWrapper.getWrapper(serverPlayer.getLevel());
|
||||
|
||||
|
||||
Iterable<ServerLevel> serverLevels = MinecraftClientWrapper.INSTANCE.mc.getSingleplayerServer().getAllLevels();
|
||||
|
||||
// attempt to find the server level with the same dimension type
|
||||
@@ -108,14 +98,6 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public static void cleanCheck()
|
||||
{
|
||||
if (!LEVEL_WRAPPER_BY_CLIENT_LEVEL.isEmpty())
|
||||
{
|
||||
LOGGER.warn("{} client levels havn't been freed!", LEVEL_WRAPPER_BY_CLIENT_LEVEL.size());
|
||||
LEVEL_WRAPPER_BY_CLIENT_LEVEL.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -135,12 +117,6 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
||||
@Override
|
||||
public EDhApiLevelType getLevelType() { return EDhApiLevelType.CLIENT_LEVEL; }
|
||||
|
||||
@Override
|
||||
public int getBlockLight(int x, int y, int z) { return this.level.getBrightness(LightLayer.BLOCK, new BlockPos(x, y, z)); }
|
||||
|
||||
@Override
|
||||
public int getSkyLight(int x, int y, int z) { return this.level.getBrightness(LightLayer.SKY, new BlockPos(x, y, z)); }
|
||||
|
||||
public ClientLevel getLevel() { return this.level; }
|
||||
|
||||
@Override
|
||||
@@ -198,6 +174,9 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
||||
@Override
|
||||
public ClientLevel getWrappedMcObject() { return this.level; }
|
||||
|
||||
@Override
|
||||
public void onUnload() { LEVEL_WRAPPER_BY_CLIENT_LEVEL.remove(this.level); }
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
||||
+19
-33
@@ -38,9 +38,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.LightLayer;
|
||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||
import net.minecraft.world.level.chunk.ChunkSource;
|
||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||
@@ -54,33 +52,30 @@ import org.jetbrains.annotations.Nullable;
|
||||
public class ServerLevelWrapper implements IServerLevelWrapper
|
||||
{
|
||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
||||
private static final ConcurrentHashMap<ServerLevel, ServerLevelWrapper>
|
||||
levelWrapperMap = new ConcurrentHashMap<>();
|
||||
|
||||
public static ServerLevelWrapper getWrapper(ServerLevel level)
|
||||
{
|
||||
return levelWrapperMap.computeIfAbsent(level, ServerLevelWrapper::new);
|
||||
}
|
||||
public static void closeWrapper(ServerLevel level)
|
||||
{
|
||||
levelWrapperMap.remove(level);
|
||||
}
|
||||
public static void cleanCheck()
|
||||
{
|
||||
if (!levelWrapperMap.isEmpty())
|
||||
{
|
||||
LOGGER.warn(levelWrapperMap.size() + " server levels haven't been freed!");
|
||||
levelWrapperMap.clear();
|
||||
}
|
||||
}
|
||||
private static final ConcurrentHashMap<ServerLevel, ServerLevelWrapper> LEVEL_WRAPPER_BY_SERVER_LEVEL = new ConcurrentHashMap<>();
|
||||
|
||||
final ServerLevel level;
|
||||
ServerBlockDetailMap blockMap = new ServerBlockDetailMap(this);
|
||||
|
||||
|
||||
|
||||
//==============//
|
||||
// constructors //
|
||||
//==============//
|
||||
|
||||
public static ServerLevelWrapper getWrapper(ServerLevel level) { return LEVEL_WRAPPER_BY_SERVER_LEVEL.computeIfAbsent(level, ServerLevelWrapper::new); }
|
||||
|
||||
public ServerLevelWrapper(ServerLevel level)
|
||||
{
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//=========//
|
||||
// methods //
|
||||
//=========//
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public IClientLevelWrapper tryGetClientLevelWrapper()
|
||||
@@ -109,18 +104,6 @@ public class ServerLevelWrapper implements IServerLevelWrapper
|
||||
@Override
|
||||
public EDhApiLevelType getLevelType() { return EDhApiLevelType.SERVER_LEVEL; }
|
||||
|
||||
@Override
|
||||
public int getBlockLight(int x, int y, int z)
|
||||
{
|
||||
return level.getBrightness(LightLayer.BLOCK, new BlockPos(x, y, z));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSkyLight(int x, int y, int z)
|
||||
{
|
||||
return level.getBrightness(LightLayer.SKY, new BlockPos(x, y, z));
|
||||
}
|
||||
|
||||
public ServerLevel getLevel()
|
||||
{
|
||||
return level;
|
||||
@@ -188,6 +171,9 @@ public class ServerLevelWrapper implements IServerLevelWrapper
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnload() { LEVEL_WRAPPER_BY_SERVER_LEVEL.remove(this.level); }
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
||||
+1
-1
Submodule coreSubProjects updated: 3113263012...f57c52b2d0
Reference in New Issue
Block a user