Skip to content

Commit

Permalink
Small rank system rework (#1617)
Browse files Browse the repository at this point in the history
* Small rank system rework

* Remove blank line

* Add space

* Stop using abstract Rank class

* Remove comments

* Change guardians of good values

* Change getPoints to getPointsAverage in placeholders

* Make code more functional

* Fix

* Remove comparable from abstract Rank

* Fix nasty bug

* Cleanup

* More cleanup
  • Loading branch information
P3ridot committed Sep 11, 2021
1 parent 3a33c1c commit 7d6f3a9
Show file tree
Hide file tree
Showing 17 changed files with 351 additions and 289 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

import com.google.common.collect.Sets;
import net.dzikoysk.funnyguilds.FunnyGuilds;
import net.dzikoysk.funnyguilds.data.database.element.SQLBasicUtils;
import net.dzikoysk.funnyguilds.data.database.element.SQLNamedStatement;
import net.dzikoysk.funnyguilds.data.database.element.SQLTable;
import net.dzikoysk.funnyguilds.data.util.DeserializationUtils;
import net.dzikoysk.funnyguilds.guild.Guild;
import net.dzikoysk.funnyguilds.guild.GuildUtils;
import net.dzikoysk.funnyguilds.guild.RegionUtils;
import net.dzikoysk.funnyguilds.shared.bukkit.ChatUtils;
import net.dzikoysk.funnyguilds.shared.bukkit.LocationUtils;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserManager;
import net.dzikoysk.funnyguilds.user.UserUtils;
import net.dzikoysk.funnyguilds.data.database.element.SQLNamedStatement;
import net.dzikoysk.funnyguilds.data.database.element.SQLTable;
import net.dzikoysk.funnyguilds.data.database.element.SQLBasicUtils;
import net.dzikoysk.funnyguilds.data.util.DeserializationUtils;
import net.dzikoysk.funnyguilds.shared.bukkit.ChatUtils;
import net.dzikoysk.funnyguilds.shared.bukkit.LocationUtils;
import panda.std.Option;

import java.sql.ResultSet;
Expand Down Expand Up @@ -138,7 +138,7 @@ public static void save(Guild guild) {
statement.set("deputy", deputies);
statement.set("allies", allies);
statement.set("enemies", enemies);
statement.set("points", guild.getRank().getPoints());
statement.set("points", guild.getRank().getAveragePoints());
statement.set("lives", guild.getLives());
statement.set("born", guild.getBorn());
statement.set("validity", guild.getValidity());
Expand All @@ -161,7 +161,7 @@ public static void updatePoints(Guild guild) {
SQLTable table = SQLDataModel.tabGuilds;
SQLNamedStatement statement = SQLBasicUtils.getUpdate(table, table.getSQLElement("points"));

statement.set("points", guild.getRank().getPoints());
statement.set("points", guild.getRank().getAveragePoints());
statement.set("uuid", guild.getUUID().toString());
statement.executeUpdate();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import net.dzikoysk.funnycommands.resources.ValidationException;
import net.dzikoysk.funnycommands.stereotypes.FunnyCommand;
import net.dzikoysk.funnyguilds.rank.Rank;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.feature.command.UserValidation;
import net.dzikoysk.funnyguilds.config.MessageConfiguration;
import net.dzikoysk.funnyguilds.event.SimpleEventHandler;
import net.dzikoysk.funnyguilds.event.rank.DeathsChangeEvent;
import net.dzikoysk.funnyguilds.feature.command.UserValidation;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserRank;
import org.bukkit.command.CommandSender;
import panda.std.Option;

Expand All @@ -30,7 +30,7 @@ public void execute(MessageConfiguration messages, CommandSender sender, String[

User admin = AdminUtils.getAdminUser(sender);
User user = UserValidation.requireUserByName(args[0]);
Rank userRank = user.getRank();
UserRank userRank = user.getRank();
int change = deaths - userRank.getDeaths();

if (!SimpleEventHandler.handle(new DeathsChangeEvent(AdminUtils.getCause(admin), userRank, admin, change))) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package net.dzikoysk.funnyguilds.feature.command.admin;

import net.dzikoysk.funnycommands.stereotypes.FunnyCommand;
import net.dzikoysk.funnyguilds.rank.Rank;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.feature.command.UserValidation;
import net.dzikoysk.funnyguilds.config.MessageConfiguration;
import net.dzikoysk.funnyguilds.event.SimpleEventHandler;
import net.dzikoysk.funnyguilds.event.rank.KillsChangeEvent;
import net.dzikoysk.funnyguilds.feature.command.UserValidation;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserRank;
import org.bukkit.command.CommandSender;

import static net.dzikoysk.funnyguilds.feature.command.DefaultValidation.when;
Expand All @@ -31,7 +31,7 @@ public void execute(MessageConfiguration messages, CommandSender sender, String[
}

User user = UserValidation.requireUserByName(args[0]);
Rank userRank = user.getRank();
UserRank userRank = user.getRank();

int change = kills - userRank.getDeaths();
User admin = AdminUtils.getAdminUser(sender);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package net.dzikoysk.funnyguilds.feature.command.admin;

import net.dzikoysk.funnycommands.stereotypes.FunnyCommand;
import net.dzikoysk.funnyguilds.rank.Rank;
import net.dzikoysk.funnyguilds.rank.RankManager;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.feature.command.UserValidation;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.config.MessageConfiguration;
import net.dzikoysk.funnyguilds.config.PluginConfiguration;
import net.dzikoysk.funnyguilds.event.SimpleEventHandler;
import net.dzikoysk.funnyguilds.event.rank.PointsChangeEvent;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.feature.command.UserValidation;
import net.dzikoysk.funnyguilds.rank.RankManager;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserRank;
import org.bukkit.command.CommandSender;

import static net.dzikoysk.funnyguilds.feature.command.DefaultValidation.when;
Expand All @@ -35,7 +35,7 @@ public void execute(MessageConfiguration messages, PluginConfiguration config, C

User user = UserValidation.requireUserByName(args[0]);

Rank userRank = user.getRank();
UserRank userRank = user.getRank();
int change = points - userRank.getPoints();

User admin = AdminUtils.getAdminUser(sender);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,24 @@
import net.dzikoysk.funnycommands.stereotypes.FunnyCommand;
import net.dzikoysk.funnycommands.stereotypes.FunnyComponent;
import net.dzikoysk.funnyguilds.FunnyGuilds;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.config.MessageConfiguration;
import net.dzikoysk.funnyguilds.config.PluginConfiguration;
import net.dzikoysk.funnyguilds.feature.command.GuildValidation;
import net.dzikoysk.funnyguilds.guild.Guild;
import net.dzikoysk.funnyguilds.guild.GuildRank;
import net.dzikoysk.funnyguilds.guild.GuildUtils;
import net.dzikoysk.funnyguilds.rank.Rank;
import net.dzikoysk.funnyguilds.shared.TimeUtils;
import net.dzikoysk.funnyguilds.shared.bukkit.ChatUtils;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserManager;
import net.dzikoysk.funnyguilds.user.UserUtils;
import net.dzikoysk.funnyguilds.feature.command.GuildValidation;
import net.dzikoysk.funnyguilds.config.MessageConfiguration;
import net.dzikoysk.funnyguilds.config.PluginConfiguration;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.shared.bukkit.ChatUtils;
import net.dzikoysk.funnyguilds.shared.TimeUtils;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import panda.std.Option;

import java.util.Date;
import java.util.Locale;

Expand Down Expand Up @@ -62,9 +63,9 @@ public void execute(FunnyGuilds plugin, PluginConfiguration config, MessageConfi
messageLine = StringUtils.replace(messageLine, "{REGION-SIZE}", config.regionsEnabled ? String.valueOf(guild.getRegion().getSize()) : messages.gRegionSizeNoValue);
messageLine = StringUtils.replace(messageLine, "{GUILD-PROTECTION}", protectionEndTime < now ? "Brak" : TimeUtils.getDurationBreakdown(protectionEndTime - now));

Rank rank = guild.getRank();
messageLine = StringUtils.replace(messageLine, "{POINTS-FORMAT}", IntegerRange.inRangeToString(rank.getPoints(), config.pointsFormat));
messageLine = StringUtils.replace(messageLine, "{POINTS}", Integer.toString(rank.getPoints()));
GuildRank rank = guild.getRank();
messageLine = StringUtils.replace(messageLine, "{POINTS-FORMAT}", IntegerRange.inRangeToString(rank.getAveragePoints(), config.pointsFormat));
messageLine = StringUtils.replace(messageLine, "{POINTS}", Integer.toString(rank.getAveragePoints()));
messageLine = StringUtils.replace(messageLine, "{KILLS}", Integer.toString(rank.getKills()));
messageLine = StringUtils.replace(messageLine, "{DEATHS}", Integer.toString(rank.getDeaths()));
messageLine = StringUtils.replace(messageLine, "{ASSISTS}", Integer.toString(rank.getAssists()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
import net.dzikoysk.funnycommands.stereotypes.FunnyCommand;
import net.dzikoysk.funnycommands.stereotypes.FunnyComponent;
import net.dzikoysk.funnyguilds.FunnyGuilds;
import net.dzikoysk.funnyguilds.rank.Rank;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserUtils;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.config.MessageConfiguration;
import net.dzikoysk.funnyguilds.config.PluginConfiguration;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserRank;
import net.dzikoysk.funnyguilds.user.UserUtils;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -45,7 +45,7 @@ public void execute(PluginConfiguration config, MessageConfiguration messages, C
public void sendInfoMessage(List<String> baseMessage, User infoUser, CommandSender messageTarget) {
MessageConfiguration messages = FunnyGuilds.getInstance().getMessageConfiguration();
PluginConfiguration config = FunnyGuilds.getInstance().getPluginConfiguration();
Rank rank = infoUser.getRank();
UserRank rank = infoUser.getRank();

for (String messageLine : baseMessage) {
if (infoUser.hasGuild()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package net.dzikoysk.funnyguilds.feature.tablist.variable;

import net.dzikoysk.funnyguilds.FunnyGuilds;
import net.dzikoysk.funnyguilds.guild.Guild;
import net.dzikoysk.funnyguilds.guild.GuildUtils;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserUtils;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.config.MessageConfiguration;
import net.dzikoysk.funnyguilds.config.PluginConfiguration;
import net.dzikoysk.funnyguilds.feature.hooks.PluginHook;
import net.dzikoysk.funnyguilds.feature.hooks.VaultHook;
import net.dzikoysk.funnyguilds.feature.tablist.variable.impl.GuildDependentTablistVariable;
import net.dzikoysk.funnyguilds.feature.tablist.variable.impl.SimpleTablistVariable;
import net.dzikoysk.funnyguilds.feature.tablist.variable.impl.TimeFormattedVariable;
import net.dzikoysk.funnyguilds.feature.hooks.PluginHook;
import net.dzikoysk.funnyguilds.feature.hooks.VaultHook;
import net.dzikoysk.funnyguilds.config.IntegerRange;
import net.dzikoysk.funnyguilds.guild.Guild;
import net.dzikoysk.funnyguilds.guild.GuildUtils;
import net.dzikoysk.funnyguilds.shared.bukkit.ChatUtils;
import net.dzikoysk.funnyguilds.shared.bukkit.MinecraftServerUtils;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserUtils;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
Expand Down Expand Up @@ -161,7 +161,7 @@ private static void createFunnyVariables() {

putGuild("g-lives", "G-LIVES", user -> user.getGuild().getLives(), user -> "0");
putGuild("g-allies", "G-ALLIES", user -> user.getGuild().getAllies().size(), user -> "0");
putGuild("g-points", "G-POINTS", user -> user.getGuild().getRank().getPoints(), user -> "0");
putGuild("g-points", "G-POINTS", user -> user.getGuild().getRank().getAveragePoints(), user -> "0");
putGuild("g-kills", "G-KILLS", user -> user.getGuild().getRank().getKills(), user -> "0");
putGuild("g-deaths", "G-DEATHS", user -> user.getGuild().getRank().getDeaths(), user -> "0");
putGuild("g-kdr", "G-KDR", user -> String.format(Locale.US, "%.2f", user.getGuild().getRank().getKDR()), user -> "0.00");
Expand All @@ -173,8 +173,8 @@ private static void createFunnyVariables() {
user -> messages.gValidityNoValue);

putGuild("g-points-format", "G-POINTS-FORMAT",
user -> IntegerRange.inRangeToString(user.getGuild().getRank().getPoints(), config.pointsFormat)
.replace("{POINTS}", String.valueOf(user.getGuild().getRank().getPoints())),
user -> IntegerRange.inRangeToString(user.getGuild().getRank().getAveragePoints(), config.pointsFormat)
.replace("{POINTS}", String.valueOf(user.getGuild().getRank().getAveragePoints())),
user -> IntegerRange.inRangeToString(0, config.pointsFormat)
.replace("{POINTS}", "0"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import net.dzikoysk.funnyguilds.FunnyGuilds;
import net.dzikoysk.funnyguilds.data.AbstractMutableEntity;
import net.dzikoysk.funnyguilds.rank.Rank;
import net.dzikoysk.funnyguilds.rank.RankManager;
import net.dzikoysk.funnyguilds.user.User;
import net.dzikoysk.funnyguilds.user.UserUtils;
Expand All @@ -25,7 +24,7 @@ public class Guild extends AbstractMutableEntity {
private String name;
private String tag;
private User owner;
private Rank rank;
private GuildRank rank;
private Region region;
private Location home;
private Set<User> members;
Expand Down Expand Up @@ -284,7 +283,7 @@ public void setBuild(long time) {
this.markChanged();
}

public void setRank(Rank rank) {
public void setRank(GuildRank rank) {
this.rank = rank;
this.markChanged();
}
Expand Down Expand Up @@ -398,12 +397,12 @@ public long getBuild() {
return this.build;
}

public Rank getRank() {
public GuildRank getRank() {
if (this.rank != null) {
return this.rank;
}

this.rank = new Rank(this, FunnyGuilds.getInstance().getPluginConfiguration().rankStart);
this.rank = new GuildRank(this);
RankManager.getInstance().update(this);
return this.rank;
}
Expand Down
115 changes: 115 additions & 0 deletions plugin/src/main/java/net/dzikoysk/funnyguilds/guild/GuildRank.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package net.dzikoysk.funnyguilds.guild;

import net.dzikoysk.funnyguilds.rank.Rank;

public class GuildRank extends Rank implements Comparable<GuildRank> {

private final Guild guild;

public GuildRank(Guild guild) {
super(guild);

this.guild = guild;
}

public Guild getGuild() {
return guild;
}

@Override
public int getPoints() {
return guild.getMembers().stream()
.mapToInt(user -> user.getRank().getPoints())
.sum();
}

public int getAveragePoints() {
return calculateAverage(this.getPoints());
}

@Override
public int getKills() {
return guild.getMembers().stream()
.mapToInt(user -> user.getRank().getKills())
.sum();
}

public int getAverageKills() {
return calculateAverage(this.getKills());
}

@Override
public int getDeaths() {
return guild.getMembers().stream()
.mapToInt(user -> user.getRank().getDeaths())
.sum();
}

public int getAverageDeaths() {
return calculateAverage(this.getDeaths());
}

@Override
public int getAssists() {
return guild.getMembers().stream()
.mapToInt(user -> user.getRank().getAssists())
.sum();
}

public int getAverageAssists() {
return calculateAverage(this.getAssists());
}

@Override
public int getLogouts() {
return guild.getMembers().stream()
.mapToInt(user -> user.getRank().getLogouts())
.sum();
}

public int getAverageLogouts() {
return calculateAverage(this.getLogouts());
}

@Override
public float getKDR() {
return getDeaths() == 0
? getKills()
: 1.0F * getKills() / getDeaths();
}

public float getAverageKDR() {
return (float) guild.getMembers().stream()
.mapToDouble(user -> user.getRank().getKDR())
.average()
.orElse(0.0D);
}

@Override
public int compareTo(GuildRank rank) {
int result = Integer.compare(this.getAveragePoints(), rank.getAveragePoints());

if (result == 0) {
if (getIdentityName() == null) {
return -1;
}

if (rank.getIdentityName() == null) {
return 1;
}

result = getIdentityName().compareTo(rank.getIdentityName());
}

return result;
}

private int calculateAverage(int value) {
return value / guild.getMembers().size();
}

private float calculateAverage(float value) {
return value / guild.getMembers().size();
}

}
Loading

0 comments on commit 7d6f3a9

Please sign in to comment.