Skip to content

Commit 975445b

Browse files
committed
support for custom lore messages
1 parent c02cbad commit 975445b

File tree

11 files changed

+212
-64
lines changed

11 files changed

+212
-64
lines changed

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import lol.hyper.toolstats.events.*;
2424
import org.bstats.bukkit.Metrics;
2525
import org.bukkit.Bukkit;
26+
import org.bukkit.ChatColor;
2627
import org.bukkit.NamespacedKey;
2728
import org.bukkit.configuration.file.FileConfiguration;
2829
import org.bukkit.configuration.file.YamlConfiguration;
@@ -200,4 +201,41 @@ public boolean checkConfig(ItemStack itemStack, String configName) {
200201
}
201202
return false;
202203
}
204+
205+
public String getLoreFromConfig(String configName, boolean raw) {
206+
String lore = config.getString("messages." + configName);
207+
if (lore == null) {
208+
return null;
209+
}
210+
if (raw) {
211+
return ChatColor.translateAlternateColorCodes('&', lore);
212+
} else {
213+
// we basically add the color codes then remove them
214+
// this is a dirty trick to remove color codes
215+
lore = ChatColor.translateAlternateColorCodes('&', lore);
216+
lore = ChatColor.stripColor(lore);
217+
if (lore.contains("{player}")) {
218+
lore = lore.replace("{player}", "");
219+
}
220+
if (lore.contains("{date}")) {
221+
lore = lore.replace("{date}", "");
222+
}
223+
if (lore.contains("{name}")) {
224+
lore = lore.replace("{name}", "");
225+
}
226+
if (lore.contains("{kills}")) {
227+
lore = lore.replace("{kills}", "");
228+
}
229+
if (lore.contains("{blocks}")) {
230+
lore = lore.replace("{blocks}", "");
231+
}
232+
if (lore.contains("{sheep}")) {
233+
lore = lore.replace("{sheep}", "");
234+
}
235+
if (lore.contains("{damage}")) {
236+
lore = lore.replace("{damage}", "");
237+
}
238+
}
239+
return lore;
240+
}
203241
}

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

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

