返回提交历史

XFEstudio/MCIndustry

优化磁铜传送带逻辑

9d46527
X
XFEstudio <mail@xfegzs.com>
提交于

代码差异

2 个文件 +29 -12
Modified mod.hjson +1 -1
@@ -2,6 +2,6 @@
2 2 name:磁铜工业
3 3 author:XFEstudio
4 4 "description":"[purple]磁铜工业,适合度过前期,以及为后期增加各类工厂工业制造模块,方便传输,增加新炮塔及工厂,全工业基于磁铜,持续测试中"
5 version:"2.50"
5 version:"2.51"
6 6 minGameVersion:136
7 7 }
Modified scripts/blocks/磁铜传送带.js +28 -11
@@ -1,26 +1,43 @@
1 1 // StackConveyor 的标称速度是“整组容量 × 每秒移动组数”。原版装载端仍然
2 2 // 等待相邻建筑逐件 dump,所以单个物品源会先被 100/s 的输出上限卡住。
3 // 磁铜传送带在装载状态下从相邻 ItemSource 补满一组,使 25 件物品可以真正
3 // 磁铜传送带在装载状态下从相邻 ItemSource 或 Drill 补满一组,使 25 件物品可以真正
4 4 // 每 3 tick 向前移动一次,即 25 × 60 / 3 = 500 件/秒。
5 5 function pullFrom(magneticConveyor, build, source, room){
6 6 if(source == null || source == build.front() || source.team != build.team){
7 7 return 0;
8 8 }
9 9
10 // 只对无限物品源做主动补组。普通工厂、核心和仓库仍沿用原版输入
11 // 规则,避免传送带错误抽走配方原料或绕过卸载器。
12 if(!(source.block instanceof ItemSource)){
13 return 0;
10 if(source.block instanceof ItemSource){
11 // ItemSource 没有持久库存;outputItem 就是无限供应的配置物品。
12 const item = source.outputItem;
13 if(item == null || (build.items.any() && !build.items.has(item)) || !source.canDump(build, item)){
14 return 0;
15 }
16
17 build.handleStack(item, room, source);
18 return room;
14 19 }
15 20
16 // ItemSource 没有持久库存;它的 outputItem 就是无限供应的配置物品。
17 const item = source.outputItem;
18 if(item == null || (build.items.any() && !build.items.has(item)) || !source.canDump(build, item)){
19 return 0;
21 if(source.block instanceof Drill){
22 // 钻头只会产出 dominantItem,因此可以安全地批量取走该物品;不能
23 // 使用 items.first(),否则将来扩展钻头时可能误取其他内部物品。
24 const item = source.dominantItem;
25 if(item == null || (build.items.any() && !build.items.has(item)) ||
26 !source.items.has(item) || !source.canDump(build, item)){
27 return 0;
28 }
29
30 const amount = Math.min(room, source.items.get(item));
31 const removed = source.removeStack(item, amount);
32 if(removed > 0){
33 build.handleStack(item, removed, source);
34 }
35 return removed;
20 36 }
21 37
22 build.handleStack(item, room, source);
23 return room;
38 // 普通工厂、核心和仓库仍沿用原版输入规则,避免传送带错误抽走
39 // 配方原料或绕过卸载器。
40 return 0;
24 41 }
25 42
26 43 function fillLoadingDock(magneticConveyor, build){