Автоматическая сортировка вещей
## Автоматическая сортировка вещей

Допустим, вы соорудили ферму, основанную на спаунере плюс обычном спауне мобов. И десятками крушите разную враждебную живность. И, соответственно, сыпется тонны дропа. Что-то полезное, что-то нет. Сортировать вручную? Зачем, если есть воронки, сундуки и красная пыль?

### Требования к сортировщику

Перед созданием чего-либо бывает полезно написать техзадание, в данном случае оно было такое:

- Главное. Схема не должна использовать нестандартное поведение, ошибки, модификации и командный блок.
- Схема должна быть воспроизводима обычным игроком в любом мире и измерении
- Схема должна уметь отсортировывать указанные игроком вещи, умеющие складываться в стаки.

### Идея

Ключевой элемент сортировщика — пара воронок, которые заполнены однотипными предметами определённым образом (их-то и извлекаем из общей кучи). Пара из-за того, что в этих воронках надо поддерживать постоянное количество предметов, а также из-за поведения запертой сигналом воронки: запертая воронка не берет из сундука вещи сама, но в неё их можно положить другой воронкой.

Общая логика работы проста. В устройство попадают вещи из источника (например сундука) и делятся на две группы: отсортированные и все прочие.

### Обратите внимание

При установке воронок под сортировочным сундуком важен порядок их установки, так как первая установленная воронка имеет приоритет по забору вещей из сундука. Иными словами, если в сундук попадает одна единица чего либо, то её **обязательно** заберёт первая установленная воронка, если она не заперта сигналом. Впрочем опыт показывает, что это как-то зависит, похоже, от расположения воронок в чанке. Выясняю закономерность, пока похоже на то, что распределение по воронкам подчиняется правилу «северо-запад», то есть после перезагрузки чанка первой забирающей предметы воронкой становится северная или западная воронка, в зависимости от ориентации сундука над ними. В любом случае пока что лучший вариант исправления ситуации — менять местами сундуки назначения, то есть «переворачивать» фильтр, чтобы после перезагрузки чанков первой воронкой оказывалась та, что забирает целевой шмот.

### Реализация

Запаситесь воронками, сундуками, красной пылью, компараторами, повторителями, красными факелами и какими-нибудь твёрдыми блоками. Сундуки-ловушки не нужны, можно обойтись обычными. Выбрасыватели пригодятся, если планируется строить ещё один каскад сортировки для связи с предыдущим. По стопке всего хватит с головой на пару каскадов.

5. Устанавливаем сундук для прочих вещей и протягиваем к нему воронки. Затем устанавливаем воронки под сортировочным сундуком. Сначала ту, которая передаёт отсортированные вещи, затем ту, которая передаёт прочие вещи. Проверьте работу воронок: положите немного шмота в воронку над сортировочным сундуком. Всё должно переместиться в сундук для отсортированных вещей.

6. Устанавливаем компаратор к воронке под сортировочным сундуком, ведущей к сундуку с отсортированными вещами. От компаратора прокладываем два блока красного провода, ставим блок с красным факелом для инвертирования сигнала, от факела провод ведем к блоку у следующей воронке, как показано на рисунке. Здесь важна скорость передачи сигнала, поэтому повторителей устанавливать не стоит.

7. Над красным факелом устанавливаем блок, на него устанавливаем еще один красный факел и протягиваем мост из блоков к предпоследней воронке подачи вещей в сортировочный сундук, затем прокладываем по мосту красный провод. Это обеспечит обратную связь с подачей вещей, немного замедлив поток, что позволит сортировать без ошибок.

8. С другой стороны, на следующей по ходу воронке устанавливаем компаратор, к нему боком еще один компаратор, переключив его в режим вычитания, за компаратором красный факел, перед компаратором блок красного провода. Впереди копаем яму 2х2 с туннелем под эту же воронку. Устанавливаем красный факел на блоке с красным проводом от компаратора и от факела ведем сигнал в тоннель.


### Подготовка к работе

Теперь надо подготовить устройство к работе, заполнив последнюю пару воронок однотипными вещами. Заполняются только первые две воронки, ведущие в сторону сундука с отсортированными вещами.

Всё, ваш сортировщик готов. Если вы правильно всё собрали, он будет сортировать.

### Каскадирование

Как вы понимаете, данные устройства можно собирать в каскады. Просто передайте не отсортированные вещи на следующую ступень сортировки и так далее. При установке следующего каскада оптимально отмерять расстояние так, чтобы блок с красным факелом от первой воронки стоял на краю ямы с тоннелем предыдущего устройства.

### Что дальше?

Это всё ещё просто сортировщик и он, конечно, требует доработок. Как минимум необходимо обеспечить автоматическую очистку самого последнего сундука с неотсортированным шмотом, а также «сброс пара» из сундуков с отсортированным шмотом (уничтожение части вещей при заполнении сундука, дабы избежать переполнения). Возможно, вы захотите результат стянуть поближе друг к другу. Всё в ваших руках :)

## Упрощённая схема

В упрощённой схеме отсутствует тактирование. Она может за один каскад разделить вещи на две группы, по 1..5 типов в каждой (то есть можно делить дроп не более чем на 10 сортов).

Схема состоит из двойного сундука, к которому подключено два плеча. Каждое плечо состоит из двух воронок, полностью заполненных одинаковым набором вещей (естественно, воронки во втором плече заполнены другим набором вещей), соединённых последовательно. Вторая воронка направлена в двойной сундук следующего каскада. К воронкам подключены компараторы с факелами, реагирующие только на полное заполнение. Они упираются в два блока, на которых стоят факелы, сигналы которых объединяются и блокируют вторую воронку.

