PlayerDeatEvent Error.

Discussion in 'Plugin Development' started by CroseBoy_99, Jul 3, 2017.

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

    CroseBoy_99

    How can I resolve the following error?
    Code:
    [00:16:23 ERROR]: Could not pass event PlayerDeathEvent to aHCF v1.1-RELEASE
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[PaperSpigot.jar:git-PaperSpigot-27]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[PaperSpigot.jar:git-PaperSpigot-27]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:509) [PaperSpigot.jar:git-PaperSpigot-27]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:494) [PaperSpigot.jar:git-PaperSpigot-27]
            at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:397) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityPlayer.die(EntityPlayer.java:386) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityLiving.damageEntity(EntityLiving.java:745) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityHuman.damageEntity(EntityHuman.java:766) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityPlayer.damageEntity(EntityPlayer.java:465) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityLiving.b(EntityLiving.java:874) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityHuman.b(EntityHuman.java:1378) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.Entity.a(Entity.java:809) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityLiving.a(EntityLiving.java:156) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.EntityPlayer.b(EntityPlayer.java:574) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:434) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.PacketPlayInFlying.a(SourceFile:137) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.PacketPlayInFlying.handle(SourceFile:8) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:189) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.ServerConnection.c(ServerConnection.java:81) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:789) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:307) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:638) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:544) [PaperSpigot.jar:git-PaperSpigot-27]
            at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [PaperSpigot.jar:git-PaperSpigot-27]
    Caused by: java.lang.NullPointerException
            at me.joeleoli.hcfactions.deathban.DeathBanManager.applyDeathBan(DeathBanManager.java:72) ~[?:?]
            at me.joeleoli.hcfactions.listener.DeathListener.onDeath(DeathListener.java:78) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_121]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_121]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_121]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_121]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:298) ~[PaperSpigot.jar:git-PaperSpigot-27]
            ... 23 more
    
     
    Last edited: Jul 5, 2017
  2. Offline

    timtower Administrator Administrator Moderator

    @CroseBoy_99 Something is null in your DeathBanManager, we need to see the code to know what.
     
  3. Offline

    CroseBoy_99

    DeathBanManager,

    Code:
    package me.joeleoli.hcfactions.deathban;
    
    
    import lombok.Getter;
    import me.joeleoli.hcfactions.FactionsPlugin;
    import me.joeleoli.hcfactions.file.DataFactory;
    import me.joeleoli.hcfactions.file.FileConfig;
    import me.joeleoli.hcfactions.utils.LocationUtils;
    import me.joeleoli.hcfactions.utils.TimeUtils;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.OfflinePlayer;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
    import org.bukkit.scheduler.BukkitRunnable;
    
    import java.sql.Timestamp;
    import java.util.*;
    
    public class DeathBanManager implements Listener {
    
        private FileConfig config;
        private @Getter Map<UUID, DeathBan> deathBans;
        private List<UUID> rejoin;
    
        public DeathBanManager() {
            this.config = new FileConfig("deathbans.yml");
            this.deathBans = new HashMap<>();
            this.rejoin = new ArrayList<>();
    
            loadDeathBans();
    
            Bukkit.getPluginManager().registerEvents(this, FactionsPlugin.getInstance());
        }
    
        private void loadDeathBans() {
            if(config.getConfig().contains("deathbans")) {
                for(String key : config.getConfig().getConfigurationSection("deathbans").getKeys(false)) {
                    UUID uuid = UUID.fromString(key);
                    OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
                    OfflinePlayer killer = config.getConfig().getString("deathbans." + player.getUniqueId() + ".killer").equalsIgnoreCase("none") ? null : Bukkit.getOfflinePlayer(config.getConfig().getString("deathbans." + uuid.toString() + ".killer"));
                    Location location = LocationUtils.getLocation(config.getConfig().getString("deathbans." + uuid.toString() + ".location"));
                    Timestamp timestamp = new Timestamp(config.getConfig().getLong("deathbans." + uuid.toString() + ".timestamp"));
                    Timestamp expire = new Timestamp(config.getConfig().getLong("deathbans." + uuid.toString() + ".expire"));
    
                    DeathBan deathBan = new DeathBan(player, killer, location, timestamp, expire);
    
                    deathBans.put(UUID.fromString(key), deathBan);
                }
            }
        }
    
        public void applyDeathBan(DeathBan deathBan) {
            Player player = Bukkit.getPlayer(deathBan.getPlayer().getUniqueId());
            if(player != null && player.hasPermission("network.staff")) return;
    
            deathBans.put(deathBan.getPlayer().getUniqueId(), deathBan);
    
            config.getConfig().set("deathbans." + deathBan.getPlayer().getUniqueId().toString() + ".killer", deathBan.getKiller() == null ? "none" : deathBan.getKiller().getUniqueId().toString());
            config.getConfig().set("deathbans." + deathBan.getPlayer().getUniqueId().toString() + ".location", LocationUtils.getString(deathBan.getLocation()));
            config.getConfig().set("deathbans." + deathBan.getPlayer().getUniqueId().toString() + ".timestamp", deathBan.getTimestamp());
            config.getConfig().set("deathbans." + deathBan.getPlayer().getUniqueId().toString() + ".expire", deathBan.getExpire());
            config.save();
    
            int minutes = (int) (deathBan.getExpire().getTime() - deathBan.getTimestamp().getTime()) / 60000;
    
            Bukkit.getPlayer(deathBan.getPlayer().getUniqueId()).kickPlayer(ChatColor.GREEN + "§lÖldüğünüz için sunucudan uzaklaştırıldınız!" + ChatColor.WHITE + "\nSunucuya tekrar " + ChatColor.RED + minutes + ChatColor.WHITE + " dakika sonra giriş yapa bilirsiniz!\n Ayrıca sizi öldüren kişi " + ChatColor.RED + (deathBan.getKiller() != null ? deathBan.getKiller().getName() : "Çevre") + "\n" + ChatColor.YELLOW + "Ölüm Tarihi: " + ChatColor.WHITE + deathBan.getTimestamp().toString());
    
            FactionsPlugin.getInstance().getLogManager().formatMessage("Death-banned", deathBan.getPlayer().getName() + " - " + deathBan.getKiller().getName());
        }
    
        public void removeDeathBan(UUID uuid) {
            deathBans.remove(uuid);
            config.getConfig().set("deathbans." + uuid.toString(), null);
            config.save();
        }
    
        @EventHandler(priority = EventPriority.HIGHEST)
        public void onLogin(AsyncPlayerPreLoginEvent event) {
            if(deathBans.containsKey(event.getUniqueId())) {
                DeathBan deathBan = deathBans.get(event.getUniqueId());
    
                if (!(System.currentTimeMillis() - deathBan.getExpire().getTime() >= 0)) {
                    if(DataFactory.getLives(deathBan.getPlayer()) > 0) {
                        if(rejoin.contains(event.getUniqueId())) {
                            removeDeathBan(deathBan.getPlayer().getUniqueId());
    
                            new BukkitRunnable() {
                                public void run() {
                                    Player player = Bukkit.getPlayer(event.getUniqueId());
    
                                    if (player != null) {
                                        player.sendMessage(ChatColor.GREEN + "Canlandırmak için bir can kullandınız.");
                                    }
                                }
                            }.runTaskLater(FactionsPlugin.getInstance(), 10L);
                        } else {
                            event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, ChatColor.RED + "Öldünüz, giriş yapa bilmek için" + ChatColor.RED + TimeUtils.getDurationBreakdown(Math.abs(System.currentTimeMillis() - deathBan.getExpire().getTime())) + ChatColor.RED + " bekleyiniz. Sizi öldüren kişi " + ChatColor.RED + (deathBan.getKiller() == null ? "Çevre" : deathBan.getKiller().getName()) + ChatColor.RED + ". Ölüm Tarihi: " + ChatColor.WHITE + deathBan.getTimestamp().toString() + ChatColor.RED + " Mevcut canlarınızdan birini kullanmak için 15 saniye içinde tekrar giriş yapın.");
                            rejoin.add(event.getUniqueId());
    
                            new BukkitRunnable() {
                                public void run() {
                                    if(rejoin.contains(event.getUniqueId())) {
                                        rejoin.remove(event.getUniqueId());
                                    }
                                }
                            }.runTaskLater(FactionsPlugin.getInstance(), 20L * 15);
                        }
                    } else {
                        event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, ChatColor.RED + "Öldünüz, giriş yapa bilmek için " + ChatColor.RED + TimeUtils.getDurationBreakdown(Math.abs(System.currentTimeMillis() - deathBan.getExpire().getTime())) + ChatColor.RED + " bekleyiniz. Sizi öldüren kişi " + ChatColor.RED + (deathBan.getKiller() == null ? "Çevre" : deathBan.getKiller().getName()) + ChatColor.RED + ". Ölüm Tarihi: " + ChatColor.WHITE + deathBan.getTimestamp().toString() + ChatColor.RED + " Yaşam hakkı satın alın!");
                    }
                } else {
                    removeDeathBan(event.getUniqueId());
                }
            }
        }
    
    }
     
  4. Offline

    yPedx

  5. Offline

    CroseBoy_99

    Code:
            FactionsPlugin.getInstance().getLogManager().formatMessage("Death-banned", deathBan.getPlayer().getName() + " - " + deathBan.getKiller().getName());
     
  6. Offline

    Horsey

    One of those methods returned null.
     
  7. Offline

    ChipDev

    Try debugging by printing the Objects returned by the methods. i.e
    Code:
    FractionsPlugin.getInstance()
    or
    Code:
    deathBan.getPlayer()
    and see if any return null.
     
  8. Offline

    CroseBoy_99

    @ChipDev By the way, do you know how to find the CraftBukkit v1_7_R3 version? (I need it now and I can not find it.)
     
  9. Offline

    Zombie_Striker

    @CroseBoy_99
    I don't think so; Buildtools may not have that specific version and you should not trust anyone else to give it to you.

    Why do you need that version? Unless you need it to be on 1.7 (in which case, you already have a 1.7 jar), there should be no real difference between R3 and R4 (unless you are working with NMS, and even then reflection Utils will help with this.)
     
    CroseBoy_99 likes this.
  10. Offline

    CroseBoy_99

    import org.bukkit.craftbukkit.v1_7_R3.*;
    import org.bukkit.craftbukkit.v1_7_R3.entity.*;
    import net.minecraft.server.v1_7_R3.*;

    Is it clear enough? If not it is necessary for a plugin.
     
  11. Offline

    Zombie_Striker

    @CroseBoy_99
    Just change the 3 to a 4. The only thing that changed between those updates is the path.
     
Thread Status:
Not open for further replies.

Share This Page