| Всё подряд |
О жизни |
Фотозаметки |
Техническое |
|
Регистрация | Забыл пароль? |
Удивительные костыли оказывается есть в Minecraft-2 |
Категория: О жизни | (6 февраля 2020) |
Beta 1.7.3 (та самая из 2011), перепиливаю под себя. Пытаюсь изменить крафт табличек, чтоб на выходе получалось в стаке 12 табличек, вместо 1. Изменяю, компилю, игра падает с ошибкой "Max stack size must be 1 for items with crafting results". Быстренько смотрю код, нахожу такой: public Item setContainerItem(Item item) Выпиливаю проверку, меняю setMaxStackSize(1) на .setMaxStackSize(64), получаю падение игры. Лезу дальше. 5 минут - выясняю что при создании предмета - его количество игра пишет не в переменную типа int, а в boolean. Т.е. true/false вместо целого числа =) А вот для блоков использовалось int, и всё норм. Фикшу баг, проверяю крафт, хранение в инвертаре, и сундуке - всё норм. Кстати, Нотч всё же пофиксил это в более старых версиях, но это было уже в 2012 году. |
Просмотров: 990 | Читать далее |
Доработка Minecraft beta 1.7.3 |
Категория: О жизни | (6 февраля 2020) |
Давно уже сюда не писал. Итак, есть сырцы Minecraft beta 1.7.3, которые я тут дорабатываю ради поддержки ретро-сервера. Недавно столкнулся с проблемой - техническое ограничение Minecraft в 256 существующих блоков. Чекнул документацию - Region file format (mcregion) поддерживает ID до 4069 блоков. В исходном коде игры ID для предметов и блоков задаётся жёстко, выделены 2 зоны: Item.itemsList[pistonStickyBase.blockID] = new ItemPiston(pistonStickyBase.blockID - 256); protected Item(int i) Т.е., создаётся 2 списка, блоки - 0-255, предметы - 256+. Меняем значение на 2048 для создания новой "зоны" предметов - получаем аццкие тормоза на стороне клиента, хотя клиент работает - блок с ID 1000 создаётся. Оказывается, клиент майна загружает все ID в память, т.е. если раннее он загружал 0-255, то сейчас - 0-2074. Уменьшил размер до 1024 - падение производительности на 20% вместо 50%. Сервер при этом не падает - разработчики Bukkit уже предусмотрели такой сценарий, и сервер грузит в память только те блоки, ID которых не пуст. Сойдёт. Ок, загружаем старый мир, открываем любой сундук, наш клиент крашится, так как карта ему отдала вместо ID 1280 - 256. Конечно же, клиент не знает о таком ID и успешно падает. Думал уж костыли пилить, но нет - нашлась утилита NBTEditor. Заменяем в сундуках и инвентаре игроков все ID 256+ на 1280+, и наш клиент работает стабильно. Не знаю, почему моджанги столь долго ограничивались 256 блоками, это было пофикшено совсем недавно введением буквенных ID. Возможно, дело в памяти - однако можно подсмотреть систему загрузки пустых ID у Bukkit'a и реализовать в клиенте. |
Просмотров: 1070 | Читать далее |
Разные хренюшки |
|
|
Основано Lionovsky в 2009-2010 году |