Added some base Clans shops.
Added support for Gold Refactored failed db call code a bit.
This commit is contained in:
parent
fbcc774383
commit
3d3f9012ff
@ -0,0 +1,6 @@
|
|||||||
|
package mineplex.core.common.util;
|
||||||
|
|
||||||
|
public interface RunnableStatus
|
||||||
|
{
|
||||||
|
public boolean run();
|
||||||
|
}
|
@ -11,7 +11,6 @@ import java.util.Iterator;
|
|||||||
import mineplex.core.common.util.NautHashMap;
|
import mineplex.core.common.util.NautHashMap;
|
||||||
import mineplex.core.database.column.Column;
|
import mineplex.core.database.column.Column;
|
||||||
import mineplex.core.logger.Logger;
|
import mineplex.core.logger.Logger;
|
||||||
import mineplex.core.timing.TimingManager;
|
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
@ -229,14 +228,7 @@ public abstract class RepositoryBase implements Listener
|
|||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
Logger.Instance.log(errorMessage + exception.getMessage());
|
processFailedDatabaseCall(databaseRunnable, exception.getMessage(), errorMessage);
|
||||||
|
|
||||||
databaseRunnable.incrementFailCount();
|
|
||||||
|
|
||||||
synchronized (_queueLock)
|
|
||||||
{
|
|
||||||
_failedQueue.put(databaseRunnable, errorMessage);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -244,6 +236,25 @@ public abstract class RepositoryBase implements Listener
|
|||||||
asyncThread.start();
|
asyncThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void processFailedDatabaseCall(DatabaseRunnable databaseRunnable, String errorPreMessage, String runnableMessage)
|
||||||
|
{
|
||||||
|
if (databaseRunnable.getFailedCounts() < 4)
|
||||||
|
{
|
||||||
|
databaseRunnable.incrementFailCount();
|
||||||
|
|
||||||
|
synchronized (_queueLock)
|
||||||
|
{
|
||||||
|
_failedQueue.put(databaseRunnable, runnableMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.Instance.log(errorPreMessage + runnableMessage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.Instance.log("Abandoning database call : " + runnableMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void processDatabaseQueue(UpdateEvent event)
|
public void processDatabaseQueue(UpdateEvent event)
|
||||||
{
|
{
|
||||||
@ -259,37 +270,8 @@ public abstract class RepositoryBase implements Listener
|
|||||||
{
|
{
|
||||||
for (Iterator<DatabaseRunnable> runnablesIterator = _failedQueue.keySet().iterator(); runnablesIterator.hasNext();)
|
for (Iterator<DatabaseRunnable> runnablesIterator = _failedQueue.keySet().iterator(); runnablesIterator.hasNext();)
|
||||||
{
|
{
|
||||||
final DatabaseRunnable databaseRunnable = runnablesIterator.next();
|
DatabaseRunnable databaseRunnable = runnablesIterator.next();
|
||||||
|
handleDatabaseCall(databaseRunnable, _failedQueue.get(databaseRunnable));
|
||||||
Thread asyncThread = new Thread(new Runnable()
|
|
||||||
{
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
databaseRunnable.run();
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
Logger.Instance.log(_failedQueue.get(databaseRunnable) + exception.getMessage());
|
|
||||||
|
|
||||||
if (databaseRunnable.getFailedCounts() < 4)
|
|
||||||
{
|
|
||||||
synchronized (_queueLock)
|
|
||||||
{
|
|
||||||
_failedQueue.put(databaseRunnable, _failedQueue.get(databaseRunnable));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Logger.Instance.log("Abandoning database call : " + _failedQueue.get(databaseRunnable));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
runnablesIterator.remove();
|
|
||||||
asyncThread.start();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ public class DonationManager extends MiniPlugin
|
|||||||
|
|
||||||
private NautHashMap<Player, NautHashMap<String, Integer>> _gemQueue = new NautHashMap<Player, NautHashMap<String, Integer>>();
|
private NautHashMap<Player, NautHashMap<String, Integer>> _gemQueue = new NautHashMap<Player, NautHashMap<String, Integer>>();
|
||||||
private NautHashMap<Player, NautHashMap<String, Integer>> _coinQueue = new NautHashMap<Player, NautHashMap<String, Integer>>();
|
private NautHashMap<Player, NautHashMap<String, Integer>> _coinQueue = new NautHashMap<Player, NautHashMap<String, Integer>>();
|
||||||
|
private NautHashMap<Player, NautHashMap<String, Integer>> _goldQueue = new NautHashMap<Player, NautHashMap<String, Integer>>();
|
||||||
|
|
||||||
public DonationManager(JavaPlugin plugin, String webAddress)
|
public DonationManager(JavaPlugin plugin, String webAddress)
|
||||||
{
|
{
|
||||||
@ -301,6 +302,88 @@ public class DonationManager extends MiniPlugin
|
|||||||
//Clean
|
//Clean
|
||||||
_coinQueue.clear();
|
_coinQueue.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RewardGold(Callback<Boolean> callback, String caller, String name, UUID uuid, int amount)
|
||||||
|
{
|
||||||
|
RewardGold(callback, caller, name, uuid, amount, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RewardGold(final Callback<Boolean> callback, final String caller, final String name, final UUID uuid, final int amount, final boolean updateTotal)
|
||||||
|
{
|
||||||
|
_repository.rewardGold(new Callback<Boolean>()
|
||||||
|
{
|
||||||
|
public void run(Boolean success)
|
||||||
|
{
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
if (updateTotal)
|
||||||
|
{
|
||||||
|
Donor donor = Get(name);
|
||||||
|
|
||||||
|
if (donor != null)
|
||||||
|
{
|
||||||
|
donor.addGold(amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callback != null)
|
||||||
|
callback.run(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, caller, name, uuid.toString(), amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RewardGoldLater(final String caller, final Player player, final int amount)
|
||||||
|
{
|
||||||
|
if (!_goldQueue.containsKey(player))
|
||||||
|
_goldQueue.put(player, new NautHashMap<String, Integer>());
|
||||||
|
|
||||||
|
int totalAmount = amount;
|
||||||
|
|
||||||
|
if (_goldQueue.get(player).containsKey(caller))
|
||||||
|
totalAmount += _goldQueue.get(player).get(caller);
|
||||||
|
|
||||||
|
_goldQueue.get(player).put(caller, totalAmount);
|
||||||
|
|
||||||
|
//Do Temp Change
|
||||||
|
Donor donor = Get(player.getName());
|
||||||
|
|
||||||
|
if (donor != null)
|
||||||
|
donor.addGold(amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void UpdateGoldQueue(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.SLOWER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (Player player : _goldQueue.keySet())
|
||||||
|
{
|
||||||
|
String caller = null;
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
|
for (String curCaller : _goldQueue.get(player).keySet())
|
||||||
|
{
|
||||||
|
caller = curCaller;
|
||||||
|
total += _goldQueue.get(player).get(curCaller);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (caller == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//Actually Add Gold
|
||||||
|
RewardGold(null, caller, player.getName(), player.getUniqueId(), total, false);
|
||||||
|
|
||||||
|
System.out.println("Queue Added [" + player + "] with Gold [" + total + "] for [" + caller + "]");
|
||||||
|
|
||||||
|
//Clean
|
||||||
|
_goldQueue.get(player).clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Clean
|
||||||
|
_goldQueue.clear();
|
||||||
|
}
|
||||||
|
|
||||||
public void applyKits(String playerName)
|
public void applyKits(String playerName)
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,7 @@ public class Donor
|
|||||||
{
|
{
|
||||||
private int _gems;
|
private int _gems;
|
||||||
private int _coins;
|
private int _coins;
|
||||||
|
private int _gold;
|
||||||
private boolean _donated;
|
private boolean _donated;
|
||||||
private List<Integer> _salesPackagesOwned;
|
private List<Integer> _salesPackagesOwned;
|
||||||
private List<String> _unknownSalesPackagesOwned;
|
private List<String> _unknownSalesPackagesOwned;
|
||||||
@ -159,9 +160,19 @@ public class Donor
|
|||||||
{
|
{
|
||||||
_coins += amount;
|
_coins += amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addGold(int amount)
|
||||||
|
{
|
||||||
|
_gold += amount;
|
||||||
|
}
|
||||||
|
|
||||||
public List<CoinTransactionToken> getCoinTransactions()
|
public List<CoinTransactionToken> getCoinTransactions()
|
||||||
{
|
{
|
||||||
return _coinTransactions;
|
return _coinTransactions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getGold()
|
||||||
|
{
|
||||||
|
return _gold;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import mineplex.core.database.column.ColumnVarChar;
|
|||||||
import mineplex.core.donation.repository.token.GemRewardToken;
|
import mineplex.core.donation.repository.token.GemRewardToken;
|
||||||
import mineplex.core.donation.repository.token.PurchaseToken;
|
import mineplex.core.donation.repository.token.PurchaseToken;
|
||||||
import mineplex.core.donation.repository.token.UnknownPurchaseToken;
|
import mineplex.core.donation.repository.token.UnknownPurchaseToken;
|
||||||
|
import mineplex.core.logger.Logger;
|
||||||
import mineplex.core.server.remotecall.AsyncJsonWebCall;
|
import mineplex.core.server.remotecall.AsyncJsonWebCall;
|
||||||
import mineplex.core.server.remotecall.JsonWebCall;
|
import mineplex.core.server.remotecall.JsonWebCall;
|
||||||
import mineplex.core.server.util.TransactionResponse;
|
import mineplex.core.server.util.TransactionResponse;
|
||||||
@ -23,6 +24,7 @@ public class DonationRepository extends RepositoryBase
|
|||||||
private static String CREATE_GEM_TRANSACTION_TABLE = "CREATE TABLE IF NOT EXISTS accountGemTransactions (id INT NOT NULL AUTO_INCREMENT, accounts_uuid VARCHAR(100), reason VARCHAR(100), gems INT, PRIMARY KEY (id), FOREIGN KEY (accounts_uuid) REFERENCES accounts(uuid), INDEX gemUuidIndex (accounts_uuid));";
|
private static String CREATE_GEM_TRANSACTION_TABLE = "CREATE TABLE IF NOT EXISTS accountGemTransactions (id INT NOT NULL AUTO_INCREMENT, accounts_uuid VARCHAR(100), reason VARCHAR(100), gems INT, PRIMARY KEY (id), FOREIGN KEY (accounts_uuid) REFERENCES accounts(uuid), INDEX gemUuidIndex (accounts_uuid));";
|
||||||
private static String INSERT_COIN_TRANSACTION = "INSERT INTO accountCoinTransactions(accounts_uuid, reason, coins) VALUES(?, ?, ?);";
|
private static String INSERT_COIN_TRANSACTION = "INSERT INTO accountCoinTransactions(accounts_uuid, reason, coins) VALUES(?, ?, ?);";
|
||||||
private static String UPDATE_ACCOUNT_COINS = "UPDATE accounts SET coins = coins + ? WHERE uuid = ?;";
|
private static String UPDATE_ACCOUNT_COINS = "UPDATE accounts SET coins = coins + ? WHERE uuid = ?;";
|
||||||
|
private static String UPDATE_ACCOUNT_GOLD = "UPDATE accounts SET gold = gold + ? WHERE uuid = ?;";
|
||||||
private static String UPDATE_NULL_ACCOUNT_GEMS_AND_COINS_ = "UPDATE accounts SET gems = ?, coins = ? WHERE uuid = ? AND gems IS NULL AND coins IS NULL;";
|
private static String UPDATE_NULL_ACCOUNT_GEMS_AND_COINS_ = "UPDATE accounts SET gems = ?, coins = ? WHERE uuid = ? AND gems IS NULL AND coins IS NULL;";
|
||||||
|
|
||||||
private String _webAddress;
|
private String _webAddress;
|
||||||
@ -174,6 +176,25 @@ public class DonationRepository extends RepositoryBase
|
|||||||
}
|
}
|
||||||
}), "Error updating player coin amount in DonationRepository : ");
|
}), "Error updating player coin amount in DonationRepository : ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void rewardGold(final Callback<Boolean> callback, final String giver, final String name, final String uuid, final int gold)
|
||||||
|
{
|
||||||
|
final GemRewardToken token = new GemRewardToken();
|
||||||
|
token.Source = giver;
|
||||||
|
token.Name = name;
|
||||||
|
token.Amount = gold;
|
||||||
|
|
||||||
|
handleDatabaseCall(new DatabaseRunnable(new Runnable()
|
||||||
|
{
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
if (executeUpdate(UPDATE_ACCOUNT_GOLD, new ColumnInt("gold", gold), new ColumnVarChar("uuid", 100, uuid)) < 1)
|
||||||
|
{
|
||||||
|
Logger.Instance.log("Account gold wasn't updated for " + name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}), "Error updating player gold amount in DonationRepository : ");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initialize()
|
protected void initialize()
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package mineplex.game.clans.shop;
|
package mineplex.game.clans.shop;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
import mineplex.core.account.CoreClientManager;
|
import mineplex.core.account.CoreClientManager;
|
||||||
import mineplex.core.donation.DonationManager;
|
import mineplex.core.donation.DonationManager;
|
||||||
import mineplex.core.shop.page.ShopPageBase;
|
import mineplex.core.shop.page.ShopPageBase;
|
||||||
@ -15,6 +17,7 @@ public class BuildingPage extends ShopPageBase<ClansManager, BuildingShop>
|
|||||||
@Override
|
@Override
|
||||||
protected void BuildPage()
|
protected void BuildPage()
|
||||||
{
|
{
|
||||||
|
PvpItem item = new PvpItem(Material.STONE, (byte)0, 1, "Stone", 25, 64);
|
||||||
|
AddButton(1, item, new PvpShopButton<BuildingPage>(this, item));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package mineplex.game.clans.shop;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.C;
|
||||||
|
import mineplex.core.shop.item.ShopItem;
|
||||||
|
|
||||||
|
public class PvpItem extends ShopItem
|
||||||
|
{
|
||||||
|
private static String LEFT_CLICK_BUY = C.cWhite + "Left-Click to Buy 1";
|
||||||
|
|
||||||
|
public PvpItem(Material type, byte data, int displayAmount, String name, int price, int bulkCount)
|
||||||
|
{
|
||||||
|
super(type, data, name, new String[]
|
||||||
|
{
|
||||||
|
C.cYellow + C.Bold + name,
|
||||||
|
C.cWhite + " ",
|
||||||
|
LEFT_CLICK_BUY,
|
||||||
|
C.cWhite + "Costs " + C.cGreen + "$" + price,
|
||||||
|
C.cWhite + " ",
|
||||||
|
C.cWhite + "Shift Left-Click to Buy " + bulkCount,
|
||||||
|
C.cWhite + "Costs " + C.cGreen + "$" + (price * bulkCount),
|
||||||
|
}, 0, false, false);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package mineplex.game.clans.shop;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import mineplex.core.shop.item.ComplexButton;
|
||||||
|
import mineplex.core.shop.page.ShopPageBase;
|
||||||
|
import mineplex.game.clans.clans.ClansManager;
|
||||||
|
|
||||||
|
public class PvpShopButton<PageType extends ShopPageBase<ClansManager, BuildingShop>> extends ComplexButton
|
||||||
|
{
|
||||||
|
protected PageType Page;
|
||||||
|
protected PvpItem Item;
|
||||||
|
|
||||||
|
public PvpShopButton(PageType page, PvpItem item)
|
||||||
|
{
|
||||||
|
Page = page;
|
||||||
|
Item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ClickedLeft(Player player)
|
||||||
|
{
|
||||||
|
int balance = Page.getDonationManager().Get(player.getName()).getGold();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ClickedShiftLeft(Player player)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ClickedRight(Player player)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ClickedShiftRight(Player player)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user