- Для версий
- 1.16.+
- 1.19.+
- 1.20.+
- 1.21.+
Игрок подходит к стойке, смотрит возможные награды и выбирает способ открытия. Лунное колесо, Орбита, Спираль, Сокровищница, Мечи судьбы и Колодец душ используют блоки, предметы и частицы Minecraft: отдельный ресурс-пак для них не нужен.
Для владельца сервера
В /cases admin можно создавать и изменять кейсы, награды и наборы, задавать веса выпадения, оформление, условия открытия и доступные анимации. Изменения сохраняются в конфигурации. Названия и сообщения поддерживают HEX/RGB; заголовки меню адаптируются для светлого фона.
Для игроков
- Каталог кейсов, просмотр наград и количество ключей.
- Выбор конкретной анимации или случайного варианта.
- Дополнительные стили можно открыть за баллы PlayerPoints или валюту через Vault. Покупка стиля не повышает шанс награды.
- Меню ожидаемых выдач помогает понять, на каком режиме нужно получить награду.
Как проходит открытие
Нажмите на стойку, выберите кейс и посмотрите его содержимое. Выберите доступную анимацию и откройте кейс за ключ. Приз при заполненном инвентаре остаётся в очереди: освободите место и используйте /cases claim.
Настройка и сеть серверов
Стойку можно связать с одним кейсом или каталогом. Для кейса настраиваются разрешённые миры, право доступа и обязательное открытие у стойки. По умолчанию одновременно работает до восьми сцен.
Для одного сервера предусмотрено локальное хранилище H2. Для нескольких режимов — MariaDB, общий или отдельный баланс ключей, выбор сервера выдачи и очередь до первого входа. Redis можно подключить для ускорения уведомлений; учёт хранится в SQL.
Где пригодится
Поставьте общую стойку на спавне, выделите отдельный кейс для наград за события или предложите игрокам выбор оформления открытия. Набор предметов можно показать целиком перед открытием, а разные режимы — связать общей системой ключей.
Скриншоты
Игровые кадры из локального демонстрационного мира: стойка, анимации, просмотр наград и выбор оформления.
Основные команды и права
- /cases — каталог; /case и /mccases — алиасы.
- /cases open <кейс> [анимация] — открыть кейс.
- /cases claim — получить ожидающий приз; /cases deliveries — очередь выдач.
- /cases admin — редактор; /cases network — состояния режимов; /cases storage и /cases redis — настройки подключений.
- /cases stand create <id> <кейс> — создать стойку в текущей позиции.
- /mccases:cases purchase <ник|UUID> <кейс> <количество> [UUID-операции] — ручная выдача для администратора. Без UUID каждый вызов начисляет новую порцию ключей; повтор одного UUID не дублирует выдачу.
- /cases grant <онлайн-игрок|UUID> <кейс> <количество> <UUID-операции> — начислить ключи. Повтор той же операции не создаёт повторное начисление.
- mccases.use доступно игрокам по умолчанию; mccases.admin — операторам. mccases.owner и mccases.developer включают административные права и выдаются отдельно.
Если прокси фильтрует команды с двоеточием, добавьте точное исключение для mccases:cases. Права на выдачу и редактор продолжает проверять mcCases.
Совместимость и дополнения
Проверены Paper 1.16.5, 1.19.4, 1.20.6, 1.21.11, 26.1.2, 26.2 и 26.3. Используйте Java, подходящую выбранному серверному ядру. Версия 1.8 в этот выпуск не входит.
Плагин работает без UtilM и ключа активации. Фоновая проверка новой версии на mcdev.su необязательна: её можно отключить в настройках. Она только сообщает об обновлении; установка остаётся ручной.
Дополнительно поддерживаются PlayerPoints, Vault с провайдером экономики, в том числе CMI через CMIEInjector, DialogEngine и mcReferral. Создание реферальных кодов и приглашения при входе принадлежат mcReferral: mcCases открывает его меню. Без DialogEngine используются нативные диалоги Paper либо наковальня в зависимости от возможностей ядра.
Установка и обновление
Распакуйте архив и поместите mcCases-2.0.1.jar в plugins остановленного тестового сервера Paper. Запустите сервер и настройте демонстрационный кейс через /cases admin. В комплекте — общие демонстрационные настройки без данных рабочих серверов. Для внешней БД и Redis секреты задаются через переменные окружения, указанные в конфигурации.
У версии 2.0 новая структура данных и команд. Старую конфигурацию 1.0.x нельзя считать готовой конфигурацией 2.0. Перед переносом AdvancedCrates сохраните настройки, ключи и данные покупок. Замены JAR недостаточно: нужно перенести кейсы и права игроков, сохранить старые физические ключи и обновить выдачу магазина. Проверьте результат до открытия сервера для игроков.
Обращения и помощь с переносом: поддержка mcDev. При ошибке выдачи сохраните показанный номер операции.
Конфигурация
# Локальный пример mcCases: H2 без внешней базы, покупки с сайта выключены.
# Настройки доступны в /cases admin; весь файл проверяется перед применением.
# Цвета: &#RRGGBB и &a; <accent>/<secondary> используют палитру interface.
# Версия формата конфигурации; оставьте 1.
schema: 1
# Фоновая проверка публичной версии mcCases на mcdev.su: через 30 секунд после
# запуска, затем раз в сутки. Только уведомление администраторам, без установки.
updates:
# Выключить или включить можно также в «Настройки» внутри /cases admin.
enabled: true
# Уникальный ID этого режима. У каждого работающего узла сети свой ID.
server: local
# Область ключей и купленных анимаций. Общей сети нужны одинаковая scope и общая SQL-база. Не меняйте server/scope без переноса данных.
scope: demo
# Профиль сохраняется сразу; принятое подключение меняется отдельно через
# «Настройки → Хранилище» после проверки и переноса журнала.
# Профиль базы данных. Смена принятого подключения выполняется через «Настройки → Хранилище» с переносом журнала.
storage:
# H2 — локальный файл; MARIADB — общая база нескольких серверов.
type: H2
# Имя локальной базы в plugins/mcCases, без пути и расширения .mv.db.
h2-file: cases
# Адрес MariaDB; настройки MariaDB не используются при type: H2.
host: '127.0.0.1'
# TCP-порт MariaDB, 1..65535.
port: 3306
# Имя заранее созданной базы MariaDB.
database: mccases
# Пользователь MariaDB с доступом к этой базе.
username: cases
# Ссылка env:ИМЯ_ПЕРЕМЕННОЙ или file:имя_файла в plugins/mcCases. Сам пароль сюда не записывайте; для H2 ссылка не читается.
password-ref: 'env:MCCASES_DB_PASSWORD'
# Использовать TLS с проверкой сертификата MariaDB; сертификат должен быть доверенным для Java.
tls: true
# Максимум соединений с базой, 1..32; обычно достаточно 4.
pool-size: 4
# Пусто — встроенный Connector/J3.5.11. Замена требует явного SHA256 файла.
# Пусто — встроенный Connector/J 3.5.11. Для совместимого заменённого драйвера в plugins/mcCases/libraries укажите его SHA-256.
driver-sha256: ''
# Redis ускоряет пробуждение очереди. SQL хранит ключи и результаты выдач.
# Одинаковые namespace/scope объединяют сигналы; между средами меняйте namespace.
# Уведомления между узлами. Ключи и результаты выдач всегда хранятся в SQL.
redis:
# Включить Redis. При его недоступности очередь продолжает читаться из SQL.
enabled: false
# Адрес отдельного Redis-сервера; Redis Cluster здесь не настраивается.
host: '127.0.0.1'
# TCP-порт Redis, 1..65535.
port: 6379
# ACL-пользователь Redis. Без авторизации оставьте username и password-ref пустыми.
username: default
# Ссылка env: или file: на пароль, по тем же правилам, что storage.password-ref.
password-ref: 'env:MCCASES_REDIS_PASSWORD'
# TLS с проверкой сертификата Redis.
tls: true
# Префикс уведомлений: одинаковый у узлов одной среды, разный у тестовой и рабочей среды.
namespace: mccases
# Навигация к самостоятельному mcReferral. Его join-подсказка и программа
# настраиваются в /ref settings; mcCases не ведёт второй учёт рефералов.
# Переход к самостоятельному плагину mcReferral; реферальная программа настраивается в /ref settings.
referrals:
# Показывать переход к mcReferral. Без провайдера игрок получает объяснение.
enabled: true
# AUTO выбирает DialogEngine, затем нативный диалог Paper, затем наковальню.
# Ввод текста и общая палитра. Остальное оформление сохраняется редактором в interface.ui.
interface:
# AUTO, NATIVE, ANVIL или DIALOG_ENGINE; принудительный режим требует соответствующего API.
input: AUTO
# Основной цвет <accent>, строго #RRGGBB.
accent: '#8FE3CF'
# Дополнительный цвет <secondary>, строго #RRGGBB.
secondary: '#B1A0F7'
# «Настройки → Оформление меню» сохраняет interface.ui сюда целиком.
# Переменные каждого поля показаны в редакторе; неизвестные отклоняются.
# ID магазина/сервера и товаров берутся из действующего CDonate.
# Включайте после проверки адаптера до ACK; текущая конфигурация — локальное демо.
# Приём кейсовых покупок с сайта; этот пример не содержит настоящих ID товаров.
commerce:
# Включить совместимый адаптер CDonate/CloudPayments, сохраняющий покупку до её подтверждения сайту.
enabled: false
# ID магазина CDonate. Значение 0 допустимо в выключенном демо.
shop-id: 0
# ID сервера в CDonate, а не строковый server в начале этого файла.
server-id: 0
# Предел сохранённых квитанций, 1..1000000. При заполнении новые покупки ждут обработки.
max-receipts: 100000
# Соответствие ID товара и ID кейса, например {'123': demo}. Пусто — ни одного товара.
products: {}
# Ограничения визуальных сцен на одном сервере.
limits:
# Одновременные анимации, 1..32. При занятом лимите игрок получает сообщение, ключ сохраняется.
active-scenes: 8
# Цена строкой, VAULT с точностью до сотых, POINTS целыми баллами.
# Купленный доступ общий для кейсов в одной scope; покупка не меняет шансы приза.
# Цена и условия дополнительных анимаций. Первая анимация каждого кейса базовая и не требует покупки.
scene-shop:
# Колесо предметов.
# currency: FREE, POINTS (PlayerPoints) или VAULT (экономика через Vault).
# price: Цена в кавычках: неотрицательная; VAULT — до сотых, POINTS — целое, FREE — '0'.
# weight: Вес случайного выбора доступной сцены, целое 1..1000000; не влияет на шанс награды.
# permission: Дополнительное право; пусто — отдельное право не нужно.
moon_wheel: {currency: FREE, price: '0', weight: 1, permission: ''}
# Орбита вокруг точки открытия.
# currency: FREE, POINTS (PlayerPoints) или VAULT (экономика через Vault).
# price: Цена в кавычках: неотрицательная; VAULT — до сотых, POINTS — целое, FREE — '0'.
# weight: Вес случайного выбора доступной сцены, целое 1..1000000; не влияет на шанс награды.
# permission: Дополнительное право; пусто — отдельное право не нужно.
orbit: {currency: FREE, price: '0', weight: 1, permission: ''}
# Восходящая спираль.
# currency: FREE, POINTS (PlayerPoints) или VAULT (экономика через Vault).
# price: Цена в кавычках: неотрицательная; VAULT — до сотых, POINTS — целое, FREE — '0'.
# weight: Вес случайного выбора доступной сцены, целое 1..1000000; не влияет на шанс награды.
# permission: Дополнительное право; пусто — отдельное право не нужно.
helix: {currency: FREE, price: '0', weight: 1, permission: ''}
# Сейф; в этом примере дополнительный доступ за 25 баллов.
# currency: FREE, POINTS (PlayerPoints) или VAULT (экономика через Vault).
# price: Цена в кавычках: неотрицательная; VAULT — до сотых, POINTS — целое, FREE — '0'.
# weight: Вес случайного выбора доступной сцены, целое 1..1000000; не влияет на шанс награды.
# permission: Дополнительное право; пусто — отдельное право не нужно.
vault: {currency: POINTS, price: '25', weight: 1, permission: ''}
# Мечи; в этом примере дополнительный доступ за 100 единиц экономики.
# currency: FREE, POINTS (PlayerPoints) или VAULT (экономика через Vault).
# price: Цена в кавычках: неотрицательная; VAULT — до сотых, POINTS — целое, FREE — '0'.
# weight: Вес случайного выбора доступной сцены, целое 1..1000000; не влияет на шанс награды.
# permission: Дополнительное право; пусто — отдельное право не нужно.
swords: {currency: VAULT, price: '100.00', weight: 1, permission: ''}
# Колодец душ.
# currency: FREE, POINTS (PlayerPoints) или VAULT (экономика через Vault).
# price: Цена в кавычках: неотрицательная; VAULT — до сотых, POINTS — целое, FREE — '0'.
# weight: Вес случайного выбора доступной сцены, целое 1..1000000; не влияет на шанс награды.
# permission: Дополнительное право; пусто — отдельное право не нужно.
soul_well: {currency: FREE, price: '0', weight: 1, permission: ''}
# Наборы переиспользуются в разных кейсах. Состав фиксируется при открытии.
# Переиспользуемые наборы: состав фиксируется при открытии кейса.
reward-sets:
# ID набора для награды type: set.
miner:
# Название набора с цветами.
name: '<accent>Набор шахтёра'
# Bukkit Material значка набора.
icon: CHEST_MINECART
# До 32 позиций; все предметы выдаются вместе.
items:
# ID предметной позиции набора.
diamonds:
# Отображаемое имя предмета с цветами.
name: '<secondary>Алмаз'
# Bukkit Material выдаваемого предмета.
material: DIAMOND
# Количество, от 1 до размера стака материала.
amount: 8
# ID предметной позиции набора.
emeralds:
# Отображаемое имя предмета с цветами.
name: '<accent>Изумруд'
# Bukkit Material выдаваемого предмета.
material: EMERALD
# Количество, от 1 до размера стака материала.
amount: 16
# Консольные команды без /. {player} — игрок, {uuid} — UUID. Для ключей используйте награду type: keys.
commands: []
# Сообщения и подписи. Сохраняйте нужные переменные в фигурных скобках.
messages:
# Ожидание загрузки данных.
loading: '^a3b8Кейсы загружаются…'
# У игрока уже выполняется действие.
busy: '&#fbbf24Дождитесь завершения текущего действия.'
# Отказ открытия без ключа.
no-keys: '&#f87171Для этого кейса нужен ключ.'
# Неподтверждённая операция; {operation} помогает найти её в журнале.
error: '&#f87171Действие не подтверждено. Сообщите администратору номер: {operation}'
# Данные готовы к использованию.
ready: '&#a3e635Кейсы готовы.'
# Приз ждёт свободного места; повтор /cases claim не создаёт вторую награду.
full: '&#fbbf24Освободите место в инвентаре. Приз сохранён; используйте /cases claim.'
# Подтверждённый выигрыш; {prize} — название награды.
won: '&#a3e635Ваш приз: {prize}'
# Начисление ключей; {operation} — идентификатор операции.
granted: '&#a3e635Ключи начислены. Операция: {operation}'
# Действие запрещено правами.
permission: '&#f87171Недостаточно прав.'
# Успешное применение проверенной конфигурации.
reloaded: '&#a3e635Конфигурация проверена и применена.'
# Неизвестный кейс или действие.
unknown: '&#fbbf24Кейс или действие не найдено.'
# Заголовок каталога кейсов.
menu-title: '&#a78bfaКейсы'
# Заголовок выбора анимации.
scene-title: 'Ce8f9Выберите анимацию'
# Подпись баланса; {count} — число ключей.
key-count: '&7Ключей: &f{count}'
# Кнопка открытия.
open: '&#a3e635Открыть кейс'
# Текущая анимация; {scene} — её название.
choose-scene: 'Ce8f9Анимация: {scene}'
# Кнопка возврата.
back: '&7Назад'
# Кнопка случайного выбора доступной анимации.
random: '&#fbbf24Случайная анимация'
# Кейсы по постоянному ID, 1..200. ID используется в командах, ключах и магазине; не переименовывайте его без переноса.
cases:
# Первая анимация каждого кейса базовая: покупка для неё не требуется.
# Цена scene-shop относится к дополнительным анимациям; права сохраняются.
# Постоянный ID кейса. supplies — выключенный пример набора; demo — включённый демокейс.
demo:
# Обмен предметов AdvancedCrates: только точные NBT-метки этого кейса.
# Включайте после проверки переноса; одна единица предмета даёт один ключ.
# Обмен старых физических предметов только по точным NBT-меткам этого кейса.
# crate-items: обмен предмета-кейса AdvancedCrates на один ключ.
# key-items: обмен предмета-ключа AdvancedCrates на один ключ.
legacy: {crate-items: false, key-items: false}
# SHARED — общий баланс scope; SERVER — отдельный баланс для режима.
# server: '' выдаёт здесь; другой ID фиксируется в журнале при открытии.
# Область ключей и целевой сервер награды.
# keys: SHARED — общий баланс scope; SERVER — отдельный баланс режима.
# server: пусто — награда выдаётся здесь; иной ID фиксируется при открытии.
delivery: {keys: SHARED, server: ''}
# Показывать кейс и разрешать новые открытия.
enabled: true
# Условия проверяются повторно при открытии.
conditions:
# Дополнительное право; пусто — достаточно mccases.use.
permission: ''
# Разрешённые имена миров; [] — все миры.
worlds: []
# true — открытие только у привязанной стойки; команда не обходит это условие.
require-stand: false
# Отображаемое название с RGB/HEX.
name: '&#c084fcЗвёздный кейс'
# Bukkit Material значка; должен существовать на вашей версии сервера.
icon: ENDER_CHEST
# Длительность, 60..1200 тиков; при 20 TPS 100 тиков = 5 секунд.
duration-ticks: 100
# Радиус сцены в блоках, 0.25..4.
radius: 1.5
# Сцены без повторов. Первая базовая, остальные доступны по scene-shop.
animations: [moon_wheel, orbit, helix, vault, swords, soul_well]
# Награды по ID, 1..1000. Шанс = вес награды / сумма весов этого кейса.
rewards:
# Постоянный ID награды.
diamonds:
# Отображаемое название награды с цветами.
name: 'Ce8f9Алмазы'
# Значок; для type: item также выдаваемый материал.
icon: DIAMOND
# item — предмет; set — набор. Редактор также поддерживает commands и keys.
type: item
# Число предметов, от 1 до размера стака материала.
amount: 8
# Положительный целый вес. Сумма весов не обязана быть 100: веса 3 и 7 дают 30% и 70%.
weight: 3
# Постоянный ID награды.
emeralds:
# Отображаемое название награды с цветами.
name: '&#a3e635Изумруды'
# Значок; для type: item также выдаваемый материал.
icon: EMERALD
# item — предмет; set — набор. Редактор также поддерживает commands и keys.
type: item
# Число предметов, от 1 до размера стака материала.
amount: 16
# Положительный целый вес. Сумма весов не обязана быть 100: веса 3 и 7 дают 30% и 70%.
weight: 7
# Постоянный ID кейса. supplies — выключенный пример набора; demo — включённый демокейс.
supplies:
# Показывать кейс и разрешать новые открытия.
enabled: false
# Условия проверяются повторно при открытии.
conditions:
# Дополнительное право; пусто — достаточно mccases.use.
permission: ''
# Разрешённые имена миров; [] — все миры.
worlds: []
# true — открытие только у привязанной стойки; команда не обходит это условие.
require-stand: false
# Отображаемое название с RGB/HEX.
name: '<accent>Кейс с набором'
# Bukkit Material значка; должен существовать на вашей версии сервера.
icon: CHEST_MINECART
# Длительность, 60..1200 тиков; при 20 TPS 100 тиков = 5 секунд.
duration-ticks: 100
# Радиус сцены в блоках, 0.25..4.
radius: 1.5
# Сцены без повторов. Первая базовая, остальные доступны по scene-shop.
animations: [vault, orbit]
# Награды по ID, 1..1000. Шанс = вес награды / сумма весов этого кейса.
rewards:
# Постоянный ID награды.
miner:
# Отображаемое название награды с цветами.
name: '<accent>Набор шахтёра'
# Значок; для type: item также выдаваемый материал.
icon: CHEST_MINECART
# item — предмет; set — набор. Редактор также поддерживает commands и keys.
type: set
# ID существующего набора из reward-sets.
set: miner
# Положительный целый вес. Сумма весов не обязана быть 100: веса 3 и 7 дают 30% и 70%.
weight: 1