2022-12-08 20:53:30 +00:00
|
|
|
package com.minelittlepony.client;
|
|
|
|
|
2023-09-25 21:07:09 +01:00
|
|
|
import com.minelittlepony.api.pony.Pony;
|
2022-12-08 20:53:30 +00:00
|
|
|
import com.minelittlepony.api.pony.PonyPosture;
|
|
|
|
import com.minelittlepony.client.transform.PonyTransformation;
|
|
|
|
|
|
|
|
import net.minecraft.client.MinecraftClient;
|
|
|
|
import net.minecraft.entity.Entity;
|
|
|
|
import net.minecraft.entity.LivingEntity;
|
|
|
|
import net.minecraft.util.math.Box;
|
|
|
|
import net.minecraft.util.math.MathHelper;
|
|
|
|
import net.minecraft.util.math.Vec3d;
|
|
|
|
|
|
|
|
public class PonyBounds {
|
|
|
|
public static Vec3d getAbsoluteRidingOffset(LivingEntity entity) {
|
|
|
|
return PonyPosture.getMountPony(entity).map(ridingPony -> {
|
|
|
|
LivingEntity vehicle = (LivingEntity)entity.getVehicle();
|
|
|
|
|
2023-09-25 21:07:09 +01:00
|
|
|
Vec3d offset = PonyTransformation.forSize(ridingPony.size()).getRiderOffset();
|
2023-09-25 02:55:43 +01:00
|
|
|
float scale = ridingPony.metadata().size().scaleFactor();
|
2022-12-08 20:53:30 +00:00
|
|
|
|
|
|
|
return getAbsoluteRidingOffset(vehicle).add(
|
|
|
|
0,
|
|
|
|
offset.y - vehicle.getHeight() * 1 / scale,
|
|
|
|
0
|
|
|
|
);
|
|
|
|
}).orElseGet(() -> getBaseRidingOffset(entity));
|
|
|
|
}
|
|
|
|
|
|
|
|
private static Vec3d getBaseRidingOffset(LivingEntity entity) {
|
|
|
|
float delta = MinecraftClient.getInstance().getTickDelta();
|
|
|
|
|
|
|
|
Entity vehicle = entity.getVehicle();
|
2023-09-25 01:41:43 +01:00
|
|
|
double vehicleOffset = vehicle == null ? 0 : vehicle.getHeight();
|
2022-12-08 20:53:30 +00:00
|
|
|
|
|
|
|
return new Vec3d(
|
|
|
|
MathHelper.lerp(delta, entity.prevX, entity.getX()),
|
|
|
|
MathHelper.lerp(delta, entity.prevY, entity.getY()) + vehicleOffset,
|
|
|
|
MathHelper.lerp(delta, entity.prevZ, entity.getZ())
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2023-09-25 21:07:09 +01:00
|
|
|
public static Box getBoundingBox(Pony pony, LivingEntity entity) {
|
|
|
|
final float scale = pony.size().scaleFactor() + 0.1F;
|
2022-12-08 20:53:30 +00:00
|
|
|
final float width = entity.getWidth() * scale;
|
|
|
|
final float height = entity.getHeight() * scale;
|
|
|
|
|
|
|
|
return new Box(-width, height, -width, width, 0, width).offset(getAbsoluteRidingOffset(entity));
|
|
|
|
}
|
|
|
|
}
|