拉文茨

拉文茨

🗸 为自定义机制设计的Ravents。设计具有复杂触发条件的多波袭击,创建具有修改后属性、装备和骑乘塔楼的独特生物。生成控制:替换原版生物或添加自定义副本。

冒险

Ravents — Пользовательские рейды, триггеры и события мобов

Ravents — полностью data-driven мод, позволяющий создавать собственные рейды, события мобов и системы триггеров исключительно через JSON-файлы конфигурации — без написания кода.

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

Работает в одиночной игре и в мультиплеере. У каждого игрока свои независимые счётчики триггеров, статы и очередь рейдов.

🏆 Поддержать автора

────────────────────────────────────────────────────────────────

ВОЗМОЖНОСТИ

────────────────────────────────────────────────────────────────

  • Полностью на JSON — без кода, только конфиги
  • Пользовательские многоволновые рейды для каждого игрока
  • Более 15 типов условий триггеров
  • Пользовательские мобы с настраиваемым здоровьем, уроном, скоростью, бронёй, зачарованиями, эффектами, эффектами при ударе и наездниками
  • Стеки мобов (цепочки наездников, например скелет на зомби)
  • spawnOnDeath — мобы, которые при смерти разделяются на других
  • Полоса босса для каждого рейда со счётчиком волн
  • Эффект свечения у мобов рейда
  • Телепортация рейда к игроку, если он уходит далеко
  • Награды: предметы + опыт за завершение рейда
  • Одноразовые (singleUse) или бесконечно повторяющиеся рейды
  • Очередь рейдов для каждого игрока и сохранение (переживает отключение)
  • События замены/клонирования спавна сущностей
  • Полная поддержка мультиплеера — у каждого игрока свои рейды

────────────────────────────────────────────────────────────────

СТРУКТУРА ФАЙЛОВ

────────────────────────────────────────────────────────────────

Все файлы конфигурации находятся в:

.minecraft/config/Ravents/

Структура папок:

  config/
  ├── Ravents_settings.json        <- глобальные настройки
  ├── Ravents/
  │   ├── your_mob.json            <- определения пользовательских мобов
  │   ├── raids/
  │   │   └── your_raid.json       <- определения рейдов
  │   ├── events/
  │   │   └── your_event.json      <- определения событий спавна
  │   └── example/
  │       ├── custom_mob_example.json
  │       ├── raid_example.json
  │       └── event_example.json

Все примеры файлов создаются автоматически при первом запуске. Изучите их — они содержат все доступные поля с комментариями.

────────────────────────────────────────────────────────────────

ПОЛЬЗОВАТЕЛЬСКИЕ МОБЫ

────────────────────────────────────────────────────────────────

Пользовательские мобы определяются в JSON-файлах, размещённых непосредственно в папке Ravents/ (не в raids/ или events/).

Минимальный пример — my_zombie.json:

{
  "id": "my_zombie",
  "displayName": "Dark Zombie",
  "baseEntity": "minecraft:zombie",
  "health": 60.0,
  "damage": 8.0,
  "speed": 0.32,
  "scale": 1.5,
  "clearVanillaDrops": true,
  "dropEquipment": false,
  "drops": [
    { "item": "minecraft:iron_ingot", "min": 1, "max": 3, "chance": 0.8 }
  ]
}

Полный пример с бронёй, зачарованиями, эффектами, наездником и spawnOnDeath:

