Перейти к основному содержимому

Питомцы FreeMinecraftModels

FreeMinecraftModels может превратить модель в вид питомца. Игроки приручают питомцев едой, разводят их, берут с собой, велят им оставаться на месте и хранят их в коллекции, которую открывают командой /fmm pets. Каждый вид задаётся файлом <species>.pet.yml, который лежит рядом с его моделью, поэтому пакет моделей устанавливает, включает и отключает своих питомцев вместе с моделями. То, что питомец делает сам, от следования за владельцем до кружения у костров, определяют Lua-модули поведения, которые перечисляет его файл. Общие для сервера настройки питомцев находятся в pets.yml.

Требования​

  • Питомец — это скрытый ванильный моб с моделью, которым управляет ИИ Mind из MagmaCore. Для этого нужна поддержка NMS во FreeMinecraftModels для версии сервера и Minecraft 1.21.4 или новее. Без неё при запуске консоль выводит строку, начинающуюся с Pets are off:, а /fmm pets отвечает Pets are not available on this server.
  • FreeMinecraftModels не поставляет ни одного вида питомцев. Питомцы существуют только после того, как пакет моделей или вы добавите файл .pet.yml.
  • Игрокам нужен сгенерированный ресурс-пак, как и для любой модели.

Как устроен питомец​

  • Тело — это ванильный моб, указанный в body файла питомца, по умолчанию тихоня (allay). Он скрыт внутри модели, беззвучен и никогда не подбирает предметы. Его максимальное здоровье — health из файла питомца.
  • Клики попадают в модель, которую видят игроки, а не в меньшее тело внутри неё.
  • Питомцы никогда ничего не выбирают целью, и мобы никогда не выбирают целью питомцев.
  • Урон при контакте FreeMinecraftModels для питомцев выключен. Питомец что-то ранит только через модуль sting.
  • Погибший питомец ничего не роняет и не даёт опыта.
  • Тела питомцев никогда не сохраняются вместе с чанком. Питомцы с владельцем создаются заново рядом с владельцем, а дикие ждут в data/wild_pets.yml (см. Дикие питомцы). Тело питомца, оставшееся в чанке после сбоя, удаляется при загрузке чанка.
  • Над моделью показывается name вида, а у детёнышей перед ним стоит Baby.

Режимы питомцев​

У pets.yml два режима:

РежимЧто происходит
COSMETIC (по умолчанию)В мире существуют только питомцы, которыми владеют игроки, не считая проходящих ночных миграций. Больше никто не появляется в дикой природе, и никого нельзя приручить. Питомцам с владельцем ничто не может навредить
CREATURESВиды питомцев ещё и живут дикими в мире, появляясь как ванильные сельскохозяйственные животные, и игроки приручают их, кормя. Питомцам с владельцем можно навредить в рамках правил урона

Переключайте режим кнопкой Pets на панели /fmm setup, командой /fmm petadmin mode creatures или /fmm petadmin mode cosmetic либо правкой mode в pets.yml и выполнением /fmm reload. Кнопка и команда записывают новый режим в pets.yml.

При переключении на COSMETIC живые дикие питомцы отправляются в data/wild_pets.yml. Они возвращаются, когда сервер снова переключается на CREATURES. Ночные миграции проходят в обоих режимах, но приручить мигранта игроки могут только в CREATURES.

В режиме COSMETIC игроки питомцев не приручают. /fmm petadmin give <species> добавляет питомца в коллекцию игрока, который выполняет команду. Разведение работает в обоих режимах.

Приручение​

В режиме CREATURES игрок приручает дикую взрослую особь, нажав по ней правой кнопкой предметом из tamingFood её вида.

  • Каждое кормление расходует один предмет, кроме творческого режима.
  • Каждое кормление приручает с вероятностью tameChance, по умолчанию 1/3, как у волков и кошек. Неудачное кормление показывает дым и tameFailedMessage.
  • Приручённый питомец попадает в коллекцию игрока и появляется рядом с ним. Он сохраняет вариант окраса, который у него был в дикой природе, и один раз проигрывает свою анимацию interact.
  • Если у игрока уже выведено maxEquippedPets питомцев, новый питомец вместо этого отправляется домой, в коллекцию.
  • Вид с пустым списком tamingFood приручить нельзя.

Поводок действует на тело питомца, как на ванильного моба.

Разведение и детёныши​

  • Когда владелец нажимает правой кнопкой по взрослому питомцу предметом из его breedingFood, расходуется один предмет, и питомец переходит в режим любви на loveSeconds секунд, по умолчанию 30.
  • Две взрослые особи одного вида, принадлежащие одному игроку, обе в режиме любви и в пределах 8 блоков друг от друга, приносят детёныша. Детёныш попадает в коллекцию владельца и появляется, если у владельца не достигнут maxEquippedPets.
  • Детёныш наследует вариант окраса одного из родителей. Он носит babyModel, если вид её задаёт, иначе модель своего варианта, и в обоих случаях имеет размер babyScale от размера взрослой особи.
  • Оба родителя ждут breedingCooldownMinutes, по умолчанию 5, прежде чем смогут снова размножаться. Кормление родителя за это время показывает breedingCooldownMessage.
  • Детёныш вырастает через babyGrowthMinutes, по умолчанию 20, после рождения. Время идёт и пока детёныш дома, а взрослая особь появляется, когда детёныш в следующий раз будет выведен.
  • Детёныши не размножаются и не проигрывают анимацию атаки, когда жалят.

Когда рождается детёныш, родители проигрывают свою анимацию interact.

Следование, ожидание и блуждание​

