mirror of
https://github.com/hyperdefined/ToolStats.git
synced 2025-12-08 05:34:58 +00:00
much better item checking
This commit is contained in:
@@ -58,11 +58,6 @@ public final class ToolStats extends JavaPlugin {
|
|||||||
// used for tracking new elytras
|
// used for tracking new elytras
|
||||||
public final NamespacedKey newElytra = new NamespacedKey(this, "new");
|
public final NamespacedKey newElytra = new NamespacedKey(this, "new");
|
||||||
|
|
||||||
public final String[] allValidItems = {
|
|
||||||
"pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing"
|
|
||||||
};
|
|
||||||
public final String[] meleeItems = {"sword", "trident", "axe"};
|
|
||||||
public final String[] mineItems = {"pickaxe", "axe", "hoe", "shovel", "shear"};
|
|
||||||
public final SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy", Locale.ENGLISH);
|
public final SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy", Locale.ENGLISH);
|
||||||
|
|
||||||
public BlocksMined blocksMined;
|
public BlocksMined blocksMined;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
package lol.hyper.toolstats.events;
|
package lol.hyper.toolstats.events;
|
||||||
|
|
||||||
import lol.hyper.toolstats.ToolStats;
|
import lol.hyper.toolstats.ToolStats;
|
||||||
|
import lol.hyper.toolstats.tools.ItemChecker;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -30,7 +31,6 @@ import org.bukkit.persistence.PersistentDataContainer;
|
|||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class BlocksMined implements Listener {
|
public class BlocksMined implements Listener {
|
||||||
@@ -56,8 +56,7 @@ public class BlocksMined implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// only check certain items
|
// only check certain items
|
||||||
String itemName = heldItem.getType().toString().toLowerCase();
|
if (!ItemChecker.isMineTool(heldItem.getType())) {
|
||||||
if (Arrays.stream(toolStats.mineItems).noneMatch(itemName::contains)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// if it's an item we want, update the stats
|
// if it's an item we want, update the stats
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
package lol.hyper.toolstats.events;
|
package lol.hyper.toolstats.events;
|
||||||
|
|
||||||
import lol.hyper.toolstats.ToolStats;
|
import lol.hyper.toolstats.ToolStats;
|
||||||
|
import lol.hyper.toolstats.tools.ItemChecker;
|
||||||
import lol.hyper.toolstats.tools.UUIDDataType;
|
import lol.hyper.toolstats.tools.UUIDDataType;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
@@ -54,10 +55,11 @@ public class CraftItem implements Listener {
|
|||||||
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String name = itemStack.getType().toString().toLowerCase(Locale.ROOT);
|
// only check certain items
|
||||||
// only check for items we want
|
if (!ItemChecker.isValidItem(itemStack.getType())) {
|
||||||
for (String x : toolStats.allValidItems) {
|
return;
|
||||||
if (name.contains(x)) {
|
}
|
||||||
|
|
||||||
// if the player shift clicks, send them this warning
|
// if the player shift clicks, send them this warning
|
||||||
if (event.isShiftClick()) {
|
if (event.isShiftClick()) {
|
||||||
String configMessage = toolStats.config.getString("messages.shift-click-warning.crafting");
|
String configMessage = toolStats.config.getString("messages.shift-click-warning.crafting");
|
||||||
@@ -74,8 +76,6 @@ public class CraftItem implements Listener {
|
|||||||
event.setCurrentItem(newItem);
|
event.setCurrentItem(newItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds crafted tags to item.
|
* Adds crafted tags to item.
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
package lol.hyper.toolstats.events;
|
package lol.hyper.toolstats.events;
|
||||||
|
|
||||||
import lol.hyper.toolstats.ToolStats;
|
import lol.hyper.toolstats.ToolStats;
|
||||||
|
import lol.hyper.toolstats.tools.ItemChecker;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
@@ -68,9 +69,8 @@ public class EntityDamage implements Listener {
|
|||||||
if (heldItem == null || heldItem.getType() == Material.AIR) {
|
if (heldItem == null || heldItem.getType() == Material.AIR) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// check items we want
|
// only check certain items
|
||||||
String itemName = heldItem.getType().toString().toLowerCase();
|
if (!ItemChecker.isMeleeWeapon(heldItem.getType())) {
|
||||||
if (Arrays.stream(toolStats.meleeItems).noneMatch(itemName::contains)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// a player is killing another player
|
// a player is killing another player
|
||||||
@@ -131,7 +131,7 @@ public class EntityDamage implements Listener {
|
|||||||
PlayerInventory inventory = player.getInventory();
|
PlayerInventory inventory = player.getInventory();
|
||||||
for (ItemStack armor : inventory.getArmorContents()) {
|
for (ItemStack armor : inventory.getArmorContents()) {
|
||||||
if (armor != null) {
|
if (armor != null) {
|
||||||
if (isArmor(armor.getType().toString().toLowerCase(Locale.ROOT))) {
|
if (ItemChecker.isArmor(armor.getType())) {
|
||||||
updateArmorDamage(armor, event.getFinalDamage());
|
updateArmorDamage(armor, event.getFinalDamage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -154,7 +154,7 @@ public class EntityDamage implements Listener {
|
|||||||
PlayerInventory inventory = player.getInventory();
|
PlayerInventory inventory = player.getInventory();
|
||||||
for (ItemStack armor : inventory.getArmorContents()) {
|
for (ItemStack armor : inventory.getArmorContents()) {
|
||||||
if (armor != null) {
|
if (armor != null) {
|
||||||
if (isArmor(armor.getType().toString().toLowerCase(Locale.ROOT))) {
|
if (ItemChecker.isArmor(armor.getType())) {
|
||||||
updateArmorDamage(armor, event.getFinalDamage());
|
updateArmorDamage(armor, event.getFinalDamage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -177,7 +177,7 @@ public class EntityDamage implements Listener {
|
|||||||
PlayerInventory inventory = player.getInventory();
|
PlayerInventory inventory = player.getInventory();
|
||||||
for (ItemStack armor : inventory.getArmorContents()) {
|
for (ItemStack armor : inventory.getArmorContents()) {
|
||||||
if (armor != null) {
|
if (armor != null) {
|
||||||
if (isArmor(armor.getType().toString().toLowerCase(Locale.ROOT))) {
|
if (ItemChecker.isArmor(armor.getType())) {
|
||||||
updateArmorDamage(armor, event.getFinalDamage());
|
updateArmorDamage(armor, event.getFinalDamage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -371,14 +371,4 @@ public class EntityDamage implements Listener {
|
|||||||
}
|
}
|
||||||
itemStack.setItemMeta(meta);
|
itemStack.setItemMeta(meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if item is an armor piece.
|
|
||||||
*
|
|
||||||
* @param itemType The item type, not name.
|
|
||||||
* @return If the item is an armor piece.
|
|
||||||
*/
|
|
||||||
private boolean isArmor(String itemType) {
|
|
||||||
return itemType.endsWith("_helmet") || itemType.endsWith("_chestplate") || itemType.endsWith("_leggings") || itemType.endsWith("_boots");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
package lol.hyper.toolstats.events;
|
package lol.hyper.toolstats.events;
|
||||||
|
|
||||||
import lol.hyper.toolstats.ToolStats;
|
import lol.hyper.toolstats.ToolStats;
|
||||||
|
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;
|
||||||
@@ -46,13 +47,10 @@ public class EntityDeath implements Listener {
|
|||||||
// 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 (ItemStack current : event.getDrops()) {
|
||||||
String name = current.getType().toString().toLowerCase(Locale.ROOT);
|
if (ItemChecker.isValidItem(current.getType())) {
|
||||||
for (String item : toolStats.allValidItems) {
|
|
||||||
if (name.contains(item)) {
|
|
||||||
addLore(current, livingEntity.getName());
|
addLore(current, livingEntity.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
toolStats.mobKill.trackedMobs.remove(livingEntityUUID);
|
toolStats.mobKill.trackedMobs.remove(livingEntityUUID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
package lol.hyper.toolstats.events;
|
package lol.hyper.toolstats.events;
|
||||||
|
|
||||||
import lol.hyper.toolstats.ToolStats;
|
import lol.hyper.toolstats.ToolStats;
|
||||||
import lol.hyper.toolstats.UUIDDataType;
|
import lol.hyper.toolstats.tools.ItemChecker;
|
||||||
|
import lol.hyper.toolstats.tools.UUIDDataType;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@@ -39,7 +40,6 @@ import org.bukkit.persistence.PersistentDataType;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
public class GenerateLoot implements Listener {
|
public class GenerateLoot implements Listener {
|
||||||
|
|
||||||
@@ -86,16 +86,13 @@ public class GenerateLoot implements Listener {
|
|||||||
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String name = itemStack.getType().toString().toLowerCase(Locale.ROOT);
|
if (ItemChecker.isValidItem(itemStack.getType())) {
|
||||||
for (String x : toolStats.allValidItems) {
|
|
||||||
if (name.contains(x)) {
|
|
||||||
ItemStack newItem = addLore(itemStack, player);
|
ItemStack newItem = addLore(itemStack, player);
|
||||||
if (newItem != null) {
|
if (newItem != null) {
|
||||||
chestInv.setItem(i, newItem);
|
chestInv.setItem(i, newItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}, 1);
|
}, 1);
|
||||||
}
|
}
|
||||||
@@ -110,9 +107,7 @@ public class GenerateLoot implements Listener {
|
|||||||
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String name = itemStack.getType().toString().toLowerCase(Locale.ROOT);
|
if (ItemChecker.isValidItem(itemStack.getType())) {
|
||||||
for (String x : toolStats.allValidItems) {
|
|
||||||
if (name.contains(x)) {
|
|
||||||
ItemStack newItem = addLore(itemStack, player);
|
ItemStack newItem = addLore(itemStack, player);
|
||||||
if (newItem != null) {
|
if (newItem != null) {
|
||||||
chestInv.setItem(i, newItem);
|
chestInv.setItem(i, newItem);
|
||||||
@@ -122,7 +117,6 @@ public class GenerateLoot implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds lore to newly generated items.
|
* Adds lore to newly generated items.
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
package lol.hyper.toolstats.events;
|
package lol.hyper.toolstats.events;
|
||||||
|
|
||||||
import lol.hyper.toolstats.ToolStats;
|
import lol.hyper.toolstats.ToolStats;
|
||||||
import lol.hyper.toolstats.UUIDDataType;
|
import lol.hyper.toolstats.tools.ItemChecker;
|
||||||
|
import lol.hyper.toolstats.tools.UUIDDataType;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
@@ -34,7 +35,6 @@ import org.bukkit.persistence.PersistentDataType;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
public class PlayerFish implements Listener {
|
public class PlayerFish implements Listener {
|
||||||
|
|
||||||
@@ -67,12 +67,10 @@ public class PlayerFish implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ItemStack caughtItem = ((Item) event.getCaught()).getItemStack();
|
ItemStack caughtItem = ((Item) event.getCaught()).getItemStack();
|
||||||
for (String x : toolStats.allValidItems) {
|
if (ItemChecker.isValidItem(caughtItem.getType())) {
|
||||||
if (caughtItem.getType().toString().toLowerCase(Locale.ROOT).contains(x)) {
|
|
||||||
addNewLore(caughtItem, player);
|
addNewLore(caughtItem, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates a fishing rod's count.
|
* Updates a fishing rod's count.
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
package lol.hyper.toolstats.events;
|
package lol.hyper.toolstats.events;
|
||||||
|
|
||||||
import lol.hyper.toolstats.ToolStats;
|
import lol.hyper.toolstats.ToolStats;
|
||||||
import lol.hyper.toolstats.UUIDDataType;
|
import lol.hyper.toolstats.tools.ItemChecker;
|
||||||
|
import lol.hyper.toolstats.tools.UUIDDataType;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
@@ -37,7 +38,6 @@ import org.bukkit.persistence.PersistentDataType;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
public class VillagerTrade implements Listener {
|
public class VillagerTrade implements Listener {
|
||||||
|
|
||||||
@@ -66,8 +66,7 @@ public class VillagerTrade implements Listener {
|
|||||||
if (event.getSlotType() == InventoryType.SlotType.RESULT) {
|
if (event.getSlotType() == InventoryType.SlotType.RESULT) {
|
||||||
ItemStack item = event.getCurrentItem();
|
ItemStack item = event.getCurrentItem();
|
||||||
// only check items we want
|
// only check items we want
|
||||||
for (String x : toolStats.allValidItems) {
|
if (ItemChecker.isValidItem(item.getType())) {
|
||||||
if (item.getType().toString().toLowerCase(Locale.ROOT).contains(x)) {
|
|
||||||
// if the player shift clicks, show the warning
|
// if the player shift clicks, show the warning
|
||||||
if (event.isShiftClick()) {
|
if (event.isShiftClick()) {
|
||||||
String configMessage = toolStats.config.getString("messages.shift-click-warning.trading");
|
String configMessage = toolStats.config.getString("messages.shift-click-warning.trading");
|
||||||
@@ -85,7 +84,6 @@ public class VillagerTrade implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds "traded by" tags to item.
|
* Adds "traded by" tags to item.
|
||||||
|
|||||||
71
src/main/java/lol/hyper/toolstats/tools/ItemChecker.java
Normal file
71
src/main/java/lol/hyper/toolstats/tools/ItemChecker.java
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ToolStats.
|
||||||
|
*
|
||||||
|
* ToolStats is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* ToolStats is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with ToolStats. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package lol.hyper.toolstats.tools;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class ItemChecker {
|
||||||
|
|
||||||
|
private static final String[] validItems = { "pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing" };
|
||||||
|
private static final String[] validArmor = { "helmet", "chestplate", "leggings", "boots" };
|
||||||
|
private static final String[] validMelee = {"sword", "trident", "axe"};
|
||||||
|
private static final String[] validMine = { "pickaxe", "axe", "hoe", "shovel", "shear" };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if item is an armor piece.
|
||||||
|
*
|
||||||
|
* @param itemType The item type, not name.
|
||||||
|
* @return If the item is an armor piece.
|
||||||
|
*/
|
||||||
|
public static boolean isArmor(Material itemType) {
|
||||||
|
return Arrays.stream(validArmor).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if item is a tool or armor piece we want to track.
|
||||||
|
*
|
||||||
|
* @param itemType The item type, not name.
|
||||||
|
* @return If the item something we want to track.
|
||||||
|
*/
|
||||||
|
public static boolean isValidItem(Material itemType) {
|
||||||
|
return Arrays.stream(validItems).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if item is a melee weapon.
|
||||||
|
*
|
||||||
|
* @param itemType The item type, not name.
|
||||||
|
* @return If the item is a melee weapon.
|
||||||
|
*/
|
||||||
|
public static boolean isMeleeWeapon(Material itemType) {
|
||||||
|
return Arrays.stream(validMelee).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if item is a mining tool.
|
||||||
|
*
|
||||||
|
* @param itemType The item type, not name.
|
||||||
|
* @return If the item is a mining tool.
|
||||||
|
*/
|
||||||
|
public static boolean isMineTool(Material itemType) {
|
||||||
|
return Arrays.stream(validMine).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user