Explorar el Código

Patch potential exploit relating to teleportation and acrobatics.

GJ hace 12 años
padre
commit
8939fc09b3

+ 9 - 0
src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java

@@ -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
      */

+ 5 - 0
src/main/java/com/gmail/nossr50/listeners/EntityListener.java

@@ -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()) {

+ 7 - 0
src/main/java/com/gmail/nossr50/listeners/PlayerListener.java

@@ -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();