38a20f98c2
These two directories contain code that was removed from the src and dependencies of the compiled files. They were removed due to being either a. unnecessary or b. a royal pain in my booty.
232 lines
6.9 KiB
Java
232 lines
6.9 KiB
Java
package mineplex.core.gadget.gadgets.morph;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.bukkit.Color;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.Sound;
|
|
import org.bukkit.entity.EntityType;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.entity.Skeleton;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
import org.bukkit.event.player.PlayerToggleSneakEvent;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
|
import org.bukkit.util.Vector;
|
|
|
|
import mineplex.core.common.shape.ShapeWings;
|
|
import mineplex.core.common.util.C;
|
|
import mineplex.core.common.util.LineFormat;
|
|
import mineplex.core.common.util.UtilAction;
|
|
import mineplex.core.common.util.UtilEnt;
|
|
import mineplex.core.common.util.UtilParticle;
|
|
import mineplex.core.common.util.UtilPlayer;
|
|
import mineplex.core.common.util.UtilText;
|
|
import mineplex.core.common.util.UtilTextBottom;
|
|
import mineplex.core.common.util.UtilTime;
|
|
import mineplex.core.disguise.disguises.DisguiseSkeleton;
|
|
import mineplex.core.gadget.GadgetManager;
|
|
import mineplex.core.gadget.gadgets.morph.managers.SoulManager;
|
|
import mineplex.core.gadget.gadgets.morph.managers.UtilMorph;
|
|
import mineplex.core.gadget.types.MorphGadget;
|
|
import mineplex.core.updater.UpdateType;
|
|
import mineplex.core.updater.event.UpdateEvent;
|
|
|
|
public class MorphGrimReaper extends MorphGadget
|
|
{
|
|
|
|
private final Map<Player, Long> _flying = new HashMap<>();
|
|
private final List<Player> _flyReady = new ArrayList<>();
|
|
|
|
private final SoulManager _soulManager;
|
|
private ItemStack _hoe;
|
|
|
|
private static final int FLY_DELAY = 15000;
|
|
|
|
private final ShapeWings _wings = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.2,0.2,0.2), 1, 0, false, ShapeWings.DEFAULT_ROTATION, ShapeWings.SMALL_ANGEL_WING_PATTERN);
|
|
private final ShapeWings _wingsEdge = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.1,0.1,0.1), 1, 0, true, ShapeWings.DEFAULT_ROTATION, ShapeWings.SMALL_ANGEL_WING_PATTERN);
|
|
|
|
public MorphGrimReaper(GadgetManager manager)
|
|
{
|
|
super(manager, "Grim Reaper Morph", UtilText.splitLinesToArray(new String[]{
|
|
C.cGray + "The Grim Reaper is the collector of souls.",
|
|
"",
|
|
C.cWhite + "Right Click a player with Grim Reaper Scythe to steal their soul"
|
|
}, LineFormat.LORE), -9,
|
|
Material.WOOD_HOE, (byte) 0);
|
|
_soulManager = manager.getSoulManager();
|
|
createHoe();
|
|
}
|
|
|
|
private void createHoe()
|
|
{
|
|
ItemStack hoe = new ItemStack(Material.WOOD_HOE);
|
|
ItemMeta meta = hoe.getItemMeta();
|
|
meta.setDisplayName(C.cGreen + "Grim Reaper Scythe");
|
|
meta.setLore(UtilText.splitLines(new String[]{C.cWhite + "Right Click a player to steal their soul!",
|
|
C.cWhite + "Cooldown of 10 seconds."}, LineFormat.LORE));
|
|
hoe.setItemMeta(meta);
|
|
_hoe = hoe;
|
|
}
|
|
|
|
@Override
|
|
public void enableCustom(Player player, boolean message)
|
|
{
|
|
this.applyArmor(player, message);
|
|
|
|
ItemStack blackChest = new ItemStack(Material.LEATHER_CHESTPLATE),
|
|
blackPants = new ItemStack(Material.LEATHER_LEGGINGS), blackBoots = new ItemStack(Material.LEATHER_BOOTS);
|
|
LeatherArmorMeta chestMeta = (LeatherArmorMeta) blackChest.getItemMeta(),
|
|
pantsMeta = (LeatherArmorMeta) blackPants.getItemMeta(), bootsMeta = (LeatherArmorMeta) blackBoots.getItemMeta();
|
|
chestMeta.setColor(Color.BLACK);
|
|
pantsMeta.setColor(Color.BLACK);
|
|
bootsMeta.setColor(Color.BLACK);
|
|
blackChest.setItemMeta(chestMeta);
|
|
blackPants.setItemMeta(pantsMeta);
|
|
blackBoots.setItemMeta(bootsMeta);
|
|
|
|
player.getInventory().setItem(2, _hoe);
|
|
DisguiseSkeleton skeleton = new DisguiseSkeleton(player);
|
|
skeleton.SetSkeletonType(Skeleton.SkeletonType.WITHER);
|
|
skeleton.setChestplate(blackChest);
|
|
skeleton.setLeggings(blackPants);
|
|
skeleton.setBoots(blackBoots);
|
|
UtilMorph.disguise(player, skeleton, Manager.getDisguiseManager());
|
|
}
|
|
|
|
@Override
|
|
public void disableCustom(Player player, boolean message)
|
|
{
|
|
this.removeArmor(player);
|
|
player.setFlying(false);
|
|
player.setAllowFlight(false);
|
|
_flying.remove(player);
|
|
_flyReady.remove(player);
|
|
_soulManager.resetSouls(player);
|
|
UtilMorph.undisguise(player, Manager.getDisguiseManager());
|
|
player.getInventory().setItem(2, new ItemStack(Material.AIR));
|
|
}
|
|
|
|
@EventHandler
|
|
public void stealSoul(PlayerInteractEntityEvent event)
|
|
{
|
|
if (event.getRightClicked().getType() != EntityType.PLAYER)
|
|
return;
|
|
|
|
if (_flyReady.contains(event.getPlayer()))
|
|
return;
|
|
|
|
Player player = event.getPlayer();
|
|
|
|
if (!player.getItemInHand().equals(_hoe))
|
|
return;
|
|
|
|
Player clicked = (Player) event.getRightClicked();
|
|
boolean stolen = _soulManager.stealSoul(player, clicked);
|
|
if (stolen)
|
|
{
|
|
player.playSound(player.getLocation(), Sound.WITHER_DEATH, 1f, 1f);
|
|
UtilTextBottom.displayProgress("Grim Reaper Fly", _soulManager.checkSouls(player) + "/20 souls", 20, _soulManager.checkSouls(player), player);
|
|
if (_soulManager.checkSouls(player) == 20)
|
|
{
|
|
_flyReady.add(player);
|
|
UtilTextBottom.displayProgress("Grim Reaper Fly", 100, "Sneak to fly!", player);
|
|
}
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void sneak(PlayerToggleSneakEvent event)
|
|
{
|
|
if (!isActive(event.getPlayer()))
|
|
return;
|
|
|
|
if (!event.isSneaking())
|
|
return;
|
|
|
|
Player player = event.getPlayer();
|
|
|
|
if (_soulManager.checkSouls(player) == 20)
|
|
{
|
|
setFlying(player, true, true);
|
|
_flying.put(player, System.currentTimeMillis());
|
|
_soulManager.resetSouls(player);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onUpdate(UpdateEvent event)
|
|
{
|
|
_soulManager.giveSoul();
|
|
List<Player> stopFlying = new ArrayList<>();
|
|
for (Player player : _flying.keySet())
|
|
{
|
|
if (UtilTime.elapsed(_flying.get(player), FLY_DELAY))
|
|
{
|
|
stopFlying.add(player);
|
|
setFlying(player, false, event.getType()==UpdateType.FAST);
|
|
}
|
|
else
|
|
{
|
|
setFlying(player, true, event.getType()==UpdateType.FAST);
|
|
}
|
|
}
|
|
|
|
stopFlying.forEach(_flying::remove);
|
|
|
|
if (event.getType() != UpdateType.SEC)
|
|
return;
|
|
|
|
for (Player player : _flyReady)
|
|
{
|
|
UtilTextBottom.displayProgress("Grim Reaper Fly", 100, "Sneak to fly!", player);
|
|
}
|
|
}
|
|
|
|
private void setFlying(Player player, boolean flying, boolean isFast)
|
|
{
|
|
if (flying && isActive(player))
|
|
{
|
|
if (UtilPlayer.isSpectator(player))
|
|
return;
|
|
|
|
player.setAllowFlight(true);
|
|
player.setFlying(true);
|
|
|
|
_flyReady.remove(player);
|
|
|
|
if (UtilEnt.isGrounded(player))
|
|
UtilAction.velocity(player, new Vector(0,1,0));
|
|
|
|
Location loc = player.getLocation().add(0, 1.2, 0).add(player.getLocation().getDirection().multiply(-0.2));
|
|
if (isFast)
|
|
{
|
|
_wings.display(loc);
|
|
_wingsEdge.display(loc);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
player.setAllowFlight(false);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Removes the blindness effect for that player when they leave
|
|
* @param event
|
|
*/
|
|
@EventHandler
|
|
public void onQuit(PlayerQuitEvent event)
|
|
{
|
|
_soulManager.giveSoul(event.getPlayer());
|
|
}
|
|
|
|
}
|