Mineplex/GOD DAMN COSMETICS/gadget/gadgets/morph/moba/MorphBiff.java

176 lines
5.5 KiB
Java
Raw Normal View History

package mineplex.core.gadget.gadgets.morph.moba;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import com.mojang.authlib.GameProfile;
import mineplex.core.common.skin.SkinData;
import mineplex.core.common.util.C;
import mineplex.core.common.util.LineFormat;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilText;
import mineplex.core.disguise.disguises.DisguisePlayer;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.gadgets.morph.managers.UtilMorph;
import mineplex.core.gadget.types.MorphGadget;
import mineplex.core.itemstack.ItemBuilder;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.utils.UtilGameProfile;
public class MorphBiff extends MorphGadget
{
private static final ItemStack ACTIVE_ITEM = new ItemBuilder(Material.NETHER_STAR)
.setTitle(C.cGreenB + "Biff's Cavalry Charge")
.addLore("Click to fire out a beam of water that knocks back", "players that it hits.")
.build();
private static final int ACTIVE_SLOT = 2;
private static final ItemStack HORSE_ARMOUR = new ItemStack(Material.IRON_BARDING);
private static final ItemStack SADDLE = new ItemStack(Material.SADDLE);
private static final int MAX_TICKS = 6 * 20;
private final Map<Player, Horse> _horses = new HashMap<>();
public MorphBiff(GadgetManager manager)
{
super(manager, "Biff Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "REEEEEEEEEEEEEEEE",
"",
C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Nether Star" + C.cWhite + " to",
C.cWhite + "mount your " + C.cYellow + "Horse" + C.cWhite + " and",
C.cWhite + "knock back nearby players."
}, LineFormat.LORE), -20, Material.GLASS, (byte) 0);
setDisplayItem(SkinData.BIFF.getSkull());
}
@Override
public void enableCustom(Player player, boolean message)
{
applyArmor(player, message);
GameProfile gameProfile = UtilGameProfile.getGameProfile(player);
gameProfile.getProperties().clear();
gameProfile.getProperties().put("textures", SkinData.BIFF.getProperty());
DisguisePlayer disguisePlayer = new DisguisePlayer(player, gameProfile);
disguisePlayer.showInTabList(true, 0);
UtilMorph.disguise(player, disguisePlayer, Manager);
player.getInventory().setItem(ACTIVE_SLOT, ACTIVE_ITEM);
}
@Override
public void disableCustom(Player player, boolean message)
{
removeArmor(player);
UtilMorph.undisguise(player, Manager.getDisguiseManager());
player.getInventory().setItem(ACTIVE_SLOT, null);
}
@EventHandler
public void interact(PlayerInteractEvent event)
{
if (event.getAction() == Action.PHYSICAL)
{
return;
}
Player player = event.getPlayer();
ItemStack itemStack = event.getItem();
if (!isActive(player) || itemStack == null || !itemStack.equals(ACTIVE_ITEM))
{
return;
}
event.setCancelled(true);
if (!Manager.selectLocation(this, player.getLocation()))
{
Manager.informNoUse(player);
return;
}
if (!Recharge.Instance.use(player, "Cavalry Charge", 30000,true, true, "Cosmetics"))
{
return;
}
Manager.getPetManager().getCreatureModule().SetForce(true);
Horse horse = player.getWorld().spawn(player.getLocation(), Horse.class);
UtilParticle.PlayParticleToAll(ParticleType.CLOUD, horse.getLocation().add(0, 1, 0), 1, 1, 1, 0.1F, 50, ViewDist.NORMAL);
horse.getWorld().strikeLightningEffect(horse.getLocation());
horse.getWorld().playSound(horse.getLocation(), Sound.HORSE_DEATH, 1, 1.1F);
horse.setHealth(20);
horse.setMaxHealth(horse.getHealth());
horse.setJumpStrength(1);
horse.setMaxDomestication(1);
horse.setDomestication(horse.getMaxDomestication());
horse.getInventory().setArmor(HORSE_ARMOUR);
horse.getInventory().setSaddle(SADDLE);
horse.setOwner(player);
horse.setPassenger(player);
_horses.put(player, horse);
Manager.getPetManager().getCreatureModule().SetForce(false);
}
@EventHandler
public void updateHorses(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
_horses.keySet().removeIf(player ->
{
Horse horse = _horses.get(player);
if (horse.getTicksLived() > MAX_TICKS)
{
horse.getWorld().playSound(horse.getLocation(), Sound.HORSE_BREATHE, 1, 1.1F);
UtilParticle.PlayParticleToAll(ParticleType.CLOUD, horse.getLocation().add(0, 1, 0), 0.5F, 0.5F, 0.5F, 0.1F, 50, ViewDist.LONG);
horse.remove();
return true;
}
for (Player nearby : UtilPlayer.getNearby(horse.getLocation(), 3))
{
if (player.equals(nearby) || !Recharge.Instance.use(player, getName() + player.getUniqueId(), 1500, false, false, "Cosmetics"))
{
continue;
}
nearby.getWorld().playSound(nearby.getLocation(), Sound.IRONGOLEM_THROW, 1, 0.6F);
UtilParticle.PlayParticleToAll(ParticleType.CLOUD, nearby.getLocation().add(0, 1, 0), 0.5F, 0.5F, 0.5F, 0.1F, 10, ViewDist.LONG);
UtilAction.velocity(nearby, UtilAlg.getTrajectory(horse, nearby).multiply(1.5).setY(0.8));
}
return false;
});
}
}