С поставляемыми поведениями выведенный питомец с владельцем держится рядом с владельцем. Приведённые ниже числа — значения по умолчанию модулей follow_owner, stay, drift и hover и ключей follow и float вида:

  • Как только владелец оказывается дальше follow.distance (5 блоков), питомец следует за ним, целясь в точку на 1.5 блока позади, а у летающего вида — на float.hoverHeight над его ногами. Летающий питомец следует со скоростью 5 блоков в секунду при follow.speed: 1 и со скоростью 8 блоков в секунду за пределами follow.leashDistance (12). Он перестаёт следовать в этой точке или когда оказывается в пределах 3 блоков (0.6 расстояния следования) от владельца.
  • За пределами follow.teleportDistance (24) питомец телепортируется к владельцу. Он также телепортируется после 3 секунд подряд, в которые никуда не продвинулся: нет пути к владельцу, путь обрывается, не дойдя до него, у забора или берега, либо на пути летающего питомца стена. Такая телепортация всегда ставит питомца ближе к владельцу и никогда не ставит наземного или плавающего питомца на блок самого владельца.
  • В пределах расстояния следования летающий питомец дрейфует к случайным точкам в пределах follow.roamRadius (5) от владельца и покачивается на месте между дрейфами, удерживая float.hoverHeight над землёй, плюс-минус float.hoverVariance. Наземные виды блуждают и время от времени смотрят на ближайшего игрока; плавающие виды плавают под водой.
  • Когда владелец нажимает правой кнопкой по питомцу чем-либо, кроме его еды для разведения или поводка, питомец остаётся на месте, как собака, и мягко покачивается. Следующий такой клик велит ему снова следовать. Задайте follow.stay: false, чтобы отключить это. Клики других игроков по питомцу с владельцем ничего не делают.

follow.speed умножает скорость каждого поставляемого поведения, кроме миграционного полёта. Летающими телами управляют напрямую. Другие тела идут или плывут к тем же точкам ванильным поиском пути; см. Скорости. Питомцы, которые не плавают, парят над поверхностью воды и лавы, а не тонут до дна.

Дикий питомец блуждает так же вокруг места, где появился.

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

Меню питомцев​

/fmm pets открывает коллекцию игрока как меню-сундук с названием menuTitle. Оно показывает до 54 питомцев.

  • Каждая запись показывает предмет icon вида, а также его iconItemModel, если вид его задаёт. Выведенные питомцы отображаются с эффектом зачарования.
  • Описание показывает вид, вариант (если он отличается от модели вида), возраст и находится ли питомец с игроком.
  • Клик по записи берёт питомца с собой или отправляет домой. Попытка вывести больше чем maxEquippedPets отклоняется сообщением maxEquippedMessage.
  • Игрок без питомцев получает noPetsMessage вместо меню.

Коллекция хранится у игрока, как JSON в постоянных данных игрока, поэтому она путешествует вместе с файлом сохранения игрока и не требует базы данных. Питомец, вид которого больше не установлен, остаётся в коллекции с иконкой барьера и не появляется.

Урон и смерть​

ПитомецУрон
С владельцем, режим COSMETICИгнорирует весь урон
С владельцем, режим CREATURESИгнорирует урон от своего владельца. Игнорирует урон от других игроков, пока petsInvulnerableToPlayers равно true (по умолчанию). Остальной урон применяется
ДикийПолучает урон, как любой моб

Клик левой кнопкой по питомцу, которому нельзя навредить, не считается атакой, поэтому модель не вспыхивает красным.

Когда питомец с владельцем погибает, он уходит домой и его можно снова вывести из /fmm pets. При petsDiePermanently: true он вместо этого покидает коллекцию. Погибший дикий питомец пропадает.

Дикие питомцы​

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

Заселение новых чанков​

Когда чанк генерируется, FreeMinecraftModels делает бросок с вероятностью wildGenerationChance (0.01). При успехе он размещает одну группу вида, выбранного по wildSpawn.weight среди видов, которые могут там стоять, на поверхности вокруг случайного столбца. Бросок повторяется после каждой группы. Значения выше 0.9 считаются равными 0.9, поэтому чанк никогда не заполняется бесконечно. Лимиты, игроки, время суток и игровое правило появления мобов это заселение не ограничивают.

Пополнение вокруг игроков​

Каждые wildSpawnIntervalTicks (400, но не менее 20) проход добавляет диких питомцев в загруженных чанках в пределах 8 чанков от каждого игрока, не находящегося в режиме наблюдателя:

  • Каждый чанк пробуется с вероятностью wildSpawnChunkChance (0.01).
  • Точка должна находиться дальше 24 блоков от ближайшего игрока и от точки появления мира и не дальше 128 блоков от этого игрока.
  • Пополнение прекращается, когда в пределах 8 чанков от каждого игрока рядом с точкой находится wildPetCapPerPlayer (6) диких питомцев всех видов. wildSpawn.cap каждого вида (4) дополнительно ограничивает этот вид.
  • Пополнение учитывает игровое правило появления мобов в мире и wildSpawn.time каждого вида.

Мигранты в эти лимиты не засчитываются.

Где ждут дикие питомцы​

Когда чанк дикого питомца выгружается или перестаёт тикать, его вид, вариант, позиция и дом записываются в plugins/FreeMinecraftModels/data/wild_pets.yml. Он возвращается, когда игрок оказывается в пределах 8 чанков от этого загруженного чанка. Файл записывается при каждом сохранении миров, а также когда FreeMinecraftModels выключается или перезагружается.

Дикие питомцы вида, который больше не установлен, продолжают ждать в файле. Живой дикий питомец, которого удалил другой плагин, пропадает, как будто погиб.

Ночные миграции​

