( +6.70 5,9 -0.80 )

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

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

Версия для одиночной игры

Не успели высохнуть чернила, как мне в голову пришла отличная мысль, позволившая многократно улучшить недавно опубликованную схему и избавить её от тех неприятных моментов, которыми была наделена та версия. Речь, естественно, идёт об автоматическом управлении светом, которое я реализовывал с помощью особенностей последних версий игры. Уже вспоминаете нашу условную «камеру движения», которая при перемещении в «подъезде» включала на некоторое время свет, а потом, при отсутствии движения, выключала его? Именно её мы будем в сегодняшнем уроке модернизировать, улучшая и упрощая финальную схему.

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

  1. Необходимость использования повторителя для того, чтобы избежать визуальных искажений с освещением (при непрерывном движении в выделенной зоне блок красного камня в определённый момент исчезал, а потом появлялся);
  2. Отсутствие чувствительности схемы к быстрому бегу и медленному перемещению — в итоге механизм реагировал исключительно на перемещение обычным шагом;
  3. Таймер обновлялся не после любого движения, а лишь после того движения, которое производилось после завершения предыдущего цикла;
  4. Достаточно объёмные размеры схемы — получалась цепочка из семи командных блоков;
  5. Невозможность временного отключения схемы.


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

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


Также, для определения области видимости нашей «камеры движения», мы, как и в предыдущей версии механизма, будем устанавливать на 2 блока ниже игрока лазуритовые блоки. Виртуальное освещение будет включаться с помощью установки блока из красного камня на условные координаты 1 2 3. Итак, детальное описание:

Тип (картинка)МодификаторКомандаОбъяснение
УсловностьАктивность
1Безусловная (Unconditional)Требуется сигнал (Needs Redstone)

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


Да, частями объяснения были скопированы из предыдущей части, ведь, собственно, механизм не сильно изменился. Мы лишь отказались от работы с тегами и стали убавлять очки, а не добавлять их, что сделало возможным без особых проблем добавить чувствительность механизма к быстрому бегу и медленному перемещению. Вот, собственно, и они:

Быстрый бег:

Тип (картинка)МодификаторКомандаОбъяснение
УсловностьАктивность
1Безусловная (Unconditional)Требуется сигнал (Needs Redstone)

(схема включится тогда, когда будет активирован данный командный блок)
/execute @a[score_AutoLightSprint_min=1] ~ ~ ~ detect ~ ~-2 ~ minecraft:lapis_block 0 /scoreboard players set @p AutoLightWalk 1
Устанавливаем значение статистики перемещений «AutoLightWalk» на единицу тем игрокам, у которых в статистике быстрого бега «AutoLightSprint» есть как минимум одно очко (т. е. тем, кто двигался быстро) и под которыми на два блока ниже есть лазуритовый блок (т. е. тем, кто оказался в зоне видимости нашей «камеры движения»). Таким образом, мы, по сути, имитируем при беге обычную ходьбу, из-за чего механизм не пришлось дублировать несколько раз.
2Безусловная (Unconditional)«Всегда активен» (Always Active)
/scoreboard players set @a[score_AutoLightSprint_min=1] AutoLightSprint 0
Сбрасываем статистику быстрого бега «AutoLightSprint» у всех игроков, у которых в ней есть как минимум одно очко. Так как данный командный блок в режиме цепочки имеет безусловную вариацию модификатора, это действие будет производиться каждый игровой такт.


Медленная ходьба:

Тип (картинка)МодификаторКомандаОбъяснение
УсловностьАктивность
1Безусловная (Unconditional)Требуется сигнал (Needs Redstone)

(схема включится тогда, когда будет активирован данный командный блок)
/execute @a[score_AutoLightCrouch_min=1] ~ ~ ~ detect ~ ~-2 ~ minecraft:lapis_block 0 /scoreboard players set @p AutoLightWalk 1
Устанавливаем значение статистики перемещений «AutoLightWalk» на единицу тем игрокам, у которых в статистике медленных перемещений «AutoLightCrouch» есть как минимум одно очко (т. е. тем, кто двигался медленно) и под которыми на два блока ниже есть лазуритовый блок (т. е. тем, кто оказался в зоне видимости нашей «камеры движения»). Таким образом, мы, по сути, имитируем при медленном перемещении обычную ходьбу, из-за чего механизм не пришлось дублировать несколько раз.
2Безусловная (Unconditional)«Всегда активен» (Always Active)
/scoreboard players set @a[score_AutoLightCrouch_min=1] AutoLightCrouch 0
Сбрасываем статистику медленных перемещений «AutoLightCrouch» у всех игроков, у которых в ней есть как минимум одно очко. Так как данный командный блок в режиме цепочки имеет безусловную вариацию модификатора, это действие будет производиться каждый игровой такт.


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

Google Drivehttp://adf.ly/1bQKWL.

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

    21 июня 2016 16:52

    +2

    Всё очень хорошо оформлено! 5 мем default3
  2. Главные редакторы

    21 июня 2016 22:31

    +1

    Фомин обезумел. ololosha
  3. Посетители

    22 июня 2016 16:03

    +2

    Святой инжинер numb
  4. Просто хорошие люди

    25 июня 2016 09:45

    +1

    Сложновато будет для новичков, но гайд крутой.

    5 default3
Для написания комментария зарегистрируйся на сайте, это займет всего пару минут, голосуй за новости, зарабатывай репутацию.

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

Название темы
Статистика
Последнее сообщение

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

Ответов: 166

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

Ответов: 697