机械动力:物流附加

机械动力:物流附加

为Create添加几个物流导向的新方块,并微调了一些行为。

游戏机制

这是 Create 模组针对 Minecraft 1.20.1 和 1.21.1 的一个附属模组。

本模组旨在改进或扩展 Create 模组中与物流相关的多个领域。

新增内容

承诺上限(工厂仪表改进)

我们都经历过这种情况。你设置了一个新的工厂仪表,请求了 100 组任何东西,结果却发现你的生产设施跟不上,而 Create 尝试发送了 1000 个包含原材料的包裹,现在一切都糟透了。

承诺上限就是为了解决这个问题。现在,在配置工厂仪表时,你可以设置它一次可以打开的承诺数量的上限。例如,你可以将其限制为一次最多只等待一组物品。

你的工厂物流网络会因此感谢你。

额外库存(补货机改进)

补货机很酷,但我不喜欢它们的一点是,它们会补货到一个特定数值,而且一旦缺少哪怕一个圆石,它们就会请求达到该数值所需的精确数量。这可能有点愚蠢且浪费。因此,新增了额外库存功能!比方说,你有一个补货机设置为保持一组圆石在手。有了这个功能,你可以告诉补货机,当可用数量低于设定水平(1组)时,请求额外 8 组物品。然后,假设存储中的圆石数量下降到 32 个,也就是半组。它不会请求 32 个圆石来补回一组,而是会请求 544 个圆石。这包括了缺失的 32 个,再加上 8 组。有点像阈值开关,但用于补货。并且由于补货机的工作方式,其界面会有点笨重。

正则表达式(包裹地址改进)

通配符很好,但有时它们就是缺少点什么,对吧?那么,如果你敢的话,就去使用正则表达式吧。不,说真的,你现在可以用了。只需在你的地址模式前加上 regex:(不区分大小写),其余部分将被视为正则表达式。

收银机(新方块,类似股票行情机)

一个新方块,作为股票行情机的替代品。收银机专为商店设计。它们提供了用于提取物品的界面,而不是像股票行情机那样通过右键点击。此外,它们会在销售分类账中记录通过它们进行的所有销售。而且,它们看起来很棒!

作为一个小奖励,你可以从收银机中取出销售分类账,然后对着库存管理员使用它,以快速选择你销售的所有物品。如果你手动补货,这对于补充你的商店库存很有用。(这就像绘图 cannon 的物品剪贴板列表一样工作。)

包裹加速器(新方块,打包机加速)

一个辅助打包机的附属方块,这个方块使用应力和功率来加速其前方的打包机。我使用精制存储进行物品的大宗存储,随着系统的发展,单一的打包机成为了发送物品的瓶颈。这是我的解决方案,允许更快地发送包裹,但需要付出代价。

包裹加速器需要至少 30 RPM 才能运行。

包裹编辑器(新方块,重命名包裹)

一个新的包裹处理方块。包裹编辑器类似于重新打包机,但它不是合并来自同一订单的包裹,而是允许你使用规则来编辑包裹的地址。规则可以通过在包裹编辑器旁边放置告示牌,或将剪贴板连接到包裹编辑器的侧面来输入。推荐使用剪贴板。

为包裹编辑器编写规则时,第一行是要匹配的模式,第二行是替换匹配项的文本。例如,假设你有包裹被路由到带有前缀 Ware1- 的仓库,完整的包裹名称可能是 Ware1-Floor2-Storage。如果你想在包裹到达仓库后去掉 Ware1- 前缀怎么办?这很容易,只需让包裹通过一个带有此模式和一个空替换行的包裹编辑器即可:

Ware1-

包裹编辑器会搜索每个包裹名称开头的 Ware1-,如果找到,就用空文本替换它。你也可以这样写:

Ware1-{*}
$1

那么这是怎么回事?包裹编辑器将 { 和 } 内的任何内容视为捕获组。换句话说,该文本会被保存起来,并可以在你的替换文本中通过添加 $ 和相应的数字来引用。当然,如果你想做比通配符更高级的操作,你也可以使用正则表达式。

最后,如果你使用剪贴板,还可以管理两个特殊行为:

  1. 如果你勾选模式行旁边的复选框,该模式将被解释为不区分大小写。
  2. 如果你勾选替换行旁边的复选框,那么包裹编辑器将在此规则后停止(前提是此规则匹配)。例如,你可以用这个来制作一个包罗万象的规则,将不匹配任何其他规则的包裹发送到某个失物招领处。

火车网络监视器外设(新方块,仅限 CC: Tweaked)

你知道什么很酷吗?火车。你知道什么更酷吗?有一面巨大的关于你火车数据的酷炫数据墙。到达、出发、火车状态。而且火车对于物流也非常重要。火车网络监视器是一个单方块,允许你查询给定火车网络上任何站点和任何火车的实时数据。这包括普通火车站外设提供的一切,以及火车到达和出发的额外事件。你还可以看到系统中有多少包裹,以及连接到各个火车站的每个邮筒的状态。

如果你特别有冒险精神,可以启用可选功能来查看火车库存的更多详细信息,以及对远程火车和站点的读写访问。想用电脑即时更新时刻表?请便。但是,这默认是禁用的,因为对我来说这似乎有点过于不平衡。

