package de.iani.treasurechest.commands;
import de.iani.cubesideutils.bukkit.commands.SubCommand;
import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException;
import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException;
import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException;
import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException;
import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException;
import de.iani.cubesideutils.commands.ArgsParser;
import de.iani.playerUUIDCache.CachedPlayer;
import de.iani.treasurechest.Permissions;
import de.iani.treasurechest.TreasureChest;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
public class TransferCommand extends SubCommand {
private TreasureChest plugin;
public TransferCommand(TreasureChest plugin) {
this.plugin = plugin;
}
@Override
public String getRequiredPermission() {
return Permissions.TRANSFER;
}
@Override
public boolean requiresPlayer() {
return false;
}
@Override
public String getUsage() {
return "<fromplayer> <toplayer> CONFIRM";
}
@Override
public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException {
if (args.remaining() != 3) {
plugin.sendMessage(sender, commandString + getUsage(), true);
return true;
}
CachedPlayer fromPlayer = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(args.getNext(), true);
if (fromPlayer == null) {
plugin.sendMessage(sender, "Unknown old player!", true);
return true;
}
CachedPlayer toPlayer = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(args.getNext(), true);
if (toPlayer == null) {
plugin.sendMessage(sender, "Unknown new player!", true);
return true;
}
if (!args.getNext().equals("CONFIRM")) {
plugin.sendMessage(sender, commandString + getUsage(), true);
return true;
}
try {
int transfered = plugin.getDatabase().transferItems(fromPlayer.getUniqueId(), toPlayer.getUniqueId());
if (plugin.getServer().getPlayer(fromPlayer.getUniqueId()) != null) {
plugin.getData().reloadTreasureChest(fromPlayer.getUniqueId());
} else {
plugin.getData().unloadTreasureChest(fromPlayer.getUniqueId());
}
if (plugin.getServer().getPlayer(toPlayer.getUniqueId()) != null) {
plugin.getData().reloadTreasureChest(toPlayer.getUniqueId());
} else {
plugin.getData().unloadTreasureChest(toPlayer.getUniqueId());
}
plugin.sendMessage(sender, transfered == 0 ? (fromPlayer.getName() + " hatte keine Items in seiner Schatztruhe!") : (transfered + " Items wurden von " + fromPlayer.getName() + " zu " + toPlayer.getName() + " übertragen!"));
} catch (SQLException e) {
plugin.sendMessage(sender, "Datenbankfehler", true);
plugin.getLogger().log(Level.SEVERE, "Could not transfer items from " + fromPlayer.getUniqueId() + " to " + toPlayer.getUniqueId() + ": " + e.getMessage(), e);
return true;
}
return true;
}
@Override
public Collection<String> onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) {
if (args.remaining() < 3) {
return null;
}
return List.of();
}
}