From 2d444ab0bfd58973de9a662ca6fd5b300702e44a Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 31 Oct 2023 00:31:38 +1030 Subject: [PATCH] Fixed Alex's Caves compat --- .../fabric/mixins/client/MixinLightmap.java | 15 ++++++++------- .../forge/mixins/client/MixinLightmap.java | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java index e6d886dee..ca6b1d90e 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLightmap.java @@ -8,6 +8,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftCli import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.texture.DynamicTexture; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -15,24 +16,24 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(LightTexture.class) +@Mixin(DynamicTexture.class) public class MixinLightmap { @Shadow @Final - private NativeImage lightPixels; + private NativeImage pixels; - @Inject(method = "updateLightTexture", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/renderer/texture/DynamicTexture;upload()V")) - public void updateLightTexture(float f, CallbackInfo ci) + @Inject(method = "Lnet/minecraft/client/renderer/texture/DynamicTexture;upload()V", at = @At("HEAD"), cancellable = true) + public void updateLightTexture(CallbackInfo ci) { // since the light map is always updated on the client render thread we should be able to access the client level at the same time IMinecraftClientWrapper mc = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); + if (mc.getWrappedClientLevel() == null) + return; IClientLevelWrapper clientLevel = mc.getWrappedClientLevel(); //ApiShared.LOGGER.info("Lightmap update"); - MinecraftRenderWrapper.INSTANCE.updateLightmap(this.lightPixels, clientLevel); + MinecraftRenderWrapper.INSTANCE.updateLightmap(this.pixels, clientLevel); } } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java index c2b2bb9d4..6bd666c41 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLightmap.java @@ -8,6 +8,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftCli import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.texture.DynamicTexture; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -15,24 +16,24 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(LightTexture.class) +@Mixin(DynamicTexture.class) public class MixinLightmap { @Shadow @Final - private NativeImage lightPixels; + private NativeImage pixels; - @Inject(method = "updateLightTexture", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/renderer/texture/DynamicTexture;upload()V")) - public void updateLightTexture(float f, CallbackInfo ci) + @Inject(method = "Lnet/minecraft/client/renderer/texture/DynamicTexture;upload()V", at = @At("HEAD"), cancellable = true) + public void updateLightTexture(CallbackInfo ci) { // since the light map is always updated on the client render thread we should be able to access the client level at the same time IMinecraftClientWrapper mc = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); + if (mc.getWrappedClientLevel() == null) + return; IClientLevelWrapper clientLevel = mc.getWrappedClientLevel(); //ApiShared.LOGGER.info("Lightmap update"); - MinecraftRenderWrapper.INSTANCE.updateLightmap(this.lightPixels, clientLevel); + MinecraftRenderWrapper.INSTANCE.updateLightmap(this.pixels, clientLevel); } }