Ir para conteúdo

[kMF] Qual deve ser o erro? Return?


yemiefi

Posts Recomendados

Bom, parei de programar tem alguns anos... Voltei agora querendo aprender Python entre outras e estou dando uma treinada no raciocínio com o Java/Plugin de Minecraft. Fiz um plugin de /luz, estava dando vários erros então kibei um pouco do System do RUSH, no Eclipse não dá erro, já in-game quando uso o comando aparece no chat o comando, provavelmente é problema com return, mas não sei mexer com esse troço até hoje!!!

Se alguém puder dar uma olhada no código pra me ajudar, ficarei muito grato!

LINK: https://github.com/emiefi/kMFLuz/tree/master/kMFLuzGUI/src/br/com/emiefi/kmfluzgui

Link para o comentário
Compartilhar em outros sites

50 minutos atrás, yemiefi disse:

Bom, parei de programar tem alguns anos... Voltei agora querendo aprender Python entre outras e estou dando uma treinada no raciocínio com o Java/Plugin de Minecraft. Fiz um plugin de /luz, estava dando vários erros então kibei um pouco do System do RUSH, no Eclipse não dá erro, já in-game quando uso o comando aparece no chat o comando, provavelmente é problema com return, mas não sei mexer com esse troço até hoje!!!

Se alguém puder dar uma olhada no código pra me ajudar, ficarei muito grato!

LINK: https://github.com/emiefi/kMFLuz/tree/master/kMFLuzGUI/src/br/com/emiefi/kmfluzgui

Tem que por um returnno segundo e terceiro if

Link para o comentário
Compartilhar em outros sites

2 horas atrás, rubenlousada11 disse:

Tem que por um returnno segundo e terceiro if

@rubenlousada11 tentei e não foi. Continuou no mesmo erro...

EDIT: Os 3 "/stop" que dei, foi 3 tentativas de colocar return em if's diferentes... Sou muito leigo em questão de return, perdão.

image.png

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

public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) {
		if(cmd.getName().equalsIgnoreCase("luz")) {
			if(!s.hasPermission("kmfluzgui.usar")) {
				s.sendMessage("§2* §cVocê não possui permissão para usar este comando!");
                return true;
			}
			
			Player p = (Player) s;
			if(!(p instanceof Player)) {
				s.sendMessage("Você deve estar in-game para executar este comando!");
                return true;
			}

			if(p.hasPotionEffect(PotionEffectType.NIGHT_VISION)){
				p.removePotionEffect(PotionEffectType.NIGHT_VISION);
				p.sendMessage("§2* §aLuz apagada com êxito.");
			} else {
				p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 50), true);
				p.sendMessage("§2* §aLuz ligada com êxito!");
			}
		}
		return false;
	}

creio que assim funcione

Link para o comentário
Compartilhar em outros sites

34 minutos atrás, Álison? disse:

public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) {
		if(cmd.getName().equalsIgnoreCase("luz")) {
			if(!s.hasPermission("kmfluzgui.usar")) {
				s.sendMessage("§2* §cVocê não possui permissão para usar este comando!");
                return true;
			}
			
			Player p = (Player) s;
			if(!(p instanceof Player)) {
				s.sendMessage("Você deve estar in-game para executar este comando!");
                return true;
			}

			if(p.hasPotionEffect(PotionEffectType.NIGHT_VISION)){
				p.removePotionEffect(PotionEffectType.NIGHT_VISION);
				p.sendMessage("§2* §aLuz apagada com êxito.");
			} else {
				p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 50), true);
				p.sendMessage("§2* §aLuz ligada com êxito!");
			}
		}
		return false;
	}

creio que assim funcione

p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, 10000, 50), true);

Se não me engano é assim

Link para o comentário
Compartilhar em outros sites

