Ir para conteúdo

CommandAPI - API de comandos para BUKKIT


Manolo8

Posts Recomendados

Bem pessoal, criei uma API para comandos, onde basicamente, para criar um comando, você usa:

 

Exemplo em vídeo:

https://www.youtube.com/watch?v=AE4w0UtGSYE&feature=youtu.be

    @CmdMapping("mobarea create <name>")
    @CmdDescription("Cria uma area de mobs")
    @CmdPermission("simplecraft.admin")
    @CmdParams({@Param(MobAreaProvider.class), @Param(SimpleArea.class)})
    public void createMobArea(User user, String name, MobAreaProvider provider, SimpleArea area) throws SQLException {

        if (provider.exists(name)) {
            user.sendMessage(MessageType.ERROR, "Já existe uma MobArea com esse nome!");
            return;
        }

        provider.create(area, name);

        user.sendMessage(MessageType.SUCCESS, "A MobArea foi criada com sucesso!");
    }

    @CmdMapping("mobarea remove <area>")
    @CmdDescription("Remove uma area de mobs")
    @CmdPermission("simplecraft.admin")
    public void removeMobArea(Sender sender, MobArea area) {
        area.remove();

        sender.sendMessage(MessageType.SUCCESS, "A area de mobs foi removida!");
    }

    @CmdMapping("mobarea respawn <area>")
    @CmdDescription("Respawna os mobs de uma area")
    @CmdPermission("simplecraft.admin")
    public void mobAreaRespawn(Sender sender, MobArea area) {
        area.respawnMobs(true);

        sender.sendMessage(MessageType.SUCCESS, "Os mobs serão respawnados!");
    }

    @CmdMapping("mobarea tp <area>")
    @CmdDescription("Teleporta para um local disponível na area")
    @CmdPermission("simplecraft.admin")
    public void mobAreaTp(User user, MobArea area) {
        if (user.teleport(area)) {
            user.sendMessage(MessageType.SUCCESS, "Teleportando...");
        } else {
            user.sendMessage(MessageType.ERROR, "Não foi encontrado um local disponível para teleporte...");
        }
    }

    @CmdMapping("mobarea change <area> mob add <mob> <quantity>")
    @CmdDescription("Adiciona uma mob a area")
    @CmdPermission("simplecraft.admin")
    public void mobAreaAdd(Sender sender, MobArea area, Mob mob, int value) {

        if (area.hasMob(mob)) {
            sender.sendMessage(MessageType.ERROR, "A area já tem esse mob!");
            return;
        }

        if (value > 2000) {
            sender.sendMessage(MessageType.ERROR, "A quantidade não pode ser maior que 2000");
            return;
        }

        area.create(mob, value);
        area.respawnMobs(false);

        sender.sendMessage(MessageType.SUCCESS, "O mob foi adicionado!");
    }

    @CmdMapping("mobarea change <area> mob remove <mob>")
    @CmdDescription("Remove um mob da area")
    @CmdPermission("simplecraft.admin")
    public void mobAreaRemove(Sender sender, MobArea area, MobInfo mob) {

        area.removeMob(mob);
        area.respawnMobs(true);

        sender.sendMessage(MessageType.SUCCESS, "O mob foi removido!");
    }

    @CmdMapping("mobarea change <area> mob update <mob> <quantity>")
    @CmdDescription("Atualiza a quantidade de mobs na area")
    @CmdPermission("simplecraft.admin")
    public void mobAreaUpdate(Sender sender, MobArea area, MobInfo info, int value) {

        if (value > 2000) {
            sender.sendMessage(MessageType.ERROR, "A quantidade não pode ser maior que 2000");
            return;
        }

        info.setQuantity(value);
        area.respawnMobs(false);

        sender.sendMessage(MessageType.SUCCESS, "A quantidade de mobs foi alterada!");
    }

E para criar um provedor, usa-se:

    @SupplierOptions("area")
    class MobAreaConverter implements Supplier.Convert<MobArea> {

        @Override
        public void tabComplete(TabArguments arguments) throws SQLException {
            arguments.offerSafe(repository.findNames(arguments.getComplete()));
        }

        @Override
        public Result<MobArea> convert(ParameterBuilder builder, Sender sender, String value) throws SQLException {

            MobArea area = repository.findByName(value);

            if (area == null) return new Result.Error("A area com o nome " + value + " não foi encontrada!");

            return new Result(area);
        }
    }

    @SupplierOptions("mob")
    class MobConverter implements Supplier.Convert<Mob> {

        @Override
        public void tabComplete(TabArguments arguments) {

            MobArea mobArea = arguments.parameters().getByType(MobArea.class);

            for (Mob mob : repository.getMobInfoRepository().getMobs()) {

                if (mobArea != null && mobArea.hasMob(mob)) continue;

                arguments.offer(mob.getName());
            }
        }

        @Override
        public Result<Mob> convert(ParameterBuilder builder, Sender sender, String value) {
            Mob mob = repository.getMobInfoRepository().findByName(value);

            if (mob == null) return new Result.Error("O mob " + value + " não foi encontrado!");

            return new Result<>(mob);
        }
    }

    @SupplierOptions("mob")
    class MobInfoConverter implements Supplier.Convert<MobInfo> {

        @Override
        public void tabComplete(TabArguments arguments) {
            MobArea mobArea = arguments.parameters().getByType(MobArea.class);

            if (mobArea != null) {
                for (MobInfo info : mobArea.getMobInfos()) {
                    arguments.offer(info.getMob().getName());
                }
            }
        }

        @Override
        public Result<MobInfo> convert(ParameterBuilder builder, Sender sender, String value) {
            MobArea mobArea = builder.getByType(MobArea.class);

            Mob mob = repository.getMobInfoRepository().findByName(value);

            if (mob == null) return new Result.Error("O mob " + value + " não foi encontrado!");

            MobInfo info = mobArea.getMob(mob);

            if (info == null) return new Result.Error("A area não tem o Mob " + value + "!");

            return new Result(info);
        }
    }

Bem, deu um trabalho, e minha ideia é, talvez liberar aqui pro fórum...

 

Queria saber quem gostaria de usar... (Daria trabalho fazer um tutorial para usar isso, e no fim das contas ser desperdicio '-')

(Os comandos são basicamente daquele jeito ali, (o tab complete funciona perfeitamente :))

 

Deem um feedback se quererem que eu poste...

Editado por Manolo8
Link para o comentário
Compartilhar em outros sites

ANÁLISE DE INATIVIDADE
 

Este tópico foi automaticamente arquivado devido à inatividade. Para manter a organização e fluidez das discussões na comunidade, tópicos que permanecem sem novas interações por um período prolongado são fechados automaticamente.
 

Se houver interesse em retomar o conteúdo, sinta-se à vontade para criar um novo tópico ou entre em contato com a equipe da comunidade para reabrir este tópico.


Equipe de Moderação
Gamer's Board
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...