Patch potential exploit relating to teleportation and acrobatics.

This commit is contained in:
GJ 2013-07-24 13:57:53 -04:00
parent e0e574c19e
commit 8939fc09b3
3 changed files with 21 additions and 0 deletions

View File

@ -84,6 +84,7 @@ public class McMMOPlayer {
private int recentlyHurt;
private int respawnATS;
private int teleportATS;
private int chimeraWingLastUse;
private Location teleportCommence;
@ -343,6 +344,14 @@ public class McMMOPlayer {
respawnATS = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
}
public int getTeleportATS() {
return teleportATS;
}
public void actualizeTeleportATS() {
teleportATS = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
}
/*
* Repair Anvil Placement
*/

View File

@ -50,6 +50,7 @@ import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.player.UserManager;
import com.gmail.nossr50.util.skills.CombatUtils;
import com.gmail.nossr50.util.skills.SkillUtils;
public class EntityListener implements Listener {
private final mcMMO plugin;
@ -221,6 +222,10 @@ public class EntityListener implements Listener {
switch (cause) {
case FALL:
if (SkillUtils.calculateTimeLeft((long) mcMMOPlayer.getTeleportATS() * Misc.TIME_CONVERSION_FACTOR, 5, player) > 0) {
return;
}
AcrobaticsManager acrobaticsManager = mcMMOPlayer.getAcrobaticsManager();
if (acrobaticsManager.canRoll()) {

View File

@ -24,6 +24,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
import com.gmail.nossr50.mcMMO;
@ -66,6 +67,12 @@ public class PlayerListener implements Listener {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerTeleport(PlayerTeleportEvent event) {
UserManager.getPlayer(event.getPlayer()).actualizeTeleportATS();
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerDeathLowest(PlayerDeathEvent event) {
String deathMessage = event.getDeathMessage();