跳到正文

Omni Ocular

作者:EpixZhang

根据目标NBT数据在Waila上显示额外信息

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

如果你打算在 Java19 环境下使用此模组,请阅读更新日志以获取说明

 

详细文档: https://blog.exz.me/omni-ocular/

 

目前仍在开发中

描述

Omni Ocular 是一个模组,可在 Waila HUD 上显示玩家自定义的特定 NBT 信息。适合极端数据爱好者和模组测试者使用。

Omni Ocular 是 WailaNBT 的继任者,代码经过大幅重写,功能更加丰富。

安装

依赖

Not Enough Items、Waila 和 Omni Ocular 必须同时安装在客户端和服务端。下载后将 jar 文件复制到 mods 文件夹中。

强烈推荐使用 In-Game NBTEdit (在此下载 1.7.10 版本)来查看 NBT 数据结构,以便自定义要显示的内容。

 

展示(截图)

只需安装 Omni Ocular 即可使用,无需其他操作。

 

SNAG-0015

 

自定义配置教程

Omni Ocular 使用 XML 格式文件作为其配置文件。你可以打开 minecraft/config/OmniOcular 文件夹查看预配置的文件。

游戏内命令

“/oor”(代表 Omni Ocular Reload config):将重新加载 minecraft/config/OmniOcular 文件夹下的所有 XML 配置文件。如果在服务端使用,将重新加载服务端配置文件并将新配置发送给所有在线玩家。运行此命令时会记录玩家名称。在多人游戏中仅 OP 可使用。

“/ooe”(代表 Omni Ocular Entity name):将显示你指向的实体的注册名。

“/oon”(代表 Omni Ocular Name):将显示你手持物品的注册名。

编写配置文件

配置文件为 XML 文件格式,其中包含 JavaScript。文件必须遵循 XML 和 JavaScript 标准才能正常工作。

建议以该文件所针对模组的 Mod ID 来命名文件。

请查看预配置文件以了解实际用法。下方展示了一个示例配置。

<!--Author: EpixZhang-->
<!--Date: 2015/1/1-->
<!--Version: 1.0-->
<oo>
  <init>
    function tick2second(n){return n/20}
  </init>
  <tileentity id="Furnace">
    <line displayname="Burn Time">
      return tick2second(nbt['BurnTime'])
    </line>
  </tileentity>
  <entity id="Sheep">
    <line displayname="Until next love">
      tick2second(nbt['InLove'])
    </line>
  </entity>
  <tooltip id="minecraft:skull">
    <line displayname="OwnerName">
       return nbt['SkullOwner']
    </line>
  </tooltip>
</oo>

配置文件信息部分:

<!--作者:EpixZhang-->
<!--日期:2015/1/1-->
<!--版本:1.0-->

此部分不是必需的,但建议保留。它用于记录有用的信息。目前,版本指目标模组版本。 未来自动更新时可能会需要此信息。

基础节点:

所有生效的节点都必须位于基础标签 “<oo></oo>” 中。

方块实体节点:

若要显示方块实体(TE)的信息,请使用以下格式的标签。

<tileentity id="Furnace"></tileentity>

“id” 属性定义此节点适用的方块实体。上面的节点适用于 id 为 “Furnace” 的方块实体。

它使用正则表达式格式来匹配方块实体的 id。例如,id=”Powered.*” 会匹配所有 id 以 “Powered” 开头的方块实体。 如果 id 中包含特殊字符,则必须使用转义字符(反斜杠 ”\”)。例如,id=”BC\|Engine” 可以匹配 id 为 “BC|Engine” 的方块实体,而 id=”BC|Engine” 则不行。

实体节点:

若要显示实体的信息,请使用以下格式的标签。

<entity id="Sheep"></entity>

“id” 属性定义此节点适用的实体。上面的节点适用于 id 为 “Sheep” 的实体。

这里同样使用正则表达式。

提示框节点:

若要在鼠标悬停于物品上时显示信息,请使用以下格式的标签。

<tooltip id="minecraft:skull"></tooltip>

“id” 属性定义此节点适用的物品。上面的节点适用于 id 为 “minecraft:skull” 的物品。

这里同样使用正则表达式。

初始化节点:

若要执行初始化操作,例如常用函数,请使用以下格式的标签。

<init></init>

此标签中的脚本会在配置加载时运行。

行节点:

若要逐行显示信息,请使用以下格式的标签。

<line displayname="Foo">
    script bar
</line>

这里的 “script bar” 应为函数的内容。也就是说,function(){script bar} 必须是有效的 JavaScript 函数。此函数的返回值将会显示出来。如果只有一个表达式,可以省略 “return”。例如,在 script bar 中写入 “Epix”,等同于写入 “return ‘Epix’”。 

默认样式为:显示名称以白色显示,返回值以灰色显示,两者之间以制表符分隔。返回值中可以使用 Minecraft 颜色代码,但显示名称中不能使用。

<line displayname="Foo">
    "bar"
</line>

将会显示如下内容。

SNAG-0003

显示名称可以省略或设为 “”(空字符串),这样就只会显示返回值。这也是为整行设置颜色的方法。

如果 Display name 是本地化键,它会自动进行本地化。请尽可能使用它进行本地化。可以在本地化 lang 文件中查找键,该文件通常位于模组 .jar 文件的 assets/ModID/lang 目录下。(可以使用 7-zip 等工具将 jar 文件作为 zip 文件打开。)强烈建议使用当前配置文件所对应模组、其依赖模组,或 Waila/Omni Ocular 的 lang 文件中的键。如果以上文件都不包含所需的键,请向我反馈,和/或在 GitHub 上为 Omni Ocular 的 lang 源文件作出贡献。

