Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions API/src/main/java/dev/lrxh/api/data/IGlobalStats.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
package dev.lrxh.api.data;

public interface IGlobalStats {
int getKills();

void setKills(int amount);

int getDeaths();

void setDeaths(int amount);

int getWins();

void setWins(int amount);
Expand Down
8 changes: 8 additions & 0 deletions API/src/main/java/dev/lrxh/api/data/IKitData.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@ public interface IKitData {

void setDeaths(int amount);

int getWins();

void setWins(int amount);

int getLosses();

void setLosses(int amount);

int getCurrentStreak();

void setCurrentStreak(int amount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,46 @@ public enum MenusLocale implements IDataAccessor {
LEADERBOARD_TYPES_BEST_WIN_STREAK_DISABLED_MATERIAL("LEADERBOARD.TYPES.BEST_WIN_STREAK.DISABLED.MATERIAL",
DataType.STRING,
"GRAY_DYE"),

LEADERBOARD_TYPES_WINS_SLOT("LEADERBOARD.TYPES.WINS.SLOT", DataType.INT, "32"),
LEADERBOARD_TYPES_WINS_TITLE("LEADERBOARD.TYPES.WINS.TITLE", DataType.STRING,
"&7Wins Leaderboards"),
LEADERBOARD_TYPES_WINS_ENABLED_NAME("LEADERBOARD.TYPES.WINS.ENABLED.NAME", DataType.STRING,
"&aWins Leaderboard"),
LEADERBOARD_TYPES_WINS_DISABLED_NAME("LEADERBOARD.TYPES.WINS.DISABLED.NAME", DataType.STRING,
"&cWins Leaderboard"),
LEADERBOARD_TYPES_WINS_ENABLED_LORE("LEADERBOARD.TYPES.WINS.ENABLED.LORE", DataType.STRING_LIST,
" ",
"&7Click to view wins leaderboards"),
LEADERBOARD_TYPES_WINS_DISABLED_LORE("LEADERBOARD.TYPES.WINS.DISABLED.LORE", DataType.STRING_LIST,
" ",
"&7Click to view wins leaderboards"),
LEADERBOARD_TYPES_WINS_ENABLED_MATERIAL("LEADERBOARD.TYPES.WINS.ENABLED.MATERIAL", DataType.STRING,
"LIME_DYE"),
LEADERBOARD_TYPES_WINS_DISABLED_MATERIAL("LEADERBOARD.TYPES.WINS.DISABLED.MATERIAL", DataType.STRING,
"GRAY_DYE"),

LEADERBOARD_TYPES_LOSSES_SLOT("LEADERBOARD.TYPES.LOSSES.SLOT", DataType.INT, "33"),
LEADERBOARD_TYPES_LOSSES_TITLE("LEADERBOARD.TYPES.LOSSES.TITLE", DataType.STRING,
"&7Losses Leaderboards"),
LEADERBOARD_TYPES_LOSSES_ENABLED_NAME("LEADERBOARD.TYPES.LOSSES.ENABLED.NAME", DataType.STRING,
"&aLosses Leaderboard"),
LEADERBOARD_TYPES_LOSSES_DISABLED_NAME("LEADERBOARD.TYPES.LOSSES.DISABLED.NAME", DataType.STRING,
"&cLosses Leaderboard"),
LEADERBOARD_TYPES_LOSSES_ENABLED_LORE("LEADERBOARD.TYPES.LOSSES.ENABLED.LORE", DataType.STRING_LIST,
" ",
"&7Click to view losses leaderboards"),
LEADERBOARD_TYPES_LOSSES_DISABLED_LORE("LEADERBOARD.TYPES.LOSSES.DISABLED.LORE", DataType.STRING_LIST,
" ",
"&7Click to view losses leaderboards"),
LEADERBOARD_TYPES_LOSSES_ENABLED_MATERIAL("LEADERBOARD.TYPES.LOSSES.ENABLED.MATERIAL", DataType.STRING,
"LIME_DYE"),
LEADERBOARD_TYPES_LOSSES_DISABLED_MATERIAL("LEADERBOARD.TYPES.LOSSES.DISABLED.MATERIAL", DataType.STRING,
"GRAY_DYE"),

LEADERBOARD_TYPES_DEATHS_TITLE("LEADERBOARD.TYPES.DEATHS.TITLE", DataType.STRING,
"&7Deaths Leaderboards"),
LEADERBOARD_TYPES_DEATHS_SLOT("LEADERBOARD.TYPES.DEATHS.SLOT", DataType.INT, "33"),
LEADERBOARD_TYPES_DEATHS_SLOT("LEADERBOARD.TYPES.DEATHS.SLOT", DataType.INT, "34"),
LEADERBOARD_TYPES_DEATHS_ENABLED_NAME("LEADERBOARD.TYPES.DEATHS.ENABLED.NAME", DataType.STRING,
"&aDeaths Leaderboard"),
LEADERBOARD_TYPES_DEATHS_DISABLED_NAME("LEADERBOARD.TYPES.DEATHS.DISABLED.NAME", DataType.STRING,
Expand All @@ -220,6 +256,7 @@ public enum MenusLocale implements IDataAccessor {
"LIME_DYE"),
LEADERBOARD_TYPES_DEATHS_DISABLED_MATERIAL("LEADERBOARD.TYPES.DEATHS.DISABLED.MATERIAL", DataType.STRING,
"GRAY_DYE"),

PARTY_SETTINGS_TITLE("PARTY.SETTINGS.NAME", DataType.STRING, "&7Party Settings"),
PARTY_SETTINGS_SIZE("PARTY.SETTINGS.SIZE", DataType.INT, "27"),
PARTY_SETTINGS_FILTER("PARTY.SETTINGS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,11 @@ private KitData getKitData(DataDocument document, Kit kit) {

KitData kitData = new KitData();
kitData.setCurrentStreak(kitDocument.getInteger("WIN_STREAK_CURRENT", 0));
kitData.setKills(kitDocument.getInteger("WINS", 0));
kitData.setDivision(DivisionService.get().getDivisionByElo(kitData.getKills()));
kitData.setDeaths(kitDocument.getInteger("LOSSES", 0));
kitData.setWins(kitDocument.getInteger("WINS", 0));
kitData.setLosses(kitDocument.getInteger("LOSSES", 0));
kitData.setKills(kitDocument.getInteger("KILLS", 0));
kitData.setDeaths(kitDocument.getInteger("DEATHS", 0));
kitData.setDivision(DivisionService.get().getDivisionByElo(kitData.getWins()));
kitData.setBestStreak(kitDocument.getInteger("WIN_STREAK_BEST", 0));

return kitData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,40 @@
@Getter
@AllArgsConstructor
public enum LeaderboardType {
KILLS("Kills", "KILLS", "WINS") {
KILLS("Kills", "KILLS", "KILLS") {
@Override
public int get(KitData kitData) {
return kitData.getKills();
}
},
BEST_WIN_STREAK("Best Win Streak", "BEST_WIN_STREAK", "WIN_STREAK_BEST") {
DEATHS("Deaths", "DEATHS", "DEATHS") {
@Override
public int get(KitData kitData) {
return kitData.getBestStreak();
return kitData.getDeaths();
}
},
ELO("Elo", "ELO", "ELO") {
WINS("Wins", "WINS", "WINS") {
@Override
public int get(KitData kitData) {
return kitData.getElo();
return kitData.getWins();
}
},
DEATHS("Deaths", "DEATHS", "LOSSES") {
LOSSES("Losses", "LOSSES", "LOSSES") {
@Override
public int get(KitData kitData) {
return kitData.getDeaths();
return kitData.getLosses();
}
},
BEST_WIN_STREAK("Best Win Streak", "BEST_WIN_STREAK", "WIN_STREAK_BEST") {
@Override
public int get(KitData kitData) {
return kitData.getBestStreak();
}
},
ELO("Elo", "ELO", "ELO") {
@Override
public int get(KitData kitData) {
return kitData.getElo();
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,15 @@ public ItemStack getItemStack(Player player) {
return new ItemBuilder(kit.getIcon())
.name(MenusLocale.STAT_KIT_NAME.getString().replace("<kit>", kit.getDisplayName()))
.lore(ItemUtils.getLore(MenusLocale.STAT_LORE.getStringList(), new Replacement("<kit>", kit.getDisplayName()),
new Replacement("<wins>", String.valueOf(data.getKills())),
new Replacement("<wins>", String.valueOf(data.getWins())),
new Replacement("<elo>", String.valueOf(data.getElo())),
new Replacement("<losses>", String.valueOf(data.getDeaths())),
new Replacement("<losses>", String.valueOf(data.getLosses())),
new Replacement("<kills>", String.valueOf(data.getKills())),
new Replacement("<deaths>", String.valueOf(data.getDeaths())),
new Replacement("<win_streak_current>", String.valueOf(data.getCurrentStreak())),
new Replacement("<win_streak_best>", String.valueOf(data.getBestStreak())),
new Replacement("<division>", String.valueOf(data.getDivision().getDisplayName())),
new Replacement("<played>", String.valueOf(data.getKills() + data.getDeaths())),
new Replacement("<played>", String.valueOf(data.getWins() + data.getLosses())),
new Replacement("<kill_death_ratio>", String.valueOf(data.getKdr()))), player)

.build();
Expand Down
11 changes: 11 additions & 0 deletions Plugin/src/main/java/dev/lrxh/neptune/game/match/Match.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import dev.lrxh.neptune.game.match.impl.participant.ParticipantColor;
import dev.lrxh.neptune.game.match.impl.solo.SoloFightMatch;
import dev.lrxh.neptune.game.match.impl.team.TeamFightMatch;
import dev.lrxh.neptune.profile.data.KitData;
import dev.lrxh.neptune.profile.data.ProfileState;
import dev.lrxh.neptune.profile.impl.Profile;
import dev.lrxh.neptune.providers.clickable.Replacement;
Expand Down Expand Up @@ -450,4 +451,14 @@ public void teleportPlayerToPosition(Participant participant) {
public abstract void breakBed(Participant participant, Participant breaker);

public abstract void sendTitle(Participant participant, TextComponent header, TextComponent footer, int duration);

public void incrementKills(Participant participant) {
KitData kitData = participant.getProfile().getGameData().get(getKit());
kitData.setKills(kitData.getKills() + 1);
}
public void incrementDeaths(Participant participant) {
KitData kitData = participant.getProfile().getGameData().get(getKit());
kitData.setDeaths(kitData.getDeaths() + 1);
if (participant.getLastAttacker() != null) incrementKills(participant.getLastAttacker());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@ public void onDeath(Participant participant) {
if (isEnded()) return;

hideParticipant(participant);
incrementDeaths(participant);
participant.setDead(true);
participant.setLoser(true);

Profile profile = API.getProfile(participant.getPlayerUUID());

if (!participant.isLeft() && !participant.isDisconnected()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ public void sendTitle(Participant participant, TextComponent header, TextCompone
public void onDeath(Participant participant) {
if (isEnded())
return;
incrementDeaths(participant);
hideParticipant(participant);

participant.setDead(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,11 @@ public void sendTitle(Participant participant, TextComponent header, TextCompone
public void onDeath(Participant participant) {
if (isEnded()) return;
hideParticipant(participant);

incrementDeaths(participant);
participant.setDead(true);

MatchTeam team = getParticipantTeam(participant);
team.deadParticipants().add(participant);

if (!participant.isDisconnected() && !participant.isLeft()) {
if (getKit().is(KitRule.BED_WARS)) {
if (!participant.isBedBroken()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public boolean run(Kit kit, boolean won) {
boolean value = false;

if (won) {
value = updateWin(kitData);
value = updateWins(kitData);
} else {
updateLosses(kitData);
}
Expand All @@ -106,14 +106,14 @@ public boolean run(Kit kit, boolean won) {
return value;
}

private boolean updateWin(KitData kitData) {
kitData.setKills(kitData.getKills() + 1);
private boolean updateWins(KitData kitData) {
kitData.setWins(kitData.getWins() + 1);
updateWinStreak(kitData, true);
return kitData.updateElo(true);
}

private void updateLosses(KitData kitData) {
kitData.setDeaths(kitData.getDeaths() + 1);
kitData.setLosses(kitData.getLosses() + 1);
kitData.updateElo(false);
updateWinStreak(kitData, false);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
@Setter
public class GlobalStats implements IGlobalStats {
private final Profile profile;
private int kills = 0;
private int deaths = 0;
private int wins = 0;
private int losses = 0;
private int currentStreak = 0;
Expand All @@ -28,15 +30,19 @@ public void setDivision(IDivision division) {
}

public void update() {
this.kills = 0;
this.deaths = 0;
this.wins = 0;
this.losses = 0;
this.currentStreak = 0;
this.bestStreak = 0;
this.elo = 0;

for (KitData kitData : profile.getGameData().getKitDataInternal().values()) {
this.wins += kitData.getKills();
this.losses += kitData.getDeaths();
this.wins += kitData.getWins();
this.losses += kitData.getLosses();
this.kills += kitData.getKills();
this.deaths += kitData.getDeaths();
this.currentStreak += kitData.getCurrentStreak();
this.bestStreak = Math.max(this.bestStreak, kitData.getBestStreak());
this.elo += kitData.getElo();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
public class KitData implements IKitData {
private int kills = 0;
private int deaths = 0;
private int wins = 0;
private int losses = 0;
private int bestStreak = 0;
private int currentStreak = 0;
private List<ItemStack> kitLoadout = new ArrayList<>();
Expand Down
12 changes: 8 additions & 4 deletions Plugin/src/main/java/dev/lrxh/neptune/profile/impl/Profile.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,12 @@ public static CompletableFuture<Profile> load(Profile profile) {

KitData profileKitData = gameData.get(kit);
profileKitData.setCurrentStreak(kitDocument.getInteger("WIN_STREAK_CURRENT", 0));
profileKitData.setKills(kitDocument.getInteger("WINS", 0));
profileKitData.setKills(kitDocument.getInteger("KILLS", 0));
profileKitData.setDeaths(kitDocument.getInteger("DEATHS", 0));
profileKitData.setWins(kitDocument.getInteger("WINS", 0));
profileKitData.setLosses(kitDocument.getInteger("LOSSES", 0));
profileKitData.setElo(kitDocument.getInteger("ELO", 0));
profileKitData.setDivision(DivisionService.get().getDivisionByElo(profileKitData.getElo()));
profileKitData.setDeaths(kitDocument.getInteger("LOSSES", 0));
profileKitData.setBestStreak(kitDocument.getInteger("WIN_STREAK_BEST", 0));
profileKitData.setKitLoadout(
Objects.equals(kitDocument.getString("kit"), "")
Expand Down Expand Up @@ -159,9 +161,11 @@ public static CompletableFuture<Void> save(Profile profile) {
KitData entry = gameData.get(kit);

kitStatisticsDocument.put("WIN_STREAK_CURRENT", entry.getCurrentStreak());
kitStatisticsDocument.put("WINS", entry.getKills());
kitStatisticsDocument.put("WINS", entry.getWins());
kitStatisticsDocument.put("LOSSES", entry.getLosses());
kitStatisticsDocument.put("KILLS", entry.getKills());
kitStatisticsDocument.put("DEATHS", entry.getDeaths());
kitStatisticsDocument.put("ELO", entry.getElo());
kitStatisticsDocument.put("LOSSES", entry.getDeaths());
kitStatisticsDocument.put("WIN_STREAK_BEST", entry.getBestStreak());
kitStatisticsDocument.put(
"kit",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public String format(String line, Player player) {
line = line.replaceAll("<wins>", String.valueOf(globalStats.getWins()));
line = line.replaceAll("<losses>", String.valueOf(globalStats.getLosses()));
line = line.replaceAll("<currentStreak>", String.valueOf(globalStats.getCurrentStreak()));
line = line.replaceAll("<kills>", String.valueOf(globalStats.getKills()));
line = line.replaceAll("<deaths>", String.valueOf(globalStats.getDeaths()));

if (state.equals(ProfileState.IN_QUEUE)) {
QueueEntry queueEntry = QueueService.get().get(player.getUniqueId());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package dev.lrxh.neptune.providers.placeholder.impl;

import dev.lrxh.neptune.API;
import dev.lrxh.neptune.game.kit.KitService;
import dev.lrxh.neptune.profile.data.KitData;
import dev.lrxh.neptune.profile.impl.Profile;
import dev.lrxh.neptune.providers.placeholder.Placeholder;
import org.bukkit.OfflinePlayer;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class KitDeathsPlaceholder implements Placeholder {
private final Pattern PATTERN = Pattern.compile("(.*)_deaths");

@Override
public boolean match(String string) {
return PATTERN.matcher(string).matches();
}

@Override
public String parse(OfflinePlayer player, String string) {
Profile profile = API.getProfile(player.getUniqueId());
if (profile == null) return string;

Matcher matcher = PATTERN.matcher(string);
if (!matcher.matches()) return string;
KitData data = profile.getGameData().get(KitService.get().getKitByName(matcher.group(1)));
if (data == null) return string;

return String.valueOf(data.getDeaths());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package dev.lrxh.neptune.providers.placeholder.impl;

import dev.lrxh.neptune.API;
import dev.lrxh.neptune.game.kit.KitService;
import dev.lrxh.neptune.profile.data.KitData;
import dev.lrxh.neptune.profile.impl.Profile;
import dev.lrxh.neptune.providers.placeholder.Placeholder;
import org.bukkit.OfflinePlayer;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class KitKillsPlaceholder implements Placeholder {
private final Pattern PATTERN = Pattern.compile("(.*)_kills");

@Override
public boolean match(String string) {
return PATTERN.matcher(string).matches();
}

@Override
public String parse(OfflinePlayer player, String string) {
Profile profile = API.getProfile(player.getUniqueId());
if (profile == null) return string;

Matcher matcher = PATTERN.matcher(string);
if (!matcher.matches()) return string;
KitData data = profile.getGameData().get(KitService.get().getKitByName(matcher.group(1)));
if (data == null) return string;

return String.valueOf(data.getKills());
}
}
Loading