Combat Toggle
Combat Toggle — это лёгкий серверный мод для контроля PvP, который предотвращает случайные или нежелательные бои между игроками, требуя взаимного согласия перед тем, как урон в PvP станет возможным. Бой активируется только тогда, когда оба игрока находятся в режиме Combat.
- Загрузчики
- Forge
- Скачиваний на Modrinth
- 569
- Подписчиков на Modrinth
- 0
- версии
- 3
- Обновлён
- 4 сентября 20264 сент.
- Опубликован
- в 2026
Коротко о моде
Нужен на сервере; в игре — по желанию
Combat Toggle
Устанавливаемая на сервер система PvP по желанию с отметкой боя, умными кулдаунами и полным набором админ-инструментов — для Minecraft 1.19.2 Forge.
Combat Toggle позволяет каждому игроку на вашем сервере выбрать, можно ли его атаковать. Это готовое решение для модпака под проблему «одни хотят PvP, другие нет» — без костылей с границами мира, без плагинов регионов, без сторонних зависимостей. Установите его на свой выделенный сервер, и ванильные клиенты смогут заходить и использовать /ct, не трогая свою игру.
Что он делает
- Режим мира — PvP выключен. Стрелы, мечи, зелья и снаряды других игроков проходят безвредно.
- Режим боя — PvP включён. Вас могут ударить, и вы можете ударить в ответ.
- Каждый игрок решает сам. По умолчанию — Мир: новым игрокам нужно включить PvP самостоятельно.
- Устанавливается на сервер. Ванильные клиенты могут заходить и переключать режимы через
/ctбез установки на клиент. Модифицированные клиенты дополнительно получают переназначаемую клавишуVи индикатор HUD на экране.
Возможности
Основное
- Универсальные команды.
/ct,/combat,/peaceи/combattoggle statusработают с любого клиента — модифицированного или ванильного. - Переключение одной клавишей. Клавиша по умолчанию:
V(только для модифицированных клиентов). Полностью переназначается на каждом клиенте. - HUD-оверлей. Пиксельная иконка 51×19 (щит для Мира, скрещённые мечи для Боя). Настраиваемое положение (9 якорей + произвольные XY), масштаб и видимость для каждого режима. Автоматически скрывается в инвентарях и когда HUD отключён клавишей
F1. - Отметка боя. Любое PvP-столкновение помечает и атакующего, и жертву на настраиваемое время (по умолчанию 30с). Пока игрок помечен, он не может переключиться в режим Мира — никакого выхода из боя через переключатель.
- Умные кулдауны. По умолчанию кулдаун начинается только когда PvP реально происходит, а не когда игроки переключаются. Игроки могут свободно менять режимы во время фермерства, строительства или исследования.
- Сохранение состояния. Режим, таймер отметки и кулдаун переживают выходы из игры, возрождения, смены измерений и перезапуски сервера. Хранится в Forge capability, сериализуемой в данные игрока.
- Двойная защита PvP на событиях. Основная отмена на
LivingAttackEvent(приоритет HIGH) — отбрасывание, звук урона и критерий достиженияPLAYER_HURT_ENTITYникогда не срабатывают на целях в Мире.LivingHurtEventработает как дополнительная защита. Определение атакующего проходит по владельцам снарядов, владельцам активированного TNT и прирученным питомцам, так что волки, снежные големы и подожжённый TNT определяются корректно.
Социальное
- Цвет никнеймов. Игроки в режиме Боя получают красные никнеймы; игроки в Мире — синие. Отключите, если уже используете команды таблицы очков для чего-то другого.
- Эмодзи/текстовые префиксы. Настраиваемые символы (по умолчанию: скрещённые мечи и кружка кофе) появляются перед именем игрока, чтобы состояние было безошибочно видно с любого ракурса.
- Ограниченная обратная связь. Атакующие, попавшие по цели в режиме Мира, получают однострочное сообщение в чат с объяснением, почему ничего не произошло (с ограничением, чтобы не спамило).
Команды игрока
Права не требуются.
| Команда | Назначение |
|---|---|
/ct | Переключить Бой ↔ Мир. |
/combat | Установить себе режим Боя. |
/peace | Установить себе режим Мира. |
/combattoggle status | Показать свой режим, отметку и кулдаун. |
/combattoggle help | Показать все команды, которые вы можете выполнить (админ-записи скрыты для не-OP). |
Админ-команды
Требуется уровень OP 2.
| Команда | Назначение |
|---|---|
/combattoggle get <player> | Посмотреть состояние другого игрока. |
/combattoggle set <player> <peace|combat> [bypass] | Принудительно задать режим. bypass=true игнорирует кулдаун и защиту от тега. |
/combattoggle tag <player> [seconds] | Вручную выдать боевой тег (1–3600с). |
/combattoggle untag <player> | Снять боевой тег. |
/combattoggle resetcooldown <player> | Сбросить и кулдаун переключения, и кулдаун PvP. |
/combattoggle resync | Обновить команды таблицы очков и синхронизировать состояние HUD для всех онлайн (/combattoggle reload — алиас). |
Информация о сервере/модпаке
- Состояние на основе capability. Данные игрока хранятся в Forge capability (
CombatToggleData); один и тот же экземпляр в памяти на всю сессию игрока, без постоянной нагрузки на NBT при каждом вызове. Публичного API сейчас нет, но в будущем минорном обновлении его можно будет добавить без перестройки архитектуры. - Структурированное логирование SLF4J на уровнях DEBUG/INFO для каждого решения по PvP, запроса переключения и вызова команды. Хорошо дружит с ops-пайплайнами.
- Сообщения через переводы. Каждая строка, видимая игроку, — это ключ перевода (
combattoggle.msg.*). Выпускайте переводы без патчей кода. - Сетевой handshake, терпимый к ваниле. Канал использует
NetworkRegistry.acceptMissingOr(PROTOCOL::equals); ванильные клиенты проходят, пакеты синхронизации молча отбрасываются для пиров без канала.
Установка
- Установите Minecraft Forge 43.3.0+ для Minecraft 1.19.2.
- Поместите
combattoggle-1.2.0.jarв папкуmods/вашего сервера (или клиента). - Запустите. При первом запуске
combattoggle-server.tomlсоздаётся в директорииserverconfig/вашего мира, аcombattoggle-client.toml— в папке конфигов клиента.
Ставится на сервер? Да. Установите только на выделенный сервер, и ванильные клиенты смогут заходить и использовать /ct, /combat, /peace и /combattoggle status без установки на клиенте. Игроки, которые дополнительно установят мод на клиенте, получат вдобавок клавишу V и индикатор HUD — приятное дополнение поверх той же серверной логики.
Конфигурация
combattoggle-server.toml
| Ключ | По умолчанию | Что делает |
|---|---|---|
cooldownSeconds | 600 | Длительность кулдауна (10 мин). Установите 0, чтобы полностью отключить кулдаун. |
combatTagSeconds | 30 | Как долго держится боевой тег после события PvP. |
requireBothCombatEnabled | true | Если true, PvP работает только когда и атакующий, и цель в режиме Combat. |
forceCombatWhileTagged | true | Принудительно переводить игроков с тегом в режим Combat. |
allowToggleWhileTagged | false | Если false, игроки с боевым тегом не могут переключиться в Peace. |
cooldownTriggersOnPvp | true | Кулдаун начинается, когда игрок наносит или получает урон в PvP. |
cooldownTriggersOnToggle | false | Кулдаун начинается, когда игрок переключается. |
cooldownAppliesToPeaceOnly | true | Кулдаун блокирует только Combat→Peace; Peace→Combat всегда мгновенно. |
allowAdminBypassCooldown | true | bypass=true в /combattoggle set действительно работает. |
useScoreboardTeams | true | Отключите, чтобы полностью убрать Combat Toggle из таблицы очков. |
useEmojiPrefixes / useNameplateColors | true / true | Независимые переключатели для двух визуальных эффектов. |
combatEmoji / peaceEmoji | ⚔ / ☕ | Любой Unicode из BMP. |
combatTeamName / peaceTeamName | ct_combat / ct_peace | Переименуйте, чтобы избежать конфликтов. |
combattoggle-client.toml
| Ключ | По умолчанию | Что делает |
|---|---|---|
hudEnabled | true | Главный переключатель иконки HUD. |
hudShowInCombatMode | true | Показывать иконку в режиме Combat. |
hudShowInPeaceMode | true | Показывать иконку в режиме Peace. |
hudAnchor | TOP_CENTER | Одно из значений: TOP_LEFT, TOP_CENTER, TOP_RIGHT, CENTER_LEFT, CENTER, CENTER_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, CUSTOM. |
hudOffsetX | 0 | Смещение в пикселях внутрь от якоря. Абсолютная координата X на экране, если hudAnchor=CUSTOM. |
hudOffsetY | 6 | Смещение в пикселях внутрь от якоря. Абсолютная координата Y на экране, если hudAnchor=CUSTOM. |
hudScale | 1.0 | Диапазон 0.5–3.0. |
hudShowTimers | true | Показывать текст обратного отсчёта тега/перезарядки под иконкой. |
Обновление
- Режим сохраняется. Какой режим (Combat или Peace) был у каждого игрока последним, тот и переносится при первом входе в 1.2.0.
- Активные теги и перезарядки сбрасываются при первом входе в 1.2.0. Постоянные таймеры 1.1.x были в миллисекундах реального времени без гарантии источника отсчёта; преобразовать их в новую игровую тиковую шкалу безопасно нельзя, поэтому они отбрасываются. Новые теги/перезарядки начиная с 1.2.0 используют монотонный, устойчивый к перезапуску игровой тиковый дедлайн.
- Серверный ключ конфига
showHudудалён. Видимость HUD теперь полностью на стороне клиента черезhudEnabledвcombattoggle-client.toml. Существующие конфиги операторов сохранят осиротевший ключ при первом чтении; Forge запишет предупреждение о неиспользуемом ключе. Безвредно. - Сетевой протокол —
"1"для линейки 1.2.x. Модифицированные клиенты 1.1.x не могут подключиться к серверу 1.2.0 (рукопожатие отклоняется); им нужно обновиться. Ванильные клиенты не затронуты.
Совместимость
- Minecraft: 1.19.2
- Forge: 43.3.0 или новее
- Java: 17
- Зависимости: Нет. Ни Kotlin, ни Architectury, ни Cloth Config.
- Другие PvP-моды: Должен сосуществовать с анти-читом, защитой регионов и KubeJS.
useScoreboardTeams=falseрешает конфликты с модами, которые владеют таблицей очков. - Только для мультиплеера? Нет. Одиночная игра работает; переключатель всё равно применяется к взаимодействиям урона с враждебными железными големами и т.д. (как и ожидается для «PvP включён/выключен»).
Известные ограничения
- Источники урона на основе миксинов могут обходить принудительное применение. Combat Toggle отменяет на обоих событиях
LivingAttackEvent(основное) иLivingHurtEvent(запасное). Несколько модов направляют урон через кастомные миксины, которые обходят оба — они будут попадать по целям в Peace. Откройте issue с воспроизведением, если столкнётесь с этим. - Нет белого списка измерений. Правила PvP применяются единообразно во всех измерениях.
/combatи/peace— распространённые буквальные пространства имён. Если другой мод или плагин регистрирует тот же корень, поведение зависит от порядка регистрации — используйте запасные/ctи `/combattoggle `.- Публичного API для интеграции модов сегодня нет. Состояние игрока хранится во внутренней capability Forge; будущий минорный релиз может его открыть без перестройки архитектуры.
- У ванильных клиентов нет HUD и привязки клавиш. Используйте
/ct. Так задумано.
Лицензия и исходный код
- Лицензия: GPL-3.0
- Исходный код и баги: https://github.com/otectus/combat-toggle
- Домашний модпак: Сделан для модпака Runecraft 1.19.2 Forge. Кидай в любой другой — он самостоятельный.
Pull requests и баг-репорты приветствуются. Пожалуйста, прикладывай логи сервера, свой combattoggle-server.toml и минимальный способ воспроизведения при создании issue.
Частые вопросы
Как установить Combat Toggle?
Установите Forge под свою версию Minecraft, скачайте Combat Toggle под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Combat Toggle?
У Combat Toggle есть сборки для Minecraft 1.19.2, 1.20.1.
Нужен ли Combat Toggle на сервере?
Нужен на сервере; в игре — по желанию