Таким образом, если хотя бы в одной воронке отсутствует хотя бы один предмет до пяти полных стопок, её компаратор разблокирует факел, и вторая воронка блокируется. При этом поведение схемы однозначно: первая воронка берёт из сундука предметы (если есть что и есть куда, то есть она может взять только предмет того типа, по которому у неё неполная стопка) и кладёт во вторую воронку (если есть куда, то есть она не полностью заполнена). Поскольку вторая воронка отключена, она неизбежно заполняется, первая перестаёт класть в неё предметы и система приостанавливается до появления предметов, способных приниматься первой воронкой. Как только такие предметы появляются, вторая воронка разблокируется и передаёт несколько предметов в сундук, снова вызывая режим ожидания.

Часто возникает ситуация, когда вторая воронка передала не тот предмет, который есть в исходном сундуке. Тогда и в первой уменьшается не та стопка, которую могли бы принять. Ситуация будет продолжаться до появления нужного предмета, который с вероятностью 1/5 разблокирует именно нужный вид, то есть желательно содержимое каждого плеча делать одинаково распространённым (допустим, одно плечо для редкого дропа, а второе — для обильных его видов). Очевидно, последний каскад (делящий на два вида, то есть обе воронки плеча заполнены 10 стопками одинаковых предметов) этой проблемы не вызывает.

### Вертикальная схема

Вертикальная схема тоже относится к «упрощённым», хотя и сложнее предыдущей. Плата за эту простоту — необходимость при каждом заборе ресурсов аккуратно распределять остатки по сундукам, а также необходимость, собственно, оставлять такое количество ресурсов нетронутыми.

Схема состоит из вертикальной колонны двойных сундуков, к которым сбоку присоединена такая же колонна воронок. Воронки управляются такой же вертикальной цепочкой инверторов, в результате чего они постоянно заблокированы «через одну». Для регулировки схемы надо «размазать» по сундукам требуемый сорт вещей (по одной на слот), в результате чего сундук будет принимать только свой вид (или два-три вида) дропа, а остальной будет копиться в воронке. В начале работы активна верхняя воронка. Она принимает из исходного сундука всё подряд, но в свой сундук может перегрузить только то, что он принимает (при этом воронка под ней не может «высосать» из неё те вещи, которым место в верхнем сундуке, поскольку она выключена). Когда она забивается посторонним дропом, система переключается и воронка перестаёт принимать из исходного сундука, зато включается воронка под ней, которая вытаскивает из неё всё лишнее (и что-то тоже кладёт в свой сундук). Одновременно то же самое повторяется в воронках ниже и т. д., поскольку они включены и выключены «через одну».

В момент переключения может возникнуть ситуация, когда верхняя воронка только-только успела принять «свою» вещь из предыдущей (или из исходного сундука), но не успела передать в «свой» сундук. В результате вещь уйдёт ниже и забьёт нижнюю воронку. Чтобы этого избежать, надо выбирать период переключения таким, чтобы дроп гарантированно успевал «устаканиться» — каждая воронка уже передала всё «своё» в свой сундук и в ней только «чужое». Но в верхнюю воронку, как правило, в любой момент может что-то внезапно прийти из фермы. Поэтому над ней или ставится какой-то регулятор, подающий дроп «порционно» с тем, чтобы каждая порция успевала рассортироваться, или собственно заполнение верхней воронки «чужим» дропом и является командой для таймера, который переключает воронки на время, достаточное для «устаканивания» очередного шага (но это заполнение не должно быть само по себе короче этого времени, иначе нижние воронки могут что-то недопередать друг другу; если не создавать искусственно больших скоплений, это так будет, потому что из мобофермы поток вещей обычно равномерный и не очень плотный, и время «забивания» воронки намного больше времени стабилизации очередного шага).

### Сортировка с «парализованными» воронками

Поставьте под сундуком две воронки так, чтобы они не могли выгружать содержимое (скажем, нацельте их на камень или друг на друга). Каждую заполните нужным предметом (до 5 разновидностей); если воронки направлены друг на друга, в процессе могут быть сложности, но в итоге всё равно «чужеродные» предметы друг другу они передать не смогут из-за отсутствия свободных слотов. Подключите к каждой компаратор, а снизу поставьте по другой воронке, направленной в двойной сундук каждая. Заблокируйте эти воронки инверторами, запитанными от компаратора через длинный провод, тогда они разблокируются только при полном заполнении «парализованных» воронок. Таким образом, предметы из верхнего сундука будут забираться «парализованными» воронками до их полного заполнения, и только после этого небольшая часть предметов будет вытягиваться из них нижними воронками (и передаваться в сундуки). Особую ценность такая система представляет для автоматической куриной фермы: яйца передаются одной воронкой на «циклический вылуп», а задавленные от тесноты куры (и перья) удаляются из цикла второй воронкой, чтобы система не выстреливала обратно в бассейн готовыми тушками кур.

Аналогично можно использовать принцип «стоя́щая под нацеленной на сундук воронкой вторая воронка имеет приоритет перед этим сундуком»: в сундук пойдёт всё, что не будет «схвачено» нижней воронкой. При этом нижняя воронка выполняется «парализованной», а опустошает её третья воронка, управляемая инвертором и компаратором, настроенным примерно на 4.5 стопки (иначе «парализованная» воронка наполнится и перестанет «перехватывать» предметы из самой верхней воронки, «сундучной»).