package com.SirBlobman.combatlogx.expansion.cheat.prevention.listener; import java.util.List; import com.SirBlobman.combatlogx.api.ICombatLogX; import com.SirBlobman.combatlogx.api.event.PlayerPreTagEvent; import com.SirBlobman.combatlogx.api.event.PlayerUntagEvent.UntagReason; import com.SirBlobman.combatlogx.api.expansion.Expansion; import com.SirBlobman.combatlogx.api.utility.ICombatManager; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerTeleportEvent; public class ListenerTeleport implements Listener { private final Expansion expansion; private final ICombatLogX plugin; public ListenerTeleport(Expansion expansion) { this.expansion = expansion; this.plugin = this.expansion.getPlugin(); } private boolean isAllowed(PlayerTeleportEvent.TeleportCause cause) { FileConfiguration config = this.expansion.getConfig("cheat-prevention.yml"); List<String> allowedCauseList = config.getStringList("teleportation.allowed-cause-list"); String causeName = cause.name(); return allowedCauseList.contains(causeName); } @EventHandler(priority=EventPriority.HIGH, ignoreCancelled=true) public void onTeleport(PlayerTeleportEvent e) { FileConfiguration config = this.expansion.getConfig("cheat-prevention.yml"); if(!config.getBoolean("teleportation.prevent-teleport")) return; Player player = e.getPlayer(); ICombatManager manager = this.plugin.getCombatManager(); if(!manager.isInCombat(player)) return; PlayerTeleportEvent.TeleportCause cause = e.getCause(); if(isAllowed(cause)) { if(cause == PlayerTeleportEvent.TeleportCause.ENDER_PEARL && config.getBoolean("teleportation.restart-timer-for-ender-pearl")) { manager.tag(player, null, PlayerPreTagEvent.TagType.UNKNOWN, PlayerPreTagEvent.TagReason.UNKNOWN); } return; } e.setCancelled(true); String message = this.plugin.getLanguageMessageColoredWithPrefix("cheat-prevention.teleportation.block-" + (cause == PlayerTeleportEvent.TeleportCause.ENDER_PEARL ? "pearl" : "other")); this.plugin.sendMessage(player, message); } @EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true) public void afterTeleport(PlayerTeleportEvent e) { FileConfiguration config = this.expansion.getConfig("cheat-prevention.yml"); if(!config.getBoolean("teleportation.untag-on-teleport")) return; Player player = e.getPlayer(); ICombatManager manager = this.plugin.getCombatManager(); if(!manager.isInCombat(player)) return; manager.untag(player, UntagReason.EXPIRE); } }