Advertisement
Guest User

Untitled

a guest
Mar 31st, 2013
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.25 KB | None | 0 0
  1. package com.gmail.filoghost.healthbar;
  2.  
  3. import net.minecraft.server.v1_5_R2.Scoreboard;
  4. import org.bukkit.craftbukkit.v1_5_R2.CraftWorld;
  5.  
  6. import org.bukkit.Bukkit;
  7. import org.bukkit.entity.Entity;
  8. import org.bukkit.entity.LivingEntity;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.event.EventHandler;
  11. import org.bukkit.event.Listener;
  12. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  13. import org.bukkit.event.entity.EntityDamageEvent;
  14. import org.bukkit.event.entity.EntityRegainHealthEvent;
  15. import org.bukkit.event.player.PlayerJoinEvent;
  16. import org.bukkit.plugin.Plugin;
  17. import org.bukkit.plugin.java.JavaPlugin;
  18. import org.bukkit.scheduler.BukkitRunnable;
  19. import org.bukkit.scheduler.BukkitTask;
  20.  
  21.  
  22. public class DefaultListener extends JavaPlugin implements Listener {
  23.    
  24.     final Plugin instance = Main.main;
  25.     final Boolean wantPlayerBars = instance.getConfig().getBoolean("player-bars.enable");
  26.     final Boolean wantMobBars = instance.getConfig().getBoolean("mob-bars.enable");
  27.     final Boolean playerTextMode = instance.getConfig().getBoolean("player-bars.text-mode");
  28.     final Boolean mobTextMode = instance.getConfig().getBoolean("mob-bars.text-mode");
  29.     Scoreboard sb = (((CraftWorld)Bukkit.getWorlds().get(0)).getHandle()).getScoreboard();
  30.    
  31.  
  32.     public void onPlayerJoinEvent(PlayerJoinEvent event) {
  33.         sb.addPlayerToTeam(event.getPlayer().getName(), sb.getTeam("Health0"));
  34.     }
  35.    
  36.     @EventHandler
  37.      public void onEntityDamageEvent(EntityDamageEvent event) {
  38.          Entity entity = event.getEntity();
  39.          if (entity instanceof Player) {
  40.              if (!wantPlayerBars) { return; }
  41.              Player player = (Player) entity;
  42.              playerBarIsDisplayed(player);
  43.              displayPlayerHealthBarAndHideAfterTime(player);
  44.              return;
  45.          }
  46.          if (entity instanceof LivingEntity) {
  47.               if (!wantMobBars) { return; }
  48.               LivingEntity mob = (LivingEntity) entity;
  49.               String mobName = mob.getCustomName();
  50.               if (mobName == null) {
  51.                   displayMobHealthBarAndHideAfterTime(mob, true);
  52.                   return;
  53.               }
  54.               else if (mobName.contains("█") || mobName.contains("▌") || mobName.contains("/§r")) {
  55.                   displayMobHealthBarAndHideAfterTime(mob, false);
  56.                   return;
  57.               }
  58.               //else the mob has a custom name, and don't touch it
  59.          }
  60.      }
  61.    
  62.     @EventHandler
  63.      public void onEntityRegain(EntityRegainHealthEvent event) {
  64.         Entity entity = event.getEntity();
  65.         if (entity instanceof Player) {
  66.             if (!wantPlayerBars) { return; }
  67.             final Player player = (Player) entity;
  68.             if (playerBarIsDisplayed(player)) {
  69.                 displayPlayerHealthBarAndHideAfterTime(player);
  70.             }
  71.         }
  72.         if (entity instanceof LivingEntity) {
  73.             if (!wantMobBars) { return; }
  74.               LivingEntity mob = (LivingEntity) entity;
  75.               String mobName = mob.getCustomName();
  76.               if (mobName == null) {
  77.                   displayMobHealthBarAndHideAfterTime(mob, true);
  78.                   return;
  79.               }
  80.               else if (mobName.contains("█") || mobName.contains("▌") || mobName.contains("/§r")) {
  81.                   displayMobHealthBarAndHideAfterTime(mob, false);
  82.                   return;
  83.               }
  84.         }
  85.     }
  86.    
  87.  
  88.     private String getDisplayString(int health) {
  89.        
  90.         switch (health) {
  91.           case 0: return "";
  92.           case 1: return  "§c▌                   ";
  93.           case 2: return  "§c█                  ";
  94.           case 3: return  "§c█▌                 ";
  95.           case 4: return  "§c██                ";
  96.           case 5: return  "§e██▌               ";
  97.           case 6: return  "§e███              ";
  98.           case 7: return  "§e███▌             ";
  99.           case 8: return  "§e████            ";
  100.           case 9: return  "§e████▌           ";
  101.           case 10: return "§e█████          ";
  102.           case 11: return "§a█████▌         ";
  103.           case 12: return "§a██████        ";
  104.           case 13: return "§a██████▌       ";
  105.           case 14: return "§a███████      ";
  106.           case 15: return "§a███████▌     ";
  107.           case 16: return "§a████████    ";
  108.           case 17: return "§a████████▌   ";
  109.           case 18: return "§a█████████  ";
  110.           case 19: return "§a█████████▌ ";
  111.           case 20: return "§a██████████";
  112.           default: return "";
  113.           }
  114.     }
  115.    
  116.     private void displayMobHealthBarAndHideAfterTime(final LivingEntity mob, final boolean checkIfWasDamagedByEntity) {
  117.         instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
  118.               public void run() {
  119.                   if (checkIfWasDamagedByEntity) {
  120.                       if (!(mob.getLastDamageCause() instanceof EntityDamageByEntityEvent)) { return; }
  121.                   }
  122.                   final int health = mob.getHealth();
  123.                   //if mob is dead don't check anything, just remove its custom name
  124.                   if (health == 0) {
  125.                       mob.setCustomName("");
  126.                       mob.setCustomNameVisible(false);
  127.                       return;
  128.                       }
  129.                   String mobType = mob.getType().toString();
  130.                   if (mobType.equals("WITHER") || mobType.equals("ENDER_DRAGON")) { return; } //do not display health for wither and enderdragon
  131.                   int maxHealth = mob.getMaxHealth();
  132.                   if (mobTextMode) {
  133.                       mob.setCustomName(Integer.toString(health) + "/§r" + Integer.toString(maxHealth));
  134.                   }
  135.                   else {
  136.                         if (maxHealth != 20) { mob.setCustomName(getDisplayString(roundToNearest((((double) health)/((double) maxHealth)) * 20.0))); }
  137.                         else { mob.setCustomName(getDisplayString(health)); }
  138.                   }
  139.                   mob.setCustomNameVisible(true);
  140.                   instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
  141.                       public void run() {
  142.                           if (!mob.isDead()) {
  143.                             if (health == mob.getHealth()) {
  144.                                 //if previous health is the same, hides the health bar
  145.                                 mob.setCustomName("");
  146.                                 mob.setCustomNameVisible(false);
  147.                                 }
  148.                           }
  149.                       }
  150.                     }, 100L);
  151.               }
  152.             }, 0L);
  153.        
  154.     }
  155.    
  156.     private void displayPlayerHealthBarAndHideAfterTime(final Player player) {
  157.         instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
  158.               public void run() {
  159.                  sb.addPlayerToTeam(player.getName(), sb.getTeam("Health" + Integer.toString(player.getHealth())));
  160.                  final int health = player.getHealth();
  161.                  instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
  162.                       public void run() {
  163.                          if (player.isDead() || !(player.isOnline())) { return; }
  164.                         if (health == player.getHealth()) {
  165.                             //if previous health is the same, hides the health bar
  166.                             sb.addPlayerToTeam(player.getName(), sb.getTeam("Health0"));
  167.                         }
  168.                       }
  169.                 }, 100L);
  170.               }
  171.             }, 0L);
  172.     }
  173.    
  174.     private boolean playerBarIsDisplayed(Player player) {
  175.         try {
  176.             String teamName = sb.getPlayerTeam(player.getName()).getName();
  177.             if ((teamName).equals("Health0")) return false;
  178.             else return true;
  179.         }
  180.         catch (NullPointerException e) {
  181.             return false;
  182.         }
  183.     }
  184.    
  185.    
  186.     private int roundToNearest(double d) {
  187.         int i = (int) d;
  188.         double result = d - (double) i;
  189.         if (result<0.5) {return i;}
  190.         else{return i+1;}
  191.     }
  192.    
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement