Implemented new mount data system replacing instead of entities as data.

+ Removed some unnecessary code
+ Made StackManager use new mount system

This system also fixes a bug allowing players "hijack" some of the
mounts as it was not properly persistent.
This commit is contained in:
xGamingDudex 2015-11-29 19:08:00 +01:00
parent 327bf8d09b
commit 509835ea64
14 changed files with 213 additions and 163 deletions

View File

@ -1,7 +1,7 @@
package mineplex.core.mount;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -13,12 +13,14 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class DragonData
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
public class DragonData extends MountData
{
DragonMount Host;
public EnderDragon Dragon;
public Player Rider;
public Entity TargetEntity = null;
@ -31,9 +33,8 @@ public class DragonData
public DragonData(DragonMount dragonMount, Player rider)
{
Host = dragonMount;
Rider = rider;
super(rider);
Host = dragonMount;
Velocity = rider.getLocation().getDirection().setY(0).normalize();
Pitch = UtilAlg.GetPitch(rider.getLocation().getDirection());
@ -51,25 +52,34 @@ public class DragonData
Chicken = rider.getWorld().spawn(rider.getLocation(), Chicken.class);
Dragon.setPassenger(Chicken);
Chicken.setPassenger(Rider);
Chicken.setPassenger(getOwner());
Bukkit.getServer().getScheduler().runTaskLater(Host.Manager.getPlugin(), new Runnable()
{
public void run()
{
Chicken.setPassenger(Rider);
Chicken.setPassenger(getOwner());
}
}, 10L);
}
public void Move()
{
Rider.eject();
getOwner().eject();
((CraftEnderDragon)Dragon).getHandle().setTargetBlock(GetTarget().getBlockX(), GetTarget().getBlockY(), GetTarget().getBlockZ());
}
public Location GetTarget()
{
return Rider.getLocation().add(Rider.getLocation().getDirection().multiply(40));
return getOwner().getLocation().add(getOwner().getLocation().getDirection().multiply(40));
}
@Override
public List<Entity> getEntityParts()
{
List<Entity> list = new ArrayList<Entity>();
list.add(Dragon);
list.add(Chicken);
return list;
}
}

View File

