Изменяем регион
Игровой мир состоит из чанков — составляющих региона, в них распологаются блоки и существа, образующие окружение. Количество регионов неограничено, они привязаны к измерению. Специально для связки регионов друг с другом создан источник блоков, для разработчика лишь важно определить с каким измерением он будет взаимодействовать, а обработкой займется специальный обработчик. Рассмотрим возможности окружения, изменения и получения свойств, спавн существ и размещение блоков.
Система координат
Трехмерный игровой мир использует в качестве величин метры, где каждый метр равен одному блоку. Эта система применима к любому объекту игрового окружения, исключая разве что метрики с абсолютной (относительной) системой координат и модели. Измерения в блоках производятся относительно сторон света игрового мира, где существуют ширина (x, на север сзади и юг спереди), долгота (z, на запад слева и восток справа), а также высота (y).
Выбираем источник
Под понятием региона в документации будет рассматриваться именно источник блоков, так как фактически именно он служит доступом к игровому миру. Прежде всего, необходимо понять по какому критерию регион будет использо ваться. Здесь есть несколько вариантов:
-
По измерению (основной для большинства действий)
Эти регионы общие для всего движка и проектов в целом, они кешируются и подходят практически всегда. Любые изменения тут же будут переданы остальным игрокам (клиентам), а также сохранены в самом мире.
BlockSource.getDefaultForDimension(EDimension.NORMAL)
Если измерение неизвестно, можно запросить его для определенного существа.
Callback.addCallback("EntityAdded", function(entity) {
const region = BlockSource.getDefaultForActor(entity);
...
}); -
Для генерации и ее событий
Созданы специально для правки блоков и тайлов во время генерации мира, на этот момент это единственные доступные регионы для использования. Применимы лишь к калбекам генерации и не должны использоваться вне событий генератора. Они неоднократно будут рассмотрены в серии статей о измерениях и струк турах.
BlockSource.getCurrentWorldGenRegion()
-
Клиентские
Клиент со своей стороны не может использовать серверные и любые другие регионы (в них попросту не будет блоков, а их изменение ничем не закончится), так что для получения информации о окружении созданы клиентские регионы. Правки окружения естественно повлияют только на клиента, а вот получение информации вполне актуально.
BlockSource.getCurrentClientRegion()
Как и регионы мира внутри источников блоков, сами источники привязаны к измерению, независимо от того какая критерия используется для их определения. В этой статье мы подробно рассмотрим основной источник, получаемый по измерению.