Время от времени стая мигрирующего вида пролетает по ночному небу над игроком и исчезает после пролёта. Вид мигрирует, когда его locomotion равен FLYING, в его файле питомца есть раздел migration: и его поведения запускают migrate, который входит в значения по умолчанию для FLYING. Если у вида есть варианты, каждый вариант, который может носить мигрант, должен запускать migrate. Вид с разделом migration:, не отвечающий этим условиям, никогда не запускает стаи и при загрузке пишет предупреждение, если только его migration.weight не равен 0 или его migration.enabled не равен false.

  • Планировщик проверяет обстановку каждые 5 секунд в обычных мирах (типа Верхнего мира) в течение ночи. Каждый игрок получает один бросок за ночь против migrations.chancePerNight (0.15). Выигрышный бросок выбирает момент в оставшейся части ночи, достаточно ранний, чтобы весь пролёт закончился к рассвету.
  • В этот момент стая стартует, если игрок под открытым небом, в пределах migrations.viewDistance от него нет другой стаи и в воздухе меньше migrations.maxActiveFlocks (3) стай. Иначе попытка повторяется, пока не кончится ночь.
  • В стае от minFlockSize до maxFlockSize участников (от 8 до 14), она летит на altitude блоков (28) выше более высокой из точек: игрока и земли под ним, со скоростью speed блоков за тик (0.15), по прямой, проходящей над игроком на половине durationSeconds (90), либо раньше, когда дальность симуляции мира меньше 12 чанков, потому что стая стартует там, где её участники ещё тикают.
  • Участники — обычные дикие питомцы вида в полной модели и с анимациями, размером migration.scale от размера вида, освещённые на полную яркость и видимые с migrations.viewDistance (160) блоков. Клиентам всё равно нужны чанки под стаей в пределах их дальности прорисовки.
  • В режиме CREATURES игрок, добравшийся до мигранта, может приручить его, что выводит его из стаи. Когда пролёт заканчивается, участники, которые всё ещё летят, удаляются.

/fmm petmigrate [species] немедленно отправляет стаю над вами независимо от времени, неба и других стай. С указанием вида она стартует, даже когда у этого вида нет раздела migration:, но его участники летят по маршруту, только если запускают migrate. Без указания вида выбирается мигрирующий вид по migration.weight.

Раздел migration​

КлючПо умолчаниюЗначение
enabledtruefalse отключает миграции вида и сохраняет остальные значения
modelпустоФиксированная модель для каждого участника. Пусто — выбор из вариантов вида, как при диком появлении
scale1Размер мигранта относительно scale вида
animationпустоАнимация, которую нужно зацикливать в полёте. Пусто — проигрываются собственные idle и walk модели
weight1Как часто выбирается этот вид, когда мигрируют несколько. 0 исключает его из ночного расписания

Поведения​

Всё, что питомец делает сам, определяют модули поведения: Lua-файлы в plugins/FreeMinecraftModels/pet_behaviors/. FreeMinecraftModels поставляет 15 таких модулей и записывает каждый в эту папку при запуске и при /fmm reload, когда файла с таким именем там нет. Удалённый поставляемый модуль возвращается при следующей загрузке. Модуль, уже лежащий в папке, никогда не перезаписывается, отредактирован он или нет, поэтому он сохраняет ту версию, с которой был записан: удалите свою копию и перезагрузите, чтобы получить ту, что поставляет ваша версия FreeMinecraftModels.

Каждый питомец выполняет модули, которые перечисляет файл его вида, с настройками этого вида. /fmm reload перечитывает модули и файлы питомцев и заново запускает на них каждого питомца. Чтобы изменить модуль или написать свой, см. Модули поведения питомцев.

Список behaviors​

behaviors:
- migrate
- stay
- follow_owner
- campfire: { radius: 20, night_only: false }
- drift
- hover
- sting:
effect: POISON
damage: 1
  • Каждая запись — это имя модуля, то есть имя его файла без .lua, или имя с настройками: в одной строке как name: { setting: value } или в строках ниже с отступом в два пробела от имени.
  • Настройка, которую запись не указывает, сохраняет значение модуля по умолчанию. Значения по умолчанию перечислены в разделе Поставляемые модули и в начале каждого файла .lua.
  • Питомец выполняет только то, что названо в его списке. Если модуль не указан, вид никогда этого не делает.
  • Порядок списка не решает, какое поведение выполняется. Это решает приоритет каждого модуля, и файл питомца изменить его не может: скопируйте модуль и поменяйте приоритет там. Порядок важен только когда два модуля конфликтуют: тогда сохраняется первый.
  • Модуль, указанный дважды, выполняется один раз с настройками первой записи, а консоль предупреждает об этом.

Значения по умолчанию без списка​

Файл вида без списка behaviors: выполняет поведения по умолчанию для своего locomotion:

locomotionПоведения по умолчанию
FLYINGmigrate, stay, follow_owner, drift, hover
GROUNDED, AMPHIBIOUSstay, follow_owner, wander, idle_look
AQUATICstay, follow_owner, swim
STATIONARYstay, follow_owner

Список заменяет эти поведения по умолчанию, а не дополняет их, поэтому список, добавляющий модуль, должен также назвать поведения по умолчанию, которые он сохраняет. behaviors: [] не запускает никаких модулей. Значение behaviors, не являющееся списком, игнорируется с предупреждением, и вид выполняет поведения по умолчанию.

Поведения вариантов​

Запишите вариант как карту, чтобы дать носящим его питомцам больше модулей или другие настройки:

variants:
- firefly
- model: firefly_blue
weight: 0.5
behaviors:
- night_glow: { light: 10 }
- crop_drizzle
  • Карта варианта принимает model, weight (по умолчанию 1) и behaviors. Любой другой ключ игнорируется с предупреждением.
  • Питомец, носящий вариант, выполняет список вида или поведения по умолчанию для его locomotion плюс записи варианта. Модуль, названный в обоих списках, сохраняет своё место в списке вида и принимает настройки варианта поверх настроек вида. Остальные модули варианта идут после собственных модулей вида.
  • Детёныш выполняет список своего варианта, даже пока носит babyModel.

Значения настроек​

Каждая настройка имеет тип своего значения по умолчанию: число, true или false, текст или список текстов.

  • Значение с понятным смыслом принимается в другой форме: число в кавычках, например "8", "true" или "false" в любом регистре, и одно слово для списка из одного элемента.
  • Текстовая настройка, получившая число или true/false, принимает его в том виде, в каком его прочитал YAML, поэтому on и yes становятся true. Берите такие слова в кавычки.
  • Записывайте список в скобках, как в [CAMPFIRE, SOUL_CAMPFIRE], или по одному элементу в строке, начиная с - . Текст с запятыми или пробелами как список не читается.
  • Настройка, которой у модуля нет, настройка без значения, список с пустой записью или значение неверного типа вызывают в логе предупреждение с именем файла питомца, и значение по умолчанию остаётся. Существо всё равно загружается.

Поставляемые модули​

