- Поддерживаемые версии
- 1.16
- 1.17
- 1.18
- 1.19
- 1.20
- 1.21
- Ядра и Прокси
- Bukkit
- Spigot
- Paper
- Минимальная версия Java
- 17
Что такое hAirdrops?
Представьте: на карте появляется точка интереса. Сначала — анонс и визуальный эффект. Затем — бой с мощным боссом, которого нельзя просто заспамить. После — этап вскрытия, где доступ к луту нужно заработать личными ударами. И только потом — открытие сундука со скрытым лутом под масками.
Код:
settings:
prefix: "#FDBE00&lСЕРВЕР&7: &f"
formatted:
year: "{0} г {1} мес {2} нед {3} д {4} ч {5} мин {6} сек"
month: "{0} мес {1} нед {2} д {3} ч {4} мин {5} сек"
week: "{0} нед {1} д {2} ч {3} мин {4} сек"
day: "{0} д {1} ч {2} мин {3} сек"
hour: "{0} ч {1} мин {2} сек"
minute: "{0} мин {1} сек"
second: "{0} сек"
messages:
noPermission: "{prefix}У вас #FDBE00недостаточно прав"
usage: "{prefix}/hairdrops reload &7|&f spawn &7(Айди) | &fremove &7(Айди) | &ftp &7(Айди) | &fadditems &7(Айди) (Инвентарь ID) | &fboss &7(Айди) | &fgivesummoner &7(Айди) [Игрок] [Количество]"
reload: "{prefix}Конфигурация #FDBE00успешно перезагружена"
spawnSuccess: "{prefix}Аирдроп #FDBE00{id}&f заспавнен"
spawnFailed: "{prefix}Не удалось #FDBE00заспавнить&f аирдроп #FDBE00{id}"
removeSuccess: "{prefix}Аирдроп #FDBE00{id}&f удалён"
notFoundActive: "{prefix}Активный аирдроп #FDBE00{id}&f не найден"
tpSuccess: "{prefix}Телепортация к аирдропу #FDBE00{id}&f выполнена"
definitionNotFound: "{prefix}Аирдроп #FDBE00{id}&f не найден"
playerNotFound: "{prefix}Игрок #FDBE00{player}&f не найден"
invalidAmount: "{prefix}Укажите #FDBE00корректное количество&f больше 0"
actions:
bossAlive:
- "[Message] {prefix}Сначала #FDBE00убей &fбосса"
breakingProgress:
- "[ActionBar] {prefix}Прогресс вскрытия: #FDBE00{breakingCurrent}/{breakingCount} &7({breakingMode})"
breakingReady:
- "[Message] {prefix}Требование на #FDBE00вскрытие &fвыполнено"
breakingLocked:
- "[Message] {prefix}Сломай аирдроп ещё #FDBE00{breakingRemainingCurrent}&f раз"
notReady:
- "[Message] {prefix}Аирдроп ещё #FDBE00закрыт&f, до открытия&7: #FDBE00{timeLeft}"
protectedBlock:
- "[Message] {prefix}Аирдроп #FDBE00невозможно &fсломать!"
editorOpened:
- "[Message] {prefix}Открыт #FDBE00редактор&f лута для аирдропа #FDBE00{id}&f и инвентаря #FDBE00{inventoryId}&f. ЛКМ #FDBE00+1%&f, ПКМ #FDBE00-1%&f, Shift+ЛКМ #FDBE00+25%&f, Shift+ПКМ #FDBE00-25%&f, Q #FDBE00забрать&f, Ctrl+Q #FDBE00удалить"
editorSaved:
- "[Message] {prefix}Инвентарь #FDBE00{inventoryId} &fдля аирдропа #FDBE00{id} &fсохранён"
editorChanceUpdated:
- "[Message] {prefix}Шанс #FDBE00предмета &fобновлён&7: #FDBE00{chance}%"
bossEditorOpened:
- "[Message] {prefix}Открыт #FDBE00редактор&f экипа #FDBE00босса &fдля аирдропа #FDBE00{id}&f, слоты слева направо&7: шлем, нагрудник, поножи, ботинки, основная рука, вторая рука"
bossEditorSaved:
- "[Message] {prefix}Экип #FDBE00босса&f для аирдропа#FDBE00 {id} &fсохранён"
Код:
# Материал блока, который будет поставлен в точке аирдропа.
# Используется Bukkit Material (например: BARREL, CHEST, SHULKER_BOX).
material: "BARREL"
# Время (в секундах) до открытия лута после спавна аирдропа.
# Используется на стадии opening.
openDelaySeconds: 60
# Время (в секундах), через которое аирдроп удаляется после открытия.
# Используется на стадии opened.
# -1 -> аирдроп не удаляется автоматически и сразу переводится в preSpawn.
removeDelaySeconds: 300
# Если true, аирдроп удалится сразу, когда инвентарь станет пустым.
# Если false, удаление только по таймеру removeDelaySeconds.
removeWhenEmpty: false
# Держать чанк аирдропа загруженным (plugin chunk ticket), пока активен аирдроп.
# Полезно, если сервер выгружает дальние чанки.
keepChunkLoaded: true
# Порядок стадий аирдропа (ветка жизненного цикла).
# Допустимые значения: preSpawn, bossFight, breaking, opening, opened.
# Ветка не должна быть пустой и должна содержать хотя бы одну активную стадию.
branch:
- "preSpawn"
- "bossFight"
- "breaking"
- "opening"
- "opened"
schedule:
# Включает автоматический запуск по расписанию.
enable: true
# Часовой пояс для расписания (ZoneId).
# Примеры: Europe/Moscow, UTC, America/New_York.
zone: "Europe/Moscow"
# Формат времени для schedule.times и плейсхолдера {nextSpawn}.
# Используется java.time DateTimeFormatter.
format: "HH:mm"
# Времена ежедневного спавна.
times:
- "18:00"
- "21:30"
spawn:
# Список миров для спавна.
# Можно списком или строкой через ";".
# Пусто -> плагин может выбирать любой загруженный мир.
world: "world;world_nether"
# Диапазон X: "min;max" или одно значение "100".
x: "-100;100"
# Диапазон Z: "min;max" или одно значение "100".
z: "-100;100"
# Y-координата:
# "random" -> по верхнему блоку колонки (highest block + 1),
# "64" -> фиксированная высота,
# "40;90" -> случайный Y в диапазоне.
y: "random"
# Сколько попыток подобрать валидную точку спавна.
maxAttempts: 32
# Проверка свободного места вверх от точки спавна.
# Количество проверяемых блоков воздуха (минимум 1).
airClearance: 2
schematic:
# Включить вставку схематики при спавне аирдропа.
enable: false
# Имя файла схематики в plugins/hAirdrops/schematics.
# Пример: example.schem
file: "example.schem"
# Визуальные эффекты для этого аирдропа настраиваются отдельно:
# plugins/hAirdrops/effects/<id>.yml (например effects/example.yml).
region:
# Создавать/обновлять регион WorldGuard вокруг аирдропа/схематики.
enable: false
# Дополнительный отступ (в блоках) вокруг границ структуры/аирдропа.
# 0 -> без расширения.
buffer: 5
# Проверять, что точка спавна находится только в разрешённых регионах.
# Требует WorldGuard и хотя бы один конкретный id региона в allowedRegions.
checkSpawnRegions: false
# Разрешённые регионы для checkSpawnRegions.
# "__global__" = не ограничивать спавн по конкретным регионам.
# Если в списке только "__global__", проверка checkSpawnRegions фактически пропускается.
allowedRegions:
- "__global__"
# Флаги WorldGuard по стадиям.
# Если у стадии флаги не указаны, плагин ничего не меняет.
# Формат:
# flags:
# preSpawn|bossFight|breaking|opening|opened:
# <id-флага>: "<значение>"
flags:
preSpawn:
pvp: "allow"
chest-access: "allow"
use: "allow"
blocked-cmds: "god,essentials:god"
bossFight:
pvp: "allow"
chest-access: "allow"
use: "allow"
blocked-cmds: "god,essentials:god"
breaking:
pvp: "allow"
chest-access: "allow"
use: "allow"
blocked-cmds: "god,essentials:god"
opening:
pvp: "allow"
chest-access: "allow"
use: "allow"
blocked-cmds: "god,essentials:god"
opened:
pvp: "allow"
chest-access: "allow"
use: "allow"
blocked-cmds: "god,essentials:god"
# Биомы, где спавн запрещён.
blockedBiomes:
- "OCEAN"
- "DEEP_OCEAN"
- "RIVER"
- "FOREST"
- "MOUNTAINS"
- "DARK_FOREST"
- "GIANT_TREE_TAIGA_HILLS"
- "GIANT_TREE_TAIGA"
- "WOODED_MOUNTAINS"
- "WOODED_HILLS"
- "TAIGA"
- "BEACH"
- "BIRCH_FOREST"
# Блоки под аирдропом, на которых спавн запрещён.
blockedBlocks:
- "WATER"
- "LAVA"
- "MAGMA_BLOCK"
- "CACTUS"
# Погода, при которой спавн запрещён.
# Допустимые значения: CLEAR, RAIN, THUNDER.
blockedWeather:
- "THUNDER"
bossBar:
# Общие правила для range:
# 0 -> скрыть bossbar,
# -1 -> показывать всем игрокам,
# >0 -> радиус в блоках от центра аирдропа/точки preSpawn.
#
# title поддерживает цветовые коды и плейсхолдеры:
# {id} {timeLeft} {secondsLeft} {world} {x} {y} {z} {nextSpawn} {bossHealth} {bossMaxHealth}
# {breakingMode} {breakingCount} {breakingHits} {breakingCurrent} {breakingRemainingCurrent} {breakingCompletedPlayers}
preSpawn:
# Стадия до фактического спавна (по расписанию).
title: "&fДо респавна&7: #FDBE00{timeLeft}"
color: "YELLOW"
style: "SEGMENTED_10"
range: 0
flags: []
bossFight:
# Стадия боя с боссом.
title: "&fСтраж #FDBE00аирдропа &fещё жив &7({bossHealth}/{bossMaxHealth})"
color: "RED"
style: "SOLID"
range: 60
flags:
- "DARKEN_SKY"
breaking:
# Стадия вскрытия аирдропа ударами.
title: "&fВскрытие #FDBE00аирдропа &7({breakingCurrent}/{breakingCount})"
color: "YELLOW"
style: "SEGMENTED_10"
range: 60
flags: []
opening:
# Стадия ожидания открытия лута.
title: "&fОткрытие #FDBE00аирдропа &fчерез #FDBE00{timeLeft}"
color: "BLUE"
style: "SEGMENTED_10"
range: 60
flags: []
opened:
# Стадия после открытия, до удаления.
title: "&fАирдроп #FDBE00открыт&f, до удаления&7: #FDBE00{timeLeft}"
color: "GREEN"
style: "SEGMENTED_10"
range: 60
flags: []
hologram:
# Включить голограмму над аирдропом.
enable: true
# Режим голограммы:
# vanilla -> ArmorStand-строки (без внешних плагинов),
# fancy -> FancyHolograms,
# decent -> DecentHolograms.
mode: "vanilla"
# Вертикальное смещение голограммы от точки аирдропа.
offsetY: 1.3
# Расстояние между строками голограммы.
lineSpacing: 0.28
# Текст голограммы по стадиям.
# Поддерживаются те же основные плейсхолдеры, что и в bossBar/actions.
# Для breaking дополнительно доступны:
# {breakingMode} {breakingCount} {breakingHits} {breakingCurrent} {breakingRemainingCurrent} {breakingCompletedPlayers}
preSpawn:
lines:
- "#FDBE00Тестовый аирдроп"
- "&7До спавна: #FDBE00{timeLeft}"
- "&7Следующий спавн: #FDBE00{nextSpawn}"
bossFight:
lines:
- "#FDBE00Тестовый аирдроп"
- "&7Здоровье: #FDBE00{bossHealth}&7/#FDBE00{bossMaxHealth}"
- "&7Координаты: #FDBE00{x} {y} {z}"
breaking:
lines:
- "#FDBE00Тестовый аирдроп"
- "&7Вскрытие: #FDBE00{breakingCurrent}&7/#FDBE00{breakingCount}"
- "&7Режим: #FDBE00{breakingMode}"
opening:
lines:
- "#FDBE00Тестовый аирдроп"
- "&7Открытие через: #FDBE00{timeLeft}"
- "&7Мир: #FDBE00{world}"
opened:
lines:
- "#FDBE00Тестовый аирдроп"
- "&7До удаления: #FDBE00{timeLeft}"
- "&7Координаты: #FDBE00{x} {y} {z}"
boss:
# Настройки босса. Секция нужна только если branch содержит bossFight.
# Режим дропа босса:
# vanilla -> обычный дроп моба Minecraft,
# plugin -> только экипировка из редактора босса,
# disable -> без дропа.
lootMode: "plugin"
# Тип сущности босса (EntityType), например: ZOMBIE, SKELETON, WITHER_SKELETON.
type: "ZOMBIE"
# HP босса (минимум 1.0).
health: 500.0
# Отображаемое имя босса.
name: "#FDBE00Страж аирдропа"
# Показывать ли имя всегда.
nameVisible: true
# Включить свечение сущности.
glowing: true
# Радиус случайного появления босса вокруг аирдропа (в блоках).
spawnRadius: 5.0
# Максимальное удаление босса от аирдропа.
# Если уйдёт дальше, плагин вернёт его ближе.
maxDistanceFromAirdrop: 30.0
# Кастомный AI босса.
customAi:
# Включить расширенный AI.
enable: false
# Улучшенный выбор цели (проверка достижимости/приоритета ближних целей).
improvedTargeting: true
# Улучшенное движение, если босс застрял.
improvedMovement: true
# Радиус поиска цели в блоках.
targetRange: 32
# Частота пересчёта цели (в тиках, 20 = 1 сек).
retargetIntervalTicks: 20
# Максимальная разница по высоте для целей.
maxVerticalDifference: 12
# Режим возраста для Ageable-сущностей (например, зомби/животные):
# true -> детёныш, false -> взрослый.
baby: false
# Постоянные/долгие эффекты босса.
effects:
# Тип эффекта (PotionEffectType), например: SPEED, INCREASE_DAMAGE.
- type: "SPEED"
# Длительность в тиках (20 тиков = 1 сек). Минимум 20.
duration: 999999
# Уровень эффекта: 0 = I, 1 = II и т.д.
amplifier: 0
# true -> "тихий" эффект.
ambient: false
# true -> показывать частицы.
particles: true
- type: "INCREASE_DAMAGE"
duration: 999999
amplifier: 1
ambient: false
particles: true
breaking:
# Включить стадию вскрытия аирдропа ударами (если есть в branch).
enable: true
# Сколько ударов нужно для перехода дальше.
count: 50
# Как засчитывается прогресс вскрытия:
# break -> попытка сломать блок аирдропа;
# click -> левый клик по блоку аирдропа.
triggerMode: "break"
# Режим ударов:
# self -> каждый игрок набивает count сам, удары не стакаются между игроками;
# global -> count ударов суммарно на всех игроков.
breakMode: "self"
loot:
# Заголовок инвентаря аирдропа.
title: "#FDBE00Тестовый аирдроп"
# Размер инвентаря (9..54, кратно 9).
size: 27
# true -> предметы из шаблона кладутся в случайные свободные слоты.
# false -> сначала в сохранённые слоты шаблона, иначе в случайные свободные.
randomSlots: true
summoner:
# Необязательная секция предмета-вызова для команды /hairdrops givesummoner <id>.
# Если секции нет, используются встроенные значения по умолчанию.
# Материал предмета summoner.
material: "FIREWORK_STAR"
# Имя предмета. Поддерживается плейсхолдер {id}.
name: "#FDBE00Фаер аирдропа &f{id}"
# Описание предмета. Поддерживается плейсхолдер {id}.
lore:
- "&7Призывает аирдроп &f{id}"
- "&7ПКМ по блоку или в воздух"
- "&7Точка спавна берётся из цели игрока"
# Необязательные чарки.
# Формат: "ЧАРКА;УРОВЕНЬ"
enchants:
- "DURABILITY;1"
# Необязательные item flags.
flags:
- "HIDE_ENCHANTS"
hideDrop:
# Скрыть реальные предметы в луте и показывать маски.
# При клике по маске игрок получает настоящий предмет из этого слота.
enable: false
# Кулдаун между получениями предметов одним игроком (в миллисекундах).
# 1000 = 1 сек.
cooldown: 1000
# Набор предметов-масок (выбирается случайно для каждого занятого слота).
hideItems:
1:
material: WHITE_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
2:
material: ORANGE_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
3:
material: MAGENTA_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
4:
material: LIGHT_BLUE_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
5:
material: YELLOW_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
6:
material: LIME_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
7:
material: PINK_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
8:
material: GRAY_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
9:
material: LIGHT_GRAY_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
10:
material: CYAN_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
11:
material: PURPLE_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
12:
material: BLUE_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
13:
material: BROWN_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
14:
material: GREEN_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
15:
material: RED_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
16:
material: BLACK_DYE
name: "#FDBE00&kСлучайный предмет"
lore:
- "&7Нажми, чтобы забрать"
- "&7Этот предмет из аирдропа"
actions:
# Для убийства босса можно задать:
# bossKilled -> базовый список (fallback, если нет подходящего bossKilled_N)
# bossKilled_N -> список для N и более участников урона (выбирается максимальный N <= фактическому количеству)
# Пример: есть только bossKilled_3, а били 5 игроков -> будет использован bossKilled_3.
#
# Дополнительные плейсхолдеры для bossKilled / bossKilled_N:
# {bossKilled_players} -> число игроков, нанёсших урон боссу
# {bossKilled_killer_name} -> имя убийцы босса (если убийца игрок)
# {bossKilled_killer_hp} -> урон убийцы по боссу
# {bossKilled_1_name}/{bossKilled_1_hp}, {bossKilled_2_name}/{bossKilled_2_hp}, ...
# где 1,2,3... — место в топе по нанесённому урону.
spawn:
- "[BROADCAST] #FDBE00Тестовый аирдроп &fпоявился в мире #FDBE00{world} &fна координатах #FDBE00{x} {y} {z}"
- "[SOUND] sound: ENTITY_ENDER_DRAGON_GROWL && volume: 1.0 && pitch: 1.0"
bossKilled:
- "[BROADCAST] &fБосс #FDBE00тестового аирдропа &fубит, теперь нужно #FDBE00вскрыть &fаирдроп"
- "[SOUND] sound: ENTITY_WITHER_DEATH && volume: 0.6 && pitch: 1.2"
bossKilled_1:
- "[BROADCAST] &fБосс #FDBE00тестового аирдропа &fубит, теперь нужно #FDBE00вскрыть &fаирдроп"
- "[BROADCAST] &fИгрок {bossKilled_killer_name} убил босса и нанёс ему {bossKilled_killer_hp} урона"
- "[BROADCAST] &fИгрок {bossKilled_1_name} нанёс {bossKilled_1_hp} урона"
- "[SOUND] sound: ENTITY_WITHER_DEATH && volume: 0.6 && pitch: 1.2"
bossKilled_2:
- "[BROADCAST] &fБосс #FDBE00тестового аирдропа &fубит, теперь нужно #FDBE00вскрыть &fаирдроп"
- "[BROADCAST] &fИгрок {bossKilled_killer_name} убил босса и нанёс ему {bossKilled_killer_hp} урона"
- "[BROADCAST] &fИгрок {bossKilled_1_name} нанёс {bossKilled_1_hp} урона"
- "[BROADCAST] &fИгрок {bossKilled_2_name} нанёс {bossKilled_2_hp} урона"
- "[SOUND] sound: ENTITY_WITHER_DEATH && volume: 0.6 && pitch: 1.2"
bossKilled_3:
- "[BROADCAST] &fБосс #FDBE00тестового аирдропа &fубит, теперь нужно #FDBE00вскрыть &fаирдроп"
- "[BROADCAST] &fИгрок {bossKilled_killer_name} убил босса и нанёс ему {bossKilled_killer_hp} урона"
- "[BROADCAST] &fИгрок {bossKilled_1_name} нанёс {bossKilled_1_hp} урона"
- "[BROADCAST] &fИгрок {bossKilled_2_name} нанёс {bossKilled_2_hp} урона"
- "[BROADCAST] &fИгрок {bossKilled_3_name} нанёс {bossKilled_3_hp} урона"
- "[SOUND] sound: ENTITY_WITHER_DEATH && volume: 0.6 && pitch: 1.2"
unlock:
- "[BROADCAST] #FDBE00Тестовый аирдроп &fбыл #FDBE00открыт&f, успейте #FDBE00забрать&f лут"
- "[SOUND] sound: BLOCK_BEACON_ACTIVATE && volume: 1.0 && pitch: 1.0"
cooldown:
- "[MESSAGE] {prefix}Подожди #FDBE00{timeLeft}&f перед #FDBE00следующим&f предметом"
summonerUseSuccess:
- "[MESSAGE] {prefix}Фаер аирдропа #FDBE00{id}&f активирован в точке #FDBE00{x} {y} {z}"
- "[SOUND] sound: ENTITY_FIREWORK_ROCKET_LAUNCH && volume: 1.0 && pitch: 1.15"
summonerUseFailed:
- "[MESSAGE] {prefix}Не удалось #FDBE00вызвать&f аирдроп #FDBE00{id}&f в этой точке"
- "[SOUND] sound: BLOCK_NOTE_BLOCK_BASS && volume: 1.0 && pitch: 0.7"
remove:
- "[BROADCAST] #FDBE00Тестовый аирдроп &fбыл #FDBE00украден&f цыганями, расход"
- "[SOUND] sound: ENTITY_ITEM_BREAK && volume: 0.7 && pitch: 0.8"
Код:
effects:
# Уникальный ключ эффекта (можно любой).
# Можно добавить неограниченное количество секций.
idle_ring:
enable: true
phases: "preSpawn;breaking;opening;opened"
particle: "ENCHANTMENT_TABLE"
shape: "circle" # POINT, CIRCLE, SPHERE, HELIX, LINE, BOX
intervalTicks: 6 # как часто рисовать (20 тиков = 1 сек)
points: 28 # плотность фигуры
radius: 1.8 # радиус круга/сферы/box
height: 0.0 # для helix/box
count: 1
speed: 0.0
offset:
x: 0.0 # смещение центра фигуры от блока аирдропа
y: 0.25
z: 0.0
spread:
x: 0.0
y: 0.0
z: 0.0
viewRange: 64 # >0: рисуется только игрокам в радиусе
force: false # используется когда viewRange <= 0
pre_spawn_beacon:
enable: true
phase: "preSpawn" # можно phase или phases
particle: "END_ROD"
shape: "helix"
intervalTicks: 2
points: 22
radius: 0.9
height: 2.5
count: 1
offset:
x: 0.0
y: 0.1
z: 0.0
viewRange: -1 # -1/0 -> world.spawnParticle
force: true
breaking_crackle:
enable: true
phase: "breaking"
particle: "CRIT_MAGIC"
shape: "circle"
intervalTicks: 3
points: 18
radius: 1.15
count: 1
offset:
y: 0.35
viewRange: 72
opening_sphere:
enable: true
phase: "opening"
particle: "SPELL_WITCH"
shape: "sphere"
intervalTicks: 8
points: 34
radius: 1.5
count: 1
offset:
y: 0.7
viewRange: 72
opened_beam_up:
enable: true
phase: "opened"
particle: "CLOUD"
shape: "line"
intervalTicks: 4
points: 18
count: 1
offset:
x: 0.0
y: 0.0
z: 0.0
lineTo:
x: 0.0
y: 4.0
z: 0.0
spread:
x: 0.02
y: 0.02
z: 0.02
speed: 0.01
viewRange: 96
boss_warning_box:
enable: true
phase: "bossFight"
particle: "CRIT"
shape: "box"
intervalTicks: 3
points: 24
radius: 2.2
height: 2.8
count: 1
offset:
y: 0.1
viewRange: 80
# Пример цветной пыли (Particle.DustOptions)
redstone_aura:
enable: true
phases:
- "preSpawn"
- "breaking"
- "opening"
- "opened"
particle: "REDSTONE"
shape: "circle"
intervalTicks: 5
points: 20
radius: 1.2
count: 1
color:
red: 253
green: 190
blue: 0
size: 1.2
offset:
y: 0.35
viewRange: 70
# Пример particle с BlockData (FALLING_DUST/BLOCK_CRACK и т.п.)
block_dust:
enable: false
phase: "opened"
particle: "BLOCK_CRACK"
material: "GOLD_BLOCK"
shape: "point"
intervalTicks: 2
count: 4
offset:
y: 1.0
spread:
x: 0.25
y: 0.15
z: 0.25
speed: 0.05
viewRange: 48
# Пример particle с ItemStack (ITEM_CRACK)
item_spark:
enable: false
phases: "opened"
particle: "ITEM_CRACK"
item: "GOLD_NUGGET"
shape: "point"
intervalTicks: 2
count: 3
offset:
y: 1.1
spread:
x: 0.2
y: 0.1
z: 0.2
speed: 0.02
viewRange: 48
Фазовая модель
Каждый аирдроп проходит через цепочку стадий:preSpawn → bossFight → breaking → opening → opened
Вы можете включать или отключать любые фазы, создавая разные типы ивентов: от быстрого сундука до полноценного рейда с боссом.
Расписание для каждого аирдропа
У каждого ивента своё расписание с поддержкой часовых поясов. Никаких общих таймеров — полный контроль.
Схематики + WorldGuard + фазовая защита
При спавне аирдропа вставляется схематик, автоматически создаётся регион WorldGuard, а флаги безопасности меняются в зависимости от текущей фазы. На этапе боя — PvP разрешён, на этапе открытия — защита от взрывов и гриферства. Этого нет больше нигде.
Продвинутая босс-система
- Отдельная фаза bossFight
- Кастомный AI (улучшенное движение и выбор цели)
- Полная настройка: тип моба, HP, имя, эффекты зелий
- GUI-редактор экипировки босса
- Сбор урона по игрокам, топ-дамагеры, убийца
- Ветвление действий после смерти босса
Уникальная механика вскрытия (Breaking)
Два режима:- Global — общий прогресс на весь сервер
- Self — каждый игрок лично должен нанести N ударов, иначе сундук для него не откроется
HideDrop — скрытый лут
Все предметы в сундуке скрыты под масками. Игрок кликает по «фальшивке» и получает реальный предмет. Защита от авто-лута, двойных кликов и мгновенного выноса сундука.
Визуал по фазам
- BossBar настраивается под каждую стадию
- Hologram с поддержкой FancyHolograms, DecentHolograms и vanilla (ArmorStand)
- Частицы с формами: point, circle, sphere, helix, line, box
- Поддержка REDSTONE color, BlockData, ItemStack
- Зависимости
- Опционально: WorldGuard, WorldEdit/FAWE, FancyHolograms/DecentHolograms, PlaceholderAPI, Vault
- Команды и права
Команда Право Описание /hairdrops reload hairdrops.admin Перезагрузка плагина /hairdrops spawn (Айди) hairdrops.admin Спавн аирдропа /hairdrops remove (Айди) hairdrops.admin Удаление аирдропа /hairdrops tp (Айди) hairdrops.admin Телепортация к аирдропу /hairdrops additems (Айди) (Инвентарь айди) hairdrops.admin Добавить предмет в аирдроп в указанный инвентарь /hairdrops boss (Айди) hairdrops.admin Добавить предметы для босса в указанный аирдроп /hairdrops givesummoner (Айди) (Игрок) (Кол-во) hairdrops.admin Выдать предмет для спавна аирдропа игроком путём размещения на рандомной локации