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

CraftPresence

Полностью настрой то, как другие видят твою игру в Discord!

FabricNeoForgeForgeQuilt
Загрузчики
FabricNeoForgeForgeQuilt
Скачиваний на Modrinth
14,1 млн
Подписчиков на Modrinth
912
версий
2 830
Обновлён
20 сентября 202620 сент.
Опубликован
в 2022
Это библиотека — она нужна другим модам и сама ничего не добавляет в игру
Overworld Display — Default Config; In a Singleplayer Game in the Overworld · свайп

Коротко о моде

Библиотека — нужна другим модам
Работает на Fabric, NeoForge, Forge и Quilt
Для Minecraft 1.13.2–26.1, 26.1.2–26.3 …
Ставится только в игру; на сервер ставить не нужно
Последняя версия — 2.7.1+26.3-neoforge от 20 сентября 2026
Нужен UniLib
Где нужен
В игреобязателенНа серверене нужен

Ставится только в игру; на сервер ставить не нужно

Версии игры1.12.2, 1.13.2–26.1, 26.1.2–26.3 …
Описание переведено автоматическиПоказать оригинал (EN)

CraftPresence

Полностью настрой то, как другие видят твою игру в Minecraft, через Discord Rich Presence API и DiscordIPC API от jagrosh!

License: MIT Crowdin Codacy Badge Pipeline Status

CurseForge-Downloads CurseForge-Availability

Modrinth-Downloads Modrinth-Availability

Общие примечания

  • Начиная с v2.5.0, UniLib теперь является обязательной зависимостью

    • UniLib — это новый библиотечный мод, который я создал, чтобы вынести общие функции API для более универсального использования, а также будущих проектов
    • Мод можно скачать здесь
    • Этот мод вылетит, если UniLib не найден или используется несовместимая версия
  • Этот мод является клиентским модом

    • Это значит, что он не будет работать на стороне сервера.
    • Загрузчики модов Fabric и Quilt просто проигнорируют мод, а другие загрузчики модов могут вылететь.
  • Некоторые версии мода для Minecraft 1.14.x и выше требуют Fabric API и загрузчик модов Fabric
  • Некоторые версии мода для Minecraft 1.13.x требуют Rift API и загрузчик модов Rift
  • Некоторые версии мода для Minecraft 1.1.0 и ниже требуют Risugami's ModLoader

Возможности

Помимо возможности изменить твой статус в Discord с «Playing Minecraft», этот мод предлагает множество вариантов настройки, позволяющих полностью определить, как другие видят твою игру. От отображения текущего биома до измерения, в котором ты находишься, а также сервера, на котором ты играешь, и многого другого. Возможности настройки безграничны, единственное реальное ограничение — насколько креативно ты настроишь своё отображение.

Поддержка интеграции с лаунчерами и сборками

CraftPresence определит, содержит ли твоя директория запуска:

  • Инстанс ATLauncher (instance.json)
  • Действительный манифест Twitch/Overwolf/Curse/GDLauncher (manifest.json, minecraftinstance.json)
  • Инстанс MCUpdater (instance.json)
  • Инстанс Modrinth (profile.json)
  • Инстанс MultiMC (instance.cfg)
  • Файл installedPacks от Technic (installedPacks)

Если ты используешь какой-либо из этих лаунчеров, учти следующее:

  • До v1.6.0 он будет указывать название сборки в твоём отображении, а также показывать её иконку (когда ты не на сервере)
  • С v1.6.0 до v2.0.0 он вместо этого подставит название сборки в плейсхолдер &PACK&, который ты можешь настроить для использования в RPC
  • В v2.0 информация о сборке вместо этого подставляется в плейсхолдеры pack.name и pack.icon, которые ты можешь настроить для использования в RPC

В качестве примера: так мод преобразует название сборки в iconKey:

Пример: All the Mods 7 будет разобран как allthemods7

Примечание: MultiMC изначально имеет свойство Icon Key, которое используется вместо преобразования из отображаемого имени сборки

Команды

На данный момент CraftPresence предлагает следующие команды:

