Tweaked portal loading and fix portals not being detected to disable fading until entered at least once.
This commit is contained in:
+4
@@ -102,6 +102,7 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
||||
//==================//
|
||||
//region
|
||||
|
||||
@Override
|
||||
public synchronized void markRendered() {
|
||||
this.lastRenderTime = System.currentTimeMillis();
|
||||
}
|
||||
@@ -155,6 +156,9 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
||||
{
|
||||
LOGGER.debug("Unloading level " + wrapper.getDhIdentifier() + " due to inactivity");
|
||||
ClientApi.INSTANCE.clientLevelUnloadEvent(wrapper);
|
||||
if (wrapper.isDhLevelLoaded()) {
|
||||
wrapper.onUnload();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
Submodule coreSubProjects updated: 3d13ba7645...7fe0c9b0e8
@@ -116,7 +116,7 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti
|
||||
this.tryCreateModCompatAccessor("optifine", IOptifineAccessor.class, OptifineAccessor::new);
|
||||
this.tryCreateModCompatAccessor("bclib", IBCLibAccessor.class, BCLibAccessor::new);
|
||||
this.tryCreateModCompatAccessor("c2me", IC2meAccessor.class, C2meAccessor::new);
|
||||
this.tryCreateModCompatAccessor("imm_ptl_core", IImmersivePortalsAccessor.class, ImmersivePortalsAccessor::new);
|
||||
this.tryCreateModCompatAccessor("imm_ptl_core", IImmersivePortalsAccessor.class, ImmersivePortalsAccessorFabric::new);
|
||||
#if MC_VER >= MC_1_19_4
|
||||
// 1.19.4 is the lowest version Iris supports DH
|
||||
this.tryCreateModCompatAccessor("iris", IIrisAccessor.class, IrisAccessor::new);
|
||||
|
||||
-23
@@ -27,7 +27,6 @@ import com.mojang.math.Matrix4f;
|
||||
import org.lwjgl.opengl.GL32;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
#elif MC_VER < MC_1_21_6
|
||||
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import org.joml.Matrix4f;
|
||||
@@ -75,10 +74,7 @@ import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapp
|
||||
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||
import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector;
|
||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IImmersivePortalsAccessor;
|
||||
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.client.renderer.LevelRenderer;
|
||||
@@ -173,25 +169,6 @@ public class MixinLevelRenderer
|
||||
ClientApi.RENDER_STATE.partialTickTime = MinecraftRenderWrapper.INSTANCE.getPartialTickTime();
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
|
||||
|
||||
if (ClientApi.RENDER_STATE.clientLevelWrapper instanceof ClientLevelWrapper)
|
||||
{
|
||||
ClientLevelWrapper wrapper = (ClientLevelWrapper) ClientApi.RENDER_STATE.clientLevelWrapper;
|
||||
|
||||
// Apply Immersive Portals compatibility only when IP is detected
|
||||
if (ModAccessorInjector.INSTANCE.get(IImmersivePortalsAccessor.class) != null)
|
||||
{
|
||||
if (!wrapper.isDhLevelLoaded())
|
||||
{
|
||||
LOGGER.debug("IP detected - On-demand loading level " + wrapper.getDhIdentifier() + " during rendering");
|
||||
ClientApi.INSTANCE.clientLevelLoadEvent(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
wrapper.markRendered();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if MC_VER < MC_1_21_6
|
||||
if (renderType.equals(RenderType.translucent()))
|
||||
{
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.seibel.distanthorizons.fabric.wrappers.modAccessor;
|
||||
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ImmersivePortalsAbstractAccessor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.culling.Frustum;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ImmersivePortalsAccessorFabric extends ImmersivePortalsAbstractAccessor
|
||||
{
|
||||
@Override
|
||||
protected Object getClientLevel()
|
||||
{
|
||||
return Minecraft.getInstance().level;
|
||||
}
|
||||
@Override
|
||||
protected Class<?> getLevelClass()
|
||||
{
|
||||
return Level.class;
|
||||
}
|
||||
@Override
|
||||
protected Iterable<?> getEntitiesForRendering()
|
||||
{
|
||||
return Minecraft.getInstance().level.entitiesForRendering();
|
||||
}
|
||||
@Override
|
||||
protected Supplier<?> getFrustumSupplier()
|
||||
{
|
||||
return Suppliers.memoize(() -> {
|
||||
Frustum frustum = new Frustum(
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix.createJomlMatrix(),
|
||||
RenderSystem.getProjectionMatrix()
|
||||
);
|
||||
|
||||
Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition();
|
||||
frustum.prepare(cameraPos.x, cameraPos.y, cameraPos.z);
|
||||
|
||||
return frustum;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -134,29 +134,6 @@ public class ForgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
IClientLevelWrapper clientLevelWrapper = ClientLevelWrapper.getWrapper(clientLevel, true);
|
||||
ClientApi.INSTANCE.clientLevelLoadEvent(clientLevelWrapper);
|
||||
}
|
||||
@SubscribeEvent
|
||||
#if MC_VER < MC_1_19_2
|
||||
public void clientLevelUnloadEvent(WorldEvent.Unload event)
|
||||
#else
|
||||
public void clientLevelUnloadEvent(LevelEvent.Unload event)
|
||||
#endif
|
||||
{
|
||||
LOGGER.info("level unload");
|
||||
|
||||
#if MC_VER < MC_1_19_2
|
||||
LevelAccessor level = event.getWorld();
|
||||
#else
|
||||
LevelAccessor level = event.getLevel();
|
||||
#endif
|
||||
if (!(level instanceof ClientLevel))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ClientLevel clientLevel = (ClientLevel) level;
|
||||
IClientLevelWrapper clientLevelWrapper = ClientLevelWrapper.getWrapper(clientLevel);
|
||||
ClientApi.INSTANCE.clientLevelUnloadEvent(clientLevelWrapper);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSende
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.*;
|
||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||
|
||||
import com.seibel.distanthorizons.forge.wrappers.modAccessor.ImmersivePortalsAccessorForge;
|
||||
import com.seibel.distanthorizons.forge.wrappers.modAccessor.ModChecker;
|
||||
import com.seibel.distanthorizons.forge.wrappers.modAccessor.OptifineAccessor;
|
||||
import com.seibel.distanthorizons.forge.wrappers.modAccessor.OculusAccessor;
|
||||
@@ -102,7 +103,7 @@ public class ForgeMain extends AbstractModInitializer
|
||||
{
|
||||
this.tryCreateModCompatAccessor("optifine", IOptifineAccessor.class, OptifineAccessor::new);
|
||||
this.tryCreateModCompatAccessor("oculus", IIrisAccessor.class, OculusAccessor::new);
|
||||
this.tryCreateModCompatAccessor("imm_ptl_core", IImmersivePortalsAccessor.class, ImmersivePortalsAccessor::new);
|
||||
this.tryCreateModCompatAccessor("imm_ptl_core", IImmersivePortalsAccessor.class, ImmersivePortalsAccessorForge::new);
|
||||
|
||||
#if MC_VER < MC_1_17_1
|
||||
ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY,
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.seibel.distanthorizons.forge.wrappers.modAccessor;
|
||||
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ImmersivePortalsAbstractAccessor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.culling.Frustum;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ImmersivePortalsAccessorForge extends ImmersivePortalsAbstractAccessor
|
||||
{
|
||||
@Override
|
||||
protected Object getClientLevel()
|
||||
{
|
||||
return Minecraft.getInstance().level;
|
||||
}
|
||||
@Override
|
||||
protected Class<?> getLevelClass()
|
||||
{
|
||||
return Level.class;
|
||||
}
|
||||
@Override
|
||||
protected Iterable<?> getEntitiesForRendering()
|
||||
{
|
||||
return Minecraft.getInstance().level.entitiesForRendering();
|
||||
}
|
||||
@Override
|
||||
protected Supplier<?> getFrustumSupplier()
|
||||
{
|
||||
return Suppliers.memoize(() -> {
|
||||
Frustum frustum = new Frustum(
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix.createJomlMatrix(),
|
||||
RenderSystem.getProjectionMatrix()
|
||||
);
|
||||
|
||||
Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition();
|
||||
frustum.prepare(cameraPos.x, cameraPos.y, cameraPos.z);
|
||||
|
||||
return frustum;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -94,21 +94,6 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
IClientLevelWrapper clientLevelWrapper = ClientLevelWrapper.getWrapper(clientLevel, true);
|
||||
ClientApi.INSTANCE.clientLevelLoadEvent(clientLevelWrapper);
|
||||
}
|
||||
@SubscribeEvent
|
||||
public void clientLevelUnloadEvent(LevelEvent.Unload event)
|
||||
{
|
||||
LOGGER.info("level unload");
|
||||
|
||||
LevelAccessor level = event.getLevel();
|
||||
if (!(level instanceof ClientLevel))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ClientLevel clientLevel = (ClientLevel) level;
|
||||
IClientLevelWrapper clientLevelWrapper = ClientLevelWrapper.getWrapper(clientLevel);
|
||||
ClientApi.INSTANCE.clientLevelUnloadEvent(clientLevelWrapper);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -241,21 +226,6 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
// handled via the same mixin as fabric for consistency
|
||||
#endif
|
||||
|
||||
if (ClientApi.RENDER_STATE.clientLevelWrapper instanceof ClientLevelWrapper)
|
||||
{
|
||||
ClientLevelWrapper wrapper = (ClientLevelWrapper) ClientApi.RENDER_STATE.clientLevelWrapper;
|
||||
if (ModAccessorInjector.INSTANCE.get(IImmersivePortalsAccessor.class) != null)
|
||||
{
|
||||
if (!wrapper.isDhLevelLoaded())
|
||||
{
|
||||
LOGGER.debug("IP detected - On-demand loading level " + wrapper.getDhIdentifier() + " during rendering");
|
||||
ClientApi.INSTANCE.clientLevelLoadEvent(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
wrapper.markRendered();
|
||||
}
|
||||
|
||||
ClientApi.INSTANCE.renderFadeOpaque();
|
||||
}
|
||||
|
||||
@@ -270,21 +240,6 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
#else
|
||||
// handled via the same mixin as fabric for consistency
|
||||
#endif
|
||||
|
||||
if (ClientApi.RENDER_STATE.clientLevelWrapper instanceof ClientLevelWrapper)
|
||||
{
|
||||
ClientLevelWrapper wrapper = (ClientLevelWrapper) ClientApi.RENDER_STATE.clientLevelWrapper;
|
||||
if (ModAccessorInjector.INSTANCE.get(IImmersivePortalsAccessor.class) != null)
|
||||
{
|
||||
if (!wrapper.isDhLevelLoaded())
|
||||
{
|
||||
LOGGER.debug("IP detected - On-demand loading level " + wrapper.getDhIdentifier() + " during rendering");
|
||||
ClientApi.INSTANCE.clientLevelLoadEvent(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
wrapper.markRendered();
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -298,21 +253,6 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
// handled via the same mixin as fabric for consistency
|
||||
#endif
|
||||
|
||||
if (ClientApi.RENDER_STATE.clientLevelWrapper instanceof ClientLevelWrapper)
|
||||
{
|
||||
ClientLevelWrapper wrapper = (ClientLevelWrapper) ClientApi.RENDER_STATE.clientLevelWrapper;
|
||||
if (ModAccessorInjector.INSTANCE.get(IImmersivePortalsAccessor.class) != null)
|
||||
{
|
||||
if (!wrapper.isDhLevelLoaded())
|
||||
{
|
||||
LOGGER.debug("IP detected - On-demand loading level " + wrapper.getDhIdentifier() + " during rendering");
|
||||
ClientApi.INSTANCE.clientLevelLoadEvent(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
wrapper.markRendered();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// should generally only need to be set once per game session
|
||||
|
||||
Reference in New Issue
Block a user