AbilityDisableTask.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.gmail.nossr50.runnables.skills;
  2. import com.gmail.nossr50.config.AdvancedConfig;
  3. import com.gmail.nossr50.config.Config;
  4. import com.gmail.nossr50.datatypes.interactions.NotificationType;
  5. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  6. import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
  7. import com.gmail.nossr50.mcMMO;
  8. import com.gmail.nossr50.util.EventUtils;
  9. import com.gmail.nossr50.util.Misc;
  10. import com.gmail.nossr50.util.player.NotificationManager;
  11. import com.gmail.nossr50.util.skills.ParticleEffectUtils;
  12. import com.gmail.nossr50.util.skills.PerksUtils;
  13. import com.gmail.nossr50.util.skills.SkillUtils;
  14. import org.bukkit.Chunk;
  15. import org.bukkit.World;
  16. import org.bukkit.entity.Player;
  17. import org.bukkit.scheduler.BukkitRunnable;
  18. public class AbilityDisableTask extends BukkitRunnable {
  19. private final McMMOPlayer mcMMOPlayer;
  20. private final SuperAbilityType ability;
  21. public AbilityDisableTask(McMMOPlayer mcMMOPlayer, SuperAbilityType ability) {
  22. this.mcMMOPlayer = mcMMOPlayer;
  23. this.ability = ability;
  24. }
  25. @Override
  26. public void run() {
  27. if (!mcMMOPlayer.getAbilityMode(ability)) {
  28. return;
  29. }
  30. Player player = mcMMOPlayer.getPlayer();
  31. switch (ability) {
  32. case SUPER_BREAKER:
  33. case GIGA_DRILL_BREAKER:
  34. SkillUtils.handleAbilitySpeedDecrease(player);
  35. // Fallthrough
  36. case BERSERK:
  37. if (Config.getInstance().getRefreshChunksEnabled()) {
  38. resendChunkRadiusAt(player);
  39. }
  40. // Fallthrough
  41. default:
  42. break;
  43. }
  44. EventUtils.callAbilityDeactivateEvent(player, ability);
  45. mcMMOPlayer.setAbilityMode(ability, false);
  46. mcMMOPlayer.setAbilityInformed(ability, false);
  47. ParticleEffectUtils.playAbilityDisabledEffect(player);
  48. if (mcMMOPlayer.useChatNotifications()) {
  49. //player.sendMessage(ability.getAbilityOff());
  50. NotificationManager.sendPlayerInformation(player, NotificationType.ABILITY_OFF, ability.getAbilityOff());
  51. }
  52. if (AdvancedConfig.getInstance().sendAbilityNotificationToOtherPlayers()) {
  53. SkillUtils.sendSkillMessage(player, NotificationType.SUPER_ABILITY_ALERT_OTHERS, ability.getAbilityPlayerOff());
  54. }
  55. new AbilityCooldownTask(mcMMOPlayer, ability).runTaskLater(mcMMO.p, PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TICK_CONVERSION_FACTOR);
  56. }
  57. private void resendChunkRadiusAt(Player player) {
  58. Chunk chunk = player.getLocation().getChunk();
  59. World world = player.getWorld();
  60. int chunkX = chunk.getX();
  61. int chunkZ = chunk.getZ();
  62. int radius = 1;
  63. for (int x = chunkX - radius; x <= chunkX + radius; x++) {
  64. for (int z = chunkZ - radius; z <= chunkZ + radius; z++) {
  65. world.refreshChunk(x, z);
  66. }
  67. }
  68. }
  69. }