Учтите следующее:

  • Команды должны начинаться с /craftpresence или /cp
  • В v1.5.0 и выше эти команды доступны только через меню команд, которое находится в меню конфигурации

  • /cp compile "[expr]" - Проверить вывод выражения-заполнителя через Starscript
  • /cp search (type:typeName, [searchTerm], all) - Найти доступные заполнители для использования в Rich Presence
  • /cp reload - Перезагрузить данные мода
  • /cp request - Просмотреть информацию о запросе на присоединение
  • /cp export - Просмотреть команды экспорта данных мода
  • /cp view - Команда помощи для отображения команд, доступных для просмотра и управления различными данными отображения

    • /cp view placeholders - Отображает все доступные заполнители для использования в RPC
    • /cp view currentData - Отображает ваши текущие данные RPC в текстовом виде
    • /cp view assets (custom | all) - Отображает все доступные вам ключи иконок ресурсов
    • /cp view dimensions - Отображает все доступные названия измерений, требует включённой опции Show Current Dimension
    • /cp view biomes - Отображает все доступные названия биомов, требует включённой опции Show Current Biome
    • /cp view servers - Отображает все доступные адреса серверов, требует включённой опции Show Game State
    • /cp view screens - Отображает все доступные названия Gui, если включена опция Per-Gui
    • /cp view items - Отображает все доступные названия предметов, если включена опция Per-Item
    • /cp view entities - Отображает все доступные названия сущностей, если включена опция Per-Entity
  • /cp reboot - Перезапустить RPC
  • /cp shutdown - Отключить RPC (можно снова включить через /cp reboot)
  • /cp (help | ?) - Команда помощи для отображения вышеперечисленных команд и их пояснений

Клавиши

На данный момент CraftPresence содержит следующие клавиши:

Примечания:

  • В версиях с v1.5.5 по v1.8.0 клавиши настраиваются в настройках доступности в меню конфигурации, а не в обычном меню управления
  • В v1.8.0 и выше клавиши можно настроить либо в отдельном меню в меню конфигурации, либо в обычном меню управления на подходящих версиях

  • Open Config Gui - Клавиша для открытия меню конфигурации CraftPresence (по умолчанию: клавиша GRAVE/TILDE)

О заполнителях и функциях

В некоторых областях конфигурации CraftPresence предоставляет заполнители и функции для упрощения работы:

Учтите следующее:

  • В v2.0.0 заполнители были переписаны для совместимости с Starscript

    • Старый список из этого раздела можно посмотреть здесь)
    • Все заполнители, функции и выражения кода должны быть заключены в фигурные скобки (Пример: {foo.bar})
    • Если вам нужно объединить заполнитель с другими данными в аргументе функции, используйте функцию getResult
    • Дополнительные функции и стандартные переменные доступны в StandardLib

Список заполнителей

