Fix NPE applying camera keyframes when camera entity is not yet loaded
Still not sure when this can happen but users are reporting it: https://www.replaymod.com/forum/thread/2548#post10627
This commit is contained in:
@@ -3,6 +3,7 @@ package com.replaymod.pathing.properties;
|
|||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import com.replaymod.replay.ReplayHandler;
|
import com.replaymod.replay.ReplayHandler;
|
||||||
|
import com.replaymod.replay.camera.CameraEntity;
|
||||||
import com.replaymod.replaystudio.pathing.change.Change;
|
import com.replaymod.replaystudio.pathing.change.Change;
|
||||||
import com.replaymod.replaystudio.pathing.property.AbstractProperty;
|
import com.replaymod.replaystudio.pathing.property.AbstractProperty;
|
||||||
import com.replaymod.replaystudio.pathing.property.AbstractPropertyGroup;
|
import com.replaymod.replaystudio.pathing.property.AbstractPropertyGroup;
|
||||||
@@ -52,7 +53,10 @@ public class CameraProperties extends AbstractPropertyGroup {
|
|||||||
public void applyToGame(Triple<Double, Double, Double> value, @NonNull Object replayHandler) {
|
public void applyToGame(Triple<Double, Double, Double> value, @NonNull Object replayHandler) {
|
||||||
ReplayHandler handler = ((ReplayHandler) replayHandler);
|
ReplayHandler handler = ((ReplayHandler) replayHandler);
|
||||||
handler.spectateCamera();
|
handler.spectateCamera();
|
||||||
handler.getCameraEntity().setCameraPosition(value.getLeft(), value.getMiddle(), value.getRight());
|
CameraEntity cameraEntity = handler.getCameraEntity();
|
||||||
|
if (cameraEntity != null) {
|
||||||
|
cameraEntity.setCameraPosition(value.getLeft(), value.getMiddle(), value.getRight());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -90,7 +94,10 @@ public class CameraProperties extends AbstractPropertyGroup {
|
|||||||
public void applyToGame(Triple<Float, Float, Float> value, @NonNull Object replayHandler) {
|
public void applyToGame(Triple<Float, Float, Float> value, @NonNull Object replayHandler) {
|
||||||
ReplayHandler handler = ((ReplayHandler) replayHandler);
|
ReplayHandler handler = ((ReplayHandler) replayHandler);
|
||||||
handler.spectateCamera();
|
handler.spectateCamera();
|
||||||
handler.getCameraEntity().setCameraRotation(value.getLeft(), value.getMiddle(), value.getRight());
|
CameraEntity cameraEntity = handler.getCameraEntity();
|
||||||
|
if (cameraEntity != null) {
|
||||||
|
cameraEntity.setCameraRotation(value.getLeft(), value.getMiddle(), value.getRight());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.replaymod.pathing.properties;
|
|||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import com.replaymod.replay.ReplayHandler;
|
import com.replaymod.replay.ReplayHandler;
|
||||||
|
import com.replaymod.replay.camera.CameraEntity;
|
||||||
import com.replaymod.replaystudio.pathing.property.AbstractProperty;
|
import com.replaymod.replaystudio.pathing.property.AbstractProperty;
|
||||||
import com.replaymod.replaystudio.pathing.property.PropertyPart;
|
import com.replaymod.replaystudio.pathing.property.PropertyPart;
|
||||||
import com.replaymod.replaystudio.pathing.property.PropertyParts;
|
import com.replaymod.replaystudio.pathing.property.PropertyParts;
|
||||||
@@ -32,7 +33,9 @@ public class SpectatorProperty extends AbstractProperty<Integer> {
|
|||||||
@Override
|
@Override
|
||||||
public void applyToGame(Integer value, Object replayHandler) {
|
public void applyToGame(Integer value, Object replayHandler) {
|
||||||
ReplayHandler handler = ((ReplayHandler) replayHandler);
|
ReplayHandler handler = ((ReplayHandler) replayHandler);
|
||||||
World world = handler.getCameraEntity().getEntityWorld();
|
CameraEntity cameraEntity = handler.getCameraEntity();
|
||||||
|
if (cameraEntity == null) return;
|
||||||
|
World world = cameraEntity.getEntityWorld();
|
||||||
// Lookup entity by id, returns null if an entity with the id does not exists
|
// Lookup entity by id, returns null if an entity with the id does not exists
|
||||||
Entity target = world.getEntityById(value);
|
Entity target = world.getEntityById(value);
|
||||||
// Spectate entity, when called with null, returns to camera
|
// Spectate entity, when called with null, returns to camera
|
||||||
|
|||||||
Reference in New Issue
Block a user