03 января, 2017

Minecraft, сортировка мобдропа с помощью фильтров Extra Utilities

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

У меня система выглядит вот так:

В центре стоит эндер сундук (но может стоять и самый обычный) в который предметы попадают с помощью Ender collector'а. Дальше предметы из него извлекаются трансфернодами в 3 стороны. В каждой трансферноде стоит фильтр и апгрейды на скорость.



Левое направление - отсеиваем зачарованные предметы:

Мы делаем Advanced Filter и потом держа его в руках кликаем в воздух правой кнопкой мышки, чтобы проматывать адвансед программы, пока не дойдем до программы Enchanted.exe, шифт+райт клик крутит список в обратном направлении.

Правое направление - отсеиваем все целые предметы для дальнейшей сортировки уже другими трубами.

Ищем программу DurabilityBarShown.exe, которая отсеивает все предметы, у которых видна полоска прочности (поломанные). И делаем этот фильтр инвертированным, потому что нам нужны только целые предметы.


Нижнее направление - выбрасываем незачарованные поломанные предметы.

Здесь мы пользуемся фишкой фильтров экстра утил. Фильтры можно вставлять в другие фильтры, чтобы делать более сложные правила. Если несколько фильтров лежит рядом, то мы получим срабатывание условия ИЛИ, а нас в данном случае интересует условие И. На помощь приходят правила де Моргана: не (a или b) = (не a) и (не b).

В игре это работает так:
Сначала инвертируем пустой обычный фильтр:

Затем еще раз вспоминаем условие, нам нужны НЕ зачарованные вещи И поломанные вещи. У нас сам фильтр на оба условия накладывает отрицание. Поэтому чтобы получить НЕ зачарованные вещи достаточно в наш фильтр вставить программу зачарованных вещей. А вот чтобы получить поломанные вещи, нужно программу с ними инвертировать еще раз, чтобы получились НЕ НЕ поломанные вещи, это соответствует просто поломанным вещам, потому что двойное отрицание условия равно просто исходному условию.

Возвращаясь к нашему условию. Мы в инвертированный фильтр кладем два адвансед фильтра. Фильтр на зачарованные предметы и инвертированный фильтр на предметы у которых видна полоска прочности. А видна она только тогда, когда предмет поломан, у целых предметов ее не видно. 


Более простым языком. Если нам нужно чтобы несколько условий срабатывало одновременно, кладем их в инвертированный фильтр. Все фильтры который должны срабатывать тоже инвертируем, все которые не должны срабатывать оставляем как есть.

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

Обе проблемы можно порешать более сложными фильтрами, но не вижу в этом смысла, элегантность системы пропадает. .

Комментариев нет:

Отправить комментарий