Killcount

Discussion in 'Plugin Development' started by sipsi133, Dec 29, 2013.

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

    sipsi133

    I want to make plugin that adds lore "Kills: 1" and +1 Kills everytime PLAYER kills any ENTITY (zombie, skeleton, player etc)
    I tried this code, but its not setting the lore and errors come if entity is killed by lava/fire/falldamage etc.

    Code:java
    1. package io.github.sipsi133;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.logging.Logger;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.ChatColor;
    8. import org.bukkit.Material;
    9. import org.bukkit.entity.Entity;
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.event.EventHandler;
    12. import org.bukkit.event.Listener;
    13. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    14. import org.bukkit.event.entity.EntityDeathEvent;
    15. import org.bukkit.event.player.PlayerInteractEvent;
    16. import org.bukkit.event.player.PlayerRespawnEvent;
    17. import org.bukkit.inventory.ItemStack;
    18. import org.bukkit.inventory.meta.ItemMeta;
    19. import org.bukkit.plugin.PluginDescriptionFile;
    20. import org.bukkit.plugin.PluginManager;
    21. import org.bukkit.plugin.java.JavaPlugin;
    22.  
    23. @SuppressWarnings("unused")
    24. public class KillCount extends JavaPlugin implements Listener {
    25. public final Logger logger = Logger.getLogger("Minecraft");
    26. public ArrayList<String> killer1 = new ArrayList<String>(); //make the lore Arraylist
    27.  
    28. @Override
    29. public void onEnable() {
    30. PluginDescriptionFile pdfFile = this.getDescription();
    31. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + "Has Been Enabled!");
    32. PluginManager pm = getServer().getPluginManager();
    33. pm.registerEvents(this, this);
    34. }
    35. @Override
    36. public void onDisable() {
    37. PluginDescriptionFile pdfFile = this.getDescription();
    38. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + " Has Been Disabled!");
    39. }
    40.  
    41. @EventHandler
    42. public void onEntityKill(EntityDeathEvent e) {
    43. Entity killed = (Entity) e.getEntity();
    44. Player killer = (Player) e.getEntity().getKiller();
    45. ItemStack is = killer.getInventory().getItemInHand();
    46. ItemMeta im = is.getItemMeta();
    47. if(is == null) return; {
    48. if(is.getType() == Material.DIAMOND_SWORD); {
    49. }if(is.getType() == Material.IRON_SWORD); {
    50. }if(is.getType() == Material.GOLD_SWORD); {
    51. }if(is.getType() == Material.STONE_SWORD); {
    52. }if(is.getType() == Material.WOOD_SWORD); {
    53. if (e.getEntity() instanceof Player || e.getEntity() instanceof Entity); {
    54. if (e.getEntity().getKiller() instanceof Player); {
    55. if (e.getEntity().isDead()) {
    56. if (e.getEntity().isDead()) {
    57. killer1.add("Kills" + +1);
    58. im.setLore(killer1);
    59. killer.sendMessage("Lore set");
    60. }
    61. }
    62. }
    63. }
    64. }
    65. }
    66. }
    67. }
     
  2. Offline

    thepaperboy99

    Check if the item in hand actually has item meta, and also put your your player and entity check at the top of your code.

    Edit: Also post the error.
     
  3. Offline

    sipsi133

    thepaperboy99 Now i have this but its not working:
    Code:java
    1. package io.github.sipsi133;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.logging.Logger;
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Entity;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    13. import org.bukkit.event.entity.EntityDeathEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.inventory.ItemStack;
    16. import org.bukkit.inventory.meta.ItemMeta;
    17. import org.bukkit.plugin.PluginDescriptionFile;
    18. import org.bukkit.plugin.PluginManager;
    19. import org.bukkit.plugin.java.JavaPlugin;
    20.  
    21. @SuppressWarnings("unused")
    22. public class KillCount extends JavaPlugin implements Listener {
    23. public final Logger logger = Logger.getLogger("Minecraft");
    24. public ArrayList<String> killer1 = new ArrayList<String>();
    25.  
    26. @Override
    27. public void onEnable() {
    28. PluginDescriptionFile pdfFile = this.getDescription();
    29. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + "Has Been Enabled!");
    30. PluginManager pm = getServer().getPluginManager();
    31. pm.registerEvents(this, this);
    32. pm.registerEvents(this, this);
    33. }
    34. @Override
    35. public void onDisable() {
    36. PluginDescriptionFile pdfFile = this.getDescription();
    37. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + " Has Been Disabled!");
    38. }
    39.  
    40. @EventHandler
    41. public void onEntityKill(EntityDeathEvent e) {
    42. if(e.getEntity() instanceof Entity); {
    43. }if(e.getEntity() instanceof Player); {
    44. if(e.getEntity().getKiller() instanceof Player); {
    45. Entity killed = (Entity) e.getEntity();
    46. Player killer = (Player) e.getEntity().getKiller();
    47. ItemStack is = killer.getInventory().getItemInHand();
    48. ItemMeta im = is.getItemMeta();
    49. if(is == null) return; {
    50. if(is.hasItemMeta()) {
    51. if(is.getType() == Material.DIAMOND_SWORD); {
    52. }if(is.getType() == Material.IRON_SWORD); {
    53. }if(is.getType() == Material.GOLD_SWORD); {
    54. }if(is.getType() == Material.STONE_SWORD); {
    55. }if(is.getType() == Material.WOOD_SWORD); {
    56. if (e.getEntity().isDead()) {
    57. killer1.add("Kills" + +1);
    58. im.setLore(killer1);
    59. killer.sendMessage("Lore set");
    60. }
    61. }
    62. }
    63. }
    64. }if(!(e.getEntity().getKiller() instanceof Player)); {
    65. }
    66. }
    67. }
    68. }


    This error appears IF the killer IS NOT PLAYER:

    Code:
    17:46:31 [SEVERE] Could not pass event EntityDeathEvent to KillCount v0.0.3
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:427)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62)
            at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredLi
    stener.java:30)
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:478)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:463)
            at com.earth2me.essentials.commands.Commandkillall.run(Commandkillall.ja
    va:140)
            at com.earth2me.essentials.commands.EssentialsCommand.run(EssentialsComm
    and.java:141)
            at com.earth2me.essentials.commands.EssentialsCommand.run(EssentialsComm
    and.java:135)
            at com.earth2me.essentials.Essentials.onCommandEssentials(Essentials.jav
    a:505)
            at com.earth2me.essentials.Essentials.onCommand(Essentials.java:372)
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    2)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServe
    r.java:532)
            at net.minecraft.server.v1_6_R3.PlayerConnection.handleCommand(PlayerCon
    nection.java:986)
            at net.minecraft.server.v1_6_R3.PlayerConnection.chat(PlayerConnection.j
    ava:897)
            at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java
    :838)
            at net.minecraft.server.v1_6_R3.Packet3Chat.handle(Packet3Chat.java:47)
            at org.spigotmc.netty.NettyNetworkManager.b(NettyNetworkManager.java:237
    )
            at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java
    :117)
            at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
            at org.spigotmc.netty.NettyServerConnection.b(NettyServerConnection.java
    :131)
            at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:6
    04)
            at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    40)
            at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    93)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :425)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: java.lang.NullPointerException
            at io.github.sipsi133.KillCount.onEntityKill(KillCount.java:47)
            at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:425)
            ... 25 more
    >
     
  4. Offline

    AoH_Ruthless

    sipsi133
    That's because you aren't checking if the killer's instance is a player before casting the variable.
     
  5. Offline

    thepaperboy99



    As AoH_Ruthless said, you need to check. Here is what I would do:

    @EventHandler
    public void onEntityKill(EntityDeathEvent e) {
    if(e.getEntity() instanceof Entity) {
    if(e.getEntity().getKiller() instanceof Player) {
    Entity killed = (Entity) e.getEntity();
    Player killer = (Player) e.getEntity().getKiller();
     
  6. Offline

    sipsi133

    thepaperboy99 AoH_Ruthless Still not working, now i have this:

    Code:java
    1. @EventHandler
    2. public void onEntityKill(EntityDeathEvent e) {
    3. if(e.getEntity() instanceof Entity || e.getEntity() instanceof Player); {
    4. Entity killed = (Entity) e.getEntity();
    5. if(e.getEntity().getKiller() instanceof Player) {}else{
    6. Player killer = (Player) e.getEntity().getKiller();
    7. ItemStack is = killer.getInventory().getItemInHand();
    8. ItemMeta im = is.getItemMeta();
    9. if(is == null) return; {
    10. if(is.hasItemMeta()) {
    11. if(is.getType() == Material.DIAMOND_SWORD); {
    12. }if(is.getType() == Material.IRON_SWORD); {
    13. }if(is.getType() == Material.GOLD_SWORD); {
    14. }if(is.getType() == Material.STONE_SWORD); {
    15. }if(is.getType() == Material.WOOD_SWORD); {
    16. if (e.getEntity().isDead()) {
    17. killer1.add("Kills" + +1);
    18. im.setLore(killer1);
    19. killer.sendMessage("Lore set");


    The same error happens if entity is NOT killed by PLAYER
    Error is on line 46
    Line46: ItemStack is = killer.getInventory().getItemInHand();
     
  7. Offline

    thepaperboy99



    Why is there an else statement there on line 5? Remove that, and see how it works.

    Edit: Also remove the ';' on line 3, you do not need those.
     
  8. Offline

    sipsi133

    thepaperboy99 else statement is there because if its not player, then do nothing

    EDIT: Now its not showing the error IF entity is NOT killed by PLAYER
    But still not setting lore.
     
  9. Offline

    AoH_Ruthless

    sipsi133
    You have to check if the killer's instance is a player, not the entity. A player is a type of entity anyways.
     
  10. Offline

    sipsi133

    AoH_Ruthless I have that in my code. That checks it?
    if(e.getEntity().getKiller() instanceof Player) {
    Player killer = (Player) e.getEntity().getKiller();
     
  11. Offline

    thepaperboy99

    Code:java
    1. @EventHandler
    2. public void onEntityKill(EntityDeathEvent e) {
    3. if(e.getEntity() instanceof Entity || e.getEntity() instanceof Player) {
    4. Entity killed = (Entity) e.getEntity();
    5. if(e.getEntity().getKiller() instanceof Player) {
    6. Player killer = (Player) e.getEntity().getKiller();
    7. ItemStack is = killer.getInventory().getItemInHand();
    8. ItemMeta im = is.getItemMeta();
    9. // Rest of your code...
    10.  


    I fixed up your code a little, try that and see how that works.
     
  12. Offline

    sipsi133

    thepaperboy99 Still not working :(
    Its not even sending the message "Lore set"
     
  13. Offline

    thepaperboy99


    Do you get an error?
     
  14. Offline

    sipsi133

  15. Offline

    thepaperboy99


    Are you storing the players kills in a hashmap or something?
     
  16. Offline

    xTigerRebornx

    sipsi133 you do realize that you did this
    Code:
    if(e.getEntity().getKiller() instanceof Player) {}else{
    You are saying "If the killer is a player do nothing else do everything in the else"
     
  17. Offline

    sipsi133

    xTigerRebornx Right now I have this code. Can you tell me or give me code how i can do what I wanted (if PLAYER kills any entity or player, then add lore "Kills: 1" to current item in hand and add +1 Kills when ever player kills another entity and so on)?
    Or is it possible to add "Player kills:" and "Entity kills:" lores?
    Code:java
    1. package io.github.sipsi133;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.logging.Logger;
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Entity;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    13. import org.bukkit.event.entity.EntityDeathEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.inventory.ItemStack;
    16. import org.bukkit.inventory.meta.ItemMeta;
    17. import org.bukkit.plugin.PluginDescriptionFile;
    18. import org.bukkit.plugin.PluginManager;
    19. import org.bukkit.plugin.java.JavaPlugin;
    20.  
    21. @SuppressWarnings("unused")
    22. public class KillCount extends JavaPlugin implements Listener {
    23. public final Logger logger = Logger.getLogger("Minecraft");
    24. public ArrayList<String> killer1 = new ArrayList<String>();
    25.  
    26. @Override
    27. public void onEnable() {
    28. PluginDescriptionFile pdfFile = this.getDescription();
    29. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + "Has Been Enabled!");
    30. PluginManager pm = getServer().getPluginManager();
    31. pm.registerEvents(this, this);
    32. pm.registerEvents(this, this);
    33. }
    34. @Override
    35. public void onDisable() {
    36. PluginDescriptionFile pdfFile = this.getDescription();
    37. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + " Has Been Disabled!");
    38. }
    39.  
    40. @EventHandler
    41. public void onEntityKill(EntityDeathEvent e) {
    42. if(e.getEntity() instanceof Entity || e.getEntity() instanceof Player) {
    43. Entity killed = (Entity) e.getEntity();
    44. if(e.getEntity().getKiller() instanceof Player) {
    45. Player killer = (Player) e.getEntity().getKiller();
    46. ItemStack is = killer.getInventory().getItemInHand();
    47. ItemMeta im = is.getItemMeta();
    48. if(is == null) return; {
    49. if(is.hasItemMeta()) {
    50. if(is.getType() == Material.DIAMOND_SWORD); {
    51. }if(is.getType() == Material.IRON_SWORD); {
    52. }if(is.getType() == Material.GOLD_SWORD); {
    53. }if(is.getType() == Material.STONE_SWORD); {
    54. }if(is.getType() == Material.WOOD_SWORD); {
    55. if (e.getEntity().isDead()) {
    56. killer1.add("Kills" + +1);
    57. im.setLore(killer1);
    58. killer.sendMessage("Lore set");
    59. }
    60. }
    61. }
    62. }
    63. }
    64. }
    65. }
    66. }


    help

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 6, 2016
  18. Offline

    xTigerRebornx

    sipsi133 You need to check the lore before you can add one to it. You also don't need the check for the e.getEntity().isDead()
     
  19. Offline

    sipsi133

    xTigerRebornx I check it with "is.getItemMeta().getLore();"?
     
  20. Offline

    thepaperboy99


    You can check if the item has lore like so:

    if(is.getItemMeta().hasLore()){
     
  21. Offline

    sipsi133

    thepaperboy99 Still not working :( I have no idea what is wrong with this code.
    Code:java
    1. package io.github.sipsi133;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.logging.Logger;
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Entity;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    13. import org.bukkit.event.entity.EntityDeathEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.inventory.ItemStack;
    16. import org.bukkit.inventory.meta.ItemMeta;
    17. import org.bukkit.plugin.PluginDescriptionFile;
    18. import org.bukkit.plugin.PluginManager;
    19. import org.bukkit.plugin.java.JavaPlugin;
    20.  
    21. @SuppressWarnings("unused")
    22. public class KillCount extends JavaPlugin implements Listener {
    23. public final Logger logger = Logger.getLogger("Minecraft");
    24. public ArrayList<String> killer1 = new ArrayList<String>();
    25.  
    26. @Override
    27. public void onEnable() {
    28. PluginDescriptionFile pdfFile = this.getDescription();
    29. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + "Has Been Enabled!");
    30. PluginManager pm = getServer().getPluginManager();
    31. pm.registerEvents(this, this);
    32. pm.registerEvents(this, this);
    33. }
    34. @Override
    35. public void onDisable() {
    36. PluginDescriptionFile pdfFile = this.getDescription();
    37. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + " Has Been Disabled!");
    38. }
    39.  
    40. @EventHandler
    41. public void onEntityKill(EntityDeathEvent e) {
    42. if(e.getEntity() instanceof Entity || e.getEntity() instanceof Player) {
    43. Entity killed = e.getEntity();
    44. if(e.getEntity().getKiller() instanceof Player) {
    45. Player killer = (Player) e.getEntity().getKiller();
    46. if(killer.getInventory().getItemInHand() != null) {
    47. ItemStack is = killer.getInventory().getItemInHand();
    48. if(is.hasItemMeta()) {
    49. if(!is.getItemMeta().hasLore()) {
    50. ItemMeta im = is.getItemMeta();
    51. is.getItemMeta().getLore();
    52. killer1.add("Kills: 1");
    53. im.setLore(killer1);
    54. killer.sendMessage("Lore set");
    55. }if(is.getItemMeta().hasLore()) {
    56. ItemMeta im = is.getItemMeta();
    57. is.getItemMeta().getLore();
    58. killer1.add("Kills: " + +1);
    59. im.setLore(killer1);
    60. }
    61. }
    62. }
    63. }
    64. }
    65. }
    66. }
     
  22. Offline

    AoH_Ruthless

    sipsi133
    You definitely do not understand Java. Read all comments I put and do not blindly copy and paste.

    This is your code:
    Code:java
    1. if(is == null) return; { //No bracket here, remove this and the bottom bracket marked (#1)
    2. if(is.hasItemMeta()) { //You are checking if the item has item meta. If I had a regular diamond sword, this event wouldn't fire.
    3. if(is.getType() == Material.DIAMOND_SWORD); { //These 5 lines are just so far off. Fixed below.
    4. }if(is.getType() == Material.IRON_SWORD); {
    5. }if(is.getType() == Material.GOLD_SWORD); {
    6. }if(is.getType() == Material.STONE_SWORD); {
    7. }if(is.getType() == Material.WOOD_SWORD); {
    8. if (e.getEntity().isDead()) { //Unnecessary, remove this whole line and bracket marked (#2)
    9. killer1.add("Kills" + +1);
    10. im.setLore(killer1);
    11. killer.sendMessage("Lore set");
    12. } //(#2)
    13. }
    14. }
    15. }//(#1)


    Ok, now we have this., which still won't work because it's only checking if the material is a wood sword. We want to change it.
    Code:java
    1. if(is == null) return;
    2. if(is.hasItemMeta()) {
    3. if(is.getType() == Material.DIAMOND_SWORD); { //You are basically doing {} which does nothing, for all of them except wooden sword.
    4. }if(is.getType() == Material.IRON_SWORD); { //Also, remove the semi-colons. These are if-statements and you need brackets.
    5. }if(is.getType() == Material.GOLD_SWORD); {
    6. }if(is.getType() == Material.STONE_SWORD); {
    7. }if(is.getType() == Material.WOOD_SWORD); {
    8. killer1.add("Kills" + +1);
    9. im.setLore(killer1);
    10. killer.sendMessage("Lore set");
    11. }
    12. }


    So what we want to do is check if the item is any type of sword.
    Code:java
    1. if(is == null) return;
    2. if(is.hasItemMeta()) {
    3. if(is.getType() == Material.DIAMOND_SWORD || is.getType() == Material.GOLD_SWORD || is.getType() == Material.IRON_SWORD || is.getType() == Material.STONE_SWORD || is.getType() == Material.WOOD_SWORD) { // The || means 'or'. So if the type is diamond sword OR gold sword, etc...
    4. killer1.add("Kills" + +1);
    5. im.setLore(killer1);
    6. killer.sendMessage("Lore set");
    7. }
    8. }
     
  23. Offline

    zzienzz

    Your spacing makes it harder to read the code imo
     
  24. Offline

    AoH_Ruthless

    zzienzz
    If you are talking about my code : freehanding it on the forums does that.
    If you are talking about sipsi133 code, thats because the post is edited, and with Java Syntax for code that messes all the indentation up.
     
    zzienzz likes this.
  25. Offline

    sipsi133

    AoH_Ruthless Ok, now i added line "killer.sendMessage("Lore set" + " " + im.getLore());". Still its not setting lore but when i kill FIRST entity it shows message "Lore set [Kills: 1]" and another message "[Kills: 1], [Kills: 1]"
    and the second kill would show messages: "Lore set [Kills: 1], [Kills: 1]" and "Lore set [Kills: 1], [Kills: 1], [Kills: 1]"
    But still its not setting the lore to sword or bow. And the +1 is not right. I dont know how i can set the lore to weapon and how to add +1 to Lores killcount number.

    Code:java
    1. package io.github.sipsi133;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.logging.Logger;
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Entity;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    13. import org.bukkit.event.entity.EntityDeathEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.inventory.ItemStack;
    16. import org.bukkit.inventory.meta.ItemMeta;
    17. import org.bukkit.plugin.PluginDescriptionFile;
    18. import org.bukkit.plugin.PluginManager;
    19. import org.bukkit.plugin.java.JavaPlugin;
    20.  
    21. @SuppressWarnings("unused")
    22. public class KillCount extends JavaPlugin implements Listener {
    23. public final Logger logger = Logger.getLogger("Minecraft");
    24. public ArrayList<String> killer1 = new ArrayList<String>();
    25.  
    26. @Override
    27. public void onEnable() {
    28. PluginDescriptionFile pdfFile = this.getDescription();
    29. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + "Has Been Enabled!");
    30. PluginManager pm = getServer().getPluginManager();
    31. pm.registerEvents(this, this);
    32. pm.registerEvents(this, this);
    33. }
    34. @Override
    35. public void onDisable() {
    36. PluginDescriptionFile pdfFile = this.getDescription();
    37. this.logger.info(pdfFile.getName() + " " + pdfFile.getVersion() + " " + " Has Been Disabled!");
    38. }
    39.  
    40. @EventHandler
    41. public void onEntityKill(EntityDeathEvent e) {
    42. if(e.getEntity() instanceof Entity || e.getEntity() instanceof Player) {
    43. Entity killed = (Entity) e.getEntity();
    44. if(e.getEntity().getKiller() instanceof Player) {
    45. Player killer = (Player) e.getEntity().getKiller();
    46. if(killer.getInventory().getItemInHand() != null) {
    47. ItemStack is = killer.getInventory().getItemInHand();
    48. if(is == null) return;
    49. if(is.getType() == Material.DIAMOND_SWORD || is.getType() == Material.GOLD_SWORD || is.getType() == Material.IRON_SWORD || is.getType() == Material.STONE_SWORD || is.getType() == Material.WOOD_SWORD || is.getType() == Material.BOW) {
    50. ItemMeta im = is.getItemMeta();
    51. killer1.add("Kills: 1");
    52. im.setLore(killer1);
    53. killer.sendMessage("Lore set" + " " + im.getLore());
    54. }
    55. }
    56. }
    57. }
    58. }
    59. }
     
  26. Offline

    BillyGalbreath

    Completely not tested (wrote this from my phone), but give this a shot:

    This has been tested and works:

    Code:java
    1.  
    2. package io.github.sipsi133;
    3. import java.util.ArrayList;
    4. import java.util.List;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Entity;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.entity.EntityDeathEvent;
    13. import org.bukkit.inventory.ItemStack;
    14. import org.bukkit.inventory.meta.ItemMeta;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16.  
    17. public class KillCount extends JavaPlugin implements Listener {
    18. public void onEnable() {
    19. Bukkit.getPluginManager().registerEvents(this, this);
    20. }
    21.  
    22. public void onDisable() {
    23. }
    24.  
    25. @EventHandler
    26. public void onEntityKill(EntityDeathEvent event) {
    27. if (!(event.getEntity() instanceof Entity) && !(event.getEntity() instanceof Player))
    28. return; // Not an entity or player that died. Do nothing.
    29. if (!(event.getEntity().getKiller() instanceof Player))
    30. return; // Player did not make the kill. Do nothing.
    31. Player killer = (Player) event.getEntity().getKiller();
    32. ItemStack weapon = killer.getInventory().getItemInHand();
    33. if (weapon == null || !isValidWeapon(weapon.getType()))
    34. return; // Not a valid weapon used to kill. Do nothing.
    35. updateWeaponKillCount(weapon);
    36. killer.sendMessage("Lore set" + " " + weapon.getItemMeta().getLore());
    37. }
    38.  
    39. private boolean isValidWeapon(Material mat) {
    40. switch(mat) {
    41. case DIAMOND_SWORD:
    42. case GOLD_SWORD:
    43. case IRON_SWORD:
    44. case STONE_SWORD:
    45. case WOOD_SWORD:
    46. case BOW:
    47. return true;
    48. default:
    49. return false;
    50. }
    51. }
    52.  
    53. private ItemStack updateWeaponKillCount(ItemStack weapon) {
    54. ItemMeta meta = weapon.getItemMeta();
    55. List<String> lore = meta.getLore();
    56. int count = 1;
    57. if (lore == null)
    58. lore = new ArrayList<String>();
    59. if (!lore.isEmpty() && lore.get(0).contains("Kills: ")) {
    60. // Kill count already established. Need to get current count and increment.
    61. try {
    62. count = Integer.valueOf(lore.get(0).split("Kills: ")[1]);
    63. count++;
    64. } catch (NumberFormatException e) {
    65. // Problem determining current kill count. Starting count over at 1.
    66. }
    67. }
    68. lore.clear();
    69. lore.add("Kills: " + count);
    70. meta.setLore(lore);
    71. weapon.setItemMeta(meta);
    72. return weapon;
    73. }
    74. }
    75.  
     
  27. Offline

    sipsi133

    BillyGalbreath Its not working, Not even showing the message "Lore set"
     
  28. Offline

    BillyGalbreath

    Because forgot the implements Listener and register parts:

    Updated above post to reflect this change.
     
  29. Offline

    et477

    you guys know that you can just use the command block to display kill counts right?

    just use the scoreboard man. it makes things easier.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 6, 2016
  30. Offline

    BillyGalbreath

    The method I wrote doesnt tie the kill count to the player, but instead to the weapon. Cant do that with a command block. ;)

    Edit: Also not possible with a scoreboard.
     
Thread Status:
Not open for further replies.

Share This Page