Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / craftbukkit / entity / CraftArrow.java
@vlad20012 vlad20012 on 24 Feb 2017 2 KB initial
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
}