Следующие заполнители доступны для использования в любом месте CraftPresence:

  • Общие заполнители:

    • general.brand - Название бренда Minecraft
    • general.icon - Иконка отображения по умолчанию
    • general.mods - Количество модов в вашей папке mods
    • general.title - Название Minecraft
    • general.version - Версия Minecraft
    • general.protocol - Протокол версии Minecraft
  • Заполнители событий меню (загрузка и главное меню):

    • menu.message - Данные отображения главного меню, когда применимо
    • menu.icon - Иконка отображения главного меню, когда применимо
  • Заполнители сборки:

    • pack.name - Название текущей обнаруженной сборки
    • pack.icon - Иконка текущей обнаруженной сборки
    • pack.type - Тип текущей обнаруженной сборки
  • Заполнители игрока:

    • player.name - Ваше имя пользователя
    • player.uuid.short - Ваш UUID (сокращённый формат)
    • player.uuid.full - Ваш UUID (полный формат, если UUID действителен)
    • player.icon - Иконка вашей головы, когда применимо
    • player.position.x - Ваша текущая позиция X в игре
    • player.position.y - Ваша текущая позиция Y в игре
    • player.position.z - Ваша текущая позиция Z в игре
    • player.health.current - Ваше текущее здоровье в игре
    • player.health.max - Ваше текущее максимальное здоровье в игре
    • player.mode - Ваш текущий игровой режим
  • Заполнители Gui:

    • screen.message - Данные отображения текущего экрана Gui, когда применимо
    • screen.name - Название текущего экрана Gui
    • screen.icon - Иконка текущего экрана Gui
    • screen.default.icon - Иконка экрана Gui по умолчанию
  • Заполнители биома:

    • biome.message - Данные отображения текущего биома, когда вы в игре
    • biome.name - Название текущего биома
    • biome.identifier - Идентификатор текущего биома
    • biome.icon - Иконка текущего биома
    • biome.default.icon - Иконка биома по умолчанию
  • Заполнители измерения:

    • dimension.message - Данные отображения текущего измерения, когда вы в игре
    • dimension.name - Название текущего измерения
    • dimension.identifier - Идентификатор текущего измерения
    • dimension.icon - Иконка текущего измерения
    • dimension.default.icon - Иконка измерения по умолчанию
  • Заполнители сущностей:

    • entity.default.icon - Иконка сущности по умолчанию
    • entity.target.message - Данные отображения текущей выбранной сущности, когда применимо
    • entity.target.name - Название текущей выбранной сущности
    • entity.target.icon - Иконка текущей выбранной сущности
  • entity.riding.message - Отображаемые данные сущности, на которой сейчас едет игрок, если применимо

    • entity.riding.name - Имя сущности, на которой сейчас едет игрок
    • entity.riding.icon - Иконка сущности, на которой сейчас едет игрок
  • Плейсхолдеры мира:

    • world.difficulty - Текущая сложность мира
    • world.weather.name - Название текущей погоды в мире
    • world.name - Название текущего мира
    • world.type - Текущий тип мира
    • world.time.format_24 - Текущее игровое время мира (24-часовой формат)
    • world.time.format_12 - Текущее игровое время мира (12-часовой формат)
    • world.time.day - Текущий игровой день мира
  • Плейсхолдеры сервера:

    • server.message - Отображаемые данные текущего сервера, пока игрок в игре
    • server.icon - Иконка текущего сервера
    • server.default.icon - Иконка сервера по умолчанию
    • server.players.current - Текущее количество игроков на сервере
    • server.players.max - Максимальное количество игроков на сервере
    • server.address.full - (MP) Необработанный адрес текущего сервера
    • server.address.short - (MP) Отформатированный адрес текущего сервера
    • server.name - (MP) Название текущего сервера
    • server.motd.raw - (MP) Необработанный motd текущего сервера
    • server.minigame - (Realm) Название текущего минигейма realm
    • server.type - (Realm) Тип мира текущего realm
  • Плейсхолдеры предметов:

    • item.message.default - Отображаемые данные предмета по умолчанию, если применимо
    • item.message.holding - Отображаемые данные предмета(-ов) в руке, если применимо
    • item.message.equipped - Отображаемые данные надетого предмета(-ов), если применимо
    • item.[slotId].name - Название предмета в текущем slotId
    • item.[slotId].message - Сообщение предмета в текущем slotId
  • Интеграция - Replay Mod:

    • replaymod.time.current - В Video Renderer получает поле renderTimeTaken
    • replaymod.time.remaining - В Video Renderer получает поле renderTimeLeft
  • Дополнительные плейсхолдеры (продвинутое использование):

    • _general.instance - Экземпляр Minecraft
    • _general.player - Экземпляр игрока Minecraft
    • _general.world - Экземпляр мира Minecraft
    • _config.instance - Экземпляр конфига мода
    • _[moduleName].instance - Экземпляр одного из модулей CraftPresence

      • Порядок модулей: biome, dimension, entity, item, screen, server, <...>
    • data.biome.instance - Экземпляр текущего биома игрока
    • data.biome.class - Объект класса текущего биома игрока
    • data.dimension.instance - Экземпляр текущего измерения игрока
    • data.dimension.class - Объект класса текущего измерения игрока
    • data.entity.target.instance - Экземпляр текущей цели
    • data.entity.target.class - Объект класса текущей цели
    • data.entity.riding.instance - Экземпляр сущности, на которой сейчас едет игрок
    • data.entity.riding.class - Объект класса сущности, на которой сейчас едет игрок
    • data.item.[slotId].instance - Экземпляр текущего slotId
    • data.item.[slotId].class - Объект класса текущего slotId
    • data.screen.instance - Экземпляр текущего Gui Screen
    • data.server.motd.line_[number] - Получает определённую строку из server.motd.raw
    • data.[moduleName].time - Временная метка, когда модуль изменил своё основное состояние

      • Используйте data.general.time для текущей временной метки начала RPC

