mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 09:33:43 +01:00 
			
		
		
		
	feat: ability to overwrite spawn location for plot teleports
This commit is contained in:
		| @@ -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; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Pierre Maurice Schwang
					Pierre Maurice Schwang