МодульПриоритетТипЧто делает
migrate1ПоведениеЛетит по маршруту ночной миграции
stay5ПоведениеУдерживает место, где ему велели оставаться
follow_owner10ПоведениеНе отстаёт от владельца
campfire15ПоведениеКружит у горящего костра ночью
day_perch18ПоведениеДнём отдыхает на листве или на земле
rain_bloom19Поведение и сенсорНабухает и активнее дрейфует под дождём
drift20ПоведениеЛетит к случайным точкам вокруг своего якоря
wander20ПоведениеИдёт к местам, где можно стоять, вокруг своего якоря
swim20ПоведениеПлывёт к местам под водой вокруг своего якоря
hover30ПоведениеПокачивается на месте между дрейфами
idle_look30ПоведениеВремя от времени смотрит на ближайшего игрока
night_glowСенсорПодсвечивает модель ночью
stingСенсорыЖалит игроков или враждебных мобов, которые его касаются
crop_drizzleСенсорУскоряет рост культур, над которыми парит
owner_effectСенсорДаёт владельцу эффект зелья

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

Якорь питомца — то, вокруг чего он бродит: его владелец, а у дикого питомца место, где он появился. Питомец устроился, пока ему не велено оставаться на месте и он дикий либо находится в пределах follow.distance от владельца.

Скорости​

Скорость, которую запрашивает модуль, равна его настройке speed, умноженной на follow.speed. Летающее тело летит столько блоков за тик, не более 4; 0.05 — это один блок в секунду. Идущее или плывущее тело идёт туда ванильной навигацией со скоростью, в 4 раза большей этого числа, как множитель собственной скорости движения своего типа тела, но не меньше четверти её. speed, равный 0, оставляет наземного или плавающего питомца неподвижным.

migrate​

Пока питомец летит ночную миграцию, он летит по маршруту своей стаи со скоростью стаи, приоритетнее любого другого поведения. Он останавливается, когда пролёт заканчивается или игрок приручает питомца. Вид, чьи поведения его не запускают, никогда не запускает стаи. Настроек нет.

stay​

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

НастройкаПо умолчаниюЗначение
speed0.03См. Скорости
bob_ticks40Тики между покачиваниями
bob_radius0.5Блоки от места, на которые покачивание может его сместить

Все поставляемые поведения движения ждут, пока питомцу велено оставаться на месте, поэтому питомец без stay в списке не покачивается.

follow_owner​

Держит питомца, у которого есть владелец, рядом с ним, как описано в разделе Следование, ожидание и блуждание. Читает follow.distance, follow.leashDistance, follow.teleportDistance и float.hoverHeight из файла вида.

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

НастройкаПо умолчаниюЗначение
speed0.25Скорость следования. См. Скорости. При 0 питомец держится рядом только через телепортации для догона
leash_urgency1.6Множитель скорости за пределами follow.leashDistance
trail_back1.5Блоки позади владельца, в которые целится питомец
stuck_ticks60Тики подряд без продвижения, после которых питомец телепортируется к владельцу

drift​

Для летающих видов. Питомец летит к случайной точке в пределах follow.roamRadius от своего якоря, внутри своего диапазона парения (float.hoverHeight над землёй, плюс-минус float.hoverVariance), затем отдыхает.

НастройкаПо умолчаниюЗначение
speed0.06См. Скорости
drift_ticks160Наибольшее число тиков одного дрейфа
stuck_ticks20Тики без движения, после которых дрейф прекращается
rest_ticks60Тики отдыха питомца после дрейфа
rest_random_ticks80Добавляет случайные от 0 до этого значения минус 1 тиков отдыха

hover​

Для летающих видов. Пока не выполняется никакое другое поведение движения, питомец покачивается на месте: каждые bob_ticks он смещается вверх или вниз не более чем на половину float.hoverVariance. Питомец, оказавшийся дальше чем на correct_above блоков от float.hoverHeight над землёй, вместо этого сразу возвращается на эту высоту. Землю он ищет на глубину до 12 блоков.

НастройкаПо умолчаниюЗначение
speed0.03См. Скорости
bob_ticks30Тики между покачиваниями
correct_above1.5Блоки отклонения от высоты парения, при которых он сразу возвращается

wander​

Для наземных видов. Питомец идёт к месту, где можно стоять, рядом со своим якорем, отдыхает и идёт снова. Дикий питомец выбирает места в пределах follow.roamRadius от места, где появился. Питомец с владельцем выбирает места в пределах follow.roamRadius от владельца и не дальше 0.8 от follow.distance, чтобы следование не начиналось в момент прихода. Прогулка заканчивается в пределах 1.5 блока от её места, после walk_ticks или после stuck_ticks без движения. Над водой или у большого обрыва, где ничего не подходит, он пережидает отдых и ищет снова.

НастройкаПо умолчаниюЗначение
speed0.15См. Скорости
walk_ticks120Наибольшее число тиков одной прогулки
stuck_ticks20Тики без движения, после которых прогулка прекращается
rest_ticks80Тики отдыха питомца после прогулки
rest_random_ticks120Добавляет случайные от 0 до этого значения минус 1 тиков отдыха

idle_look​

Время от времени питомец смотрит на ближайшего игрока в пределах range в течение look_ticks, затем отдыхает. Он занимает только взгляд, поэтому любое поведение, двигающее питомца, перехватывает управление, и он никогда не смотрит на игроков в творческом режиме или режиме наблюдателя. range, равный 0, отключает его. STATIONARY-тело никогда не поворачивает взгляд, поэтому его значения по умолчанию этот модуль не включают.

НастройкаПо умолчаниюЗначение
range8Блоки, в пределах которых он смотрит на игрока
look_ticks40Наибольшее число тиков одного взгляда
rest_ticks100Тики между взглядами
rest_random_ticks100Добавляет случайные от 0 до этого значения минус 1 тиков между взглядами

swim​

Для плавающих видов. Питомец плывёт к месту в воде рядом со своим якорем, на глубине от min_depth до max_depth блоков под поверхностью, отдыхает и плывёт снова. Он выбирает места вокруг якоря так же, как wander, и только в воде. Плавающий питомец, оказавшийся на суше, ждёт там; питомец с владельцем возвращается в воду, когда владелец отходит, а телепортация для догона из follow_owner находит воду рядом с ним.

