Mineplex/GOD DAMN COSMETICS/thank/ThankManager.java
Daniel Waggner 38a20f98c2 Removed Files
These two directories contain code that was removed from the src and dependencies of the compiled files. They were removed due to being either a. unnecessary or b. a royal pain in my booty.
2021-05-23 18:13:37 -07:00

222 lines
6.5 KiB
Java

package mineplex.core.thank;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.currency.GlobalCurrency;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.donation.DonationManager;
import mineplex.core.recharge.Recharge;
import mineplex.core.thank.command.ThankCommand;
/**
* This class handles /thank and amplifier thanks, along with allowing players to claim the rewards they earn
*/
public class ThankManager extends MiniDbClientPlugin<ThankData>
{
public static final int DEFAULT_RECEIVER_REWARD = 5;
public static final int DEFAULT_SENDER_REWARD = 5;
public enum Perm implements Permission
{
THANK_COMMAND,
}
private DonationManager _donationManager;
private ThankRepository _thankRepository;
public ThankManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager)
{
super("Thanks", plugin, clientManager);
_donationManager = donationManager;
_thankRepository = new ThankRepository();
generatePermissions();
}
private void generatePermissions()
{
PermissionGroup.PLAYER.setPermission(Perm.THANK_COMMAND, true, true);
}
@Override
public void addCommands()
{
addCommand(new ThankCommand(this));
}
/**
* Attempt to thank a player. This can be used to distribute rewards to players, give players rewards for using
* amplifiers, and allow players to thank anyone inside a game.
*
* @param receiver The player who is being thanked
* @param sender The player thanking receiver
* @param receiverReward The Treasure Shard reward for the receiver
* @param senderReward The Treasure Shard reward for the sender
* @param reason The reason that player is being thanked
* @param ignoreCooldown Should we ignore all thank cooldowns
* @param callback Callback for processing the result
*/
public void thankPlayer(Player receiver, Player sender, int receiverReward, int senderReward, String reason, boolean ignoreCooldown, Callback<ThankResult> callback)
{
if (!Recharge.Instance.use(sender, "Thank Player", 1000 * 5, false, false))
{
UtilPlayer.message(sender, F.main("Thank", "Please wait before trying that again"));
callback.run(ThankResult.COOLDOWN_RECHARGE);
return;
}
int receiverAccountId = ClientManager.getAccountId(receiver);
thankPlayer(receiver.getName(), receiverAccountId, sender, receiverReward, senderReward, reason, ignoreCooldown, result ->
{
if (result == ThankResult.SUCCESS)
{
// Reload their thank data if the player is online!
runAsync(() ->
{
try
{
Set(receiver, _thankRepository.getThankData(receiverAccountId));
}
catch (SQLException e)
{
e.printStackTrace();
}
});
}
callback.run(result);
});
}
/**
* Called when a player wants to "claim" all pending rewards that they haven't claimed yet
*
* @param player The player claiming their thank rewards
* @param callback Callback with the result of the claim
*/
public void claimThanks(Player player, Callback<ClaimThankResult> callback)
{
final String playerName = player.getName();
final int accountId = ClientManager.getAccountId(player);
if (accountId == -1)
{
callback.run(null);
return;
}
runAsync(() ->
{
try
{
ClaimThankResult result = _thankRepository.claimThank(accountId);
runSync(() ->
{
if (result != null && result.getClaimed() > 0)
{
Set(player, new ThankData(0));
_donationManager.rewardCurrencyUntilSuccess(GlobalCurrency.TREASURE_SHARD, player, "Thank", result.getClaimed());
}
callback.run(result);
});
}
catch (RuntimeException ex)
{
ex.printStackTrace();
runSync(() -> callback.run(null));
}
});
}
/**
* Attempt to thank a player. This can be used to distribute rewards to players, give players rewards for using
* amplifiers, and allow players to thank anyone inside a game.
*
* @param receiverName Name of the player being thanked
* @param receiverAccountId Account id of the player being thanked
* @param sender The player sending the thanks
* @param receiverReward The Treasure Shard reward for the receiver
* @param senderReward The Treasure Shard reward for the sender
* @param reason The reason that player is being thanked
* @param ignoreCooldown Should we ignore all thank cooldowns
* @param callback Callback for processing the result
*/
public void thankPlayer(String receiverName, int receiverAccountId, Player sender, int receiverReward, int senderReward, String reason, boolean ignoreCooldown, Callback<ThankResult> callback)
{
int senderAccountId = getClientManager().getAccountId(sender);
// Break out on bad account id
if (senderAccountId == -1 || receiverAccountId == -1)
{
callback.run(ThankResult.INVALID_ACCOUNT_ID);
return;
}
// You can't thank yourself, silly!
if (receiverAccountId == senderAccountId)
{
callback.run(ThankResult.CANNOT_THANK_SELF);
return;
}
runAsync(() ->
{
try
{
boolean success = _thankRepository.thank(receiverAccountId, senderAccountId, receiverReward, reason, ignoreCooldown);
runSync(() ->
{
if (success)
{
// Reward Shards for the sender now. The player being thanked can claim their shards at Carl.
_donationManager.rewardCurrencyUntilSuccess(GlobalCurrency.TREASURE_SHARD, sender, "Thank", senderReward);
}
callback.run(success ? ThankResult.SUCCESS : ThankResult.COOLDOWN_DATABASE);
});
}
catch (RuntimeException ex)
{
ex.printStackTrace();
runSync(() -> callback.run(ThankResult.DATABASE_ERROR));
}
});
}
@Override
public String getQuery(int accountId, String uuid, String name)
{
return "SELECT SUM(thankAmount) FROM accountThankTransactions WHERE receiverId = " + accountId + " AND claimed = FALSE;";
}
@Override
public void processLoginResultSet(String playerName, UUID playerUUID, int accountId, ResultSet resultSet) throws SQLException
{
if (resultSet.next())
{
int thankToClaim = resultSet.getInt(1);
Set(playerUUID, new ThankData(thankToClaim));
}
}
@Override
protected ThankData addPlayer(UUID player)
{
return new ThankData(0);
}
}