@Override
	public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) {
		if(cmd.getName().equalsIgnoreCase("luz")) {
			if(!s.hasPermission("kmfluzgui.usar")) {
				s.sendMessage("§2* §cVocê não possui permissão para usar este comando!");
                return true;
			}
			
			if(!(s instanceof Player)) {
				s.sendMessage("Você deve estar in-game para executar este comando!");
                return true;
			}

			Player p = (Player) s;
          
			if(p.hasPotionEffect(PotionEffectType.NIGHT_VISION)){
				p.removePotionEffect(PotionEffectType.NIGHT_VISION);
				p.sendMessage("§2* §aLuz apagada com êxito.");
			}else {
				p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 50), true);
				p.sendMessage("§2* §aLuz ligada com êxito!");
			}
		}
		return false;
	}

Este é o código

Outra coisa, checa se o CommandSender é uma instância de jogador antes de atribuir o cast Player para uma variável

Link para o comentário
Compartilhar em outros sites

8 horas atrás, Álison? disse:

public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) {
		if(cmd.getName().equalsIgnoreCase("luz")) {
			if(!s.hasPermission("kmfluzgui.usar")) {
				s.sendMessage("§2* §cVocê não possui permissão para usar este comando!");
                return true;
			}
			
			Player p = (Player) s;
			if(!(p instanceof Player)) {
				s.sendMessage("Você deve estar in-game para executar este comando!");
                return true;
			}

			if(p.hasPotionEffect(PotionEffectType.NIGHT_VISION)){
				p.removePotionEffect(PotionEffectType.NIGHT_VISION);
				p.sendMessage("§2* §aLuz apagada com êxito.");
			} else {
				p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 50), true);
				p.sendMessage("§2* §aLuz ligada com êxito!");
			}
		}
		return false;
	}

creio que assim funcione

Pior que não funcionou, continuou com o mesmo problema...

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Ygor disse:

@Override
	public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) {
		if(cmd.getName().equalsIgnoreCase("luz")) {
			if(!s.hasPermission("kmfluzgui.usar")) {
				s.sendMessage("§2* §cVocê não possui permissão para usar este comando!");
                return true;
			}
			
			if(!(s instanceof Player)) {
				s.sendMessage("Você deve estar in-game para executar este comando!");
                return true;
			}

			Player p = (Player) s;
          
			if(p.hasPotionEffect(PotionEffectType.NIGHT_VISION)){
				p.removePotionEffect(PotionEffectType.NIGHT_VISION);
				p.sendMessage("§2* §aLuz apagada com êxito.");
			}else {
				p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 50), true);
				p.sendMessage("§2* §aLuz ligada com êxito!");
			}
		}
		return false;
	}

Este é o código

Outra coisa, checa se o CommandSender é uma instância de jogador antes de atribuir o cast Player para uma variável

Valeu pela dica, irei usá-la a partir de agora. E essa seria a solução pro meu problema? 

 

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

9 horas atrás, GuiguiloDeadly disse:

p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, 10000, 50), true);

Se não me engano é assim

Valeu! Agora só falta solucionar o erro de retorno '-'

Link para o comentário
Compartilhar em outros sites

Tentarei dar uma explicada sobre os retornos. Basicamente, quando entra no onCommand, o sistema do bukkit fica esperando você retornar se o jogador colocou o comando corretamente ou não. Sendo assim, quando você da "return false" significa que o jogador não colocou o comando corretamente, então o bukkit envia a mensagem configurada em "usage" no seu plugin.yml, como se ele dissesse "ei, você não fez direito, usa o comando dessa maneira aqui:". Ja quando da um return true, é entendido pelo bukkit que o player usou corretamente, finalizando as aplicações, uma vez que ja foi executado de maneira correta.

No seu codigo, quando você remove ou adiciona os efeitos (o ultimo if/else) você tem que dar return true, para o servidor entender que funcionou, caso contrario ele cairá no ultimo return false, e pois isso manda o usage ("/luz")

 

Codigo:

			if(p.hasPotionEffect(PotionEffectType.NIGHT_VISION)){
				p.removePotionEffect(PotionEffectType.NIGHT_VISION);
				p.sendMessage("§2* §aLuz apagada com êxito.");
                return true;
			}else {
				p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 50), true);
				p.sendMessage("§2* §aLuz ligada com êxito!");
                return true;
			}

 

Editado por RafaCarvalho
Usei citar ao invés de codigo
Link para o comentário
Compartilhar em outros sites

 

