On damage event error

Discussion in 'Plugin Development' started by jcpd910, Dec 18, 2014.

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

    jcpd910

    Hello, I am working on a plugin that turns gold armor into a hazard suit. What I need it to do is this:

    When the player takes damage,
    if the damage is from: lava, fire, lightning, drowning
    if the player is wearing a complete set of gold armor
    cancel the damage
    My code works for everything but water. The user won't take damage regardless of whether or not they are wearing a full set of gold. Here is my code:

    Code:
    package com.gmail.juliancpdavis.bettergold;
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.EntityType;
    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.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.potion.PotionEffect;
    import org.bukkit.potion.PotionEffectType;
    import org.bukkit.util.Vector;
    public final class BetterGold extends JavaPlugin implements Listener {
     @Override
     public void onEnable() {
     getLogger().info("onEnable has been invoked!");
     getServer().getPluginManager().registerEvents(this, this);
     }
     @Override
     public void onDisable() {
     getLogger().info("onDisable has been invoked!");
     }
     @Override
     public boolean onCommand(CommandSender sender, Command cmd, String label,
     String[] args) {
     Player s = (Player) sender; // defines player sender as s
     if (cmd.getName().equalsIgnoreCase("bettergold")) { // command label
     if (args.length > 1) {
     s.sendMessage("Incorrect Usage");
     s.sendMessage("Type /bettergold");
     return true;
     }
     if (args.length == 0) {
     s.sendMessage("Better Gold Commands: ?, help, info");
     return true;
     }
     if (args[1].equalsIgnoreCase("?")
     || args[1].equalsIgnoreCase("help")) {
     s.sendMessage("To utilize this plugin, wear gold armor, or use gold tools.");
     s.sendMessage("  Gold Helmet (Nothing else)");
     s.sendMessage("  Allows you to breath underwater!");
     s.sendMessage("  Complete Gold Armor Set");
     s.sendMessage("  Completely negates drowning, fire, lava, and lightning damage!");
     s.sendMessage("  Gold Axe");
     s.sendMessage("  Hit someone with this and you'll deal great knockback and slow them!");
     s.sendMessage("  Gold Sword");
     s.sendMessage("  Hit someone with this and you'll set them on fire!");
     s.sendMessage("  Gold Hoe");
     s.sendMessage("  Hit someone with this and you'll deal wither damage, and regenerate yourself!");
     return true;
     }
     if (args[1].equalsIgnoreCase("info")) {
     s.sendMessage("Better Gold (I can't believe its not butter!) Info");
     s.sendMessage("Version: 1.0.0");
     s.sendMessage("Author: jcpd910");
     return true;
     }
     }
     return false;
     }
     @EventHandler
     public void onPlayerImmunityDamage(EntityDamageEvent event) {
     if (event.getEntity() instanceof Player) {
     Player player = (Player) event.getEntity();
     player.getEquipment();
     if (event.getCause() == EntityDamageEvent.DamageCause.LAVA
     || event.getCause() == EntityDamageEvent.DamageCause.FIRE
     || event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK
     || event.getCause() == EntityDamageEvent.DamageCause.LIGHTNING) {
     if (isWearingAllGold(player)) {
     event.setCancelled(true);
     return;
     } else {
     event.setCancelled(false);
     return;
     }
     } else if (event.getCause() == EntityDamageEvent.DamageCause.DROWNING) {
     if (isWearingAllGold(player) == true) {
     event.setCancelled(true);
     player.setRemainingAir(40);
     return;
     } else {
     event.setCancelled(false);
     return;
     }
     }
     }
     }
     @EventHandler
     public void onEntityHurtEntity(EntityDamageByEntityEvent event) {
     Entity damager = event.getDamager();
     Entity defender = event.getEntity();
     Player playerAttacker;
     Player playerDefender;
     ItemStack gAxe = new ItemStack(Material.GOLD_AXE, 1);
     ItemStack gHoe = new ItemStack(Material.GOLD_HOE, 1);
     ItemStack gSword = new ItemStack(Material.GOLD_SWORD, 1);
     if (damager.getType() == EntityType.PLAYER) {
     playerAttacker = (Player) event.getDamager();
     if (playerAttacker.getItemInHand() == gAxe) {
     Vector velocity = defender.getVelocity();
     Vector hitVelocity = velocity.multiply(6);
     defender.setVelocity(hitVelocity);
     if (defender.getType() == EntityType.PLAYER) {
     playerDefender = (Player) event.getEntity();
     playerDefender.addPotionEffect(new PotionEffect(
     PotionEffectType.SLOW, 80, 2));
     }
     } else if (playerAttacker.getItemInHand() == gSword) {
     defender.setFireTicks(2);
     } else if (playerAttacker.getItemInHand() == gHoe) {
     if (defender.getType() == EntityType.PLAYER) {
     playerAttacker.addPotionEffect(new PotionEffect(
     PotionEffectType.REGENERATION, 60, 1));
     playerDefender = (Player) event.getEntity();
     playerDefender.addPotionEffect(new PotionEffect(
     PotionEffectType.WITHER, 60, 1));
     }
     }
     }
     }
     public boolean isWearingAllGold(Player player) {
     ItemStack helm = player.getInventory().getHelmet();
     ItemStack chest = player.getInventory().getChestplate();
     ItemStack legs = player.getInventory().getLeggings();
     ItemStack boots = player.getInventory().getBoots();
     if (helm.getType() == Material.GOLD_HELMET
     && chest.getType() == Material.GOLD_CHESTPLATE
     && legs.getType() == Material.GOLD_LEGGINGS
     && boots.getType() == Material.GOLD_BOOTS) {
     return true;
     } 
     if (helm.getType() != Material.GOLD_HELMET
     || chest.getType() != Material.GOLD_CHESTPLATE
     || legs.getType() != Material.GOLD_LEGGINGS
     || boots.getType() != Material.GOLD_BOOTS) {
     return false;
     } 
     return false;
     }
     public boolean isWearingOnlyGoldHelmet(Player player) {
     ItemStack helm = player.getInventory().getHelmet();
     ItemStack chest = player.getInventory().getChestplate();
     ItemStack legs = player.getInventory().getLeggings();
     ItemStack boots = player.getInventory().getBoots();
     if (helm.getType() == Material.GOLD_HELMET && chest.getType() == null
     && legs.getType() == null && boots.getType() == null) {
     return true;
     }
     return false;
     }
    }
    
    I can't figure out why it won't damage the player, do any of you know?
     
  2. Offline

    stenlankreijer

    @jcpd910
    As you see the event looks for EntityDamageByEntity and not by blocks.
    You should either use EntityDamageEvent or Both EntityDamageByBlockEvent and EntityDamageByEntityEvent

    Good luck!
     
  3. Offline

    SuperOriginal

    @stenlankreijer
    @jcpd910 Have you tried debugging?
     
  4. Offline

    stenlankreijer

  5. Offline

    SuperOriginal

    @stenlankreijer That's not the issue, if it is working with other damage causes. Also EntityDamageByBlockEvent extends EntityDamageEvent, the only reason you would use it is to get the specific block that damaged the player.
     
    Last edited: Dec 18, 2014
  6. Offline

    jcpd910

    @SuperOriginal How do I debug a plugin?
    Could the problem be with my Booleans?
     
    Last edited: Dec 18, 2014
  7. Offline

    SuperOriginal

    @jcpd910 I doubt this is a problem, but you can use if(Boolean) instead of if(boolean == true)

    To debug insert println statements throughout your code, then when the event is fired in different scenarios, check console for those print statements to see where your code reaches. That can help you isolate the issue.
     
  8. Offline

    jcpd910

    I'll be doing that ASAP.
    Expect a reply in about an hour or two.

    I figured it out, thank you so much!

    <Edited by bwfcwalshy: Merged posts, please use the edit button rather than double posting.>
     
    Last edited by a moderator: Dec 18, 2014
Thread Status:
Not open for further replies.

Share This Page