Трехмерная печать в Minecraft
(инструкции для самых маленьких)
Начиная с версии 1.5.4, в OpenComputers появляется интересный девайс - трехмерный принтер. Он дает возможность печатать декоративные блоки любой формы и цвета. Причем не только статичные блоки, но и двери/люки, кнопки и рычаги!
Давайте рассмотрим, для чего он может пригодиться, и как именно с ним работать.
1. Цель
Как и в предыдущих гайдах, первым делом поставим себе цель.
Мы будем создавать стенную плитку со сквозным орнаментом, в виде морды крипера.
Я не буду приводить в этом гайде рецепты предметов, так как их легко найти в NEI, или в статьях на gamepedia.
2. Обзор принтера
3D-принтер - это периферическое устройство, которое должно быть подключено к работающему компьютеру. Оно представляет собой блок, с двумя внутренними слотами:
Верхний слот предназначен для специальной печатной массы (хамелиума) (изготовляется из редстоуна, гравия, древесного угля и воды). Принтер вмещает два стекапечатной массы (256 000 ед).
Нижний слот занимает картридж с красителями. Объем внутреннего хранилища - два картриджа краски (100 000 ед).
По команде от компьютера, принтер берет немного печатной массы и краски и "распечатывает" в крайний правый слот запрограммированную модель.
На модель из этого гайда, состоящую из 21 фигуры, принтер потратил 424 единицы массы и 314 единиц краски.
3. Отпечатанный блок
Модель для печати задается в виде списка "фигур" - параллелепипедов.
Каждая фигура отмечена координатами противоположных углов. Она имеет
свою текстуру, цвет оттенка (если необходимо) а также состояние (true
/false
).
Максимальное количество фигур в модели - 24, по умолчанию.
Координаты блока задаются тремя числами (X
, Y
, Z
) в пределах от 0 до 16.
Блок может переключать свое состояние, когда игрок кликает по нему правой кнопкой мыши, или на блок подается сигнал редстоуна.
По умолчанию блок имеет форму, заданную блоками с состоянием false
, и сменяет
ее на форму из блоков с состоянием true
, при активации.
Кроме того блок имеет несколько дополнительных общих флагов, которые определяют его название, описание и некоторые другие параметры.
4. Программирование принтера
Есть два способа распечатать свою модель. Через компонент принтера и прямое
управление, либо при помощи стардартной программки print3d
от Сангара.
4.1 Компонент принтера
Подключение принтера ничем не отличается от подключения любого другого устройства:
local com = require('component') local printer = com.printer3d
Компонент предоставляет набор функций для управления:
reset()
- сброс настроек и остановка печатиsetLabel(value: string)
- задаем название будущего блокаgetLabel(): string
- получаем текущее названиеsetTooltip(value: string)
- задаем описание блокаgetTooltip(): string
- получаем описаниеsetRedstoneEmitter(value: boolean)
- определяет, излучает ли блок сигнал редстоуна в активированном состоянииisRedstoneEmitter(): boolean
- возвращаетtrue
, если блок излучает сигнал в активном состоянииsetButtonMode(value: boolean)
- определяем поведение блока при активации. Еслиtrue
, то блок автоматически возвращается в неактивное состояние через несколько секунд после активации (как кнопка)isButtonMode(): boolean
- возвращаетtrue
, если блок находится в режиме "кнопки"addShape(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number, texture: string[, state: boolean = false][, tint: number])
- добавляет новую "фигуру" к форме блока.
Фигура задана координатами.texture
- название текстуры,state
- для какого состояния фигура предназначена,tint
- цвет оттенка фигурыgetShapeCount(): number
- возвращает количество фигур в моделиgetMaxShapeCount(): number
- возвращает максимально возможное количество фигурcommit([count: number])
- посылает принтеру текущую конфигурацию и начинает печать (count
- количество копий, если не задано - равно 1)status(): string, number or boolean
- возвращает состояние принтера -"buzy"
и процент готовности, или"idle"
и готовность предмета (true
/false
).
4.2 Программа print3d
Код программы не включен в мод по умолчанию, поэтому его надо скачать из интернета.
Последнюю версию можно найти на ГитХабе автора: print3d.lua.
Либо скачать с Pastebin: print3d.lua
(Поставьте интернет-плату, и наберите в консоли компьютера команду
pastebin get b5rD8KcY print3d
)
Эта программа по сути, читает параметры модели из текстового файла и передает принтеру.
Формат вызова программы:
print3d FILE [count]
Где FILE
- название файла с моделью, а необязательный параметр count
-
количество копий модели.
Модели имеют простой формат - все параметры записываются в таблицу, по аналогии с Луа. Вот образец файла с моделью.
{ -- Это - название модели. Т.е. название будущего блока, которое будет видно -- в инвентаре и подсказке Waila. Название по умолчанию - "3D Print" label = "Example Model", -- Это описание предмета, такое, как будет видно в инвентаре. Если не задано, -- предмет не будет иметь описания tooltip = "Это демонстрационная модель, показывающая все возможности", emitRedstone = false, --[[ Если этот параметр равен false, блок работает как дверь, сменяя свое состояние при сигнале редстоуна. Если параметр равен true, блок работает как кнопка или рычаг - излучая сигнал при смене состояния. При этом блок не реагирует на сторонний сигнал. По умолчанию параметр равен false. ]] buttonMode = false, --[[ Если этот параметр равен false, модель работает как дверь или рычаг - то есть остается в том состоянии, в которое установлен игроком. Если параметр равен true, модель автоматически возвращается в неактивное состояние через несколько секунд после активации. По умолчанию параметр равен false. ]] -- Это список фигур модели, которые определяют, как она выглядит. -- Модель должна содержать как минимум одну фигуру (параллелепипед) -- в неактивном состоянии. -- Фигуры не могут быть "плоскими" т.е. не иметь объема. -- Каждая фигура задана шестью числами: minX, minY, minZ, maxX, maxY, maxZ. -- (Координаты двух противоположных углов.) -- Если смотреть спереди, ось X направлена вправо, ось Y - вверх и ось Z - вглубь. -- Дополнительно, каждая фигура длолжна обладать текстурой. Для того чтобы -- определить название текстуры, вы можете воспользоваться Определителем Текстуры -- (Texture Picker), кликнув им по нужному блоку. -- -- Модель имеет два состояния - неактивное (false, состояние по-умолчанию) -- и активное (true, состояние после активации блока). shapes = { -- Фигура идет от точки <0, 0, 0> (левый нижний угол) до <8, 8, 8> (середина), -- и имеет текстуру блока лазурита. { 0, 0, 0, 8, 8, 8, texture = "lapis_block" }, -- Фигура идет из точки <8, 8, 8> (середина) в <16, 16, 16> (правый верхний угол), -- и закрашена текстурой дубовой листвы. Фигура принадлежит активному состоянию -- модели и имеет светло-зеленый оттенок. { 8, 8, 8, 16, 16, 16, texture = "leaves_oak", state = true, tint = 0x48B518 } } }
Т.е. описание модели просто содержит перечень всех тех параметров, которые задаются при помощи компонента, и список фигур из которых модель состоит.
Набор тестовых моделей для изучения, можно найти здесь: models.
5. Проектирование модели
Разобьем мысленно рисунок запланированной модели на параллелепипеды.
Она будет представлять собой тонкую плитку посередине блока, наподобие стекла или решетки.
Руководствуясь сеткой координат и образцом выше, составим описание модели для текстового файла:
{ label = "Плитка 'Морда крипера'", emitRedstone = true, buttonMode = false, tooltip = "Секретный рычаг в виде головы крипера", shapes={ {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200}, {0,2,7, 2,14,9, texture="quartz_block_side", tint=0x8eb200}, {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200}, {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200}, {2,2,7, 4,10,9, texture="quartz_block_side", tint=0x8eb200}, {4,8,7, 6,10,9, texture="quartz_block_side", tint=0x8eb200}, {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200}, {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200}, {6,2,7, 10,4,9, texture="quartz_block_side", tint=0x8eb200}, {0,0,7, 16,2,9, texture="quartz_block_side", tint=0x8eb200}, {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {0,2,7, 2,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {2,2,7, 4,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {4,8,7, 6,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {6,2,7, 10,4,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {0,0,7, 16,2,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {2,2,8, 14,14,9, texture="quartz_block_side", tint=0xe0301e, state=true} } }
Итак, наша плитка имеет двойной набор фигур - для двух состояний, окрашенных в текстуру кварца с зеленым оттенком.
Кнопка будет работать как рычаг, испуская сигнал в активном состоянии.
Откройте файл командой open creeper
.
Скопируйте код плитки выше и вставьте в файл кнопкой Insert
.
Затем сохраните (Ctrl
+S
) и покиньте редактор (Ctrl
+W
).
6. Печать
Все готово, принтер заправлен, модель спроектирована.
Отправляем ее на печать!
print3d creeper
7. Итоги
Enjoy!