create-the-brass-oncerto/kubejs/client_scripts/Ponder/multiblock_structure/satellite_station.js

124 lines
6.2 KiB
JavaScript
Raw Normal View History

2025-04-11 17:07:29 +08:00
Ponder.registry((event) => {
event
.create(["kubejs:satellite_station", "kubejs:satellite", "kubejs:satellite_mining_module", "kubejs:satellite_scanning_module"])
.tag("kubejs:machine_and_multiblock")
.scene(
"kubejs:build_satellite_station",
"建造轨道卫星收发站",
"kubejs:satellite_station",
(scene, utils) => {
scene.configureBasePlate(0, 0, 9);
scene.showStructure(9);
scene.scaleSceneView(0.75);
scene.text(60, "你需要在收发站控制器附近建造结构来完成轨道卫星收发站");
scene.idle(80);
scene.addKeyframe();
scene.text(30, "...建造如下结构");
scene.world.hideSection([0, 1, 0, 8, 9, 8], Direction.up);
scene.idle(40);
scene.text(60, "如果你对方块种类有疑问,可以点击放大镜图标");
scene.idle(80);
const Layer1 = [[3, 1, 1], [4, 1, 1], [5, 1, 1], [2, 1, 2], [3, 1, 2], [4, 1, 2], [5, 1, 2], [6, 1, 2], [2, 1, 3], [3, 1, 3], [4, 1, 3], [5, 1, 3], [6, 1, 3], [2, 1, 4], [3, 1, 4], [4, 1, 4], [5, 1, 4], [6, 1, 4], [2, 1, 5], [3, 1, 5], [4, 1, 5], [5, 1, 5], [6, 1, 5], [2, 1, 6], [3, 1, 6], [4, 1, 6], [5, 1, 6], [6, 1, 6], [2, 1, 7], [3, 1, 7], [4, 1, 7], [5, 1, 7], [6, 1, 7], [2, 1, 8], [3, 1, 8], [4, 1, 8], [5, 1, 8], [6, 1, 8],]
const Layer2 = [[4, 2, 1], [3, 2, 2], [4, 2, 2], [5, 2, 2], [2, 2, 3], [3, 2, 3], [4, 2, 3], [5, 2, 3], [6, 2, 3], [2, 2, 4], [3, 2, 4], [4, 2, 4], [5, 2, 4], [6, 2, 4], [2, 2, 5], [3, 2, 5], [4, 2, 5], [5, 2, 5], [6, 2, 5], [2, 2, 6], [3, 2, 6], [4, 2, 6], [5, 2, 6], [6, 2, 6], [2, 2, 7], [3, 2, 7], [4, 2, 7], [5, 2, 7], [6, 2, 7], [2, 2, 8], [3, 2, 8], [4, 2, 8], [5, 2, 8], [6, 2, 8],]
const Layer3 = [[3, 3, 2], [4, 3, 2], [5, 3, 2], [2, 3, 4], [3, 3, 4], [4, 3, 4], [5, 3, 4], [6, 3, 4], [2, 3, 5], [6, 3, 5], [2, 3, 6], [6, 3, 6], [2, 3, 7], [6, 3, 7], [2, 3, 8], [3, 3, 8], [4, 3, 8], [5, 3, 8], [6, 3, 8],]
scene.addKeyframe();
scene.text(30, "第 1 层:", [3, 1, 4])
for (let i of Layer1) {
scene.idle(1);
scene.world.showSection(i, Direction.down);
};
scene.idle(74);
scene.addKeyframe();
scene.text(30, "第 2 层:", [3, 2, 4])
for (let i of Layer2) {
scene.idle(1);
scene.world.showSection(i, Direction.down);
};
scene.idle(40);
scene.text(60, "请注意:控制器应面向前方", [4, 2, 1]);
scene.overlay.showOutline("red", {}, [4, 2, 1], 30);
scene.idle(80);
scene.addKeyframe();
scene.text(30, "第 3 层:", [3, 3, 4])
for (let i of Layer3) {
scene.idle(2);
scene.world.showSection(i, Direction.down);
};
scene.idle(40);
}
)
.scene(
"kubejs:get_data",
"使用人造卫星",
"kubejs:satellite_station",
(scene, utils) => {
scene.configureBasePlate(0, 0, 9);
scene.showStructure(15);
scene.scaleSceneView(0.75);
scene.idle(20);
scene.addKeyframe();
scene.text(60, "轨道卫星收发站兼顾发射、接收和维护卫星的功能");
scene.idle(80);
scene.text(40, "以获取火箭导航数据为例:");
scene.idle(60);
scene.addKeyframe();
scene.text(60, "在发射时,你首先需要为发射台控制器提供卫星");
scene.showControls(15, [4, 2, 1], "up").withItem("kubejs:satellite")
scene.overlay.showOutline("green", {}, [4, 2, 1], 15);
scene.idle(80);
scene.text(60, "接着提供卫星探测模块和用于让卫星分辨目标的星球仪");
scene.showControls(15, [4, 2, 1], "up").withItem("kubejs:satellite_scanning_module")
scene.overlay.showOutline("green", {}, [4, 2, 1], 60);
scene.idle(30);
scene.showControls(15, [4, 2, 1], "up").withItem("ad_astra:earth_globe")
scene.idle(50);
scene.addKeyframe();
scene.text(60, "最后提供计算数据和空导航数据芯片就能发射卫星了!");
scene.showControls(15, [4, 2, 1], "up").withItem("kubejs:brass_hard_disk")
scene.overlay.showOutline("green", {}, [4, 2, 1], 60);
scene.idle(30);
scene.showControls(15, [4, 2, 1], "up").withItem("kubejs:navigate_data_empty")
scene.idle(50);
const Satellite1 = scene.world.createEntity("armor_stand", [4.5, 2.5, 6.5])
scene.world.modifyEntity(Satellite1, entity => {
entity.mergeNbt('{Invisible:1b,ArmorItems:[{},{},{},{Count:1b,id:"kubejs:satellite",tags:{}}]}')
})
const Satellite2 = scene.world.createEntity("armor_stand", [4.5, 8.5, 6.5])
scene.world.modifyEntity(Satellite2, entity => {
entity.mergeNbt('{Invisible:1b,ArmorItems:[{},{},{},{Count:1b,id:"kubejs:satellite",tags:{}}]}')
})
scene.idle(20);
for (let i = 1; i < 31; i++) {
scene.world.modifyEntity(Satellite1, entity => {
entity.addDeltaMovement([0, 0.002 * i, 0]);
entity.move("self", entity.getDeltaMovement());
});
scene.idle(1);
}
scene.world.removeEntity(Satellite1)
scene.idle(20);
for (let i1 = 1; i1 < 31; i1++) {
scene.world.modifyEntity(Satellite2, entity => {
entity.setDeltaMovement([0, -0.2, 0]);
entity.move("self", entity.getDeltaMovement());
});
scene.idle(1);
}
scene.world.removeEntity(Satellite2)
scene.addKeyframe();
scene.text(60, "卫星将会同时产出目标星球的着陆信息和入轨信息");
scene.showControls(15, [4, 2, 1], "down").withItem("kubejs:navigate_data_moon_orbit")
scene.overlay.showOutline("green", {}, [4, 2, 1], 60);
scene.idle(30);
scene.showControls(15, [4, 2, 1], "down").withItem("kubejs:navigate_data_moon")
scene.idle(50);
scene.addKeyframe();
scene.text(60, "发射台控制器可以自动从接触的容器中提取物品,也可以自动将物品输出到旁边的容器中");
scene.idle(80);
scene.addKeyframe();
scene.text(60, "最后需要注意的是——卫星只能在轨道中发射");
scene.idle(80);
}
)
});