Skip to content

Commit 6b86c5f

Browse files
authored
Merge pull request #692 from Multiverse/feat/check-destination-safety
Add check destination safety portal property
2 parents 82326c7 + 8aab77a commit 6b86c5f

File tree

6 files changed

+40
-7
lines changed

6 files changed

+40
-7
lines changed

src/main/java/org/mvplugins/multiverse/portals/MVPortal.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.mvplugins.multiverse.core.teleportation.BlockSafety;
3030
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
3131
import org.mvplugins.multiverse.core.world.WorldManager;
32+
import org.mvplugins.multiverse.external.vavr.control.Try;
3233
import org.mvplugins.multiverse.portals.config.PortalsConfig;
3334
import org.mvplugins.multiverse.portals.enums.PortalType;
3435
import org.bukkit.Location;
@@ -290,6 +291,29 @@ public boolean setDestination(DestinationInstance<?, ?> newDestination) {
290291
.getOrNull();
291292
}
292293

294+
/**
295+
*
296+
* @param checkDestinationSafety
297+
* @return
298+
*
299+
* @since 5.1
300+
*/
301+
@ApiStatus.AvailableSince("5.1")
302+
public Try<Void> setCheckDestinationSafety(boolean checkDestinationSafety) {
303+
return this.configHandle.set(configNodes.checkDestinationSafety, checkDestinationSafety);
304+
}
305+
306+
/**
307+
*
308+
* @return
309+
*
310+
* @since 5.1
311+
*/
312+
@ApiStatus.AvailableSince("5.1")
313+
public boolean getCheckDestinationSafety() {
314+
return this.configHandle.get(configNodes.checkDestinationSafety);
315+
}
316+
293317
public Location getSafePlayerSpawnLocation() {
294318
PortalLocation pl = this.location;
295319
double portalWidth = Math.abs((pl.getMaximum().getBlockX()) - pl.getMinimum().getBlockX()) + 1;

src/main/java/org/mvplugins/multiverse/portals/MVPortalNodes.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ private <N extends Node> N node(N node) {
9999
.toTry())
100100
.build());
101101

102+
final ConfigNode<Boolean> checkDestinationSafety = node(ConfigNode.builder("check-destination-safety", Boolean.class)
103+
.defaultValue(true)
104+
.build());
105+
102106
final ConfigNode<Double> version = node(ConfigNode.builder("version", Double.class)
103107
.defaultValue(0.0)
104108
.hidden()

src/main/java/org/mvplugins/multiverse/portals/listeners/MVPPlayerListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ public void playerPortal(PlayerPortalEvent event) {
283283
return;
284284
}
285285

286-
if (portalDest.checkTeleportSafety()) {
286+
if (portal.getCheckDestinationSafety() && portalDest.checkTeleportSafety()) {
287287
Location safeLocation = blockSafety.findSafeSpawnLocation(portalDest.getLocation(event.getPlayer()).getOrNull());
288288
if (safeLocation == null) {
289289
event.setCancelled(true);

src/main/java/org/mvplugins/multiverse/portals/listeners/MVPPlayerMoveListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public void playerMove(PlayerMoveEvent event) {
153153
price > 0D ? "been charged" : "earned",
154154
economist.formatPrice(price, currency),
155155
portal.getName()));
156-
helper.performTeleport(event.getPlayer(), event.getTo(), ps, d);
156+
helper.performTeleport(event.getPlayer(), event.getTo(), ps, d, portal.getCheckDestinationSafety());
157157
}
158158
} else {
159159
p.sendMessage(economist.getNSFMessage(currency,
@@ -164,7 +164,7 @@ public void playerMove(PlayerMoveEvent event) {
164164
MVPortalEvent portalEvent = new MVPortalEvent(d, event.getPlayer(), portal);
165165
this.plugin.getServer().getPluginManager().callEvent(portalEvent);
166166
if (!portalEvent.isCancelled()) {
167-
helper.performTeleport(event.getPlayer(), event.getTo(), ps, d);
167+
helper.performTeleport(event.getPlayer(), event.getTo(), ps, d, portal.getCheckDestinationSafety());
168168
}
169169
}
170170
}

src/main/java/org/mvplugins/multiverse/portals/listeners/MVPVehicleListener.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.dumptruckman.minecraft.util.Logging;
1414
import org.bukkit.Material;
1515
import org.bukkit.event.Listener;
16+
import org.mvplugins.multiverse.core.destination.DestinationInstance;
1617
import org.mvplugins.multiverse.core.economy.MVEconomist;
1718
import org.mvplugins.multiverse.core.permissions.CorePermissionsChecker;
1819
import org.mvplugins.multiverse.core.teleportation.LocationManipulation;
@@ -101,7 +102,9 @@ public void vehicleMove(VehicleMoveEvent event) {
101102
}
102103
}
103104

104-
safetyTeleporter.to(portal.getDestination())
105+
DestinationInstance<?, ?> destination = portal.getDestination();
106+
safetyTeleporter.to(destination)
107+
.checkSafety(portal.getCheckDestinationSafety() && destination.checkTeleportSafety())
105108
.passengerMode(PassengerModes.RETAIN_ALL)
106109
.teleportSingle(vehicle)
107110
.onSuccess(() -> Logging.finer("Successfully teleported vehicle %s using portal %s",

src/main/java/org/mvplugins/multiverse/portals/listeners/PlayerListenerHelper.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.bukkit.entity.Player;
1414

1515
@Service
16-
public class PlayerListenerHelper {
16+
final class PlayerListenerHelper {
1717

1818
private final AsyncSafetyTeleporter safetyTeleporter;
1919

@@ -34,8 +34,10 @@ void stateFailure(String playerName, String portalName) {
3434
playerName, portalName));
3535
}
3636

37-
void performTeleport(Player player, Location to, PortalPlayerSession ps, DestinationInstance<?, ?> destination) {
38-
safetyTeleporter.to(destination).teleport(player)
37+
void performTeleport(Player player, Location to, PortalPlayerSession ps, DestinationInstance<?, ?> destination, boolean checkSafety) {
38+
safetyTeleporter.to(destination)
39+
.checkSafety(checkSafety && destination.checkTeleportSafety())
40+
.teleportSingle(player)
3941
.onSuccess(() -> {
4042
ps.playerDidTeleport(to);
4143
ps.setTeleportTime(new Date());

0 commit comments

Comments
 (0)