Use separate gold balances for each clans server
This commit is contained in:
parent
031a9575ae
commit
dfbebe11f4
@ -267,7 +267,6 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
|
|||||||
|
|
||||||
_blacklist = new ClansBlacklist(plugin);
|
_blacklist = new ClansBlacklist(plugin);
|
||||||
|
|
||||||
_goldManager = new GoldManager(this, _clientManager, donationManager);
|
|
||||||
_gearManager = gearManager;
|
_gearManager = gearManager;
|
||||||
_lootManager = new LootManager(gearManager, _goldManager);
|
_lootManager = new LootManager(gearManager, _goldManager);
|
||||||
_disguiseManager = new DisguiseManager(plugin, packetHandler);
|
_disguiseManager = new DisguiseManager(plugin, packetHandler);
|
||||||
@ -384,13 +383,15 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
|
|||||||
|
|
||||||
_playTracker = new Playtime(this, statsManager);
|
_playTracker = new Playtime(this, statsManager);
|
||||||
|
|
||||||
_legacyTutorial = new mineplex.game.clans.legacytutorial.TutorialManager(plugin, _playTracker, _goldManager, _taskManager, donationManager, preferencesManager, this, packetHandler);
|
|
||||||
|
|
||||||
_scoreboard = new ClansScoreboardManager(plugin, this, _warManager, _worldEvent, _tutorial, clientManager, donationManager);
|
_scoreboard = new ClansScoreboardManager(plugin, this, _warManager, _worldEvent, _tutorial, clientManager, donationManager);
|
||||||
_clanDataAccess = new ClansDataAccessLayer(this, _scoreboard);
|
_clanDataAccess = new ClansDataAccessLayer(this, _scoreboard);
|
||||||
|
|
||||||
_bannerManager = new BannerManager(plugin);
|
_bannerManager = new BannerManager(plugin);
|
||||||
|
|
||||||
|
_goldManager = new GoldManager(this, _clientManager, donationManager, _clanDataAccess);
|
||||||
|
|
||||||
|
_legacyTutorial = new mineplex.game.clans.legacytutorial.TutorialManager(plugin, _playTracker, _goldManager, _taskManager, donationManager, preferencesManager, this, packetHandler);
|
||||||
|
|
||||||
for (ClanToken token : _clanDataAccess.getRepository().retrieveClans())
|
for (ClanToken token : _clanDataAccess.getRepository().retrieveClans())
|
||||||
{
|
{
|
||||||
loadClan(token);
|
loadClan(token);
|
||||||
|
@ -8,6 +8,7 @@ import mineplex.core.donation.DonationManager;
|
|||||||
import mineplex.core.donation.Donor;
|
import mineplex.core.donation.Donor;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
import mineplex.game.clans.clans.ClansDataAccessLayer;
|
||||||
import mineplex.game.clans.clans.ClansManager;
|
import mineplex.game.clans.clans.ClansManager;
|
||||||
import mineplex.game.clans.items.economy.GoldToken;
|
import mineplex.game.clans.items.economy.GoldToken;
|
||||||
import mineplex.game.clans.shop.bank.BankShop;
|
import mineplex.game.clans.shop.bank.BankShop;
|
||||||
@ -41,6 +42,7 @@ public class GoldManager extends MiniDbClientPlugin<GoldData>
|
|||||||
public static GoldManager getInstance() { return _instance; }
|
public static GoldManager getInstance() { return _instance; }
|
||||||
|
|
||||||
private DonationManager _donationManager;
|
private DonationManager _donationManager;
|
||||||
|
private final int _serverId;
|
||||||
private TransferTracker _transferTracker;
|
private TransferTracker _transferTracker;
|
||||||
private Set<Item> _itemSet;
|
private Set<Item> _itemSet;
|
||||||
private Map<Player, Integer> _playerPickupMap;
|
private Map<Player, Integer> _playerPickupMap;
|
||||||
@ -48,17 +50,18 @@ public class GoldManager extends MiniDbClientPlugin<GoldData>
|
|||||||
|
|
||||||
private final GoldRepository _repository;
|
private final GoldRepository _repository;
|
||||||
|
|
||||||
public GoldManager(ClansManager plugin, CoreClientManager clientManager, DonationManager donationManager)
|
public GoldManager(ClansManager plugin, CoreClientManager clientManager, DonationManager donationManager, ClansDataAccessLayer dataAccessLayer)
|
||||||
{
|
{
|
||||||
super("Clans Gold", plugin.getPlugin(), clientManager);
|
super("Clans Gold", plugin.getPlugin(), clientManager);
|
||||||
|
|
||||||
_instance = this;
|
_instance = this;
|
||||||
_donationManager = donationManager;
|
_donationManager = donationManager;
|
||||||
|
_serverId = dataAccessLayer.getRepository().getServerId();
|
||||||
_transferTracker = new TransferTracker();
|
_transferTracker = new TransferTracker();
|
||||||
_itemSet = new HashSet<Item>();
|
_itemSet = new HashSet<Item>();
|
||||||
_playerPickupMap = new HashMap<Player, Integer>();
|
_playerPickupMap = new HashMap<Player, Integer>();
|
||||||
_bankShop = new BankShop(plugin, clientManager, donationManager);
|
_bankShop = new BankShop(plugin, clientManager, donationManager);
|
||||||
_repository = new GoldRepository(plugin.getPlugin());
|
_repository = new GoldRepository(_serverId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -396,7 +399,7 @@ public class GoldManager extends MiniDbClientPlugin<GoldData>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getQuery(int accountId, String uuid, String name) {
|
public String getQuery(int accountId, String uuid, String name) {
|
||||||
return "SELECT gold FROM accounts WHERE id = '" + accountId + "';";
|
return "SELECT gold FROM clansGold WHERE id = '" + accountId + "' AND serverId=" + _serverId + ";";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,31 +1,47 @@
|
|||||||
package mineplex.game.clans.economy;
|
package mineplex.game.clans.economy;
|
||||||
|
|
||||||
import mineplex.core.common.util.Callback;
|
import mineplex.core.common.util.Callback;
|
||||||
import mineplex.core.database.MinecraftRepository;
|
|
||||||
import mineplex.serverdata.database.DBPool;
|
import mineplex.serverdata.database.DBPool;
|
||||||
import mineplex.serverdata.database.DatabaseRunnable;
|
|
||||||
import mineplex.serverdata.database.column.ColumnInt;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
|
|
||||||
public class GoldRepository extends MinecraftRepository {
|
import java.sql.Connection;
|
||||||
private static final String UPDATE_ACCOUNT_GOLD = "UPDATE accounts SET gold = gold + ? WHERE id = ? && gold >= ?;";
|
import java.sql.PreparedStatement;
|
||||||
private static final String SET_ACCOUNT_GOLD = "UPDATE accounts SET gold = ? WHERE id = ?;";
|
import java.sql.SQLException;
|
||||||
|
|
||||||
public GoldRepository(JavaPlugin plugin) {
|
public class GoldRepository {
|
||||||
super(plugin, DBPool.getAccount());
|
private static final String CREATE_TABLE = "CREATE TABLE clansGold (serverId int(11) not null, id int(11) not null, gold int not null, primary key (serverId, id), foreign key (serverId) references clanServer(id), foreign key (id) references accounts(id))";
|
||||||
|
private static final String UPDATE_ACCOUNT_GOLD = "INSERT INTO clansGold (serverId, id, gold) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE gold=gold+?";
|
||||||
|
private static final String SET_ACCOUNT_GOLD = "INSERT INTO clansGold (serverId, id, gold) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE gold=?";
|
||||||
|
|
||||||
|
private final int _serverId;
|
||||||
|
|
||||||
|
public GoldRepository(int serverId) {
|
||||||
|
_serverId = serverId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rewardGold(final Callback<Boolean> callback, final int accountId, final int gold)
|
public void rewardGold(final Callback<Boolean> callback, final int accountId, final int gold)
|
||||||
{
|
{
|
||||||
handleDatabaseCall(new DatabaseRunnable(new Runnable()
|
try (Connection connection = DBPool.getAccount().getConnection())
|
||||||
{
|
{
|
||||||
public void run()
|
PreparedStatement statement = connection.prepareStatement(UPDATE_ACCOUNT_GOLD);
|
||||||
|
statement.setInt(1, _serverId);
|
||||||
|
statement.setInt(2, accountId);
|
||||||
|
statement.setInt(3, gold);
|
||||||
|
statement.setInt(4, gold);
|
||||||
|
statement.executeUpdate();
|
||||||
|
|
||||||
|
if (callback != null)
|
||||||
{
|
{
|
||||||
ColumnInt min = new ColumnInt("gold", gold < 0 ? -gold : 0);
|
callback.run(true);
|
||||||
boolean success = executeUpdate(UPDATE_ACCOUNT_GOLD, new ColumnInt("gold", gold), new ColumnInt("id", accountId), min) > 0;
|
|
||||||
callback.run(success);
|
|
||||||
}
|
}
|
||||||
}), "Error updating player gold amount in DonationRepository : ");
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
if (callback != null)
|
||||||
|
{
|
||||||
|
callback.run(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGold(final Callback<Boolean> callback, final int accountId, final int gold)
|
public void setGold(final Callback<Boolean> callback, final int accountId, final int gold)
|
||||||
@ -34,19 +50,27 @@ public class GoldRepository extends MinecraftRepository {
|
|||||||
{
|
{
|
||||||
throw new IllegalArgumentException("gold cannot be negative");
|
throw new IllegalArgumentException("gold cannot be negative");
|
||||||
}
|
}
|
||||||
handleDatabaseCall(new DatabaseRunnable(new Runnable()
|
|
||||||
|
try (Connection connection = DBPool.getAccount().getConnection())
|
||||||
{
|
{
|
||||||
public void run()
|
PreparedStatement statement = connection.prepareStatement(SET_ACCOUNT_GOLD);
|
||||||
|
statement.setInt(1, _serverId);
|
||||||
|
statement.setInt(2, accountId);
|
||||||
|
statement.setInt(3, gold);
|
||||||
|
statement.setInt(4, gold);
|
||||||
|
statement.executeUpdate();
|
||||||
|
if (callback != null)
|
||||||
{
|
{
|
||||||
boolean success = executeUpdate(SET_ACCOUNT_GOLD, new ColumnInt("gold", gold), new ColumnInt("id", accountId)) > 0;
|
callback.run(true);
|
||||||
callback.run(success);
|
|
||||||
}
|
}
|
||||||
}), "Error updating player gold amount in DonationRepository : ");
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
if (callback != null)
|
||||||
|
{
|
||||||
|
callback.run(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initialize() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void update() {}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user