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;
}