НастройкаПо умолчаниюЗначение
speed0.15См. Скорости
min_depth / max_depth0.5 / 3Блоки под поверхностью, от 0 до 16
swim_ticks120Наибольшее число тиков одного заплыва
stuck_ticks20Тики без движения, после которых заплыв прекращается
rest_ticks40Тики отдыха питомца после заплыва
rest_random_ticks60Добавляет случайные от 0 до этого значения минус 1 тиков отдыха

campfire​

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

НастройкаПо умолчаниюЗначение
radius12Блоки, в пределах которых искать костёр, от 1 до 32
height2.5Блоки над костром, на которых кружит питомец
ring0.8Радиус круга
night_onlytrueТолько между сумерками и рассветом
wild / petstrue / trueСобираются ли дикие питомцы и питомцы с владельцем
blocks[CAMPFIRE, SOUL_CAMPFIRE]Костры, которые считаются. Работают только эти два
soul_variants[]Модели вариантов, которых привлекают только костры душ. Все остальные варианты тогда берут только обычные костры. Пусто — любой вариант берёт любой из перечисленных костров
search_seconds5Секунды между поисками костра. Не менее 1
speed0.06См. Скорости

day_perch​

Днём устроившийся питомец опускается на ближайшую листву под ним или на землю прямо под ним и отдыхает там, слабо покачиваясь. Он взлетает в сумерках, когда на него падает дождь и когда его владелец выходит из зоны следования. Питомец с владельцем берёт присаду только в пределах follow.distance от владельца. Если он не находит, на чём сесть, например над водой или у большого обрыва, он ищет снова через 5 секунд.

НастройкаПо умолчаниюЗначение
height0.3Блоки над листвой или землёй, на которых он отдыхает, от 0 до 8
search_radius2Блоки в сторону, в пределах которых искать листву, от 0 до 4
wild / petstrue / trueПрисаживаются ли дикие питомцы и питомцы с владельцем
speed0.06Скорость, пока до присады больше блока. См. Скорости
settle_speed0.03Скорость на последнем блоке

rain_bloom​

Пока на питомца падает дождь, он набухает и чаще дрейфует вокруг своего якоря, выше и быстрее. Он сжимается обратно, когда дождь заканчивается или он находит укрытие. Дождь падает на питомца, когда в мире непогода, а питомец находится под открытым небом в биоме, достаточно тёплом и влажном для дождя. Набухание — это сенсор, который выполняется каждые 4 тика; дрейф — это поведение с приоритетом 19, поэтому в дождь оно занимает место drift.

НастройкаПо умолчаниюЗначение
scale_multiplier1.25Размер под дождём относительно обычного, от 0.1 до 16
scale_seconds3Секунды на набухание или сжатие
drift_frequency2.5Во сколько раз короче его отдых между дрейфами, чем дают rest_ticks и rest_random_ticks, но не менее 10 тиков
rise1На сколько блоков выше он дрейфует
speed_multiplier1.4Во сколько раз быстрее он дрейфует
speed0.06Скорость дрейфа без учёта speed_multiplier. См. Скорости
drift_ticks120Наибольшее число тиков одного дрейфа
stuck_ticks20Тики без движения, после которых дрейф прекращается
rest_ticks / rest_random_ticks60 / 80Отдых, который сокращает drift_frequency

night_glow​

Кости отображения модели ночью подсвечиваются фиксированным уровнем света, каким бы ни был свет там, где находится питомец. Миры без солнца считаются ночью. Сенсор проверяет каждые 2 секунды. Только для игроков Java: игроки Bedrock видят модель при свете мира.

НастройкаПо умолчаниюЗначение
night_onlytrueПри false светится днём и ночью
light15Уровень света, от 0 до 15
lantern_bonelanternМодель с костью с таким именем зацикливает animation, пока светится
animationglowАнимация для кости-фонаря

sting​

Дикий питомец жалит игроков, которые касаются его модели, кроме игроков в творческом режиме или режиме наблюдателя. Питомец с владельцем жалит враждебных мобов, подошедших в пределы reach от хитбокса его модели, и никогда игрока. Взрослые проигрывают свою анимацию attack, когда жалят. Касания проверяются каждые 4 тика, а ближайшие мобы — каждые 10.

НастройкаПо умолчаниюЗначение
wild / petstrue / trueЖалят ли дикие питомцы игроков, а питомцы с владельцем — враждебных мобов
effectSLOWNESSЭффект зелья по названию. NONE — без эффекта
duration_ticks60Длительность эффекта в тиках, от 1 до 6000
amplifier0Уровень эффекта; 0 — уровень I
damage0Урон за один укол в половинках сердца
cooldown_seconds3Секунды до того, как этот питомец сможет ужалить ту же жертву снова
reach0.5Блоки от хитбокса модели, на которых питомец с владельцем ещё жалит моба, от 0 до 4. Для укола дикого питомца игрок должен коснуться модели

Название effect, которого не существует, один раз для каждого вида и названия пишет предупреждение, и укол не применяет никакого эффекта.

crop_drizzle​

Пока питомец неподвижно парит над культурой, на неё падает лёгкий дождь, и каждые interval_seconds культура может вырасти на одну стадию. Культуры — это блоки из тега культур Minecraft, адский нарост и кусты сладких ягод. Питомец смотрит строго вниз, только сквозь воздух. Рост отправляется как BlockGrowEvent, поэтому плагины защиты и фермерские плагины могут его отклонить. Работает и для диких питомцев, и для питомцев с владельцем.

НастройкаПо умолчаниюЗначение
chance0.1Вероятность за интервал, что культура вырастет, от 0 до 1
interval_seconds5Секунды между попытками. Не менее 1; проверка идёт раз в секунду, поэтому дробное значение ждёт следующей целой секунды
depth4Блоки под питомцем, в пределах которых искать культуру, от 1 до 8

owner_effect​

