How to fix npe when trying to damage entity

Discussion in 'Plugin Development' started by man_in_matrix, Aug 25, 2021.

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

    man_in_matrix

    So I made this custom damage system using a database that cancels the original attack of a player if the player attacks a creeper (For test purposes).

    When I run the code inside of a try-catch is warns me about an NPE and nothing happens.

    Error:
    Code:
    [12:06:09] [Server thread/WARN]: java.lang.NullPointerException
    [12:06:09] [Server thread/WARN]:        at me.neo.terminator.Listeners.EntityDamage.onDamage(EntityDamage.java:40)
    [12:06:09] [Server thread/WARN]:        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [12:06:09] [Server thread/WARN]:        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [12:06:09] [Server thread/WARN]:        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [12:06:09] [Server thread/WARN]:        at java.lang.reflect.Method.invoke(Method.java:498)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEvent(CraftEventFactory.java:251)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:980)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:867)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:823)
    [12:06:09] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:1012)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity0(EntityLiving.java:1861)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity(EntityLiving.java:1238)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.EntityMonster.damageEntity(SourceFile:73)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.EntityHuman.attack(EntityHuman.java:1162)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.EntityPlayer.attack(EntityPlayer.java:1786)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:2149)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(SourceFile:74)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(SourceFile:13)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:28)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(SourceFile:144)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(SourceFile:118)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1061)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1054)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(SourceFile:127)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1038)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:970)
    [12:06:09] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:273)
    [12:06:09] [Server thread/WARN]:        at java.lang.Thread.run(Thread.java:748)
    And here is the code that creates the NPE:
    Code:
    package me.neo.terminator.Listeners;
    
    import java.util.List;
    
    import org.bukkit.ChatColor;
    import org.bukkit.entity.ArmorStand;
    import org.bukkit.entity.Creeper;
    import org.bukkit.entity.Damageable;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.persistence.PersistentDataContainer;
    
    import me.neo.terminator.sql.SQLGetter;
    
    @SuppressWarnings("unused")
    public class EntityDamage implements Listener {
    
        private SQLGetter data;
      
        @EventHandler
        public void onDamage(EntityDamageByEntityEvent event) {  
            if (event.getEntity() instanceof Creeper) {
            if (event.getDamager() instanceof Player) {
                  Player player = (Player) event.getDamager();
                  Entity entity = event.getEntity();
                  ItemStack heldItem = player.getInventory().getItemInMainHand();
                  ItemMeta meta = heldItem.getItemMeta();
                  if (meta == null)
                    return;
                  List<String> strings = meta.getLore();
                  if (strings == null)
                    return;
                 event.setCancelled(true);
                 try {
                     ((Damageable) entity).damage(data.getStrength(player.getUniqueId()) + data.getDamage(player.getUniqueId()));
                     player.sendMessage(ChatColor.RED + "Str Damage: " + data.getStrength(player.getUniqueId()) + ChatColor.RED + "Damage: " + data.getDamage(player.getUniqueId()));
                 } catch (NullPointerException e) {
                     e.printStackTrace();
                 }        
          }
        }         
      }      
    }
    
    If someone could tell me how to fix it would be greatly appreciated :)
    (Sorry about having to scroll right :p)
     
  2. Offline

    Kars

    data is null. You have not initialized the SQLGetter.
     
Thread Status:
Not open for further replies.

Share This Page