superb-warfare/src/main/java/com/atsuishio/superbwarfare/tools/CameraTool.java

33 lines
1.4 KiB
Java

package com.atsuishio.superbwarfare.tools;
import net.minecraft.client.Minecraft;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import org.joml.Matrix4f;
import org.joml.Vector4f;
public class CameraTool {
public static Vec3 getMaxZoom(Matrix4f transform, Vector4f maxCameraPos) {
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
Vector4f vehiclePos = transformPosition(transform, 0, 0, 0);
Vec3 maxCameraPosVec3 = new Vec3(maxCameraPos.x, maxCameraPos.y, maxCameraPos.z);
Vec3 vehiclePosVec3 = new Vec3(vehiclePos.x, vehiclePos.y, vehiclePos.z);
Vec3 toVec = vehiclePosVec3.vectorTo(maxCameraPosVec3);
if (player != null) {
HitResult hitresult = player.level().clip(new ClipContext(vehiclePosVec3, vehiclePosVec3.add(toVec).add(toVec.normalize().scale(1)), ClipContext.Block.VISUAL, ClipContext.Fluid.NONE, player));
if (hitresult.getType() == HitResult.Type.BLOCK) {
return hitresult.getLocation().add(toVec.normalize().scale(-1));
}
}
return maxCameraPosVec3;
}
public static Vector4f transformPosition(Matrix4f transform, float x, float y, float z) {
return transform.transform(new Vector4f(x, y, z, 1));
}
}