Can't register player as Entity in EntityDamageByEntityEvent

Discussion in 'Plugin Development' started by SiezureSalad, Nov 23, 2017.

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

    SiezureSalad

    Code:
    package me.vaape;
    
    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.DamageCause;
    
    public class PlayerListener implements Listener{
       
        public PlayerListener(DamageHandler plugin) {
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
        }
       
        @EventHandler
        public void onDamageEvent(EntityDamageByEntityEvent event) {
            Player player = (Player) event.getEntity();
            player.sendMessage("You are a player");
            if (event.getCause() == DamageCause.ENTITY_ATTACK) {
                    player.sendMessage("Reduced attack damage");
                    double damage = event.getDamage();
                    event.setDamage(damage * 0.5);
                }
            }
        }
    
    Debug won't work, don't get tje "You are a player" or anything. Am I using the event wrong?
     
  2. Offline

    Caderape2

  3. Offline

    timtower Administrator Administrator Moderator

    @SiezureSalad Check if the entity is a player first before casting.
     
  4. Offline

    SiezureSalad

    I now have this:

    Code:
    package me.vaape;
    
    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.DamageCause;
    
    public class PlayerListener implements Listener{
       
        public PlayerListener(DamageReduced plugin) {
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
        }
       
        @EventHandler
        public void onDamage(EntityDamageByEntityEvent event) {
            if (event.getEntity() instanceof Player) {
                Player player = (Player) event.getEntity();
                player.sendMessage("You are the entity");
                if (event.getCause() == DamageCause.ENTITY_ATTACK) {
                    event.setDamage(event.getDamage() * 0.5);
                    player.sendMessage("DamageCause was entity_attack");
                }
            }
           
        }
    }
    
    But I'm getting the error when starting up:

    Code:
    [00:45:11 ERROR]: Error occurred while enabling DamageReduced v1.0 (Is it up to date?)
    java.lang.NoSuchMethodError: me.vaape.PlayerListener.<init>(Lme/vaape/DamageReduced;)V
            at me.vaape.DamageReduced.onEnable(DamageReduced.java:10) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:292) ~[spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at org.bukkit.craftbukkit.v1_10_R1.CraftServer.enablePlugin(CraftServer.java:373) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at org.bukkit.craftbukkit.v1_10_R1.CraftServer.enablePlugins(CraftServer.java:323) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at net.minecraft.server.v1_10_R1.MinecraftServer.t(MinecraftServer.java:412) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at net.minecraft.server.v1_10_R1.MinecraftServer.l(MinecraftServer.java:377) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at net.minecraft.server.v1_10_R1.MinecraftServer.a(MinecraftServer.java:332) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at net.minecraft.server.v1_10_R1.DedicatedServer.init(DedicatedServer.java:271) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:535) [spigot-1.10.2.jar:git-Spigot-de459a2-51263e9]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_151]
     
  5. Offline

    Zombie_Striker

    @SiezureSalad
    Why are you still on 1.10? There is no reason to stay on older updates. You should update your server.

    The error message seems to be that the constructor does not exist. Have you tried re-exporting the project and restarting the server? If so, then post the main class.
     
  6. Offline

    SiezureSalad

    Well I'm meant to be on 1.10.2 because I'm creating a PvP practice server for another server that I play on with the same setup like having lowered damage and increased healing from healthpots so I have to stay on 1.10.2 because they are on it.

    I re-exported it and didn't change a thing here's my main class:

    Code:
    package me.vaape;
    
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class DamageReduced extends JavaPlugin {
      
        @Override
        public void onEnable() {
            getLogger().info("DamageReduced has been enabled!");
            new PlayerListener(this);
        }
      
        @Override
        public void onDisable() {
        }
    }
    
    Listener:

    Code:
    package me.vaape;
    
    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.DamageCause;
    
    public class PlayerListener implements Listener{
      
        public PlayerListener(DamageReduced plugin) {
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
        }
      
        @EventHandler
        public void onDamage(EntityDamageByEntityEvent event) {
            if (event.getEntity() instanceof Player) {
                Player player = (Player) event.getEntity();
                player.sendMessage("You are the entity");
                if (event.getCause() == DamageCause.ENTITY_ATTACK) {
                    event.setDamage(event.getDamage() * 0.5);
                    player.sendMessage("DamageCause was entity_attack");
                }
            }
          
        }
    }
    
    Edit: Solved, more than one of my plugins used the package me.vaape so it wasn't working but now I have a kind of retarded plugin.yml since it now says
    Code:
    main: me.vaape.damagereduction.DamageReduction
     
    Last edited: Nov 24, 2017
  7. Offline

    Unknown123

    There are Reasons to stay at older updates. I'm using 1.8.8 for example.
     
    Last edited: Nov 29, 2017
  8. That's a normal YML for finding the main. Large projects have several packages but mostly under one main type.

    Screenshot crops out that they are all sub-packages of com.whodoneit
    Ex:[​IMG]

    With my main class being inside the main package.

    Also: Inside of the plugin.yml the main calls for the main class, not the 'main' package name. Several classes can be used inside of one package.
     
    Last edited: Nov 25, 2017
Thread Status:
Not open for further replies.

Share This Page