Список функций

Следующие функции доступны для использования в любом месте CraftPresence:

  • asIcon(input, whitespaceIndex ?: '') — Преобразует строку в допустимый и корректный формат иконки
  • asIdentifier(target, formatToId ?: false, avoid ?: false) — Преобразует Identifier в правильно отформатированное и читаемое имя
  • asProperWord(input, avoid ?: false, skipSymbolReplacement ?: false, caseCheckTimes ?: -1) — Преобразует входные данные в правильно читаемую строку
  • capitalizeWords(input, timesToCheck ?: -1) — Делает заглавными первые буквы слов в указанной строке
  • clampDouble(num, min, max) — Ограничивает указанное число между минимальным и максимальным значением
  • clampFloat(num, min, max) — Ограничивает указанное число между минимальным и максимальным значением
  • clampInt(num, min, max) — Ограничивает указанное число между минимальным и максимальным значением
  • clampLong(num, min, max) — Ограничивает указанное число между минимальным и максимальным значением
  • convertTime(input, originalPattern, newPattern) — Преобразует указанную строку в указанный формат даты, если возможно
  • convertTimeFormat(dateString, fromFormat, toFormat) — Преобразует строку даты из одного формата в другой
  • convertTimeZone(dateString, fromFormat, fromTimeZone, toTimeZone) — Преобразует строку даты из одного часового пояса в другой
  • dateToEpochMilli(dateString, format, timeZone ?: null) — Преобразует строку даты в метку времени Epoch в миллисекундах
  • dateToEpochSecond(dateString, format, timeZone ?: null) — Преобразует строку даты в метку времени Epoch в секундах
  • epochMilliToDate(epochMilli, format, timeZone ?: null) — Преобразует метку времени Epoch в строку даты в заданном формате и часовом поясе
  • epochSecondToDate(epochSecond, format, timeZone ?: null) — Преобразует метку времени Epoch в строку даты в заданном формате и часовом поясе
  • executeMethod(classToAccess=Object|String|Class, instance=Object, methodName=String, <parameterType, parameter>...) — Вызывает указанный метод в целевом классе через рефлексию
  • format(input=String, args=Object...) — Возвращает отформатированную строку, используя указанную строку формата и аргументы
  • formatAddress(input, returnPort ?: false) — Форматирует IP-адрес на основе входных данных
  • getArrayElement(content=Array, index) — Извлекает элемент массива из указанного содержимого или null, если не удалось
  • getAsset(input) — Извлекает указанные данные DiscordAsset по ключу иконки, если он присутствует
  • getAssetId(input) — Извлекает разобранный ID иконки из указанного ключа, если он присутствует
  • getAssetKey(input) — Извлекает разобранный ключ иконки из указанного ключа, если он присутствует
  • getAssetType(input) — Извлекает разобранный тип изображения из указанного ключа, если он присутствует
  • getAssetUrl(input) — Извлекает разобранный URL изображения из указанного ключа, если он присутствует
  • getClass(reference=Object|String) — Пытается получить объект класса через строковый путь или ссылку на объект
  • getComponent(data=DataComponentHolder, path=String) — (MC 1.20.5+) Пытается получить данные компонента с указанным путём
  • getCurrentTime() — Получает текущее время как Instant
  • getElapsedMillis() — Получает прошедшее время в миллисекундах
  • getElapsedNanos() — Получает прошедшее время в наносекундах
  • getElapsedSeconds() — Получает прошедшее время в секундах
  • getField(classToAccess=Object|String|Class, instance=Object, fieldName=String...) — Извлекает указанное поле (поля) через рефлексию
  • getFields(classObj=Object|String|Class) — Получает доступные имена полей для объекта класса
  • getFirst(args) — Получает первую не-null строку из указанных аргументов или возвращает null
  • getJsonElement(url|jsonString, path=Object...) — Извлекает элемент json из указанного содержимого или null, если не удалось
  • getMethods(classObj=Object|String|Class) — Получает доступные имена методов для объекта класса
  • getNamespace(input) — Получает часть namespace из объекта в стиле Identifier
  • getNbt(data=Entity|ItemStack, path=String...) — Пытается получить NBT-тег с указанным путём
  • getOrDefault(target, alternative ?: '') — Получает основное значение, если оно не пустое; иначе использует вторичное значение
  • getPath(input) — Получает часть path из объекта в стиле Identifier
  • getResult(input) — Выполняет рекурсивное преобразование указанных входных данных
  • hasField(classObj=Object|String|Class, fieldName) — Проверяет, содержит ли указанный класс указанное имя поля
  • isColor(input) — Определяет, классифицируется ли введённая строка как допустимый код цвета
  • isCustomAsset(input) — Определяет, присутствует ли указанный ключ иконки в списке пользовательских ассетов
  • isUuid(input) — Проверяет через регулярное выражение, классифицируется ли указанная строка как допустимый Uuid
  • isValidAsset(input) — Определяет, присутствует ли указанный ключ иконки под текущим Client ID
  • isValidId(input) — Определяет, является ли указанный Client ID допустимым
  • isWithinValue(value, min, max, contains_min ?: false, contains_max ?: false, check_sanity ?: true) — Определяет, находится ли указанное значение в указанном диапазоне
  • length(input) — Возвращает длину указанной строки
  • lerpDouble(num, min, max) — Линейно интерполирует между указанными значениями
  • lerpFloat(num, min, max) — Линейно интерполирует между указанными значениями
  • mcTranslate(input=String, args=Object...) — Переводит нелокализованную строку на основе игровых переводов, полученных для текущего языка
  • minify(input, length) — Сокращает длину строки до указанной длины
  • nullOrEmpty(input, allowWhitespace ?: false) — Определяет, классифицируется ли строка как NULL или EMPTY
  • randomAsset() — Пытается получить случайный ключ иконки из доступных ассетов
  • randomString(args) — Получает случайный элемент из указанных аргументов как строку
  • removeRepeatWords(input) — Удаляет повторяющиеся слова во введённой строке
  • roundDouble(num, places ?: 0) — Округляет Double до заданного количества знаков после запятой, если возможно

  • snapToStep(num, valueStep) — округляет указанное значение до ближайшего, используя шаг
  • split(input, regex, limit ?: 0) — разбивает эту строку по совпадениям с заданным регулярным выражением
  • stripAllFormatting(input) — удаляет цветовые и форматирующие коды из входной строки
  • stripColors(input) — удаляет цветовые коды из входной строки
  • stripFormatting(input) — удаляет форматирующие коды из входной строки
  • timeFromEpochMilli(epochMilli) — получает момент времени из указанного времени в epoch
  • timeFromEpochSecond(epochSecond) — получает момент времени из указанного времени в epoch
  • timeFromString(dateString, fromFormat, fromTimeZone ?: null) — форматирует строку даты из одного часового пояса и формата в корректный экземпляр Instant
  • timeToEpochMilli(data) — получает количество миллисекунд от Java Epoch, вычисленное из указанных аргументов
  • timeToEpochSecond(data) — получает количество секунд от Java Epoch, вычисленное из указанных аргументов
  • timeToString(date, toFormat, toTimeZone ?: null) — форматирует строку даты с использованием указанного часового пояса и формата.
  • toCamelCase(input) — преобразует строку в корректный и допустимый Camel-Case формат
  • translate(input=String, args=Object...) — переводит нелокализованную строку на основе переводов мода, полученных для текущего языка

