package com.replaymod.replay.mixin; import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.camera.CameraEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.PlayerControllerMP; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.stats.StatisticsManager; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PlayerControllerMP.class) public abstract class MixinPlayerControllerMP { @Shadow private Minecraft mc; @Shadow private NetHandlerPlayClient connection; @Inject(method = "createClientPlayer", at=@At("HEAD"), cancellable = true) private void replayModReplay_createReplayCamera(World worldIn, StatisticsManager statisticsManager, CallbackInfoReturnable ci) { if (ReplayModReplay.instance.getReplayHandler() != null) { ci.setReturnValue(new CameraEntity(mc, worldIn, connection, statisticsManager)); ci.cancel(); } } @Inject(method = "isSpectator", at=@At("HEAD"), cancellable = true) private void replayModReplay_isSpectator(CallbackInfoReturnable ci) { if (mc.thePlayer instanceof CameraEntity) { // this check should in theory not be required ci.setReturnValue(mc.thePlayer.isSpectator()); } } }