big cleanup

This commit is contained in:
hyperdefined
2022-10-05 16:20:36 -04:00
parent cbbdb4e9c4
commit 1cef74311e
10 changed files with 145 additions and 70 deletions

View File

@@ -23,6 +23,7 @@ import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -41,7 +42,7 @@ public class BlocksMined implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler (priority = EventPriority.LOWEST)
public void onBreak(BlockBreakEvent event) { public void onBreak(BlockBreakEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@@ -51,7 +52,8 @@ public class BlocksMined implements Listener {
return; return;
} }
// if the player mines something with their fist // if the player mines something with their fist
ItemStack heldItem = player.getInventory().getItem(player.getInventory().getHeldItemSlot()); int heldItemSlot = player.getInventory().getHeldItemSlot();
ItemStack heldItem = player.getInventory().getItem(heldItemSlot);
if (heldItem == null || heldItem.getType() == Material.AIR) { if (heldItem == null || heldItem.getType() == Material.AIR) {
return; return;
} }
@@ -60,23 +62,32 @@ public class BlocksMined implements Listener {
return; return;
} }
// if it's an item we want, update the stats // if it's an item we want, update the stats
updateBlocksMined(heldItem); ItemStack newTool = updateBlocksMined(heldItem);
if (newTool != null) {
player.getInventory().setItem(heldItemSlot, newTool);
}
} }
private void updateBlocksMined(ItemStack itemStack) { private ItemStack updateBlocksMined(ItemStack originalTool) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack newTool = originalTool.clone();
ItemMeta meta = newTool.getItemMeta();
if (meta == null) { if (meta == null) {
return; toolStats.logger.warning(originalTool + " does NOT have any meta! Unable to update stats.");
return null;
} }
// read the current stats from the item // read the current stats from the item
// if they don't exist, then start from 0 // if they don't exist, then start from 0
Integer blocksMined = null; Integer blocksMined = 0;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
if (container.has(toolStats.genericMined, PersistentDataType.INTEGER)) { if (container.has(toolStats.genericMined, PersistentDataType.INTEGER)) {
blocksMined = container.get(toolStats.genericMined, PersistentDataType.INTEGER); blocksMined = container.get(toolStats.genericMined, PersistentDataType.INTEGER);
} else {
blocksMined = 0;
} }
if (blocksMined == null) { if (blocksMined == null) {
blocksMined = 0; blocksMined = 0;
toolStats.logger.warning(originalTool + " does not have valid generic-mined set! Resting to zero. This should NEVER happen.");
} }
blocksMined++; blocksMined++;
@@ -87,7 +98,7 @@ public class BlocksMined implements Listener {
if (configLore == null || configLoreRaw == null) { if (configLore == null || configLoreRaw == null) {
toolStats.logger.warning("There is no lore message for messages.blocks-mined!"); toolStats.logger.warning("There is no lore message for messages.blocks-mined!");
return; return null;
} }
List<String> lore; List<String> lore;
@@ -113,9 +124,10 @@ public class BlocksMined implements Listener {
lore.add(configLoreRaw.replace("{blocks}", toolStats.commaFormat.format(blocksMined))); lore.add(configLoreRaw.replace("{blocks}", toolStats.commaFormat.format(blocksMined)));
} }
// do we add the lore based on the config? // do we add the lore based on the config?
if (toolStats.checkConfig(itemStack, "blocks-mined")) { if (toolStats.checkConfig(newTool, "blocks-mined")) {
meta.setLore(lore); meta.setLore(lore);
} }
itemStack.setItemMeta(meta); newTool.setItemMeta(meta);
return newTool;
} }
} }

View File

