Newer
Older
TreasureChest / src / main / java / de / iani / treasurechest / commands / SetChestCommand.java
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.treasurechest.Permissions;
import de.iani.treasurechest.TreasureChest;
import java.util.Collection;
import java.util.List;
import org.bukkit.Effect;
import org.bukkit.FluidCollisionMode;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class SetChestCommand extends SubCommand {
    private TreasureChest plugin;

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

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

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

    @Override
    public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException {
        if (args.remaining() != 0) {
            plugin.sendMessage(sender, commandString + getUsage(), true);
            return true;
        }
        Player player = ((Player) sender);
        Block target = player.getTargetBlockExact(5, FluidCollisionMode.NEVER);
        plugin.setChestLocation(target == null ? null : target.getLocation());
        if (target != null) {
            player.playEffect(target.getLocation(), Effect.MOBSPAWNER_FLAMES, null);
            player.playEffect(target.getLocation(), Effect.MOBSPAWNER_FLAMES, null);
            player.playEffect(target.getLocation(), Effect.MOBSPAWNER_FLAMES, null);
            plugin.sendMessage(sender, "Treasurechest location set!");
        } else {
            plugin.sendMessage(sender, "Treasurechest location removed!");
        }
        return true;
    }

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