support for trident throwing (pog)

This commit is contained in:
hyperdefined
2022-01-28 20:30:36 -05:00
parent 3e9cb61951
commit bc6a1840d1
2 changed files with 33 additions and 15 deletions

View File

@@ -3,8 +3,8 @@
A simple plugin to track cool stats for your tools and armor! A simple plugin to track cool stats for your tools and armor!
## Todo ## Todo
* Track trident throw kills. * ~~Track trident throw kills.~~
* Track armor damage. * ~~Track armor damage.~~
* ~~Track fish caught.~~ * ~~Track fish caught.~~
* ~~Track sheep sheared.~~ * ~~Track sheep sheared.~~
* Properly handle combing of tools. Stats should combine together. * Properly handle combing of tools. Stats should combine together.

View File

@@ -6,6 +6,7 @@ import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Trident;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
@@ -54,13 +55,26 @@ public class EntityDamage implements Listener {
} }
// a player is killing another player // a player is killing another player
if (livingEntity instanceof Player) { if (livingEntity instanceof Player) {
updatePlayerKills(heldItem); player.getInventory().setItem(player.getInventory().getHeldItemSlot(), updatePlayerKills(heldItem));
return; return;
} }
// player is killing regular mob // player is killing regular mob
updateMobKills(heldItem); player.getInventory().setItem(player.getInventory().getHeldItemSlot(), updateMobKills(heldItem));
trackedMobs.add(livingEntity.getUniqueId()); trackedMobs.add(livingEntity.getUniqueId());
} }
if (event.getDamager() instanceof Trident) {
Trident trident = (Trident) event.getDamager();
ItemStack clone;
if (livingEntity instanceof Player) {
clone = updatePlayerKills(trident.getItem());
} else {
clone = updateMobKills(trident.getItem());
}
if (clone == null) {
return;
}
trident.setItem(clone);
}
} }
// player is taken damage but not being killed // player is taken damage but not being killed
if (livingEntity instanceof Player) { if (livingEntity instanceof Player) {
@@ -74,10 +88,11 @@ public class EntityDamage implements Listener {
} }
} }
private void updatePlayerKills(ItemStack itemStack) { private ItemStack updatePlayerKills(ItemStack itemStack) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack finalItem = itemStack.clone();
ItemMeta meta = finalItem.getItemMeta();
if (meta == null) { if (meta == null) {
return; return null;
} }
Integer playerKills = 0; Integer playerKills = 0;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
@@ -85,7 +100,7 @@ public class EntityDamage implements Listener {
playerKills = container.get(toolStats.swordPlayerKills, PersistentDataType.INTEGER); playerKills = container.get(toolStats.swordPlayerKills, PersistentDataType.INTEGER);
} }
if (playerKills == null) { if (playerKills == null) {
return; return null;
} else { } else {
playerKills++; playerKills++;
} }
@@ -99,7 +114,7 @@ public class EntityDamage implements Listener {
// we do a for loop like this, we can keep track of index // we do a for loop like this, we can keep track of index
// this doesn't mess the lore up of existing items // this doesn't mess the lore up of existing items
for (int x = 0; x < lore.size(); x++) { for (int x = 0; x < lore.size(); x++) {
if (lore.get(x).contains("Mob kills")) { if (lore.get(x).contains("Player kills")) {
hasLore = true; hasLore = true;
lore.set(x, playerKillsLore.replace("X", Integer.toString(playerKills))); lore.set(x, playerKillsLore.replace("X", Integer.toString(playerKills)));
break; break;
@@ -115,13 +130,15 @@ public class EntityDamage implements Listener {
lore.add(playerKillsLore.replace("X", Integer.toString(playerKills))); lore.add(playerKillsLore.replace("X", Integer.toString(playerKills)));
} }
meta.setLore(lore); meta.setLore(lore);
itemStack.setItemMeta(meta); finalItem.setItemMeta(meta);
return finalItem;
} }
private void updateMobKills(ItemStack itemStack) { private ItemStack updateMobKills(ItemStack itemStack) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack finalItem = itemStack.clone();
ItemMeta meta = finalItem.getItemMeta();
if (meta == null) { if (meta == null) {
return; return null;
} }
Integer mobKills = 0; Integer mobKills = 0;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
@@ -129,7 +146,7 @@ public class EntityDamage implements Listener {
mobKills = container.get(toolStats.swordMobKills, PersistentDataType.INTEGER); mobKills = container.get(toolStats.swordMobKills, PersistentDataType.INTEGER);
} }
if (mobKills == null) { if (mobKills == null) {
return; return null;
} else { } else {
mobKills++; mobKills++;
} }
@@ -159,7 +176,8 @@ public class EntityDamage implements Listener {
lore.add(mobKillsLore.replace("X", Integer.toString(mobKills))); lore.add(mobKillsLore.replace("X", Integer.toString(mobKills)));
} }
meta.setLore(lore); meta.setLore(lore);
itemStack.setItemMeta(meta); finalItem.setItemMeta(meta);
return finalItem;
} }
private void updateArmorDamage(ItemStack itemStack, double damage) { private void updateArmorDamage(ItemStack itemStack, double damage) {