From 6af49d6c30bc4f2d828bc986cce9e42d53082ff6 Mon Sep 17 00:00:00 2001 From: hyperdefined Date: Mon, 13 Jun 2022 02:55:11 -0400 Subject: [PATCH] better null handling --- .../hyper/toolstats/events/ChunkPopulate.java | 2 +- .../lol/hyper/toolstats/events/CraftItem.java | 7 +++---- .../hyper/toolstats/events/GenerateLoot.java | 5 ++++- .../lol/hyper/toolstats/events/PickupItem.java | 17 +++++++++++------ .../hyper/toolstats/events/VillagerTrade.java | 8 ++++---- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java b/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java index 2705d39..efb4693 100644 --- a/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java +++ b/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java @@ -35,7 +35,7 @@ import org.bukkit.persistence.PersistentDataType; public class ChunkPopulate implements Listener { // this tags all elytras with a "new" tag - // this let's use tag any new elytras player loot + // this let's us track any new elytras player loot private final ToolStats toolStats; diff --git a/src/main/java/lol/hyper/toolstats/events/CraftItem.java b/src/main/java/lol/hyper/toolstats/events/CraftItem.java index f8ddce1..c2753e8 100644 --- a/src/main/java/lol/hyper/toolstats/events/CraftItem.java +++ b/src/main/java/lol/hyper/toolstats/events/CraftItem.java @@ -65,11 +65,10 @@ public class CraftItem implements Listener { } // test the item before setting it ItemStack newItem = addLore(itemStack, player); - if (newItem == null) { - return; + if (newItem != null) { + // set the result + event.setCurrentItem(newItem); } - // set the result - event.setCurrentItem(newItem); } } } diff --git a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java index f85ba44..121d873 100644 --- a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java +++ b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java @@ -85,7 +85,10 @@ public class GenerateLoot implements Listener { String name = itemStack.getType().toString().toLowerCase(Locale.ROOT); for (String x : toolStats.allValidItems) { if (name.contains(x)) { - chestInv.setItem(i, addLore(itemStack, player)); + ItemStack newItem = addLore(itemStack, player); + if (newItem != null) { + chestInv.setItem(i, newItem); + } } } } diff --git a/src/main/java/lol/hyper/toolstats/events/PickupItem.java b/src/main/java/lol/hyper/toolstats/events/PickupItem.java index 22727b6..a41d00c 100644 --- a/src/main/java/lol/hyper/toolstats/events/PickupItem.java +++ b/src/main/java/lol/hyper/toolstats/events/PickupItem.java @@ -59,7 +59,10 @@ public class PickupItem implements Listener { if (itemStack.getType() == Material.ELYTRA) { // the elytra has the new key, set the lore to it if (container.has(toolStats.newElytra, PersistentDataType.INTEGER)) { - addLore(itemStack, (Player) event.getEntity()); + ItemStack newElytra = addLore(itemStack, (Player) event.getEntity()); + if (newElytra != null) { + item.setItemStack(newElytra); + } } } } @@ -72,10 +75,11 @@ public class PickupItem implements Listener { * @param itemStack The elytra to add lore to. * @param owner The player who found it. */ - private void addLore(ItemStack itemStack, Player owner) { - ItemMeta meta = itemStack.getItemMeta(); + private ItemStack addLore(ItemStack itemStack, Player owner) { + ItemStack finalItem = itemStack.clone(); + ItemMeta meta = finalItem.getItemMeta(); if (meta == null) { - return; + return null; } long timeCreated = System.currentTimeMillis(); Date finalDate = new Date(timeCreated); @@ -89,7 +93,7 @@ public class PickupItem implements Listener { if (foundByLoreRaw == null || foundOnLoreRaw == null) { toolStats.logger.warning("There is no lore message for messages.looted!"); - return; + return null; } List lore; @@ -104,6 +108,7 @@ public class PickupItem implements Listener { lore.add(foundByLoreRaw.replace("{player}", owner.getName())); } meta.setLore(lore); - itemStack.setItemMeta(meta); + finalItem.setItemMeta(meta); + return finalItem; } } diff --git a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java index aca4a9c..0fa27b2 100644 --- a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java +++ b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java @@ -68,12 +68,12 @@ public class VillagerTrade implements Listener { } } ItemStack newItem = addLore(item, (Player) event.getWhoClicked()); - if (newItem == null) { + if (newItem != null) { + // this gets delayed since villager inventories suck for no reason + // if you don't delay this it doesn't work idk + Bukkit.getScheduler().runTaskLater(toolStats, () -> event.setCurrentItem(newItem), 5); return; } - // this gets delayed since villager inventories suck for no reason - // if you don't delay this it doesn't work idk - Bukkit.getScheduler().runTaskLater(toolStats, () -> event.setCurrentItem(newItem), 5); } } }