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.jarBookshelf-Forge-1.20.1-20.1.9.jarBotanyPots-Forge-1.20.1-13.0.24.jarBotanyTrees-Forge-1.20.1-9.0.11.jarChunky-1.3.136.jarFallingTree-1.20.1-4.3.4.jarFarmersDelight-1.20.1-1.2.4.jarKsyxis-1.2.2.jarNoChatReports-FORGE-1.20.1-v2.2.2.jarTerraBlender-forge-1.20.1-3.0.1.4.jarTravelersBackpack-1.20.1-9.1.12.jaralternate_current-mc1.20-1.7.0.jarcanary-mc1.20.1-0.3.3.jarcarryon-forge-1.20.1-2.1.2.7.jarcreate-1.20.1-0.5.1.f.jardynview-1.20.1-3.9.jarferritecore-6.0.1-forge.jarmodernfix-forge-5.13.0+mc1.20.1.jarstarlight-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里面找到了一些可以生成这些资源的配方：红沙经过水洗有几率得到金粒红沙可以经过粉碎花岗岩得到花岗岩可以通过闪长岩和下届石英合成得到闪长岩可以通过原石和下届石英合成得到下届石英可以通过粉碎海晶砂粒得到，同时还有几率得到萤石粉海晶砂粒可以通过对青金石缠魂得到沙砾经过水洗有几率得到铁粒沙砾可以通过粉碎原石得到粉碎的生铁矿经过水洗有几率得到红石和铁粒粉碎的生铁矿可以通过粉碎铁矿石、绯红岩得到虽然找到了一些配方，但是这些配方的原料终究还是不可再生的。所以我们的需求就是创造新的配方，让他们形成闭环。为了方便阅读，我整理了一个图表，这里面涉及到相关原有的合成表（黑色线）和新加的合成表（蓝色线）。这里面标为绿色的就是原始材料，圆角矩形是中间产物，矩形是最终我们想要的产物。其中以木炭为原料的流程比较简单，我们先从这个开始。首先是使用动力辊压机压木炭，可以获得煤炭，这一步可以解释为将松散的木炭压实。然后利用原版的合成表将煤炭变成煤炭块，最后再用辊压机压煤炭块，煤炭块有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。