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.location.Location; | ||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import com.plotsquared.core.plot.Plot; | 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 |  * Called when a player teleports to a plot | ||||||
|  */ |  */ | ||||||
| public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent { | public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent { | ||||||
|  |  | ||||||
|     private final Location from; |  | ||||||
|     private final TeleportCause cause; |     private final TeleportCause cause; | ||||||
|     private Result eventResult; |     private Result eventResult; | ||||||
|  |     private final Location from; | ||||||
|  |     private Location location; | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * PlayerTeleportToPlotEvent: Called when a player teleports to a plot |      * PlayerTeleportToPlotEvent: Called when a player teleports to a plot | ||||||
|      * |      * | ||||||
|      * @param player   That was teleported |      * @param player   That was teleported | ||||||
|      * @param from   Start location |      * @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 plot     Plot to which the player was teleported | ||||||
|      * @param cause    Why the teleport is being completed |      * @param cause    Why the teleport is being completed | ||||||
|      * @since 6.1.0 |      * @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); |         super(player, plot); | ||||||
|         this.from = from; |         this.from = from; | ||||||
|  |         this.location = location; | ||||||
|         this.cause = cause; |         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 |      * @return Location | ||||||
|      */ |      */ | ||||||
| @@ -65,6 +74,29 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel | |||||||
|         return this.from; |         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 |     @Override | ||||||
|     public Result getEventResult() { |     public Result getEventResult() { | ||||||
|         return eventResult; |         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.StaticCaption; | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
| import com.plotsquared.core.database.DBFunc; | import com.plotsquared.core.database.DBFunc; | ||||||
|  | import com.plotsquared.core.events.PlayerTeleportToPlotEvent; | ||||||
| import com.plotsquared.core.events.Result; | import com.plotsquared.core.events.Result; | ||||||
| import com.plotsquared.core.events.TeleportCause; | import com.plotsquared.core.events.TeleportCause; | ||||||
| import com.plotsquared.core.generator.ClassicPlotWorld; | import com.plotsquared.core.generator.ClassicPlotWorld; | ||||||
| @@ -2614,8 +2615,9 @@ public class Plot { | |||||||
|      */ |      */ | ||||||
|     public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) { |     public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) { | ||||||
|         Plot plot = this.getBasePlot(false); |         Plot plot = this.getBasePlot(false); | ||||||
|         Result result = this.eventDispatcher.callTeleport(player, player.getLocation(), plot, cause).getEventResult(); |         final Consumer<Location> locationConsumer = calculatedLocation -> { | ||||||
|         if (result == Result.DENY) { |             PlayerTeleportToPlotEvent event = this.eventDispatcher.callTeleport(player, player.getLocation(), calculatedLocation, plot, cause); | ||||||
|  |             if (event.getEventResult() == Result.DENY) { | ||||||
|                 player.sendMessage( |                 player.sendMessage( | ||||||
|                         TranslatableCaption.of("events.event_denied"), |                         TranslatableCaption.of("events.event_denied"), | ||||||
|                         TagResolver.resolver("value", Tag.inserting(Component.text("Teleport"))) |                         TagResolver.resolver("value", Tag.inserting(Component.text("Teleport"))) | ||||||
| @@ -2623,7 +2625,7 @@ public class Plot { | |||||||
|                 resultConsumer.accept(false); |                 resultConsumer.accept(false); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|         final Consumer<Location> locationConsumer = location -> { |             Location location = event.getLocation(); | ||||||
|             if (Settings.Teleport.DELAY == 0 || player.hasPermission("plots.teleport.delay.bypass")) { |             if (Settings.Teleport.DELAY == 0 || player.hasPermission("plots.teleport.delay.bypass")) { | ||||||
|                 player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot")); |                 player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot")); | ||||||
|                 player.teleport(location, cause); |                 player.teleport(location, cause); | ||||||
|   | |||||||
| @@ -158,8 +158,9 @@ public class EventDispatcher { | |||||||
|         return event; |         return event; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerTeleportToPlotEvent callTeleport(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) { |     public PlayerTeleportToPlotEvent callTeleport(PlotPlayer<?> player, Location from, Location location, Plot plot, | ||||||
|         PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, plot, cause); |                                                   TeleportCause cause) { | ||||||
|  |         PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, location, plot, cause); | ||||||
|         callEvent(event); |         callEvent(event); | ||||||
|         return event; |         return event; | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Pierre Maurice Schwang
					Pierre Maurice Schwang