Pesquisar na Comunidade
Mostrando resultados para as tags ''nms''.
Encontrado 1 registro
-
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.