mirror of
https://github.com/hyperdefined/ToolStats.git
synced 2025-12-06 06:41:44 +00:00
added NBT for origins of items
This commit is contained in:
@@ -39,26 +39,56 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
public final class ToolStats extends JavaPlugin {
|
public final class ToolStats extends JavaPlugin {
|
||||||
|
|
||||||
// stores who created an item
|
/**
|
||||||
|
* Stores who created an item.
|
||||||
|
*/
|
||||||
public final NamespacedKey genericOwner = new NamespacedKey(this, "owner");
|
public final NamespacedKey genericOwner = new NamespacedKey(this, "owner");
|
||||||
// stores when an item was created
|
/**
|
||||||
|
* Stores when the item was created.
|
||||||
|
*/
|
||||||
public final NamespacedKey timeCreated = new NamespacedKey(this, "time-created");
|
public final NamespacedKey timeCreated = new NamespacedKey(this, "time-created");
|
||||||
// stores how many player kills by sword
|
/**
|
||||||
|
* Stores how many player kills.
|
||||||
|
*/
|
||||||
public final NamespacedKey swordPlayerKills = new NamespacedKey(this, "player-kills");
|
public final NamespacedKey swordPlayerKills = new NamespacedKey(this, "player-kills");
|
||||||
// stores how many mob kills by sword
|
/**
|
||||||
|
* Stores how many mob kills.
|
||||||
|
*/
|
||||||
public final NamespacedKey swordMobKills = new NamespacedKey(this, "mob-kills");
|
public final NamespacedKey swordMobKills = new NamespacedKey(this, "mob-kills");
|
||||||
// stores how blocks mined (used for all tools)
|
/**
|
||||||
|
* Stores how many blocks were mined.
|
||||||
|
*/
|
||||||
public final NamespacedKey genericMined = new NamespacedKey(this, "generic-mined");
|
public final NamespacedKey genericMined = new NamespacedKey(this, "generic-mined");
|
||||||
// stores how many fish were caught
|
/**
|
||||||
|
* Stores how many fish were caught.
|
||||||
|
*/
|
||||||
public final NamespacedKey fishingRodCaught = new NamespacedKey(this, "fish-caught");
|
public final NamespacedKey fishingRodCaught = new NamespacedKey(this, "fish-caught");
|
||||||
// stores how many times sheep were sheared
|
/**
|
||||||
|
* Stores how many sheep were sheared.
|
||||||
|
*/
|
||||||
public final NamespacedKey shearsSheared = new NamespacedKey(this, "sheared");
|
public final NamespacedKey shearsSheared = new NamespacedKey(this, "sheared");
|
||||||
// stores how much damage armor has taken
|
/**
|
||||||
|
* Stores how much damage an armor piece has taken.
|
||||||
|
*/
|
||||||
public final NamespacedKey armorDamage = new NamespacedKey(this, "damage-taken");
|
public final NamespacedKey armorDamage = new NamespacedKey(this, "damage-taken");
|
||||||
// stores how much damage armor has taken (as int)
|
/**
|
||||||
|
* Stores how much damage an armor piece has taken (as an int).
|
||||||
|
*/
|
||||||
public final NamespacedKey armorDamageInt = new NamespacedKey(this, "damage-taken-int");
|
public final NamespacedKey armorDamageInt = new NamespacedKey(this, "damage-taken-int");
|
||||||
// used for tracking new elytras
|
/**
|
||||||
|
* Key for tracking new elytras that spawn.
|
||||||
|
*/
|
||||||
public final NamespacedKey newElytra = new NamespacedKey(this, "new");
|
public final NamespacedKey newElytra = new NamespacedKey(this, "new");
|
||||||
|
/**
|
||||||
|
* Stores how an item was created.
|
||||||
|
* 0 = crafted.
|
||||||
|
* 1 = dropped.
|
||||||
|
* 2 = looted.
|
||||||
|
* 3 = traded.
|
||||||
|
* 4 = founded (for elytras).
|
||||||
|
* 5 = fished.
|
||||||
|
*/
|
||||||
|
public final NamespacedKey originType = new NamespacedKey(this, "origin");
|
||||||
|
|
||||||
public BlocksMined blocksMined;
|
public BlocksMined blocksMined;
|
||||||
public ChunkPopulate chunkPopulate;
|
public ChunkPopulate chunkPopulate;
|
||||||
|
|||||||
@@ -129,24 +129,15 @@ public class CommandToolStats implements TabExecutor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// determine how the item was originally created
|
// set how the item was obtained
|
||||||
// this doesn't get saved, so we just rely on the lore
|
Integer origin = -1;
|
||||||
// if there isn't a tag, default to crafted
|
if (container.has(toolStats.originType, PersistentDataType.INTEGER)) {
|
||||||
String type = "DEFAULT";
|
origin = container.get(toolStats.originType, PersistentDataType.INTEGER);
|
||||||
if (finalMeta.hasLore()) {
|
}
|
||||||
if (finalMeta.getLore() != null) {
|
|
||||||
for (String line : finalMeta.getLore()) {
|
// set to -1 if it's invalid
|
||||||
if (line.contains(caughtByLore)) {
|
if (origin == null) {
|
||||||
type = "CAUGHT";
|
origin = -1;
|
||||||
}
|
|
||||||
if (line.contains(lootedByLore)) {
|
|
||||||
type = "LOOTED";
|
|
||||||
}
|
|
||||||
if (line.contains(tradedByLore)) {
|
|
||||||
type = "TRADED";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// hard code elytras
|
// hard code elytras
|
||||||
@@ -171,21 +162,25 @@ public class CommandToolStats implements TabExecutor {
|
|||||||
if (container.has(toolStats.genericOwner, new UUIDDataType())) {
|
if (container.has(toolStats.genericOwner, new UUIDDataType())) {
|
||||||
container.set(toolStats.genericOwner, new UUIDDataType(), player.getUniqueId());
|
container.set(toolStats.genericOwner, new UUIDDataType(), player.getUniqueId());
|
||||||
// show how the item was created based on the previous lore
|
// show how the item was created based on the previous lore
|
||||||
switch (type) {
|
switch (origin) {
|
||||||
case "DEFAULT": {
|
case 0: {
|
||||||
lore.add(toolStats.getLoreFromConfig("created.created-by", true).replace("{player}", player.getName()));
|
lore.add(toolStats.getLoreFromConfig("created.created-by", true).replace("{player}", player.getName()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "CAUGHT": {
|
case 2: {
|
||||||
lore.add(toolStats.getLoreFromConfig("fished.caught-by", true).replace("{player}", player.getName()));
|
lore.add(toolStats.getLoreFromConfig("looted.looted-by", true).replace("{player}", player.getName()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "LOOTED": {
|
case 3: {
|
||||||
|
lore.add(toolStats.getLoreFromConfig("traded.traded-by", true).replace("{player}", player.getName()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
lore.add(toolStats.getLoreFromConfig("looted.found-by", true).replace("{player}", player.getName()));
|
lore.add(toolStats.getLoreFromConfig("looted.found-by", true).replace("{player}", player.getName()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "TRADED": {
|
case 5: {
|
||||||
lore.add(toolStats.getLoreFromConfig("traded.traded-by", true).replace("{player}", player.getName()));
|
lore.add(toolStats.getLoreFromConfig("fished.caught-by", true).replace("{player}", player.getName()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -196,21 +191,25 @@ public class CommandToolStats implements TabExecutor {
|
|||||||
Long time = container.get(toolStats.timeCreated, PersistentDataType.LONG);
|
Long time = container.get(toolStats.timeCreated, PersistentDataType.LONG);
|
||||||
if (time != null) {
|
if (time != null) {
|
||||||
// show how when the item was created based on the previous lore
|
// show how when the item was created based on the previous lore
|
||||||
switch (type) {
|
switch (origin) {
|
||||||
case "DEFAULT": {
|
case 0: {
|
||||||
lore.add(toolStats.getLoreFromConfig("created.created-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
lore.add(toolStats.getLoreFromConfig("created.created-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "CAUGHT": {
|
case 2: {
|
||||||
lore.add(toolStats.getLoreFromConfig("fished.caught-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
lore.add(toolStats.getLoreFromConfig("looted.looted-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "LOOTED": {
|
case 3: {
|
||||||
|
lore.add(toolStats.getLoreFromConfig("traded.traded-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
lore.add(toolStats.getLoreFromConfig("looted.found-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
lore.add(toolStats.getLoreFromConfig("looted.found-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "TRADED": {
|
case 5: {
|
||||||
lore.add(toolStats.getLoreFromConfig("traded.traded-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
lore.add(toolStats.getLoreFromConfig("fished.caught-on", true).replace("{date}", toolStats.numberFormat.formatDate(new Date(time))));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ public class CraftItem implements Listener {
|
|||||||
|
|
||||||
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
||||||
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
||||||
|
container.set(toolStats.originType, PersistentDataType.INTEGER, 0);
|
||||||
|
|
||||||
String createdByRaw = toolStats.getLoreFromConfig("created.created-by", true);
|
String createdByRaw = toolStats.getLoreFromConfig("created.created-by", true);
|
||||||
String createdOnRaw = toolStats.getLoreFromConfig("created.created-on", true);
|
String createdOnRaw = toolStats.getLoreFromConfig("created.created-on", true);
|
||||||
|
|||||||
@@ -83,6 +83,9 @@ public class EntityDeath implements Listener {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||||
|
container.set(toolStats.originType, PersistentDataType.INTEGER, 1);
|
||||||
|
|
||||||
List<String> newLore = toolStats.itemLore.addItemLore(meta, "{name}", mob, "dropped-by");
|
List<String> newLore = toolStats.itemLore.addItemLore(meta, "{name}", mob, "dropped-by");
|
||||||
|
|
||||||
if (toolStats.config.getBoolean("enabled.dropped-by")) {
|
if (toolStats.config.getBoolean("enabled.dropped-by")) {
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ public class GenerateLoot implements Listener {
|
|||||||
|
|
||||||
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
||||||
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
||||||
|
container.set(toolStats.originType, PersistentDataType.INTEGER, 2);
|
||||||
|
|
||||||
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
||||||
List<String> newLore = toolStats.itemLore.addNewOwner(meta, owner.getName(), formattedDate, "LOOTED");
|
List<String> newLore = toolStats.itemLore.addNewOwner(meta, owner.getName(), formattedDate, "LOOTED");
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ public class PickupItem implements Listener {
|
|||||||
PersistentDataContainer container = meta.getPersistentDataContainer();
|
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||||
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
||||||
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
||||||
|
container.set(toolStats.originType, PersistentDataType.INTEGER, 4);
|
||||||
container.remove(toolStats.newElytra);
|
container.remove(toolStats.newElytra);
|
||||||
|
|
||||||
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ public class PlayerFish implements Listener {
|
|||||||
|
|
||||||
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
||||||
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
||||||
|
container.set(toolStats.originType, PersistentDataType.INTEGER, 5);
|
||||||
|
|
||||||
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
||||||
List<String> newLore = toolStats.itemLore.addNewOwner(meta, owner.getName(), formattedDate, "FISHED");
|
List<String> newLore = toolStats.itemLore.addNewOwner(meta, owner.getName(), formattedDate, "FISHED");
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ public class VillagerTrade implements Listener {
|
|||||||
|
|
||||||
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
|
||||||
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
|
||||||
|
container.set(toolStats.originType, PersistentDataType.INTEGER, 3);
|
||||||
|
|
||||||
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
String formattedDate = toolStats.numberFormat.formatDate(finalDate);
|
||||||
List<String> newLore = toolStats.itemLore.addNewOwner(meta, owner.getName(), formattedDate, "TRADED");
|
List<String> newLore = toolStats.itemLore.addNewOwner(meta, owner.getName(), formattedDate, "TRADED");
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import lol.hyper.toolstats.ToolStats;
|
|||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ messages:
|
|||||||
caught-on: "&7Caught on: &8{date}"
|
caught-on: "&7Caught on: &8{date}"
|
||||||
fish-caught: "&7Fish caught: &8{fish}"
|
fish-caught: "&7Fish caught: &8{fish}"
|
||||||
looted:
|
looted:
|
||||||
|
looted-by: "&7Found by: &8{player}"
|
||||||
|
looted-on: "&7Found on: &8{date}"
|
||||||
found-by: "&7Found by: &8{player}"
|
found-by: "&7Found by: &8{player}"
|
||||||
found-on: "&7Found on: &8{date}"
|
found-on: "&7Found on: &8{date}"
|
||||||
traded:
|
traded:
|
||||||
@@ -111,4 +113,4 @@ number-formats:
|
|||||||
comma-format: "#,###"
|
comma-format: "#,###"
|
||||||
decimal-format: "#,###.00"
|
decimal-format: "#,###.00"
|
||||||
|
|
||||||
config-version: 4
|
config-version: 5
|
||||||
Reference in New Issue
Block a user