Skip to content

Commit f13f17b

Browse files
committed
add remove stat token
1 parent 90a8ec1 commit f13f17b

File tree

4 files changed

+188
-0
lines changed

4 files changed

+188
-0
lines changed

src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,12 @@ private void giveToken(Player target, String tokenType, int amount) {
448448
target.getInventory().addItem(itemStack);
449449
break;
450450
}
451+
case "remove": {
452+
ItemStack itemStack = toolStats.tokenItems.removeToken();
453+
itemStack.setAmount(amount);
454+
target.getInventory().addItem(itemStack);
455+
break;
456+
}
451457
}
452458
}
453459

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

Lines changed: 157 additions & 0 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 net.kyori.adventure.text.Component;
2122
import org.bukkit.Material;
2223
import org.bukkit.event.EventHandler;
2324
import org.bukkit.event.EventPriority;
@@ -89,6 +90,11 @@ public void onAnvilEvent(PrepareAnvilEvent event) {
8990
return;
9091
}
9192

93+
if (tokenType.equalsIgnoreCase("remove")) {
94+
remove(event, clone);
95+
return;
96+
}
97+
9298
// if the item is a mining tool
9399
if (toolStats.itemChecker.isMineTool(firstSlotMaterial)) {
94100
if (firstSlotMaterial.toString().toLowerCase(Locale.ROOT).contains("hoe")) {
@@ -385,4 +391,155 @@ private void reset(PrepareAnvilEvent event, ItemStack inputItem) {
385391
event.setResult(finalItem);
386392
event.getView().setRepairCost(toolStats.itemChecker.getCost("reset"));
387393
}
394+
395+
/**
396+
* Remove all stats from an item.
397+
*
398+
* @param event The PrepareAnvilEvent event.
399+
* @param inputItem The input item to remove stats from.
400+
*/
401+
private void remove(PrepareAnvilEvent event, ItemStack inputItem) {
402+
ItemStack finalItem = inputItem.clone();
403+
ItemMeta meta = finalItem.getItemMeta();
404+
PersistentDataContainer container = meta.getPersistentDataContainer();
405+
406+
// remove the applied tokens
407+
if (container.has(toolStats.tokenApplied)) {
408+
container.remove(toolStats.tokenApplied);
409+
}
410+
411+
if (container.has(toolStats.playerKills)) {
412+
Integer playerKills = container.get(toolStats.playerKills, PersistentDataType.INTEGER);
413+
if (playerKills == null) {
414+
return;
415+
}
416+
417+
container.remove(toolStats.playerKills);
418+
419+
String playerKillsFormatted = toolStats.numberFormat.formatInt(playerKills);
420+
Component lineToRemove = toolStats.configTools.formatLore("kills.player", "{kills}", playerKillsFormatted);
421+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
422+
finalItem.setItemMeta(meta);
423+
}
424+
if (container.has(toolStats.mobKills)) {
425+
Integer mobKills = container.get(toolStats.mobKills, PersistentDataType.INTEGER);
426+
if (mobKills == null) {
427+
return;
428+
}
429+
430+
container.remove(toolStats.mobKills);
431+
432+
String mobKillsFormatted = toolStats.numberFormat.formatInt(mobKills);
433+
Component lineToRemove = toolStats.configTools.formatLore("kills.mob", "{kills}", mobKillsFormatted);
434+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
435+
finalItem.setItemMeta(meta);
436+
}
437+
if (container.has(toolStats.blocksMined)) {
438+
Integer blocksMined = container.get(toolStats.blocksMined, PersistentDataType.INTEGER);
439+
if (blocksMined == null) {
440+
return;
441+
}
442+
443+
container.remove(toolStats.blocksMined);
444+
445+
String blocksMinedFormatted = toolStats.numberFormat.formatInt(blocksMined);
446+
Component lineToRemove = toolStats.configTools.formatLore("blocks-mined", "{blocks}", blocksMinedFormatted);
447+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
448+
finalItem.setItemMeta(meta);
449+
}
450+
if (container.has(toolStats.cropsHarvested)) {
451+
Integer cropsHarvested = container.get(toolStats.playerKills, PersistentDataType.INTEGER);
452+
if (cropsHarvested == null) {
453+
return;
454+
}
455+
456+
container.remove(toolStats.cropsHarvested);
457+
458+
String cropsHarvestedFormatted = toolStats.numberFormat.formatInt(cropsHarvested);
459+
Component lineToRemove = toolStats.configTools.formatLore("crops-harvested", "{crops}", cropsHarvestedFormatted);
460+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
461+
finalItem.setItemMeta(meta);
462+
}
463+
if (container.has(toolStats.fishCaught)) {
464+
Integer fishCaught = container.get(toolStats.fishCaught, PersistentDataType.INTEGER);
465+
if (fishCaught == null) {
466+
return;
467+
}
468+
469+
container.remove(toolStats.fishCaught);
470+
471+
String fishCaughtFormatted = toolStats.numberFormat.formatInt(fishCaught);
472+
Component lineToRemove = toolStats.configTools.formatLore("fished.fish-caught", "{fish}", fishCaughtFormatted);
473+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
474+
finalItem.setItemMeta(meta);
475+
}
476+
if (container.has(toolStats.sheepSheared)) {
477+
Integer sheepSheared = container.get(toolStats.sheepSheared, PersistentDataType.INTEGER);
478+
if (sheepSheared == null) {
479+
return;
480+
}
481+
482+
container.remove(toolStats.sheepSheared);
483+
484+
String sheepShearedFormatted = toolStats.numberFormat.formatInt(sheepSheared);
485+
Component lineToRemove = toolStats.configTools.formatLore("sheep.sheared", "{sheep}", sheepShearedFormatted);
486+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
487+
finalItem.setItemMeta(meta);
488+
}
489+
if (container.has(toolStats.armorDamage)) {
490+
Double armorDamage = container.get(toolStats.armorDamage, PersistentDataType.DOUBLE);
491+
if (armorDamage == null) {
492+
return;
493+
}
494+
495+
container.remove(toolStats.armorDamage);
496+
497+
String armorDamageFormatted = toolStats.numberFormat.formatDouble(armorDamage);
498+
Component lineToRemove = toolStats.configTools.formatLore("damage-taken", "{damage}", armorDamageFormatted);
499+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
500+
finalItem.setItemMeta(meta);
501+
}
502+
if (container.has(toolStats.damageDone)) {
503+
Double damageDone = container.get(toolStats.damageDone, PersistentDataType.DOUBLE);
504+
if (damageDone == null) {
505+
return;
506+
}
507+
508+
container.remove(toolStats.damageDone);
509+
510+
String damageDoneFormatted = toolStats.numberFormat.formatDouble(damageDone);
511+
Component lineToRemove = toolStats.configTools.formatLore("damage-done", "{damage}", damageDoneFormatted);
512+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
513+
finalItem.setItemMeta(meta);
514+
}
515+
if (container.has(toolStats.arrowsShot)) {
516+
Integer arrowsShot = container.get(toolStats.arrowsShot, PersistentDataType.INTEGER);
517+
if (arrowsShot == null) {
518+
return;
519+
}
520+
521+
container.remove(toolStats.arrowsShot);
522+
523+
String arrowsShotFormatted = toolStats.numberFormat.formatInt(arrowsShot);
524+
Component lineToRemove = toolStats.configTools.formatLore("arrows-shot", "{arrows}", arrowsShotFormatted);
525+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
526+
finalItem.setItemMeta(meta);
527+
}
528+
if (container.has(toolStats.flightTime)) {
529+
Long flightTime = container.get(toolStats.flightTime, PersistentDataType.LONG);
530+
if (flightTime == null) {
531+
return;
532+
}
533+
534+
container.remove(toolStats.flightTime);
535+
536+
String flightTimeFormatted = toolStats.numberFormat.formatDouble(flightTime);
537+
Component lineToRemove = toolStats.configTools.formatLore("flight-time", "{time}", flightTimeFormatted);
538+
meta.lore(toolStats.itemLore.removeLore(meta.lore(), lineToRemove));
539+
finalItem.setItemMeta(meta);
540+
}
541+
542+
event.setResult(finalItem);
543+
event.getView().setRepairCost(toolStats.itemChecker.getCost("remove"));
544+
}
388545
}

src/main/java/lol/hyper/toolstats/tools/TokenCrafting.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ public void setup() {
113113
resetRecipe.setIngredient('P', Material.PAPER);
114114
recipes.add(resetRecipe);
115115

116+
NamespacedKey removeKey = new NamespacedKey(toolStats, "remove-token");
117+
ShapedRecipe removeRecipe = new ShapedRecipe(removeKey, toolStats.tokenItems.removeToken());
118+
resetRecipe.shape(" P ", "P P", " P ");
119+
resetRecipe.setIngredient('P', Material.PAPER);
120+
recipes.add(removeRecipe);
121+
116122
tokenTypes.add("crops-mined");
117123
tokenTypes.add("blocks-mined");
118124
tokenTypes.add("damage-taken");
@@ -123,6 +129,7 @@ public void setup() {
123129
tokenTypes.add("flight-time");
124130
tokenTypes.add("fish-caught");
125131
tokenTypes.add("reset");
132+
tokenTypes.add("remove");
126133
}
127134

128135
public Set<ShapedRecipe> getRecipes() {

src/main/java/lol/hyper/toolstats/tools/config/TokenItems.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,22 @@ public ItemStack resetToken() {
233233
token.setItemMeta(tokenMeta);
234234
return token;
235235
}
236+
237+
public ItemStack removeToken() {
238+
// set up the item
239+
ItemStack token = new ItemStack(Material.PAPER);
240+
ItemMeta tokenMeta = token.getItemMeta();
241+
PersistentDataContainer tokenData = tokenMeta.getPersistentDataContainer();
242+
243+
// set the title and lore
244+
Component title = toolStats.configTools.format("tokens.data.remove.title");
245+
List<Component> lore = toolStats.configTools.getTokenLore("remove");
246+
tokenMeta.displayName(title);
247+
tokenMeta.lore(lore);
248+
249+
// set the PDC
250+
tokenData.set(toolStats.tokenType, PersistentDataType.STRING, "remove");
251+
token.setItemMeta(tokenMeta);
252+
return token;
253+
}
236254
}

0 commit comments

Comments
 (0)