Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Что надо знать о NMS и как его получить?

Krongss_fur

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Krong
Привет. Мне надо отправлять игроку пакеты(и работать с ними) для этого как я понял надо подключать классы net.minecraft.***, но для этого сказали нужно установить зависимость nms, вот у меня необходимость появилась получить его на maven api. Мне дали его но на 1.17+ но версия другая мне нужна. И так, Вершион - 1.12.2/1.16.5, что я хочу узнать, что Nms, в каких случаях его вообще применять и как его получить. :ninja: Но ещё один моментик, что такое BuildTools, видел что с помощи него как-то получают нмс, и поподробнее про BuildTools тоже прошу.
 
Мне надо отправлять игроку пакеты(и работать с ними) для этого как я понял надо подключать классы net.minecraft.***
Не обязательно. Ты можешь использовать ProtocolLib. И есть даже шанс, что при выходе новой версии ядра твой плагин даже не сломается.

в каких случаях его вообще применять
Желательно ни в каких. Если есть возможность сделать что-либо без НМС, то надо делать это без НМС.
НМС - это последнее решение, если все предыдущие не помогли решить задачу.
Поэтому если ты не знаешь, для чего может быть полезен нмс, то наслаждайся и дальше не используй его.
К нмс прибегают, когда для решения задачи недостаточно функционала баккит апи.

что такое BuildTools, видел что с помощи него как-то получают нмс, и поподробнее про BuildTools тоже прошу.
При помощи BuildTools собирают ядро Spigot. При этом в локальный мавен-репозиторий добавляется зависимость от CraftBukkit, которая как раз содержит в себе NMS.

Ещё один вариант подключения NMS к мавен-проекту - это добавить jar-зависимость от patched.jar, который находится в папке cache сервера.

Но ещё раз повторюсь - если ты не знаешь, зачем тебе нужен NMS, то тебе явно и НЕ следует подключать его к проекту
 
Ну допустим взять такой код, можно ли его отправить вообще через ProtocolLib систему? Вот как полу
тить CraftWorld если это относиться nms, а с ним надо взаимодействовать?
Код:
        WorldServer s = ((CraftWorld)p.getWorld()).getHandle();
        EntityArmorStand stand = new EntityArmorStand(s);

        stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0);
        stand.setCustomName(name);
        stand.setCustomNameVisible(true);
        stand.setGravity(true);
        stand.setSmall(true);
        stand.setInvisible(true);


        PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand);
        ((CraftPlayer)p).getHandle().playerConnection.sendPacket(packet);
 
Ну допустим взять такой код, можно ли его отправить вообще через ProtocolLib систему? Вот как полу
тить CraftWorld если это относиться nms, а с ним надо взаимодействовать?
Код:
        WorldServer s = ((CraftWorld)p.getWorld()).getHandle();
        EntityArmorStand stand = new EntityArmorStand(s);

        stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0);
        stand.setCustomName(name);
        stand.setCustomNameVisible(true);
        stand.setGravity(true);
        stand.setSmall(true);
        stand.setInvisible(true);


        PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand);
        ((CraftPlayer)p).getHandle().playerConnection.sendPacket(packet);

Ась? А org.bukkit.world.spawnEntity уже не в моде чтоль? Или я не совсем понял что делает этот код...
 
Ну допустим взять такой код, можно ли его отправить вообще через ProtocolLib систему? Вот как полу
тить CraftWorld если это относиться nms, а с ним надо взаимодействовать?
Код:
        WorldServer s = ((CraftWorld)p.getWorld()).getHandle();
        EntityArmorStand stand = new EntityArmorStand(s);

        stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0);
        stand.setCustomName(name);
        stand.setCustomNameVisible(true);
        stand.setGravity(true);
        stand.setSmall(true);
        stand.setInvisible(true);


        PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand);
        ((CraftPlayer)p).getHandle().playerConnection.sendPacket(packet);
Зачем ты спаунишь стойку таким образом? Для этого есть баккит апи
 
А чем вообще плох такой способ?
Минусы у NMS и CraftBukkit следующие:

1) Отсутствие какой-либо документации (требуется значительно больше времени на реализацию). Сюда же отнесу обфускацию

2) Крайне малое количество людей захотят и смогут оказать тебе помощь с NMS на форумах

3) Твой плагин абсолютно точно сломается после выхода новой версии ядра. Теоретически можно использовать рефлексию, но и она не даёт гарантию стабильной работы, а вот на производительность влияет сильно
 
Последнее редактирование:
Минусы у NMS и CraftBukkit следующие:

1) Отсутствие какой-либо документации (требуется значительно больше времени на реализацию). Сюда же отнесу обфускацию

2) Крайне малое количество людей захотят и смогут оказать тебе помощь с NMS на форумах

3) Твой плагин абсолютно точно сломается после выхода новой версии ядра. Теоретически можно использовать рефлексию, но и она не даёт гарантию стабильной работы, а вот на производительность влияет сильно
Спасибо за рассказ, буду полностью знать.
 

Поделиться этой страницей

Назад
Верх