{
  "id": "knight_boss",
  "displayName": "Knight Boss",
  "baseEntity": "minecraft:zombie",
  "health": 200.0,
  "damage": 18.0,
  "speed": 0.28,
  "scale": 1.8,
  "clearVanillaDrops": true,
  "dropEquipment": false,
  "armor": {
    "head":  { "item": "minecraft:diamond_helmet",     "enchantments": { "minecraft:protection": 3 } },
    "chest": { "item": "minecraft:diamond_chestplate", "enchantments": { "minecraft:protection": 3 } },
    "legs":  { "item": "minecraft:diamond_leggings",   "enchantments": {} },
    "feet":  { "item": "minecraft:diamond_boots",      "enchantments": {} }
  },
  "hands": {
    "mainhand": { "item": "minecraft:diamond_sword", "enchantments": { "minecraft:sharpness": 4 } }
  },
  "effects": [
    { "id": "minecraft:resistance", "duration": 99999, "amplifier": 0 }
  ],
  "onHitEffects": [
    { "id": "minecraft:slowness", "duration": 60, "amplifier": 1 }
  ],
  "drops": [
    { "item": "minecraft:diamond", "min": 3, "max": 6, "chance": 1.0 },
    { "item": "minecraft:netherite_scrap", "min": 1, "max": 1, "chance": 0.3 }
  ],
  "spawnOnDeath": [
    { "mobId": "my_zombie", "count": 2 }
  ],
  "rider": {
    "baseEntity": "minecraft:skeleton",
    "displayName": "Archer Rider",
    "health": 30.0,
    "damage": 5.0,
    "speed": 0.3,
    "hands": {
      "mainhand": { "item": "minecraft:bow", "enchantments": { "minecraft:power": 3 } }
    }
  }
}

Справочник по полям:

  id                 — уникальный идентификатор (используется в рейдах/событиях)
  displayName        — имя над мобом (если nametagEnabled)
  baseEntity         — любой ванильный ID сущности
  health             — максимальное здоровье (полу-сердца × 2 = HP)
  damage             — базовый урон атаки
  speed              — скорость передвижения (ванильный зомби = 0.23)
  scale              — масштаб визуала + хитбокса (требуется Pehkui)
  clearVanillaDrops  — удалить стандартные дропы (true/false)
  dropEquipment      — выпадает ли снаряжение при смерти
  armor              — слоты снаряжения: head/chest/legs/feet
  hands              — mainhand / offhand
  enchantments       — карта: ID зачарования → уровень
  effects            — постоянные эффекты зелья на мобе
  onHitEffects       — эффекты, накладываемые на игрока при ударе
  drops              — пользовательская таблица лута
  spawnOnDeath       — мобы, спавнящиеся при смерти этого моба
  rider              — ещё одно определение моба, сидящего сверху

────────────────────────────────────────────────────────────────

ПОЛЬЗОВАТЕЛЬСКИЕ РЕЙДЫ

────────────────────────────────────────────────────────────────

Файлы рейдов размещаются в: config/Ravents/raids/

У каждого рейда есть волны мобов и триггер, определяющий, когда он запустится для игрока. У каждого игрока свой счётчик триггера — рейды НЕ делят состояние между игроками.

Базовый пример рейда — my_raid.json:

{
  "id": "my_raid",
  "displayName": "Forest Ambush",
  "singleUse": false,
  "spawnDistance": 8.0,
  "trigger": {
    "mobKillsTotal": 50
  },
  "waves": [
    {
      "mobs": [
        { "mobId": "my_zombie", "count": 4, "noDrop": false },
        { "mobId": "minecraft:skeleton", "count": 2, "noDrop": true }
      ]
    },
    {
      "mobs": [
        { "mobId": "knight_boss", "count": 1, "noDrop": false }
      ]
    }
  ],
  "rewards": {
    "items": {
      "minecraft:emerald": 5,
      "minecraft:golden_apple": 1
    },
    "experience": 100
  }
}

Этот рейд срабатывает, когда игрок убивает 50 мобов всего. Волна 1: 4 пользовательских зомби + 2 скелета. Волна 2: 1 рыцарь-босс. По завершению: 5 изумрудов, 1 золотое яблоко, 100 XP.

────────────────────────────────────────────────────────────────

УСЛОВИЯ ТРИГГЕРОВ

────────────────────────────────────────────────────────────────

Все поля триггера необязательны. Их можно свободно комбинировать. Все условия должны выполняться одновременно (логика AND). Внутри каждого конкретного списка элементы поддерживают группы OR через "or": true.