Пока питомец с владельцем выведен и находится в пределах range блоков от своего владельца, у владельца есть эффект зелья, например ночное зрение или подводное дыхание. Эффект длится 15 секунд и обновляется каждую секунду, поэтому никогда не мерцает, а перестаёт действовать в течение 15 секунд после того, как питомец уходит домой или владелец покидает его радиус. Он показывает свою иконку, но без частиц. Если у владельца уже есть такой эффект, не слабее и длящийся не меньше, например от выпитого зелья, питомец его не трогает.

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

НастройкаПо умолчаниюЗначение
effectNIGHT_VISIONЭффект зелья по названию
amplifier0Уровень эффекта; 0 — уровень I
range16Блоки от питомца

Старые разделы взаимодействия с миром​

В файлах питомцев, написанных до модулей поведения, могут быть разделы campfire:, rainBloom:, glow:, sting:, dayPerch: или drizzle:. Теперь они ничего не делают, и каждый пишет предупреждение при загрузке файла:

firefly.pet.yml: the campfire section is ignored now that world interactions are behavior modules; list the campfire module under behaviors: instead (see plugins/FreeMinecraftModels/pet_behaviors/campfire.lua for its settings).

Простая строка glow: true получает то же предупреждение с формулировкой the glow setting. Если раздел был выключен (enabled: false или glow: задан чем-то, кроме true) либо файл уже перечисляет его модуль, предупреждение лишь просит его удалить.

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

Старый разделМодульПереименованные настройки
campfirecampfirenightOnly в night_only, soulVariants в soul_variants, searchSeconds в search_seconds
rainBloomrain_bloomscaleMultiplier в scale_multiplier, scaleSeconds в scale_seconds, driftFrequency в drift_frequency, speedMultiplier в speed_multiplier
glownight_glownightOnly в night_only, lanternBone в lantern_bone
stingstingdurationTicks в duration_ticks, cooldownSeconds в cooldown_seconds
dayPerchday_perchsearchRadius в search_radius
drizzlecrop_drizzleintervalSeconds в interval_seconds

Остальные настройки сохраняют свои имена. Уберите enabled: отключить модуль можно, не указав его в списке. Файл без списка behaviors: выполняет только поведения по умолчанию для своего locomotion, поэтому перечислите и их. Для летающего вида, который сохранил свои костёр и свечение:

behaviors:
- migrate
- stay
- follow_owner
- campfire: { radius: 12 }
- drift
- hover
- night_glow

migration: остаётся разделом файла питомца; см. Раздел migration.

Наклон и центрирование​

Летающие и плавающие существа обычно выглядят лучше, когда наклоняются по ходу движения и поворачиваются вокруг собственной середины:

  • orientation задаёт, как модель наклоняется в движении. UPRIGHT (по умолчанию) только смотрит туда, куда движется. TOP_FIRST ведёт верхней частью, как медуза: наклоняется в сторону движения, при движении по горизонтали ложится на бок, а при нырянии переворачивается вверх дном. FRONT_FIRST подходит птицам и рыбам: меняет тангаж при подъёмах и пикированиях и кренится на поворотах. Любой стиль возвращается в вертикальное положение, когда питомец останавливается. См. Ориентация при движении.
  • centerOnBody рисует модель так, что середина её кубов совпадает с серединой её скрытого тела, вместо того чтобы ставить модель на ноги тела. Тогда модель движется, поворачивается и наклоняется вокруг тела, а её кликабельный бокс находится на том, что видят игроки. По умолчанию true для видов FLYING и AQUATIC и false для остальных. См. Центрирование модели на теле.

Справочник файла вида​

Поместите <species>.pet.yml куда угодно в plugins/FreeMinecraftModels/models/, обычно рядом с моделью, которую он использует. FreeMinecraftModels читает при запуске и при /fmm reload каждый файл, имя которого заканчивается на .pet.yml. Имя файла перед .pet.yml — это ID вида по умолчанию.

isEnabled: true
species: firefly
model: firefly
name: '&eFirefly'
body: ALLAY
scale: 1.0
health: 20
icon: GLOW_BERRIES
iconItemModel: ''
tamingFood:
- GLOW_BERRIES
breedingFood:
- GLOW_BERRIES
tameChance: 0.34
babyModel: ''
babyScale: 0.5
babyGrowthMinutes: 20
breedingCooldownMinutes: 5
loveSeconds: 30
variants:
- firefly
- firefly_blue:0.5
follow:
distance: 5
leashDistance: 12
teleportDistance: 24
roamRadius: 5
speed: 1.0
stay: true
float:
hoverHeight: 1.5
hoverVariance: 0.75
locomotion: FLYING
centerOnBody: true
orientation:
style: FRONT_FIRST
startSpeed: 0.6
fullSpeed: 4.0
maxTilt: 180
turnSpeed: 180
wildSpawn:
enabled: true
weight: 10
minGroup: 1
maxGroup: 3
placement: AIR
minLight: 0
maxLight: 15
cap: 4
worlds: []
environments:
- NORMAL
biomes:
- minecraft:plains
time: NIGHT
minY: -64
maxY: 320
behaviors:
- migrate
- stay
- follow_owner
- campfire: { radius: 12 }
- drift
- hover
- night_glow: { light: 15 }
migration:
scale: 2.0

Идентичность и внешний вид​

КлючПо умолчаниюЗначение
isEnabledtruefalse пропускает файл
speciesимя файлаID вида в нижнем регистре. Его используют сохранённые питомцы игроков и /fmm petadmin, поэтому не меняйте его, когда у игроков уже есть питомцы. Если два файла определяют один и тот же ID, сохраняется первый по пути, а консоль предупреждает
modelимя файлаМодель, которую носит питомец. Консоль предупреждает, если она не загружена, и питомец не может появиться
nameимя файлаИмя, показываемое над питомцем и в сообщениях. Поддерживает цветовые коды &
bodyALLAYТип ванильного моба, несущего модель. Препятствия при движении задевает именно его размер
scale1Общий размер, не менее 0.0625
health20Максимальное здоровье тела, не менее 1
iconGLOW_BERRIESПредмет-иконка меню
iconItemModelпустоМодель предмета (namespace:path) из ресурс-пака для иконки меню
variants[]Варианты окраса: model, model:weight или карта с model, weight и behaviors (см. Поведения вариантов). Дикое появление выбирает один по весу, приручённый питомец сохраняет свой, а детёныш берёт вариант родителя. Пусто означает только model. Варианты должны иметь одни и те же кости и анимации

