Newer
Older
TreasureChest / src / main / java / de / iani / treasurechest / commands / RemoveCommand.java
@Brokkonaut Brokkonaut on 15 Jul 2024 3 KB components
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.ListedItemsData;
import de.iani.treasurechest.Permissions;
import de.iani.treasurechest.PlayerTreasureChestContent;
import de.iani.treasurechest.PlayerTreasureChestContent.LoadState;
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;
import org.bukkit.entity.Player;

public class RemoveCommand extends SubCommand {
    private TreasureChest plugin;

    public RemoveCommand(TreasureChest plugin) {
        this.plugin = plugin;
    }

    @Override
    public String getRequiredPermission() {
        return Permissions.REMOVE;
    }

    @Override
    public boolean requiresPlayer() {
        return false;
    }

    @Override
    public String getUsage() {
        return "<player> <id>";
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException {
        if (args.remaining() != 2) {
            plugin.sendMessage(sender, commandString + getUsage(), true);
            return true;
        }
        CachedPlayer target = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(args.getNext(), true);

        if (target == null) {
            plugin.sendMessage(sender, "Unknown player!", true);
            return true;
        }
        int nr = args.getNext(-1);

        ListedItemsData lid;
        if (sender instanceof Player player) {
            lid = plugin.getData().getListedItems(player.getUniqueId());
        } else {
            lid = plugin.getData().getListedItems(null);
        }
        if (lid == null || !lid.getOwner().equals(target.getUniqueId())) {
            plugin.sendMessage(sender, "Nicht der gelistete Spieler", true);
            return true;
        }
        Integer key = lid.getItemDatabaseKey(nr);
        if (key == null) {
            plugin.sendMessage(sender, "Ungültige ID", true);
            return true;
        }
        try {
            if (plugin.getDatabase().deleteItem(target.getUniqueId(), key)) {
                PlayerTreasureChestContent content = plugin.getData().getChestContent(target.getUniqueId());
                if (content != null && content.getLoadState() == LoadState.LOADED) {
                    content.removeItem(key);
                }
            } else {
                plugin.sendMessage(sender, "Ungültige ID", true);
                return true;
            }
        } catch (SQLException e) {
            plugin.sendMessage(sender, "Datenbankfehler", true);
            plugin.getLogger().log(Level.SEVERE, "Could not delete item " + key + " for " + target.getName() + ": " + e.getMessage(), e);
            return true;
        }
        plugin.sendMessage(sender, "Der Preis wurde entfernt!");
        return true;
    }

    @Override
    public Collection<String> onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) {
        if (args.remaining() == 1) {
            return null;
        }
        return List.of();
    }
}