Свой сервер

Своё измерение

Добавьте в игру новый мир рядом с обычным, Незером и Эндом: рельеф, свет, небо, высота, кровати и якорь — на выбор. Получите датапак с командой входа и /trigger для игроков без прав оператора.

Имя и основа

«пространство:имя» строчными латинскими буквами — так его зовут команды.

Основа — ванильный мир, чьи правила берутся за образец: туман, музыка, лава и вода, мобы. Всё ниже меняет его копию.

Земля

Свойства мира

Результат

custom:dream
Высота
от Y -64 до Y 319
Небо
обычное
Свет без факелов
нет
Потолок
нет
Масштаб
1 : 1
Кровать
можно спать
Якорь возрождения
взрывается

Войти — команда оператора

/function custom:dream/go

Игрокам без прав — туда и назад

/trigger custom.dream
/trigger custom.dream set 2
Скачать датапак
Что внутри архива — 9 файлов

data/minecraft/tags/function/load.json

Тег load: игра зовёт эти функции при загрузке мира и после /reload.

{
  "values": [
    "custom:dream/load"
  ]
}

data/minecraft/tags/function/tick.json

Тег tick: эти функции идут каждый тик — 20 раз в секунду.

{
  "values": [
    "custom:dream/tick"
  ]
}

data/custom/dimension_type/dream.json

Свойства мира: высота, свет, небо, потолок, масштаб, кровать и якорь.

{
  "ambient_light": 0.0,
  "attributes": {
    "minecraft:audio/ambient_sounds": {
      "mood": {
        "block_search_extent": 8,
        "offset": 2.0,
        "sound": "minecraft:ambient.cave",
        "tick_delay": 6000
      }
    },
    "minecraft:audio/background_music": {
      "creative": {
        "max_delay": 24000,
        "min_delay": 12000,
        "sound": "minecraft:music.creative"
      },
      "default": {
        "max_delay": 24000,
        "min_delay": 12000,
        "sound": "minecraft:music.game"
      }
    },
    "minecraft:gameplay/bed_rule": {
      "can_set_spawn": "always",
      "can_sleep": "when_dark",
      "error_message": {
        "translate": "block.minecraft.bed.no_sleep"
      }
    },
    "minecraft:gameplay/nether_portal_spawns_piglin": true,
    "minecraft:gameplay/respawn_anchor_works": false,
    "minecraft:gameplay/straw_bed_rule": {
      "can_set_spawn": "never",
      "can_sleep": "when_dark",
      "destroy_on_leave": true,
      "error_message": {
        "translate": "block.minecraft.bed.no_sleep"
      }
    },
    "minecraft:visual/ambient_light_color": "#0a0a0a",
    "minecraft:visual/cloud_color": "#ccffffff",
    "minecraft:visual/cloud_height": 192.33,
    "minecraft:visual/fog_color": "#c0d8ff",
    "minecraft:visual/sky_color": "#78a7ff"
  },
  "coordinate_scale": 1.0,
  "default_clock": "minecraft:overworld",
  "has_ceiling": false,
  "has_ender_dragon_fight": false,
  "has_skylight": true,
  "height": 384,
  "infiniburn": "#minecraft:infiniburn_overworld",
  "logical_height": 384,
  "min_y": -64,
  "monster_spawn_block_light_limit": 0,
  "monster_spawn_light_level": {
    "type": "minecraft:uniform",
    "max_inclusive": 7,
    "min_inclusive": 0
  },
  "timelines": "#minecraft:in_overworld"
}

data/custom/dimension/dream.json

Сам мир: какой у него тип и как строится земля.

{
  "type": "custom:dream",
  "generator": {
    "type": "minecraft:noise",
    "biome_source": {
      "type": "minecraft:multi_noise",
      "preset": "minecraft:overworld"
    },
    "settings": "minecraft:overworld"
  }
}

data/custom/function/dream/load.mcfunction

При загрузке: счёт /trigger и память, откуда ушли.

scoreboard objectives add custom.dream trigger
scoreboard objectives add custom.dream.x dummy
scoreboard objectives add custom.dream.y dummy
scoreboard objectives add custom.dream.z dummy

