( +21.35 20,9 -0.45 )

[Гайд] Автоматическое управление светом с помощью возможностей Minecraft 1.9

[Гайд] Автоматическое управление светом с помощью возможностей Minecraft 1.9

Версия для многопользовательской игры

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

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

  • (а) Создадим статистику перемещений «AutoLight» с критерием «stat.walkOneCm», которая будет изменяться тогда, когда игрок пройдёт некоторое расстояние;
    /scoreboard objectives add AutoLight stat.walkOneCm
  • (б) Создадим статистику таймера «AutoLightTimer» с критерием «dummy», которую мы будем изменять самостоятельно.
    /scoreboard objectives add AutoLightTimer dummy


Отлично! Теперь нам нужно задуматься: всегда ли мы должны ориентироваться лишь на движение игрока? Разумеется, нет. Нам необходимо также знать, находится ли игрок на той территории, где его будет обнаруживать «камера движения». Для этого, на два блока ниже нужного нам пространства установим лазуритовые блоки. Они будут для нас ориентиром. Также стоит отметить, что виртуальное освещение будет включаться путём установки в определённое место блока из красного камня (его координаты определим условно как 1 2 3).

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

Тип (картинка)МодификаторыКомандаОбъяснение
УсловностьАктивность
1Безусловная (Unconditional)«Всегда активен» (Always Active)
/execute @a[score_AutoLight_min=1] ~ ~ ~ detect ~ ~-2 ~ minecraft:lapis_block 0 /scoreboard players tag @p add AL
Добавляем тег «AL» тем игрокам, у которых в статистике перемещений «AutoLight» есть как минимум одно очко (т. е. тем, кто двигался) и под которыми на два блока ниже есть лазуритовый блок (т. е. тем, кто оказался в зоне видимости нашей «камеры движения»).
2Условная (Conditional)«Всегда активен» (Always Active)
/setblock 1 2 3 minecraft:redstone_block
Устанавливаем блок из красного камня (т. е. включаем освещение). Так как данный командный блок в режиме цепочки имеет условную вариацию модификатора, он будет срабатывать только тогда, когда сработает предыдущий командный блок в режиме цепочки (т. е. тогда, когда мы найдём нужных нам игроков).
3Безусловная (Unconditional)«Всегда активен» (Always Active)
/scoreboard players add @a[tag=AL] AutoLightTimer 1
Добавляем одно очко в статистику таймера «AutoLightTimer» тем игрокам, у которых есть тег «AL». Так как данный командный блок в режиме цепочки имеет безусловную вариацию модификатора, каждый игровой такт игрокам с соответствующим тегом будет добавляться одно очко в наш таймер.
4 Безусловная (Unconditional) «Всегда активен» (Always Active)
/scoreboard players tag @a[score_AutoLightTimer_min=100] remove AL
Забираем тег «AL» у тех игроков, у которых в статистике таймера «AutoLightTimer» набралась как минимум сотня очков (т. е. тогда, когда прошло сто игровых тактов, мы забираем у отслеживаемых игроков тег). Так как данный командный блок в режиме цепочки имеет безусловную вариацию модификатора, проверка будет производиться каждый игровой такт.
5 Безусловная (Unconditional) «Всегда активен» (Always Active)
/scoreboard players set @a[score_AutoLightTimer_min=100] AutoLightTimer 0
Данный командный блок обнуляет таймер у тех игроков, у которых в статистике таймера «AutoLightTimer» есть как минимум сотня очков (т. е. у тех игроков, которые выждали сто игровых тактов). Так как данный командный блок в режиме цепочки имеет безусловную вариацию модификатора, проверка будет производиться каждый игровой такт.
6 Условная (Conditional) «Всегда активен» (Always Active)
/setblock 1 2 3 minecraft:air
Убираем блок из красного камня (ставим воздух; отключаем освещение). Так как данный командный блок в режиме цепочки имеет условную вариацию модификатора, он сработает только тогда, когда игроки выждут сто игровых тактов.
7 Безусловная (Unconditional) «Всегда активен» (Always Active)
/scoreboard players set @a[score_AutoLight_min=1] AutoLight 0
Сбрасываем статистику перемещений «AutoLight» у всех игроков, у которых в ней есть как минимум одно очко. Так как данный командный блок в режиме цепочки имеет безусловную вариацию модификатора, это действие будет производиться каждый игровой такт.


Модификатор активности отдельно не комментировался. С ним всё совершенно очевидно.

Если попытаться разобраться, всё окажется очень и очень просто. Потому, я публикую карту с данным механизмом, где Вы сможете опробовать его лично, а также изучить команды без моих комментариев.

Скачать: auto-light.zip [180,51 Kb] .

Теперь о некоторых дополнительных моментах. Во-первых, если игрок в зоне видимости нашей «камеры движения» продолжит двигаться по истечению таймера в сто игровых тактов, может быть заметно мерцание блока, так как в один игровой такт блок из красного камня убирают, в другой — ставят. Для того, чтобы избавиться от этой проблемы, на месте выхода сигнала из блока из красного камня я рекомендую поставить повторитель с максимальной задержкой. Такой повторитель не будет успевать гаснуть во время быстрых замен, потому мерцания нашего освещения не будет. Во-вторых, в данном механизме отслеживается только перемещение на обычной скорости (из-за использования в статистике перемещений «AutoLight» критерия «stat.walkOneCm»). Это сделано для упрощения схемы. Также, механизм работает в многопользовательской версии игры.

В принципе, это всё. Надеюсь, что эта схема будет кому-то полезна.
  1. Олдфаги

    19 июня 2016 20:34

    +4

    Читать, конечно, не стану, ибо подобным не интересуюсь, но явно видно, что Фаменушка старался. women Ну шо сказать? Как всегда отлично. women
  2. Картоделы

    19 июня 2016 20:37

    -2

    Круто, Пять.
  3. Картоделы

    20 июня 2016 08:47

    0

    Нормег Гайдег
    Пятёрка
  4. Дедушки

    20 июня 2016 11:47

    +1

    моча какая-то пятый мем
  5. ТруЪ Олдфаги-с

    20 июня 2016 16:51

    -1

    5 мем, как от редстоунера.
  6. ТруЪ Олдфаги-с

    20 июня 2016 19:14

    0

    *присвистнул*
    Пятёра.
  7. Просто хорошие люди

    20 июня 2016 22:30

    0

    Цитата: HerrManelling
    Читать, конечно, не стану, ибо подобным не интересуюсь, но явно видно, что Фаменушка старался. women Ну шо сказать? Как всегда отлично. women
Для написания комментария зарегистрируйся на сайте, это займет всего пару минут, голосуй за новости, зарабатывай репутацию.

Последние сообщения с форума

Название темы
Статистика
Последнее сообщение
Ошибка генерации.

Тема в разделе: Моддинг

Просмотров: 16

Ответов: 0

Просмотров: 2160

Ответов: 5

Просмотров: 753

Ответов: 5