mirror of
https://github.com/AppleDash/SaneEconomy.git
synced 2024-09-27 14:12:58 +02:00
Restructure EconomyStorageBackends a bit and add support for manipulating the balances of offline players.
This commit is contained in:
parent
4a1a363c71
commit
143604b80c
@ -6,10 +6,10 @@
|
||||
<parent>
|
||||
<groupId>org.appledash</groupId>
|
||||
<artifactId>SaneEconomy</artifactId>
|
||||
<version>0.5.7-SNAPSHOT</version>
|
||||
<version>0.5.8-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>SaneEconomyCore</artifactId>
|
||||
<version>0.5.7-SNAPSHOT</version>
|
||||
<version>0.5.8-SNAPSHOT</version>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
@ -5,7 +5,8 @@ import org.appledash.saneeconomy.command.SaneEconomyCommand;
|
||||
import org.appledash.saneeconomy.command.exception.CommandException;
|
||||
import org.appledash.saneeconomy.command.exception.type.usage.NeedPlayerException;
|
||||
import org.appledash.saneeconomy.utils.MessageUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.appledash.saneeconomy.utils.PlayerUtils;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -45,10 +46,10 @@ public class BalanceCommand extends SaneEconomyCommand {
|
||||
}
|
||||
}
|
||||
|
||||
Player player = Bukkit.getServer().getPlayer(playerName);
|
||||
OfflinePlayer player = PlayerUtils.getOfflinePlayer(playerName);
|
||||
|
||||
if (player == null) {
|
||||
MessageUtils.sendMessage(sender, "That player is not online.");
|
||||
MessageUtils.sendMessage(sender, "That player does not exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,8 @@ import org.appledash.saneeconomy.command.exception.type.usage.TooFewArgumentsExc
|
||||
import org.appledash.saneeconomy.economy.EconomyManager;
|
||||
import org.appledash.saneeconomy.utils.MessageUtils;
|
||||
import org.appledash.saneeconomy.utils.NumberUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.appledash.saneeconomy.utils.PlayerUtils;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -52,10 +53,10 @@ public class EconomyAdminCommand extends SaneEconomyCommand {
|
||||
sAmount = args[2];
|
||||
}
|
||||
|
||||
Player targetPlayer = Bukkit.getServer().getPlayer(sTargetPlayer);
|
||||
OfflinePlayer targetPlayer = PlayerUtils.getOfflinePlayer(sTargetPlayer);
|
||||
|
||||
if (targetPlayer == null) {
|
||||
MessageUtils.sendMessage(sender, "That player is not online.");
|
||||
MessageUtils.sendMessage(sender, "That player does not exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ public class EconomyManager {
|
||||
* @param player Player
|
||||
* @return Formatted balance
|
||||
*/
|
||||
public String getFormattedBalance(Player player) {
|
||||
public String getFormattedBalance(OfflinePlayer player) {
|
||||
return currency.formatAmount(backend.getBalance(player));
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,43 @@
|
||||
package org.appledash.saneeconomy.economy.backend.type;
|
||||
|
||||
import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
|
||||
import org.appledash.saneeconomy.utils.MapUtil;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Created by appledash on 7/19/16.
|
||||
* Blackjack is still best pony.
|
||||
*/
|
||||
public abstract class EconomyStorageBackendCaching implements EconomyStorageBackend {
|
||||
protected HashMap<UUID, Double> playerBalances = new HashMap<>();
|
||||
protected Map<UUID, Double> topBalances = new LinkedHashMap<>();
|
||||
|
||||
@Override
|
||||
public boolean accountExists(OfflinePlayer player) {
|
||||
return playerBalances.containsKey(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized double getBalance(OfflinePlayer player) {
|
||||
if (!accountExists(player)) {
|
||||
return 0.0D;
|
||||
}
|
||||
|
||||
return playerBalances.get(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<UUID, Double> getTopBalances(int amount) {
|
||||
return MapUtil.takeFromMap(topBalances, amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadTopBalances() {
|
||||
topBalances = MapUtil.sortByValue(playerBalances);
|
||||
}
|
||||
}
|
@ -1,26 +1,19 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Created by AppleDash on 6/13/2016.
|
||||
* Blackjack is still best pony.
|
||||
*/
|
||||
public class EconomyStorageBackendFlatfile implements EconomyStorageBackend {
|
||||
public class EconomyStorageBackendFlatfile extends EconomyStorageBackendCaching {
|
||||
private static final int SCHEMA_VERSION = 1;
|
||||
|
||||
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;
|
||||
@ -50,11 +43,6 @@ public class EconomyStorageBackendFlatfile implements EconomyStorageBackend {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadTopBalances() {
|
||||
topBalances = MapUtil.sortByValue(playerBalances);
|
||||
}
|
||||
|
||||
private void saveDatabase() {
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
@ -70,28 +58,9 @@ public class EconomyStorageBackendFlatfile implements EconomyStorageBackend {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean accountExists(OfflinePlayer player) {
|
||||
return playerBalances.containsKey(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized double getBalance(OfflinePlayer player) {
|
||||
if (!playerBalances.containsKey(player.getUniqueId())) {
|
||||
return 0.0D;
|
||||
}
|
||||
|
||||
return playerBalances.get(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void setBalance(OfflinePlayer player, double newBalance) {
|
||||
playerBalances.put(player.getUniqueId(), newBalance);
|
||||
saveDatabase();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<UUID, Double> getTopBalances(int amount) {
|
||||
return MapUtil.takeFromMap(topBalances, amount);
|
||||
}
|
||||
}
|
||||
|
@ -1,30 +1,21 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Created by AppleDash on 6/14/2016.
|
||||
* Blackjack is still best pony.
|
||||
*/
|
||||
public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
||||
public class EconomyStorageBackendMySQL extends EconomyStorageBackendCaching {
|
||||
private final String dbUrl;
|
||||
private final String dbUser;
|
||||
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;
|
||||
this.dbUser = dbUser;
|
||||
@ -85,25 +76,6 @@ public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadTopBalances() {
|
||||
topBalances = MapUtil.sortByValue(playerBalances);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accountExists(OfflinePlayer player) {
|
||||
return playerBalances.containsKey(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized double getBalance(OfflinePlayer player) {
|
||||
if (!accountExists(player)) {
|
||||
return 0.0D;
|
||||
}
|
||||
|
||||
return playerBalances.get(player.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void setBalance(final OfflinePlayer player, final double newBalance) {
|
||||
final double oldBalance = getBalance(player);
|
||||
@ -126,11 +98,6 @@ public class EconomyStorageBackendMySQL implements EconomyStorageBackend {
|
||||
});
|
||||
}
|
||||
|
||||
@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,30 @@
|
||||
package org.appledash.saneeconomy.utils;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* Created by appledash on 7/19/16.
|
||||
* Blackjack is still best pony.
|
||||
*/
|
||||
public class PlayerUtils {
|
||||
/**
|
||||
* Get an online or offline player from Bukkit.
|
||||
* This is guaranteed to be a player who has played before, but is not guaranteed to be currently online.
|
||||
* @param playerName The player's name
|
||||
* @return OfflinePlayer object, or null if never played
|
||||
*/
|
||||
public static OfflinePlayer getOfflinePlayer(String playerName) {
|
||||
OfflinePlayer player = Bukkit.getServer().getPlayer(playerName);
|
||||
|
||||
if (player == null) {
|
||||
player = Bukkit.getServer().getOfflinePlayer(playerName);
|
||||
}
|
||||
|
||||
if (player != null && !player.hasPlayedBefore()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return player;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user