Задумывались ли вы о том, как сделать кастомную карту сокровища, поиска особняка или храма в океане? Я да, поэтому и решал поискать информацию. Но в Интернете я ничего не нашёл... Поэтому я сам разработал свой, авторский метод создания кастомной карты сокровища.
Как только увидел карты сокровища, загорелся идеей создать такую кастомную карту. Это идеальная вещь для карт на прохождение, ну или можно устраивать ивенты на сервере (Хотя в данный момент это весьма неудобно из-за способа. Возможно в дальнейшем напишу плагин на автоматическое создание таких карт). В общем нечего разглагольствовать, перейдём к способу.
1. Находим понравившееся место, берём пустую карту и используем. Теперь у нас есть изображение местности, оно нам пригодится. Выходим из мира.
2. Рисуем карту местности, которую мы выбрали в любом фоторедакторе (я использовал PhotoShop). Тут-то и пригодится наша карта из первого пункта. Я снял скриншот при помощи Joxi. Размер изображение в редакторе 128 на 128 пикселей, если это карта без масштаба.
3. Используем сервис или программу для создания карт по картинке. Я воспользовался этим
сайтом, но цветовая схема там явно устарела, поэтому лучше воспользоваться вот этой программой -
github. Потом кидаем нашу полученную карту в папку с сохранением (Надеюсь уже все умеют это делать, в противном случае, загуглите).
4. Открываем всем известный
NBTExplorer. Находим наше сохранение мира, находим карту, которую добавили в мир и редактируем следующие поля:
- xCenter и zCenter - координаты блока, который будет стоять в центре карты.
- trackingPosition - отвечает за отображение игрока на карте.
- unlimitedTracking - "метка" игрока всегда будет на карте, даже если игрок далеко за её пределами. Нужно для того, чтобы искать положение местности, представленной на карте.
5. Сохраняем всё и заходим в мир. Теперь нужно выдать себе карту,а так же разместить на ней метки. Для этого я использовал такую команду:
/give @a filled_map{ map:1, display: { Name:"Тайник", MapColor:32768 }, Decorations: [ { id:"house", type:8, x:314, z:254, rot:180 }, { id:"treasure", type:26, x:293, z:269, rot:0 } ] } 1
Поэтапный разбор команды:
map:1 - это индификатор карты, которую нужно выдать. Мы редактировали файл map_1, а индификатор определяется по числу в названии файла.
display:{MapColor:32768} - таким образом мы задаём цвет карте. На скриншотах видно, что она зелёная. Откуда взяли циферки? Они рассчитываются по формуле [(Red « 16) + (Green « 8) + Blue].
Если углубиться в теорию, то это кодирование цвета RGB.
Для чего? Каждый цвет - это 1 байт (0-255). И если использовать байт, то каждый цвет придётся писать отдельно, что не рационально, со стороны выполнения программы. А все 3 цвета (красный, зелёный, синий) содержат в себе 3 байта. К слову integer содержит 4 байта. Это не относится к карте, но стоит учесть, что существует ещё такая вещь, как прозрачность, которая и записывается в четвёртый байт. Вот и выходит, что кодирование RGB цвета (тем более с прозрачностью) идеально подходит под integer и под одну переменную. << - это битовый сдвиг в лево. В общем тот кто разбирается поймёт. Немного теории не помешает.
Тот кто не понял, ищите нужный цвет в системе RGB и подставляете значения в код, представленный ниже. Сам код можно скомпилировать в онлайн
компиляторе Java.
В конечном итоге вы получаете число, это и есть цвет.
class Rextester {
public static void main(String args[]){
int R, G, B;
//R = <число>;
//G = <число>;
//B = <число>;
int color = (R << 16) | (G<<8) | (B);
System.out.println(color);
}
}
Decorations:[{id:"treasure",type:26,x:293,z:269,rot:0}] - этот тег отвечает за метки на карте. Их может быть несколько.
id - индификатор, должен быть разным.
type - номер типа маркера. Все маркеры
тут.
x и z отвечают за координаты этого маркера.
rot - это угол поворота. Что интересно, так это то, что маркер особняка перевёрнут на 180 градусов изначально (Другие должны отображаться нормально).
6. Уйдите подальше от местности, которую добавили на карту и выдавайте себе карту. После выполнения увидите это чудо.
7. Карта готова, исследуйте!