mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 05:06:44 +01:00
feat: ability to overwrite spawn location for plot teleports
This commit is contained in:
parent
a3bc3968a5
commit
d4ba0f414e
@ -21,28 +21,36 @@ package com.plotsquared.core.events;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Called when a player teleports to a plot
|
||||
*/
|
||||
public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent {
|
||||
|
||||
private final Location from;
|
||||
private final TeleportCause cause;
|
||||
private Result eventResult;
|
||||
private final Location from;
|
||||
private Location location;
|
||||
|
||||
|
||||
/**
|
||||
* PlayerTeleportToPlotEvent: Called when a player teleports to a plot
|
||||
*
|
||||
* @param player That was teleported
|
||||
* @param from Start location
|
||||
* @param plot Plot to which the player was teleported
|
||||
* @param cause Why the teleport is being completed
|
||||
* @param player That was teleported
|
||||
* @param from The origin location, from where the teleport was triggered (players location most likely)
|
||||
* @param location The initial location where the player will be teleported to
|
||||
* @param plot Plot to which the player was teleported
|
||||
* @param cause Why the teleport is being completed
|
||||
* @since 6.1.0
|
||||
*/
|
||||
public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) {
|
||||
public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Location location, Plot plot, TeleportCause cause) {
|
||||
super(player, plot);
|
||||
this.from = from;
|
||||
this.location = location;
|
||||
this.cause = cause;
|
||||
}
|
||||
|
||||
@ -57,7 +65,8 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the from location
|
||||
* Get the location, from where the teleport was triggered
|
||||
* (the players current location when executing the home command for example)
|
||||
*
|
||||
* @return Location
|
||||
*/
|
||||
@ -65,6 +74,29 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
|
||||
return this.from;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current location where the player will be teleported to.
|
||||
* Defaults to {@link Plot#getHome(Consumer)} or {@link Plot#getDefaultHome(boolean, Consumer)}
|
||||
*
|
||||
* @return Location
|
||||
* @since TODO
|
||||
*/
|
||||
public Location getLocation() {
|
||||
return this.location;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the new location where the player should be teleported to.
|
||||
* <b>Must</b> be not-null. If your intention is to cancel this teleport, see {@link #setEventResult(Result)}
|
||||
* @param location The new location
|
||||
* @since TODO
|
||||
*/
|
||||
public void setLocation(@NotNull Location location) {
|
||||
Objects.requireNonNull(location, "PlayerTeleportToPlotEvent#location may never be null. " +
|
||||
"If you intend to cancel the teleport, use PlayerTeleportToPlotEvent#setEventResult");
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result getEventResult() {
|
||||
return eventResult;
|
||||
|
@ -29,6 +29,7 @@ import com.plotsquared.core.configuration.caption.CaptionUtility;
|
||||
import com.plotsquared.core.configuration.caption.StaticCaption;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.database.DBFunc;
|
||||
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
|
||||
import com.plotsquared.core.events.Result;
|
||||
import com.plotsquared.core.events.TeleportCause;
|
||||
import com.plotsquared.core.generator.ClassicPlotWorld;
|
||||
@ -2614,16 +2615,17 @@ public class Plot {
|
||||
*/
|
||||
public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) {
|
||||
Plot plot = this.getBasePlot(false);
|
||||
Result result = this.eventDispatcher.callTeleport(player, player.getLocation(), plot, cause).getEventResult();
|
||||
if (result == Result.DENY) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("events.event_denied"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text("Teleport")))
|
||||
);
|
||||
resultConsumer.accept(false);
|
||||
return;
|
||||
}
|
||||
final Consumer<Location> locationConsumer = location -> {
|
||||
final Consumer<Location> locationConsumer = calculatedLocation -> {
|
||||
PlayerTeleportToPlotEvent event = this.eventDispatcher.callTeleport(player, player.getLocation(), calculatedLocation, plot, cause);
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("events.event_denied"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text("Teleport")))
|
||||
);
|
||||
resultConsumer.accept(false);
|
||||
return;
|
||||
}
|
||||
Location location = event.getLocation();
|
||||
if (Settings.Teleport.DELAY == 0 || player.hasPermission("plots.teleport.delay.bypass")) {
|
||||
player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot"));
|
||||
player.teleport(location, cause);
|
||||
|
@ -158,8 +158,9 @@ public class EventDispatcher {
|
||||
return event;
|
||||
}
|
||||
|
||||
public PlayerTeleportToPlotEvent callTeleport(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) {
|
||||
PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, plot, cause);
|
||||
public PlayerTeleportToPlotEvent callTeleport(PlotPlayer<?> player, Location from, Location location, Plot plot,
|
||||
TeleportCause cause) {
|
||||
PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, location, plot, cause);
|
||||
callEvent(event);
|
||||
return event;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user