矮座椅和高座椅(新方块,基本上就是……座椅?)

呃,座椅不是物流?你什么意思?你可以,呃……坐在上面,然后——好吧,好吧。这些有点超出了“额外物流”的范围,但我们添加座椅是有充分理由的!当然是美观。

根据你为库存管理员选择的生物类型,默认座椅的高度并不总是适合你的建筑。因此,我们添加了矮座椅和高座椅。矮座椅有 2/16 个方块高,而高座椅有 14/16 个方块高。(普通座椅当然是 8/16 个方块,也就是 1/2 个方块高。)

懒人传动轴(新方块,基本上就是传动轴)

我知道你在想什么。这也不是物流。而且 Create 有传动轴已经很多年了。Khloe,振作起来。但这很重要,我保证。懒人传动轴是我为了创建对延迟友好的传动轴所做的尝试。基本上,普通的传动轴每个单独的方块都有一个方块实体,对吧?这些传动轴试图在可能的情况下避免这种情况。只要你连续放置超过两个懒人传动轴,你在方块实体方面就会占优。如果你使用大量的传动轴,我的意思是大量,那么用它们替换可能会帮助你提升服务器性能。

柔性懒人传动轴(新方块,基本上是齿轮箱 + 懒人传动轴 + ???)

也有柔性懒人传动轴。它们类似于懒人传动轴,但可以在任何方向连接。不仅如此,它们还有可配置的侧面。只需用你的扳手点击一个侧面来露出一个传动轴。再次使用扳手来反转方向。

连接东西时要小心。由于它们在代码中的连接方式,有时如果存在不兼容的旋转问题,Create 最终可能会破坏一个不方便的柔性懒人传动轴。

我有没有提到懒人传动轴、柔性懒人传动轴和懒人齿轮可以被包裹?它们支持安山岩机壳、黄铜机壳、铜机壳、工业铁块和风化铁块。(是的,我想实现火车机壳,但由于一些奇怪的技术原因,这实际上有点棘手,至少如果我希望连接纹理能正常工作的话。它迟早会来的™。)

改进

地址匹配器优化

Create 的包裹地址匹配有点慢且未优化。这可能没问题,但在将 Create 与其他模组一起使用时也可能导致问题。我们在这里通过几个简单的更改来解决这个问题:

  1. 缓存编译后的匹配器。 执行包裹匹配时,每个包裹地址都会编译成正则表达式。这涉及首先将 glob 解析为正则表达式,然后将正则表达式编译成 Java 模式。我们所要做的就是缓存它。

  2. 由于包裹地址系统内部的工作方式,实际上有两个缓存,所以我把它算作两件事。但真的,仅仅缓存就足以在我的 SMP 服务器最近遇到的末日场景中更好地工作,这要归功于精制存储使用包裹过滤器处理包裹。

正则表达式(安全性)

我实际上知道已经有另一个模组可以让你对包裹地址使用正则表达式,但当我们在 SMP 中尝试时,服务器几乎立即被一名玩家弄崩溃了。正则表达式实际上可能相当危险,所以我包含了一些基本的东西,希望至少能阻止某人意外地用它们杀死服务器。即:

  1. 星号高度限制。 你知道正则表达式 (a+)+ 是危险的吗?这是因为一种叫做灾难性回溯的东西,而 Java 正则表达式库容易受到它的影响。它们也不是不可能被意外写出来。我们会检查所有正则表达式的星号高度,如果它们有问题,就会阻止它们运行。
  2. 重复限制。 虽然没有那么糟糕,但如果你尝试连续匹配 1000 个什么东西,性能可能会开始下降。这首先就不应该在包裹地址中出现,所以我们加了一个保护。
  3. 禁止反向引用。 正则表达式中的反向引用允许你说“匹配这个已经被匹配过的东西”,这可能很有用,但它可能对包裹地址无关紧要,而且可能很慢。默认情况下它们是不被允许的。

我们还确保在通过 Create 的 Glob.toRegexPattern 方法解析每个正则表达式时对其进行测试,即使这通常不会编译表达式,只是将其从 glob 转换为正则表达式。这很重要,因为这意味着从此方法返回的所有正则表达式都应该能够无错误地编译。

更长的青蛙口名称

正则表达式往往比 glob 要……更大一些,这对青蛙来说可能是个问题。因此,我们将青蛙口和邮筒的最大名称长度增加到了 100。……还好你可以复制粘贴。

让你的库存管理员保持就座

让我为你设定一个场景。你在一个蜂蜜商店。库存管理员是一只蜜蜂。你拿到购物清单,准备结账,所以你点击库存管理员然后——哦不!你点击了座椅!你刚坐下,蜜蜂就带着新获得的自由飞向了天空。你没有牵绳。你怎么才能让蜜蜂回到座椅上?飞行的生物最讨厌了。

这是一个简单的更改。如果你点击一个被库存管理员占据的座椅,什么也不会发生。如果你需要移开库存管理员,你可以破坏座椅或股票行情机。但至少你不会意外地做到这一点。