Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,22 @@ public void onPlayerKickBanned(final AsyncPlayerPreLoginEvent event) {
}
}

private boolean isTeleportListenerIgnored() {
List<List<String>> ignoreList = ess.getSettings().getBackInListenerIgnoreList();

if (ignoreList.isEmpty())
return false;

for (StackTraceElement stackElement : Thread.currentThread().getStackTrace()) {
String representation = (stackElement.getClassName() + "#" + stackElement.getMethodName()).toLowerCase();

if (ignoreList.stream().anyMatch(keywords -> keywords.stream().allMatch(representation::contains)))
return true;
}

return false;
}

@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerTeleport(final PlayerTeleportEvent event) {
final Player player = event.getPlayer();
Expand All @@ -703,7 +719,8 @@ public void onPlayerTeleport(final PlayerTeleportEvent event) {
}
final User user = ess.getUser(player);
if (ess.getSettings().registerBackInListener() && user.isAuthorized("essentials.back.onteleport")) {
user.setLastLocation();
if (!isTeleportListenerIgnored())
user.setLastLocation();
}
if (ess.getSettings().isTeleportInvulnerability()) {
user.enableInvulnerabilityAfterTeleport();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,8 @@ public interface ISettings extends IConf {

boolean registerBackInListener();

List<List<String>> getBackInListenerIgnoreList();

boolean getDisableItemPickupWhileAfk();

EventPriority getRespawnPriority();
Expand Down
27 changes: 27 additions & 0 deletions Essentials/src/main/java/com/earth2me/essentials/Settings.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ public class Settings implements net.ess3.api.ISettings {
private KeepInvPolicy bindingItemPolicy;
private Set<String> noGodWorlds = new HashSet<>();
private boolean registerBackInListener;
private List<List<String>> backInListenerIgnoreList = new ArrayList<>();
private boolean disableItemPickupWhileAfk;
private long teleportInvulnerabilityTime;
private boolean teleportInvulnerability;
Expand Down Expand Up @@ -805,6 +806,7 @@ public void reloadConfig() {
teleportInvulnerability = _isTeleportInvulnerability();
disableItemPickupWhileAfk = _getDisableItemPickupWhileAfk();
registerBackInListener = _registerBackInListener();
backInListenerIgnoreList = _getBackInListenerIgnoreList();
cancelAfkOnInteract = _cancelAfkOnInteract();
cancelAfkOnMove = _cancelAfkOnMove();
getFreezeAfkPlayers = _getFreezeAfkPlayers();
Expand Down Expand Up @@ -1421,6 +1423,31 @@ public boolean registerBackInListener() {
return registerBackInListener;
}

@Override
public List<List<String>> getBackInListenerIgnoreList() {
return backInListenerIgnoreList;
}

private List<List<String>> _getBackInListenerIgnoreList() {
List<List<String>> ignoreList = new ArrayList<>();

for (String entry : config.getList("back-in-listener-ignore-list", String.class)) {
List<String> ignoreEntry = new ArrayList<>();

for (String keyword : entry.split(",")) {
keyword = keyword.trim();

if (!keyword.isEmpty())
ignoreEntry.add(keyword.toLowerCase());
}

if (!ignoreEntry.isEmpty())
ignoreList.add(ignoreEntry);
}

return ignoreList;
}

@Override
public int getMaxTreeCommandRange() {
return config.getInt("tree-command-range-limit", 300);
Expand Down
6 changes: 6 additions & 0 deletions Essentials/src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,12 @@ tree-command-range-limit: 300
# If you set this to true, any plugin that uses teleport will have the previous location registered.
register-back-in-listener: false

# If some events of a teleportation are to be ignored selectively, they can be described as an entry of this list.
# For example, the elevators of CraftBook would be "com.sk89q.craftbook.mechanics.Elevator#teleportPlayer".
# Each entry down below can be made up of comma-separated and case-insensitive keywords, for abbreviation and generality.
# Thus, "craftbook,elevator" would suffice to match the fully-qualified name mentioned above.
back-in-listener-ignore-list: []

# The delay, in seconds, before people can cause attack damage after logging in.
# This prevents players from exploiting the temporary invulnerability they receive upon joining.
login-attack-delay: 5
Expand Down