Leveling Up Health

Discussion in 'Plugin Development' started by KeybladePaladin, Jun 7, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    KeybladePaladin

    Hullo! Call me Key :3
    I'm making a Health Levelup plugin, and I cant seem to get it to work!

    No errors in console.

    Note: This doesnt have all the levels yet (Stackable to 3 rows of hearts maximum)
    Code:
    package key.HealthUp.com;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Monster;
    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.EntityDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class HealthUp extends JavaPlugin implements Listener {
        public HealthUp plugin;
       
        @Override
        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this);
            useConfig();
            saveConfig();
        }
    
        @Override
        public void onDisable() {
            saveConfig();
        }
       
        private void useConfig() {
            YamlConfiguration config = (YamlConfiguration) getConfig();
    
        //Config Values
            config.addDefault("Messages.LevelUp.1", "&8-----------------------------------");
            config.addDefault("Messages.LevelUp.2", "&7You have leveled up!");
            config.addDefault("Messages.LevelUp.3", "&7Current Level: ");
            config.addDefault("Messages.LevelUp.4", "&7Health: + ");
            config.addDefault("Messages.LevelUp.5", "&7-----------------------------------");
            config.addDefault("Level.HealthIncrementPerLevel", "1");
            config.options().copyDefaults(true);
            saveConfig();
        }
    
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e) {
            Player p = e.getPlayer();
            if(this.getConfig().get(p.getName() + ".Level") == null){
                this.getConfig().set(p.getName() + ".Level", 0);
            }
        }
        Map<UUID, Integer> Kills = new HashMap <UUID, Integer>();
        @EventHandler
        public void gainLevel(EntityDeathEvent e) {
            Entity entity = e.getEntity();
            if(!(entity instanceof Monster)){
                if(entity.getLastDamageCause() instanceof EntityDamageByEntityEvent){
                    EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) entity.getLastDamageCause();
    
                    if(entityDamageByEntityEvent.getDamager() instanceof Player){
                        Player killer = (Player)entityDamageByEntityEvent.getDamager();
                        this.getConfig().set(killer.getName() + ".Level", this.getConfig().getInt(killer.getName() + ".Level") + 1);
                        Kills.put(killer.getUniqueId(), +1);
                          if(Kills.containsValue(100)) {
                              killer.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("Messages.LevelUp.1")));
                              killer.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("Messages.LevelUp.2")));
                              killer.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("Messages.LevelUp.3") + this.getConfig().get(killer.getName() + ".Level")));
                              killer.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("Messages.LevelUp.4") + this.getConfig().getInt("Level.HealthIncrementPerLevel")));
                              killer.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("Messages.LevelUp.5")));
                              killer.setMaxHealth(this.getConfig().getInt("Level.HealthInt")+20);
                          }
                        }
                    }
                }
            }
        }
     
  2. Do some debugging in the event, and also, instead of checking the last damage cause, u can also use Entity#getKiller() :p
     
  3. Offline

    KeybladePaladin

    @megamichiel
    You can't use getKiller in Entity Deaths, and what do you mean by debugging?
     
  4. Offline

    Signatured

    You could use EntityDamageByEntityEvent, check if the damage is greater than the damaged entities health, and count deaths that way; however, I believe PlayerDeathEvent has a getKiller() method.
     
  5. @KeybladePaladin
    Woops, I ment LivingEntity#getKiller(), when an entity dies it has to be a living entity, so it'll be fine if you cast from the entity to a living entity. And debugging is broadcasting/printing some messages in some parts of the code to see where it cuts off
     
Thread Status:
Not open for further replies.

Share This Page