Ir para conteúdo

Algumas dúvidas na criação de plug-ins


pedrinhohss

Posts Recomendados

                                                                                   Olá galera da GB!

Bom, recentemente iniciei um projeto de criação com o intuito de criar um novo modo de jogo nunca visto antes, porém para conseguir projetar algo nesse nível precisei aprender a fazer plug-ins, passei algum tempo estudando sobre Java e já deu para ter uma pequena noção do que eu estava preste a fazer, então comecei a ver tutoriais no YouTube e daí fui indo tentando fazer sozinho. Porém ainda tenho muitas dúvidas sobre múltiplas coisas, e hoje vim tentar saber  sobre as mesmas.

 

Primeira dúvida:

Bom, essa primeira dúvida é fácil para alguns e complicada para outros, no caso eu sou esses "outros", basicamente gostaria de saber como posso adicionar vários comandos em só uma classe, já vi alguns tutoriais porém nenhum deles me ajudaram da forma que gostaria, ou seja, só perdi tempo por quê não aprendi nada. Em todos estavam falando sobre args e essas coisas, porém não sei onde posso adiciona-las e como vou criar os comandos e depois junta-las à eles.

 

Segunda dúvida:

 

Esta já é meio complicada pois exige de alguém mais experiente no ramo. Basicamente eu quero que quando fique de dia o jogador que tem uma certa permissão ganha um efeito, daí quando chega a noite ele perde este mesmo efeito e ganha outro. Também gostaria que durante esse período de dia e noite ele troca-se a Skin.

 

Terceira e ultima dúvida:

Gostaria de saber como posso implementar as APIS de plug-ins, ou seja, se eu quiser criar um plug-in que necessita de algum de economia como eu juntaria a API do mesmo em meu plug-in?

 

Obrigado à todos!

Link para o comentário
Compartilhar em outros sites

A ultima duvida na verdade sei responder eu acho:

Voce a baixa sua api e bota no projeto como boto ?

Clica no projeto vai em Propriedades > Java Build Path "Add external Jars" e coloca sua api baixada ai no plugins do servidor e so botar a api

 

Link para o comentário
Compartilhar em outros sites

Respondendo sua primeira pergunta, vou te deixar um exemplo!

if(command.getName().equalsIgnoreCase("comando")) {
   if(args.length == 0) {
      return true;
  }
  if(args[0].equalsIgnoreCase("argumentos")) {

 } //ira ficar assim, /comando argumentos!

Respondendo sua segunda pergunta , da uma olhada aqui https://bukkit.org/threads/solved-how-to-check-if-it-is-day-or-night.12262/

 

Link para o comentário
Compartilhar em outros sites

41 minutos atrás, DigoGames disse:

Nao sei responder nenhuma mas esse mode de jogo seria um modo de jogo estilo, Vampiros lobisomens ?

Quase isso, basicamente teriam esses tipos de monstros, mas no caso o que informei a cima vai ser mais usado para um tipo de Fantasma...

Link para o comentário
Compartilhar em outros sites

34 minutos atrás, Watyn disse:

Respondendo sua primeira pergunta, vou te deixar um exemplo!

if(command.getName().equalsIgnoreCase("comando")) {
   if(args.length == 0) {
      return true;
  }
  if(args[0].equalsIgnoreCase("argumentos")) {

 } //ira ficar assim, /comando argumentos!

Respondendo sua segunda pergunta , da uma olhada aqui https://bukkit.org/threads/solved-how-to-check-if-it-is-day-or-night.12262/

 

Bom, eu entendi um pouco sobre verificar o dia e noite, agora como posso faze-lo executar um comando quando ficar de dia e outro a noite?

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

Boa noite senhorzinho.
Bom, primeiramente sim você pode adicionar vários comandos em um só MÉTODO.

Uma classe que implementa CommandExecutor ou extende Command só suporta um comando.

Mas nesse comando você pode linkar vários outros, por exempl`o

class MeuComando implements CommandExecutor {

	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		// seu comando.
	}

}


Mas como eu disse vc pode em um método colocar vários comandos, basta verificar se o comando é o que você quer.
 

class MeuComando implements CommandExecutor {

	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		if(command.getName().equalsIgnoreCase("pao")) {
			// executou /pao
			return true;
		}

		if(command.getName().equalsIgnoreCase("ovo")) {
			// executou /ovo
			return true;
		}
	}

}

 

Na sua Main você registra 1 comando por padrão, mas pode registrar dois comandos na mesma classe usando

class MinhaMain extends JavaPlugin {
	
	public void onEnable() {
		CommandExecutor executor = new MeuComando();
		getCommand("pao").setExecutor(executor);
		getCommand("ovo").setExecutor(executor);
	}

}

 

Link para o comentário
Compartilhar em outros sites

6 minutos atrás, ********-******** disse:

Boa noite senhorzinho.
Bom, primeiramente sim você pode adicionar vários comandos em um só MÉTODO.

Uma classe que implementa CommandExecutor ou extende Command só suporta um comando.

 Mas nesse comando você pode linkar vários outros, por exempl`o


class MeuComando implements CommandExecutor {

	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		// seu comando.
	}

}


Mas como eu disse vc pode em um método colocar vários comandos, basta verificar se o comando é o que você quer.
 


class MeuComando implements CommandExecutor {

	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		if(command.getName().equalsIgnoreCase("pao")) {
			// executou /pao
			return true;
		}

		if(command.getName().equalsIgnoreCase("ovo")) {
			// executou /ovo
			return true;
		}
	}

}

 

