Satiscraftory.

Satiscraftory.

Satiscraftory 是一个受游戏《幸福工厂》启发的工厂自动化模组。通过解决物流挑战,建造遍布世界的工厂并加工完全可再生的资源。

技术

请务必阅读

这个模组目前是一个非常早期的alpha/技术演示版本。请不要期待一个功能完整或适合生存模式的体验。会有bug、崩溃、存档不稳定(在模组版本之间),以及整体打磨不足。某些东西肯定会出问题。

什么是Satiscraftory?

正如你可能猜到的,Satiscraftory是一个灵感来源于游戏《幸福工厂》的工厂自动化模组。它是从零开始构建的,以支持庞大的、跨越整个世界的工厂,让你通过解决物流挑战来开采和加工无限可再生资源。

与区块无关的模拟

每个工厂组件都会始终进行全局逻辑运算并持续生产资源,即使它们所在的区块完全被卸载——这包括其他维度。这听起来可能会导致严重的卡顿,但该模组在设计时考虑到了这一点,并进行了相应的优化。有关更多信息,请参阅页面底部的性能说明。

⚠️ 技术性权衡 ⚠️

为了实现与区块无关的模拟,该模组完全运行在它自己的封闭后端上。这意味着:

  • 有限的原版互操作性 - 除容器外,工厂组件无法与红石、掉落物实体、漏斗、生物等互动。容器功能类似于原版箱子,可以作为Satiscraftory与原版/其他模组之间的桥梁。
  • 不与其他科技模组集成 - 因为方块实体仅用于渲染,Satiscraftory无法连接到任何其他科技模组的管道、线缆或机器。把它想象成一个独立的工厂游戏。另外,如上所述,你可以使用容器作为桥梁,但这显然会依赖于区块加载。以这种方式使用容器多少违背了模组的初衷,但随你怎么做。

入门指南

(下文提到的工厂组件可以在专用的创造模式标签页中找到)

  1. 定位资源节点: 探索世界以找到资源区块(目前是铁矿或铜矿)。如果找不到,可以使用 /findnode 命令。你也可以通过 /place feature <feature_id> 手动放置它们。
  2. 建造采矿机: 将采矿机放置在节点上方,使用放置预览以确保放置有效。每个节点只能放置一个采矿机。放置后,采矿机将开始以节点纯度决定的速率生产资源。
  3. 建造你的工厂: 将传送带连接到采矿机,开始将资源送入机器。使用分流器或合并器来构建更复杂的物流,例如歧管设计。
    附加信息: 有关本页面未涵盖的任何信息,请参阅维基百科。

工厂组件

注意:带项目符号的开发工具仅在创造模式下有效。

采矿机/生产器: 你工厂的起点。无限生成单一类型的物品。

  • 手持物品右键点击以生产该物品。
  • 空手右键点击以增加生产间隔。按住潜行键以减少它。

传送带: 在其他所有工厂组件之间运输物品。有3种形状:直线、转弯和斜坡。

  • 右键点击以反转传送带的方向。

分流器/合并器: 将一条传送带分流到最多3条新的传送带,或将最多3条传送带合并为一条新的传送带。使用轮询调度策略均匀分配物品。

机器: 根据机器的配方将一种或多种物品转换为其他一种或多种物品。默认将原矿铁转换为铁锭。配方可以作为数据包添加到 data/<your_namespace>/machine_recipes 下。

  • 在看向机器时使用 /factory setrecipe <recipe_id> 来更改其配方。还有一个内置配方可以将铁锭转化为铁板,你可以用它来测试这个功能。

容器: 功能上等同于箱子,可存储27格任何物品。也可以输出物品以充当存储缓冲区。在已加载的区块中,容器功能与原版箱子相同,可通过漏斗接受和推送物品。如果你希望将Satiscraftory与原版/其他模组集成,可以使用这个功能,但这显然依赖于区块的加载。

消耗器: 销毁任何物品。仅此而已。

推荐模组

  • Sodium:在屏幕上有大量工厂组件/传送带物品时大幅提升FPS。在某些极端情况下,FPS可以提升一倍以上。在我的测试中,有5000个传送带物品(2500条传送带)时,FPS从约22提升到约48。
  • Spark:对于查找性能瓶颈和查看系统资源使用情况极为有用。当你提供Spark报告时,也能极大地帮助报告性能问题。
  • Entity Culling:对方块实体剔除(尤其是传送带)有一点帮助。
  • FerriteCore & ModernFix:内存优化等功能。
  • WorldEdit:复制/粘贴工厂以进行压力测试,或加速建造重复性工厂。Satiscraftory未来最终(可能会)会有这类功能的官方特性。

