|
9 | 9 | import org.bukkit.Location; |
10 | 10 | import org.bukkit.entity.Player; |
11 | 11 | import org.bukkit.event.EventHandler; |
| 12 | +import org.bukkit.event.EventPriority; |
12 | 13 | import org.bukkit.event.Listener; |
13 | 14 | import org.bukkit.event.player.PlayerMoveEvent; |
| 15 | +import org.bukkit.event.player.PlayerTeleportEvent; |
| 16 | +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; |
14 | 17 | import org.bukkit.util.Vector; |
15 | 18 | import org.jetbrains.annotations.NotNull; |
16 | 19 |
|
@@ -77,6 +80,21 @@ public final void onPlayerMove(final PlayerMoveEvent event) { |
77 | 80 | } |
78 | 81 | } |
79 | 82 |
|
| 83 | + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) |
| 84 | + // high priority so we ignore teleports if enderpearls are blocked |
| 85 | + public final void onPlayerTeleport(final PlayerTeleportEvent event) { |
| 86 | + if (event.getCause() != TeleportCause.ENDER_PEARL) |
| 87 | + return; |
| 88 | + final Player player = event.getPlayer(); |
| 89 | + final CombatPlayer pvplayer = playerManager.get(player); |
| 90 | + final Location locTo = event.getTo(); |
| 91 | + final Location locFrom = event.getFrom(); |
| 92 | + if (pvplayer.isInCombat() && !depManager.canAttackAt(null, locTo) && depManager.canAttackAt(null, locFrom)) { |
| 93 | + event.setCancelled(true); |
| 94 | + pvplayer.message(Lang.PUSHBACK_WARNING); |
| 95 | + } |
| 96 | + } |
| 97 | + |
80 | 98 | @NotNull |
81 | 99 | private Vector sanitizeVector(@NotNull final Vector vel) { |
82 | 100 | if (Double.isNaN(vel.getX())) |
|
0 commit comments