java - Bukkit / Spigot API: Mapping damager and Victim -
i'm trying add damager name key, , victim name value, hashmap that's called damagecheck. done in entitydamagebyentityevent. however, when try store both victim , damager, goes wrong.
code:
private hashmap<string, string> damagecheck = new hashmap<string, string>(); @eventhandler public void onentitydamagebyentityevent(entitydamagebyentityevent event) { if(event.getentity() instanceof player || event.getdamager() instanceof player) { player victim = (player) event.getentity(); player damager = (player) event.getdamager(); string victimname = victim.getdisplayname(); // getting victim name string damagername = damager.getdisplayname(); // getting damager name bukkit.getserver().broadcastmessage(""); bukkit.getserver().broadcastmessage(victim.getdisplayname() + " victim!"); bukkit.getserver().broadcastmessage(damager.getdisplayname() + " damager!"); bukkit.getserver().broadcastmessage(""); try { if(!damagecheck.containskey(damagername)) { damagecheck.put(victimname, damagername); bukkit.getserver().broadcastmessage(""); bukkit.getserver().broadcastmessage(damagecheck.get(victimname) + " victim!"); bukkit.getserver().broadcastmessage(damagecheck.get(damagername) + " damager!"); bukkit.getserver().broadcastmessage(""); } else if(damagecheck.containskey(damagername)) { damagecheck.replace(damagername, damagername, damagername); bukkit.getserver().broadcastmessage(""); bukkit.getserver().broadcastmessage(damagecheck.get(victimname) + " victim!"); bukkit.getserver().broadcastmessage(damagecheck.get(damagername) + " damager!"); bukkit.getserver().broadcastmessage(""); } } catch (nullpointerexception e) { // nothing lol } } else { bukkit.getserver().broadcastmessage("there no entity or damager!"); } } first message correct. getsparked victim , fendyk damager. in second message when trying names out of hashmap output's wrong values.
edit: i'v changed damagecheck.put(victimname, damagername); damagecheck.put(damagername, victimname);
but gives victim null (the first time hitting), why that?
so, testing out complete new way of doing this, since didn't understand referring to, anyways code, think need
no need new hashmap <string, string>
private hashmap<string, string> damagecheck = new hashmap<>(); code:
@eventhandler public void onentitydamagebyentityevent(entitydamagebyentityevent event) { if(!(event.getdamager() instanceof player) || !(event.getentity() instanceof player) ) return; string damagername = event.getdamager().getname(); string victimname = event.getentity().getname(); damagecheck.put(victimname, damagername); bukkit.broadcastmessage(chatcolor.gray + "" + chatcolor.strikethrough + "-------------[ x ]-------------"); bukkit.broadcastmessage(chatcolor.dark_aqua + damagername + chatcolor.gray + " damager"); bukkit.broadcastmessage(chatcolor.dark_aqua + victimname + chatcolor.gray + " victim"); bukkit.broadcastmessage(chatcolor.gray + "" + chatcolor.strikethrough + "-------------[ x ]-------------"); bukkit.getlogger().info(damagecheck.tostring()); } removing entity data hashmap though it's not accurate sometimes
@eventhandler public void onentitydeathevent(entitydeathevent event){ damagecheck.remove(event.getentity().getname()); damagecheck.remove(event.getentity().getkiller().getname()); } you can remove check players only, it'll work on entity just remove
if(!(event.getdamager() instanceof player) || !(event.getentity() instanceof player) ) return;


Comments
Post a Comment