This commit is contained in:
okx-code
2018-08-23 17:40:24 +01:00
parent 044a8419d0
commit 32dc06cf62
31 changed files with 2795 additions and 0 deletions
@@ -0,0 +1,32 @@
package sh.okx.rankup.messages;
import org.bukkit.command.CommandSender;
class EmptyMessageBuilder extends MessageBuilder {
EmptyMessageBuilder() {
super(null);
}
@Override
public MessageBuilder failIfEmpty() {
throw new UnsupportedOperationException();
}
@Override
public MessageBuilder replace(Variable variable, Object value) {
return this;
}
@Override
public void send(CommandSender sender) {
}
@Override
public void broadcast() {
}
@Override
public String toString() {
return null;
}
}
@@ -0,0 +1,25 @@
package sh.okx.rankup.messages;
import lombok.Getter;
public enum Message {
NOT_IN_LADDER("not-in-ladder"),
REQUIREMENTS_NOT_MET("rankup.requirements-not-met"),
NO_RANKUP("rankup.no-rankup"),
SUCCESS_PUBLIC("rankup.success-public"),
SUCCESS_PRIVATE("rankup.success-private"),
CONFIRMATION("rankup.confirmation"),
TITLE("rankup.title"),
RANKS_HEADER("ranks.header"),
RANKS_FOOTER("ranks.footer"),
RANKS_COMPLETE("rankup.ranks.complete"),
RANKS_CURRENT("rankup.ranks.current"),
RANKS_INCOMPLETE("rankup.ranks.incomplete");
@Getter
private final String name;
Message(String name) {
this.name = name;
}
}
@@ -0,0 +1,103 @@
package sh.okx.rankup.messages;
import lombok.AllArgsConstructor;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import sh.okx.rankup.ranks.Rank;
import sh.okx.rankup.ranks.requirements.Requirement;
import java.text.DecimalFormat;
public class MessageBuilder {
private String message;
public MessageBuilder(String message) {
this.message = message;
}
public static MessageBuilder of(ConfigurationSection config, Message message) {
return new MessageBuilder(ChatColor.translateAlternateColorCodes('&', config.getString(message.getName())));
}
public MessageBuilder replace(Variable variable, Object value) {
this.message = variable.replace(message, String.valueOf(value));
return this;
}
public MessageBuilder replaceAll(CommandSender player, Rank rank) {
replace(Variable.PLAYER, player.getName());
replaceAll(rank);
return this;
}
public MessageBuilder replaceAll(CommandSender player, Rank oldRank, Rank rank) {
replace(Variable.PLAYER, player.getName());
replaceAll(oldRank, rank);
return this;
}
public MessageBuilder replaceAll(Rank rank) {
replace(Variable.RANK, rank.getRank());
replace(Variable.RANK_NAME, rank.getName());
return this;
}
public MessageBuilder replaceAll(Rank oldRank, Rank rank) {
replace(Variable.RANK, rank.getRank());
replace(Variable.RANK_NAME, rank.getName());
replace(Variable.OLD_RANK, oldRank.getRank());
replace(Variable.OLD_RANK_NAME, oldRank.getName());
return this;
}
public MessageBuilder replaceCost(CommandSender sender, Economy economy, Rank rank) {
Requirement money = rank.getRequirement("money");
if(money == null || economy == null) {
return this;
}
replace(Variable.MONEY, money.getAmount());
if(sender instanceof Player && rank.isInRank((Player) sender)) {
replace(Variable.MONEY_NEEDED, money.getRemaining((Player) sender));
} else {
replace(Variable.MONEY_NEEDED, money.getAmount());
}
return this;
}
/**
* Fails the MessageBuilder if the message is empty.
* if this fails, all subsequent calls to that MessageBuilder will do nothing
* @return an EmptyMessageBuilder if the message is empty, itself otherwise
*/
public MessageBuilder failIfEmpty() {
if(message.isEmpty()) {
return new EmptyMessageBuilder();
} else {
return this;
}
}
public void send(CommandSender sender) {
sender.sendMessage(message);
}
/**
* Sends the message to all players
* ie, calls MessageBuilder#send(Player) for all players online, and sends the message in the console.
*/
public void broadcast() {
for(Player player : Bukkit.getOnlinePlayers()) {
send(player);
}
send(Bukkit.getConsoleSender());
}
@Override
public String toString() {
return message;
}
}
@@ -0,0 +1,31 @@
package sh.okx.rankup.messages;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public enum Variable {
PLAYER,
OLD_RANK,
OLD_RANK_NAME,
RANK,
RANK_NAME,
MONEY,
MONEY_NEEDED,
PERCENT_DONE,
PERCENT_LEFT;
public static Variable getVariable(String name) {
for(Variable variable : values()) {
if(variable.toString().equalsIgnoreCase(name)) {
return variable;
}
}
return null;
}
public String replace(String message, String value) {
Pattern pattern = Pattern.compile("\\{" + this + "}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(message);
return matcher.replaceAll(value);
}
}