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

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."
}
}
}
}

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