Гейты — это трубные логические элементы, выполняющие определённое действие при выполнении различных условий. Набор возможных условий может меняться в зависимости от того, к чему присоединена труба. Изготавливаются в сборочном столе. Гейт можно снять с трубы, нажав ⇧ Shift+ПКМ.
Ингредиенты | Крафт | Результат |
---|---|---|
Чип, Красный провод | Гейт | |
Железный чип, Красный провод | Железный гейт | |
Золотой чип, Красный провод, Синий провод | Золотой гейт | |
Алмазный чип, Красный провод, Синий провод, Жёлтый провод, Зелёный провод | Алмазный гейт | |
Любой непульсирующий гейт, Железный чип, Пульсирующий чип | Пульсирующий гейт того же уровня и логики. |
GUI самого простого гейта выглядит так.
Условия и действия выбираются с помощью нажатий на слотах ПКМ или ЛКМ.
Виды условий | ||
---|---|---|
Название | Иконка | Описание |
Pipe Empty | Срабатывает, если по участку трубы, на котором установлен гейт, ничего не передаётся. | |
Items Traversing | Срабатывает, если по участку трубы, на котором установлен гейт, транспортируется предмет. Условие доступно только у труб для предметов. | |
Liquid Traversing | Срабатывает если по участку трубы, на котором установлен гейт, транспортируется жидкость. Условие доступно только у труб для жидкостей. | |
Power Traversing | Срабатывает, если по участку трубы, на котором установлен гейт, передаётся энергия. Условие доступно только у труб для энергии. | |
Redstone Signal On | Срабатывает, если на гейт подаётся сигнал красного камня. | |
Redstone Signal Off | Срабатывает, если на гейт не подаётся сигнал красного камня. | |
Inventory Empty | Срабатывает, если на соседних блоках (сверху, снизу или сбоку от гейта) есть пустой сундук или устройство с пустым инвентарём. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Items in Inventory | Срабатывает, если на соседних блоках есть сундук или устройство с предметами в инвентаре. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Space in Inventory | Срабатывает, если на соседних блоках есть сундук или устройство со свободными слотами в инвентаре. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Inventory Full | Срабатывает, если на соседних блоках есть сундук или устройство с полностью заполненным инвентарём. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Tank Empty | Срабатывает, если на соседних блоках есть пустая цистерна или устройство с пустой ёмкостью для жидкостей. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Liquid in Tank | Срабатывает, если на соседних блоках есть цистерна или устройство с залитой жидкостью. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Space for Liquid | Срабатывает, если на соседних блоках есть цистерна или устройство со свободным местом для жидкости. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Tank Full | Срабатывает, если на соседних блоках есть цистерна или устройство с полностью залитой ёмкостью для жидкостей. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Engine Stage | Срабатывает, если на соседних блоках есть двигатель с таким же цветом нагрева. Условие доступно, только если на соседних блоках есть двигатель. | |
Capacitor Empty | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c разряженным аккумулятором. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Capacitor Has Energy | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c энергией в аккумуляторе. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Space For Energy | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c аккумулятором, который можно зарядить. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Capacitor Full | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c полностью заряженным аккумулятором. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Виды действий | ||
Redstone Signal | При выполнении условия гейт светится красным цветом и генерирует сигнал красного камня. |
Условия и действия железного гейта такие же, как и у предыдущего, но добавляются несколько дополнительных для красного провода.
Итак, для начала рассмотрим ячейку памяти, то есть устройство, которое бы после подачи сигнала на один из входов (в нашем случае это будет красный и синий провода) запоминало бы этот сигнал и продолжало его выдавать.
Что же представляет собой наша ячейка? Самый простой вариант — это обычный золотой ИЛИ-гейт, настроенный, как показано на рисунке ниже:
Логика работы устройства очевидна: синий сигнал выключает красный, а красный, в свою очередь, выключает синий. Дополнительно, мы разместили там же возможность переключения её в одно из состояний подачей редстоун-сигнала, что позволяет разместить рядом с ней кнопку принудительного сброса. Казалось бы, всё просто. Но у этой схемы есть один недостаток, проявляющийся, чаще всего, именно при перезагрузке игры. Что будет, если сигнала нет на обоих проводах? Условия будут обработаны одновременно. То есть схема начнет выдавать и красный, и синий сигналы сразу. А в следующем такте — они оба снова отключатся. Мы получим мигалку. Конечно, достаточно долгий сигнал на один из входов (та самая кнопка сброса) выведет нашу ячейку из этого состояния… до первого перезапуска игры.
Чтобы избежать этого, мы должны настроить реакцию нашего гейта на перезагрузку сервера. Конечно, сохранить значение нам не удастся, но сделать, чтобы одно из значений устанавливалось по дефолту — можно и нужно.
Пусть, для определённости, мы хотим, чтобы после перезагрузки наша ячейка выдавала красный сигнал. Как мы можем эту перезагрузку определить? Очевидно, после перезагрузки оба провода — и красный, и синий — не будут нести сигнала. Используем этот факт, настроив соответствующим образом И-гейт:
Расположим оба гейта рядом и соединим их красными и синими проводами. Теперь при перезагрузке игры И-гейт выдаст красный сигнал, который ИЛИ-гейт немедленно «подхватит». И будет выдавать дальше. Теперь, нажав на кнопку сброса мы можем переключить нашу ячейку в «синие» состояние. И так далее. Обратите внимание, что данное устройство, по совместительству, может работать как детектор перезапуска игры.
Важно: Чтобы устройство правильно и стабильно работало, оба гейта должны находиться именно рядом друг с другом! На большем расстоянии сигнал от одного гейта может не успеть вовремя переключить другой.
Где такая ячейка может пригодиться?
Рассмотрим в качестве первого примера одно из самых насущных применений — зарядку энергохранилищ из Thermal Expansion двигателями из других модов. Если просто подключить двигатели с помощью любых энергетических труб, то, заполнив хранилище, они продолжат свою работу. Трубы из Buildcraft в результате переполнятся и взорвутся. Собственные трубы Thermal Expansion не взорвутся, но энергия будет уходить впустую. Как этого избежать?
Теперь при полной разрядке хранлилища двигатели будут включаться, а при полной зарядке выключаться. Что нам и требовалось.
Что касается поведения при перезагрузке сервера — то оно настраивается в И-гейте. Если он будет выдавать красный сигнал — такая перезагрузка начнет подзарядку хранилища, если синий — остановит её, если она была. Какой из этих вариантов выбрать — остается полностью на усмотрение игрока.
Другой пример — поддержание устройств в работоспособном состоянии, за счёт подачи туда ресурсов.
Пусть у нас есть полный контейнер с ресурсами. И много устройств, в которых мы хотим поддерживать наличие этих ресурсов. Простейшая, ручная реализация без использования гейтов будет выглядеть так: мы выводим трубу из контейнера, ставим на входе редстоун-двигатель, к каждому устройству делаем ввод таким образом, чтобы, если в ней нет места, ресурсы шли дальше, к следующему устройству (это достигается алмазной трубой или, что предпочтительнее, вводящей трубой из Additional BuildCraft Objects). А в самом конце пути мы ставим железную трубу. Дойдя до неё, наши ресурсы развернутся и направятся обратно — туда, откуда пришли.
Эта схема хорошо работает с загрузкой удобрений в фермы и биореакторы Forestry, капсул в центрифуги и электролизёры GregTech и т. д. Но недостатком у неё является то, что ресурс всё время гуляет вперед-назад по трубе, вместо того, чтобы спокойно лежать в сундуке. Попробуем это исправить.
Очевидно, сигналом на включение системы должен быть сигнал о недостатке ресурса с того из устройств, которое тратит его быстрее других (для Forestry, например, это будет ферма деревьев). На выключение — тот факт, что ресурс заполнил все фермы и вернулся обратно. Чтобы различать это, поставим недалеко от нашего сундука алмазную трубу, которая будет ресурс, пришедший из сундука, направлять к фермам, а ресурс, пришедший от ферм — в другую трубу, на которой и будет находиться наша ячейка памяти (потом, разумеется, из неё он будет идти в тот же сундук).
Теперь осталось настроить синий сигнал на появление под ячейкой дропа, а красный — на нехватку ресурса в нашей ферме (или что там им снабжается). Разумеется, детектирование последнего осуществляется отдельным железным гейтом. После чего, как и в прошлом примере, подводим сигнал к двигателю — и наша конструкция готова.
Когда ресурс в устройстве будет заканчиваться (если есть возможность, целесообразно настраивать схему не на полное исчерпание ресурса, а скажем, на 10 %), двигатель включится и ресурс пойдет в трубу, заполняя все устройства. Когда он дойдет до конца и вернется обратно — двигатель выключится, переставая подавать в трубу новые ресурсы. Вскоре они все возвращаются обратно в сундук, где и остаются — до тех пор, пока нам не понадобится новая партия.
Эта страница содержит неактуальную информацию о контенте. Он был изменён в новых версиях игры. |
Следующая задача значительно сложнее. Вот у нас есть эта ячейка. И теперь мы хотим, чтобы она переключала свои состояния при каждом проходе какого-либо объекта по трубе. Проблема здесь в том, что мы не можем просто задать условие «если есть синий сигнал и прошёл объект по трубе, то включить красный и наоборот». Такая схема просто начнет быстро переключать сама себя и перейдет в режим «мигалки», из которого она сама уже не выйдет. Здесь необходима более сложная логика, и именно она приведена на рисунке ниже:
Как мы можем видеть, используется алмазный И-гейт. И задействованы все его выходы, один (точнее — два, настройки их входа должны быть идентичны) из которых и служит для детектирования предметов. Также задействованы все виды проводов (зелёные и жёлтые должны наноситься только на тот блок, в котором мы разместили триггер, красный и синий нужно соединить с ячейкой памяти). Таким образом, мы не можем использовать провода, чтобы подвести к триггеру сигнал, по которому он будет переключаться. Его надо располагать непосредственно в том месте, где мы будем этот сигнал снимать, либо передавать сигнал через редстоун.
И есть ещё одна тонкость — этот триггер, как и его аналог на редстоуне, по своей сути является колебательным контуром. Соответственно, он чувствителен к времени подачи сигнала. То есть в нашем случае — к времени прохождения предметов по сегменту трубы. Если это время будет достаточно длинным — он начнет переключаться из одного состояния в другие. Если же время будет, напротив, слишком коротким — гейт просто не успеет среагировать.
Поэтому важна скорость предметов. Вот условия, при которых гарантируется правильная работа триггера:
Для гарантированного обеспечения этих условий, за несколько клеток до триггера рекомендуется поставить промежуточный контейнер.
Также триггер можно настроить, после замены соответствующего условия, не на предметы, а на сигнал редстоуна. Гарантируется его правильная работа от нажатия кнопки. В случае же использования панелей, а также — других источников с непостоянным временем сигнала, возможно повторное переключение триггера, если этот сигнал будет слишком длинным. В целом, условия его правильной работы такие же, как и у аналогичной конструкции из редстоуна. Разница лишь в размере.
Т-триггер же, который правильно работает при любой длительности сигнала, в принципе, можно построить, основываясь на свойстве железных труб циклически менять направление выхода под воздействием редстоун-сигнала, но это будет весьма громоздкая конструкция, размерами вполне сравнимая с аналогичным устройством на поршнях. Только более дорогая в исполнении.
В качестве примера использования Т-триггера можно назвать выведение новых видов пчёл. Для получения мутаций там требуется скрещивать два вида этих насекомых. Соответственно, в каждом новом цикле следует подавать трутней либо из одного, либо из другого контейнера. В этом случае Т-триггер будет реагировать на прохождение пчелиной матки по трубе, переключая ячейку памяти, а контейнер с трутнями будет выбираться в зависимости от состояния этой ячейки. Конечно, прежде, чем пускать матку через триггер, следует убедиться, что она сменила свой вид… Но это уже не относится к применению гейтов.
Можно сделать индикатор, который срабатывает при выполнении условия(полный сундук\энергохранилище\печь\т.д.)