Дисклеймеры и дополнительная информация

Проблемы Minecraft + дополнительная информация о сборке

Несмотря на все усилия, проблемы могут возникать из-за состояния кодовой базы Minecraft.

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

Учитывая это, обратите внимание на следующее:

  • Minecraft 1.16 и выше

    • Поскольку всё больше частей игры становятся управляемыми данными, некоторые данные модов больше не могут быть автоматически получены без предварительного нахождения в мире.
    • На данный момент это изменение затрагивает модули биомов и измерений, которые отображают только данные по умолчанию, а дополнительные данные нужно сначала обнаружить.
  • Minecraft 1.15 и ниже

    • MC-112292: при взаимодействии с методом RenderUtils#drawItemStack, используемым в v2 Item Renderer, блоки с определёнными рендерерами могут отображаться неправильно.
    • Кроме того, исключительно на 1.15.x могут возникать проблемы с z-уровнем на экранах, использующих этот метод
  • Minecraft a1.1.2_01 и ниже

    • В этих версиях модули биомов и измерений заглушены данными по умолчанию, поскольку логика для этих методов отсутствует (она была впервые реализована в Alpha 1.2.6)
  • Разные проблемы

    • Из-за проблем с обфускацией в ранних версиях Minecraft при использовании определённых частей мода могут отображаться неверные данные.

      • В этом случае модули биомов и измерений могут не суметь автоматически определить некоторую необходимую информацию
      • В качестве запасного варианта мод также спроектирован так, чтобы добавлять выбираемые данные модуля, когда этот биом/измерение впервые обнаружены.
      • Опция "Add New", встречающаяся в некоторых списках модулей, также может использоваться для обхода этой проблемы.