“n” 可用于将一个返回值拆分为多行。

如果返回 “null”/”__ERROR__”/”undefined”/”NaN”,则会直接忽略该行,并且不会在 HUD 中显示。这是在特定条件下隐藏行的方法。

注意:如果行节点和初始化节点中的 JavaScript 代码包含 XML 特殊字符(“&”、“<“、“>”),无需写成转义形式(“&amp;”、“&lt;”、“&gt;”)。Omni Ocular 会自动转义。

内置特殊字符

可以使用格式代码(http://minecraft.gamepedia.com/Formatting_codes)和 Waila 特殊字符,不过这里还提供了更方便的使用方式。

所有代码均已预定义为大写形式,不带引号。

例如:默认样式。以下代码的显示结果与上一张图片完全相同。

<line displayname="">
    return "Foo" + TAB + ALIGNRIGHT + WHITE + "bar"
</line>

所有特殊字符:

BLACK, DBLUE, DGREEN, DAQUA, DRED, DPURPLE, GOLD, GRAY, DGRAY, BLUE, GREEN, AQUA, RED, LPURPLE, YELLOW, WHITE, OBF, BOLD, STRIKE, UNDER, ITALIC, RESET
与http://minecraft.gamepedia.com/Formatting_codes中的格式代码相同。

TAB
制表符。

ALIGNRIGHT, ALIGNCENTER
将文本右对齐或居中对齐。

HEART, HHEART, EHEART
完整的心、半颗心、空心。

内置 JavaScript 函数

translate(string):获取字符串的本地化文本。请尽可能使用它进行本地化。

name(object):获取对象的显示名称。通过铁砧等方式修改的名称也能正确显示。“object” 必须是一个 NBT Compound 标签。例如,获取原版箱子中第一个物品的名称:

return name(nbt['Items'][0])

fluidName(string):获取字符串对应的本地化流体名称。推荐使用。

holding():获取玩家手持物品的 ID。

armor(int):获取玩家所穿盔甲的 ID。int=0:靴子,int=1:护腿,int=2:胸甲,int=3:头盔。

isInHotbar(string):判断快捷栏中是否有 ID 为 string 的物品。

isInInv(string):判断物品栏中是否有 ID 为 string 的物品(包括快捷栏)。

使用游戏内 NBTEdit

下面以实际例子说明。假设下方有一个熔炉。

SNAG-0002

将准星指向熔炉,然后运行 “/nbtedit” 命令打开 NBTEdit GUI。

2015-02-08_16-40-58

上方显示的 NBT 数据将转换为一个名为 “nbt” 的 JSON 变量。

nbt={ 
  "BurnTime":15567,
  "CookTime":134,
  "x":-288,
  "y":63,
  "z":155,
  "id":"Furnace",
  "Items":[ 
    { 
      "Count":50,
      "Slot":0,
      "Damage":0,
      "id":4
    }
  ]
}

当玩家指向一个方块实体时,此变量会保持并同步。你可以在 <line></line> 节点中调用它。

例如,如果你想在 HUD 中显示 “CookTime”,可以在配置文件中这样写。

<oo>
  <tileentity id="Furnace">
    <line displayname="Cook Time">
      return nbt['CookTime']
    </line>
  </tileentity>
</oo>

注意,id=”Furnace” 可以通过 NBTEdit GUI 获取。你可以随时使用 NBTEdit GUI 获取方块实体的 id。至于绵羊等实体或物品提示信息,请使用上文提到的 “/ooe” 和 “/oon” 命令。

“CookTime” 代表什么?哦,这就得靠你自己来猜了。

关于配置文件

客户端

minecraft/config/OmniOcular/ 中扩展名为 “.xml” 的文件会被加载为配置文件。子文件夹将被忽略。

游戏启动时,会根据已安装的模组 ID 自动生成预设配置文件。 不过,已存在的文件不会被覆盖。如果你想禁用预设配置文件中的某些功能,请清空配置文件内容,而不是删除文件。 如果你更新了 Omni Ocular 并想更新预设配置文件,则需要删除旧文件。

服务端

配置文件的加载方式与客户端相同。不过,服务端不会生成预设配置文件。也就是说,你必须先在客户端单人游戏中准备或修改文件,然后将它们复制到服务端才能生效。

多人游戏中,服务端配置会覆盖所有客户端配置。这意味着所有客户端配置文件都会被忽略,所有客户端都会使用服务端配置。无需担心玩家通过自定义客户端配置窃取受保护的 NBT 数据(可能包括密码)。“/oor” 命令也会让所有客户端重新加载新的服务端配置。

计划中的功能

支持显示掉落在地上的物品信息。
允许根据配置隐藏部分信息,也许可以通过按键实现。

 

二进制文件的使用权限

你可以:

在整合包中使用此模组

发布此模组的截图或视频

修改此模组并在 GitHub 上提交拉取请求

在此处发布链接,告知我你已将它加入整合包等

只要不违反以下规则,你可以做任何想做的事

你必须:

以任何形式重新分发时(整合包、转载到其他网站等),保留署名信息(作者名、指向此帖的链接等)

你不能:

对他人声称 Omni Ocular 是你制作的

常见问题

Omni Ocular 支持哪些 Minecraft 版本?

Omni Ocular 支持 Minecraft Java 版 1.7.10,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。

Omni Ocular 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

EpixZhang 的其他作品

查看全部 →