106 lines
3.2 KiB
Java
106 lines
3.2 KiB
Java
|
package mineplex.core.gadget.gadgets.item;
|
||
|
|
||
|
import org.bukkit.EntityEffect;
|
||
|
import org.bukkit.Material;
|
||
|
import org.bukkit.Sound;
|
||
|
import org.bukkit.block.Block;
|
||
|
import org.bukkit.entity.Item;
|
||
|
import org.bukkit.entity.LivingEntity;
|
||
|
import org.bukkit.entity.Player;
|
||
|
|
||
|
import mineplex.core.common.util.C;
|
||
|
import mineplex.core.common.util.F;
|
||
|
import mineplex.core.common.util.LineFormat;
|
||
|
import mineplex.core.common.util.UtilAction;
|
||
|
import mineplex.core.common.util.UtilAlg;
|
||
|
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||
|
import mineplex.core.common.util.UtilPlayer;
|
||
|
import mineplex.core.common.util.UtilText;
|
||
|
import mineplex.core.gadget.GadgetManager;
|
||
|
import mineplex.core.gadget.gadgets.Ammo;
|
||
|
import mineplex.core.gadget.types.ItemGadget;
|
||
|
import mineplex.core.itemstack.ItemStackFactory;
|
||
|
import mineplex.core.mission.MissionTrackerType;
|
||
|
import mineplex.core.projectile.IThrown;
|
||
|
import mineplex.core.projectile.ProjectileUser;
|
||
|
import mineplex.core.updater.UpdateType;
|
||
|
|
||
|
public class ItemFleshHook extends ItemGadget implements IThrown
|
||
|
{
|
||
|
public ItemFleshHook(GadgetManager manager)
|
||
|
{
|
||
|
super(manager, "Flesh Hook",
|
||
|
UtilText.splitLineToArray(C.cWhite + "Make new friends by throwing a hook into their face and pulling them towards you!", LineFormat.LORE),
|
||
|
-1,
|
||
|
Material.getMaterial(131), (byte)0,
|
||
|
2000, new Ammo("Flesh Hook", "50 Flesh Hooks", Material.getMaterial(131), (byte)0, new String[] { C.cWhite + "50 Flesh Hooks for you to use!" }, 1000, 50));
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void ActivateCustom(Player player)
|
||
|
{
|
||
|
//Action
|
||
|
Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), ItemStackFactory.Instance.CreateStack(131));
|
||
|
UtilAction.velocity(item, player.getLocation().getDirection(),
|
||
|
1.6, false, 0, 0.2, 10, false);
|
||
|
|
||
|
Manager.getProjectileManager().AddThrow(item, player, this, -1, true, true, true, true,
|
||
|
Sound.FIRE_IGNITE, 1.4f, 0.8f, ParticleType.CRIT, null, 0, UpdateType.TICK, 0.5f);
|
||
|
|
||
|
//Inform
|
||
|
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(getName()) + "."));
|
||
|
|
||
|
//Effect
|
||
|
item.getWorld().playSound(item.getLocation(), Sound.IRONGOLEM_THROW, 2f, 0.8f);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||
|
{
|
||
|
data.getThrown().remove();
|
||
|
|
||
|
if (!(data.getThrower() instanceof Player))
|
||
|
return;
|
||
|
|
||
|
Player player = (Player)data.getThrower();
|
||
|
|
||
|
if (target == null || !Manager.selectEntity(this, target))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (Manager.getCastleManager().isInsideCastle(target.getLocation()))
|
||
|
return;
|
||
|
|
||
|
//Pull
|
||
|
UtilAction.velocity(target,
|
||
|
UtilAlg.getTrajectory(target.getLocation(), player.getLocation()),
|
||
|
3, false, 0, 0.8, 1.5, true);
|
||
|
|
||
|
//Effect
|
||
|
target.playEffect(EntityEffect.HURT);
|
||
|
|
||
|
//Inform
|
||
|
UtilPlayer.message(target, F.main("Skill", F.name(player.getName()) + " hit you with " + F.skill(getName()) + "."));
|
||
|
|
||
|
Manager.getMissionManager().incrementProgress(player, 1, MissionTrackerType.LOBBY_FLESH_HOOK, null, null);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void Idle(ProjectileUser data)
|
||
|
{
|
||
|
data.getThrown().remove();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void Expire(ProjectileUser data)
|
||
|
{
|
||
|
data.getThrown().remove();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void ChunkUnload(ProjectileUser data)
|
||
|
{
|
||
|
data.getThrown().remove();
|
||
|
}
|
||
|
}
|