mirror of
https://github.com/EssentialsX/Essentials.git
synced 2024-11-09 20:41:23 +01:00
Fix home functionality bugs:
/home not using bed when enabled /home not giving teleport warning
This commit is contained in:
parent
0755fbf089
commit
03445e5b9b
@ -16,30 +16,30 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|||||||
public class Teleport implements Runnable, ITeleport
|
public class Teleport implements Runnable, ITeleport
|
||||||
{
|
{
|
||||||
private static final double MOVE_CONSTANT = 0.3;
|
private static final double MOVE_CONSTANT = 0.3;
|
||||||
|
|
||||||
|
|
||||||
private class Target
|
private class Target
|
||||||
{
|
{
|
||||||
private final Location location;
|
private final Location location;
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
Target(Location location)
|
Target(Location location)
|
||||||
{
|
{
|
||||||
this.location = location;
|
this.location = location;
|
||||||
this.name = null;
|
this.name = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Target(Player entity)
|
Target(Player entity)
|
||||||
{
|
{
|
||||||
this.name = entity.getName();
|
this.name = entity.getName();
|
||||||
this.location = null;
|
this.location = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Location getLocation()
|
public Location getLocation()
|
||||||
{
|
{
|
||||||
if (this.name != null)
|
if (this.name != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
return ess.getServer().getPlayerExact(name).getLocation();
|
return ess.getServer().getPlayerExact(name).getLocation();
|
||||||
}
|
}
|
||||||
return location;
|
return location;
|
||||||
@ -63,12 +63,12 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
private final IEssentials ess;
|
private final IEssentials ess;
|
||||||
private static final Logger logger = Logger.getLogger("Minecraft");
|
private static final Logger logger = Logger.getLogger("Minecraft");
|
||||||
private TeleportCause cause;
|
private TeleportCause cause;
|
||||||
|
|
||||||
private void initTimer(long delay, Target target, Trade chargeFor, TeleportCause cause)
|
private void initTimer(long delay, Target target, Trade chargeFor, TeleportCause cause)
|
||||||
{
|
{
|
||||||
initTimer(delay, user, target, chargeFor, cause, false);
|
initTimer(delay, user, target, chargeFor, cause, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initTimer(long delay, IUser teleportUser, Target target, Trade chargeFor, TeleportCause cause, boolean respawn)
|
private void initTimer(long delay, IUser teleportUser, Target target, Trade chargeFor, TeleportCause cause, boolean respawn)
|
||||||
{
|
{
|
||||||
this.started = System.currentTimeMillis();
|
this.started = System.currentTimeMillis();
|
||||||
@ -83,11 +83,11 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
this.cause = cause;
|
this.cause = cause;
|
||||||
this.respawn = respawn;
|
this.respawn = respawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (user == null || !user.isOnline() || user.getLocation() == null)
|
if (user == null || !user.isOnline() || user.getLocation() == null)
|
||||||
{
|
{
|
||||||
cancel(false);
|
cancel(false);
|
||||||
@ -98,7 +98,7 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
cancel(false);
|
cancel(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!user.isAuthorized("essentials.teleport.timer.move")
|
if (!user.isAuthorized("essentials.teleport.timer.move")
|
||||||
&& (Math.round(teleportUser.getLocation().getX() * MOVE_CONSTANT) != initX
|
&& (Math.round(teleportUser.getLocation().getX() * MOVE_CONSTANT) != initX
|
||||||
|| Math.round(teleportUser.getLocation().getY() * MOVE_CONSTANT) != initY
|
|| Math.round(teleportUser.getLocation().getY() * MOVE_CONSTANT) != initY
|
||||||
@ -119,10 +119,12 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
teleportUser.sendMessage(_("teleportationCommencing"));
|
teleportUser.sendMessage(_("teleportationCommencing"));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (respawn) {
|
if (respawn)
|
||||||
|
{
|
||||||
teleportUser.getTeleport().respawn(cause);
|
teleportUser.getTeleport().respawn(cause);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
teleportUser.getTeleport().now(teleportTarget, cause);
|
teleportUser.getTeleport().now(teleportTarget, cause);
|
||||||
}
|
}
|
||||||
cancel(false);
|
cancel(false);
|
||||||
@ -146,13 +148,13 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Teleport(IUser user, IEssentials ess)
|
public Teleport(IUser user, IEssentials ess)
|
||||||
{
|
{
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.ess = ess;
|
this.ess = ess;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cooldown(boolean check) throws Exception
|
public void cooldown(boolean check) throws Exception
|
||||||
{
|
{
|
||||||
final Calendar time = new GregorianCalendar();
|
final Calendar time = new GregorianCalendar();
|
||||||
@ -168,7 +170,7 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
|
|
||||||
// When was the last teleport used?
|
// When was the last teleport used?
|
||||||
final Long lastTime = user.getLastTeleportTimestamp();
|
final Long lastTime = user.getLastTeleportTimestamp();
|
||||||
|
|
||||||
if (lastTime > time.getTimeInMillis())
|
if (lastTime > time.getTimeInMillis())
|
||||||
{
|
{
|
||||||
// This is to make sure time didn't get messed up on last kit use.
|
// This is to make sure time didn't get messed up on last kit use.
|
||||||
@ -225,7 +227,7 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
}
|
}
|
||||||
now(new Target(loc), cause);
|
now(new Target(loc), cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void now(Player entity, boolean cooldown, TeleportCause cause) throws Exception
|
public void now(Player entity, boolean cooldown, TeleportCause cause) throws Exception
|
||||||
{
|
{
|
||||||
if (cooldown)
|
if (cooldown)
|
||||||
@ -234,7 +236,7 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
}
|
}
|
||||||
now(new Target(entity), cause);
|
now(new Target(entity), cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void now(Target target, TeleportCause cause) throws Exception
|
private void now(Target target, TeleportCause cause) throws Exception
|
||||||
{
|
{
|
||||||
cancel(false);
|
cancel(false);
|
||||||
@ -249,21 +251,21 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
{
|
{
|
||||||
teleport(loc, chargeFor, TeleportCause.PLUGIN);
|
teleport(loc, chargeFor, TeleportCause.PLUGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void teleport(Location loc, Trade chargeFor, TeleportCause cause) throws Exception
|
public void teleport(Location loc, Trade chargeFor, TeleportCause cause) throws Exception
|
||||||
{
|
{
|
||||||
teleport(new Target(loc), chargeFor, cause);
|
teleport(new Target(loc), chargeFor, cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void teleport(Player entity, Trade chargeFor, TeleportCause cause) throws Exception
|
public void teleport(Player entity, Trade chargeFor, TeleportCause cause) throws Exception
|
||||||
{
|
{
|
||||||
teleport(new Target(entity), chargeFor, cause);
|
teleport(new Target(entity), chargeFor, cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void teleport(Target target, Trade chargeFor, TeleportCause cause) throws Exception
|
private void teleport(Target target, Trade chargeFor, TeleportCause cause) throws Exception
|
||||||
{
|
{
|
||||||
double delay = ess.getSettings().getTeleportDelay();
|
double delay = ess.getSettings().getTeleportDelay();
|
||||||
|
|
||||||
if (chargeFor != null)
|
if (chargeFor != null)
|
||||||
{
|
{
|
||||||
chargeFor.isAffordableFor(user);
|
chargeFor.isAffordableFor(user);
|
||||||
@ -279,11 +281,11 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cancel(false);
|
cancel(false);
|
||||||
warnUser(user, delay);
|
warnUser(user, delay);
|
||||||
initTimer((long)(delay * 1000.0), target, chargeFor, cause);
|
initTimer((long)(delay * 1000.0), target, chargeFor, cause);
|
||||||
|
|
||||||
teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10);
|
teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,7 +294,7 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
{
|
{
|
||||||
Target target = new Target(user);
|
Target target = new Target(user);
|
||||||
double delay = ess.getSettings().getTeleportDelay();
|
double delay = ess.getSettings().getTeleportDelay();
|
||||||
|
|
||||||
if (chargeFor != null)
|
if (chargeFor != null)
|
||||||
{
|
{
|
||||||
chargeFor.isAffordableFor(user);
|
chargeFor.isAffordableFor(user);
|
||||||
@ -308,13 +310,13 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cancel(false);
|
cancel(false);
|
||||||
warnUser(otherUser, delay);
|
warnUser(otherUser, delay);
|
||||||
initTimer((long)(delay * 1000.0), otherUser, target, chargeFor, cause, false);
|
initTimer((long)(delay * 1000.0), otherUser, target, chargeFor, cause, false);
|
||||||
teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10);
|
teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void warnUser(final IUser user, final double delay)
|
private void warnUser(final IUser user, final double delay)
|
||||||
{
|
{
|
||||||
Calendar c = new GregorianCalendar();
|
Calendar c = new GregorianCalendar();
|
||||||
@ -342,22 +344,27 @@ public class Teleport implements Runnable, ITeleport
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cancel(false);
|
cancel(false);
|
||||||
|
warnUser(user, delay);
|
||||||
initTimer((long)(delay * 1000.0), user, null, chargeFor, cause, true);
|
initTimer((long)(delay * 1000.0), user, null, chargeFor, cause, true);
|
||||||
teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10);
|
teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void respawn(TeleportCause cause) throws Exception
|
public void respawn(TeleportCause cause) throws Exception
|
||||||
{
|
{
|
||||||
final Player player = user.getBase();
|
final Player player = user.getBase();
|
||||||
Location bed = player.getBedSpawnLocation();
|
Location bed = player.getBedSpawnLocation();
|
||||||
if (bed != null && bed.getBlock().getType() != Material.BED_BLOCK)
|
if (bed != null && bed.getBlock().getType() == Material.BED_BLOCK)
|
||||||
{
|
{
|
||||||
now(new Target(bed), cause);
|
now(new Target(bed), cause);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (ess.getSettings().isDebug())
|
||||||
|
{
|
||||||
|
ess.getLogger().info("Could not find bed spawn, forcing respawn event.");
|
||||||
|
}
|
||||||
final PlayerRespawnEvent pre = new PlayerRespawnEvent(player, player.getWorld().getSpawnLocation(), false);
|
final PlayerRespawnEvent pre = new PlayerRespawnEvent(player, player.getWorld().getSpawnLocation(), false);
|
||||||
ess.getServer().getPluginManager().callEvent(pre);
|
ess.getServer().getPluginManager().callEvent(pre);
|
||||||
now(new Target(pre.getRespawnLocation()), cause);
|
now(new Target(pre.getRespawnLocation()), cause);
|
||||||
|
@ -69,7 +69,7 @@ public class Commandhome extends EssentialsCommand
|
|||||||
}
|
}
|
||||||
else if (homes.isEmpty())
|
else if (homes.isEmpty())
|
||||||
{
|
{
|
||||||
throw new Exception(player == user ? _("noHomeSet") : _("noHomeSetPlayer"));
|
throw new Exception(_("noHomeSetPlayer"));
|
||||||
}
|
}
|
||||||
else if (homes.size() == 1 && player.equals(user))
|
else if (homes.size() == 1 && player.equals(user))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user