--- Триггеры на основе счётчиков (для каждого игрока) ---

  "mobKillsTotal": 100
      Срабатывает, когда игрок убил 100 мобов всего.

  "mobKillsSpecific": [
    { "id": "minecraft:creeper", "count": 10 }
  ]
      Срабатывает после убийства именно 10 криперов.

  "blocksBrokenTotal": 500
  "blocksBrokenSpecific": [
    { "id": "minecraft:diamond_ore", "count": 5 }
  ]

  "blocksPlacedTotal": 200
  "blocksPlacedSpecific": [
    { "id": "minecraft:tnt", "count": 3 }
  ]

  "blocksUsedTotal": 50
  "blocksUsedSpecific": [
    { "id": "minecraft:crafting_table", "count": 10 }
  ]

  "itemsUsed": 30
  "itemsUsedSpecific": [
    { "id": "minecraft:bread", "count": 5 }
  ]

  "jumps": 200
  "sit": 10            (нажатия приседания)
  "distanceWalked": 1000   (в блоках)
  "daysPlayed": 7
  "experienceLevels": 30   (текущий уровень опыта, не суммарный)

--- Одноразовые / условные триггеры ---

  "requiredItems": [
    { "item": "minecraft:nether_star", "count": 1 }
  ]
      Срабатывает, пока игрок держит Звезду Незера в инвентаре.

  "coordinateReached": [
    { "axis": "y", "value": -40 }
  ]
      Срабатывает, когда игрок достигает Y = -40 или ниже.
      axis: "x", "y" или "z"
      Отрицательное значение = игрок должен быть на этом уровне или ниже.
      Положительное значение = игрок должен быть на этом уровне или выше.

  "visitedDimension": ["minecraft:the_nether"]
      Срабатывает, как только игрок посетил Незер.

  "visitedBiome": ["minecraft:deep_dark"]
      Срабатывает, как только игрок посетил биом Deep Dark.

  "visitedStructure": ["minecraft:stronghold"]
      Срабатывает, как только игрок вошёл в крепость.

  "visitedPOI": ["minecraft:nether_portal"]
      Срабатывает, как только игрок оказался рядом с POI портала в Незер.

  "nearSpawnpoint": 10
      Срабатывает, когда игрок находится в радиусе 10 блоков от своей точки спавна.

--- Пример логики OR ---

  "mobKillsSpecific": [
    { "id": "minecraft:zombie",  "count": 20, "or": true },
    { "id": "minecraft:creeper", "count": 20, "or": false }
  ]

Это означает: (зомби ИЛИ крипер) убиты 20 раз. Элементы с "or": true группируются со следующим элементом. Группа разрешается как OR; группы разрешаются как AND.

--- Повторяющиеся рейды ---

  "singleUse": false   — рейд срабатывает снова каждый раз,
                         когда игрок достигает следующего кратного значения.
  Пример: mobKillsTotal = 50, singleUse = false
    → срабатывает на 50 убийств, снова на 100, снова на 150 и т.д.

  "singleUse": true    — срабатывает только один раз на игрока.

────────────────────────────────────────────────────────────────

ПРИМЕРЫ ТРИГГЕРОВ

────────────────────────────────────────────────────────────────

Пример 1 — срабатывает после входа игрока в Незер:

  "trigger": {
    "visitedDimension": ["minecraft:the_nether"]
  }

Пример 2 — срабатывает каждые 100 убийств мобов (повторяющийся):

  "trigger": {
    "mobKillsTotal": 100
  },
  "singleUse": false

Пример 3 — срабатывает после добычи 5 алмазов И посещения deep dark (требуется и то, и другое):

  "trigger": {
    "blocksBrokenSpecific": [
      { "id": "minecraft:diamond_ore", "count": 5 }
    ],
    "visitedBiome": ["minecraft:deep_dark"]
  }

