GoldManager now uses stored procedure.
Deductions automatically process gold queue and return if transaction succeeded.
This commit is contained in:
parent
3660b348cd
commit
73aea85876
@ -1,5 +1,6 @@
|
||||
package mineplex.core.database;
|
||||
|
||||
import java.sql.CallableStatement;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
|
@ -295,12 +295,12 @@ public class DonationManager extends MiniDbClientPlugin<Donor>
|
||||
_coinQueue.clear();
|
||||
}
|
||||
|
||||
public void RewardGold(Callback<Boolean> callback, String caller, String name, int accountId, int amount)
|
||||
public void rewardGold(Callback<Boolean> callback, String caller, String name, int accountId, int amount)
|
||||
{
|
||||
RewardGold(callback, caller, name, accountId, amount, true);
|
||||
rewardGold(callback, caller, name, accountId, amount, true);
|
||||
}
|
||||
|
||||
public void RewardGold(final Callback<Boolean> callback, final String caller, final String name, final int accountId, final int amount, final boolean updateTotal)
|
||||
public void rewardGold(final Callback<Boolean> callback, final String caller, final String name, final int accountId, final int amount, final boolean updateTotal)
|
||||
{
|
||||
_repository.rewardGold(new Callback<Boolean>()
|
||||
{
|
||||
@ -324,7 +324,7 @@ public class DonationManager extends MiniDbClientPlugin<Donor>
|
||||
}
|
||||
|
||||
if (callback != null)
|
||||
callback.run(true);
|
||||
callback.run(success);
|
||||
}
|
||||
}, caller, name, accountId, amount);
|
||||
}
|
||||
@ -349,37 +349,42 @@ public class DonationManager extends MiniDbClientPlugin<Donor>
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void UpdateGoldQueue(UpdateEvent event)
|
||||
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(), ClientManager.Get(player).getAccountId(), total, false);
|
||||
|
||||
System.out.println("Queue Added [" + player + "] with Gold [" + total + "] for [" + caller + "]");
|
||||
|
||||
//Clean
|
||||
_goldQueue.get(player).clear();
|
||||
updateGoldQueue(player);
|
||||
}
|
||||
|
||||
//Clean
|
||||
_goldQueue.clear();
|
||||
}
|
||||
|
||||
public void updateGoldQueue(Player player)
|
||||
{
|
||||
String caller = null;
|
||||
int total = 0;
|
||||
|
||||
for (String curCaller : _goldQueue.get(player).keySet())
|
||||
{
|
||||
caller = curCaller;
|
||||
total += _goldQueue.get(player).get(curCaller);
|
||||
}
|
||||
|
||||
if (caller == null)
|
||||
return;
|
||||
|
||||
//Actually Add Gold
|
||||
rewardGold(null, caller, player.getName(), ClientManager.Get(player).getAccountId(), total, false);
|
||||
|
||||
System.out.println("Queue Added [" + player + "] with Gold [" + total + "] for [" + caller + "]");
|
||||
|
||||
//Clean
|
||||
_goldQueue.get(player).clear();
|
||||
}
|
||||
|
||||
public void applyKits(String playerName)
|
||||
{
|
||||
|
@ -1,7 +1,10 @@
|
||||
package mineplex.core.donation.repository;
|
||||
|
||||
import java.sql.CallableStatement;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
@ -190,12 +193,30 @@ public class DonationRepository extends RepositoryBase
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
if (executeUpdate(UPDATE_ACCOUNT_GOLD, new ColumnInt("gold", gold), new ColumnInt("id", accountId)) < 1)
|
||||
try (
|
||||
Connection connection = getConnection();
|
||||
CallableStatement statement = connection.prepareCall("{call accountGoldChange(?, ?, ?)}");
|
||||
)
|
||||
{
|
||||
callback.run(false);
|
||||
statement.setInt(1, accountId);
|
||||
statement.setInt(2, gold);
|
||||
statement.registerOutParameter(3, Types.BOOLEAN);
|
||||
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
|
||||
while (resultSet.next())
|
||||
{
|
||||
callback.run(resultSet.getBoolean(1));
|
||||
}
|
||||
}
|
||||
catch (SQLException exception)
|
||||
{
|
||||
exception.printStackTrace();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
exception.printStackTrace();
|
||||
}
|
||||
else
|
||||
callback.run(true);
|
||||
}
|
||||
}), "Error updating player gold amount in DonationRepository : ");
|
||||
}
|
||||
|
@ -69,22 +69,27 @@ public class GoldManager extends MiniPlugin
|
||||
@EventHandler
|
||||
public void onPlayerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
Player player = event.getEntity();
|
||||
Player killer = player.getKiller();
|
||||
final Player player = event.getEntity();
|
||||
final Player killer = player.getKiller();
|
||||
|
||||
int gold = getGold(player);
|
||||
int droppedGold = (int) (gold * DEATH_TAX);
|
||||
final int droppedGold = (int) (gold * DEATH_TAX);
|
||||
|
||||
if (droppedGold > 0)
|
||||
{
|
||||
deductGold(player, droppedGold);
|
||||
notify(player, String.format("You dropped %d gold on your death!", droppedGold));
|
||||
|
||||
if (killer != null)
|
||||
deductGold(new Callback<Boolean>()
|
||||
{
|
||||
addGold(killer, droppedGold);
|
||||
notify(killer, String.format("You looted %d gold off of %s's corpse!", droppedGold, player.getName()));
|
||||
}
|
||||
public void run(Boolean success)
|
||||
{
|
||||
GoldManager.notify(player, String.format("You dropped %d gold on your death!", droppedGold));
|
||||
|
||||
if (killer != null)
|
||||
{
|
||||
addGold(killer, droppedGold);
|
||||
GoldManager.notify(killer, String.format("You looted %d gold off of %s's corpse!", droppedGold, player.getName()));
|
||||
}
|
||||
}
|
||||
},player, droppedGold);
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,14 +175,15 @@ public class GoldManager extends MiniPlugin
|
||||
return !_transferTracker.hasTransferredToday(player);
|
||||
}
|
||||
|
||||
public void addGold(Callback<Boolean> resultCallback, Player player, int amount)
|
||||
public void addGold(Player player, int amount)
|
||||
{
|
||||
_donationManager.RewardGoldLater("GoldManager", player, amount);
|
||||
}
|
||||
|
||||
public void deductGold(Callback<Boolean> resultCallback, Player player, int amount)
|
||||
{
|
||||
addGold(resultCallback, player, -amount);
|
||||
_donationManager.RewardGoldLater("GoldManager", player, amount);
|
||||
_donationManager.updateGoldQueue(player);
|
||||
}
|
||||
|
||||
public void cashIn(Player player, GoldToken token)
|
||||
@ -210,21 +216,21 @@ public class GoldManager extends MiniPlugin
|
||||
}
|
||||
}
|
||||
|
||||
public void purchaseToken(Player player, int tokenValue)
|
||||
public void purchaseToken(final Player player, final int tokenValue)
|
||||
{
|
||||
GoldToken token = new GoldToken(tokenValue);
|
||||
final GoldToken token = new GoldToken(tokenValue);
|
||||
deductGold(new Callback<Boolean>()
|
||||
{
|
||||
public void run(Boolean success)
|
||||
{
|
||||
if (sucess)
|
||||
if (success)
|
||||
{
|
||||
player.getInventory().addItem(token.toItemStack());
|
||||
notify(player, String.format("You have purchased a gold token worth %dg!", tokenValue));
|
||||
GoldManager.notify(player, String.format("You have purchased a gold token worth %dg!", tokenValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
notify(player, String.format("You have purchased a gold token worth %dg!", tokenValue));
|
||||
GoldManager.notify(player, String.format("You have purchased a gold token worth %dg!", tokenValue));
|
||||
}
|
||||
}
|
||||
}, player, tokenValue);
|
||||
|
@ -52,7 +52,7 @@ public class PvpShopButton<PageType extends ShopPageBase<ClansManager, ?>> imple
|
||||
}
|
||||
else
|
||||
{
|
||||
Page.getDonationManager().RewardGold(new Callback<Boolean>()
|
||||
Page.getDonationManager().rewardGold(new Callback<Boolean>()
|
||||
{
|
||||
public void run(Boolean result)
|
||||
{
|
||||
@ -95,7 +95,7 @@ public class PvpShopButton<PageType extends ShopPageBase<ClansManager, ?>> imple
|
||||
|
||||
final int creditAmount = removed * Item.getPrice() / 2;
|
||||
System.out.println("Crediting " + player.getName() + " with " + creditAmount + " gold.");
|
||||
Page.getDonationManager().RewardGold(new Callback<Boolean>()
|
||||
Page.getDonationManager().rewardGold(new Callback<Boolean>()
|
||||
{
|
||||
public void run(Boolean result)
|
||||
{
|
||||
|
@ -1,7 +1,5 @@
|
||||
package mineplex.game.clans.shop.farming;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftInventory;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
@ -11,18 +9,12 @@ import mineplex.core.common.util.Callback;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.InventoryUtil;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.donation.DonationManager;
|
||||
import mineplex.core.shop.item.IButton;
|
||||
import mineplex.core.shop.page.ShopPageBase;
|
||||
import mineplex.game.clans.clans.ClanInfo;
|
||||
import mineplex.game.clans.clans.ClansManager;
|
||||
import mineplex.game.clans.economy.GoldManager;
|
||||
import mineplex.game.clans.items.CustomItem;
|
||||
import mineplex.game.clans.items.GearManager;
|
||||
import mineplex.game.clans.items.economy.GoldToken;
|
||||
import mineplex.game.clans.shop.PvpItem;
|
||||
|
||||
public class ShopItemButton<T extends ShopPageBase> implements IButton
|
||||
public class ShopItemButton<T extends ShopPageBase<?, ?>> implements IButton
|
||||
{
|
||||
private int _buyPrice;
|
||||
private int _sellPrice;
|
||||
@ -38,7 +30,7 @@ public class ShopItemButton<T extends ShopPageBase> implements IButton
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(Player player, ClickType clickType)
|
||||
public void onClick(final Player player, ClickType clickType)
|
||||
{
|
||||
boolean shiftClick = (clickType == ClickType.SHIFT_LEFT || clickType == ClickType.SHIFT_RIGHT);
|
||||
|
||||
@ -70,16 +62,29 @@ public class ShopItemButton<T extends ShopPageBase> implements IButton
|
||||
}
|
||||
else if (clickType == ClickType.SHIFT_LEFT || clickType == ClickType.LEFT)
|
||||
{
|
||||
int amount = shiftClick ? 64 : 1;
|
||||
int cost = amount * _buyPrice;
|
||||
final int amount = shiftClick ? 64 : 1;
|
||||
final int cost = amount * _buyPrice;
|
||||
int goldCount = GoldManager.getInstance().getGold(player);
|
||||
|
||||
if (goldCount >= cost)
|
||||
{
|
||||
GoldManager.getInstance().deductGold(player, cost);
|
||||
giftItem(player, amount);
|
||||
GoldManager.notify(player, String.format("You have purchased %d items for %dg!", amount, cost));
|
||||
_page.playAcceptSound(player);
|
||||
GoldManager.getInstance().deductGold(new Callback<Boolean>()
|
||||
{
|
||||
public void run(Boolean success)
|
||||
{
|
||||
if (success)
|
||||
{
|
||||
giftItem(player, amount);
|
||||
GoldManager.notify(player, String.format("You have purchased %d items for %dg!", amount, cost));
|
||||
_page.playAcceptSound(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
GoldManager.notify(player, "You cannot afford that item! Please relog to update your gold count!");
|
||||
_page.playDenySound(player);
|
||||
}
|
||||
}
|
||||
}, player, cost);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user