Files
ReplayModCinematic/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java
2019-05-06 22:46:21 +02:00

88 lines
3.1 KiB
Java

package com.replaymod.replay.camera;
import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replay.mixin.EntityPlayerAccessor;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
//#if MC>=11400
//$$ import net.minecraft.entity.EquipmentSlot;
//#endif
//#if MC>=11300
//#else
//$$ import org.lwjgl.input.Mouse;
//#endif
import java.util.Arrays;
import static com.replaymod.core.versions.MCVer.*;
@RequiredArgsConstructor
public class SpectatorCameraController implements CameraController {
private final CameraEntity camera;
@Override
public void update(float partialTicksPassed) {
Minecraft mc = getMinecraft();
if (mc.gameSettings.keyBindSneak.isPressed()) {
ReplayModReplay.instance.getReplayHandler().spectateCamera();
}
// Soak up all remaining key presses
for (KeyBinding binding : Arrays.asList(mc.gameSettings.keyBindAttack, mc.gameSettings.keyBindUseItem,
mc.gameSettings.keyBindJump, mc.gameSettings.keyBindSneak, mc.gameSettings.keyBindForward,
mc.gameSettings.keyBindBack, mc.gameSettings.keyBindLeft, mc.gameSettings.keyBindRight)) {
//noinspection StatementWithEmptyBody
while (binding.isPressed());
}
// Prevent mouse movement
//#if MC>=11300
// No longer needed
//#else
//$$ Mouse.updateCursor();
//#endif
// Always make sure the camera is in the exact same spot as the spectated entity
// This is necessary as some rendering code for the hand doesn't respect the view entity
// and always uses mc.thePlayer
Entity view = getRenderViewEntity(mc);
if (view != null && view != camera) {
camera.setCameraPosRot(getRenderViewEntity(mc));
// If it's a player, also 'steal' its inventory so the rendering code knows what item to render
if (view instanceof EntityPlayer) {
EntityPlayer viewPlayer = (EntityPlayer) view;
//#if MC>=11400
//$$ camera.setEquippedStack(EquipmentSlot.HEAD, viewPlayer.getEquippedStack(EquipmentSlot.HEAD));
//#else
camera.inventory = viewPlayer.inventory;
//#endif
EntityPlayerAccessor cameraA = (EntityPlayerAccessor) camera;
EntityPlayerAccessor viewPlayerA = (EntityPlayerAccessor) camera;
//#if MC>=10904
cameraA.setItemStackMainHand(viewPlayerA.getItemStackMainHand());
camera.swingingHand = viewPlayer.swingingHand;
cameraA.setActiveItemStackUseCount(viewPlayerA.getActiveItemStackUseCount());
//#else
//$$ cameraA.setItemInUse(viewPlayerA.getItemInUse());
//$$ cameraA.setItemInUseCount(viewPlayerA.getItemInUseCount());
//#endif
}
}
}
@Override
public void increaseSpeed() {
}
@Override
public void decreaseSpeed() {
}
}