Помогите Изучение NMS

Energy warrior

Активный участник
Пользователь
Баллы
76
Недавно захотел изучить NMS, но я не знаю как работает майнкрафт. Есть ли какие-то статьи на тему NMS и работе майнкрафт? В интернете поискал, но нашёл только старые статьи!
 
NMS - это вся серверная сторона Minecraft. Естественно, что по всему NMS гайдов нет, только по отдельным темам. Что конкретно тебя интересует?
 
Нет и не будет доков по NMS. Там все под обфой прогуарда.
Так никто и не говорит про доки. Я видел вполне неплохие гайды по каким-то аспектам NMS. Другой вопрос, конечно, что часть из них уже устарела, но это неважно. Самое главное. что люди пишут о том, что их волнует. Вот нету в бакките какой-то фичи - поехали сразу на NMS костылить. А что делать-то?..
 
NMS - это вся серверная сторона Minecraft. Естественно, что по всему NMS гайдов нет, только по отдельным темам. Что конкретно тебя интересует?
Недавно увидел плагин EntityTrackerFixer решил разобраться как он работает+хотел-бы наконец-то сделать StringArrayTag или ListTag для PersistentDataTagType. Долго сидел и не мог понять какую меременную взять и изменить, чтобы там был мой тег.
 
Недавно увидел плагин EntityTrackerFixer решил разобраться как он работает+хотел-бы наконец-то сделать StringArrayTag или ListTag для PersistentDataTagType. Долго сидел и не мог понять какую меременную взять и изменить, чтобы там был мой тег.
Это и без nms проворачивается. В байтах можно хранить все что душе угодно.
Код:
public class ItemTagTypeArray implements PersistentDataType<byte[], String[]> {

    @Override
    public Class<byte[]> getPrimitiveType() {
        return byte[].class;
    }

    @Override
    public Class<String[]> getComplexType() {
        return String[].class;
    }

    @Override
    public byte[] toPrimitive(String[] strings, PersistentDataAdapterContext tag) {
        ByteBuf buf = Unpooled.buffer();
        PacketBuffer pbuf = new PacketBuffer(buf);
        pbuf.writeVarInt(strings.length);
        for (String string : strings) {
            pbuf.writeString(string);
        }
        byte[] bytes = new byte[buf.readableBytes()];
        buf.readBytes(bytes);
        return bytes;
    }

    @Override
    public String[] fromPrimitive(byte[] bytes, PersistentDataAdapterContext tag) {
        ByteBuf buf = Unpooled.buffer();
        PacketBuffer pbuf = new PacketBuffer(buf);
        pbuf.writeBytes(bytes);
        int length = pbuf.readVarInt();
        List<String> tmp = new ArrayList<String>();
        for (int i = 0; i < length; i++) {
            tmp.add(pbuf.readString(256));
        }
        return tmp.toArray(new String[] {});
    }
}
 
Так это и я могу сделать. Ванила-то могёт стринг массивы делать! И среди NBTBase есть NBTTagList!
Но в адаптерах, невероятным образом листов нету!
 
Я до сих пор не понимаю каким образом удалось уменьшить время трекинга сущностей, почему их трекают, почему из-за этого лагает?
И почему тпс засовывают в массив из 3 даблов?
 
Так это и я могу сделать. Ванила-то могёт стринг массивы делать! И среди NBTBase есть NBTTagList!
Но в адаптерах, невероятным образом листов нету!
Они нужны там околоникогда, может по этому. Да и это не безопасно, накидают 9000 таглистов.
 
Я до сих пор не понимаю каким образом удалось уменьшить время трекинга сущностей, почему их трекают, почему из-за этого лагает?
И почему тпс засовывают в массив из 3 даблов?
А почитать нет? Там чел расписал как и почему. Там чел ясно и понятно расписал, поймет даже ребенок.
 
