- Баллы
- 76
Недавно захотел изучить NMS, но я не знаю как работает майнкрафт. Есть ли какие-то статьи на тему NMS и работе майнкрафт? В интернете поискал, но нашёл только старые статьи!
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Так никто и не говорит про доки. Я видел вполне неплохие гайды по каким-то аспектам NMS. Другой вопрос, конечно, что часть из них уже устарела, но это неважно. Самое главное. что люди пишут о том, что их волнует. Вот нету в бакките какой-то фичи - поехали сразу на NMS костылить. А что делать-то?..Нет и не будет доков по NMS. Там все под обфой прогуарда.
Недавно увидел плагин EntityTrackerFixer решил разобраться как он работает+хотел-бы наконец-то сделать StringArrayTag или ListTag для PersistentDataTagType. Долго сидел и не мог понять какую меременную взять и изменить, чтобы там был мой тег.NMS - это вся серверная сторона Minecraft. Естественно, что по всему NMS гайдов нет, только по отдельным темам. Что конкретно тебя интересует?
Это и без nms проворачивается. В байтах можно хранить все что душе угодно.Недавно увидел плагин EntityTrackerFixer решил разобраться как он работает+хотел-бы наконец-то сделать StringArrayTag или ListTag для PersistentDataTagType. Долго сидел и не мог понять какую меременную взять и изменить, чтобы там был мой тег.
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[] {});
}
}
Они нужны там околоникогда, может по этому. Да и это не безопасно, накидают 9000 таглистов.Так это и я могу сделать. Ванила-то могёт стринг массивы делать! И среди NBTBase есть NBTTagList!
Но в адаптерах, невероятным образом листов нету!
А почитать нет? Там чел расписал как и почему. Там чел ясно и понятно расписал, поймет даже ребенок.Я до сих пор не понимаю каким образом удалось уменьшить время трекинга сущностей, почему их трекают, почему из-за этого лагает?
И почему тпс засовывают в массив из 3 даблов?
Массивы строк навскидку -- это рецепты в книге, описание предметов, тэги scoreboard'ов, страницы в книгах, ещё что-нибудь может быть. Да в принципе можно накидать 9000+ чего угодно, что будет не безопасно.Они нужны там околоникогда, может по этому. Да и это не безопасно, накидают 9000 таглистов.
Tps из 3 даблов - средний тпс за 5, 10 и 15 минут.Я до сих пор не понимаю каким образом удалось уменьшить время трекинга сущностей, почему их трекают, почему из-за этого лагает?
И почему тпс засовывают в массив из 3 даблов?
Там это и не нужно. Этот тег юзается от силы для подписи своего кастомного стака.Массивы строк навскидку -- это рецепты в книге, описание предметов, тэги scoreboard'ов, страницы в книгах, ещё что-нибудь может быть. Да в принципе можно накидать 9000+ чего угодно, что будет не безопасно.
Мне тоже разъяснения нужны. Высокоуровневый язык, java, поддерживает массивы строк, есть возможность их хранить в надлежащем виде, для чего спускаться до упаковки в байты? Я прекрасно понимаю для чего это делается при передаче данных и в железе, но не понимаю для чего это делать здесь?
Принципиально String тоже упаковывает в байты, а так же любой класс сам упаковывается в байты, так почему же всё не писать в op-кодах сразу, если результат один и тот же? (Известен мне один печальный кодер плагинов, который именно так и делает)Там это и не нужно. Этот тег юзается от силы для подписи своего кастомного стака.
Про книги ты правильно сказал, их и используют для експлоита креативщики.
Думаю по этому тег контейер максимально безопасный, чтоб снять свой тег со стака и не улететь в краш из за ипанутого креативщика. Ибо распаковка километрового теглиста это плачевно для сервера. И nbt не дает чекнуть длину листа пока все не распакуешь.
P.s А теперь маленький бонус, nbt и есть твой упаковщик в байты.
Ну да, сервак приносящий 40к в сутки ни разу не серьезно.Принципиально String тоже упаковывает в байты, а так же любой класс сам упаковывается в байты, так почему же всё не писать в op-кодах сразу, если результат один и тот же? (Известен мне один печальный кодер плагинов, который именно так и делает)
А ещё для упрощения и рпг-серверов можно делать книги со списками рецептов. Для тех же нужд используются списки разрушаемых предметом блоков и списки блоков, на которые можно устанавливать, всё это в gamemode adventure.
А вообще давать гранату (креатив) всяким недалёким тоже нужно думать. С тем же успехом можно давать сразу доступ к rcon. Опять же есть левые плагины с бэкдорами и т.д. Ещё можно сделать цикл while без выходного условия, который повесит сервер, может и циклы тоже лучше не использовать? Как-то несерьёзно это.