Приручение и разведение​

КлючПо умолчаниюЗначение
tamingFood[]Названия предметов, приручающих дикую взрослую особь
breedingFood[]Названия предметов, переводящих взрослого питомца с владельцем в режим любви
tameChance0.333Вероятность того, что одно кормление приручит
babyModelпустоМодель, которую носит детёныш, размером babyScale. Пусто — модель варианта
babyScale0.5Размер детёныша относительно scale
babyGrowthMinutes20Минуты до того, как детёныш станет взрослым
breedingCooldownMinutes5Минуты до повторного разведения родителей
loveSeconds30Как долго накормленная взрослая особь ждёт партнёра

Движение​

Значения follow и float читаются поставляемыми модулями поведения, как указано.

КлючПо умолчаниюЗначение
follow.distance5follow_owner следует, как только владелец оказывается дальше этого значения. В его пределах питомец устроился и свободно блуждает
follow.leashDistance12За этим пределом follow_owner торопится
follow.teleportDistance24За этим пределом follow_owner телепортирует питомца к владельцу
follow.roamRadius5Как далеко от якоря drift, rain_bloom, wander и swim уводят питомца
follow.speed1Умножает скорость каждого поставляемого поведения, кроме migrate, не менее 0.05
follow.staytrueВелит ли правый клик питомцу оставаться на месте
float.hoverHeight1.5Блоки над землёй, которые держит летающий питомец
float.hoverVariance0.75Насколько далеко он отклоняется от этой высоты
locomotionFLYINGКак движется тело: FLYING, GROUNDED, AQUATIC, AMPHIBIOUS или STATIONARY. Также задаёт поведения по умолчанию
centerOnBodytrue для FLYING и AQUATICСм. Наклон и центрирование
orientation.styleUPRIGHTUPRIGHT, TOP_FIRST или FRONT_FIRST
orientation.startSpeed0.6Блоки в секунду, ниже которых модель остаётся вертикальной
orientation.fullSpeed4.0Блоки в секунду, при которых она полностью выравнивается по направлению движения
orientation.maxTilt180Максимальный наклон в градусах. 180 позволяет модели с ведущей верхней частью переворачиваться вверх дном
orientation.turnSpeed180Градусов в секунду, на которые может меняться наклон

Дикое появление​

Эти ключи действуют только в режиме CREATURES. Пустые списки разрешают всё.

КлючПо умолчаниюЗначение
wildSpawn.enabledtrueЖивёт ли вид дикими
wildSpawn.weight10Вес относительно других видов, которые могут появиться в том же месте. 0 — никогда не появляется. Файл со старым ключом chance (от 0 до 1) и без weight использует chance, умноженный на 10
wildSpawn.minGroup / maxGroup1 / minGroupРазмер группы
wildSpawn.placementиз locomotionGROUND, WATER, WATER_SURFACE или AIR. FLYING по умолчанию получает AIR, AQUATIC — WATER, остальные — GROUND. AIR требует твёрдого сухого верхнего блока, а WATER_SURFACE — водяного верхнего блока, в обоих случаях с двумя свободными блоками над ним
wildSpawn.minLight / maxLight0 / 15Уровень света, который нужен месту
wildSpawn.cap4Наибольшее число диких питомцев этого вида в пределах 8 чанков от игрока, для пополнения
wildSpawn.worlds[]Названия миров
wildSpawn.environments[]NORMAL, NETHER или THE_END
wildSpawn.biomes[]Ключи биомов, например minecraft:plains
wildSpawn.timeANYANY, DAY или NIGHT, для пополнения
wildSpawn.minY / maxY-64 / 320Диапазон высот

Поведения и миграция​

КлючПо умолчаниюЗначение
behaviorsповедения по умолчанию для locomotionМодули поведения, которые выполняет вид, с их настройками. См. Поведения
migrationнетВнешний вид вида в ночных миграциях. См. Раздел migration

Старые разделы campfire, rainBloom, glow, sting, dayPerch и drizzle игнорируются с предупреждением. См. Старые разделы взаимодействия с миром.

Справочник pets.yml​

plugins/FreeMinecraftModels/pets.yml создаётся при первом запуске. /fmm reload применяет изменения.

КлючПо умолчаниюЗначение
modeCOSMETICCOSMETIC или CREATURES. См. Режимы питомцев
maxEquippedPets0Сколько питомцев игрок может вывести одновременно. 0 означает без ограничения
petsInvulnerableToPlayerstrueИгнорируют ли питомцы с владельцем урон от игроков, кроме своего владельца
petsDiePermanentlyfalseПокидает ли погибший питомец коллекцию своего владельца
wildGenerationChance0.01Вероятность, от 0 до 0.9, что новый чанк получит группу диких питомцев, бросок повторяется после каждой группы
wildSpawnIntervalTicks400Тики между проходами пополнения
wildSpawnChunkChance0.01Вероятность того, что проход пополнения попробует данный чанк рядом с игроком
wildPetCapPerPlayer6Число диких питомцев всех видов в пределах 8 чанков от игрока, при котором пополнение прекращается
migrations.enabledtrueИдут ли ночные миграции
migrations.chancePerNight0.15Вероятность, от 0 до 1, что игрок получит стаю в данную ночь
migrations.minFlockSize / maxFlockSize8 / 14Размер стаи
migrations.altitude28Блоки над игроком или землёй, в зависимости от того, что выше
migrations.speed0.15Блоки за тик (0.15 — это 3 блока в секунду)
migrations.durationSeconds90Секунды от появления стаи до её удаления
migrations.viewDistance160Блоки, с которых игроки видят стаю
migrations.maxActiveFlocks3Наибольшее число стай в воздухе одновременно на всём сервере
migrations.species[]ID видов, которые могут мигрировать. Пусто означает каждый вид, который может (см. Ночные миграции)

