package org.bukkit.craftbukkit.entity; import net.minecraft.entity.projectile.EntityArrow; import org.apache.commons.lang.Validate; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.projectiles.ProjectileSource; import org.ultramine.mods.bukkit.interfaces.entity.IMixinEntity; import org.ultramine.mods.bukkit.interfaces.entity.projectile.IMixinEntityArrow; public class CraftArrow extends AbstractProjectile implements Arrow { public CraftArrow(CraftServer server, EntityArrow entity) { super(server, entity); } public void setKnockbackStrength(int knockbackStrength) { Validate.isTrue(knockbackStrength >= 0, "Knockback cannot be negative"); getHandle().setKnockbackStrength(knockbackStrength); } public int getKnockbackStrength() { return ((IMixinEntityArrow) getHandle()).getKnockbackStrength(); } public boolean isCritical() { return getHandle().getIsCritical(); } public void setCritical(boolean critical) { getHandle().setIsCritical(critical); } public ProjectileSource getShooter() { return ((IMixinEntity) getHandle()).getProjectileSource(); } public void setShooter(ProjectileSource shooter) { if(shooter instanceof LivingEntity) { getHandle().shootingEntity = ((CraftLivingEntity) shooter).getHandle(); } else { getHandle().shootingEntity = null; } ((IMixinEntity) getHandle()).setProjectileSource(shooter); } @Override public EntityArrow getHandle() { return (EntityArrow) entity; } @Override public String toString() { return "CraftArrow"; } public EntityType getType() { return EntityType.ARROW; } @Deprecated public LivingEntity _INVALID_getShooter() { if(getHandle().shootingEntity == null) { return null; } return (LivingEntity) ((IMixinEntity) getHandle().shootingEntity).getBukkitEntity(); } @Deprecated public void _INVALID_setShooter(LivingEntity shooter) { getHandle().shootingEntity = ((CraftLivingEntity) shooter).getHandle(); } // Spigot start private final Arrow.Spigot spigot = new Arrow.Spigot() { @Override public double getDamage() { return getHandle().getDamage(); } @Override public void setDamage(double damage) { getHandle().setDamage(damage); } }; public Arrow.Spigot spigot() { return spigot; } // Spigot end }