I started making plugins recently. I wanted to create a plugin wich will say that "xyz Player has joined/left" and Death messages. It works fine for joining, and by dying from entitys that aren't players. But when Player kills another Player, console returns that it couldn't pass PlayerDeathEvent.
I've tried Googling the problem, but none of the previus questions helped me to fix mine problem
Console Error
[12:39:35] [Server thread/ERROR]: Could not pass event PlayerDeathEvent to Introduce v1.0
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:529) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:514) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:726) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.EntityPlayer.die(EntityPlayer.java:520) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.EntityLiving.damageEntity(EntityLiving.java:1169) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.EntityHuman.damageEntity(EntityHuman.java:769) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.EntityPlayer.damageEntity(EntityPlayer.java:675) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.EntityHuman.attack(EntityHuman.java:1018) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.EntityPlayer.attack(EntityPlayer.java:1536) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1864) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.PacketPlayInUseEntity.a(SourceFile:69) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.PacketPlayInUseEntity.a(SourceFile:13) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.TickTask.run(SourceFile:18) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeTask(SourceFile:144) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeNext(SourceFile:118) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.MinecraftServer.aX(MinecraftServer.java:910) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.MinecraftServer.executeNext(MinecraftServer.java:903) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.awaitTasks(SourceFile:127) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.MinecraftServer.sleepForTick(MinecraftServer.java:887) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:820) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
Caused by: java.lang.NullPointerException
at JoinMessage.JoinMessage.onPlayerDeath(JoinMessage.java:54) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_211]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_211]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
... 24 more
Main.java:
package me.GraczBezNicku.Introduction;
import org.bukkit.plugin.java.JavaPlugin;
import JoinMessage.JoinMessage;
public class Main extends JavaPlugin
{
@Override
public void onEnable()
{
saveDefaultConfig();
new JoinMessage(this);
}
}
Utility.java (Used to simplify getting chat clolors):
package Utilities;
import org.bukkit.ChatColor;
public class utility {
public static String chat (String s)
{
return ChatColor.translateAlternateColorCodes('&', s);
}
}
JoinMessage.java (I didn't think I would use it for death messages):
package JoinMessage;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import Utilities.utility;
import me.GraczBezNicku.Introduction.Main;
public class JoinMessage implements Listener
{
private static Main plugin;
public JoinMessage(Main plugin)
{
this.plugin = plugin;
Bukkit.getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onJoin(PlayerJoinEvent e)
{
Player p = e.getPlayer();
if(!p.hasPlayedBefore())
{
Bukkit.broadcastMessage(utility.chat(plugin.getConfig().getString("firstjoin_message").replace("<player>", p.getName())));
}
else
{
Bukkit.broadcastMessage(utility.chat(plugin.getConfig().getString("join_message").replace("<player>", p.getName())));
}
}
@EventHandler
public void onExit(PlayerQuitEvent e)
{
Player p = e.getPlayer();
Bukkit.broadcastMessage(utility.chat(plugin.getConfig().getString("leave_message").replace("<player>", p.getName())));
}
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e)
{
if(e.getEntity().getKiller() instanceof Player)
{
PlayerDeathEvent deathe = null;
deathe.setDeathMessage(null);
Player p = e.getEntity();
Player killer = e.getEntity().getKiller();
if(p != killer)
{
killer.sendMessage(utility.chat("You have killed &7" + p.getDisplayName() + "!"));
p.sendMessage(utility.chat("You have been killed by &7" + killer.getDisplayName()+ "!"));
Bukkit.broadcastMessage(utility.chat("&7" + p.getDisplayName() + " Was killed by &7" + killer.getDisplayName()));
}
else if(killer == p)
{
Bukkit.broadcastMessage(utility.chat(" &7" + p.getDisplayName() + " Killed Himself!"));
}
}
else
{
Player p = e.getEntity();
Bukkit.broadcastMessage(utility.chat("&7" + p.getDisplayName() + " has died."));
}
}
}
config.yml:
firstJoin_message: '&a<player> &7has joined the server for the first time!'
join_message: '&e<player> &7has joined the server!'
leave_message: '&e<player> &7has left the server.'
plugin.yml:
name: Introduce
version: 1.0
author: GraczBezNicku
main: me.GraczBezNicku.Introduction.Main
description: Join/Leave message
The expected result is: "Player xyz killed zyx". Actual result: couldn't pass PlayerDeathEvent.
Any help is appriciated, thanks for reading this post! ; )
Basiclly I did double the NullPointerException. When deleting the deathe.setdeathmessage(null) it works!
PlayerDeathEvent deathe = null;
It need to look like this;
And not this:
PlayerDeathEvent deathe = null;
deathe.setDeathMessage(null);