2020
import lol.hyper.toolstats.ToolStats;
21-
import org.bukkit.ChatColor;
2221
import org.bukkit.GameMode;
2322
import org.bukkit.Material;
2423
import org.bukkit.entity.Player;
@@ -38,7 +37,6 @@ public class BlocksMined implements Listener {
3837

3938
private final ToolStats toolStats;
4039
private final String[] validTools = {"pickaxe", "axe", "hoe", "shovel", "shear"};
41-
private final String blocksMinedLore = ChatColor.GRAY + "Blocks mined: " + ChatColor.DARK_GRAY + "X";
4240

4341
public BlocksMined(ToolStats toolStats) {
4442
this.toolStats = toolStats;
@@ -78,28 +76,35 @@ private void updateBlocksMined(ItemStack itemStack) {
7876
}
7977
container.set(toolStats.genericMined, PersistentDataType.INTEGER, blocksMined);
8078

79+
String configLore = toolStats.getLoreFromConfig("blocks-mined", false);
80+
String configLoreRaw = toolStats.getLoreFromConfig("blocks-mined", true);
81+
8182
List<String> lore;
8283
if (meta.hasLore()) {
8384
lore = meta.getLore();
8485
assert lore != null;
8586
boolean hasLore = false;
8687
// we do a for loop like this, we can keep track of index
8788
// this doesn't mess the lore up of existing items
89+
if (configLore == null || configLoreRaw == null) {
90+
toolStats.logger.warning("There is no lore message for messages.blocks-mined!");
91+
return;
92+
}
8893
for (int x = 0; x < lore.size(); x++) {
89-
if (lore.get(x).contains("Blocks mined")) {
94+
if (lore.get(x).contains(configLore)) {
9095
hasLore = true;
91-
lore.set(x, blocksMinedLore.replace("X", Integer.toString(blocksMined)));
96+
lore.set(x, configLoreRaw.replace("{blocks}", Integer.toString(blocksMined)));
9297
break;
9398
}
9499
}
95100
// if the item has lore but doesn't have the tag, add it
96101
if (!hasLore) {
97-
lore.add(blocksMinedLore.replace("X", Integer.toString(blocksMined)));
102+
lore.add(configLoreRaw.replace("{blocks}", Integer.toString(blocksMined)));
98103
}
99104
} else {
100105
// if the item has no lore, create a new list and add the string
101106
lore = new ArrayList<>();
102-
lore.add(blocksMinedLore.replace("X", Integer.toString(blocksMined)));
107+
lore.add(configLoreRaw.replace("{blocks}", Integer.toString(blocksMined)));
103108
}
104109
if (toolStats.checkConfig(itemStack, "blocks-mined")) {
105110
meta.setLore(lore);

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

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import lol.hyper.toolstats.ToolStats;
2121
import lol.hyper.toolstats.UUIDDataType;
22-
import org.bukkit.ChatColor;
2322
import org.bukkit.Material;
2423
import org.bukkit.entity.Player;
2524
import org.bukkit.event.EventHandler;
@@ -39,8 +38,6 @@ public class CraftItem implements Listener {
3938
public final String[] validItems = {
4039
"pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing"
4140
};
42-
private final String timeCreatedLore = ChatColor.GRAY + "Crafted on: " + ChatColor.DARK_GRAY + "X";
43-
private final String ownerLore = ChatColor.GRAY + "Crafted by: " + ChatColor.DARK_GRAY + "X";
4441
private final SimpleDateFormat format = new SimpleDateFormat("M/dd/yyyy", Locale.ENGLISH);
4542

4643
public CraftItem(ToolStats toolStats) {
@@ -57,6 +54,9 @@ public void onCraft(CraftItemEvent event) {
5754
String name = itemStack.getType().toString().toLowerCase(Locale.ROOT);
5855
for (String x : validItems) {
5956
if (name.contains(x)) {
57+
if (addLore(itemStack, player) == null) {
58+
return;
59+
}
6060
event.setCurrentItem(addLore(itemStack, player));
6161
}
6262
}
@@ -73,6 +73,19 @@ private ItemStack addLore(ItemStack itemStack, Player owner) {
7373
PersistentDataContainer container = meta.getPersistentDataContainer();
7474
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
7575
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
76+
77+
String createdByRaw = toolStats.getLoreFromConfig("created.created-by", true);
78+
String createdOnRaw = toolStats.getLoreFromConfig("created.created-on", true);
79+
80+
if (createdOnRaw == null) {
81+
toolStats.logger.warning("There is no lore message for messages.created.created-on!");
82+
return null;
83+
}
84+
if (createdByRaw == null) {
85+
toolStats.logger.warning("There is no lore message for messages.created.created-by!");
86+
return null;
87+
}
88+
7689
List<String> lore;
7790
if (meta.hasLore()) {
7891
lore = meta.getLore();
@@ -81,10 +94,10 @@ private ItemStack addLore(ItemStack itemStack, Player owner) {
8194
lore = new ArrayList<>();
8295
}
8396
if (toolStats.checkConfig(itemStack, "created-date")) {
84-
lore.add(timeCreatedLore.replace("X", format.format(finalDate)));
97+
lore.add(createdOnRaw.replace("{date}", format.format(finalDate)));
8598
}
8699
if (toolStats.checkConfig(itemStack, "created-by")) {
87-
lore.add(ownerLore.replace("X", owner.getName()));
100+
lore.add(createdByRaw.replace("{player}", owner.getName()));
88101
}
89102
meta.setLore(lore);
90103
newItem.setItemMeta(meta);

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

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

2020
import lol.hyper.toolstats.ToolStats;
21-
import org.bukkit.ChatColor;
2221
import org.bukkit.GameMode;
2322
import org.bukkit.Material;
2423
import org.bukkit.entity.*;
@@ -41,9 +40,6 @@ public class EntityDamage implements Listener {
4140

4241
private final ToolStats toolStats;
4342
private final String[] validTools = {"sword", "trident", "axe"};
44-
private final String playerKillsLore = ChatColor.GRAY + "Player kills: " + ChatColor.DARK_GRAY + "X";
45-
private final String mobKillsLore = ChatColor.GRAY + "Mob kills: " + ChatColor.DARK_GRAY + "X";
46-
private final String damageTakenLore = ChatColor.GRAY + "Damage taken: " + ChatColor.DARK_GRAY + "X";
4743
private final DecimalFormat decimalFormat = new DecimalFormat("0.00");
4844
public final Set<UUID> trackedMobs = new HashSet<>();
4945

@@ -174,6 +170,14 @@ private ItemStack updatePlayerKills(ItemStack itemStack) {
174170
}
175171
container.set(toolStats.swordPlayerKills, PersistentDataType.INTEGER, playerKills);
176172

173+
String playerKillsLore = toolStats.getLoreFromConfig("kills.player", false);
174+
String playerKillsLoreRaw = toolStats.getLoreFromConfig("kills.player", true);
175+
176+
if (playerKillsLore == null || playerKillsLoreRaw == null) {
177+
toolStats.logger.warning("There is no lore message for messages.kills.player!");
178+
return null;
179+
}
180+
177181
List<String> lore;
178182
if (meta.hasLore()) {
179183
lore = meta.getLore();
@@ -182,20 +186,20 @@ private ItemStack updatePlayerKills(ItemStack itemStack) {
182186
// we do a for loop like this, we can keep track of index
183187
// this doesn't mess the lore up of existing items
184188
for (int x = 0; x < lore.size(); x++) {
185-
if (lore.get(x).contains("Player kills")) {
189+
if (lore.get(x).contains(playerKillsLore)) {
186190
hasLore = true;
187-
lore.set(x, playerKillsLore.replace("X", Integer.toString(playerKills)));
191+
lore.set(x, playerKillsLoreRaw.replace("{kills}", Integer.toString(playerKills)));
188192
break;
189193
}
190194
}
191195
// if the item has lore but doesn't have the tag, add it
192196
if (!hasLore) {
193-
lore.add(playerKillsLore.replace("X", Integer.toString(playerKills)));
197+
lore.add(playerKillsLoreRaw.replace("{kills}", Integer.toString(playerKills)));
194198
}
195199
} else {
196200
// if the item has no lore, create a new list and add the string
197201
lore = new ArrayList<>();
198-
lore.add(playerKillsLore.replace("X", Integer.toString(playerKills)));
202+
lore.add(playerKillsLoreRaw.replace("{kills}", Integer.toString(playerKills)));
199203
}
200204
if (toolStats.checkConfig(itemStack, "player-kills")) {
201205
meta.setLore(lore);
@@ -222,6 +226,14 @@ private ItemStack updateMobKills(ItemStack itemStack) {
222226
}
223227
container.set(toolStats.swordMobKills, PersistentDataType.INTEGER, mobKills);
224228

229+
String mobKillsLore = toolStats.getLoreFromConfig("kills.mob", false);
230+
String mobKillsLoreRaw = toolStats.getLoreFromConfig("kills.mob", true);
231+
232+
if (mobKillsLore == null || mobKillsLoreRaw == null) {
233+
toolStats.logger.warning("There is no lore message for messages.kills.mob!");
234+
return null;
235+
}
236+
225237
List<String> lore;
226238
if (meta.hasLore()) {
227239
lore = meta.getLore();
@@ -230,20 +242,20 @@ private ItemStack updateMobKills(ItemStack itemStack) {
230242
// we do a for loop like this, we can keep track of index
231243
// this doesn't mess the lore up of existing items
232244
for (int x = 0; x < lore.size(); x++) {
233-
if (lore.get(x).contains("Mob kills")) {
245+
if (lore.get(x).contains(mobKillsLore)) {
234246
hasLore = true;
235-
lore.set(x, mobKillsLore.replace("X", Integer.toString(mobKills)));
247+
lore.set(x, mobKillsLoreRaw.replace("{kills}", Integer.toString(mobKills)));
236248
break;
237249
}
238250
}
239251
// if the item has lore but doesn't have the tag, add it
240252
if (!hasLore) {
241-
lore.add(mobKillsLore.replace("X", Integer.toString(mobKills)));
253+
lore.add(mobKillsLoreRaw.replace("{kills}", Integer.toString(mobKills)));
242254
}
243255
} else {
244256
// if the item has no lore, create a new list and add the string
245257
lore = new ArrayList<>();
246-
lore.add(mobKillsLore.replace("X", Integer.toString(mobKills)));
258+
lore.add(mobKillsLoreRaw.replace("{kills}", Integer.toString(mobKills)));
247259
}
248260
if (toolStats.checkConfig(itemStack, "mob-kills")) {
249261
meta.setLore(lore);
@@ -270,6 +282,14 @@ private void updateArmorDamage(ItemStack itemStack, double damage) {
270282
decimalFormat.setRoundingMode(RoundingMode.DOWN);
271283
container.set(toolStats.armorDamage, PersistentDataType.DOUBLE, damageTaken);
272284

285+
String damageTakenLore = toolStats.getLoreFromConfig("damage-taken", false);
286+
String damageTakenLoreRaw = toolStats.getLoreFromConfig("damage-taken", true);
287+
288+
if (damageTakenLore == null || damageTakenLoreRaw == null) {
289+
toolStats.logger.warning("There is no lore message for messages.damage-taken!");
290+
return;
291+
}
292+
273293
List<String> lore;
274294
if (meta.hasLore()) {
275295
lore = meta.getLore();
@@ -278,20 +298,20 @@ private void updateArmorDamage(ItemStack itemStack, double damage) {
278298
// we do a for loop like this, we can keep track of index
279299
// this doesn't mess the lore up of existing items
280300
for (int x = 0; x < lore.size(); x++) {
281-
if (lore.get(x).contains("Damage taken")) {
301+
if (lore.get(x).contains(damageTakenLore)) {
282302
hasLore = true;
283-
lore.set(x, damageTakenLore.replace("X", decimalFormat.format(damageTaken)));
303+
lore.set(x, damageTakenLoreRaw.replace("{damage}", decimalFormat.format(damageTaken)));
284304
break;
285305
}
286306
}
287307
// if the item has lore but doesn't have the tag, add it
288308
if (!hasLore) {
289-
lore.add(damageTakenLore.replace("X", decimalFormat.format(damageTaken)));
309+
lore.add(damageTakenLoreRaw.replace("{damage}", decimalFormat.format(damageTaken)));
290310
}
291311
} else {
292312
// if the item has no lore, create a new list and add the string
293313
lore = new ArrayList<>();
294-
lore.add(damageTakenLore.replace("X", decimalFormat.format(damageTaken)));
314+
lore.add(damageTakenLoreRaw.replace("{damage}", decimalFormat.format(damageTaken)));
295315
}
296316
if (toolStats.config.getBoolean("enabled.armor-damage")) {
297317
meta.setLore(lore);

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

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

2020
import lol.hyper.toolstats.ToolStats;
21-
import org.bukkit.ChatColor;
2221
import org.bukkit.entity.LivingEntity;
2322
import org.bukkit.entity.Player;
2423
import org.bukkit.event.EventHandler;
@@ -32,7 +31,6 @@
3231
public class EntityDeath implements Listener {
3332

3433
private final ToolStats toolStats;
35-
private final String droppedLore = ChatColor.GRAY + "Dropped by: " + ChatColor.DARK_GRAY + "X";
3634

3735
public EntityDeath(ToolStats toolStats) {
3836
this.toolStats = toolStats;
@@ -64,14 +62,23 @@ private void addLore(ItemStack itemStack, String mob) {
6462
return;
6563
}
6664
boolean hasTag = false;
65+
66+
String droppedByLore = toolStats.getLoreFromConfig("dropped-by", false);
67+
String droppedByLoreRaw = toolStats.getLoreFromConfig("dropped-by", true);
68+
69+
if (droppedByLore == null || droppedByLoreRaw == null) {
70+
toolStats.logger.warning("There is no lore message for messages.dropped-by!");
71+
return;
72+
}
73+
6774
List<String> lore;
6875
if (meta.hasLore()) {
6976
lore = meta.getLore();
7077
assert lore != null;
7178
for (int x = 0; x < lore.size(); x++) {
72-
if (lore.get(x).contains("Dropped by")) {
79+
if (lore.get(x).contains(droppedByLore)) {
7380
// replace existing tag
74-
lore.set(x, droppedLore.replace("X", mob));
81+
lore.set(x, droppedByLoreRaw.replace("{name}", mob));
7582
hasTag = true;
7683
}
7784
}
@@ -80,7 +87,7 @@ private void addLore(ItemStack itemStack, String mob) {
8087
lore = new ArrayList<>();
8188
}
8289
if (!hasTag) {
83-
lore.add(droppedLore.replace("X", mob));
90+
lore.add(droppedByLoreRaw.replace("X", mob));
8491
}
8592
if (toolStats.config.getBoolean("enabled.dropped-by")) {
8693
meta.setLore(lore);

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import lol.hyper.toolstats.ToolStats;
2121
import lol.hyper.toolstats.UUIDDataType;
2222
import org.bukkit.Bukkit;
23-
import org.bukkit.ChatColor;
2423
import org.bukkit.Material;
2524
import org.bukkit.entity.Player;
2625
import org.bukkit.event.EventHandler;
@@ -42,8 +41,6 @@
4241
public class GenerateLoot implements Listener {
4342

4443
private final ToolStats toolStats;
45-
private final String LOOT_OWNER = ChatColor.GRAY + "Looted by: " + ChatColor.DARK_GRAY + "X";
46-
private final String LOOT_TIME = ChatColor.GRAY + "Looted on: " + ChatColor.DARK_GRAY + "X";
4744
public final String[] validItems = {
4845
"pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing"
4946
};
@@ -89,6 +86,15 @@ private ItemStack addLore(ItemStack itemStack, Player owner) {
8986
PersistentDataContainer container = meta.getPersistentDataContainer();
9087
container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated);
9188
container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId());
89+
90+
String foundByLoreRaw = toolStats.getLoreFromConfig("looted.found-by", true);
91+
String foundOnLoreRaw = toolStats.getLoreFromConfig("looted.found-on", true);
92+
93+
if (foundByLoreRaw == null || foundOnLoreRaw == null) {
94+
toolStats.logger.warning("There is no lore message for messages.looted!");
95+
return null;
96+
}
97+
9298
List<String> lore;
9399
if (meta.hasLore()) {
94100
lore = meta.getLore();
@@ -97,8 +103,8 @@ private ItemStack addLore(ItemStack itemStack, Player owner) {
97103
lore = new ArrayList<>();
98104
}
99105
if (toolStats.checkConfig(newItem, "looted-tag")) {
100-
lore.add(LOOT_TIME.replace("X", format.format(finalDate)));
101-
lore.add(LOOT_OWNER.replace("X", owner.getName()));
106+
lore.add(foundOnLoreRaw.replace("{date}", format.format(finalDate)));
107+
lore.add(foundByLoreRaw.replace("{player}", owner.getName()));
102108
}
103109
meta.setLore(lore);
104110
newItem.setItemMeta(meta);

0 commit comments

Comments
 (0)