diff --git a/src/main/java/com/replaymod/replay/mixin/MixinGameRenderer.java b/src/main/java/com/replaymod/replay/mixin/MixinGameRenderer.java new file mode 100644 index 00000000..a89c0aeb --- /dev/null +++ b/src/main/java/com/replaymod/replay/mixin/MixinGameRenderer.java @@ -0,0 +1,36 @@ +//#if MC>=11300 +package com.replaymod.replay.mixin; + +import com.replaymod.replay.camera.CameraEntity; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.world.GameMode; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(GameRenderer.class) +public abstract class MixinGameRenderer { + @Accessor + abstract MinecraftClient getClient(); + + @Redirect( + method = "renderHand", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;getCurrentGameMode()Lnet/minecraft/world/GameMode;" + ) + ) + private GameMode getGameMode(ClientPlayerInteractionManager interactionManager) { + ClientPlayerEntity camera = getClient().player; + if (camera instanceof CameraEntity) { + // alternative doesn't really matter, the caller only checks for equality to SPECTATOR + return camera.isSpectator() ? GameMode.SPECTATOR : GameMode.SURVIVAL; + } + return interactionManager.getCurrentGameMode(); + } +} +//#endif diff --git a/src/main/resources/mixins.replay.replaymod.json b/src/main/resources/mixins.replay.replaymod.json index 7abe6540..730a73be 100644 --- a/src/main/resources/mixins.replay.replaymod.json +++ b/src/main/resources/mixins.replay.replaymod.json @@ -9,7 +9,9 @@ "MixinInGameHud", //#endif "EntityLivingBaseAccessor", - //#if MC<11300 + //#if MC>=11300 + "MixinGameRenderer", + //#else //$$ "EntityOtherPlayerMPAccessor", //#endif "EntityPlayerAccessor", diff --git a/versions/1.14.1/mapping.txt b/versions/1.14.1/mapping.txt index 6ce18c53..4ee17d80 100644 --- a/versions/1.14.1/mapping.txt +++ b/versions/1.14.1/mapping.txt @@ -85,6 +85,7 @@ net.minecraft.client.network.ClientPlayerInteractionManager net.minecraft.client net.minecraft.client.network.ClientPlayerInteractionManager client mc net.minecraft.client.network.ClientPlayerInteractionManager networkHandler connection net.minecraft.client.network.ClientPlayerInteractionManager isFlyingLocked() isSpectatorMode() +net.minecraft.client.network.ClientPlayerInteractionManager getCurrentGameMode() getCurrentGameType() com.mojang.blaze3d.platform.GLX net.minecraft.client.renderer.OpenGlHelper com.mojang.blaze3d.platform.GLX isUsingFBOs() isFramebufferEnabled() net.minecraft.entity.data.TrackedData net.minecraft.network.datasync.DataParameter