Na sua Main você registra 1 comando por padrão, mas pode registrar dois comandos na mesma classe usando


class MinhaMain extends JavaPlugin {
	
	public void onEnable() {
		CommandExecutor executor = new MeuComando();
		getCommand("pao").setExecutor(executor);
		getCommand("ovo").setExecutor(executor);
	}

}

 

Obrigado, com isto já ajuda bastante.


Só uma pergunta, deste modo também esta certo?
http://prntscr.com/ks70di

Link para o comentário
Compartilhar em outros sites

Agora, pedrinhohss disse:

Obrigado, com isto já ajuda bastante.


Só uma pergunta, deste modo também esta certo?
http://prntscr.com/ks70di

Não.

O primeiro erro que se vê nesse código é o IF vazio.

Um IF deve estar composto de chaves para ser realmente um IF, se não tiver é inutil.

Deve estar assim por exemplo:

if(condicao) {
	// coisas aqui
}

 

O segundo, porém não um erro é que você está colocando um ELSE vázio.

o ELSE só é necessário se houver realmente uma condição contrária ao IF, se não tiver, pode ser descartado.

A terceira é o 
 

if(args.length == 1) {
	if(args[0].equalsIgnoreCase("vampiro")) {

	}
}

Não é necessário verificar se o tamanho dos argumentos é igual a 1 se você já verificou anteriormente se eles não eram 0, né?

Provavelmente na sua IDE quando você usa um comando para analisar o código ela também vai te mostrar isso.

Outra: Tente formatar o código 100% deixe ele alinhado e fácil de entender, provavelmente deve ter na sua IDE uma abinha com uma opção "Reformat Code" ou outro nome, procure e use porque é bem útil.

Link para o comentário
Compartilhar em outros sites

Agora, pedrinhohss disse:
7 minutos atrás, ********-******** disse:

Obrigado, vou arrumar o que esta errado e tentar achar esse Reformat Code

Se já tiver resolvido, marca ai pq os MODS daqui é tudo preguiçoso kekeke

Link para o comentário
Compartilhar em outros sites

Sobre a segunda dúvida...

Citar

Basicamente eu quero que quando fique de dia o jogador que tem uma certa permissão ganha um efeito, daí quando chega a noite ele perde este mesmo efeito e ganha outro.

Não existe um evento que pega o momento que fica de dia/noite, então você vai precisar criar uma tarefa/task que se auto-repete para fazer isso. Ah, é claro, se não estiver se familiarizado com tarefas/tasks em Bukkit, você pode ver sobre isso AQUI(pesquise sobre no youtube também).
Dai, para checar se é dia/noite, você pode pegar o tempo do mundo("world.getTime"). Ele vai estar como "long", então AQUI uma imagem para ajudar.

Agora para pegar "o jogador que tem certa permissão", você vai precisar fazer um "loop" por todos os jogadores naquele mundo e checar se tem com o "hasPermission".

E para os efeitos, com o jogador, você pode apenas usar o  "addPotionEffect".

Exemplo:

public void sendTask(Plugin plugin){
    new BukkitRunnable(){
        World world = Bukkit.getWorld("world");
        Boolean dia = null;
        public void run(){
            if(world.getTime() > 23500 || world.getTime() < 13000){
                if(dia == null || !dia){
                    dia = true;
                    for(Player player : world.getPlayers()){
                        if(player.hasPermission("yup")){
                            player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 100, 1));
                        }
                    }
                }
            }else if(world.getTime() > 13000  && world.getTime() < 23500){
                if(dia == null || dia){
                    dia = false;
                    for(Player player : world.getPlayers()){
                        if(player.hasPermission("yup")){
                            player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 1));
                        }
                    }
                }
            }
        }
    }.runTaskTimer(plugin, 1, 1)
}
Citar

Também gostaria que durante esse período de dia e noite ele troca-se a Skin.

Fazer isso do zero, para um iniciante, é realmente muito complicado y'know. Eu recomendo que você use o plugin chamado "SkinsRestorer" e a sua API que seria apenas fazer "SkinsRestorerAPI.setSkin".

Link para o comentário
Compartilhar em outros sites

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