简介
你是否花费了大量时间建造能产出大量资源的农场,却发现自己把所有时间都花在手动将原材料合成成可用物品上?如果这让你失去了游戏的乐趣,那么这个插件可以帮到你。它提供了一套自动合成物品的机制。
插件功能
本插件实现了一个自动合成系统(或称自动合成器)。玩家不再需要直接与工作台交互来合成大量物品。玩家可以布置一系列方块,指定一个配方,这些方块就会自动将原材料转化为新合成的物品。
工作原理
首先,你需要将一个发射器配置为“合成方块”。为此,请在发射器上放置一个物品展示框,并在展示框中放入一个工作台。此时,物品展示框会变为隐形,这个“合成方块”就可以在设置好配方并提供原材料后自动合成物品。
接着,在合成方块/发射器的正面(即与发射器相邻的一面)放置一个“输出”容器(箱子、木桶、潜影盒、漏斗等)。合成方块会将合成好的物品放入这里。
最后,在与“输出”容器相对的发射器另一侧,放置一个“输入”/“原料”容器。合成方块会在每个合成周期从此容器中寻找合适的合成原料来制作新物品或方块。
如何配置合成配方?
当发射器被配置为合成方块并连接好输入和输出容器后,像与工作台交互一样右击它。玩家将看到传统的工作台界面。
像在普通工作台上一样,在合成方块的物品栏中精确放入你希望自动合成的配方所需原料。然后,不要从结果槽中取出合成好的物品,直接关闭界面。至此,一个可运行的“自动合成方块”就配置完成了。
每个合成周期(默认为20游戏刻),合成方块会尝试从原料容器中提取物品以满足配方要求。如果成功,它会将原料转化为合成物品,并将新物品放入输出容器。如果输出容器空间不足,则不会进行合成。
每次成功合成一个新物品时,之前放在物品展示框中的工作台会顺时针旋转一次,以提供合成方块正在工作的视觉反馈。(如果将此物品从展示框中移除,合成方块将变回普通发射器。)
特殊容器行为
如果原料容器是一个陷阱箱,合成方块将永远不会提取某个物品槽中的最后一件物品。此行为允许你在陷阱箱中为特定原料保留槽位。当配方需要多种原料,而你不希望一个漏斗向箱子输送物品时占满所有槽位、导致其他必需原料无处存放时,这非常有用。
支持哪些配方?
大多数配方都受支持,包括使用数据包添加的配方。但是,目前不支持部分配方。Minecraft 服务器将一些配方作为特殊情况实现,它们不使用正常的合成机制。这些配方在 Minecraft Wiki 上有描述。
为了让这些配方工作,必须在插件中进行模拟。目前,烟花、迷之炖菜、药箭、染色潜影盒以及将旗帜应用到盾牌上的配方已被模拟。其他特殊配方将根据时间和兴趣逐步添加。
另外,在合成蜂蜜块时,空玻璃瓶会与蜂蜜块一同被放入输出容器。
对服务器负载影响大吗?
我们投入了大量时间来降低此插件的开销,包括直接处理时间和导致垃圾回收开销增加的内存压力。服务器负载取决于合成方块的繁忙程度。即便如此,在我的测试服务器上,即使有多个农场持续产出方块,负载也保持在服务器刻的1%以下。当合成方块空闲时,插件通常不会出现在 /timings 报告中,除非你显示所有活动。
配置 (config.yml)
插件启动时,如果其配置目录 Craftmatic 中不存在配置文件 config.yml,则会创建它。插件永远不会修改已存在的 config.yml,即使插件版本新增了配置选项。(这是为了确保管理员添加到 config.yml 中的任何有用注释不会丢失,因为 Spigot 的配置修改 API 不保留注释。)
不过,插件每次启动时都会创建/覆盖一个 config.default.yml 文件。管理员不应修改此文件,因为更改会被覆盖。后一个文件作为当前版本插件支持的所有配置项(及其未指定时的默认值)的文档。
已知问题
- 在某些边缘情况下,更改合成方块任意一侧的容器可能导致合成方块停止工作。但是,如果你随后打开并关闭发射器的物品栏,或点击物品展示框中的工作台,它将重新开始合成。
- Minecraft 接受形状配方在工作台中左右镜像。插件目前不支持此功能。对于形状配方,合成方块中的物品布局必须与配方完全匹配。
- 出于未知原因,在 1.17 版本中,如果玩家正在查看作为合成方块输出的双箱,当合成方块将新物品放入双箱时,玩家的查看界面会立即关闭。这在 1.16 版本或其他容器上不会发生。
与 LWC 插件的已知问题
Craftmatic 插件的行为与 LWC 插件的行为存在交互。具体来说,Craftmatic 插件在合成物品时会生成一个 InventoryMoveItem 事件,使得物品看起来像是直接从源/输入容器移动到了目标/输出容器。LWC 部分通过选择性取消这类事件来保护箱子。
根据测试,如果玩家告诉 LWC 插件允许漏斗将方块放入输出容器,两个插件都能正常运作。即使输入容器不是漏斗,这也是必要的。即,玩家应执行 /lwc flag hopperin on 并左键点击输出容器,之后合成方块就应该能够将合成物品放入输出容器了。
通过权限控制使用
插件本身并未尝试通过权限对合成方块的使用进行强力控制。相反,在需要更多控制的情况下,可以将插件配置为仅使用自定义的、不可合成的方块(而非默认的工作台物品)来激活。然后,服务器管理员可以使用其他方式来控制这些激活方块的创建和分发。
如果你希望严格控制谁能创建合成方块,那么你需要选择一个无法通过正常手段从世界中收集或合成的物品作为激活物品(即放入物品展示框的物品)。在这种情况下,你可以在 config.yml 中将激活物品设置为一个序列化的 ItemStack 规格。下面是一个示例,强制使用一个具有特定描述性“ lore ”和插件特定 NBT 数据的工作台。使用 /craftmatic:give 命令在游戏中获取此方块。give 命令本身的使用由 craftmatic.command.give 权限控制。
activationItem:
==: org.bukkit.inventory.ItemStack
v: 2730
type: CRAFTING_TABLE
meta:
==: ItemMeta
meta-type: UNSPECIFIC
display-name: '"craftmatic activator"'
lore:
- '{"text":"activates one automatic crafting block","color":"yellow","italic":false}'
PublicBukkitValues:
craftmatic:valid: 1i注意:以上内容目前仅在 1.17 上测试过。序列化形式可能随每个 Spigot 版本而变化,并且在 1.16.5 上可能必然不同。
虽然可以手动创建和编辑 activationItem 配置项,但不建议这样做。相反,管理员应在游戏中使用其他插件来编辑物品名称和 lore 以创建所需物品。也可以使用 /craftmatic item mark 命令为物品添加其他插件不易操作的额外 NBT 数据。一旦物品按需制作完成,使用 /craftmatic item show 命令生成并显示 activationItem 配置所需的 org.bukkit.inventory.ItemStack 值。然后,管理员可以将生成的值复制并粘贴到 config.yml 中。
命令与权限
所有命令都作为 /craftmatic 命令的子命令实现。
基础命令
- 命令:
/craftmatic - 权限:
craftmatic.commands.use - 说明:不带参数时此命令不执行任何操作。但是,玩家必须拥有此权限才能使用任何 Craftmatic 命令,并使该命令显示在玩家的可用命令列表中。
物品相关命令
- 命令:
/craftmatic item give - 权限:
craftmatic.command.item-give - 说明:给予玩家一个配置文件中定义的激活物品,该物品必须放入物品展示框以创建合成方块。
- 命令:
/craftmatic item mark - 权限:
craftmatic.command.item-mark - 说明:为玩家手中的物品添加 Craftmatic 特定的元数据,以创建一个独特的物品。当 OP 为插件构建自定义激活物品时很有用。
- 命令:
/craftmatic item show - 权限:
craftmatic.command.item-show - 说明:在玩家的聊天栏中显示手中物品的序列化形式。此序列化形式适合包含在插件的配置文件中以重新定义激活物品。
管理与查看命令
- 命令:
/craftmatic reload - 权限:
craftmatic.command.reload - 说明:指示插件从磁盘重新加载其配置,并重新搜索活跃的合成方块。
- 命令:
/craftmatic show [玩家名]... - 权限:
craftmatic.command.show - 说明:在玩家的聊天栏中显示所有活跃的合成方块(即位于已加载区块中的),包括它们的配方以及合成物品的速率。如果命令中提供了玩家名,则只显示这些玩家的合成方块。