Секвенция
Невероятно мощная штука в ситуациях, когда Вам нужны инструменты для реализации скриптов с последовательным выполнением или таймером.
Находится он в level$sequence. Приведём пример на основе crafttweaker.api.event.entity.player.ItemPickupEvent.
Пример секвенции
Сиквенцер создаётся просто, вдобавок в него можно поместить MapData, которая будет хранить какие-либо параметры.
Но писать MapData необязательно, она может иметь пустое значение.
Создадим такой код, который будет выдавать игроку через 100 ticks алмаз, если он подберёт землю.
Для удобства объяснения я буду объяснять всё на уровне кода, а точнее по нижнему примеру. Давайте разбираться.
В методе addTask у нас во входных параметрах выступает ISequenceTask, в конструкторе которого есть T и U, они являются Objects, то есть любой объект, будь то int или передача собственного класса.
В самом craftTweaker есть самобытное задание - это SleepTask. У него есть метод tick, который имеет входные параметры T и SequenceContext<T,U>.
Вы можете вызывать sequence по завершении иного sequence. Для этого в метод tick мы должны передать level и SequenceContext и в него же передать наш sequnce по окончании которого запустится другой sequence и MapData, в которую будет записана информация для выполнения.
Секвенция невероятно сложная тема без внятной документации. Всё написанное здесь базируется на личном опыте журналиста.
В методе run во входных данных используется BiConsumer<T,U>: вместо U у нас SequenceContext<T,U>.
В T мы пишем любой Object, который хотим использовать. В нашем случае это player. Заместо SequenceContext<T,U> Вы можете написать какой-либо другой Object, но это не рекомендуется.
Т.е., Вы можете написать run((player, level) => {})
, и оно будет работать. Но, если Вам понадобится SequenceContext, уже его получить не удастся.
InstantTask
Поговорим теперь про все Task, которые у нас существуют. Он выполняется немедленно, в отличие от SleepTask и SleepUntilTask.
SleepUntilTask
В отличие от SleepTask, секвенция будет остановлена, пока условие не будет выполнено.
Last updated