11 horas atrás, yemiefi disse:

@rubenlousada11 tentei e não foi. Continuou no mesmo erro...

EDIT: Os 3 "/stop" que dei, foi 3 tentativas de colocar return em if's diferentes... Sou muito leigo em questão de return, perdão.

image.png

se tu executar outro comando, ele também aparece no chat?

Link para o comentário
Compartilhar em outros sites

vc não registrou o comando na main (https://github.com/emiefi/kMFLuz/blob/master/kMFLuzGUI/src/br/com/emiefi/kmfluzgui/main.java)

 

	public void onEnable() {
        this.getCommand("luz").setExecutor(new command());

		ConsoleCommandSender b = Bukkit.getConsoleSender();
		b.sendMessage("§a[kMFLuzGUI] Plugin ativado com êxito!");
		b.sendMessage("§a[kMFLuzGUI] Criado por yemiefi §fGamersBoard§a!");
	}

 

Link para o comentário
Compartilhar em outros sites

Em 18/07/2020 em 06:16, yemiefi disse:

Bom, parei de programar tem alguns anos... Voltei agora querendo aprender Python entre outras e estou dando uma treinada no raciocínio com o Java/Plugin de Minecraft. Fiz um plugin de /luz, estava dando vários erros então kibei um pouco do System do RUSH, no Eclipse não dá erro, já in-game quando uso o comando aparece no chat o comando, provavelmente é problema com return, mas não sei mexer com esse troço até hoje!!!

Se alguém puder dar uma olhada no código pra me ajudar, ficarei muito grato!

LINK: https://github.com/emiefi/kMFLuz/tree/master/kMFLuzGUI/src/br/com/emiefi/kmfluzgui

No ultimo return, bote return true; em vez de return false;

Creio que assim irá funcionar, e registre o comando na main assim: 

 this.getCommand("luz").setExecutor(new command());

Como o @Naghtrion mandou

Link para o comentário
Compartilhar em outros sites

21 horas atrás, RafaCarvalho disse:

Tentarei dar uma explicada sobre os retornos. Basicamente, quando entra no onCommand, o sistema do bukkit fica esperando você retornar se o jogador colocou o comando corretamente ou não. Sendo assim, quando você da "return false" significa que o jogador não colocou o comando corretamente, então o bukkit envia a mensagem configurada em "usage" no seu plugin.yml, como se ele dissesse "ei, vocêo fez direito, usa o comando dessa maneira aqui:". Ja quando da um return true, é entendido pelo bukkit que o player usou corretamente, finalizando as aplicações, uma vez que ja foi executado de maneira correta.

No seu codigo, quando você remove ou adiciona os efeitos (o ultimo if/else) você tem que dar return true, para o servidor entender que funcionou, caso contrario ele cairá no ultimo return false, e pois isso manda o usage ("/luz")

 

Codigo:


			if(p.hasPotionEffect(PotionEffectType.NIGHT_VISION)){
				p.removePotionEffect(PotionEffectType.NIGHT_VISION);
				p.sendMessage("§2* §aLuz apagada com êxito.");
                return true;
			}else {
				p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 50), true);
				p.sendMessage("§2* §aLuz ligada com êxito!");
                return true;
			}

 

Agora entendi o retorno! Meu Deus, pensei que nunca ia compreender essa parada kkkkk Ajudou muito cara!

 

20 horas atrás, Naghtrion disse:

vc não registrou o comando na main (https://github.com/emiefi/kMFLuz/blob/master/kMFLuzGUI/src/br/com/emiefi/kmfluzgui/main.java)

 


	public void onEnable() {
        this.getCommand("luz").setExecutor(new command());

		ConsoleCommandSender b = Bukkit.getConsoleSender();
		b.sendMessage("§a[kMFLuzGUI] Plugin ativado com êxito!");
		b.sendMessage("§a[kMFLuzGUI] Criado por yemiefi §fGamersBoard§a!");
	}

 

Na real isso foi um teste que eu estava fazendo e acabei não corrigindo na hora de postar o código no Git porque estava sem paciência kkkkkk, mas valeu!

Link para o comentário
Compartilhar em outros sites

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