mount stuff is fixed

This commit is contained in:
Cheese 2015-12-09 08:19:55 +11:00
parent 2decc049c5
commit fba88ec231
2 changed files with 51 additions and 49 deletions

View File

@ -75,7 +75,7 @@ public class MountCart extends Mount<SingleEntityMountData<Minecart>>
if (event.getRightClicked() == null) if (event.getRightClicked() == null)
return; return;
SingleEntityMountData<Minecart> mount = GetActive().get(event.getPlayer()); SingleEntityMountData<Minecart> mount = getMountData(event.getRightClicked());
if(mount == null) return; if(mount == null) return;

View File

@ -30,11 +30,11 @@ public class MountSlime extends Mount<SingleEntityMountData<Slime>>
{ {
super(manager, "Slime Mount", Material.SLIME_BALL, (byte)0, new String[] super(manager, "Slime Mount", Material.SLIME_BALL, (byte)0, new String[]
{ {
ChatColor.RESET + "Bounce around on your very", ChatColor.RESET + "Bounce around on your very",
ChatColor.RESET + "own personal slime friend!", ChatColor.RESET + "own personal slime friend!",
}, },
15000); 15000);
KnownPackage = false; KnownPackage = false;
} }
@ -42,153 +42,155 @@ public class MountSlime extends Mount<SingleEntityMountData<Slime>>
{ {
player.leaveVehicle(); player.leaveVehicle();
player.eject(); player.eject();
//Remove other mounts //Remove other mounts
Manager.DeregisterAll(player); Manager.DeregisterAll(player);
SingleEntityMountData<Slime> mount = new SingleEntityMountData<Slime>(player, player.getWorld().spawn(player.getLocation(), Slime.class)); SingleEntityMountData<Slime> mount = new SingleEntityMountData<Slime>(player, player.getWorld().spawn(player.getLocation(), Slime.class));
mount.getEntity().setSize(2); mount.getEntity().setSize(2);
mount.getEntity().setCustomName(player.getName() + "'s " + GetName()); mount.getEntity().setCustomName(player.getName() + "'s " + GetName());
//Inform //Inform
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + ".")); UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + "."));
//Store //Store
_active.put(player, mount); _active.put(player, mount);
} }
public void Disable(Player player) public void Disable(Player player)
{ {
SingleEntityMountData<Slime> mount = _active.remove(player); SingleEntityMountData<Slime> mount = _active.remove(player);
if (mount != null) if (mount != null)
{ {
mount.remove(); mount.remove();
//Inform //Inform
UtilPlayer.message(player, F.main("Mount", "You despawned " + F.elem(GetName()) + ".")); UtilPlayer.message(player, F.main("Mount", "You despawned " + F.elem(GetName()) + "."));
Manager.removeActive(player); Manager.removeActive(player);
} }
} }
@EventHandler @EventHandler
public void interactMount(PlayerInteractEntityEvent event) public void interactMount(PlayerInteractEntityEvent event)
{ {
if (event.getRightClicked() == null) if (event.getRightClicked() == null)
return; return;
if (!GetActive().containsKey(event.getPlayer())) SingleEntityMountData<Slime> data = GetActive().get(event.getPlayer());
return;
if(data == null) return;
if(!GetActive().get(event.getPlayer()).ownsMount(event.getPlayer()))
return; if(!data.ownsMount(event.getPlayer())) return;
if(!data.isPartOfMount(event.getRightClicked())) return;
event.getPlayer().leaveVehicle(); event.getPlayer().leaveVehicle();
event.getPlayer().eject(); event.getPlayer().eject();
event.getRightClicked().setPassenger(event.getPlayer()); event.getRightClicked().setPassenger(event.getPlayer());
} }
@EventHandler @EventHandler
public void target(EntityTargetEvent event) public void target(EntityTargetEvent event)
{ {
if (!GetActive().containsKey(event.getTarget())) if (!GetActive().containsKey(event.getTarget()))
return; return;
if (!GetActive().get(event.getTarget()).equals(event.getEntity())) if (!GetActive().get(event.getTarget()).equals(event.getEntity()))
event.setCancelled(true); event.setCancelled(true);
} }
@EventHandler @EventHandler
public void updateBounce(UpdateEvent event) public void updateBounce(UpdateEvent event)
{ {
if (event.getType() != UpdateType.TICK) if (event.getType() != UpdateType.TICK)
return; return;
//Bounce //Bounce
for (SingleEntityMountData<Slime> slimeData : GetActive().values()) for (SingleEntityMountData<Slime> slimeData : GetActive().values())
{ {
Slime slime = slimeData.getEntity(); Slime slime = slimeData.getEntity();
if (slime.getPassenger() == null) if (slime.getPassenger() == null)
{ {
UtilEnt.setFakeHead(slime, false); UtilEnt.setFakeHead(slime, false);
continue; continue;
} }
if (!UtilEnt.isGrounded(slime)) if (!UtilEnt.isGrounded(slime))
continue; continue;
if (!(slime.getPassenger() instanceof Player)) if (!(slime.getPassenger() instanceof Player))
continue; continue;
Player player = (Player)slime.getPassenger(); Player player = (Player)slime.getPassenger();
if (!Recharge.Instance.use(player, GetName(), 200, false, false)) if (!Recharge.Instance.use(player, GetName(), 200, false, false))
continue; continue;
Vector dir = slime.getPassenger().getLocation().getDirection(); Vector dir = slime.getPassenger().getLocation().getDirection();
UtilAction.velocity(slime, dir, 1, true, 0, 0.4, 1, true); UtilAction.velocity(slime, dir, 1, true, 0, 0.4, 1, true);
UtilEnt.CreatureForceLook(slime, 0, UtilAlg.GetYaw(dir)); UtilEnt.CreatureForceLook(slime, 0, UtilAlg.GetYaw(dir));
slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 1f, 0.75f); slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 1f, 0.75f);
} }
//Collide //Collide
for (SingleEntityMountData<Slime> slimeData : GetActive().values()) for (SingleEntityMountData<Slime> slimeData : GetActive().values())
{ {
Slime slime = slimeData.getEntity(); Slime slime = slimeData.getEntity();
if (slime.getPassenger() == null) if (slime.getPassenger() == null)
continue; continue;
if (!(slime.getPassenger() instanceof Player)) if (!(slime.getPassenger() instanceof Player))
continue; continue;
Player player = (Player)slime.getPassenger(); Player player = (Player)slime.getPassenger();
if (!Recharge.Instance.usable(player, GetName() + " Collide")) if (!Recharge.Instance.usable(player, GetName() + " Collide"))
continue; continue;
for (SingleEntityMountData<Slime> otherSlime : GetActive().values()) for (SingleEntityMountData<Slime> otherSlime : GetActive().values())
{ {
Slime other = otherSlime.getEntity(); Slime other = otherSlime.getEntity();
if (other.equals(slime)) if (other.equals(slime))
continue; continue;
if (other.getPassenger() == null) if (other.getPassenger() == null)
continue; continue;
if (!(other.getPassenger() instanceof Player)) if (!(other.getPassenger() instanceof Player))
continue; continue;
Player otherPlayer = (Player)other.getPassenger(); Player otherPlayer = (Player)other.getPassenger();
if (!Recharge.Instance.usable(otherPlayer, GetName() + " Collide")) if (!Recharge.Instance.usable(otherPlayer, GetName() + " Collide"))
continue; continue;
//Collide //Collide
if (UtilMath.offset(slime, other) > 2) if (UtilMath.offset(slime, other) > 2)
continue; continue;
Recharge.Instance.useForce(player, GetName() + " Collide", 500); Recharge.Instance.useForce(player, GetName() + " Collide", 500);
Recharge.Instance.useForce(otherPlayer, GetName() + " Collide", 500); Recharge.Instance.useForce(otherPlayer, GetName() + " Collide", 500);
UtilAction.velocity(slime, UtilAlg.getTrajectory(other, slime), 1.2, false, 0, 0.8, 10, true); UtilAction.velocity(slime, UtilAlg.getTrajectory(other, slime), 1.2, false, 0, 0.8, 10, true);
UtilAction.velocity(other, UtilAlg.getTrajectory(slime, other), 1.2, false, 0, 0.8, 10, true); UtilAction.velocity(other, UtilAlg.getTrajectory(slime, other), 1.2, false, 0, 0.8, 10, true);
slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_ATTACK, 1f, 0.5f); slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_ATTACK, 1f, 0.5f);
slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 1f, 0.5f); slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 1f, 0.5f);
other.getWorld().playSound(other.getLocation(), Sound.SLIME_WALK, 1f, 0.5f); other.getWorld().playSound(other.getLocation(), Sound.SLIME_WALK, 1f, 0.5f);
slime.playEffect(EntityEffect.HURT); slime.playEffect(EntityEffect.HURT);
other.playEffect(EntityEffect.HURT); other.playEffect(EntityEffect.HURT);
} }
} }
} }
} }