Mineplex/GOD DAMN COSMETICS/gadget/gadgets/mount/Mount.java
Daniel Waggner 38a20f98c2 Removed Files
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.
2021-05-23 18:13:37 -07:00

244 lines
5.4 KiB
Java

package mineplex.core.gadget.gadgets.mount;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.types.Gadget;
import mineplex.core.gadget.types.GadgetType;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public abstract class Mount<T extends MountData> extends Gadget
{
protected final Map<Player, T> _active = new HashMap<>();
protected boolean BouncyCollisions = false;
public Mount(GadgetManager manager, String name, String[] description, int cost, Material material, byte displayData)
{
super(manager, GadgetType.MOUNT, name, description, cost, material, displayData);
}
@Override
public void enableCustom(Player player, boolean message)
{
player.leaveVehicle();
player.eject();
Manager.removeGadgetType(player, getGadgetType(), this);
T data = spawnMount(player);
_active.put(player, data);
for (Entity entity : data.getEntityParts())
{
UtilEnt.addFlag(entity, UtilEnt.FLAG_ENTITY_COMPONENT);
}
if (message)
{
UtilPlayer.message(player, F.main(Manager.getName(), "You spawned " + F.elem(getName()) + "."));
}
}
@Override
public void disableCustom(Player player, boolean message)
{
Manager.removeActive(player, this);
MountData data = _active.remove(player);
for (Entity entity : data.getEntityParts())
{
entity.remove();
}
if (message)
{
UtilPlayer.message(player, F.main(Manager.getName(), "You despawned " + F.elem(getName()) + "."));
}
}
@Override
public boolean isActive(Player player)
{
return _active.containsKey(player);
}
public abstract T spawnMount(Player player);
@EventHandler
public void updateBounce(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK || !BouncyCollisions)
{
return;
}
//Collide
for (T data : getActiveMounts().values())
{
List<Entity> parts = data.getEntityParts();
if (parts == null || parts.isEmpty())
{
continue;
}
Entity head = parts.get(0);
if (head == null || !(head.getPassenger() instanceof Player))
{
continue;
}
Player player = (Player) head.getPassenger();
if (!Recharge.Instance.usable(player, getName() + " Collide"))
{
continue;
}
for (T otherData : getActiveMounts().values())
{
List<Entity> otherParts = otherData.getEntityParts();
if (otherParts == null || otherParts.isEmpty())
{
continue;
}
Entity otherHead = otherParts.get(0);
if (otherHead.equals(head) || otherHead.getPassenger() == null || !(otherHead.getPassenger() instanceof Player))
{
continue;
}
Player otherPlayer = (Player) otherHead.getPassenger();
if (!Recharge.Instance.usable(otherPlayer, getName() + " Collide"))
{
continue;
}
//Collide
if (UtilMath.offsetSquared(head, otherHead) > 4)
{
continue;
}
Recharge.Instance.useForce(player, getName() + " Collide", 500);
Recharge.Instance.useForce(otherPlayer, getName() + " Collide", 500);
Vector direction = UtilAlg.getTrajectory(otherHead, head);
for (Entity part : parts)
{
UtilAction.velocity(part, direction, 1.2, false, 0, 0.8, 10, true);
}
direction.setX(-direction.getX());
direction.setZ(-direction.getZ());
for (Entity part : otherParts)
{
UtilAction.velocity(part, direction, 1.2, false, 0, 0.8, 10, true);
}
otherHead.getWorld().playSound(otherHead.getLocation(), Sound.SLIME_WALK, 1f, 0.75f);
}
}
}
@EventHandler
public void interactMount(PlayerInteractEntityEvent event)
{
Player player = event.getPlayer();
Entity clicked = event.getRightClicked();
T data = getMountData(clicked);
if (data == null)
{
return;
}
event.setCancelled(true);
List<Entity> parts = data.getEntityParts();
boolean first = true;
for (Entity entity : parts)
{
if (entity.equals(clicked) && shouldRide(player, data, first))
{
player.leaveVehicle();
player.eject();
setPassenger(player, clicked, event);
return;
}
first = false;
}
player.sendMessage(F.main(Manager.getName(), "This is not your mount!"));
}
@EventHandler(priority = EventPriority.LOWEST)
public void target(EntityDamageEvent event)
{
for (T data : _active.values())
{
if (data.isPartOfMount(event.getEntity()))
{
event.setCancelled(true);
}
}
}
protected boolean shouldRide(Player player, T data, boolean head)
{
return data.ownsMount(player);
}
protected void setPassenger(Player player, Entity clicked, PlayerInteractEntityEvent event)
{
clicked.setPassenger(player);
}
protected T getMountData(Entity ent)
{
for (T data : getActiveMounts().values())
{
if (data.isPartOfMount(ent))
{
return data;
}
}
return null;
}
public final Map<Player, T> getActiveMounts()
{
return _active;
}
}