Настраиваемый (англ. Customized) — это тип мира, в котором есть возможность менять ландшафт и функции обычного мира. Этот тип мира был анонсирован Райаном Хольцем на видео, размещенном на канале Mojang на YouTube. [1] [2]

  • 1 Настройки
  • 1.1 Базовые настройки
  • 1.2 Настройки генерации руд
  • 1.3 Дополнительные настройки
  • 1.4 Предустановки

Настройки

Базовые настройки

Есть 19 вариантов настроек, которые влияют на генерацию структур и на остальное окружение.

Настраиваемая опция Параметры По умолчанию Описание
Уровень моря 1-255 63 Высота, на которой находится поверхность океанов, рек и озёр. Если ниже значения по умолчанию, площадь суши больше, а реки мелкие или вовсе осушены. Вся земля ниже уровня 63 становится гравием. Океан может обмельчать до мелких озёр, появиться только в пещерах или не существовать вообще. Если выше значения по умолчанию, биомы с низкой высотой (например, болота) затоплены, или от них остаются только острова. Общая площадь суши уменьшается. Речные долины становятся подводными. При больших значениях мир состоит из редких островов, разделенных обычным и глубоким океаном, или является просто океаном, как в предустановке Водный мир.
Пещеры Да/Нет Да Генерируются только под землей. Если указано «Нет», то пещеры не будут генерироваться.
Крепости Да/Нет Да Генерируются в пределах восьми колец с центром в точке (0, 0). Если указано «Нет», то крепости, как и порталы в Край, не будут генерироваться.
Деревни NPC Да/Нет Да Деревни генерируются только в биомах: равнина, пустыня, саванна, тайга. Если выбран другой биом мира, деревни не появятся, как и их жители (их можно получить, исцелив зомби-жителя. Если указано «Нет», то деревни генерироваться не будут.
Заброшенные шахты Да/Нет Да Если указано «Нет», то заброшенные шахты генерироваться не будут.
Храмы Да/Нет Да Влияет на появление храмов в джунглях и пустынях, хижин ведьм в болотах и иглу в тундре. Если выбран другой биом мира, эти структуры не появятся. Если указано «Нет», то эти постройки не будут генерироваться.
Подводные крепости Да/Нет Да Генерируются в глубоком океане. Изменение уровня моря не влияет на появление. Если указано «Нет», то подводные крепости генерироваться не будут.
Лесные особняки Да/Нет Да Появляются редко в тёмном лесу, вдали от спауна. Если указано «Нет», то особняки генерироваться не будут.
Каньоны Да/Нет Да Генерируются только под землей. Если указано «Нет», то каньоны генерироваться не будут.
Сокровищницы Да/Нет Да Для появления нужны пустоты под землей. Если при попытке генерации подходящих пустот не найдено, сокровищница не появится. Если указано «Нет», то сокровищницы генерироваться не будут.
Число сокровищниц 1-100 50 Число попыток генерации сокровищниц в чанке. Не равно числу появившихся структур, так как не все попытки удачны — нужны пустоты под землёй. Даже при значении 100 сокровищниц будет мало, если таких пустот не хватает.
Водные озёра Да/Нет Да Если указано «Нет», то водные озёра генерироваться не будут.
Редкость водных озёр 1-100 4 Увеличивает/уменьшает редкость генерации водных озёр. Чем меньше значение, тем больше озёр. Влияет не линейно: между 1 и 25 большая разница, между остальными вплоть до 100 едва заметна.
Лавовые озёра Да/Нет Да Не влияет на заполнение пустот лавой на уровне y=10 и ниже. Если указано «Нет», то лавовые озёра генерироваться не будут.
Редкость лавовых озёр 1-100 80 Увеличивает/уменьшает редкость генерации лавовых озёр. Чем меньше значение, тем больше озёр. Влияет не линейно: между 1 и 25 большая разница, между остальными вплоть до 100 едва заметна.
Океаны лавы Да/Нет Нет Если указано «Да», то вместо воды в океанах и реках появится лава.
Биомы Все, Океан, Равнины, Пустыня, Лес, Тайга, Болото, Река, Замороженный океан, Замороженная река, Ледяные равнины, Ледяные горы, Грибной остров, Пляж, Пустынные холмы, Лесные холмы, Холмы тайги, Окраина высоких холмов, Джунгли, Холмы джунглей, Окраина джунглей, Глубокий океан, Каменный пляж, Холодный пляж, Берёзовый лес, Холмы берёзового леса, Тёмный лес, Ледяная тайга, Холмы ледяной тайги, Большая тайга, Горы+ Саванна, Саванна — плато, Столовая гора, Столовая гора — плато Все Какие биомы будут генерироваться в мире. В списке нет редких биомов (Пустыня Г, подсолнечные поля), Нижнего мира и Края. Доступны варианты биомов: пляжи, края и горы.
Размер биомов 1-8 4 Увеличивает/уменьшает размер биомов. Увеличение значения на 1 удваивает размер биомов. Не влияет на генерацию океанов и озёр. От настройки зависит даже однобиомный мир: при больших значениях местность более плоская, гладкая, а при низких — местность неровная, обрывистая, с крутыми холмами.
Размер рек 1-5 4 Увеличивает/уменьшает размер рек. Увеличение значения на 1 удваивает расстояние между реками. Если равно 1, реки пронизывают всю местность, если равно 5, появляются редкие канавы без воды. Если уровень моря намного ниже 63, вместо рек появятся канавы с земляным дном.
Читайте также:  Как прописать силу в Майнкрафт

Я создал ИДЕАЛЬНУЮ ГЕНЕРАЦИЮ в Minecraft / Майнкрафте

ОСНОВЫ WorldPainter. КАК СОЗДАВАТЬ СВОЮ ГЕНЕРАЦИЮ МИРА?

Настройки генерации руд

Следующие параметры изменяют частоту генерации руд и их высоту. Изумрудная руда генерируется по особым правилам, которые нельзя изменить: руда появляется в горных биомах и размер жилы равен 1. На руды Нижнего мира (гравий, песок душ, кварцевую руду, светокамень) повлиять тоже нельзя.

Настраиваемая опция Параметры По умолчанию Описание Земля Гравий Гранит Диорит Андезит Уголь Железо Золото Красный камень Алмаз Лазурит
Размер жилы 1-50 33 33 33 33 33 17 9 9 8 30 7 Максимальное число блоков в одной жиле.
Частота генерации 0-40 10 8 10 10 10 20 20 2 8 15 1 Количество попыток генерации руд в одном чанке.
Минимальная высота 0-255 0 0 0 0 0 0 0 0 0 0 16 [note 1] Минимальная высота генерации руд.
Максимальная высота 0-255 256 [note 2] 256 [note 2] 80 80 80 128 64 32 16 16 16 [note 1] Максимальная высота генерации руд.

Примечания

  1. ↑ 1,01,1 Лазурит генерируется иначе: вместо минимальной и максимальной высоты используется центральная высота и широта распределения. По умолчанию эти значения равны 16, значит, лазурит появится на высоте от 0 до 32, чаще всего на уровне 16.
  2. ↑ 2,02,1 Если слайдер сдвинуть, значение 256 невозможно выставить снова (ошибка). Сбросьте значения или отредактируйте код предустановки.

Дополнительные настройки

Есть 16 вариантов дополнительных настроек, которые влияют на различные аспекты генерации мира. Эти параметры находятся на двух страницах.

  • Значение < 80: горы становятся уже с острыми вершинами в X-направлении. Местность испрещена полосами в Z-направлении.
  • Значение > 80: горы гладкие и широкие в Z-направлении, более компактные и имеют длинные узкие края в X-направлении. Видны полосы земли в X-направлении.
  • Значение < 160: появляются большие неглубокие выступы у оснований гор.
  • Значение > 160: горы более компактные и неровные.
  • Значение < 80: горы рассекаются в X-направлении. Местность испрещена полосами в X-направлении.
  • Значение > 80: горы более узкие в X-направлении и слегка сжаты в Z-направлении. Местность испрещена полосами в Z-направлении.
  • Значение < 200: только минимальные различия.
  • Значение > 200: длинные края в Z-направлении.
  • Значение < 200: только минимальные различия.
  • Значение > 200: длинные края в X-направлении.
  • Значение < 0.5: только минимальные различия.
  • Значение > 0.5: только незначительные различия.
  • Значение < 8.5: высота суши находится ниже уровня моря. Вся территория будет затоплена. Значение «1» соответствует базовой высоте 8, что ниже уровня лавовых озёр (11). Все пещеры затопляются лавой на этом уровне. Реки исчезают. Натуральные структуры генерируются на столбах (деревни NPC) или парят в воздухе (заброшенные шахты). Биомы, в принципе, доступны, но местность будет состоять только из гравия.
  • Значение > 8.5: чем выше значение, тем больше времени необходимо для генерации ландшафта. Максимально доступная высота суши — 200. Горы превышают высоту 200. Реки не достигают моря. Целесообразно регулировать распределение руд при высоких значениях.
  • Значение < 684.412: горы более широкие, вершины и каньоны исчезают, хотя их высота почти не меняется. Расположение гор и долин остаётся прежним.
  • Значение > 684.412: горы и холмы острее и круче с острыми пиками. Горные хребты отсутствуют. Долины покрыты небольшими холмами, практически нет плоских земель.
  • Значение < 684.412: горы более округлые, но менее высокие.
  • Значение > 684.412: горы станут более крутыми, но невысокими.
  • Значение < 12: чем ниже значение, тем больше времени требуется для генерации ландшафта. Меньшие значения приводят к более экстремальным растяжениям, где минимальная высота местности находится выше уровня 250. Появятся гигантские каньоны и пропасти.
  • Значение > 12: все горы и долины плоские.
  • Значение < 512: чем ниже значение, тем больше времени требуется для генерации ландшафта. Высота увеличивается нелинейно. Значения, близкие к минимальным, значительно влияют на построение местности. При минимальных значениях поверхность располагается выше уровня 256. Плоскость становится совершенно ровной.
  • Значение > 512:
Читайте также:  Как пользоваться toolbox для minecraft pe

Источник: minecraft.fandom.com

[Гайд] Настройка генерации плоских миров

[Гайд] Настройка генерации плоских миров

3 . Эта двойка так же как и семерка ,но только это ID блока Земли покрытой травой ,его тоже можно изменить на любой другой блок.

[Гайд] Настройка генерации плоских миров

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

5 . Эта тройка ID блока земли ,так же можно менять.
А теперь перейдем к остальным надписям.

village ,как вы поняли эта надпись добавляет генерацию деревень в ваш мир ,так же вы ее можете убрать и деревени с жителями не будут генерироваться.

Источник: ru-minecraft.ru

Создание генератора мира для minecraft

Думаю, почти все читатели Хабра слышали про майнкрафт, кто-то играл в сингле, кто-то на одном из многочисленных серверов, был даже небольшой сервер у кого-то из хабраюзеров. После двух месяцев игры я задумался — а реально ли написать свой генератор карты? Как оказалось, это вполне возможно сделать за несколько дней неторопливого гугления и кодинга.

Немного технической части
  1. 4096 байт, содержащих оффсеты чанков (так называются блоки 16x16x128) и их размер в блоках по 4кб, округляя вверх, 3 байта оффсет, 1 — размер
  2. 4096 байт timestamp’ов чанков, по 4 байта на каждый
  3. Оставшееся место до конца файла — собственно, данные чанков, сжатые Zlib. 4 байта — размер сжатых данных, 1 — способ сжатия (по умолчанию 2, Zlib (RFC1950)), размер-1 запакованная злибом NBT-структура, т.е сам контейнер кубов
    Если упакованные данные занимают меньше целого числа секторов по 4 кб, то остаток сектора заполняется нулями, т.к каждый чанк должен начинаться с оффсета, выраженного целым числом секторов по 4096 байт
Выбор языка

Реализовать такую структуру можно на любом языке, я остановился Delphi 7. Во-первых, это пока единственный язык, который я знаю, во-вторых, именно на 7 версии года 4 назад я начинал писать блокноты по мануалам из Игромании.

Код

Так как данные хранятся в сжатом виде, нам необходим модуль zlib.
Я использовал ZlibEx

Для начала создадим класс чанка, в который будем впоследствии писать данные

Tchunk = class(TObject) private public Data: tmemorystream; c_data: tmemorystream; c_stream: tzcompressionstream; constructor Create; procedure writeblock(x, y, z, block: integer); overload; procedure writeblock(x, y, z, block, color: integer); overload; procedure compress; end;

Код этого класса:

constructor tchunk.Create; begin Data := TMemoryStream.Create; Data.size := 82360; Data.LoadFromFile(‘data.bin’); c_data := TMemoryStream.Create; c_stream := tzcompressionstream.Create(c_data, zcdefault, 15, 8, zsdefault); end; procedure tchunk.writeblock(x, y, z, block: integer); begin Data.Seek(form1.getoffset(x, y, z) + 16487, 0); Data.Write(block, 1); end; procedure tchunk.compress; var buffer: array [0..82360] of byte; begin c_data.Position := 0; Data.Position := 0; Data.Read(buffer, 82360); c_stream.writebuffer(buffer, 82360); c_stream.Free; c_data.SaveToFile(‘file’ + IntToStr(n)); end;

Читайте также:  Как сделать облако в бутылке в Майнкрафт

Функция getoffset выдает нужое смещение по формуле y + ( z *128 + ( x * 128 * 16 ) )

function tform1.getoffset(x, y, z: integer): integer; begin Result := y + (z * 128 + (x * 128 * 16)); end;

Добавим в var пару переменных:

chunks:array[0..32] of array[0..32] of tchunk; n: integer=0;

Процедура для сборки всех чанков в готовый файл:

procedure tform1.SwapEndiannessOfBytes(var Value: cardinal); var tmp: cardinal; i: integer; begin tmp := 0; for i := 0 to sizeof(Value) — 1 do Inc(tmp, ((Value shr (8 * i)) and $FF) shl (8 * (sizeof(Value) — i — 1))); Value := tmp; end; procedure tform1.generatefile; var fileoffset: integer; time, compressiontype, counter: integer; filename: string; regionfile: tfilestream; tmp: cardinal; size: integer; n_x, n_z: integer; bu: array[0..99999] of byte; n: integer; roundedsize: integer; neededsize: integer; d: byte; begin fileoffset := 2; time := $d8de2f4e; compressiontype := $02; filename := GetVar(‘Appdata’) + ‘.minecraftsavesNewWorldregionr.0.0.mcr’; regionfile := tfilestream.Create(filename, fmcreate); n := 0; for n_x := 0 to 31 do for n_z := 0 to 31 do begin chunks[n_x][n_z].compress; roundedsize := ((chunks[n_x][n_z].c_data.Size) div 4096); if (((chunks[n_x][n_z].c_data.Size) mod 4096) > 0) then Inc(roundedsize); regionfile.seek((4 * ((n_x mod 32) + (n_z mod 32) * 32)), 0); tmp := fileoffset; SwapEndiannessOfBytes(tmp); tmp := tmp shr 8; regionfile.Write(tmp, 4); regionfile.seek(4 * ((n_x mod 32) + (n_z mod 32) * 32) + 3, 0); regionfile.Write(roundedsize, 1); size := chunks[n_x][n_z].c_data.Size + 1; regionfile.seek(fileoffset * 4096, 0); tmp := size; SwapEndiannessOfBytes(tmp); regionfile.Write(tmp, 4); regionfile.Write(compressiontype, 1); chunks[n_x][n_z].c_data.Position := 0; chunks[n_x][n_z].c_data.readbuffer(bu, chunks[n_x][n_z].c_data.size); regionfile.Writebuffer(bu, chunks[n_x][n_z].c_data.size); regionfile.seek((n) * 4 + 4096, 0); regionfile.Write(time, 4); fileoffset := fileoffset + ((chunks[n_x][n_z].c_data.Size) div 4096); if (((chunks[n_x][n_z].c_data.Size) mod 4096) > 0) then fileoffset := fileoffset + 1; Inc(n); end; neededsize := 4096 * fileoffset — regionfile.Size — 1; regionfile.Seek(regionfile.Size, 0); d := 00; for n := 0 to neededsize do regionfile.Write(d, 1); regionfile.Free; end;

Всё, теперь мы имеем метод записи любого блока по любой координате, в пределах региона. При желании, несложно повторить то же для остальных регионов, надо строк 10 кода.

Обертка для writeblock:

procedure tform1.writeworld(x, y, z, block: integer); var xw, zw: integer; begin xw := (x div 16); zw := (z div 16); chunks[xw][zw].writeblock(x mod 16, y, z mod 16, block); end;

Генерация мира, его сжатие и сохранение.

procedure TForm1.Button4Click(Sender: TObject); var x, y, z: integer; xx, zz: integer; image: tbitmap; begin for xx := 0 to 31 do for zz := 0 to 31 do begin chunks[xx][zz] := tchunk.Create; end; image := tbitmap.Create; image.LoadFromFile(‘image.bmp’); for x:=0 to 127 do for y:=0 to 116 do begin if image.Canvas.Pixels[x,y]=clblack then form1.writeworld(x,117-y,0,49); if image.Canvas.Pixels[x,117-y]=clwhite then form1.writeworld(x,y,0,80); end; form1.generatefile;

Результат:
image
image

image

Можно генерировать не только пиксельарт, но произвольные фигуры, все, что можно задать какой-либо формулой. Например, пол в виде синусоиды:

Проект можно скачать тут.

  • Невозможно сохранять изменения в сгенерированном регионе (возможно, из-за того, что пишется одинаковый timestamp, который не совпадает с временем последнего сохранения в level.dat, как разберусь с форматом последнего — попробую реализовать)
  • Спавн лучше переставить с помощью McEdit, т.к вполне возможно, что после генерации он окажется в сотне блоков над землей, что чревато летальным исходом(тоже можно менять в level.dat)
  • Нет генерации света, вместо этого освещены все блоки, даже под землей(Рассчет освещения — отдельная серьёзная задача, пока не готов ее решать)
  • Починить сохранение, т.к без этого теряется половина смысла
  • Сделать поддержку записи дополнительной инфы(цвет шерсти, листвы, ориентация печек, etc) // частично готово
  • Какое-то подобие ландшафта(холмы/дома/озера)
  • Доработал generatefile , сделал нормальный разворот
  • Форматирование кода
  • Наброски a dditional block data , см. в проекте, ссылка обновлена
  • Описание формата карт
  • ID блоков для функции writeblock/writeworld
  • Zlib для Delphi

Источник: habr.com