t00thpick1 b4c4c8ed78 [Bleeding] Directly set direction in EntityFireball. Fixes BUKKIT-1154
Because EntityFireball.setDirection() adds a random offset to passed
parameters, it is not appropriate for use in an API method. As such,
the values need to be directly set to remain accurate.
2014-01-30 21:47:44 -07:00

90 lines
2.4 KiB
Java

package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityFireball;
import net.minecraft.server.MathHelper;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.LivingEntity;
import org.bukkit.projectiles.ProjectileSource;
import org.bukkit.util.Vector;
public class CraftFireball extends AbstractProjectile implements Fireball {
public CraftFireball(CraftServer server, EntityFireball entity) {
super(server, entity);
}
public float getYield() {
return getHandle().bukkitYield;
}
public boolean isIncendiary() {
return getHandle().isIncendiary;
}
public void setIsIncendiary(boolean isIncendiary) {
getHandle().isIncendiary = isIncendiary;
}
public void setYield(float yield) {
getHandle().bukkitYield = yield;
}
public ProjectileSource getShooter() {
return getHandle().projectileSource;
}
public void setShooter(ProjectileSource shooter) {
if (shooter instanceof CraftLivingEntity) {
getHandle().shooter = ((CraftLivingEntity) shooter).getHandle();
} else {
getHandle().shooter = null;
}
getHandle().projectileSource = shooter;
}
public Vector getDirection() {
return new Vector(getHandle().dirX, getHandle().dirY, getHandle().dirZ);
}
public void setDirection(Vector direction) {
Validate.notNull(direction, "Direction can not be null");
double x = direction.getX();
double y = direction.getY();
double z = direction.getZ();
double magnitude = (double) MathHelper.sqrt(x * x + y * y + z * z);
getHandle().dirX = x / magnitude;
getHandle().dirY = y / magnitude;
getHandle().dirZ = z / magnitude;
}
@Override
public EntityFireball getHandle() {
return (EntityFireball) entity;
}
@Override
public String toString() {
return "CraftFireball";
}
public EntityType getType() {
return EntityType.UNKNOWN;
}
@Deprecated
public void _INVALID_setShooter(LivingEntity shooter) {
setShooter(shooter);
}
@Deprecated
public LivingEntity _INVALID_getShooter() {
if (getHandle().shooter != null) {
return (LivingEntity) getHandle().shooter.getBukkitEntity();
}
return null;
}
}