Пример 4 — срабатывает, пока в инвентаре есть Звезда Незера, только один раз:

  "trigger": {
    "requiredItems": [
      { "item": "minecraft:nether_star", "count": 1 }
    ]
  },
  "singleUse": true

Пример 5 — срабатывает, когда игрок опускается ниже Y = -55:

  "trigger": {
    "coordinateReached": [
      { "axis": "y", "value": -55 }
    ]
  },
  "singleUse": true

Пример 6 — срабатывает после 7 игровых дней И уровня 30+:

  "trigger": {
    "daysPlayed": 7,
    "experienceLevels": 30
  }

────────────────────────────────────────────────────────────────

СОБЫТИЯ СПАВНА

────────────────────────────────────────────────────────────────

Файлы событий размещаются в: config/Ravents/events/

События позволяют заменять или клонировать ванильный спавн мобов вашими пользовательскими мобами с фильтрацией по измерению, биому и высоте.

Пример — spawn_milton.json:

{
  "id": "spawn_milton",
  "spawns": [
    {
      "targetEntity": "minecraft:zombie",
      "mobId": "knight_boss",
      "type": "replace",
      "dimensions": ["minecraft:overworld"],
      "biomes": ["*"],
      "minHeight": -64,
      "maxHeight": 320
    }
  ]
}

  type "replace"  — удаляет ванильного моба, спавнит пользовательского
  type "cloning"  — оставляет ванильного моба, дополнительно спавнит пользовательского
  dimensions      — список ID измерений, или ["*"] для всех
  biomes          — список ID биомов, или ["*"] для всех
  minHeight       — минимальная Y для применения события
  maxHeight       — максимальная Y для применения события

────────────────────────────────────────────────────────────────

КОМАНДЫ

────────────────────────────────────────────────────────────────

Все команды требуют уровень оператора 2.

  /ravents raids <name>              — запустить рейд на себя
  /ravents raids <name> <player>     — запустить рейд на игрока
  /ravents events <name>             — вызвать событие спавна
  /ravents events <name> <player>    — вызвать событие у игрока
  /ravents custom <name>             — заспавнить пользовательского моба рядом с собой
  /ravents stats                     — посмотреть свои статы
  /ravents stats <player>            — посмотреть статы другого игрока
  /ravents stop                      — остановить все активные рейды
  /ravents reload                    — перезагрузить все файлы конфигурации

Все аргументы команд поддерживают автодополнение по Tab из загруженных конфигов.

────────────────────────────────────────────────────────────────

ФАЙЛ НАСТРОЕК — Ravents_settings.json

────────────────────────────────────────────────────────────────

  raidBossBarEnabled    — показывать полосу босса во время рейдов (true/false)
  raidNameOnBarEnabled  — показывать название рейда + волну на полосе босса
  raidGlowEffectEnabled — мобы рейда светятся (true/false)
  nametagEnabled        — показывать displayName моба над его головой

────────────────────────────────────────────────────────────────

ЗАМЕТКИ ПО МУЛЬТИПЛЕЕРУ

────────────────────────────────────────────────────────────────

  • У каждого игрока полностью независимые счётчики триггеров
  • Рейды запускаются только для игрока, выполнившего условия
  • Статы (убийства, блоки, расстояние и т.д.) — для каждого игрока свои
  • Полоса босса видна ближайшим игрокам, а не только владельцу
  • При отключении: активные рейды сохраняются и восстанавливаются при повторном входе
  • Работает на LAN, выделенных серверах

────────────────────────────────────────────────────────────────

ЗАВИСИМОСТИ

────────────────────────────────────────────────────────────────

Обязательно: Architectury API Опционально: Pehkui (для поддержки масштаба мобов)

🌐Сторонний хостинг

Вам запрещено размещать мод на сторонних ресурсах. Вы можете публиковать новости о моде, но обязаны ссылаться на эту страницу мода для загрузки (или ссылаться на адрес загрузки с modrinth).