Unicopia/src/main/java/com/minelittlepony/unicopia/projectile/ProjectileUtil.java

56 lines
1.9 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia.projectile;
2018-09-12 01:29:49 +02:00
2019-02-01 00:07:19 +01:00
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.mixin.MixinPersistentProjectileEntity;
2018-09-12 01:29:49 +02:00
import net.minecraft.entity.Entity;
2020-01-16 12:35:46 +01:00
import net.minecraft.entity.projectile.ProjectileEntity;
2019-02-01 00:07:19 +01:00
import net.minecraft.util.math.Vec3d;
2018-09-12 01:29:49 +02:00
public interface ProjectileUtil {
2018-09-12 01:29:49 +02:00
/**
* Checks if the given entity is a projectile.
*/
static boolean isProjectile(Entity e) {
2020-06-26 11:44:47 +02:00
return e instanceof ProjectileEntity;
}
/**
* Checks if the given entity is a projectile that is not stuck in the ground.
*/
static boolean isFlyingProjectile(Entity e) {
return isProjectile(e) && !(e instanceof MixinPersistentProjectileEntity && ((MixinPersistentProjectileEntity)e).isInGround());
}
/**
* Checks if the given projectile was thrown by the given entity
*/
static <T extends Entity> boolean isProjectileThrownBy(Entity throwable, @Nullable T e) {
2020-06-26 11:44:47 +02:00
return e != null && isProjectile(throwable) && e.equals(((ProjectileEntity) throwable).getOwner());
}
/**
2019-02-01 00:07:19 +01:00
* Sets the velocity and heading for a projectile.
*
* @param throwable The projectile
* @param heading The directional heaving vector
* @param velocity Velocity
* @param inaccuracy Inaccuracy
* @return True the projectile's heading was set, false otherwise
*/
static void setThrowableHeading(Entity throwable, Vec3d heading, float velocity, float inaccuracy) {
2019-02-01 00:07:19 +01:00
2020-06-26 11:44:47 +02:00
if (throwable instanceof ProjectileEntity) {
((ProjectileEntity)throwable).setVelocity(heading.x, heading.y, heading.z, velocity, inaccuracy);
} else {
2020-01-16 12:35:46 +01:00
heading = heading.normalize().multiply(velocity);
Vec3d vel = throwable.getVelocity();
2019-02-01 00:07:19 +01:00
2020-01-16 12:35:46 +01:00
throwable.addVelocity(heading.x - vel.x, heading.y - vel.y, heading.z - vel.z);
}
}
2018-09-12 01:29:49 +02:00
}