MENU

【代码札记】年轻人的第一个Minecraft Data pack

March 10, 2024 • 瞎折腾

Create mod挺好的,就是配方不太和我心意。怎么办呢?自己动手丰衣足食。本文介绍如何使用Minecraft的Data pack特性来扩展游戏的配方系统。

闲白

最近看阿里云和腾讯云都在做活动。腾讯云那个轻量游戏主机看着不错,点开却是老用户与狗不得入内。于是只得选购了阿里云的个人99计划,2核心2GB内存3Mbps带宽,年付99元。说实话,没啥诚意,但又转念一想,99一年要啥自行车啊。

买了服务器之后就发现,干点啥呢?做网页,那肯定要备案。以我的性格来说:案,狗都不备。所以想来想去,只能开个MC服务器了。但是2GB内存,实在是不够吃,我用尽毕生所学,在1.20.1上打了19个Forge模组。再后来发现内存真的不够用,所以自己加了700多块钱升级了一个2核4GB内存,有点肉疼,但当时也是上头了——我今天一定要让他跑起来。再后来又发现带宽不够,固定3Mbps带宽也就带3个人,所以后来我换成了按量付费,同时把安全组打开,就留下MC服务器的端口免得被打然后账单上天。好在固定带宽改成按量付费的时候还有退费,退的不多,不过还是那句话——99一年,要啥自行车啊。

这些Mod都是我自己选的,因为我平时高版本都玩Fabric了,但这些Mod还是以Forge为主,所以就Forge了。这些mod除了优化,基本上都是种田相关的,最后还有个Create用来自动化一些东西。

BiomesOPlenty-1.20.1-18.0.0.592.jar
Bookshelf-Forge-1.20.1-20.1.9.jar
BotanyPots-Forge-1.20.1-13.0.24.jar
BotanyTrees-Forge-1.20.1-9.0.11.jar
Chunky-1.3.136.jar
FallingTree-1.20.1-4.3.4.jar
FarmersDelight-1.20.1-1.2.4.jar
Ksyxis-1.2.2.jar
NoChatReports-FORGE-1.20.1-v2.2.2.jar
TerraBlender-forge-1.20.1-3.0.1.4.jar
TravelersBackpack-1.20.1-9.1.12.jar
alternate_current-mc1.20-1.7.0.jar
canary-mc1.20.1-0.3.3.jar
carryon-forge-1.20.1-2.1.2.7.jar
create-1.20.1-0.5.1.f.jar
dynview-1.20.1-3.9.jar
ferritecore-6.0.1-forge.jar
modernfix-forge-5.13.0+mc1.20.1.jar
starlight-1.1.2+forge.1cda73c.jar