额外性能说明

刻延迟(CPU与网络)

当玩家附近已加载的区块中有大量传送带时,TPS会急剧下降。这不一定是个严重问题,但在压力测试时应牢记这一点。这是由于发送大量同步数据包的网络开销造成的。虽然数据包确实在某种程度上进行了批处理(150条传送线,即2400条传送带),但大约10万条传送带仍然足以使其崩溃。在实际使用中,这不太可能接近正常使用量,但未来可能会进一步优化。

当工厂分散开来时,就像你在常规游戏中通常做的那样,性能应该不是大问题。这是一个在完全空旷、没有生物生成或其他任何东西的超平坦世界中放置10万条(未加载)传送带的测试:https://spark.lucko.me/IAj24rSlrH

FPS

渲染目前是模组最大的性能瓶颈。正如上面推荐模组部分所述,即使使用Sodium,屏幕上显示5000个移动物品(2500条传送带)时,FPS降至50以下。

虽然5000个屏幕上的物品仍然接近一次游戏中正常预期范围的上限,但仍有巨大的改进空间——尤其是考虑到这是在没有大量动画机器在屏幕上的情况下,而那将会进一步恶化FPS问题。这个问题将在不久的将来得到解决,一旦Flywheel的26.1.2移植版完成。Flywheel将使Satiscraftory能够利用实例化渲染,有望将FPS数据提高不少。

命令

/factory count [可选: belts/consumers/containers/machines/produces] - 输出全局工厂组件的总数。包括未加载的区块和其他维度
/factory loaded [可选: 同上] - 输出已加载区块中的工厂组件数量
/factory rendered [可选: 同上] - 输出由你的客户端加载的区块中的工厂组件数量
/factory setrecipe <recipe> [at/force] - 设置机器的配方,可选择在指定的方块坐标(同一维度)处进行。force 选项将强制机器清空其缓冲区并停止合成,以便立即设置新配方
/factory [freeze/unfreeze] - 冻结/解冻所有工厂的运算,与服务器刻分开
/findnode <type> - 定位指定类型的最近资源节点

已知问题

  • 将传送带合并/侧向加载时,物品会出现在该传送带道次的起点,而不是精确的方块位置
  • 偶尔会出现传送带物品的轻微视觉故障,最常见于从一条传送带线移交到另一条时
  • 工厂方块模型会相互嵌入并导致z-fighting。模型的大小是有意为之,但它们仍然是占位符。最终将禁止将它们放置得过于接近,有些将成为多方块结构

参与其中

反馈

让其他人对他们的系统进行压力测试、报告bug以及任何其他反馈都非常有价值!请随时分享任何想法——无论是问题、功能请求、你喜欢或不喜欢的某样东西,等等。这个模组仍处于早期阶段,所以我对几乎任何事情都持开放态度。

需要帮助!

目前,模组的瓶颈是美术。我绝不是艺术家,但我会尽我所能让东西不只是一些无聊的占位符。然而,在开发模组的同时处理美术是一项困难且不可持续的任务。例如,采矿机Mk. 1,即使可以直接参考《幸福工厂》,仍然花了几个整天的工作时间。

如果你是艺术家、动画师或音效设计师,并且你想提供帮助,请加入Discord服务器或直接给我发消息(stasis_the_shattered)

报告问题

报告逻辑(CPU、RAM)性能问题时,请包括:

  • 总共有多少工厂组件,以及有多少在已加载的区块中。使用 /factory count 和 /factory loaded 命令
  • Spark分析器结果的链接,并运行至少30秒以上。如果你的情况中Spark不可用,请至少提供平均TPS和服务器上的玩家数。更多信息总是有帮助的
  • (如果可用)CPU规格和分配给Minecraft实例的RAM

报告渲染性能问题时,请包括:

  • 大约有多少工厂组件正在被渲染,以及有多少在客户端加载的区块中。使用 /factory rendered 命令
  • 屏幕上显示工厂组件时的平均FPS,以及你正常在世界中活动且屏幕上看不到工厂时的平均FPS
  • 任何已安装的著名渲染模组,例如Iris。如果使用着色器,请注明着色器包名称
  • GPU规格