TotalFreedomMod/commons/src/main/java/me/totalfreedom/totalfreedommod/command/Command_coins.java

148 lines
5.7 KiB
Java

package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.command.handling.*;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
@CommandDependencies({"TF-Shoppe"})
@CommandPermissions(permission = "coins", source = SourceType.BOTH)
@CommandParameters(description = "Shows the amount of coins you or another player has. Also allows you to give coins to other players.", usage = "/<command> [player] | pay <player> <amount>")
public class Command_coins extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (plugin.sh == null || !ConfigEntry.SHOP_ENABLED.getBoolean())
{
msgNew("<red>The shop is currently disabled!");
return true;
}
switch (args.length)
{
// Mode for seeing how many coins the sender has (doesn't work from console)
case 0 ->
{
if (senderIsConsole)
{
msgNew("When used from the console, you must define a target player.");
} else
{
PlayerData playerData = getData(playerSender);
msgNew("<green>You have <gold><coins></gold> coin<plural>.",
Placeholder.unparsed("coins", String.valueOf(playerData.getCoins())),
Placeholder.unparsed("plural", playerData.getCoins() > 1 ? "s" : ""));
}
return true;
}
// Mode for seeing how many coins a player has.
case 1 ->
{
Player target = getPlayer(args[0]);
if (target == null)
{
msg(PLAYER_NOT_FOUND);
} else
{
PlayerData playerData = getData(target);
msgNew("<green><gold><player></gold> has <gold><coins></gold> coin<plural>.",
Placeholder.unparsed("player", target.getName()),
Placeholder.unparsed("coins", String.valueOf(playerData.getCoins())),
Placeholder.unparsed("plural", playerData.getCoins() > 1 ? "s" : ""));
}
return true;
}
// Mode for paying another player coins
case 3 ->
{
if (args[0].equalsIgnoreCase("pay"))
{
checkPlayer();
final Player target = getPlayer(args[1]);
final PlayerData senderData = getData(playerSender);
int coinsToTransfer;
// Processes args[2]
try
{
// Prevents players from trying to be cheeky with negative numbers.
coinsToTransfer = Math.max(Math.abs(Integer.parseInt(args[2])), 1);
} catch (NumberFormatException ex)
{
msgNew("<red>Invalid number: <num>", Placeholder.unparsed("num", args[2]));
return true;
}
// Prevents players from performing transactions they can't afford to do.
if (senderData.getCoins() < coinsToTransfer)
{
msgNew("<red>You don't have enough coins to perform this transaction.");
return true;
}
if (target == null)
{
msg(PLAYER_NOT_FOUND);
} else
{
PlayerData playerData = getData(target);
playerData.setCoins(playerData.getCoins() + coinsToTransfer);
senderData.setCoins(senderData.getCoins() - coinsToTransfer);
boolean plural = coinsToTransfer > 1;
msgNew(target, "<green><gold><sender></gold> has given you <gold><coins></gold> coin<plural>!",
Placeholder.unparsed("sender", sender.getName()),
Placeholder.unparsed("coins", String.valueOf(coinsToTransfer)),
Placeholder.unparsed("plural", plural ? "s" : ""));
msgNew("<green>You have given <gold><coins></gold> coin<plural> to <gold><player></gold>.",
Placeholder.unparsed("player", target.getName()),
Placeholder.unparsed("coins", String.valueOf(coinsToTransfer)),
Placeholder.unparsed("plural", plural ? "s" : ""));
plugin.pl.save(playerData);
plugin.pl.save(senderData);
}
return true;
}
return true;
}
default ->
{
return false;
}
}
}
@Override
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{
if (args.length == 1)
{
List<String> options = new ArrayList<>(FUtil.getPlayerList());
options.add("pay");
return options;
}
return FUtil.getPlayerList();
}
}