其中Chunky是用来预先生成区块的,因为服务器只有两个核心,所以在不玩的时候提前生成好区块,之后跑图探索就会舒服一些。再就是NoChatReports,这个是我在高版本必备的mod。然后还有TravelersBackpack,我个人认为是一款非常强筋甚至有些OP的背包模组。至于BiomesOPlenty这种增加生物群系的模组就更不用说了——我MC正版都买了快10年了,那原版那点东西,能有意思吗(

再就是BotanyPots和BotanyTrees这两个花盆模组,我感觉也是非常OP的:自动种田,只占用1格空间,自动兼容mod物品,不需要手动补种,不需要手动收获,放好种子放好土,它会自动收获放进箱子里,连自动化都省了,非常OP

最后就是各种优化的mod,性能不够优化来凑。像是dynview,能够自动根据当前服务器的tick耗时来调节渲染距离和模拟距离。如果服务器性能还够吃,那就增大这些距离来提升玩家体验,如果性能不够吃了那就给这两个距离往下调,确保玩家不会因为服务器性能吃紧而卡顿。

但玩着玩着,我发现这个Create模组和我看别人玩的不太一样:好像缺点东西。我之前看到Create模组时是在ilmango的ATFC系列,这个整合包针对Create模组增加了许多自定义的合成表,比如你可以从沙子、沙砾和石头这些方块中获得一些碾碎的矿物,然后通过水洗得到更多的矿物。虽然我觉得这些配方非常繁琐(但这也是这个系列的看点所在),但我觉得这种想法还是挺不错的,比起那些种植矿物和动物资源的模组,我觉得Create这种配方既能免去后期重复下矿的麻烦,又可以要求玩家付出一定的努力。可是我打开合成表一看:

啊?怎么什么都没有?

原来原版的Create只有一些很基础的配方,而我之前在视频中看到的都是整合包作者自己加的。那么问题来了,怎么加的呢?我知道可以通过写Mod来加,但是整合包作者好像也没有因为就单纯要加合成表就自己写Mod。后来我一查,原来从1.13开始Minecraft就有了data pack了,他的目的就是允许整合包作者来为整合包增加额外的游戏机制,不只是合成表。

关于Data pack怎么做我就不多说了,主要就是写Json文件然后放到对应的文件夹里就是了。这一部分在wiki上全都有说,没说的自己去Google搜搜也就差不多了。这里主要想说说我对于这次拓展的思路。

好多时候,实现,也就是所谓的编程或者将想法转化为现实的过程,都不是最重要的,反倒是设计更重要。所以我现在除了没有10年经验,剩下的和高级开发基本差不多了(

首先我不想把事情搞得太复杂,因为服务器跑不起来,我这脑子也接受不了——我是来玩游戏的,不是来被游戏玩的,所以合成表争取要简单一些;其次就是要合乎逻辑,毕竟之前说了不能像种植矿物那样太过强力,所以要有一些设计自动化的压力;最后就是得合乎常理,比如说通过水洗或研磨沙子可以获得碾碎金属矿物,但是从沙子里洗出钻石就不太对劲了。

正题

所以我研究了一下Create自带的配方,然后借用了一些来自Biomes O' Plenty的方块,得到了以下结论。

首先要说明,需要实现可再生的资源如下:

  • 铁、金、铜
  • 锌(Create)
  • 青金石,钻石,远古遗骸
  • 下届石英,紫水晶,红石,萤石

在矿物的范畴里,煤炭不算,但这里我也加了关于它的配方,因为后面要用。至于绿宝石,它虽然是矿物资源之一,但它的主要获得途径是和村民交易,因此这里就不考虑它了,不然就太OP了。

我在Create里面找到了一些可以生成这些资源的配方:

  • 红沙经过水洗有几率得到金粒

    • 红沙可以经过粉碎花岗岩得到
    • 花岗岩可以通过闪长岩和下届石英合成得到
    • 闪长岩可以通过原石和下届石英合成得到
    • 下届石英可以通过粉碎海晶砂粒得到,同时还有几率得到萤石粉
    • 海晶砂粒可以通过对青金石缠魂得到
  • 沙砾经过水洗有几率得到铁粒

    • 沙砾可以通过粉碎原石得到
  • 粉碎的生铁矿经过水洗有几率得到红石和铁粒

    • 粉碎的生铁矿可以通过粉碎铁矿石、绯红岩得到

虽然找到了一些配方,但是这些配方的原料终究还是不可再生的。所以我们的需求就是创造新的配方,让他们形成闭环。为了方便阅读,我整理了一个图表,这里面涉及到相关原有的合成表(黑色线)和新加的合成表(蓝色线)。

flowchart.drawio.png

这里面标为绿色的就是原始材料,圆角矩形是中间产物,矩形是最终我们想要的产物。

其中以木炭为原料的流程比较简单,我们先从这个开始。首先是使用动力辊压机压木炭,可以获得煤炭,这一步可以解释为将松散的木炭压实。然后利用原版的合成表将煤炭变成煤炭块,最后再用辊压机压煤炭块,煤炭块有2%的几率变成钻石,余下98%的几率会被消耗。

余下的流程就全都是从原石开始的。首先是原石经过两次粉碎轮,分别变成沙砾和沙子。其中模组带了一个沙子可以洗出粘土的配方,所以水洗就不行了,只能用粉碎了。粉碎沙子有7%的概率产生铜粒、7%的概率产生锌粒、5%的概率产生青金石、5%的概率产生紫水晶碎片。其中两个金属粒是由Create模组提供的,九个金属粒合成一个金属锭。

使用鼓风机放置在点燃的灵魂沙后面可以进行缠魂操作。对青金石进行缠魂有几率得到海晶砂粒。粉碎海晶沙砾有几率获得萤石粉和石英。

使用原石和石英可以手动合成白色的闪长岩,闪长岩再次和石英合成可以得到花岗岩。通过粉碎花岗岩可以得到红沙,而红沙经过清洗可以得到原版的金粒,在之后就可以得到金锭了。

关于铁我想了半天,如果说含铁量高的话,那肯定就是红沙了。但是红沙本身已经有个水洗的配方了,所以只能换一种配方了。在翻阅合成表的时候,我发现Create模组提供了一个叫做绯红岩的方块,它可以粉碎成铁粒和Create模组中的粉碎的生铁矿,后者经过清洗可以得到红石粉。那么我们只需要想办法创造出这个绯红岩就好了。既然是红的,又得是含铁,直接用原石和红色染料有点儿戏了。好在BiomesOPlenty在下届提供了一种叫做血液的液体。很显然,血是红的,也含铁,正好可以放在搅拌器里做。Forge里面一通液体是1000mBucket,我设计做一块绯红岩要消耗250mBucket和一块岩石,也就是4块岩石加一桶血,得到4块绯红岩。那么血怎么再生呢?血和水相遇会生成多孔肉块,这个类似刷石机,可以用多孔肉块和一桶水搅拌出一桶血。水从无限水来,多孔肉块可以做成刷石机的设计进行自动采集,这样血的供应也就解决了。

最后还剩下一个远古遗骸。一开始我不打算做远古遗骸的合成路线,我觉得有些OP了。但我自己玩的时候挖矿全都交给baritone,所以本质上还是电脑自己挖矿。最后还是决定加上了。可是怎么加呢?我想了想,多孔肉块是BiomesOPlenty在下届新增的方块,如果把他加热可以转化成下届岩,也不是完全没有道理对吧。所以加热获得下届岩,然后通过清洗下届岩能够有0.1%的几率获得一块远古遗骸。

至此,Minecraft里面的所有资源都可以被自动化生产了。之后的问题就是怎么在生存中设计自动化。

后记

别说,本来我以为做个Data pack,我也没加什么新机制,更没涉及命令那些复杂的东西,没啥可写的。不过最后发现,合成表的设计也不能胡来,虽然不能完全的讲究科学,同时还得避开原版的合成表。还得考虑这些流程能不能形成一个闭环,能不能实现原料的自动化供应之类的。

如果你用CraftTweak模组,那可以实现对原版合成表的修改,但我不想加新mod了,除了服务器带不起来,每次加新mod都得给别人发新的客户端,十分麻烦

总之这个合成表应该就是这种形态了。如果大家需要取用的话可以异步GitHub


知识共享许可协议
【代码札记】年轻人的第一个Minecraft Data pack天空 Blond 采用 知识共享 署名 - 非商业性使用 - 相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 https://skyblond.info/about.html 处获得。

Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

8 Comments
  1. 之前也照着 wiki 做个一个简单的 datapack,当时只是存粹为了好玩,给原版 mc 加了一大堆自认为有用的合成配方,只是当个玩具,玩了会就腻了。
    像博主这样因为玩游戏玩的不舒心所以自己做个 datapack 真的很 geek,有种博客程序用得不爽所以自己造了个轮子的豪气,总之自己很喜欢这种态度@(吐舌)

    1. @Eltrac一般需求才是真正的生产力。不过现在自从我加了这个mod,我到现在还没登陆过服务器呢。我能做四舍五入就是我做到了,所以就没动力玩儿了(

  2. 前排膜一下大佬!已经star~
    我之前最新的也基本上只玩1.12.2,偶尔玩玩高版本。根据我的经验,MC似乎对多核处理并不友好,基本上一核有难八核围观的状态,cpu频率反而是比较关键的参数。阿里云的服务器性能实在是有些鸡肋了。不知道在这些方面高版本有没有什么优化或者java这边有没有新的特性呢

    1. @硫酸钡听说高版本的MC性能更拉跨了。据说1.18前后达到了性能拉跨的巅峰。再之后我也没怎么关注性能了。其实要性能的话,隔壁PaperMC据说做了不少优化,但是打不了mod。但2024年了,没mod谁玩儿啊,离不开fabric和forge(听说forge社区现在也分裂了)。好在这两边都有许多性能优化mod,但是再怎么优化性能也就那样了,毕竟底子在那摆着,一般能重写个组件就算是很不错得了

    2. @硫酸钡阿里云和腾讯云的服务器我都用过,CPU真的拉,稍微高配一点就企业用户专享了。不过99一年,对比淘宝上再怎么便宜也得几十块钱一个月的,我觉得还算可以了。又不是不能用。而且还有个小趣事,我把网络改成按量计费之后,他们给我退了700多宽带费。后来我用这个钱,自己加了十几块,升了个2核4G。估计是他们结算的漏洞吧,其实可以被用来薅羊毛的,这个是实打实直接退到你银行卡里的钱,不是退成余额。不过我是怕被封号,所以退出来了的钱又给人家消费回去了(

    3. @天空Blond确实是这样,底层摆着再优化也就那样了233 阿里云和腾讯云的CPU核心就2.5G赫兹确实撑不起来(
      真要单纯开服不如去找个专门的MC面板租一下www

    4. @天空Blond确实是这样,底层摆着再优化也就那样了233 阿里云和腾讯云的CPU核心就2.5G赫兹确实撑不起来(
      真要单纯开服不如去找个专门的MC面板租一下www

  3. 优惠券网站 优惠券网站

    花那99元一年的,又得加钱加各种配置,还不如直接花钱买个高配置的。。。