Кроме того, некоторые настройки или вызовы API могут работать иначе в определённых версиях MC.

Запрос иконок

Не видите иконку, которая вам нравится, или есть предложение по иконке, которую стоит добавить/изменить в стандартном Client ID?

Если да, вы можете оставить запрос в моём Issue Tracker со следующими требованиями:

  • Если добавляете иконку из измерения, укажите ссылку на мод, из которого происходит это измерение

    • Это связано с тем, что должны использоваться конкретные ID иконок, которые можно найти в моде или проверив свои логи/чат после входа в измерение, так как CraftPresence сообщит вам ожидаемый ID
  • Иконка размером от 512x512 до 1024x1024 для использования (либо минимальный, либо рекомендуемый размер для лучшего качества)

    • Можно использовать иконки между этими размерами, но итоговое качество может быть не очень хорошим
  • Если запрашиваете изменение или удаление иконки из стандартного Client ID, укажите причину

    • В основном просто чтобы можно было зафиксировать, почему её изменили, для будущего учёта

Кроме того, вы можете создать собственный набор иконок, следуя этому руководству

Поддержка

Нужна помощь с одним из моих модов или хотите оставить отзыв?

Со мной можно связаться следующими способами:

Кроме того, документация по коду этого мода доступна здесь, а дополнительные руководства — в вики

Лицензирование

Этот мод распространяется под лицензией MIT, а также под лицензией Apache 2.0

В настоящее время этот проект внутренне использует следующие зависимости:

Условия использования Discord

Как и другие RPC-моды, этот мод использует ваши игровые данные для отправки отображаемой информации стороннему сервису (в данном случае — Discord).

Условия использования, касающиеся создания Discord ID для иконок, можно найти здесь

Условия использования Discord как сервиса также доступны здесь

Частые вопросы

Как установить CraftPresence?

Установите Fabric под свою версию Minecraft, скачайте CraftPresence под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть CraftPresence?

У CraftPresence есть сборки для Minecraft 1.11.2, 1.12.2, 1.13.2–26.1, 26.1.2–26.3 ….

Нужен ли CraftPresence на сервере?

Ставится только в игру; на сервер ставить не нужно

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее