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