Added new optional Experience-To-Level-Up under each individual level section; optimized placeholders (#153)

This commit is contained in:
cervinakuy committed 2021-07-03 18:47:06 -07:00
1 parent 34feb4c476
commit 68f145f45e
7 files changed
+43 -27

No files matched your search

@@ -506,7 +506,7 @@ public class MainCommand implements CommandExecutor {
private void sendStatsMessage(CommandSender receiver, String username) {
for (String line : messages.getStringList("Messages.Stats.Message")) {
receiver.sendMessage(arena.replacePlaceholderIfPresent(line, username));
receiver.sendMessage(arena.replaceBuiltInPlaceholdersIfPresent(line, username));
}
}
@@ -197,11 +197,11 @@ public class Arena {
text = PlaceholderAPI.setPlaceholders(p, text);
}
return replacePlaceholderIfPresent(text, p.getName());
return replaceBuiltInPlaceholdersIfPresent(text, p.getName());
}
public String replacePlaceholderIfPresent(String s, String username) {
public String replaceBuiltInPlaceholdersIfPresent(String s, String username) {
// The reason I'm doing all these if statements rather than a more concise code solution is to reduce
// the amount of data that is unnecessarily fetched (ex by using .replace) to improve performance
@@ -224,7 +224,7 @@ public class Arena {
}
if (s.contains("%max_xp%")) {
s = s.replace("%max_xp%", String.valueOf(resources.getLevels().getInt("Levels.Options.Experience-To-Level-Up")));
s = s.replace("%max_xp%", String.valueOf(stats.getRegularOrRelativeNeededExperience(username)));
}
if (s.contains("%max_level%")) {
@@ -53,7 +53,7 @@ public class Stats {
public void addExperience(Player p, int experience) {
if (levels.getBoolean("Levels.Levels.Enabled")) {
setStat("experience", p.getName(), experience);
if (getStat("experience", p.getName()) >= levels.getInt("Levels.Options.Experience-To-Level-Up")) {
if (getStat("experience", p.getName()) >= getRegularOrRelativeNeededExperience(p.getName())) {
levelUp(p);
Bukkit.getPluginManager().callEvent(new PlayerLevelUpEvent(p, getStat("level", p.getName())));
}
@@ -109,7 +109,7 @@ public class Stats {
return getOrCreateStatsCache(username).getDataByIdentifier(identifier);
}
public PlayerData getOrCreateStatsCache(String username) {
private PlayerData getOrCreateStatsCache(String username) {
if (!CacheManager.getStatsCache().containsKey(username)) {
int kills = (int) database.getData("stats", "kills", username);
int deaths = (int) database.getData("stats", "deaths", username);
@@ -122,4 +122,15 @@ public class Stats {
return CacheManager.getStatsCache().get(username);
}
public int getRegularOrRelativeNeededExperience(String username) {
int level = getStat("level", username);
if (levels.contains("Levels.Levels." + level + ".Experience-To-Level-Up")) {
return levels.getInt("Levels.Levels." + level + ".Experience-To-Level-Up");
}
return levels.getInt("Levels.Options.Experience-To-Level-Up");
}
}
@@ -7,14 +7,29 @@ import com.planetgallium.kitpvp.game.Arena;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import java.util.HashMap;
import java.util.Map;
public class Placeholders extends PlaceholderExpansion {
private final Arena arena;
private final Resources resources;
private final Map<String, String> placeholderAPItoBuiltIn;
public Placeholders(Game plugin) {
this.arena = plugin.getArena();
this.resources = plugin.getResources();
this.placeholderAPItoBuiltIn = new HashMap<>();
placeholderAPItoBuiltIn.put("stats_kills", "%kills%");
placeholderAPItoBuiltIn.put("stats_deaths", "%deaths%");
placeholderAPItoBuiltIn.put("stats_kdr", "%kdr%");
placeholderAPItoBuiltIn.put("stats_experience", "%xp%");
placeholderAPItoBuiltIn.put("stats_level", "%level%");
placeholderAPItoBuiltIn.put("player_killstreak", "%streak%");
placeholderAPItoBuiltIn.put("player_kit", "%kit%");
placeholderAPItoBuiltIn.put("max_level", "%max_level%");
placeholderAPItoBuiltIn.put("max_xp", "%max_xp%");
}
@Override
@@ -41,29 +56,17 @@ public class Placeholders extends PlaceholderExpansion {
return isUsernamePlaceholder ? entry.getUsername() : String.valueOf(entry.getData());
} else {
String username = p.getName();
switch (identifier) {
case "stats_kills": return String.valueOf(arena.getStats().getStat("kills", username));
case "stats_deaths": return String.valueOf(arena.getStats().getStat("deaths", username));
case "stats_kdr": return String.valueOf(arena.getStats().getKDRatio(username));
case "stats_level": return String.valueOf(arena.getStats().getStat("level", username));
case "stats_experience": return String.valueOf(arena.getStats().getStat("experience", username));
case "player_killstreak": return String.valueOf(arena.getKillStreaks().getStreak(username));
case "player_kit":
if (arena.getKits().hasKit(username)) {
return arena.getKits().getKitOfPlayer(username).getName();
}
return resources.getMessages().getString("Messages.Other.NoKit");
case "max_level": return String.valueOf(resources.getLevels().getInt("Levels.Options.Maximum-Level"));
case "max_xp": return String.valueOf(resources.getLevels().getInt("Levels.Options.Experience-To-Level-Up"));
}
}
return null;
return translatePlaceholderAPIPlaceholders(identifier, p.getName());
}
public String translatePlaceholderAPIPlaceholders(String placeholderAPIIdentifier, String username) {
return arena.replaceBuiltInPlaceholdersIfPresent(placeholderAPItoBuiltIn.get(placeholderAPIIdentifier), username);
}
@Override
public boolean canRegister() { return true; }
@@ -77,6 +77,7 @@ public class Resources {
menu.copyDefaults();
levels.addCopyDefaultExemption("Levels.Levels.10.Commands");
levels.addCopyDefaultExemption("Levels.Levels.10.Experience-To-Level-Up");
levels.copyDefaults();
scoreboard.addCopyDefaultExemption("Scoreboard.Lines");
+1
View File
@@ -36,6 +36,7 @@ Levels:
Commands:
- 'console: say Congratulations to %player% for reaching Level %level%!'
- 'console: Commands on level can be edited via the levels.yml'
Experience-To-Level-Up: 98
11:
Prefix: '&7Level %level%'
12:
+2 -2
View File
@@ -50,8 +50,8 @@ Messages:
- '&7&m &r'
- ' '
- ' &b&lStats for %player%'
- ' &aLevel: &7%level%/100'
- ' &aExperience: &7%xp%/100'
- ' &aLevel: &7%level%/%max_level%'
- ' &aExperience: &7%xp%/%max_xp%'
- ' &aKills: &7%kills%'
- ' &aDeaths: &7%deaths%'
- ' '