package com.gmail.nossr50.runnables.skills; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.skills.SuperAbilityType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.player.NotificationManager; import com.gmail.nossr50.util.skills.ParticleEffectUtils; import com.gmail.nossr50.util.skills.PerksUtils; import com.gmail.nossr50.util.skills.SkillUtils; import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; public class AbilityDisableTask extends BukkitRunnable { private McMMOPlayer mcMMOPlayer; private SuperAbilityType ability; public AbilityDisableTask(McMMOPlayer mcMMOPlayer, SuperAbilityType ability) { this.mcMMOPlayer = mcMMOPlayer; this.ability = ability; } @Override public void run() { if (!mcMMOPlayer.getAbilityMode(ability)) { return; } Player player = mcMMOPlayer.getPlayer(); switch (ability) { case SUPER_BREAKER: case GIGA_DRILL_BREAKER: SkillUtils.handleAbilitySpeedDecrease(player); // Fallthrough case BERSERK: if (Config.getInstance().getRefreshChunksEnabled()) { resendChunkRadiusAt(player, 1); } // Fallthrough default: break; } EventUtils.callAbilityDeactivateEvent(player, ability); mcMMOPlayer.setAbilityMode(ability, false); mcMMOPlayer.setAbilityInformed(ability, false); ParticleEffectUtils.playAbilityDisabledEffect(player); if (mcMMOPlayer.useChatNotifications()) { //player.sendMessage(ability.getAbilityOff()); NotificationManager.sendPlayerInformation(player, NotificationType.ABILITY_OFF, ability.getAbilityOff()); } SkillUtils.sendSkillMessage(player, NotificationType.SUPER_ABILITY_ALERT_OTHERS, ability.getAbilityPlayerOff()); new AbilityCooldownTask(mcMMOPlayer, ability).runTaskLaterAsynchronously(mcMMO.p, PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TICK_CONVERSION_FACTOR); } private void resendChunkRadiusAt(Player player, int radius) { Chunk chunk = player.getLocation().getChunk(); World world = player.getWorld(); int chunkX = chunk.getX(); int chunkZ = chunk.getZ(); for (int x = chunkX - radius; x <= chunkX + radius; x++) { for (int z = chunkZ - radius; z <= chunkZ + radius; z++) { world.refreshChunk(x, z); } } } }