跳转到内容
我的世界XyeBBS论坛3群 进群吹水聊天!众多整合包作者、插件作者、玩家在内哦!不定时发福利,公布重要通知!
...

CraftPresence

(CraftPresence)
完全自定义他人在 Discord 上看到的你的游戏状态!
仅客户端前置实用

CraftPresence

通过 Discord 的 Rich Presence API 和 DiscordIPC API,完全自定义他人在 Discord 上看到你玩 Minecraft 的方式。 作者:jagrosh!

许可证:MIT Crowdin Codacy 徽章 流水线状态

CurseForge-下载量 CurseForge-可用版本

Modrinth-下载量 Modrinth-可用版本

一般说明

  • 从 v2.5.0 开始,UniLib 现在是必需的依赖项。
    • UniLib 是我创建的一个新的库模组,旨在抽象常用的 API 函数,以便更通用的用例以及未来的项目。
    • 该模组可以在此处下载:链接
    • 如果未找到 UniLib 或使用了不兼容的版本,此模组将会崩溃。
  • 此模组被标识为仅客户端 (Client Side-only) 模组。
    • 这意味着它不会在服务器端运行。
    • Fabric 和 Quilt 模组加载器将直接忽略该模组,而其他模组加载器可能会崩溃。
  • 部分适用于 Minecraft 1.14.x 及以上版本的模组需要 Fabric API 和 Fabric 模组加载器。
  • 部分适用于 Minecraft 1.13.x 版本的模组需要 Rift API 和 Rift 模组加载器。
  • 部分适用于 Minecraft 1.1.0 及以下版本的模组需要 Risugami's ModLoader。

功能

除了能够将你的 Discord 状态从“正在玩 Minecraft"进行更改外, 此模组还提供了大量的自定义选项,让你完全指定他人如何看到你玩游戏。 从显示当前的生物群系,到你所在的维度,乃至你所在的服务器等等。 自定义的可能性是无限的,唯一的限制就是你发挥创意定制显示内容的程度。

启动器和整合包集成支持

CraftPresence 会检测你的启动目录是否包含以下内容:

  • ATLauncher 实例 (instance.json)
  • 有效的 Twitch/Overwolf/Curse/GDLauncher 清单文件 (manifest.json, minecraftinstance.json)
  • MCUpdater 实例 (instance.json)
  • Modrinth 实例 (profile.json)
  • MultiMC 实例 (instance.cfg)
  • 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 原生拥有一个图标键属性,它将优先使用此属性,而不是从整合包的显示名称进行转换。

命令

CraftPresence 目前提供以下命令:

请记住以下事项:

  • 命令必须以 /craftpresence 或 /cp 为前缀。
  • 在 v1.5.0 及以上版本中,这些命令只能通过配置 GUI 中的“命令 GUI"使用。

  • /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 - 显示所有可用的维度名称,需要启用“显示当前维度”。
    • /cp view biomes - 显示所有可用的生物群系名称,需要启用“显示当前生物群系”。
    • /cp view servers - 显示所有可用的服务器地址,需要启用“显示游戏状态”。
    • /cp view screens - 如果启用了“每个 GUI",则显示所有可用的 GUI 名称。
    • /cp view items - 如果启用了“每个物品”,则显示所有可用的物品名称。
    • /cp view entities - 如果启用了“每个实体”,则显示所有可用的实体名称。
  • /cp reboot - 重启 RPC。
  • /cp shutdown - 关闭 RPC(可以通过 /cp reboot 重新开启)。
  • /cp (help | ?) - 帮助命令,用于显示上述命令及其解释。

按键绑定 (KeyBinds)

CraftPresence 目前包含以下按键绑定:

注意:

  • 在 v1.5.5 到 v1.8.0 之间,按键绑定现在在配置 GUI 的“辅助功能设置”中进行自定义,而不是在普通的控制菜单中。
  • 在 v1.8.0 及以上版本中,按键绑定既可以在配置 GUI 的专用菜单中自定义,也可以在适用版本的普通控制菜单中自定义。

  • Open Config Gui - 打开 CraftPresence 配置 GUI 的按键绑定(默认:重音符/波浪号键 ~ 或 `)。

关于占位符和函数

在某些配置区域,CraftPresence 提供了一些占位符和函数以简化操作:

请记住以下事项:

  • 在 v2.0.0 中,占位符已被重写以兼容 Starscript。
    • 本节较早版本的列表可以查看 此处。
    • 所有占位符、函数和代码表达式必须用花括号包围(例如:{foo.bar})。
    • 如果你需要在函数参数中将占位符与其他数据结合使用,请使用 getResult 函数。
    • 其他函数和标准变量可在 StandardLib 中找到。

占位符列表

以下占位符可在 CraftPresence 的任何地方使用:

  • 通用占位符:
    • general.brand - Minecraft 品牌标签
    • general.icon - 默认显示图标
    • general.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 - (多人游戏) 原始当前服务器地址
    • server.address.short - (多人游戏) 格式化后的当前服务器地址
    • server.name - (多人游戏) 当前服务器名称
    • server.motd.raw - (多人游戏) 当前原始服务器 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 - 在视频渲染器中时,获取 renderTimeTaken 字段
    • replaymod.time.remaining - 在视频渲染器中时,获取 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 界面的实例
    • 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) - 将标识符转换为格式正确且可解释的名称
  • 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
  • getJsonElement(url|jsonString, path=Object...) - 从指定内容中检索 JSON 元素,如果无法检索则返回 null
  • getMethods(classObj=Object|String|Class) - 检索类对象的可用方法名称
  • getNamespace(input) - 检索标识符风格对象的命名空间部分
  • getNbt(data=Entity|ItemStack, path=String...) - 尝试检索具有指定路径的 NBT 标签
  • getOrDefault(target, alternative ?: '') - 如果主要值非空则检索主要值;否则使用次要值
  • getPath(input) - 检索标识符风格对象的路径部分
  • getResult(input) - 对指定输入执行递归转换
  • hasField(classObj=Object|String|Class, fieldName) - 检索指定类是否包含指定字段名
  • isColor(input) - 确定输入的字符串是否分类为有效的颜色代码
  • isCustomAsset(input) - 确定指定的图标键是否存在于自定义资产列表中
  • isUuid(input) - 通过正则表达式检查指定字符串是否分类为有效的 UUID
  • isValidAsset(input) - 确定指定的图标键是否存在于当前客户端 ID 下
  • isValidId(input) - 确定指定的客户端 ID 是否有效
  • isWithinValue(value, min, max, contains_min ?: false, contains_max ?: false, check_sanity ?: true) - 确定指定值是否在指定范围内
  • length(input) - 返回指定字符串的长度
  • lerpDouble(num, min, max) - 在指定值之间进行线性插值 (Double)
  • lerpFloat(num, min, max) - 在指定值之间进行线性插值 (Float)
  • 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 时间检索时间 Instant
  • timeFromEpochSecond(epochSecond) - 从指定的 epoch 时间检索时间 Instant
  • timeFromString(dateString, fromFormat, fromTimeZone ?: null) - 将日期字符串从一种时区和格式格式化为有效的 Instant 实例
  • timeToEpochMilli(data) - 从指定参数派生,获取距 Java Epoch 的毫秒数
  • timeToEpochSecond(data) - 从指定参数派生,获取距 Java Epoch 的秒数
  • timeToString(date, toFormat, toTimeZone ?: null) - 使用指定的时区和格式格式化日期字符串
  • toCamelCase(input) - 将字符串转换为有效且可接受的驼峰式格式
  • translate(input=String, args=Object...) - 根据当前语言检索到的模组翻译,翻译未本地化的字符串

免责声明与附加信息

Minecraft 问题与额外构建信息

尽管我们尽了最大努力,但由于 Minecraft 代码库的状态,仍可能出现一些问题。

这些问题可能会阻碍后端的某些部分,并导致模组的某些部分无法工作。

鉴于此,请注意以下事项:

  • Minecraft 1.16 及以上版本
    • 随着游戏的更多部分变为数据驱动,某些模组数据如果不先进入世界,将无法再自动检索。
    • 目前,生物群系和维度模块受此变更影响,仅显示默认数据,需要先探索才能获取额外数据。
  • Minecraft 1.15 及以下版本
    • MC-112292: 在与 RenderUtils#drawItemStack 方法交互时(用于 v2 物品渲染器),使用某些渲染器的方块可能无法正确显示。
    • 此外,仅在 1.15.x 版本上,使用此方法的屏幕可能会出现 Z-level 问题。
  • Minecraft a1.1.2_01 及以下版本
    • 在这些版本上,由于实现这些方法的逻辑缺失(最初是在 Alpha 1.2.6 中实现的),生物群系和维度模块会使用默认数据进行桩处理 (stubbed)。
  • 杂项问题
    • 由于早期版本 Minecraft 中的混淆问题,使用模组的某些部分时可能会出现不正确数据。
      • 在这种情况下,生物群系和维度模块可能无法自动检测某些必要信息。
      • 作为后备方案,模组还设计为在首次发现该生物群系/维度时添加可选择的模块数据。
      • 某些模块列表中发现的“添加新项 (Add New)"选项也可用于解决此问题。

此外,某些设置或 API 调用在某些 MC 版本下的表现可能不同。

图标请求

没有看到你喜欢的图标?或者有关于添加/修改默认客户端 ID 上图标的建议?

如果是这样,你可以在我的 问题追踪器 上提出请求,需满足以下要求:

  • 如果是添加来自某个维度的图标,请指定该维度所属模组的链接。
    • 这是因为必须使用特定的图标 ID,这些 ID 可以通过模组找到,或者在进入维度后检查你的日志/聊天记录,CraftPresence 会告诉你预期的 ID。
  • 提供尺寸在 512x512 到 1024x1024 之间的图标以供使用(为了最佳质量,请使用最小或推荐尺寸)。
    • 可以使用介于这些尺寸之间的图标,但最终质量可能不佳。
  • 如果请求修改或从默认客户端 ID 中移除某个图标,请说明原因。
    • 这主要是为了记录更改原因,以供将来参考。

此外,你也可以通过遵循 此指南 创建自己的一套图标。

支持

需要有关我的某个模组的帮助,或者想提供反馈?

你可以通过以下方式联系我:

此外,此模组的代码库文档可在 此处 找到,更多指南可在 Wiki 上找到。

许可声明

本模组同时遵循 MIT 许可证和 Apache 2.0 许可证。

本项目目前在内部使用了以下依赖项:

Discord 服务条款

与其他 RPC 模组一样,本模组使用你的游戏内数据向第三方服务(在本例中为 Discord)发送显示信息。

关于创建用于图标的 Discord ID 的服务条款可在 此处 找到。

关于使用 Discord 作为服务的服务条款可在 此处 找到。

资源外链

选择礼物

使用社区积分,为喜欢的作品送上一份支持

加载中...

打赏记录

感谢每一位送出礼物的社区成员

0 次支持0 积分
正在加载内容…