通过 Discord 的 Rich Presence API 和 DiscordIPC API,完全自定义其他人看到你游玩 Minecraft 的方式
作者:jagrosh!
模组,而其他模组加载器则可能会崩溃。
除了能够将你的 discord 状态从“Playing Minecraft”进行修改之外,
这个模组还提供了大量自定义选项,用于完整指定其他人如何看到你在玩游戏。
从显示你当前所在的生物群系、所处维度,到你所在的服务器等等。
自定义的可能性几乎是无限的,真正的限制只有你对显示内容的创意程度。
CraftPresence 会检测你的启动目录中是否包含:
如果使用这些启动器中的任意一种,请注意以下内容:
服务器中时)
&PACK& 占位符中,你可以配置该占位符以便
在 RPC 中使用
pack.name 和 pack.icon 占位符中,你可以配置它们以便
在 RPC 中使用
例如,模组会这样将整合包名称转换为 iconKey:
示例:All the Mods 7 会被解析为 allthemods7
注意:MultiMC 原生具有一个 Icon Key 属性,会优先使用它,而不是从整合包显示名称进行转换
CraftPresence 当前提供以下命令:
请注意以下事项:
/craftpresence 或 /cp 开头/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 - 如果启用了 Per-Gui,则显示所有 Gui 名称/cp view items - 如果启用了 Per-Item,则显示所有物品名称/cp view entities - 如果启用了 Per-Entity,则显示所有实体名称/cp reboot - 重启 RPC/cp shutdown - 关闭 RPC(可通过 /cp reboot 再次开启)/cp (help | ?) - 帮助命令,显示上述命令及其说明CraftPresence 当前包含以下按键绑定:
说明:
常规控制菜单中
常规控制菜单中自定义
Open Config Gui - 用于打开 CraftPresence 配置界面的按键绑定(默认:GRAVE/TILDE 键)在某些配置区域中,CraftPresence 提供了一些占位符和函数来让操作更轻松:
请注意以下事项:
这里)查看
{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 - 你当前的游戏模式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) 当前服务器原始 motdserver.minigame - (Realm) 当前领域小游戏名称server.type - (Realm) 当前领域世界类型item.message.default - 默认物品显示数据(适用时)item.message.holding - 手持物品显示数据(适用时)item.message.equipped - 已装备物品显示数据(适用时)item.[slotId].name - 当前 slotId 物品名称item.[slotId].message - 当前 slotId 物品消息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 界面的实例data.server.motd.line_[number] - 获取 server.motd.raw 的某一特定行data.[moduleName].time - 某模块主状态发生变化时的时间戳data.general.time
以下函数可在 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 时间戳转换为指定格式和
时区的日期字符串
...)` -
通过反射调用目标类中的指定方法
format(input=String, args=Object...) - 使用指定格式字符串和参数返回一个格式化字符串formatAddress(input, returnPort ?: false) - 根据输入格式化一个 IP 地址getArrayElement(content=Array, index) - 从指定内容中获取数组元素,无法获取时返回 nullgetAsset(input) - 如果存在,从图标键中获取指定的 DiscordAsset 数据getAssetId(input) - 如果存在,从指定键中获取解析后的图标 IDgetAssetKey(input) - 如果存在,从指定键中获取解析后的图标键getAssetType(input) - 如果存在,从指定键中获取解析后的图片类型getAssetUrl(input) - 如果存在,从指定键中获取解析后的图片 URLgetClass(reference=Object|String) - 尝试通过字符串路径或对象引用获取类对象getComponent(data=DataComponentHolder, path=String) - (MC 1.20.5+) 尝试获取指定路径的组件数据getCurrentTime() - 获取当前时间,作为一个 InstantgetElapsedMillis() - 获取已过去的时间(毫秒)getElapsedNanos() - 获取已过去的时间(纳秒)getElapsedSeconds() - 获取已过去的时间(秒)getField(classToAccess=Object|String|Class, instance=Object, fieldName=String...) - 通过反射获取指定字段
getFields(classObj=Object|String|Class) - 获取某个类对象可用的字段名称getFirst(args) - 从指定参数中获取第一个非 null 字符串,若无则返回 nullgetJsonElement(url|jsonString, path=Object...) - 从指定内容中获取 json 元素,无法获取时返回 nullgetMethods(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) - 通过正则判断指定字符串是否为有效 UuidisValidAsset(input) - 判断指定图标键是否存在于当前 Client ID 下isValidId(input) - 判断指定 Client ID 是否有效isWithinValue(value, min, max, containsmin ?: false, containsmax ?: 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 或 EMPTYrandomAsset() - 尝试从可用资源中获取一个随机图标键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 时间获取一个时间 InstanttimeFromEpochSecond(epochSecond) - 从指定 epoch 时间获取一个时间 InstanttimeFromString(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 代码库本身的状态,仍然可能出现问题。
这些问题除了会妨碍后端的某些部分外,也可能导致模组的某些功能无法正常工作。
基于这一点,请注意以下内容:
需要先被发现。
MC-112292:当与 RenderUtils#drawItemStack 方法交互时(v2 物品渲染器所使用),某些使用特定渲染器的方块可能无法正确显示。
方法所需的逻辑尚不存在(最初是在 Alpha 1.2.6 中实现的)
此外,某些设置或 API 调用在不同 MC 版本下的表现可能有所不同。
没有看到你喜欢的图标,或者想为默认 Client ID 中新增/修改某个图标提出建议吗?
如果是这样,你可以在我的 Issue Tracker 上提出请求,并满足
以下要求:
因为 CraftPresence 会告诉你所期望的 ID
512x512 到 1024x1024 之间的图标(这是最低或推荐尺寸,以获得最佳质量)此外,你也可以通过
参考本指南
来创建你自己的图标集
需要我某个模组的帮助,或者想提供反馈吗?
你可以通过以下方式联系我:
此外,此模组的代码库文档可在
这里查看,更多指南可在
wiki 上找到
此模组采用 MIT License 以及 Apache 2.0 License
本项目当前在内部使用以下依赖:
与其他 RPC 模组一样,此模组会使用你的游戏内数据将显示信息发送到第三方服务(在本例中为
Discord)。
与为图标创建 Discord ID 相关的服务条款可在
这里找到
使用 Discord 作为服务的服务条款也可在
这里查看
友情链接: 网易我的世界 | 泰拉瑞亚 | ocent云计算 | 米饭Minecraft插件文档 | 友链合作
历史访问人数:150,331 | 历史访问人次:246,420
今日访问人数:10,620 | 今日访问人次:11,506
昨日访问人数:25,313 | 昨日访问人次:28,419
Copyright © 2019-2026 我的世界服务器列表站. All rights reserved.
❤ Powered by GermMC 京ICP备17023959号-6