mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 21:26:45 +01:00
Check teleportation on command location prefix
This commit is contained in:
parent
2ff4e07919
commit
e08db3d12b
@ -12,9 +12,12 @@ import org.bukkit.Effect;
|
|||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.WeatherType;
|
import org.bukkit.WeatherType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventException;
|
||||||
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import org.bukkit.plugin.RegisteredListener;
|
||||||
|
|
||||||
public class BukkitPlayer extends PlotPlayer {
|
public class BukkitPlayer extends PlotPlayer {
|
||||||
|
|
||||||
@ -57,6 +60,39 @@ public class BukkitPlayer extends PlotPlayer {
|
|||||||
return this.player.getLastPlayed();
|
return this.player.getLastPlayed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canTeleport(Location loc) {
|
||||||
|
org.bukkit.Location to = BukkitUtil.getLocation(loc);
|
||||||
|
org.bukkit.Location from = player.getLocation();
|
||||||
|
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
|
||||||
|
RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners();
|
||||||
|
for (RegisteredListener listener : listeners) {
|
||||||
|
if (listener.getPlugin().getName().equals("PlotSquared")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
listener.callEvent(event);
|
||||||
|
} catch (EventException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (event.isCancelled() || !event.getTo().equals(to)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
event = new PlayerTeleportEvent(player, to, from);
|
||||||
|
for (RegisteredListener listener : listeners) {
|
||||||
|
if (listener.getPlugin().getName().equals("PlotSquared")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
listener.callEvent(event);
|
||||||
|
} catch (EventException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPermission(String permission) {
|
public boolean hasPermission(String permission) {
|
||||||
if (this.offline && EconHandler.manager != null) {
|
if (this.offline && EconHandler.manager != null) {
|
||||||
|
@ -206,13 +206,18 @@ public class MainCommand extends Command {
|
|||||||
PlotArea area = player.getApplicablePlotArea();
|
PlotArea area = player.getApplicablePlotArea();
|
||||||
Plot newPlot = Plot.fromString(area, args[0]);
|
Plot newPlot = Plot.fromString(area, args[0]);
|
||||||
if (newPlot != null && (player instanceof ConsolePlayer || newPlot.getArea().equals(area) || Permissions.hasPermission(player, C.PERMISSION_ADMIN)) && !newPlot.isDenied(player.getUUID())) {
|
if (newPlot != null && (player instanceof ConsolePlayer || newPlot.getArea().equals(area) || Permissions.hasPermission(player, C.PERMISSION_ADMIN)) && !newPlot.isDenied(player.getUUID())) {
|
||||||
|
Location newLoc = newPlot.getCenter();
|
||||||
|
if (player.canTeleport(newLoc)) {
|
||||||
// Save meta
|
// Save meta
|
||||||
loc = player.getMeta("location");
|
loc = player.getMeta("location");
|
||||||
plot = player.getMeta("lastplot");
|
plot = player.getMeta("lastplot");
|
||||||
tp = true;
|
tp = true;
|
||||||
// Set loc
|
// Set loc
|
||||||
player.setMeta("location", newPlot.getBottomAbs());
|
player.setMeta("location", newLoc);
|
||||||
player.setMeta("lastplot", newPlot);
|
player.setMeta("lastplot", newPlot);
|
||||||
|
} else {
|
||||||
|
C.BORDER.send(player);
|
||||||
|
}
|
||||||
// Trim command
|
// Trim command
|
||||||
args = Arrays.copyOfRange(args, 1, args.length);
|
args = Arrays.copyOfRange(args, 1, args.length);
|
||||||
}
|
}
|
||||||
|
@ -250,6 +250,17 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
|
|||||||
*/
|
*/
|
||||||
public abstract UUID getUUID();
|
public abstract UUID getUUID();
|
||||||
|
|
||||||
|
public boolean canTeleport(Location loc) {
|
||||||
|
Location current = getLocationFull();
|
||||||
|
teleport(loc);
|
||||||
|
boolean result = true;
|
||||||
|
if (!getLocation().equals(loc)) {
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
teleport(current);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Teleport the player to a location.
|
* Teleport the player to a location.
|
||||||
* @param location the target location
|
* @param location the target location
|
||||||
|
Loading…
Reference in New Issue
Block a user