我们的社区总能带来令人惊叹的、巧妙、富有创意且充满乐趣的建筑作品——而这一件作品或许堪称登峰造极(方块?)。最近,我们一直在讨论 Stream Deck 正出现在越来越多的地方:无论是 Stream Deck 模块,还是电脑上的 Virtual Stream Deck。但现在呢?它竟然出现在了《我的世界》里。
没错,就是这样。一个功能齐全的 Stream Deck——就在《我的世界》里。
该项目由社区成员 TheAppleFreak 创建,他将一个巧妙的构想变成了实际可运行的系统。以下是他亲口讲述的实现过程:
大约一个月前,一位Elgato社区专员在Elgato的Twitter上发布了一款由《我的世界》构建而成的15键Stream Deck。受那种友好的“一较高下”精神驱使,我开始尝试研究如何将这个概念转化为真正可用的现实。 虽然我制作出来的东西无论怎么说都算不上完美,甚至只要你用错眼神盯着它看,它就有可能坏掉,但我对最终成果还是非常满意的!
该配置由一个六键虚拟Stream Deck(VSD)驱动,它被隐蔽地安置在我的另一台显示器上;一个非常“土法”的Node.js脚本负责处理根据游戏中激活的内容按下VSD按键这一复杂操作,同时还将VSD的显示内容转换为可在《我的世界》中呈现的形式。
在《我的世界》这边,涉及的红石电路极其简单。在屏幕背后,每个按钮都使用一对经过校准的斯库克传感器(游戏内的声音传感器)来监测输入事件,具体来说,这些事件要么是雪球落在按钮上(信号强度为2),要么是风爆弹爆炸的声音(信号强度为15)。 每对传感器都连接到一个命令方块,触发后会在游戏内聊天栏中发送1到8个空格。两侧的“上一页/下一页”按钮还带有少量额外的电路,用于控制指示灯,但除此之外,其功能与主按钮完全相同。
大部分的“魔法”都发生在我为这个项目编写的自定义 Node.js 脚本中。在程序初始启动时,我会获取一些特殊信息,这些信息让我能够选择“虚拟 Stream Deck”(VSD)窗口或《我的世界》游戏窗口,同时还能获取 VSD 窗口的坐标。一旦所有设置完成,就有两个循环会并行运行:输入循环和显示循环。
该程序的输入部分是两者中更容易理解的。每当《我的世界》运行时,它都会将发生的大部分重要事件记录在一个名为 latest.log 的文本日志文件中。 重要的是,该日志文件还包含聊天中收到的所有消息,这意味着只要编写一些巧妙的代码,我们就能仅筛选出包含纯空格消息的日志条目。当收到此类消息时,我们会统计空格的数量,并据此确定应按下哪个按钮。我将按钮按从上到下、从左到右的顺序排列(此外还有两个用于翻页的按钮)。 选定按钮后,我会使用一个专门的桌面自动化库,迅速将鼠标移出《我的世界》窗口,点击驱动整个系统的 Virtual Stream Deck 上的相应按钮,然后将控制权交还给《我的世界》(必须按下 F3+P 才能使此功能生效;否则,当游戏失去焦点时,游戏会暂停)。如果在这些操作发生时你没有移动鼠标,整个过程会非常流畅! 如果你是的话,那通常会搞得一团糟,哈哈
这虽然能很好地处理按键操作,但 Stream Deck 的真正魔力在于每个按键下方都配有可编程显示屏。如何在《我的世界》中显示这些内容呢?我选择的解决方案或许并非最优雅的,但它确实有效——而这才是我最在意的! 脚本每秒四次对 VSD 窗口进行截图。假设按钮具有特定尺寸(默认的 52x52 像素尺寸效果相当不错),它会将截图裁剪为单个按钮的大小,然后将其调整为 8x8 像素。 完成上述步骤后,脚本会遍历裁剪后图像中的每个像素,并通过一段巧妙的代码判断哪个方块的颜色与该像素最接近。(非常感谢 GitHub 上的 kult0922,他制作了一个将图像转换为《我的世界》像素艺术的网站,并公开了源代码!如果没有那段代码,这个项目恐怕要花更长时间才能搞定。)只需确保对其他五个按钮重复上述步骤即可。
列出所需的方块清单是一个不错的开始,但如何将它们放入游戏中仍然是个问题。如果你能执行聊天命令,可以使用 /setblock 命令逐个更新每个像素,但这种方法非常慢,效率也很低。 更好的工具是“结构方块”(Structure Block),这是原版游戏中的一项功能,它能让你将预先制作的结构“图纸”放置到游戏世界中。 我已经摸索出如何让脚本以《我的世界》预期的方式生成蓝图,一旦它们被保存到蓝图文件夹中,我就可以发出一个聊天命令,指示游戏中的“结构方块”根据当前屏幕状态调用正确的蓝图(每个单独帧都需要有一个唯一的文件名,这让事情稍微复杂了一点)。 完成这一步后,只需让一个微小的红石电路反复将当前有效的蓝图粘贴到游戏世界中,就能得到一个可正常运行的屏幕了!
归根结底,你得到了一款基本可用的 Stream Deck——不过是在《我的世界》里!虽然我的脚本主要设计为仅在我的机器上运行,但我认为完全可以对其进行改进,使其在多人游戏服务器上运行! 这个项目的最初原型实际上是在 Windows 子系统 for Android 中运行的 Stream Deck Mobile 实例上实现的,从技术上讲,这意味着你可以将所有内容运行在完全独立的设备上,或者在虚拟机中运行。当然,这到底是不是个好主意则是另一个问题了……但别让“实用性”之类的顾虑阻碍你尝试一下 :)
趣闻:顶部的 Stream Deck 标志是由 24 张地图拼接而成的。该标志的结构位于“终焉虚空”中,但它体积庞大,几乎横跨了虚空的两端。
查看更多 TheAppleFreak 的作品:
产品注册
Stay up to date with Elgato. Get our latest News, Guides, and Product Updates in your Google feeds.
Add Elgato as a preferred sourceThanks for helping us improve this article.