Skip to content

Commit b581d9d

Browse files
committed
much better item checking
1 parent d355b7a commit b581d9d

File tree

9 files changed

+128
-85
lines changed

9 files changed

+128
-85
lines changed

src/main/java/lol/hyper/toolstats/ToolStats.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,6 @@ public final class ToolStats extends JavaPlugin {
5858
// used for tracking new elytras
5959
public final NamespacedKey newElytra = new NamespacedKey(this, "new");
6060

61-
public final String[] allValidItems = {
62-
"pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing"
63-
};
64-
public final String[] meleeItems = {"sword", "trident", "axe"};
65-
public final String[] mineItems = {"pickaxe", "axe", "hoe", "shovel", "shear"};
6661
public final SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy", Locale.ENGLISH);
6762

6863
public BlocksMined blocksMined;

src/main/java/lol/hyper/toolstats/events/BlocksMined.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package lol.hyper.toolstats.events;
1919

2020
import lol.hyper.toolstats.ToolStats;
21+
import lol.hyper.toolstats.tools.ItemChecker;
2122
import org.bukkit.GameMode;
2223
import org.bukkit.Material;
2324
import org.bukkit.entity.Player;
@@ -30,7 +31,6 @@
3031
import org.bukkit.persistence.PersistentDataType;
3132

3233
import java.util.ArrayList;
33-
import java.util.Arrays;
3434
import java.util.List;
3535

3636
public class BlocksMined implements Listener {
@@ -56,8 +56,7 @@ public void onBreak(BlockBreakEvent event) {
5656
return;
5757
}
5858
// only check certain items
59-
String itemName = heldItem.getType().toString().toLowerCase();
60-
if (Arrays.stream(toolStats.mineItems).noneMatch(itemName::contains)) {
59+
if (!ItemChecker.isMineTool(heldItem.getType())) {
6160
return;
6261
}
6362
// if it's an item we want, update the stats

src/main/java/lol/hyper/toolstats/events/CraftItem.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package lol.hyper.toolstats.events;
1919

2020
import lol.hyper.toolstats.ToolStats;
21+
import lol.hyper.toolstats.tools.ItemChecker;
2122
import lol.hyper.toolstats.tools.UUIDDataType;
2223
import org.bukkit.ChatColor;
2324
import org.bukkit.GameMode;
@@ -54,27 +55,26 @@ public void onCraft(CraftItemEvent event) {
5455
if (itemStack == null || itemStack.getType() == Material.AIR) {
5556
return;
5657
}
57-
String name = itemStack.getType().toString().toLowerCase(Locale.ROOT);
58-
// only check for items we want
59-
for (String x : toolStats.allValidItems) {
60-
if (name.contains(x)) {
61-
// if the player shift clicks, send them this warning
62-
if (event.isShiftClick()) {
63-
String configMessage = toolStats.config.getString("messages.shift-click-warning.crafting");
64-
if (configMessage != null) {
65-
if (configMessage.length() != 0) {
66-
event.getWhoClicked().sendMessage(ChatColor.translateAlternateColorCodes('&', configMessage));
67-
}
68-
}
69-
}
70-
// test the item before setting it
71-
ItemStack newItem = addLore(itemStack, player);
72-
if (newItem != null) {
73-
// set the result
74-
event.setCurrentItem(newItem);
58+
// only check certain items
59+
if (!ItemChecker.isValidItem(itemStack.getType())) {
60+
return;
61+
}
62+
63+
// if the player shift clicks, send them this warning
64+
if (event.isShiftClick()) {
65+
String configMessage = toolStats.config.getString("messages.shift-click-warning.crafting");
66+
if (configMessage != null) {
67+
if (configMessage.length() != 0) {
68+
event.getWhoClicked().sendMessage(ChatColor.translateAlternateColorCodes('&', configMessage));
7569
}
7670
}
7771
}
72+
// test the item before setting it
73+
ItemStack newItem = addLore(itemStack, player);
74+
if (newItem != null) {
75+
// set the result
76+
event.setCurrentItem(newItem);
77+
}
7878
}
7979

8080
/**

src/main/java/lol/hyper/toolstats/events/EntityDamage.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package lol.hyper.toolstats.events;
1919

2020
import lol.hyper.toolstats.ToolStats;
21+
import lol.hyper.toolstats.tools.ItemChecker;
2122
import org.bukkit.GameMode;
2223
import org.bukkit.Material;
2324
import org.bukkit.entity.*;
@@ -68,9 +69,8 @@ public void onDamage(EntityDamageByEntityEvent event) {
6869
if (heldItem == null || heldItem.getType() == Material.AIR) {
6970
return;
7071
}
71-
// check items we want
72-
String itemName = heldItem.getType().toString().toLowerCase();
73-
if (Arrays.stream(toolStats.meleeItems).noneMatch(itemName::contains)) {
72+
// only check certain items
73+
if (!ItemChecker.isMeleeWeapon(heldItem.getType())) {
7474
return;
7575
}
7676
// a player is killing another player
@@ -131,7 +131,7 @@ public void onDamage(EntityDamageByEntityEvent event) {
131131
PlayerInventory inventory = player.getInventory();
132132
for (ItemStack armor : inventory.getArmorContents()) {
133133
if (armor != null) {
134-
if (isArmor(armor.getType().toString().toLowerCase(Locale.ROOT))) {
134+
if (ItemChecker.isArmor(armor.getType())) {
135135
updateArmorDamage(armor, event.getFinalDamage());
136136
}
137137
}
@@ -154,7 +154,7 @@ public void onDamage(EntityDamageEvent event) {
154154
PlayerInventory inventory = player.getInventory();
155155
for (ItemStack armor : inventory.getArmorContents()) {
156156
if (armor != null) {
157-
if (isArmor(armor.getType().toString().toLowerCase(Locale.ROOT))) {
157+
if (ItemChecker.isArmor(armor.getType())) {
158158
updateArmorDamage(armor, event.getFinalDamage());
159159
}
160160
}
@@ -177,7 +177,7 @@ public void onDamage(EntityDamageByBlockEvent event) {
177177
PlayerInventory inventory = player.getInventory();
178178
for (ItemStack armor : inventory.getArmorContents()) {
179179
if (armor != null) {
180-
if (isArmor(armor.getType().toString().toLowerCase(Locale.ROOT))) {
180+
if (ItemChecker.isArmor(armor.getType())) {
181181
updateArmorDamage(armor, event.getFinalDamage());
182182
}
183183
}
@@ -371,14 +371,4 @@ private void updateArmorDamage(ItemStack itemStack, double damage) {
371371
}
372372
itemStack.setItemMeta(meta);
373373
}
374-
375-
/**
376-
* Check if item is an armor piece.
377-
*
378-
* @param itemType The item type, not name.
379-
* @return If the item is an armor piece.
380-
*/
381-
private boolean isArmor(String itemType) {
382-
return itemType.endsWith("_helmet") || itemType.endsWith("_chestplate") || itemType.endsWith("_leggings") || itemType.endsWith("_boots");
383-
}
384374
}

src/main/java/lol/hyper/toolstats/events/EntityDeath.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package lol.hyper.toolstats.events;
1919

2020
import lol.hyper.toolstats.ToolStats;
21+
import lol.hyper.toolstats.tools.ItemChecker;
2122
import org.bukkit.entity.LivingEntity;
2223
import org.bukkit.entity.Player;
2324
import org.bukkit.event.EventHandler;
@@ -46,11 +47,8 @@ public void onDeath(EntityDeathEvent event) {
4647
// if it's a mob we are tracking that matters
4748
if (toolStats.mobKill.trackedMobs.contains(livingEntityUUID)) {
4849
for (ItemStack current : event.getDrops()) {
49-
String name = current.getType().toString().toLowerCase(Locale.ROOT);
50-
for (String item : toolStats.allValidItems) {
51-
if (name.contains(item)) {
52-
addLore(current, livingEntity.getName());
53-
}
50+
if (ItemChecker.isValidItem(current.getType())) {
51+
addLore(current, livingEntity.getName());
5452
}
5553
}
5654
toolStats.mobKill.trackedMobs.remove(livingEntityUUID);

src/main/java/lol/hyper/toolstats/events/GenerateLoot.java

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
package lol.hyper.toolstats.events;
1919

2020
import lol.hyper.toolstats.ToolStats;
21-
import lol.hyper.toolstats.UUIDDataType;
21+
import lol.hyper.toolstats.tools.ItemChecker;
22+
import lol.hyper.toolstats.tools.UUIDDataType;
2223
import org.bukkit.Bukkit;
2324
import org.bukkit.Location;
2425
import org.bukkit.Material;
@@ -39,7 +40,6 @@
3940
import java.util.ArrayList;
4041
import java.util.Date;
4142
import java.util.List;
42-
import java.util.Locale;
4343

4444
public class GenerateLoot implements Listener {
4545

@@ -86,13 +86,10 @@ public void onGenerateLoot(LootGenerateEvent event) {
8686
if (itemStack == null || itemStack.getType() == Material.AIR) {
8787
continue;
8888
}
89-
String name = itemStack.getType().toString().toLowerCase(Locale.ROOT);
90-
for (String x : toolStats.allValidItems) {
91-
if (name.contains(x)) {
92-
ItemStack newItem = addLore(itemStack, player);
93-
if (newItem != null) {
94-
chestInv.setItem(i, newItem);
95-
}
89+
if (ItemChecker.isValidItem(itemStack.getType())) {
90+
ItemStack newItem = addLore(itemStack, player);
91+
if (newItem != null) {
92+
chestInv.setItem(i, newItem);
9693
}
9794
}
9895
}
@@ -110,13 +107,10 @@ public void onGenerateLoot(LootGenerateEvent event) {
110107
if (itemStack == null || itemStack.getType() == Material.AIR) {
111108
continue;
112109
}
113-
String name = itemStack.getType().toString().toLowerCase(Locale.ROOT);
114-
for (String x : toolStats.allValidItems) {
115-
if (name.contains(x)) {
116-
ItemStack newItem = addLore(itemStack, player);
117-
if (newItem != null) {
118-
chestInv.setItem(i, newItem);
119-
}
110+
if (ItemChecker.isValidItem(itemStack.getType())) {
111+
ItemStack newItem = addLore(itemStack, player);
112+
if (newItem != null) {
113+
chestInv.setItem(i, newItem);
120114
}
121115
}
122116
}

src/main/java/lol/hyper/toolstats/events/PlayerFish.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
package lol.hyper.toolstats.events;
1919

2020
import lol.hyper.toolstats.ToolStats;
21-
import lol.hyper.toolstats.UUIDDataType;
21+
import lol.hyper.toolstats.tools.ItemChecker;
22+
import lol.hyper.toolstats.tools.UUIDDataType;
2223
import org.bukkit.GameMode;
2324
import org.bukkit.Material;
2425
import org.bukkit.entity.Item;
@@ -34,7 +35,6 @@
3435
import java.util.ArrayList;
3536
import java.util.Date;
3637
import java.util.List;
37-
import java.util.Locale;
3838

3939
public class PlayerFish implements Listener {
4040

@@ -67,10 +67,8 @@ public void onFish(PlayerFishEvent event) {
6767
return;
6868
}
6969
ItemStack caughtItem = ((Item) event.getCaught()).getItemStack();
70-
for (String x : toolStats.allValidItems) {
71-
if (caughtItem.getType().toString().toLowerCase(Locale.ROOT).contains(x)) {
72-
addNewLore(caughtItem, player);
73-
}
70+
if (ItemChecker.isValidItem(caughtItem.getType())) {
71+
addNewLore(caughtItem, player);
7472
}
7573
}
7674

src/main/java/lol/hyper/toolstats/events/VillagerTrade.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
package lol.hyper.toolstats.events;
1919

2020
import lol.hyper.toolstats.ToolStats;
21-
import lol.hyper.toolstats.UUIDDataType;
21+
import lol.hyper.toolstats.tools.ItemChecker;
22+
import lol.hyper.toolstats.tools.UUIDDataType;
2223
import org.bukkit.Bukkit;
2324
import org.bukkit.ChatColor;
2425
import org.bukkit.GameMode;
@@ -37,7 +38,6 @@
3738
import java.util.ArrayList;
3839
import java.util.Date;
3940
import java.util.List;
40-
import java.util.Locale;
4141

4242
public class VillagerTrade implements Listener {
4343

@@ -66,22 +66,20 @@ public void onTrade(InventoryClickEvent event) {
6666
if (event.getSlotType() == InventoryType.SlotType.RESULT) {
6767
ItemStack item = event.getCurrentItem();
6868
// only check items we want
69-
for (String x : toolStats.allValidItems) {
70-
if (item.getType().toString().toLowerCase(Locale.ROOT).contains(x)) {
71-
// if the player shift clicks, show the warning
72-
if (event.isShiftClick()) {
73-
String configMessage = toolStats.config.getString("messages.shift-click-warning.trading");
74-
if (configMessage != null) {
75-
event.getWhoClicked().sendMessage(ChatColor.translateAlternateColorCodes('&', configMessage));
76-
}
77-
}
78-
ItemStack newItem = addLore(item, player);
79-
if (newItem != null) {
80-
// this gets delayed since villager inventories suck for no reason
81-
Bukkit.getScheduler().runTaskLater(toolStats, () -> event.setCurrentItem(newItem), 5);
82-
return;
69+
if (ItemChecker.isValidItem(item.getType())) {
70+
// if the player shift clicks, show the warning
71+
if (event.isShiftClick()) {
72+
String configMessage = toolStats.config.getString("messages.shift-click-warning.trading");
73+
if (configMessage != null) {
74+
event.getWhoClicked().sendMessage(ChatColor.translateAlternateColorCodes('&', configMessage));
8375
}
8476
}
77+
ItemStack newItem = addLore(item, player);
78+
if (newItem != null) {
79+
// this gets delayed since villager inventories suck for no reason
80+
Bukkit.getScheduler().runTaskLater(toolStats, () -> event.setCurrentItem(newItem), 5);
81+
return;
82+
}
8583
}
8684
}
8785
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* This file is part of ToolStats.
3+
*
4+
* ToolStats is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* ToolStats is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with ToolStats. If not, see <https://www.gnu.org/licenses/>.
16+
*/
17+
18+
package lol.hyper.toolstats.tools;
19+
20+
import org.bukkit.Material;
21+
22+
import java.util.Arrays;
23+
import java.util.Locale;
24+
25+
public class ItemChecker {
26+
27+
private static final String[] validItems = { "pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing" };
28+
private static final String[] validArmor = { "helmet", "chestplate", "leggings", "boots" };
29+
private static final String[] validMelee = {"sword", "trident", "axe"};
30+
private static final String[] validMine = { "pickaxe", "axe", "hoe", "shovel", "shear" };
31+
32+
/**
33+
* Check if item is an armor piece.
34+
*
35+
* @param itemType The item type, not name.
36+
* @return If the item is an armor piece.
37+
*/
38+
public static boolean isArmor(Material itemType) {
39+
return Arrays.stream(validArmor).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
40+
}
41+
42+
/**
43+
* Check if item is a tool or armor piece we want to track.
44+
*
45+
* @param itemType The item type, not name.
46+
* @return If the item something we want to track.
47+
*/
48+
public static boolean isValidItem(Material itemType) {
49+
return Arrays.stream(validItems).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
50+
}
51+
52+
/**
53+
* Check if item is a melee weapon.
54+
*
55+
* @param itemType The item type, not name.
56+
* @return If the item is a melee weapon.
57+
*/
58+
public static boolean isMeleeWeapon(Material itemType) {
59+
return Arrays.stream(validMelee).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
60+
}
61+
62+
/**
63+
* Check if item is a mining tool.
64+
*
65+
* @param itemType The item type, not name.
66+
* @return If the item is a mining tool.
67+
*/
68+
public static boolean isMineTool(Material itemType) {
69+
return Arrays.stream(validMine).anyMatch(type -> itemType.toString().toLowerCase(Locale.ROOT).contains(type));
70+
}
71+
}

0 commit comments

Comments
 (0)