data/custom/function/dream/go.mcfunction

В измерение. Из обычного мира запоминает, откуда ушли.

execute in minecraft:overworld if entity @s[distance=0..] store result score @s custom.dream.x run data get entity @s Pos[0]
execute in minecraft:overworld if entity @s[distance=0..] store result score @s custom.dream.y run data get entity @s Pos[1]
execute in minecraft:overworld if entity @s[distance=0..] store result score @s custom.dream.z run data get entity @s Pos[2]
execute in custom:dream run spreadplayers 0 0 1 16 false @s

data/custom/function/dream/back.mcfunction

Назад в обычный мир — на место, откуда ушли.

execute unless score @s custom.dream.y matches -2147483648.. run return run tellraw @s {"text":"Вы ещё не уходили из обычного мира — возвращаться некуда.","color":"red"}
execute store result storage custom:dream_back x int 1 run scoreboard players get @s custom.dream.x
execute store result storage custom:dream_back y int 1 run scoreboard players get @s custom.dream.y
execute store result storage custom:dream_back z int 1 run scoreboard players get @s custom.dream.z
function custom:dream/back_to with storage custom:dream_back

data/custom/function/dream/back_to.mcfunction

Перенос по запомненным координатам (макрос) — на середину блока.

$execute in minecraft:overworld run tp @s $(x) $(y) $(z)
execute at @s run tp @s ~0.5 ~ ~0.5

data/custom/function/dream/tick.mcfunction

Каждый тик: /trigger custom.dream — туда, /trigger custom.dream set 2 — назад.

execute as @a[scores={custom.dream=1}] run function custom:dream/go
execute as @a[scores={custom.dream=2}] run function custom:dream/back
scoreboard players set @a[scores={custom.dream=1..}] custom.dream 0
scoreboard players enable @a custom.dream

Как применить

  1. Сервер

    Положите zip в папку world/datapacks и перезапустите сервер: новое измерение появляется при запуске, /reload его не добавит. Мир пересоздавать не нужно.

  2. Одиночная игра

    Новый мир: «Создать новый мир» → «Прочее» → «Наборы данных» → перетащите zip. Готовый мир: положите zip в saves/<мир>/datapacks и откройте мир заново.

  3. Войдите

    Оператор — /function custom:dream/go, игроки — /trigger custom.dream; назад — /trigger custom.dream set 2, на место, откуда ушли.

Что нужно знать

  • Проверено сервером. Пак загружали выделенные серверы 26.3 и 1.21.11: мир той высоты, что выбрана, вход и возврат работают. На 26.3 игрок входил через /trigger, а кровать, якорь и портал вели себя так, как выбрано.
  • Запись у версий разная. В 1.21.11 кровать Незера взрывается полем explodes, в 26.3 — destroy_on_use, и у 26.3 обязательны поля, которых нет в 1.21.11. Поэтому версия выбирается, а за основу берётся файл игры этой версии.
  • Портал Незера из своего измерения ведёт в Незер, а координаты делятся по масштабу: при 1 : 8, как у Незера, — один к одному. Обратно портал Незера ведёт в обычный мир.
  • Высота меньше рельефа срезает горы и пещеры, а руды вне высоты пропускаются — сервер предупредит об этом в журнале строкой Empty height range. Это не ошибка.
  • Дракона нет. С основой «Энд» острова будут, а бой с драконом — только в настоящем Энде.

Чем отличаются обычный мир, Незер и Энд — в вики «Измерения». Переделать сам обычный мир под один биом — «Мир одного биома», поправить файлы мира вручную — редактор NBT.

Частые вопросы

Как добавить своё измерение в Майнкрафт?

Датапаком: в нём тип измерения и сам мир. Положите архив в папку world/datapacks и перезапустите сервер — измерение появится и в уже созданном мире.

Как попасть в своё измерение?

Командой /function пространство:имя/go — она переносит туда через execute in. Игрокам без прав оператора — /trigger пространство.имя, назад — /trigger пространство.имя set 2.

Почему измерение не появилось?

Новое измерение игра добавляет при запуске: после того как положили пак, перезапустите сервер или откройте мир заново — /reload его не добавит. Версия пака должна совпадать с версией игры.