[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.
This commit is contained in:
t00thpick1 2014-01-21 22:50:15 -05:00 committed by Nate Mortensen
parent 1fa4b69bd8
commit b4c4c8ed78

View File

@ -1,8 +1,9 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityFireball;
import net.minecraft.server.EntityLiving;
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;
@ -49,7 +50,14 @@ public class CraftFireball extends AbstractProjectile implements Fireball {
}
public void setDirection(Vector direction) {
getHandle().setDirection(direction.getX(), direction.getY(), direction.getZ());
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