mirror of
https://github.com/AppleDash/SaneEconomy.git
synced 2024-06-26 06:24:47 +02:00
Add /balancetop command.
This commit is contained in:
parent
6e93b03894
commit
a89b36fc99
|
@ -6,10 +6,10 @@
|
|||
<parent>
|
||||
<groupId>org.appledash</groupId>
|
||||
<artifactId>SaneEconomy</artifactId>
|
||||
<version>0.5.4-SNAPSHOT</version>
|
||||
<version>0.5.5-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>SaneEconomyCore</artifactId>
|
||||
<version>0.5.4-SNAPSHOT</version>
|
||||
<version>0.5.5-SNAPSHOT</version>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package org.appledash.saneeconomy;
|
||||
|
||||
import org.appledash.saneeconomy.command.SaneEconomyCommand;
|
||||
import org.appledash.saneeconomy.command.type.BalanceCommand;
|
||||
import org.appledash.saneeconomy.command.type.EconomyAdminCommand;
|
||||
import org.appledash.saneeconomy.command.type.PayCommand;
|
||||
import org.appledash.saneeconomy.command.type.SaneEcoCommand;
|
||||
import org.appledash.saneeconomy.command.type.*;
|
||||
import org.appledash.saneeconomy.economy.Currency;
|
||||
import org.appledash.saneeconomy.economy.EconomyManager;
|
||||
import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
|
||||
|
@ -34,6 +31,7 @@ public class SaneEconomy extends JavaPlugin {
|
|||
put("ecoadmin", new EconomyAdminCommand());
|
||||
put("pay", new PayCommand());
|
||||
put("saneeconomy", new SaneEcoCommand());
|
||||
put("balancetop", new BalanceTopCommand());
|
||||
}};
|
||||
|
||||
public SaneEconomy() {
|
||||
|
@ -61,6 +59,10 @@ public class SaneEconomy extends JavaPlugin {
|
|||
}
|
||||
|
||||
getServer().getScheduler().scheduleAsyncDelayedTask(this, GithubVersionChecker::checkUpdateAvailable);
|
||||
|
||||
getServer().getScheduler().runTaskTimerAsynchronously(this, () -> {
|
||||
economyManager.getBackend().reloadTopBalances();
|
||||
}, 0, (20 * 300) /* Update baltop every 5 minutes */);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package org.appledash.saneeconomy.command.type;
|
||||
|
||||
import org.appledash.saneeconomy.SaneEconomy;
|
||||
import org.appledash.saneeconomy.command.SaneEconomyCommand;
|
||||
import org.appledash.saneeconomy.command.exception.CommandException;
|
||||
import org.appledash.saneeconomy.command.exception.type.usage.TooManyArgumentsException;
|
||||
import org.appledash.saneeconomy.utils.MessageUtils;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* Created by AppleDash on 6/13/2016.
|
||||
* Blackjack is still best pony.
|
||||
*/
|
||||
public class BalanceTopCommand extends SaneEconomyCommand {
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return "saneeconomy.balancetop";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getUsage() {
|
||||
return new String[] {
|
||||
"/<command>"
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCommand(CommandSender sender, String[] args) throws CommandException {
|
||||
if (args.length > 0) {
|
||||
throw new TooManyArgumentsException();
|
||||
}
|
||||
|
||||
Map<OfflinePlayer, Double> topBalances = SaneEconomy.getInstance().getEconomyManager().getTopBalances(10);
|
||||
AtomicInteger index = new AtomicInteger(1); /* I know it's stupid, but you can't do some_int++ from within the lambda. */
|
||||
|
||||
MessageUtils.sendMessage(sender, "Top %d players:", topBalances.size());
|
||||
topBalances.forEach((player, balance) -> MessageUtils.sendMessage(sender, "[%02d] %s - %s", index.getAndIncrement(), player.getName(), SaneEconomy.getInstance().getEconomyManager().getCurrency().formatAmount(balance)));
|
||||
}
|
||||
}
|
|
@ -2,9 +2,14 @@ package org.appledash.saneeconomy.economy;
|
|||
|
||||
import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
|
||||
import org.appledash.saneeconomy.utils.NumberUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Created by AppleDash on 6/13/2016.
|
||||
* Blackjack is still best pony.
|
||||
|
@ -149,6 +154,20 @@ public class EconomyManager {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the players who have the most money.
|
||||
* @param amount Maximum number of players to show.
|
||||
* @return Map of OfflinePlayer to Double
|
||||
*/
|
||||
public Map<OfflinePlayer, Double> getTopBalances(int amount) {
|
||||
Map<UUID, Double> uuidBalances = backend.getTopBalances(amount);
|
||||
Map<OfflinePlayer, Double> playerBalances = new LinkedHashMap<>();
|
||||
|
||||
uuidBalances.forEach((uuid, balance) -> playerBalances.put(Bukkit.getServer().getOfflinePlayer(uuid), balance));
|
||||
|
||||
return playerBalances;
|
||||
}
|
||||
|
||||
public EconomyStorageBackend getBackend() {
|
||||
return backend;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,9 @@ package org.appledash.saneeconomy.economy.backend;
|
|||
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Created by AppleDash on 6/13/2016.
|
||||
* Blackjack is still best pony.
|
||||
|
@ -46,8 +49,20 @@ public interface EconomyStorageBackend {
|
|||
*/
|
||||
double subtractBalance(OfflinePlayer player, double amount);
|
||||
|
||||
/**
|
||||
* Get the UUIDs of the players who have the most money, along with how much money they have.
|
||||
* @param amount Maximum number to get.
|
||||
* @return Map of player UUIDs to amounts.
|
||||
*/
|
||||
Map<UUID, Double> getTopBalances(int amount);
|
||||
|
||||
/**
|
||||
* Reload this backend's database from disk.
|
||||
*/
|
||||
void reloadDatabase();
|
||||
|
||||
/**
|
||||
* Reload this backend's top balances.
|
||||
*/
|
||||
void reloadTopBalances();
|
||||
}
|
||||
|
|
|
@ -2,10 +2,12 @@ package org.appledash.saneeconomy.economy.backend.type;
|
|||
|
||||
import org.appledash.saneeconomy.SaneEconomy;
|
||||
import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
|
||||
import org.appledash.saneeconomy.utils.MapUtil;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -18,6 +20,7 @@ public class EconomyStorageBackendFlatfile implements EconomyStorageBackend {
|
|||
|
||||
private final File file;
|
||||
private Map<UUID, Double> playerBalances = new HashMap<>();
|
||||
private Map<UUID, Double> topBalances = new LinkedHashMap<>();
|
||||
|
||||
public EconomyStorageBackendFlatfile(File file) {
|
||||
this.file = file;
|
||||
|
@ -47,6 +50,11 @@ public class EconomyStorageBackendFlatfile implements EconomyStorageBackend {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadTopBalances() {
|
||||
topBalances = MapUtil.sortByValue(playerBalances);
|
||||
}
|
||||
|
||||
private void saveDatabase() {
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
|
@ -99,4 +107,9 @@ public class EconomyStorageBackendFlatfile implements EconomyStorageBackend {
|
|||
|
||||
return newAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<UUID, Double> getTopBalances(int amount) {
|
||||
return MapUtil.takeFromMap(topBalances, amount);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,11 +2,14 @@ package org.appledash.saneeconomy.economy.backend.type;
|
|||
|
||||
import org.appledash.saneeconomy.SaneEconomy;
|
||||
import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
|
||||
import org.appledash.saneeconomy.utils.MapUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
|
@ -19,6 +22,8 @@ public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
|||
private final String dbPassword;
|
||||
|
||||
private final HashMap<UUID, Double> playerBalances = new HashMap<>();
|
||||
private Map<UUID, Double> topBalances = new LinkedHashMap<>();
|
||||
|
||||
|
||||
public EconomyStorageBackendMySQL(String dbUrl, String dbUser, String dbPassword) {
|
||||
this.dbUrl = dbUrl;
|
||||
|
@ -80,6 +85,10 @@ public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadTopBalances() {
|
||||
topBalances = MapUtil.sortByValue(playerBalances);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accountExists(OfflinePlayer player) {
|
||||
|
@ -139,6 +148,11 @@ public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
|||
return newBalance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<UUID, Double> getTopBalances(int amount) {
|
||||
return MapUtil.takeFromMap(topBalances, amount);
|
||||
}
|
||||
|
||||
private void ensureAccountExists(OfflinePlayer player, Connection conn) {
|
||||
if (!accountExists(player, conn)) {
|
||||
try {
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
package org.appledash.saneeconomy.utils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Created by appledash on 7/11/16.
|
||||
* Blackjack is still best pony.
|
||||
*/
|
||||
public class MapUtil {
|
||||
/* Originally found on StackOverflow: http://stackoverflow.com/a/2581754/1849152 */
|
||||
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
|
||||
List<Map.Entry<K, V>> list =
|
||||
new LinkedList<>(map.entrySet());
|
||||
Collections.sort(list, (o1, o2) -> (o1.getValue()).compareTo(o2.getValue()));
|
||||
|
||||
Map<K, V> result = new LinkedHashMap<>();
|
||||
for (Map.Entry<K, V> entry : list) {
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static <K, V> Map<K, V> takeFromMap(Map<K, V> map, int amount) {
|
||||
Map<K, V> newMap = new LinkedHashMap<>();
|
||||
|
||||
for (Map.Entry<K, V> entry : map.entrySet()) {
|
||||
if (newMap.size() > amount) {
|
||||
break;
|
||||
}
|
||||
newMap.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
return newMap;
|
||||
}
|
||||
}
|
|
@ -16,7 +16,7 @@ public class MessageUtils {
|
|||
* @param fmt String#format format
|
||||
* @param args String#format args
|
||||
*/
|
||||
public static void sendMessage(CommandSender target, String fmt, String... args) {
|
||||
public static void sendMessage(CommandSender target, String fmt, Object... args) {
|
||||
String prefix = ChatColor.translateAlternateColorCodes('&', SaneEconomy.getInstance().getConfig().getString("chat.prefix", ""));
|
||||
target.sendMessage(prefix + String.format(fmt, (Object[])args));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
name: SaneEconomy
|
||||
author: AppleDash
|
||||
main: org.appledash.saneeconomy.SaneEconomy
|
||||
version: 0.5.4
|
||||
version: 0.5.5
|
||||
softdepends: [Vault]
|
||||
commands:
|
||||
balance:
|
||||
|
@ -22,5 +22,10 @@ commands:
|
|||
saneeconomy:
|
||||
aliases: [saneeco]
|
||||
description: Various admin commands for SaneEconomy.
|
||||
usage: /command reload-database
|
||||
usage: /<command> reload-database
|
||||
pernission: saneeconomy.admin
|
||||
balancetop:
|
||||
aliases: [baltop, topbal]
|
||||
description: Show the players who have the most money on the server.
|
||||
usage: /<command>
|
||||
permission: saneeconomy.balancetop
|
||||
|
|
Loading…
Reference in New Issue
Block a user