diff --git a/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java b/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java index 162c3be..a18d65f 100644 --- a/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java +++ b/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java @@ -137,6 +137,11 @@ public class CommandToolStats implements TabExecutor { sender.sendMessage(Component.text("Invalid token type.", NamedTextColor.RED)); return true; } + // make sure tokens are enabled before giving + if (!toolStats.config.getBoolean("tokens.enabled")) { + sender.sendMessage(Component.text("Unable to give tokens. Tokens are disabled", NamedTextColor.RED)); + return true; + } // if the user does not send in a number, default to 1 int amount = 1; if (args.length >= 4) { diff --git a/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java b/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java index e7c592e..e0d8801 100644 --- a/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java +++ b/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java @@ -40,6 +40,10 @@ public class AnvilEvent implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onAnvilEvent(PrepareAnvilEvent event) { + // only listen if the token system is enabled + if (!toolStats.config.getBoolean("tokens.enabled")) { + return; + } AnvilInventory inventory = event.getInventory(); ItemStack firstSlot = inventory.getItem(0); @@ -58,7 +62,6 @@ public class AnvilEvent implements Listener { return; } - PersistentDataContainer firstSlotContainer = firstSlot.getItemMeta().getPersistentDataContainer(); PersistentDataContainer secondSlotContainer = secondSlot.getItemMeta().getPersistentDataContainer(); // make sure the 2nd item is one of ours diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java index dcf2f46..248961f 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java @@ -19,7 +19,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import org.bukkit.GameMode; -import org.bukkit.Material; import org.bukkit.entity.Arrow; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -112,19 +111,7 @@ public class EntityDamage implements Listener { return; } PlayerInventory shootingPlayerInventory = shootingPlayer.getInventory(); - ItemStack main = shootingPlayerInventory.getItemInMainHand(); - ItemStack offHand = shootingPlayerInventory.getItemInOffHand(); - boolean isMain = main.getType() == Material.BOW || main.getType() == Material.CROSSBOW; - boolean isOffHand = offHand.getType() == Material.BOW || offHand.getType() == Material.CROSSBOW; - ItemStack heldBow = null; - if (isMain) { - heldBow = main; - } - if (isOffHand) { - heldBow = offHand; - } - - // player swapped + ItemStack heldBow = toolStats.itemChecker.getBow(shootingPlayerInventory); if (heldBow == null) { return; } diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java index 007710b..1118ce6 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java @@ -33,7 +33,6 @@ import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.jetbrains.annotations.Nullable; import java.util.Date; import java.util.List; @@ -61,7 +60,7 @@ public class PlayerFish implements Listener { return; } - ItemStack fishingRod = getFishingRod(player.getInventory()); + ItemStack fishingRod = toolStats.itemChecker.getFishingRod(player.getInventory()); // player swapped items? if (fishingRod == null) { return; @@ -95,32 +94,6 @@ public class PlayerFish implements Listener { } } - /** - * Get the player's fishing rod. - * - * @param inventory Their inventory. - * @return Their fishing rod, either main or offhand. - */ - private static @Nullable ItemStack getFishingRod(PlayerInventory inventory) { - ItemStack main = inventory.getItemInMainHand(); - ItemStack offHand = inventory.getItemInOffHand(); - - boolean isMain = main.getType() == Material.FISHING_ROD; - boolean isOffHand = offHand.getType() == Material.FISHING_ROD; - - // if the player is holding a fishing rod in their main hand, use that one - // if the fishing rod is in their offhand instead, use that one after checking main hand - // Minecraft prioritizes main hand if the player holds in both hands - if (isMain) { - return main; - } - if (isOffHand) { - return offHand; - } - - return null; - } - /** * Add lore to newly caught item. * diff --git a/src/main/java/lol/hyper/toolstats/events/SheepShear.java b/src/main/java/lol/hyper/toolstats/events/SheepShear.java index 7146f7f..7beb781 100644 --- a/src/main/java/lol/hyper/toolstats/events/SheepShear.java +++ b/src/main/java/lol/hyper/toolstats/events/SheepShear.java @@ -29,7 +29,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import org.jetbrains.annotations.Nullable; public class SheepShear implements Listener { @@ -53,7 +52,7 @@ public class SheepShear implements Listener { return; } - ItemStack heldShears = getShears(player.getInventory()); + ItemStack heldShears = toolStats.itemChecker.getShears(player.getInventory()); // player swapped or we can't get the shears if (heldShears == null) { return; @@ -78,30 +77,4 @@ public class SheepShear implements Listener { } } } - - /** - * Get the player's shears. - * - * @param inventory Their inventory. - * @return Their shears, either main or offhand. - */ - private static @Nullable ItemStack getShears(PlayerInventory inventory) { - ItemStack main = inventory.getItemInMainHand(); - ItemStack offHand = inventory.getItemInOffHand(); - - boolean isMain = main.getType() == Material.SHEARS; - boolean isOffHand = offHand.getType() == Material.SHEARS; - - // if the player is holding shears in their main hand, use that one - // if the shears are in their offhand instead, use that one after checking main hand - // Minecraft prioritizes main hand if the player holds in both hands - if (isMain) { - return main; - } - if (isOffHand) { - return offHand; - } - - return null; - } } diff --git a/src/main/java/lol/hyper/toolstats/events/ShootBow.java b/src/main/java/lol/hyper/toolstats/events/ShootBow.java index fcd66c4..852a0cb 100644 --- a/src/main/java/lol/hyper/toolstats/events/ShootBow.java +++ b/src/main/java/lol/hyper/toolstats/events/ShootBow.java @@ -18,7 +18,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -29,13 +28,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.Nullable; -import java.util.List; - public class ShootBow implements Listener { private final ToolStats toolStats; @@ -56,7 +50,7 @@ public class ShootBow implements Listener { return; } - ItemStack heldBow = getBow(player.getInventory()); + ItemStack heldBow = toolStats.itemChecker.getBow(player.getInventory()); // player swapped or we can't get the bow if (heldBow == null) { return; @@ -75,30 +69,4 @@ public class ShootBow implements Listener { } } } - - /** - * Get the player's bow/crossbow. - * - * @param inventory Their inventory. - * @return Their bow/crossbow, either main or offhand. - */ - private static @Nullable ItemStack getBow(PlayerInventory inventory) { - ItemStack main = inventory.getItemInMainHand(); - ItemStack offHand = inventory.getItemInOffHand(); - - boolean isMain = main.getType() == Material.BOW || main.getType() == Material.CROSSBOW; - boolean isOffHand = offHand.getType() == Material.BOW || offHand.getType() == Material.CROSSBOW; - - // if the player is holding a bow in their main hand, use that one - // if the bow is in their offhand instead, use that one after checking main hand - // Minecraft prioritizes main hand if the player holds in both hands - if (isMain) { - return main; - } - if (isOffHand) { - return offHand; - } - - return null; - } } diff --git a/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java b/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java index 6f83e2b..daf8a9f 100644 --- a/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java +++ b/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java @@ -20,9 +20,11 @@ package lol.hyper.toolstats.tools; import lol.hyper.toolstats.ToolStats; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; @@ -200,4 +202,82 @@ public class ItemChecker { public int getCost(String tokenType) { return toolStats.config.getInt("tokens.data." + tokenType + ".levels"); } + + /** + * Get the player's bow/crossbow. + * + * @param inventory Their inventory. + * @return Their bow/crossbow, either main or offhand. + */ + public @Nullable ItemStack getBow(PlayerInventory inventory) { + ItemStack main = inventory.getItemInMainHand(); + ItemStack offHand = inventory.getItemInOffHand(); + + boolean isMain = main.getType() == Material.BOW || main.getType() == Material.CROSSBOW; + boolean isOffHand = offHand.getType() == Material.BOW || offHand.getType() == Material.CROSSBOW; + + // if the player is holding a bow in their main hand, use that one + // if the bow is in their offhand instead, use that one after checking main hand + // Minecraft prioritizes main hand if the player holds in both hands + if (isMain) { + return main; + } + if (isOffHand) { + return offHand; + } + + return null; + } + + /** + * Get the player's shears. + * + * @param inventory Their inventory. + * @return Their shears, either main or offhand. + */ + public @Nullable ItemStack getShears(PlayerInventory inventory) { + ItemStack main = inventory.getItemInMainHand(); + ItemStack offHand = inventory.getItemInOffHand(); + + boolean isMain = main.getType() == Material.SHEARS; + boolean isOffHand = offHand.getType() == Material.SHEARS; + + // if the player is holding shears in their main hand, use that one + // if the shears are in their offhand instead, use that one after checking main hand + // Minecraft prioritizes main hand if the player holds in both hands + if (isMain) { + return main; + } + if (isOffHand) { + return offHand; + } + + return null; + } + + /** + * Get the player's fishing rod. + * + * @param inventory Their inventory. + * @return Their fishing rod, either main or offhand. + */ + public @Nullable ItemStack getFishingRod(PlayerInventory inventory) { + ItemStack main = inventory.getItemInMainHand(); + ItemStack offHand = inventory.getItemInOffHand(); + + boolean isMain = main.getType() == Material.FISHING_ROD; + boolean isOffHand = offHand.getType() == Material.FISHING_ROD; + + // if the player is holding a fishing rod in their main hand, use that one + // if the fishing rod is in their offhand instead, use that one after checking main hand + // Minecraft prioritizes main hand if the player holds in both hands + if (isMain) { + return main; + } + if (isOffHand) { + return offHand; + } + + return null; + } } diff --git a/src/main/java/lol/hyper/toolstats/tools/config/TokenItems.java b/src/main/java/lol/hyper/toolstats/tools/config/TokenItems.java index f3b9842..d434d2c 100644 --- a/src/main/java/lol/hyper/toolstats/tools/config/TokenItems.java +++ b/src/main/java/lol/hyper/toolstats/tools/config/TokenItems.java @@ -20,7 +20,6 @@ package lol.hyper.toolstats.tools.config; import lol.hyper.toolstats.ToolStats; import net.kyori.adventure.text.Component; import org.bukkit.Material; -import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer;