Fix server loading.
This commit is contained in:
+39
@@ -24,9 +24,11 @@ import java.io.File;
|
||||
import com.mojang.blaze3d.platform.Window;
|
||||
import com.seibel.distanthorizons.common.wrappers.gui.NativeDialogUtil;
|
||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.file.structure.ClientOnlySaveStructure;
|
||||
import com.seibel.distanthorizons.core.render.RenderThreadTaskHandler;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
@@ -43,9 +45,13 @@ import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.client.multiplayer.ServerData;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.util.profiling.ProfilerFiller;
|
||||
import net.minecraft.world.level.ChunkPos;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
#if MC_VER < MC_1_19_2
|
||||
@@ -62,6 +68,18 @@ import net.minecraft.client.GraphicsStatus;
|
||||
#else
|
||||
#endif
|
||||
|
||||
#if MC_VER <= MC_1_21_10
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
#else
|
||||
import net.minecraft.resources.Identifier;
|
||||
#endif
|
||||
|
||||
#if MC_VER > MC_1_19_2
|
||||
import net.minecraft.core.registries.Registries;
|
||||
#else
|
||||
import net.minecraft.core.Registry;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* A singleton that wraps the Minecraft object.
|
||||
*
|
||||
@@ -434,6 +452,27 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IServerLevelWrapper getWrappedServerLevel(String levelKey)
|
||||
{
|
||||
if (!hasSinglePlayerServer()) return null;
|
||||
#if MC_VER <= MC_1_21_10
|
||||
ResourceLocation levelID = ResourceLocation.tryParse(levelKey);
|
||||
#else
|
||||
Identifier levelID = Identifier.tryParse(levelKey);
|
||||
#endif
|
||||
if (levelID == null) return null;
|
||||
|
||||
#if MC_VER > MC_1_19_2
|
||||
ResourceKey<Level> resourceKey = ResourceKey.create(Registries.DIMENSION, levelID);
|
||||
#else
|
||||
ResourceKey<Level> resourceKey = ResourceKey.create(Registry.DIMENSION_REGISTRY, levelID);
|
||||
#endif
|
||||
|
||||
ServerLevel level = MINECRAFT.getSingleplayerServer().getLevel(resourceKey);
|
||||
return ServerLevelWrapper.getWrapper(level);
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
|
||||
|
||||
+37
@@ -1,9 +1,26 @@
|
||||
package com.seibel.distanthorizons.common.wrappers.minecraft;
|
||||
|
||||
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftSharedWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.dedicated.DedicatedServer;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.Level;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
#if MC_VER <= MC_1_21_10
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
#else
|
||||
import net.minecraft.resources.Identifier;
|
||||
#endif
|
||||
|
||||
#if MC_VER > MC_1_19_2
|
||||
import net.minecraft.core.registries.Registries;
|
||||
#else
|
||||
import net.minecraft.core.Registry;
|
||||
#endif
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class MinecraftServerWrapper implements IMinecraftSharedWrapper
|
||||
@@ -59,4 +76,24 @@ public class MinecraftServerWrapper implements IMinecraftSharedWrapper
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public IServerLevelWrapper getWrappedServerLevel(String levelKey)
|
||||
{
|
||||
#if MC_VER <= MC_1_21_10
|
||||
ResourceLocation levelID = ResourceLocation.tryParse(levelKey);
|
||||
#else
|
||||
Identifier levelID = Identifier.tryParse(levelKey);
|
||||
#endif
|
||||
if (levelID == null) return null;
|
||||
|
||||
#if MC_VER > MC_1_19_2
|
||||
ResourceKey<Level> resourceKey = ResourceKey.create(Registries.DIMENSION, levelID);
|
||||
#else
|
||||
ResourceKey<Level> resourceKey = ResourceKey.create(Registry.DIMENSION_REGISTRY, levelID);
|
||||
#endif
|
||||
|
||||
ServerLevel level = dedicatedServer.getLevel(resourceKey);
|
||||
return ServerLevelWrapper.getWrapper(level);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-1
@@ -2,12 +2,12 @@ package com.seibel.distanthorizons.common.wrappers.world;
|
||||
|
||||
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType;
|
||||
import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister;
|
||||
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiLevelUnloadEvent;
|
||||
import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper;
|
||||
import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper;
|
||||
import com.seibel.distanthorizons.common.wrappers.block.ClientBlockStateColorCache;
|
||||
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
||||
import com.seibel.distanthorizons.common.wrappers.level.KeyedClientLevelManager;
|
||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||
import com.seibel.distanthorizons.core.api.internal.SharedApi;
|
||||
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2;
|
||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||
@@ -23,6 +23,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IDimensionTypeWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.core.BlockPos;
|
||||
@@ -160,6 +161,7 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
||||
AbstractDhWorld world = SharedApi.getAbstractDhWorld();
|
||||
if (world != null) {
|
||||
world.unloadLevel(wrapper);
|
||||
ApiEventInjector.INSTANCE.fireAllEvents(DhApiLevelUnloadEvent.class, new DhApiLevelUnloadEvent.EventParam(wrapper));
|
||||
}
|
||||
if (wrapper.isDhLevelLoaded()) {
|
||||
wrapper.onUnload();
|
||||
|
||||
+1
-1
Submodule coreSubProjects updated: ef3e7763dc...da31547cfc
@@ -114,7 +114,7 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
|
||||
ServerLevelEvents.LOAD.register((server, level) ->
|
||||
#endif
|
||||
{
|
||||
SharedApi.getAbstractDhWorld().getOrLoadLevel(this.getServerLevelWrapper(level));
|
||||
ServerApi.INSTANCE.serverLevelLoadEvent(this.getServerLevelWrapper(level));
|
||||
});
|
||||
|
||||
// ServerLevelUnloadEvent
|
||||
@@ -124,7 +124,7 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
|
||||
ServerLevelEvents.UNLOAD.register((server, level) ->
|
||||
#endif
|
||||
{
|
||||
SharedApi.getAbstractDhWorld().unloadLevel(this.getServerLevelWrapper(level));
|
||||
ServerApi.INSTANCE.serverLevelUnloadEvent(this.getServerLevelWrapper(level));
|
||||
});
|
||||
|
||||
// ServerChunkLoadEvent
|
||||
|
||||
+3
@@ -63,6 +63,9 @@ public class MixinClientPacketListener
|
||||
|
||||
executor.execute(() ->
|
||||
{
|
||||
// When Immersive Portals is present we might load a chunk from another level.
|
||||
// This might cause LODs from another dimension to overwrite the LODs in the current dimension, which is generally undesirable.
|
||||
if (chunk.getLevel() != this.level) return;
|
||||
IClientLevelWrapper clientLevel = ClientLevelWrapper.getWrapper((ClientLevel) this.level);
|
||||
SharedApi.INSTANCE.applyChunkUpdate(new ChunkWrapper(chunk, clientLevel), clientLevel);
|
||||
});
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper;
|
||||
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
|
||||
import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment;
|
||||
import com.seibel.distanthorizons.core.api.internal.ServerApi;
|
||||
import com.seibel.distanthorizons.core.api.internal.SharedApi;
|
||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
@@ -88,7 +87,7 @@ public class NeoforgeServerProxy implements AbstractModInitializer.IEventProxy
|
||||
{
|
||||
if (GetEventLevel(event) instanceof ServerLevel)
|
||||
{
|
||||
SharedApi.getAbstractDhWorld().getOrLoadLevel(this.getServerLevelWrapper((ServerLevel) GetEventLevel(event)));
|
||||
this.serverApi.serverLevelLoadEvent(this.getServerLevelWrapper((ServerLevel) GetEventLevel(event)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +97,7 @@ public class NeoforgeServerProxy implements AbstractModInitializer.IEventProxy
|
||||
{
|
||||
if (GetEventLevel(event) instanceof ServerLevel)
|
||||
{
|
||||
SharedApi.getAbstractDhWorld().unloadLevel(this.getServerLevelWrapper((ServerLevel) GetEventLevel(event)));
|
||||
this.serverApi.serverLevelUnloadEvent(this.getServerLevelWrapper((ServerLevel) GetEventLevel(event)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user