diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java index 29522508d..49886cc55 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java @@ -1,7 +1,7 @@ package com.seibel.distanthorizons.common.wrappers.world; import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType; -import com.seibel.distanthorizons.api.interfaces.world.IDhApiDimensionTypeWrapper; +import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister; import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper; import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper; @@ -9,6 +9,8 @@ import com.seibel.distanthorizons.common.wrappers.block.cache.ClientBlockDetailM import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.level.ClientLevelModule; +import com.seibel.distanthorizons.core.level.DhClientLevel; import com.seibel.distanthorizons.core.level.IKeyedClientLevelManager; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhBlockPos; @@ -49,6 +51,7 @@ public class ClientLevelWrapper implements IClientLevelWrapper private BlockStateWrapper dirtBlockWrapper; private BiomeWrapper plainsBiomeWrapper; + private DhClientLevel parentClientLevel; @@ -229,7 +232,49 @@ public class ClientLevelWrapper implements IClientLevelWrapper public ClientLevel getWrappedMcObject() { return this.level; } @Override - public void onUnload() { LEVEL_WRAPPER_BY_CLIENT_LEVEL.remove(this.level); } + public void onUnload() + { + LEVEL_WRAPPER_BY_CLIENT_LEVEL.remove(this.level); + this.parentClientLevel = null; + } + + + + //===================// + // generic rendering // + //===================// + + @Override + public void setParentClientLevel(DhClientLevel parentClientLevel) { this.parentClientLevel = parentClientLevel; } + + @Override + public IDhApiCustomRenderRegister getRenderRegister() + { + if (this.parentClientLevel == null) + { + return null; + } + + ClientLevelModule clientLevelModule = this.parentClientLevel.clientside; + if (clientLevelModule == null) + { + return null; + } + + ClientLevelModule.ClientRenderState renderState = clientLevelModule.ClientRenderStateRef.get(); + if (renderState == null) + { + return null; + } + + return renderState.genericRenderer; + } + + + + //================// + // base overrides // + //================// @Override public String toString() diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java index 29eadb18e..3a9f13f5d 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ServerLevelWrapper.java @@ -23,6 +23,7 @@ import java.io.File; import java.util.concurrent.ConcurrentHashMap; import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType; +import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister; import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper; import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper; @@ -141,6 +142,7 @@ public class ServerLevelWrapper implements IServerLevelWrapper return level.getMinBuildHeight(); #endif } + @Override public IChunkWrapper tryGetChunk(DhChunkPos pos) { @@ -180,9 +182,18 @@ public class ServerLevelWrapper implements IServerLevelWrapper public void onUnload() { LEVEL_WRAPPER_BY_SERVER_LEVEL.remove(this.level); } @Override - public String toString() + public IDhApiCustomRenderRegister getRenderRegister() { - return "Wrapped{" + level.toString() + "@" + getDimensionType().getDimensionName() + "}"; + // custom rendering isn't supported on the server-side + return null; } + + //================// + // base overrides // + //================// + + @Override + public String toString() { return "Wrapped{" + this.level.toString() + "@" + this.getDimensionType().getDimensionName() + "}"; } + } diff --git a/coreSubProjects b/coreSubProjects index ae72e627c..88db5c959 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit ae72e627c598ca11f5f588f1ffc8aaa2be88f9e7 +Subproject commit 88db5c95947593d21187ea98a3a7cf88884c9c64