Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.gmail.filoghost.healthbar;
- import net.minecraft.server.v1_5_R2.Scoreboard;
- import org.bukkit.craftbukkit.v1_5_R2.CraftWorld;
- import org.bukkit.Bukkit;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.EntityDamageByEntityEvent;
- import org.bukkit.event.entity.EntityDamageEvent;
- import org.bukkit.event.entity.EntityRegainHealthEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.plugin.Plugin;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scheduler.BukkitRunnable;
- import org.bukkit.scheduler.BukkitTask;
- public class DefaultListener extends JavaPlugin implements Listener {
- final Plugin instance = Main.main;
- final Boolean wantPlayerBars = instance.getConfig().getBoolean("player-bars.enable");
- final Boolean wantMobBars = instance.getConfig().getBoolean("mob-bars.enable");
- final Boolean playerTextMode = instance.getConfig().getBoolean("player-bars.text-mode");
- final Boolean mobTextMode = instance.getConfig().getBoolean("mob-bars.text-mode");
- Scoreboard sb = (((CraftWorld)Bukkit.getWorlds().get(0)).getHandle()).getScoreboard();
- public void onPlayerJoinEvent(PlayerJoinEvent event) {
- sb.addPlayerToTeam(event.getPlayer().getName(), sb.getTeam("Health0"));
- }
- @EventHandler
- public void onEntityDamageEvent(EntityDamageEvent event) {
- Entity entity = event.getEntity();
- if (entity instanceof Player) {
- if (!wantPlayerBars) { return; }
- Player player = (Player) entity;
- playerBarIsDisplayed(player);
- displayPlayerHealthBarAndHideAfterTime(player);
- return;
- }
- if (entity instanceof LivingEntity) {
- if (!wantMobBars) { return; }
- LivingEntity mob = (LivingEntity) entity;
- String mobName = mob.getCustomName();
- if (mobName == null) {
- displayMobHealthBarAndHideAfterTime(mob, true);
- return;
- }
- else if (mobName.contains("█") || mobName.contains("▌") || mobName.contains("/§r")) {
- displayMobHealthBarAndHideAfterTime(mob, false);
- return;
- }
- //else the mob has a custom name, and don't touch it
- }
- }
- @EventHandler
- public void onEntityRegain(EntityRegainHealthEvent event) {
- Entity entity = event.getEntity();
- if (entity instanceof Player) {
- if (!wantPlayerBars) { return; }
- final Player player = (Player) entity;
- if (playerBarIsDisplayed(player)) {
- displayPlayerHealthBarAndHideAfterTime(player);
- }
- }
- if (entity instanceof LivingEntity) {
- if (!wantMobBars) { return; }
- LivingEntity mob = (LivingEntity) entity;
- String mobName = mob.getCustomName();
- if (mobName == null) {
- displayMobHealthBarAndHideAfterTime(mob, true);
- return;
- }
- else if (mobName.contains("█") || mobName.contains("▌") || mobName.contains("/§r")) {
- displayMobHealthBarAndHideAfterTime(mob, false);
- return;
- }
- }
- }
- private String getDisplayString(int health) {
- switch (health) {
- case 0: return "";
- case 1: return "§c▌ ";
- case 2: return "§c█ ";
- case 3: return "§c█▌ ";
- case 4: return "§c██ ";
- case 5: return "§e██▌ ";
- case 6: return "§e███ ";
- case 7: return "§e███▌ ";
- case 8: return "§e████ ";
- case 9: return "§e████▌ ";
- case 10: return "§e█████ ";
- case 11: return "§a█████▌ ";
- case 12: return "§a██████ ";
- case 13: return "§a██████▌ ";
- case 14: return "§a███████ ";
- case 15: return "§a███████▌ ";
- case 16: return "§a████████ ";
- case 17: return "§a████████▌ ";
- case 18: return "§a█████████ ";
- case 19: return "§a█████████▌ ";
- case 20: return "§a██████████";
- default: return "";
- }
- }
- private void displayMobHealthBarAndHideAfterTime(final LivingEntity mob, final boolean checkIfWasDamagedByEntity) {
- instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
- public void run() {
- if (checkIfWasDamagedByEntity) {
- if (!(mob.getLastDamageCause() instanceof EntityDamageByEntityEvent)) { return; }
- }
- final int health = mob.getHealth();
- //if mob is dead don't check anything, just remove its custom name
- if (health == 0) {
- mob.setCustomName("");
- mob.setCustomNameVisible(false);
- return;
- }
- String mobType = mob.getType().toString();
- if (mobType.equals("WITHER") || mobType.equals("ENDER_DRAGON")) { return; } //do not display health for wither and enderdragon
- int maxHealth = mob.getMaxHealth();
- if (mobTextMode) {
- mob.setCustomName(Integer.toString(health) + "/§r" + Integer.toString(maxHealth));
- }
- else {
- if (maxHealth != 20) { mob.setCustomName(getDisplayString(roundToNearest((((double) health)/((double) maxHealth)) * 20.0))); }
- else { mob.setCustomName(getDisplayString(health)); }
- }
- mob.setCustomNameVisible(true);
- instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
- public void run() {
- if (!mob.isDead()) {
- if (health == mob.getHealth()) {
- //if previous health is the same, hides the health bar
- mob.setCustomName("");
- mob.setCustomNameVisible(false);
- }
- }
- }
- }, 100L);
- }
- }, 0L);
- }
- private void displayPlayerHealthBarAndHideAfterTime(final Player player) {
- instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
- public void run() {
- sb.addPlayerToTeam(player.getName(), sb.getTeam("Health" + Integer.toString(player.getHealth())));
- final int health = player.getHealth();
- instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, new Runnable() {
- public void run() {
- if (player.isDead() || !(player.isOnline())) { return; }
- if (health == player.getHealth()) {
- //if previous health is the same, hides the health bar
- sb.addPlayerToTeam(player.getName(), sb.getTeam("Health0"));
- }
- }
- }, 100L);
- }
- }, 0L);
- }
- private boolean playerBarIsDisplayed(Player player) {
- try {
- String teamName = sb.getPlayerTeam(player.getName()).getName();
- if ((teamName).equals("Health0")) return false;
- else return true;
- }
- catch (NullPointerException e) {
- return false;
- }
- }
- private int roundToNearest(double d) {
- int i = (int) d;
- double result = d - (double) i;
- if (result<0.5) {return i;}
- else{return i+1;}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement