Add spectating

This commit is contained in:
johni0702
2015-11-08 12:38:42 +01:00
parent 14941c15bb
commit b490531511
4 changed files with 61 additions and 16 deletions

View File

@@ -3,6 +3,7 @@ package com.replaymod.replay;
import com.google.common.base.Preconditions;
import com.mojang.authlib.GameProfile;
import com.replaymod.replay.camera.CameraEntity;
import com.replaymod.replay.camera.SpectatorCameraController;
import com.replaymod.replay.events.ReplayCloseEvent;
import com.replaymod.replay.events.ReplayOpenEvent;
import com.replaymod.replay.gui.overlay.GuiReplayOverlay;
@@ -208,6 +209,12 @@ public class ReplayHandler {
spectating = e.getUniqueID();
}
if (e == cameraEntity) {
cameraEntity.setCameraController(ReplayModReplay.instance.createCameraController(cameraEntity));
} else {
cameraEntity.setCameraController(new SpectatorCameraController(cameraEntity));
}
if (mc.getRenderViewEntity() != e) {
mc.setRenderViewEntity(e);
cameraEntity.setCameraPosRot(e);

View File

@@ -11,6 +11,9 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItemFrame;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.stats.StatFileWriter;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
@@ -214,9 +217,22 @@ public class CameraEntity extends EntityPlayerSP {
long timePassed = now - lastControllerUpdate;
cameraController.update(timePassed / 50f);
lastControllerUpdate = now;
if (mc.gameSettings.keyBindAttack.isPressed() || mc.gameSettings.keyBindUseItem.isPressed()) {
if (canSpectate(mc.pointedEntity)) {
ReplayModReplay.instance.getReplayHandler().spectateEntity(mc.pointedEntity);
// Make sure we don't exit right away
mc.gameSettings.keyBindSneak.pressTime = 0;
}
}
}
}
public boolean canSpectate(Entity e) {
return e != null && !e.isInvisible()
&& (e instanceof EntityPlayer || e instanceof EntityLiving || e instanceof EntityItemFrame);
}
@SubscribeEvent
public void onSettingsChanged(SettingsChangedEvent event) {
if (event.getKey() == Setting.CAMERA) {

View File

@@ -0,0 +1,38 @@
package com.replaymod.replay.camera;
import com.replaymod.replay.ReplayModReplay;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import java.util.Arrays;
@RequiredArgsConstructor
public class SpectatorCameraController implements CameraController {
private final CameraEntity camera;
@Override
public void update(float partialTicksPassed) {
Minecraft mc = Minecraft.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)) {
binding.pressTime = 0;
}
}
@Override
public void increaseSpeed() {
}
@Override
public void decreaseSpeed() {
}
}

View File

@@ -1,16 +0,0 @@
package eu.crushedpixel.replaymod.events.handlers;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItemFrame;
import net.minecraft.entity.player.EntityPlayer;
public class SpectatingHandler {
private static Minecraft mc = Minecraft.getMinecraft();
public static boolean canSpectate(Entity e) {
return ((e instanceof EntityPlayer || e instanceof EntityLiving || e instanceof EntityItemFrame) && e != mc.thePlayer && !e.isInvisible());
}
}