Они нужны там околоникогда, может по этому. Да и это не безопасно, накидают 9000 таглистов.
Массивы строк навскидку -- это рецепты в книге, описание предметов, тэги scoreboard'ов, страницы в книгах, ещё что-нибудь может быть. Да в принципе можно накидать 9000+ чего угодно, что будет не безопасно.
Мне тоже разъяснения нужны. Высокоуровневый язык, java, поддерживает массивы строк, есть возможность их хранить в надлежащем виде, для чего спускаться до упаковки в байты? Я прекрасно понимаю для чего это делается при передаче данных и в железе, но не понимаю для чего это делать здесь?
 
Я до сих пор не понимаю каким образом удалось уменьшить время трекинга сущностей, почему их трекают, почему из-за этого лагает?
И почему тпс засовывают в массив из 3 даблов?
Tps из 3 даблов - средний тпс за 5, 10 и 15 минут.
 
Массивы строк навскидку -- это рецепты в книге, описание предметов, тэги scoreboard'ов, страницы в книгах, ещё что-нибудь может быть. Да в принципе можно накидать 9000+ чего угодно, что будет не безопасно.
Мне тоже разъяснения нужны. Высокоуровневый язык, java, поддерживает массивы строк, есть возможность их хранить в надлежащем виде, для чего спускаться до упаковки в байты? Я прекрасно понимаю для чего это делается при передаче данных и в железе, но не понимаю для чего это делать здесь?
Там это и не нужно. Этот тег юзается от силы для подписи своего кастомного стака.
Про книги ты правильно сказал, их и используют для експлоита креативщики.
Думаю по этому тег контейер максимально безопасный, чтоб снять свой тег со стака и не улететь в краш из за ипанутого креативщика. Ибо распаковка километрового теглиста это плачевно для сервера. И nbt не дает чекнуть длину листа пока все не распакуешь.
P.s А теперь маленький бонус, nbt и есть твой упаковщик в байты.
 
Последнее редактирование:
Там это и не нужно. Этот тег юзается от силы для подписи своего кастомного стака.
Про книги ты правильно сказал, их и используют для експлоита креативщики.
Думаю по этому тег контейер максимально безопасный, чтоб снять свой тег со стака и не улететь в краш из за ипанутого креативщика. Ибо распаковка километрового теглиста это плачевно для сервера. И nbt не дает чекнуть длину листа пока все не распакуешь.
P.s А теперь маленький бонус, nbt и есть твой упаковщик в байты.
Принципиально String тоже упаковывает в байты, а так же любой класс сам упаковывается в байты, так почему же всё не писать в op-кодах сразу, если результат один и тот же? (Известен мне один печальный кодер плагинов, который именно так и делает)
А ещё для упрощения и рпг-серверов можно делать книги со списками рецептов. Для тех же нужд используются списки разрушаемых предметом блоков и списки блоков, на которые можно устанавливать, всё это в gamemode adventure.
А вообще давать гранату (креатив) всяким недалёким тоже нужно думать. С тем же успехом можно давать сразу доступ к rcon. Опять же есть левые плагины с бэкдорами и т.д. Ещё можно сделать цикл while без выходного условия, который повесит сервер, может и циклы тоже лучше не использовать? Как-то несерьёзно это.
 
Принципиально String тоже упаковывает в байты, а так же любой класс сам упаковывается в байты, так почему же всё не писать в op-кодах сразу, если результат один и тот же? (Известен мне один печальный кодер плагинов, который именно так и делает)
А ещё для упрощения и рпг-серверов можно делать книги со списками рецептов. Для тех же нужд используются списки разрушаемых предметом блоков и списки блоков, на которые можно устанавливать, всё это в gamemode adventure.
А вообще давать гранату (креатив) всяким недалёким тоже нужно думать. С тем же успехом можно давать сразу доступ к rcon. Опять же есть левые плагины с бэкдорами и т.д. Ещё можно сделать цикл while без выходного условия, который повесит сервер, может и циклы тоже лучше не использовать? Как-то несерьёзно это.
Ну да, сервак приносящий 40к в сутки ни разу не серьезно.
 
Назад
Верх