Solved I need help with bukkit death event, and bukkit kill event!

Discussion in 'Plugin Development' started by technerder, Aug 24, 2016.

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

    technerder

    Just like the title says i need help with the bukkit player death event and bukkit kill event,

    for starters i am currently using this current code so the second the player dies his gamemode gets changed to spectator,

    Code:
        @EventHandler
        public void onDeath(PlayerDeathEvent e) {
        if (e.getEntityType() == EntityType.PLAYER) {
        Player player = e.getEntity();
        player.setGameMode(GameMode.SURVIVAL);
        }
        }
    I was just wondering how i would change the gamemode to spectator on death, because right now if i do
    player.setGameMode(GameMode.SPECTATOR);


    it gives me this error:

    Code:
    [10:34:44 INFO]: Technerder tried to swim in lava
    [10:35:00 ERROR]: Could not pass event PlayerDeathEvent to UHCPlugin v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:379) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityPlayer.die(EntityPlayer.java:369) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityLiving.damageEntity(EntityLiving.java:736) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityHuman.damageEntity(EntityHuman.java:758) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityPlayer.damageEntity(EntityPlayer.java:448) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.Entity.E(Entity.java:351) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.Entity.C(Entity.java:329) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityLiving.C(EntityLiving.java:156) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.Entity.h(Entity.java:241) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityLiving.h(EntityLiving.java:1360) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityHuman.h(EntityHuman.java:162) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.EntityPlayer.i(EntityPlayer.java:241) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:344) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.PacketPlayInFlying.a(SourceFile:137) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.PacketPlayInPosition.handle(SourceFile:63) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    Caused by: java.lang.NoSuchFieldError: SPECTATOR
            at technerder.shadowtech.uhcplugin.UHCPlugin.onDeath(UHCPlugin.java:40) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_101]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
            ... 25 more

    and the second question i have is how would i go about running a command as a player who just killed someone.
    - thanks in advance - technerder
     
  2. @technerder
    You are running the plugin on a 1.7 server. Spectator mode was added in 1.8.
     
  3. Offline

    technerder

    @AlvinB derp forgot, thx

    @AlvinB would you happen to know how i would be able to run a command as a player you just killed someone?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Aug 24, 2016
  4. Offline

    Roborack17

    @technerder

    If you want to execute command as a player who kill somebody then:

    public void onKill(PlayerDeathEvent e){
    //Define a killer
    Player killer = (Player) e.getEntity().getKiller();

    //Execute command
    Bukkit.getServer().dispatchCommand(killer, "your command without slash");
    }
     
  5. Offline

    technerder

    @Roborack17 thanks you so much, just one more question how would i be able to give the killer a item? instead of running a command, how would i go about modifying this so it would work: p.getInventory.add(new ItemStack(Material.BREAD, 1));
     
  6. Offline

    ArsenArsen

  7. Offline

    Roborack17

    @technerder You could dispatch command by a console which is an easier way to give a player an item than implementing ItemStacks

    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "give "+killer.getName()+"item_name/id");
     
  8. Offline

    Zombie_Striker

    @Roborack17
    1. Don't recommend using commands over built in methods. You have more control over methods than commands, and commands are more likely to change.
    2. He says he does not want to use commands.
    3. IDs are no longer supported. Only use the item name.

    @technerder
    Do as @ArsenArsen said for delaying the task.
     
  9. Offline

    technerder

    just one more question, whenever i put in
    Code:
    killer.getInventory.add(new ItemStack(Material.BREAD, 1));
    however it keeps saying the getInventory can not be resolved or is not a field.
     
  10. Code:
    killer.getInventory().addItem(new ItemStack(Material.BREAD));
    
    :3 I believe that's the issue.
     
  11. @technerder
    getInventory indicates that it is a field, but getInventory is actually a method, and method need to have parenthesis on the end.
     
  12. Offline

    technerder

    @Mindlessmink thanks bro

    i added everything however when i kill someone in game no bread is given to the killer, any ideas why this isn't working

    Code:
    package technerder.shadowtech.uhcplugin;
    
    import org.bukkit.GameMode;
    import org.bukkit.Material;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class UHCPlugin extends JavaPlugin implements Listener {
    
        @Override
        public void onEnable() {
            getLogger().info("UHC Plugin Has Been Enabled!");
            getServer().getPluginManager().registerEvents(this, this);
        }
    
        @Override
        public void onDisable() {
            getLogger().info("UHC Plugin Has Been Disabled!");   
        }
       
    
        @EventHandler(priority = EventPriority.HIGH)
        public void onFallDamage(EntityDamageEvent event){
            if(event.getEntity() instanceof Player && event.getCause() == DamageCause.FALL)
                 event.setCancelled(true);
      
        }
       
        @EventHandler
        public void onDeath(PlayerDeathEvent e) {
        if (e.getEntityType() == EntityType.PLAYER) {
        Player player = e.getEntity();
        player.setGameMode(GameMode.SURVIVAL);
        }
        }
       
        public void onKill(PlayerDeathEvent e){
           
            Player killer = (Player) e.getEntity().getKiller();
           
            killer.getInventory().addItem(new ItemStack(Material.BREAD));
           
            }
          
    }
    
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
  13. @techboy291 You have 2 death events? Just merge them into one.

    EDIT: Just like the Mod did to your posts, The puns... And I can just tell no-one laughed. Awkward.
     
  14. Offline

    Zombie_Striker

    @technerder
    You forgot the @EventHandler tag for that last method. Also, you have no idea if the player was killed by another player, because you are not checking for it. Make sure killer is not null, and that killer is an instanceof Player before casting, Or else this will break your plugin.
     
  15. REMOVED... Me being stupid...
     
  16. Offline

    technerder

    thanks guys after everything it fianlly works! (thank alot again) the final code turned into this:


    Code:
    package technerder.shadowtech.uhcplugin;
    
    import org.bukkit.GameMode;
    import org.bukkit.Material;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class UHCPlugin extends JavaPlugin implements Listener {
    
        @Override
        public void onEnable() {
            getLogger().info("UHC Plugin Has Been Enabled!");
            getServer().getPluginManager().registerEvents(this, this);
        }
    
        @Override
        public void onDisable() {
            getLogger().info("UHC Plugin Has Been Disabled!");   
        }
    
        @EventHandler(priority = EventPriority.HIGH)
        public void onFallDamage(EntityDamageEvent event){
            if(event.getEntity() instanceof Player && event.getCause() == DamageCause.FALL)
                 event.setCancelled(true);
      
        }
       
        @EventHandler
        public void onKill(PlayerDeathEvent e){
           
            Player killer = (Player) e.getEntity().getKiller();
     
            killer.getInventory().addItem(new ItemStack(Material.GOLDEN_APPLE));
           
            if (e.getEntityType() == EntityType.PLAYER) {
                Player player = e.getEntity();
                player.setGameMode(GameMode.SURVIVAL);
                }
           
            }
          
    }
     
Thread Status:
Not open for further replies.

Share This Page