Сообщения поддерживают цветовые коды &. $pet — это имя питомца, а $amount в maxEquippedMessage — лимит.

КлючПо умолчанию
tamedMessage&aYou tamed a $pet&a! It follows you now. &f/fmm pets &amanages your pets.
tameFailedMessage&7The $pet &7eats it, but is not tamed yet.
stayMessage&7Your $pet &7stays here.
followMessage&7Your $pet &7follows you again.
menuTitle&2Your pets
noPetsMessage&7You have no pets yet. Tame a wild creature by feeding it its favorite food.
equippedMessage&a$pet &ais with you.
unequippedMessage&7$pet &7went home.
maxEquippedMessage&cYou can only have $amount pets with you at once.
breedingCooldownMessage&7Your $pet &7is not ready to breed again yet.
bornMessage&aA $pet &awas born!

Команды и права​

КомандаПравоПо умолчаниюНазначение
/fmm petsfreeminecraftmodels.petstrueОткрывает ваше меню питомцев
/fmm petadmin mode [creatures|cosmetic]freeminecraftmodels.pets.adminopПоказывает режим питомцев или переключает его и сохраняет в pets.yml
/fmm petadmin listfreeminecraftmodels.pets.adminopВыводит список загруженных видов с их файлом, моделью, телом, едой для приручения и едой для разведения
/fmm petadmin spawn <species>freeminecraftmodels.pets.adminopСпавнит дикого питомца над блоком, на который вы смотрите, на расстоянии до 12 блоков. Только в режиме CREATURES
/fmm petadmin give <species>freeminecraftmodels.pets.adminopДобавляет взрослую особь вида в вашу собственную коллекцию и выводит её, если у вас не достигнут maxEquippedPets
/fmm petmigrate [species]freeminecraftmodels.pets.adminopНемедленно отправляет над вами миграционную стаю. См. Ночные миграции

Все три команды только для игроков. freeminecraftmodels.pets управляет доступом к меню питомцев, и по умолчанию это право есть у каждого игрока. freeminecraftmodels.pets.admin управляет доступом к /fmm petadmin и /fmm petmigrate, по умолчанию выдаётся операторам и входит в freeminecraftmodels.*. Приручение, разведение и команда питомцу оставаться на месте прав не требуют.

Устранение неполадок​

Ищите в консоли pet behavior, pet_behaviors и .pet.yml, чтобы найти предупреждения о модулях поведения. Каждое называет файл питомца или файл модуля, который нужно исправить.

Консоль сообщает Pets are off. Для версии сервера нет поддержки NMS во FreeMinecraftModels, либо сервер работает на версии ниже Minecraft 1.21.4.

Консоль сообщает Pet <species> (<file>) names model <model>, which is not loaded. Ключ model называет ID модели, которая не загрузилась. Вариант, чья модель не загрузилась, ничего не записывает; питомцы этого варианта носят model вида. Проверьте имя файла модели, которое и есть её ID, и журнал перезагрузки для этой модели.

Консоль сообщает Could not spawn pet <species>: <cause>. Питомец этого вида не смог появиться в мире по указанной причине, например из-за незагруженной модели, поведений, которые не смогли запуститься, или тела, которое не смогло появиться. Каждый вид и причина записываются один раз до следующей перезагрузки, как бы часто ни повторялась попытка появления.

Консоль сообщает the <section> section is ignored now that world interactions are behavior modules. В файле питомца всё ещё есть старый раздел взаимодействия с миром или строка glow: true, которую предупреждение называет the glow setting. См. Старые разделы взаимодействия с миром.

Консоль сообщает there is no pet behavior <name> in pet_behaviors/. Список behaviors называет модуль, у которого нет файла. Проверьте написание; предупреждение предлагает ближайшее имя, если оно есть. Существо загружается без этого модуля.

Консоль сообщает the pet behavior <name> failed to load. В файле модуля есть ошибка. Более раннее предупреждение называет файл и, для ошибки Lua, строку. Исправьте её и выполните /fmm reload либо удалите повреждённый поставляемый модуль, чтобы FreeMinecraftModels записал его снова.

Консоль сообщает the pet behavior <module> has no setting <setting> или <module>.<setting> must be .... Настройка в списке behaviors написана с ошибкой или имеет неверный тип. Предупреждение перечисляет настройки модуля или нужный тип, и значение по умолчанию остаётся. См. Значения настроек.

Консоль сообщает cannot run alongside the ones listed before it. Два модуля в списке не могут работать вместе, обычно потому что оба объявляют одну и ту же память, поведение или сенсор, как скопированный модуль, указанный рядом с оригиналом. Выполняется первый в списке, а другой исключается. См. Модули поведения питомцев.

Дикие питомцы не появляются. Убедитесь, что mode равен CREATURES и что /fmm petadmin list показывает вид. Затем проверьте wildSpawn: enabled, weight больше 0 и миры, окружения, биомы, свет и высоту, которые он разрешает. Чанки заселяются один раз, при генерации, поэтому исследованная область заполняется только через пополнение, которое по умолчанию медленное и останавливается на лимитах. /fmm petadmin spawn <species> размещает одного, чтобы проверить самого питомца.

Игроки не могут открыть /fmm pets. Им нужно freeminecraftmodels.pets, которое по умолчанию есть у каждого игрока, если только плагин прав не отзовёт его. См. Команды и права.

Ни одна стая не пролетает по небу. Стаи летают ночью в мирах типа Верхнего мира над игроками под открытым небом и только для видов FLYING с разделом migration:, чьи поведения запускают migrate. Вид, который не может мигрировать, при загрузке пишет has a migration section, but ... с исправлением. /fmm petmigrate <species> отправляет стаю немедленно.

Питомец ничего не делает или перестал что-то делать после обновления. Проверьте его список behaviors: питомец выполняет только названные в нём модули, а список заменяет поведения по умолчанию. Файл, чьи взаимодействия с миром были разделами, не выполняет ни одно из них, пока не перечислит их модули.

Свечение питомца не видно игрокам Bedrock. Свечение подсвечивает только кости отображения Java.