@@ -25,6 +25,7 @@ import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame; import org.bukkit.entity.ItemFrame;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.world.ChunkPopulateEvent; import org.bukkit.event.world.ChunkPopulateEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -43,7 +44,7 @@ public class ChunkPopulate implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onPopulate(ChunkPopulateEvent event) { public void onPopulate(ChunkPopulateEvent event) {
if (event.getChunk().getWorld().getEnvironment() != World.Environment.THE_END) { if (event.getChunk().getWorld().getEnvironment() != World.Environment.THE_END) {
return; return;

View File

@@ -25,6 +25,7 @@ import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -42,7 +43,7 @@ public class CraftItem implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onCraft(CraftItemEvent event) { public void onCraft(CraftItemEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@@ -89,6 +90,7 @@ public class CraftItem implements Listener {
ItemStack newItem = itemStack.clone(); ItemStack newItem = itemStack.clone();
ItemMeta meta = newItem.getItemMeta(); ItemMeta meta = newItem.getItemMeta();
if (meta == null) { if (meta == null) {
toolStats.logger.warning(itemStack + " does NOT have any meta! Unable to update stats.");
return null; return null;
} }
// get the current time // get the current time

View File

@@ -23,6 +23,7 @@ import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
@@ -45,7 +46,7 @@ public class EntityDamage implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onDamage(EntityDamageByEntityEvent event) { public void onDamage(EntityDamageByEntityEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@@ -145,7 +146,7 @@ public class EntityDamage implements Listener {
} }
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onDamage(EntityDamageEvent event) { public void onDamage(EntityDamageEvent event) {
if (!(event.getEntity() instanceof LivingEntity)) { if (!(event.getEntity() instanceof LivingEntity)) {
return; return;
@@ -175,7 +176,7 @@ public class EntityDamage implements Listener {
} }
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onDamage(EntityDamageByBlockEvent event) { public void onDamage(EntityDamageByBlockEvent event) {
if (!(event.getEntity() instanceof LivingEntity)) { if (!(event.getEntity() instanceof LivingEntity)) {
return; return;
@@ -215,15 +216,19 @@ public class EntityDamage implements Listener {
ItemStack finalItem = itemStack.clone(); ItemStack finalItem = itemStack.clone();
ItemMeta meta = finalItem.getItemMeta(); ItemMeta meta = finalItem.getItemMeta();
if (meta == null) { if (meta == null) {
toolStats.logger.warning(itemStack + " does NOT have any meta! Unable to update stats.");
return null; return null;
} }
Integer playerKills = null; Integer playerKills = null;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
if (container.has(toolStats.swordPlayerKills, PersistentDataType.INTEGER)) { if (container.has(toolStats.swordPlayerKills, PersistentDataType.INTEGER)) {
playerKills = container.get(toolStats.swordPlayerKills, PersistentDataType.INTEGER); playerKills = container.get(toolStats.swordPlayerKills, PersistentDataType.INTEGER);
} else {
playerKills = 0;
} }
if (playerKills == null) { if (playerKills == null) {
playerKills = 0; playerKills = 0;
toolStats.logger.warning(itemStack + " does not have valid player-kills set! Resting to zero. This should NEVER happen.");
} }
playerKills++; playerKills++;
@@ -277,15 +282,20 @@ public class EntityDamage implements Listener {
ItemStack finalItem = itemStack.clone(); ItemStack finalItem = itemStack.clone();
ItemMeta meta = finalItem.getItemMeta(); ItemMeta meta = finalItem.getItemMeta();
if (meta == null) { if (meta == null) {
toolStats.logger.warning(itemStack + " does NOT have any meta! Unable to update stats.");
return null; return null;
} }
Integer mobKills = null; Integer mobKills = null;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
if (container.has(toolStats.swordMobKills, PersistentDataType.INTEGER)) { if (container.has(toolStats.swordMobKills, PersistentDataType.INTEGER)) {
mobKills = container.get(toolStats.swordMobKills, PersistentDataType.INTEGER); mobKills = container.get(toolStats.swordMobKills, PersistentDataType.INTEGER);
} else {
mobKills = 0;
} }
if (mobKills == null) { if (mobKills == null) {
mobKills = 0; mobKills = 0;
toolStats.logger.warning(itemStack + " does not have valid mob-kills set! Resting to zero. This should NEVER happen.");
} }
mobKills++; mobKills++;
@@ -338,15 +348,20 @@ public class EntityDamage implements Listener {
private void updateArmorDamage(ItemStack itemStack, double damage) { private void updateArmorDamage(ItemStack itemStack, double damage) {
ItemMeta meta = itemStack.getItemMeta(); ItemMeta meta = itemStack.getItemMeta();
if (meta == null) { if (meta == null) {
toolStats.logger.warning(itemStack + " does NOT have any meta! Unable to update stats.");
return; return;
} }
Double damageTaken = null; Double damageTaken;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
if (container.has(toolStats.armorDamage, PersistentDataType.DOUBLE)) { if (container.has(toolStats.armorDamage, PersistentDataType.DOUBLE)) {
damageTaken = container.get(toolStats.armorDamage, PersistentDataType.DOUBLE); damageTaken = container.get(toolStats.armorDamage, PersistentDataType.DOUBLE);
} else {
damageTaken = 0.0;
} }
if (damageTaken == null) { if (damageTaken == null) {
damageTaken = 0.0; damageTaken = 0.0;
toolStats.logger.warning(itemStack + " does not have valid damage-taken set! Resting to zero. This should NEVER happen.");
} }
damageTaken = damageTaken + damage; damageTaken = damageTaken + damage;

View File

@@ -22,6 +22,7 @@ import lol.hyper.toolstats.tools.ItemChecker;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -37,7 +38,7 @@ public class EntityDeath implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onDeath(EntityDeathEvent event) { public void onDeath(EntityDeathEvent event) {
LivingEntity livingEntity = event.getEntity(); LivingEntity livingEntity = event.getEntity();
if (livingEntity instanceof Player) { if (livingEntity instanceof Player) {
@@ -46,9 +47,13 @@ public class EntityDeath implements Listener {
UUID livingEntityUUID = event.getEntity().getUniqueId(); UUID livingEntityUUID = event.getEntity().getUniqueId();
// if it's a mob we are tracking that matters // if it's a mob we are tracking that matters
if (toolStats.mobKill.trackedMobs.contains(livingEntityUUID)) { if (toolStats.mobKill.trackedMobs.contains(livingEntityUUID)) {
for (ItemStack current : event.getDrops()) { for (int i = 0; i < event.getDrops().size(); i++) {
ItemStack current = event.getDrops().get(i);
if (ItemChecker.isValidItem(current.getType())) { if (ItemChecker.isValidItem(current.getType())) {
addLore(current, livingEntity.getName()); ItemStack newItem = addLore(current, livingEntity.getName());
if (newItem != null) {
event.getDrops().set(i, newItem);
}
} }
} }
toolStats.mobKill.trackedMobs.remove(livingEntityUUID); toolStats.mobKill.trackedMobs.remove(livingEntityUUID);
@@ -58,13 +63,14 @@ public class EntityDeath implements Listener {
/** /**
* Adds "drop by" tag to item. * Adds "drop by" tag to item.
* *
* @param itemStack The item to add lore to. * @param oldItem The item to add lore to.
* @param mob The mob or player name. * @param mob The mob or player name.
*/ */
private void addLore(ItemStack itemStack, String mob) { private ItemStack addLore(ItemStack oldItem, String mob) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack newItem = oldItem.clone();
ItemMeta meta = newItem.getItemMeta();
if (meta == null) { if (meta == null) {
return; return null;
} }
boolean hasTag = false; boolean hasTag = false;
@@ -73,7 +79,7 @@ public class EntityDeath implements Listener {
if (droppedByLore == null || droppedByLoreRaw == null) { if (droppedByLore == null || droppedByLoreRaw == null) {
toolStats.logger.warning("There is no lore message for messages.dropped-by!"); toolStats.logger.warning("There is no lore message for messages.dropped-by!");
return; return null;
} }
List<String> lore; List<String> lore;
@@ -96,6 +102,7 @@ public class EntityDeath implements Listener {
if (toolStats.config.getBoolean("enabled.dropped-by")) { if (toolStats.config.getBoolean("enabled.dropped-by")) {
meta.setLore(lore); meta.setLore(lore);
} }
itemStack.setItemMeta(meta); newItem.setItemMeta(meta);
return newItem;
} }
} }

View File

@@ -28,6 +28,7 @@ import org.bukkit.block.Chest;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.minecart.StorageMinecart; import org.bukkit.entity.minecart.StorageMinecart;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.world.LootGenerateEvent; import org.bukkit.event.world.LootGenerateEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
@@ -49,7 +50,7 @@ public class GenerateLoot implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onGenerateLoot(LootGenerateEvent event) { public void onGenerateLoot(LootGenerateEvent event) {
InventoryHolder inventoryHolder = event.getInventoryHolder(); InventoryHolder inventoryHolder = event.getInventoryHolder();
if (inventoryHolder == null) { if (inventoryHolder == null) {

View File

@@ -23,6 +23,7 @@ import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -42,7 +43,7 @@ public class PickupItem implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onPickup(EntityPickupItemEvent event) { public void onPickup(EntityPickupItemEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;

View File

@@ -25,6 +25,7 @@ import org.bukkit.Material;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerFishEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -44,7 +45,7 @@ public class PlayerFish implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onFish(PlayerFishEvent event) { public void onFish(PlayerFishEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@@ -58,37 +59,54 @@ public class PlayerFish implements Listener {
if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) { if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) {
return; return;
} }
// make sure the player is holding a fishing rod
ItemStack heldItem = player.getInventory().getItem(player.getInventory().getHeldItemSlot()); ItemStack heldItem = player.getInventory().getItem(player.getInventory().getHeldItemSlot());
int heldItemSlot = player.getInventory().getHeldItemSlot();
if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.FISHING_ROD) { if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.FISHING_ROD) {
return; return;
} }
updateFishCount(heldItem); // update the fishing rod to the new one
ItemStack newRod = updateFishCount(heldItem);
if (newRod != null) {
player.getInventory().setItem(heldItemSlot, newRod);
}
// check if the player caught an item
if (event.getCaught() == null) { if (event.getCaught() == null) {
return; return;
} }
ItemStack caughtItem = ((Item) event.getCaught()).getItemStack(); ItemStack caughtItem = ((Item) event.getCaught()).getItemStack();
Item caughtItemEntity = (Item) event.getCaught();
if (ItemChecker.isValidItem(caughtItem.getType())) { if (ItemChecker.isValidItem(caughtItem.getType())) {
addNewLore(caughtItem, player); ItemStack newItem = addNewLore(caughtItem, player);
if (newItem != null) {
caughtItemEntity.setItemStack(newItem);
}
} }
} }
/** /**
* Updates a fishing rod's count. * Update a fishing rod's fish count.
* * @param originalRod The fishing rod to update.
* @param itemStack The fishing rod to update. * @return A new fishing rod with update counts.
*/ */
private void updateFishCount(ItemStack itemStack) { private ItemStack updateFishCount(ItemStack originalRod) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack newRod = originalRod.clone();
ItemMeta meta = newRod.getItemMeta();
if (meta == null) { if (meta == null) {
return; toolStats.logger.warning(originalRod + " does NOT have any meta! Unable to update stats.");
return null;
} }
Integer fishCaught = null; Integer fishCaught;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
if (container.has(toolStats.fishingRodCaught, PersistentDataType.INTEGER)) { if (container.has(toolStats.fishingRodCaught, PersistentDataType.INTEGER)) {
fishCaught = container.get(toolStats.fishingRodCaught, PersistentDataType.INTEGER); fishCaught = container.get(toolStats.fishingRodCaught, PersistentDataType.INTEGER);
} else {
fishCaught = 0;
} }
if (fishCaught == null) { if (fishCaught == null) {
fishCaught = 0; fishCaught = 0;
toolStats.logger.warning(originalRod + " does not have valid fish-caught set! Resting to zero. This should NEVER happen.");
} }
fishCaught++; fishCaught++;
@@ -99,7 +117,7 @@ public class PlayerFish implements Listener {
if (fishCaughtLore == null || fishCaughtLoreRaw == null) { if (fishCaughtLore == null || fishCaughtLoreRaw == null) {
toolStats.logger.warning("There is no lore message for messages.fish-caught!"); toolStats.logger.warning("There is no lore message for messages.fish-caught!");
return; return null;
} }
List<String> lore; List<String> lore;
@@ -127,26 +145,28 @@ public class PlayerFish implements Listener {
if (toolStats.config.getBoolean("enabled.fish-caught")) { if (toolStats.config.getBoolean("enabled.fish-caught")) {
meta.setLore(lore); meta.setLore(lore);
} }
itemStack.setItemMeta(meta); newRod.setItemMeta(meta);
return newRod;
} }
/** /**
* Adds "caught by" tags to newly fished items. * Add lore to newly caught item.
* * @param originalItem The original item to add lore.
* @param itemStack The item to add lore to. * @param owner The player who caught it.
* @param owner The player who caught the item. * @return A copy of the new item with lore.
*/ */
private void addNewLore(ItemStack itemStack, Player owner) { private ItemStack addNewLore(ItemStack originalItem, Player owner) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack newItem = originalItem.clone();
ItemMeta meta = originalItem.getItemMeta();
if (meta == null) { if (meta == null) {
return; return null;
} }
long timeCreated = System.currentTimeMillis(); long timeCreated = System.currentTimeMillis();
Date finalDate = new Date(timeCreated); Date finalDate = new Date(timeCreated);
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
if (container.has(toolStats.timeCreated, PersistentDataType.LONG) || container.has(toolStats.genericOwner, PersistentDataType.LONG)) { if (container.has(toolStats.timeCreated, PersistentDataType.LONG) || container.has(toolStats.genericOwner, PersistentDataType.LONG)) {
return; return null;
} }
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
@@ -157,7 +177,7 @@ public class PlayerFish implements Listener {
if (caughtByLoreRaw == null || caughtOnLoreRaw == null) { if (caughtByLoreRaw == null || caughtOnLoreRaw == null) {
toolStats.logger.warning("There is no lore message for messages.fished!"); toolStats.logger.warning("There is no lore message for messages.fished!");
return; return null;
} }
List<String> lore; List<String> lore;
@@ -167,11 +187,12 @@ public class PlayerFish implements Listener {
} else { } else {
lore = new ArrayList<>(); lore = new ArrayList<>();
} }
if (toolStats.checkConfig(itemStack, "fished-tag")) { if (toolStats.checkConfig(newItem, "fished-tag")) {
lore.add(caughtOnLoreRaw.replace("{date}", toolStats.dateFormat.format(finalDate))); lore.add(caughtOnLoreRaw.replace("{date}", toolStats.dateFormat.format(finalDate)));
lore.add(caughtByLoreRaw.replace("{player}", owner.getName())); lore.add(caughtByLoreRaw.replace("{player}", owner.getName()));
meta.setLore(lore);
} }
meta.setLore(lore); newItem.setItemMeta(meta);
itemStack.setItemMeta(meta); return newItem;
} }
} }

View File

@@ -24,6 +24,7 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Sheep; import org.bukkit.entity.Sheep;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -42,7 +43,7 @@ public class SheepShear implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onShear(PlayerInteractEntityEvent event) { public void onShear(PlayerInteractEntityEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@@ -56,7 +57,8 @@ public class SheepShear implements Listener {
return; return;
} }
// check if the player is right-clicking with shears only // check if the player is right-clicking with shears only
ItemStack heldItem = player.getInventory().getItem(player.getInventory().getHeldItemSlot()); int heldItemSlot = player.getInventory().getHeldItemSlot();
ItemStack heldItem = player.getInventory().getItem(heldItemSlot);
if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.SHEARS) { if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.SHEARS) {
return; return;
} }
@@ -64,27 +66,36 @@ public class SheepShear implements Listener {
Sheep sheep = (Sheep) entity; Sheep sheep = (Sheep) entity;
// make sure the sheep is not sheared // make sure the sheep is not sheared
if (!sheep.isSheared()) { if (!sheep.isSheared()) {
addLore(heldItem); ItemStack newShears = addLore(heldItem);
if (newShears != null) {
player.getInventory().setItem(heldItemSlot, newShears);
}
} }
} }
/** /**
* Adds tags to shears. * Adds tags to shears.
* *
* @param itemStack The shears. * @param oldShears The shears.
*/ */
private void addLore(ItemStack itemStack) { private ItemStack addLore(ItemStack oldShears) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack newShears = oldShears.clone();
ItemMeta meta = newShears.getItemMeta();
if (meta == null) { if (meta == null) {
return; toolStats.logger.warning(newShears + " does NOT have any meta! Unable to update stats.");
return null;
} }
Integer sheepSheared = 0; Integer sheepSheared;
PersistentDataContainer container = meta.getPersistentDataContainer(); PersistentDataContainer container = meta.getPersistentDataContainer();
if (container.has(toolStats.shearsSheared, PersistentDataType.INTEGER)) { if (container.has(toolStats.shearsSheared, PersistentDataType.INTEGER)) {
sheepSheared = container.get(toolStats.shearsSheared, PersistentDataType.INTEGER); sheepSheared = container.get(toolStats.shearsSheared, PersistentDataType.INTEGER);
} else {
sheepSheared = 0;
} }
if (sheepSheared == null) { if (sheepSheared == null) {
sheepSheared = 0; sheepSheared = 0;
toolStats.logger.warning(newShears + " does not have valid sheared set! Resting to zero. This should NEVER happen.");
} }
sheepSheared++; sheepSheared++;
@@ -95,7 +106,7 @@ public class SheepShear implements Listener {
if (sheepShearedLore == null || sheepShearedLoreRaw == null) { if (sheepShearedLore == null || sheepShearedLoreRaw == null) {
toolStats.logger.warning("There is no lore message for messages.sheep-sheared!"); toolStats.logger.warning("There is no lore message for messages.sheep-sheared!");
return; return null;
} }
List<String> lore; List<String> lore;
@@ -123,6 +134,7 @@ public class SheepShear implements Listener {
if (toolStats.config.getBoolean("enabled.sheep-sheared")) { if (toolStats.config.getBoolean("enabled.sheep-sheared")) {
meta.setLore(lore); meta.setLore(lore);
} }
itemStack.setItemMeta(meta); newShears.setItemMeta(meta);
return newShears;
} }
} }

View File

@@ -25,6 +25,7 @@ import org.bukkit.ChatColor;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
@@ -47,7 +48,7 @@ public class VillagerTrade implements Listener {
this.toolStats = toolStats; this.toolStats = toolStats;
} }
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onTrade(InventoryClickEvent event) { public void onTrade(InventoryClickEvent event) {
if (event.isCancelled() || event.getCurrentItem() == null) { if (event.isCancelled() || event.getCurrentItem() == null) {
return; return;
@@ -87,13 +88,15 @@ public class VillagerTrade implements Listener {
/** /**
* Adds "traded by" tags to item. * Adds "traded by" tags to item.
* *
* @param itemStack The item to add lore. * @param oldItem The item to add lore.
* @param owner The player who traded. * @param owner The player who traded.
* @return The item with lore. * @return The item with lore.
*/ */
private ItemStack addLore(ItemStack itemStack, Player owner) { private ItemStack addLore(ItemStack oldItem, Player owner) {
ItemMeta meta = itemStack.getItemMeta(); ItemStack newItem = oldItem.clone();
ItemMeta meta = newItem.getItemMeta();
if (meta == null) { if (meta == null) {
toolStats.logger.warning(newItem + " does NOT have any meta! Unable to update stats.");
return null; return null;
} }
long timeCreated = System.currentTimeMillis(); long timeCreated = System.currentTimeMillis();
@@ -121,12 +124,12 @@ public class VillagerTrade implements Listener {
} else { } else {
lore = new ArrayList<>(); lore = new ArrayList<>();
} }
if (toolStats.checkConfig(itemStack, "traded-tag")) { if (toolStats.checkConfig(newItem, "traded-tag")) {
lore.add(tradedOnLoreRaw.replace("{date}", toolStats.dateFormat.format(finalDate))); lore.add(tradedOnLoreRaw.replace("{date}", toolStats.dateFormat.format(finalDate)));
lore.add(tradedByLoreRaw.replace("{player}", owner.getName())); lore.add(tradedByLoreRaw.replace("{player}", owner.getName()));
meta.setLore(lore);
} }
meta.setLore(lore); newItem.setItemMeta(meta);
itemStack.setItemMeta(meta); return newItem;
return itemStack;
} }
} }