Ir para conteúdo

Out of Orbit

Membros
  • Total de itens

    65
  • Registro em

  • Última visita

Tudo que Out of Orbit postou

  1. Se eu tiver algum tempo livro eu faço amanhã, semana de provas o tempo voa
  2. Obrigado, acho que o próximo tutorial será sobre reflections, mas não focando em NMS. Será um tutorial a parte, mas que é necessário para seguir o resto do tutorial, já que muitas vezes é preciso acessar atributos privados, etc
  3. @EventHandler public void onJoin(PlayerJoinEvent event) { event.setJoinMessage("§7§lS§7hield§7§lA§7rena ➽ §fSeja bem-vindo §c" + event.getPlayer().getName() + "§fao servidor!"); }
  4. Só adicionar -Dfile.encoding=UTF8, por exemplo @ECHO OFF java -Dfile.encoding=UTF8 -Xms512M -Xmx1024M -jar Spigot.jar PAUSE
  5. Faz assim. Na variável CLASSPATH você coloca isso aqui: ;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\htmlconverter.jar;%JAVA_HOME%\jre\lib;%JAVA_HOME%\jre\lib\rt.jar; E na variável Path você adiciona isso aqui no final: ;%JAVA_HOME%\bin Depois abre o cmd e digita java -version Se exibir a versão instalada, o java está configurado corretamente.
  6. Coloca no PATH também ;%JAVA_HOME%\bin
  7. Você instalou o java corretamente? Configurou a variável JAVA_HOME?
  8. Você pode utilizar o segundo construtor public HelloWorld(List<String> aliases) { super("helloworld", "descricao", "mensagem de uso", aliases); } Ou então usar o método herdado setAliases List<String> aliases = new ArrayList<>(); aliases.add("hellow"); setAliases(aliases);
  9. Programação, plugins e confessionário kk
  10. Você está tentando usar a variável plugin antes de atribuir um valor a ela String host = Main.plugin.getConfig().getString("MYSQL.HOST"); Você tenta chamar esse método na linha 38 plugin = this; E só atribui o valor na linha 46 Para resolver é só iniciar a variável plugin antes de chamar o método mysqlSetup
  11. É sim, esse PlayerCommandPreprocessEvent#getMessage() retorna a mensagem inteira, até com o "/"
  12. Na verdade o correto seria if (e.getMessage().equalsIgnoreCase("/pl")) { // código aqui... }
  13. int x = 5000; if (points >= x) { /* Se a quantidade de pontos for maior ou igual à 5000 Vai fazer o que você quer...*/ }
  14. UUID uuid = ... int points = Main.playePoints.getAPI().look(uuid);
  15. O EventPriority funciona assim: LOWEST - Mais baixa LOW - Baixa NORMAL - Padrão HIGH - Alta HIGHEST - Mais alta MONITOR - Acima de todas Isso significa que um método com prioridade LOWEST sempre será chamado primeiro, depois o LOW e assim por diante. O HIGHEST serve para dar a palavra final, entende? Ele é chamado por último, mas nada que afete a performance. Por exemplo: Um plugin X tem um listener para o evento PlayerJoinEvent. Esse método está com a prioridade normal e altera a mensagem de login para "Alguém entrou". Mas nesse mesmo servidor tem o plugin Y, com prioridade HIGHEST e altera a mensagem para "Fulano logou". Como HIGHEST > NORMAL, a mensagem que será mostrada é "Fulano logou". Já a prioridade MONITOR serve literalmente para monitorar. Você não deve fazer alterações no evento com ele, tais como mudar drops na morte, mudar a mensagem de saída ou até mesmo cancelar o evento. Ele é muito usado em plugins de log, que precisa pegar o "evento final", que foi modificado por outros plugins. Não sei qual a prioridade o PlotMe usa, talvez seja a NORMAL. Então você pode usar a HIGHEST com o ignoreCancelled. Daí o evento será chamado depois do método do PlotMe, e se tiver sido cancelado seu método não será chamado.
  16. Se o ignoreCancelled estiver em true e o evento for cancelado, o método nem é chamado. Por exemplo: @EventHandler(priority = EventPriority.LOWEST) public void onBreak(BlockBreakEvent e) { e.setCancelled(true); } Como este código tem uma prioridade baixa, ele será chamado primeiro. @EventHandler(ignoreCancelled = true) public void onBreak2(BlockBreakEvent e) { System.out.println("Método chamado"); } Esse método acima é chamado depois do método anterior, no entanto o ignoreCancelled está em true. O método anterior cancelou o evento, então ele nem é chamado. public void onBreak3(BlockBreakEvent e) { if (e.isCancelled()) { System.out.println("Evento cancelado"); return; } System.out.println("Evento não cancelado"); } Já o método isCancelled(); retorna se o evento foi cancelado ou não. Então seria melhor utilizar o ignoreCancelled, pois o seu código ficaria menor e evitaria chamada de métodos desnecessários.
  17. NMS é a abreviação do pacote net.minecraft.server. Neste pacote estão as classes responsáveis pelo servidor e pela conexão entre o jogador e o servidor. É possível fazer várias coisas utilizando NMS, como enviar packets para jogadores, criar entidades customizadas, otimização no código, etc. Os packets são classes que contêm dados sobre o que está acontencendo no servidor. É a partir dessas classes que o servidor sabe quando um jogador mata um porco. Mas como você pode mandar seus próprios packets para um jogador? Acessando este link você verá todos os packets disponíveis atualmente. Irei dar um exemplo com o packet PacketPlayOutTitle, que é usado para enviar títulos e subtítulos. // A leitura pode ficar ficar um pouco comprometida com as barras invertidas: // {"text": "Tutorial NMS"} IChatBaseComponent titleText = ChatSerializer.a("{\"text\": \"Tutorial NMS\"}"); // Aqui estamos criando um novo packet, nota-se que esta classe tem vários construtores // Parâmetros: // EnumTitleAction - Tipo de título que será enviado (TITLE, SUBTITLE, etc) // titleText - // 20 - Tempo que o título levará para aparecer (em ticks) // 15 - Tempo que o título ficará na tela (em ticks) // 10 - Tempo que o título levará para sumir completamente (em ticks) PacketPlayOutTitle packet = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleText, 20, 15, 10); Packet criado, mas como enviar ele para o jogador? Nós iremos utilizar o método CraftPlayer#getHandle(); CraftPlayer, é uma classe que implementa Player. Esta classe funciona como um intermediador entre o Bukkit e o EntityPlayer(do NMS). Então o que o método getHandle faz é retornar a classe EntityPlayer, desta maneira podemos acessar diretamente o PlayerConnection(conexão do jogador com o servidor) e enviar o packet: // Transformamos a classe player em EntityPlayer atráves // do método getHandle() EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); // Depois basta acessar o playerConnection e enviar o packet entityPlayer.playerConnection.sendPacket(packet); Apesar do NMS aparentar ser extremamente útil, existe um pequeno problema que o torna um pouco inviável. A compatibilidade. O que isso quer dizer? A cada versão do minecraft, o pacote do NMS é alterado: net.minecraft.server.v1_8_R3 [1.8.8] net.minecraft.server.v1_9_R2 [1.9.4] Existe algumas maneiras de burlar esse problema de incompatibildade, como utilizando reflection ou abstração. Mas eu não irei focar nisso por enquanto, pois não é o objetivo desse tópico em questão. Este tutorial foi apenas para introduzir o NMS para aqueles que não conheciam. Mais para frente eu irei fazer tutoriais mais avançados. Vale lembrar que se você utiliza maven, para ter acesso às classes do NMS e do CraftBukkit você terá que utilizar o BuildTools para trabalhar com as classes em seu repositório local.
  18. Só usar o evento PlayerCommandPreprocessEvent @EventHandler public void onCommand(PlayerCommandPreprocessEvent e) { if (e.getMessage().equalsIgnoreCase("/plot")) { e.setCancelled(true); e.getPlayer().sendMessage("/plot auto"); } }
  19. Pelo o que eu entendi, você já tem um plugin de plots, e quer mudar só a mensagem do comando /plot ?
  20. Tem um tutorial aqui no fórum que ensina, clica aqui.
  21. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if(sender instanceof Player) { Player p = (Player) sender; if(command.getName().equalsIgnoreCase("plot")) { if (args.length == 0) { p.sendMessage(""); p.sendMessage(" §a/plot auto - §fCriar um novo terreno."); p.sendMessage(""); } else { if (args[0].equalsIgnoreCase("auto")) { // Faça algo } } } } return false; }
  22. Out of Orbit

    Flyzinho

    if (p.getAllowFlight()) { p.setAllowFlight(false); p.sendMessage("§4Fly desativado"); } else { p.setAllowFlight(true); p.sendMessage("§aFly Ativado"); }
  23. Não é a mesma coisa. O outro código foi feito com reflection, então funciona com qualquer versão, já esse aí só funciona em 1 versão.
×
×
  • Criar Novo...