Ir para conteúdo
  • 0

[Resolvido] [Dúvida/Ajuda] Como resolver?


TequilAxBr

Pergunta

Olá a todos, não sei se é assim que se faz tópico de dúvidas, mas caso não for me avise.

Bom, acho que minha dúvida é simples pra algumas pessoas.

Meu Plugin em desenvolvimento pra eu treinar um pouco mais, (BInivisivel) está funfando porem com um "BUG" ele da o efeito de pot infinitamente, porem ele tira e coloca e queria saber como arrumar esse erro, creio que erro no scheduler.

 

Codigo 

package me.tequilaxbr.bplugin;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitScheduler;

public class Main extends JavaPlugin {
	
	public void onEnable(){
		
		System.out.println("[BInvisivel] Plugin Ativado");
		System.out.println("[BInvisivel] By TequilAxBr");
		saveDefaultConfig();
		ficarInvisivel();
	}
	
	public void onDisable(){
		
		System.out.println("[BInvisivel] Plugin Desativado");
		System.out.println("[BInvisivel] By TequilAxBr");
	}
	
	@SuppressWarnings("deprecation")
	public void ficarInvisivel() {
	}
	@SuppressWarnings("deprecation")
	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		if(!(sender instanceof Player))
		{
			getLogger().info("Utilize o comando in-game.");
		}
		final Player p = (Player)sender;
		if(command.getName().equalsIgnoreCase("invisivel")){
			if(p.hasPermission(getConfig().getString("Permissao"))){
				BukkitScheduler scheduler = getServer().getScheduler();
				scheduler.scheduleAsyncRepeatingTask(this, new Runnable() {
					public void run() {
						p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 10, 30), true);
					}
				}, 0, 20L);
				p.sendMessage(getConfig().getString("MsgInvisivel").replace("&", "§"));
			}else{
				p.sendMessage(getConfig().getString("Sem_Permissao").replace("&", "§"));
			}
		}
		return false;
		
	}

}

Print da Config.yml: http://prntscr.com/80issd

 

Qual quer informação necessaria, só comentar,.

 

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

Coloca a duração da poção como 34987834783434899023784636782 

Não, só aceitaria se fosse váriavel long, e ali só pode double. Então não funciona.

Já testei antes de fazer essa dúvida.

Link para o comentário
Compartilhar em outros sites

Se a inteção do plugin é ficar invisivel, você pode usar uma maneira mais pratica que é usando o p.hidePlayer(p) e caso queira deixa-lo visível use p.showPlayer(p)

Link para o comentário
Compartilhar em outros sites

Se a inteção do plugin é ficar invisivel, você pode usar uma maneira mais pratica que é usando o p.hidePlayer(p) e caso queira deixa-lo visível use p.showPlayer(p)

No lugar do efeito de pot isso, e ai não iria precisar do scheduler?

Link para o comentário
Compartilhar em outros sites

Seguinte cria um metodo para scheduler e coloca dentro do onEnable(); assim

public static void task(Player p)
{
	BukkitScheduler scheduler = getServer().getScheduler();
	scheduler.scheduleAsyncRepeatingTask(this, new Runnable() {
		public void run() {
			p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 10, 30), true);
		}
	}, 0, 20L);
}

no onEnable();

public void onEnable()
{
	task();
}

O Comando assim

	if(command.getName().equalsIgnoreCase("invisivel")){
	if(p.hasPermission(getConfig().getString("Permissao"))){
		task();
		p.sendMessage(getConfig().getString("MsgInvisivel").replace("&", "§"));
	}else{
		p.sendMessage(getConfig().getString("Sem_Permissao").replace("&", "§"));
	}
}

Obs: ou troca 20 por 7L

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

No lugar do efeito de pot isso, e ai não iria precisar do scheduler?

 

Não, além de ser um modo pratico tornaria seu código totalmente mais curto

 

Olhe o exemplo de comando:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
      if(cmd.getName().equalsIgnoreCase("invisivel")) {
           Player p = (Player)sender;
           p.hidePlayer(p);
      }
      if(cmd.getName().equalsIgnoreCase("visivel")) {
           Player p = (Player)sender;
           p.showPlayer(p);
      }
}
Editado por Wheeze
Link para o comentário
Compartilhar em outros sites

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