Перейти к основному содержанию

Infinite Depth

Infinite Depth — это мод-библиотека, позволяющая контролировать высоту измерений, используя любые значения от 0 до 512 блоков. Сдвигайте нижнюю границу координат между -2048 и 2048 блоками, а также изменяйте границы других измерений через API или конфиг мода. Последняя актуальная версия библиотеки доступна к загрузке в браузере модов.

Изменение высоты измерений​

С помощью мода-библиотеки можно с легкостью устанавливать и менять высоту любого как ванильного, так и кастомного измерения. Важно лишь, чтобы у других игроков сейчас не было загружено нужное измерение, иначе его высота для них не поменяется. Для изменения границ достаточно знать лишь идентификатор измерения и желаемую высоту.

Например, изменим высоту верхнего мира для соответствия версиям игры 1.17 и выше:

ModAPI.addAPICallback("InfiniteDepth", function(InfiniteDepth) {
// установить абсолютные границы измерения по числовому идентификатору
InfiniteDepth.setDimensionHeightRange(EDimension.OVERWORLD, -64, 320);
// установить нижнюю границу строительства и общую высоту измерения
InfiniteDepth.setDimensionBounds("overworld", -64, 384);
});

Теперь, верхний мир имеет границы от -64 до 320 блоков строительства, то есть 384 высоты. Вызов методов эквивалентен друг другу, используйте удобный вариант именно для вашего случая. Бывает полезным получить нижнюю границу измерения, сделать это можно с помощью InfiniteDepth.getDimensionMinY(dimensionId). Обратитесь к декларации для получения подробностей.

Множественные описания​

Чтобы еще удобнее переопределять границы измерений, можно указать их сразу цельным объектом или воспользоваться конфигом для того чтобы позволить игроку самому определить высоты измерений.

Например, переопределим границы верхнего и нижнего миров для соответствия новым версиям:

ModAPI.addAPICallback("InfiniteDepth", function(InfiniteDepth) {
InfiniteDepth.fromJson({
// изменим высоту верхнего мира на 1.17+ версии
overworld: {
// нижняя абсолютная границы строительства, по умолчанию 0
min: -64,
// верхняя абсолютная граница строительства
max: 320
},
// добавим возможность строить над потолком нижнего мира
nether: {
// нижняя граница, по умолчанию установится 0
// onset: 0,
// определяем высоту относительно нижней границы
height: 256
}
});
// также, можно сделать тоже самое через абсолютные границы в массиве
InfiniteDepth.fromJson({
overworld: [-64, 320],
nether: [0, 256]
});
});

Опять же, вызов методов эквивалентен друг другу. Совмещайте и используйте различный синтаксис как угодно, числовые идентификаторы можно указать при использовании тулчлейна для сборки: [EDimension.OVERWORLD]: [-64, 320]. Воспользуйтесь удобным для себя вариантом.

Настройка через конфиг​

Библиотека также предоставляет возможность указать настройки сразу из конфига, так дополнительные преобразования не потребуются. Конфиг имеет тот же синтаксис, что и множественные описания, но не позволяет использовать массивы для указания границ, поскольку они не поддерживаются конфигом.

Например, создадим такого вида свойство в конфиге (config.json):

{
"enabled": true,
"heights": {
"overworld": {
"onset": 0,
"height": 256
},
"nether": {
"onset": 0,
"height": 256
},
"end": {
"onset": 0,
"height": 256
}
}
}

Его крайне просто загрузить, для этого воспользуемся методом:

ModAPI.addAPICallback("InfiniteDepth", function(InfiniteDepth) {
InfiniteDepth.fromConfig(__config__.get("heights"));
});

Метод конфига get при получении объекта возвращает подконфиг для работы с ним, можно вместо получения свойства сразу же передать основной конфиг мода. Но делать подобное не рекомендуется, поскольку конфиг может содержать и другие объекты, которые также будут влиять на высоту измерений. Лучше определить отдельный объект со свойствами измерений.

Ну и конечно, добавим визуальное отображение нашему конфигу (config.info.json), это поможет пользователю понять что к чему:

{
"properties": {
"heights.overworld": {
"name": {
"en": "Overworld",
"ru": "Верхний мир"
}
},
"heights.overworld.onset": {
"name": {
"en": "Onset",
"ru": "Начальная координата"
},
"description": {
"en": "Minimum world level at which bedrock will be located. Negative values may cause minor world rendering issues, but they do not affect gameplay. Accepts values between -2048 and 2048.",
"ru": "Минимальный уровень мира, на котором будет находиться коренная порода. Отрицательные значения могут вызывать незначительные проблемы с отображением мира, не влияющие на геймплей. Принимает значения между -2048 и 2048."
}
},
"heights.overworld.height": {
"name": {
"en": "Height",
"ru": "Высота мира"
},
"description": {
"en": "Height limit that is relative to starting coordinate. For example, if starting coordinate is -64 and world height is 384, then maximum building level will be 320.",
"ru": "Верхняя граница, относительно начальной координаты. Например, если начальная координата -64, а высота мира 384, то максимальный уровень строительства будет равен 320."
},
"type": "SeekBar",
"min": 0,
"max": 512
},
"heights.overworld.min": {
"name": {
"en": "Min Y",
"ru": "Нижний уровень"
},
"description": {
"en": "Minimum world coordinate that cannot be greater than upper level. Accepts values between -2048 and 2048.",
"ru": "Минимальная координата мира, не может быть больше верхнего уровня. Принимает значения между -2048 и 2048."
}
},
"heights.overworld.max": {
"name": {
"en": "Max Y",
"ru": "Верхний уровень"
},
"description": {
"en": "Maximum world coordinate that cannot be less than lower level. Accepts values between -2048 and 2048.",
"ru": "Максимальная координата мира, не может быть меньше нижнего уровня. Принимает значения между -2048 и 2048."
}
}
}
}

Просто воспользуйтесь шаблоном этого описания и продублируйте его для нужных измерений в конфиге, это поможет понять игрокам как настраивать опции в конфиге.