@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.disguise.disguises.DisguiseChicken;
public class DragonMount extends Mount<DragonData>
{

View File

@ -22,7 +22,7 @@ import org.bukkit.entity.Horse.Style;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
public class HorseMount extends Mount<Horse>
public class HorseMount extends Mount<SingleEntityMountData<Horse>>
{
protected Color _color;
protected Style _style;
@ -53,7 +53,7 @@ public class HorseMount extends Mount<Horse>
while (activeIterator.hasNext())
{
Player player = activeIterator.next();
Horse horse = _active.get(player);
Horse horse = _active.get(player).getEntity();
//Invalid (dead)
if (!horse.isValid())
@ -113,15 +113,16 @@ public class HorseMount extends Mount<Horse>
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + "."));
//Store
_active.put(player, horse);
SingleEntityMountData<Horse> mount = new SingleEntityMountData<Horse>(player, horse);
_active.put(player, mount);
}
public void Disable(Player player)
{
Horse horse = _active.remove(player);
if (horse != null)
SingleEntityMountData<Horse> mount = _active.remove(player);
if (mount != null)
{
horse.remove();
mount.remove();
//Inform
UtilPlayer.message(player, F.main("Mount", "You despawned " + F.elem(GetName()) + "."));

View File

@ -5,6 +5,7 @@ import java.util.HashSet;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -18,7 +19,7 @@ import mineplex.core.common.util.UtilServer;
import mineplex.core.mount.event.MountActivateEvent;
import mineplex.core.shop.item.SalesPackageBase;
public abstract class Mount<T> extends SalesPackageBase implements Listener
public abstract class Mount<T extends MountData> extends SalesPackageBase implements Listener
{
protected HashSet<Player> _owners = new HashSet<Player>();
protected HashMap<Player, T> _active = new HashMap<Player, T>();
@ -97,4 +98,13 @@ public abstract class Mount<T> extends SalesPackageBase implements Listener
{
return _owners.contains(player);
}
public T getMountData(Entity ent)
{
for(T data : GetActive().values())
{
if(data.isPartOfMount(ent)) return data;
}
return null;
}
}

View File

@ -3,6 +3,17 @@ package mineplex.core.mount;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.blockrestore.BlockRestore;
@ -22,17 +33,6 @@ import mineplex.core.mount.types.MountTitan;
import mineplex.core.mount.types.MountUndead;
import mineplex.core.mount.types.MountZombie;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class MountManager extends MiniPlugin
{
private CoreClientManager _clientManager;
@ -84,32 +84,30 @@ public class MountManager extends MiniPlugin
}
@EventHandler
public void HorseInteract(PlayerInteractEntityEvent event)
public void mountInteract(PlayerInteractAtEntityEvent event)
{
MountData mount = getMountData(event.getRightClicked());
if(mount == null) return;
if(mount.ownsMount(event.getPlayer())) return;
event.setCancelled(true);
}
@EventHandler
public void mountInteract(PlayerInteractEntityEvent event)
{
if (!(event.getRightClicked() instanceof Horse))
return;
MountData mount = getMountData(event.getRightClicked());
boolean found = false;
for (Mount mount : _playerActiveMountMap.values())
{
if (mount.GetActive().containsValue(event.getRightClicked()))
{
found = true;
break;
}
}
if(mount == null) return;
if (!found)
return;
Player player = event.getPlayer();
Horse horse = (Horse)event.getRightClicked();
if(mount.ownsMount(event.getPlayer())) return;
UtilPlayer.message(event.getPlayer(), F.main("Mount", "This is not your Mount!"));
event.setCancelled(true);
if (horse.getOwner() == null || !horse.getOwner().equals(player))
{
UtilPlayer.message(player, F.main("Mount", "This is not your Mount!"));
event.setCancelled(true);
}
}
@EventHandler
@ -178,16 +176,28 @@ public class MountManager extends MiniPlugin
{
return _disguiseManager;
}
public boolean isMount(Entity ent)
public MountData getMountData(Entity ent)
{
for (Mount<?> mount : _playerActiveMountMap.values())
{
if (mount.GetActive().values().contains(ent))
{
return true;
}
MountData data = mount.getMountData(ent);
if(data != null) return data;
}
return false;
return null;
}
public Mount<?> getMount(Entity ent)
{
for (Mount<?> mount : _playerActiveMountMap.values())
{
if(mount.getMountData(ent) != null) return mount;
}
return null;
}
public boolean isMount(Entity ent)
{
return getMount(ent) != null;
}
}

View File

@ -1,5 +1,6 @@
package mineplex.core.mount.types;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
@ -18,23 +19,12 @@ import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.mount.Mount;
import mineplex.core.mount.MountManager;
import mineplex.core.mount.SingleEntityMountData;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecart;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.vehicle.VehicleDamageEvent;
public class MountCart extends Mount<Minecart>
public class MountCart extends Mount<SingleEntityMountData<Minecart>>
{
public MountCart(MountManager manager)
{
@ -56,7 +46,7 @@ public class MountCart extends Mount<Minecart>
//Remove other mounts
Manager.DeregisterAll(player);
Minecart mount = player.getWorld().spawn(player.getLocation().add(0, 2, 0), Minecart.class);
SingleEntityMountData<Minecart> mount = new SingleEntityMountData<Minecart>(player, player.getWorld().spawn(player.getLocation().add(0, 2, 0), Minecart.class));
//Inform
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + "."));
@ -67,7 +57,7 @@ public class MountCart extends Mount<Minecart>
public void Disable(Player player)
{
Minecart mount = _active.remove(player);
SingleEntityMountData<Minecart> mount = _active.remove(player);
if (mount != null)
{
mount.remove();
@ -85,14 +75,11 @@ public class MountCart extends Mount<Minecart>
if (event.getRightClicked() == null)
return;
if (!GetActive().containsKey(event.getPlayer()))
return;
SingleEntityMountData<Minecart> mount = GetActive().get(event.getPlayer());
if (!GetActive().get(event.getPlayer()).equals(event.getRightClicked()))
{
UtilPlayer.message(event.getPlayer(), F.main("Mount", "This is not your Mount!"));
return;
}
if(mount == null) return;
if(!mount.ownsMount(event.getPlayer())) return;
event.getPlayer().leaveVehicle();
event.getPlayer().eject();
@ -117,8 +104,10 @@ public class MountCart extends Mount<Minecart>
return;
//Bounce
for (Minecart cart : GetActive().values())
for (SingleEntityMountData<Minecart> cartData : GetActive().values())
{
Minecart cart = cartData.getEntity();
if (cart.getPassenger() == null)
continue;
@ -137,8 +126,10 @@ public class MountCart extends Mount<Minecart>
}
//Collide
for (Minecart cart : GetActive().values())
for (SingleEntityMountData<Minecart> cartData : GetActive().values())
{
Minecart cart = cartData.getEntity();
if (cart.getPassenger() == null)
continue;
@ -150,8 +141,9 @@ public class MountCart extends Mount<Minecart>
if (!Recharge.Instance.usable(player, GetName() + " Collide"))
continue;
for (Minecart other : GetActive().values())
for (SingleEntityMountData<Minecart> otherData : GetActive().values())
{
Minecart other = otherData.getEntity();
if (other.equals(cart))
continue;

View File

@ -9,11 +9,11 @@ import org.bukkit.event.EventHandler;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.mount.HorseMount;
import mineplex.core.mount.MountManager;
import mineplex.core.mount.SingleEntityMountData;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
@ -38,10 +38,12 @@ public class MountFrost extends HorseMount
public void Trail(UpdateEvent event)
{
if (event.getType() == UpdateType.TICK)
for (Horse horse : GetActive().values())
UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, horse.getLocation().add(0, 1, 0),
0.25f, 0.25f, 0.25f, 0.1f, 4,
ViewDist.NORMAL, UtilServer.getPlayers());
for (SingleEntityMountData<Horse> horseData : GetActive().values())
{
Horse horse = horseData.getEntity();
UtilParticle.PlayParticleToAll(ParticleType.SNOW_SHOVEL, horse.getLocation().add(0, 1, 0),
0.25f, 0.25f, 0.25f, 0.1f, 4, ViewDist.NORMAL);
}
}
// @EventHandler

View File

@ -5,19 +5,19 @@ import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Horse.Color;
import org.bukkit.entity.Player;
import org.bukkit.entity.Horse.Style;
import org.bukkit.entity.Horse.Variant;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.disguise.disguises.DisguiseBase;
import mineplex.core.disguise.disguises.DisguisePig;
import mineplex.core.disguise.disguises.DisguiseSheep;
import mineplex.core.mount.HorseMount;
import mineplex.core.mount.MountManager;
import mineplex.core.mount.SingleEntityMountData;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
@ -45,6 +45,7 @@ public class MountSheep extends HorseMount
Manager.DeregisterAll(player);
Horse horse = player.getWorld().spawn(player.getLocation(), Horse.class);
SingleEntityMountData<Horse> mount = new SingleEntityMountData<Horse>(player, horse);
horse.setOwner(player);
horse.setMaxDomestication(1);
@ -59,7 +60,7 @@ public class MountSheep extends HorseMount
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + "."));
//Store
_active.put(player, horse);
_active.put(player, mount);
}
@EventHandler
@ -68,8 +69,10 @@ public class MountSheep extends HorseMount
if (event.getType() != UpdateType.TICK)
return;
for (Horse horse : GetActive().values())
for (SingleEntityMountData<Horse> horseData : GetActive().values())
{
Horse horse = horseData.getEntity();
DisguiseBase base = Manager.getDisguiseManager().getDisguise(horse);
if (base == null || !(base instanceof DisguiseSheep))
continue;

View File

@ -9,6 +9,7 @@ import org.bukkit.entity.Slime;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
@ -18,11 +19,12 @@ import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.mount.Mount;
import mineplex.core.mount.MountManager;
import mineplex.core.mount.SingleEntityMountData;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public class MountSlime extends Mount<Slime>
public class MountSlime extends Mount<SingleEntityMountData<Slime>>
{
public MountSlime(MountManager manager)
{
@ -44,10 +46,10 @@ public class MountSlime extends Mount<Slime>
//Remove other mounts
Manager.DeregisterAll(player);
Slime mount = player.getWorld().spawn(player.getLocation(), Slime.class);
mount.setSize(2);
SingleEntityMountData<Slime> mount = new SingleEntityMountData<Slime>(player, player.getWorld().spawn(player.getLocation(), Slime.class));
mount.getEntity().setSize(2);
mount.setCustomName(player.getName() + "'s " + GetName());
mount.getEntity().setCustomName(player.getName() + "'s " + GetName());
//Inform
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + "."));
@ -58,7 +60,7 @@ public class MountSlime extends Mount<Slime>
public void Disable(Player player)
{
Slime mount = _active.remove(player);
SingleEntityMountData<Slime> mount = _active.remove(player);
if (mount != null)
{
mount.remove();
@ -79,11 +81,8 @@ public class MountSlime extends Mount<Slime>
if (!GetActive().containsKey(event.getPlayer()))
return;
if (!GetActive().get(event.getPlayer()).equals(event.getRightClicked()))
{
UtilPlayer.message(event.getPlayer(), F.main("Mount", "This is not your Mount!"));
if(!GetActive().get(event.getPlayer()).ownsMount(event.getPlayer()))
return;
}
event.getPlayer().leaveVehicle();
event.getPlayer().eject();
@ -108,10 +107,15 @@ public class MountSlime extends Mount<Slime>
return;
//Bounce
for (Slime slime : GetActive().values())
for (SingleEntityMountData<Slime> slimeData : GetActive().values())
{
Slime slime = slimeData.getEntity();
if (slime.getPassenger() == null)
{
UtilEnt.setFakeHead(slime, false);
continue;
}
if (!UtilEnt.isGrounded(slime))
continue;
@ -124,14 +128,19 @@ public class MountSlime extends Mount<Slime>
if (!Recharge.Instance.use(player, GetName(), 200, false, false))
continue;
UtilAction.velocity(slime, slime.getPassenger().getLocation().getDirection(), 1, true, 0, 0.4, 1, true);
Vector dir = slime.getPassenger().getLocation().getDirection();
UtilAction.velocity(slime, dir, 1, true, 0, 0.4, 1, true);
UtilEnt.CreatureForceLook(slime, 0, UtilAlg.GetYaw(dir));
slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 1f, 0.75f);
}
//Collide
for (Slime slime : GetActive().values())
for (SingleEntityMountData<Slime> slimeData : GetActive().values())
{
Slime slime = slimeData.getEntity();
if (slime.getPassenger() == null)
continue;
@ -143,8 +152,10 @@ public class MountSlime extends Mount<Slime>
if (!Recharge.Instance.usable(player, GetName() + " Collide"))
continue;
for (Slime other : GetActive().values())
for (SingleEntityMountData<Slime> otherSlime : GetActive().values())
{
Slime other = otherSlime.getEntity();
if (other.equals(slime))
continue;

View File

@ -4,21 +4,6 @@ import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Map.Entry;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.disguise.disguises.DisguiseSpider;
import mineplex.core.mount.HorseMount;
import mineplex.core.mount.MountManager;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import net.minecraft.server.v1_8_R3.EntityLiving;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
@ -32,6 +17,22 @@ import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.disguise.disguises.DisguiseSpider;
import mineplex.core.mount.HorseMount;
import mineplex.core.mount.MountManager;
import mineplex.core.mount.SingleEntityMountData;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import net.minecraft.server.v1_8_R3.EntityLiving;
public class MountSpider extends HorseMount
{
/**
@ -87,7 +88,8 @@ public class MountSpider extends HorseMount
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + "."));
//Store
_active.put(player, horse);
SingleEntityMountData<Horse> mount = new SingleEntityMountData<Horse>(player, horse);
_active.put(player, mount);
DisguiseSpider spider = new DisguiseSpider(horse);
spider.setName(player.getName() + "'s Spider Mount");
@ -105,7 +107,7 @@ public class MountSpider extends HorseMount
ArrayList<Horse> used = new ArrayList<Horse>();
for (Player player : GetActive().keySet())
{
Horse horse = GetActive().get(player);
Horse horse = GetActive().get(player).getEntity();
used.add(horse);
@ -126,21 +128,24 @@ public class MountSpider extends HorseMount
if (event.getType() != UpdateType.TICK)
return;
for (Entry<Player, Horse> horse : GetActive().entrySet())
for (Entry<Player, SingleEntityMountData<Horse>> entry : GetActive().entrySet())
{
if (horse.getValue().getPassenger() != horse.getKey())
Player player = entry.getKey();
Horse horse = entry.getValue().getEntity();
if (horse.getPassenger() != player)
continue;
//If player is looking up
if (horse.getKey().getEyeLocation().getPitch() > -45)
if (player.getEyeLocation().getPitch() > -45)
continue;
for (Block block : UtilBlock.getSurrounding(horse.getValue().getLocation().getBlock(), true))
for (Block block : UtilBlock.getSurrounding(horse.getLocation().getBlock(), true))
{
if (UtilBlock.airFoliage(block) || block.isLiquid())
continue;
UtilAction.velocity(horse.getValue(), new Vector(horse.getValue().getVelocity().getX(), 0.2, horse.getValue().getVelocity().getZ()));
UtilAction.velocity(horse, new Vector(horse.getVelocity().getX(), 0.2, horse.getVelocity().getZ()));
continue;
}
}
@ -191,7 +196,7 @@ public class MountSpider extends HorseMount
for (Player player : GetActive().keySet())
{
final Horse horse = GetActive().get(player);
final Horse horse = GetActive().get(player).getEntity();
if (horse.getPassenger() != player)
continue;

View File

@ -84,7 +84,7 @@ public class MountTitan extends Mount<MountTitanData>
for(MountTitanData mount : GetActive().values())
{
if(mount.ownsEntity(event.getRightClicked()))
if(mount.isPartOfMount(event.getRightClicked()))
{
event.setCancelled(true);
if(event.getRightClicked().getType() == EntityType.ARMOR_STAND) return;
@ -124,7 +124,7 @@ public class MountTitan extends Mount<MountTitanData>
{
for (MountTitanData data : _active.values())
{
if (data.ownsEntity(event.getEntity()))
if (data.isPartOfMount(event.getEntity()))
event.setCancelled(true);
}
}

View File

@ -3,6 +3,7 @@
package mineplex.core.mount.types;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Location;
import org.bukkit.Material;
@ -18,10 +19,10 @@ import org.bukkit.util.Vector;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.mount.MountData;
public class MountTitanData
public class MountTitanData extends MountData
{
private String _owner;
private Slime _head;
@ -29,7 +30,7 @@ public class MountTitanData
public MountTitanData(Player player, String name)
{
_owner = player.getName();
super(player);
Location loc = player.getLocation();
loc.setPitch(0);
@ -136,14 +137,13 @@ public class MountTitanData
for (ArmorStand stand : _nodes)
stand.remove();
}
public boolean ownsMount(Player player)
{
return _owner.equals(player.getName());
}
public boolean ownsEntity(Entity ent)
@Override
public List<Entity> getEntityParts()
{
return (_head.equals(ent) || _nodes.contains(ent));
List<Entity> entities = new ArrayList<Entity>();
entities.addAll(_nodes);
entities.add(_head);
return entities;
}
}

View File

@ -1,15 +1,5 @@
package mineplex.core.mount.types;
import mineplex.core.common.util.C;
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.UtilServer;
import mineplex.core.mount.HorseMount;
import mineplex.core.mount.MountManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import org.bukkit.Material;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Horse.Color;
@ -17,6 +7,16 @@ import org.bukkit.entity.Horse.Style;
import org.bukkit.entity.Horse.Variant;
import org.bukkit.event.EventHandler;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.mount.HorseMount;
import mineplex.core.mount.MountManager;
import mineplex.core.mount.SingleEntityMountData;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public class MountUndead extends HorseMount
{
public MountUndead(MountManager manager)
@ -37,16 +37,20 @@ public class MountUndead extends HorseMount
public void Trail(UpdateEvent event)
{
if (event.getType() == UpdateType.TICK)
for (Horse horse : GetActive().values())
UtilParticle.PlayParticle(ParticleType.FLAME, horse.getLocation().add(0, 1, 0),
0.25f, 0.25f, 0.25f, 0, 2,
ViewDist.NORMAL, UtilServer.getPlayers());
for (SingleEntityMountData<Horse> horseData : GetActive().values())
{
Horse horse = horseData.getEntity();
UtilParticle.PlayParticleToAll(ParticleType.FLAME, horse.getLocation().add(0, 1, 0),
0.25f, 0.25f, 0.25f, 0, 2,ViewDist.NORMAL);
}
if (event.getType() == UpdateType.FAST)
for (Horse horse : GetActive().values())
UtilParticle.PlayParticle(ParticleType.LAVA, horse.getLocation().add(0, 1, 0),
0.25f, 0.25f, 0.25f, 0, 1,
ViewDist.NORMAL, UtilServer.getPlayers());
for (SingleEntityMountData<Horse> horseData : GetActive().values())
{
Horse horse = horseData.getEntity();
UtilParticle.PlayParticleToAll(ParticleType.LAVA, horse.getLocation().add(0, 1, 0),
0.25f, 0.25f, 0.25f, 0, 1, ViewDist.NORMAL);
}
}
}

View File

@ -14,7 +14,7 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Wither;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
@ -24,9 +24,9 @@ import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.event.StackerEvent;
import mineplex.core.gadget.gadgets.MorphBlock;
import mineplex.core.gadget.types.GadgetType;
@ -54,7 +54,7 @@ public class StackerManager extends MiniPlugin implements IThrown
}
@EventHandler
public void GrabEntity(PlayerInteractEntityEvent event)
public void GrabEntity(PlayerInteractAtEntityEvent event)
{
if (event.isCancelled())
return;
@ -62,7 +62,10 @@ public class StackerManager extends MiniPlugin implements IThrown
Entity stackee = event.getRightClicked();
if (stackee == null)
return;
if(Manager.GetMount().isMount(stackee))
return;
if (!(stackee instanceof LivingEntity))
return;