Ponder.registry((event) => { event .create(["kubejs:launch_pad_controller", "kubejs:carrier_rocket"]) .tag("kubejs:machine_and_multiblock") .scene( "kubejs:use_launcher", "建造火箭发射台", "kubejs:launcher_pad_controller", (scene, utils) => { scene.configureBasePlate(0, 0, 15); scene.showStructure(9); scene.scaleSceneView(0.5); scene.text(60, "你需要在发射台控制器附近建造结构来完成火箭发射台"); scene.idle(80); scene.addKeyframe(); scene.text(30, "...建造如下结构"); scene.world.hideSection([0, 1, 0, 14, 9, 14], Direction.up); scene.idle(40); scene.text(60, "如果你对方块种类有疑问,可以点击放大镜图标"); const Layer1 = [[5, 1, 3], [6, 1, 3], [7, 1, 3], [8, 1, 3], [9, 1, 3], [5, 1, 4], [6, 1, 4], [7, 1, 4], [8, 1, 4], [9, 1, 4], [4, 1, 5], [5, 1, 5], [6, 1, 5], [7, 1, 5], [8, 1, 5], [9, 1, 5], [10, 1, 5], [3, 1, 6], [4, 1, 6], [5, 1, 6], [6, 1, 6], [7, 1, 6], [8, 1, 6], [9, 1, 6], [10, 1, 6], [11, 1, 6], [3, 1, 7], [4, 1, 7], [5, 1, 7], [6, 1, 7], [7, 1, 7], [8, 1, 7], [9, 1, 7], [10, 1, 7], [11, 1, 7], [3, 1, 8], [4, 1, 8], [5, 1, 8], [6, 1, 8], [7, 1, 8], [8, 1, 8], [9, 1, 8], [10, 1, 8], [11, 1, 8], [4, 1, 9], [5, 1, 9], [6, 1, 9], [7, 1, 9], [8, 1, 9], [9, 1, 9], [10, 1, 9], [5, 1, 10], [6, 1, 10], [7, 1, 10], [8, 1, 10], [9, 1, 10], [6, 1, 11], [7, 1, 11], [8, 1, 11],] const Layer2 = [[5, 2, 3], [6, 2, 3], [8, 2, 3], [9, 2, 3], [5, 2, 4], [6, 2, 4], [8, 2, 4], [9, 2, 4], [4, 2, 5], [5, 2, 5], [6, 2, 5], [7, 2, 5], [8, 2, 5], [9, 2, 5], [10, 2, 5], [5, 2, 6], [9, 2, 6], [5, 2, 7], [9, 2, 7], [5, 2, 8], [9, 2, 8], [4, 2, 9], [5, 2, 9], [9, 2, 9], [10, 2, 9], [5, 2, 10], [9, 2, 10],] const Layer3 = [[5, 3, 5], [7, 3, 5], [9, 3, 5], [5, 3, 6], [9, 3, 6], [5, 3, 8], [9, 3, 8], [5, 3, 9], [9, 3, 9],] const Layer4 = [[5, 4, 5], [9, 4, 5], [5, 4, 6], [9, 4, 6], [5, 4, 8], [9, 4, 8], [5, 4, 9], [6, 4, 9], [8, 4, 9], [9, 4, 9],] const Layer5 = [[5, 5, 5], [6, 5, 5], [7, 5, 5], [8, 5, 5], [9, 5, 5], [5, 5, 6], [6, 5, 6], [7, 5, 6], [8, 5, 6], [9, 5, 6], [4, 5, 7], [5, 5, 7], [6, 5, 7], [7, 5, 7], [8, 5, 7], [9, 5, 7], [10, 5, 7], [5, 5, 8], [6, 5, 8], [7, 5, 8], [8, 5, 8], [9, 5, 8], [6, 5, 9], [7, 5, 9], [8, 5, 9],] const Layer6 = [[6, 6, 5], [7, 6, 5], [8, 6, 5], [5, 6, 6], [9, 6, 6], [5, 6, 8], [9, 6, 8], [6, 6, 9], [7, 6, 9], [8, 6, 9],] const Layer7 = [[5, 7, 6], [9, 7, 6], [5, 7, 7], [9, 7, 7], [5, 7, 8], [9, 7, 8],] const Layer8 = [[5, 8, 6], [9, 8, 6], [5, 8, 7], [9, 8, 7], [5, 8, 8], [9, 8, 8],] const Layer9 = [[5, 9, 6], [9, 9, 6], [5, 9, 7], [9, 9, 7], [5, 9, 8], [9, 9, 8],] scene.addKeyframe(); scene.text(30, "第 1 层:", [5, 1, 5]) for (let i of Layer1) { scene.idle(1); scene.world.showSection(i, Direction.down); }; scene.idle(116); scene.addKeyframe(); scene.text(30, "第 2 层:", [5, 2, 5]) for (let i of Layer2) { scene.idle(1); scene.world.showSection(i, Direction.down); }; scene.idle(52); scene.addKeyframe(); scene.text(30, "第 3 层:", [5, 3, 5]) for (let i of Layer3) { scene.idle(2); scene.world.showSection(i, Direction.down); }; scene.idle(40); scene.text(60, "请注意:控制器应面向前方", [7, 3, 5]); scene.overlay.showOutline("red", {}, [7, 3, 5], 30); scene.idle(80); scene.addKeyframe(); scene.text(30, "第 4 层:", [5, 4, 5]) for (let i of Layer4) { scene.idle(2); scene.world.showSection(i, Direction.down); }; scene.idle(40); scene.addKeyframe(); scene.text(30, "第 5 层:", [5, 5, 5]) for (let i of Layer5) { scene.idle(1); scene.world.showSection(i, Direction.down); }; scene.idle(48); scene.addKeyframe(); scene.text(30, "第 6 层:", [5, 6, 5]) for (let i of Layer6) { scene.idle(2); scene.world.showSection(i, Direction.down); }; scene.idle(40); scene.addKeyframe(); scene.text(30, "第 7 层:", [5, 7, 5]) for (let i of Layer7) { scene.idle(2); scene.world.showSection(i, Direction.down); }; scene.idle(40); scene.addKeyframe(); scene.text(30, "第 8 层:", [5, 8, 5]) for (let i of Layer8) { scene.idle(2); scene.world.showSection(i, Direction.down); }; scene.idle(40); scene.addKeyframe(); scene.text(30, "第 9 层:", [5, 9, 5]) for (let i of Layer9) { scene.idle(2); scene.world.showSection(i, Direction.down); }; scene.idle(40); } ) .scene( "kubejs:launch_rocket", "发射火箭", "kubejs:launcher_pad_controller", (scene, utils) => { scene.configureBasePlate(0, 0, 15); scene.showStructure(9); scene.scaleSceneView(0.6); scene.world.createItemOnBeltLike([6, 5, 6], Direction.down, "1x create:andesite_casing"); scene.world.createItemOnBeltLike([6, 5, 8], Direction.down, "1x create:crushed_copper_ore"); scene.world.createItemOnBeltLike([7, 5, 6], Direction.down, "1x create:wrench"); scene.world.createItemOnBeltLike([7, 5, 8], Direction.down, "1x kubejs:rocket_mechanism"); scene.world.createItemOnBeltLike([8, 5, 7], Direction.down, "1x kubejs:differential"); scene.world.createItemOnBeltLike([8, 5, 8], Direction.down, "1x minecraft:shulker_box"); scene.idle(20); scene.addKeyframe(); scene.text(60, "火箭发射台兼顾发射、接收和维护火箭的功能"); scene.idle(80); scene.addKeyframe(); scene.text(60, "在发射时,你首先需要为发射台控制器提供火箭"); scene.showControls(15, [7, 3, 5], "up").withItem("kubejs:carrier_rocket") scene.overlay.showOutline("green", {}, [7, 3, 5], 15); scene.idle(80); scene.text(60, "为了保证飞行安全,火箭必须是完好无损的"); scene.overlay.showOutline("red", {}, [7, 3, 5], 30); scene.idle(80); scene.addKeyframe(); scene.text(60, "接着提供导航数据芯片,就能发射火箭了!"); scene.showControls(15, [7, 3, 5], "up").withItem("kubejs:navigate_data_earth") scene.overlay.showOutline("green", {}, [7, 3, 5], 15); const Rocket = scene.world.createEntity("armor_stand", [7.5, 6, 7.5]) scene.world.modifyEntity(Rocket, entity => { entity.mergeNbt('{Invisible:1b,ArmorItems:[{},{},{},{Count:1b,id:"kubejs:carrier_rocket",tags:{}}]}') }) scene.idle(30); scene.showControls(15, [7, 3, 5], "up").withItem("kubejs:navigate_data_earth_orbit") scene.overlay.showOutline("green", {}, [7, 3, 5], 15); scene.showControls(15, [7, 3, 5], "up").withItem("kubejs:navigate_data_moon") scene.overlay.showOutline("green", {}, [7, 3, 5], 15); scene.idle(30); scene.addKeyframe(); scene.text(60, "起飞时,火箭会装载周围八个置物台上的所有物品"); scene.world.removeItemsFromBelt([6, 5, 6]) scene.world.removeItemsFromBelt([6, 5, 8]) scene.world.removeItemsFromBelt([7, 5, 6]) scene.world.removeItemsFromBelt([7, 5, 8]) scene.world.removeItemsFromBelt([8, 5, 7]) scene.world.removeItemsFromBelt([8, 5, 8]) scene.overlay.showOutline("green", {}, [6, 5, 6,8,5,8], 15); for (let i1 = 0; i1 < 80; i1++) { scene.world.modifyEntity(Rocket, entity => { entity.addDeltaMovement([0, 0.012, 0]); entity.move("self", entity.getDeltaMovement()); }); scene.idle(1); } scene.addKeyframe(); scene.text(60, "如果火箭是从地面发射的,火箭的耐久将会耗尽;而从轨道发射的火箭则只会消耗部分"); scene.idle(80); scene.text(60, "导航数据决定了火箭的飞行目的地"); scene.idle(80); scene.addKeyframe(); scene.text(60, "由于导航数据具有时效性,在发射后,导航数据将被消耗,并返还一颗空白芯片"); scene.showControls(15, [7, 3, 5], "down").withItem("kubejs:navigate_data_empty") scene.overlay.showOutline("green", {}, [7, 3, 5], 15); scene.idle(80); scene.addKeyframe(); } ) .scene( "kubejs:recive_rocket", "接收火箭", "kubejs:launcher_pad_controller", (scene, utils) => { scene.configureBasePlate(0, 0, 15); scene.showStructure(0); scene.scaleSceneView(0.6); scene.idle(20); scene.addKeyframe(); scene.text(60, "在飞行后,火箭会出现在目标星球的相同坐标处的最高点并下降"); scene.idle(80); scene.addKeyframe(); scene.text(60, "你可以单纯的使用3*3的置物台来接收火箭"); let i2 = 0; let i1 = 0; function setDepot(pos1, pos2) { for (i2 = 0; i2 < 3; i2++) { for (i1 = 0; i1 < 3; i1++) { scene.world.setBlock([i1 + pos1, 1, i2 + pos2], "create:depot", false) scene.world.showSection([i1 + pos1, 1, i2 + pos2], Direction.down); scene.idle(2); } }; } setDepot(2, 7); setDepot(9, 2); setDepot(7, 11); scene.idle(20); scene.addKeyframe(); scene.text(60, "在卸货时,火箭的装载物会落到周围的八个置物台上,而火箭本身会落在中央"); const Rocket = scene.world.createEntity("armor_stand", [3.5, 14.5, 8.5]) scene.world.modifyEntity(Rocket, entity => { entity.mergeNbt('{Invisible:1b,ArmorItems:[{},{},{},{Count:1b,id:"kubejs:carrier_rocket",tags:{}}]}') }) const Rocket1 = scene.world.createEntity("armor_stand", [10.5, 14.5, 3.5]) scene.world.modifyEntity(Rocket1, entity => { entity.mergeNbt('{Invisible:1b,ArmorItems:[{},{},{},{Count:1b,id:"kubejs:carrier_rocket",tags:{}}]}') }) const Rocket2 = scene.world.createEntity("armor_stand", [8.5, 14.5, 12.5]) scene.world.modifyEntity(Rocket2, entity => { entity.mergeNbt('{Invisible:1b,ArmorItems:[{},{},{},{Count:1b,id:"kubejs:carrier_rocket",tags:{}}]}') }) for (i1 = 0; i1 < 126; i1++) { if (i1 >= 0) { scene.world.modifyEntity(Rocket, entity => { entity.setDeltaMovement([0, -0.2, 0]); entity.move("self", entity.getDeltaMovement()); }); } if (i1 >= 40) { scene.world.modifyEntity(Rocket1, entity => { entity.setDeltaMovement([0, -0.2, 0]); entity.move("self", entity.getDeltaMovement()); }); } if (i1 >= 60) { scene.world.modifyEntity(Rocket2, entity => { entity.setDeltaMovement([0, -0.2, 0]); entity.move("self", entity.getDeltaMovement()); }); } if (i1==62) { scene.world.removeEntity(Rocket) scene.effects.indicateRedstone([3.5, 2.25, 8.5]) } if (i1==65) { scene.world.createItemOnBeltLike([2, 1, 7], Direction.down, "1x kubejs:mechanical_core"); scene.world.createItemOnBeltLike([2, 1, 8], Direction.down, "16x kubejs:rubber"); scene.world.createItemOnBeltLike([2, 1, 9], Direction.down, "4x minecraft:cobblestone"); scene.world.createItemOnBeltLike([3, 1, 7], Direction.down, "3x kubejs:iron_hand"); scene.world.createItemOnBeltLike([3, 1, 8], Direction.down, "1x kubejs:carrier_rocket"); scene.world.createItemOnBeltLike([3, 1, 9], Direction.down, "32x kubejs:crushed_coal"); scene.world.createItemOnBeltLike([4, 1, 7], Direction.down, "12x kubejs:bearing"); scene.world.createItemOnBeltLike([4, 1, 8], Direction.down, "31x kubejs:sulphur"); scene.world.createItemOnBeltLike([4, 1, 9], Direction.down, "64x kubejs:salt"); } if (i1==102) { scene.world.removeEntity(Rocket1) scene.effects.indicateRedstone([10.5, 2.25, 3.5]) } if (i1==105) { scene.world.createItemOnBeltLike([10, 1, 3], Direction.down, "1x kubejs:carrier_rocket"); scene.world.createItemOnBeltLike([9, 1, 2], Direction.down, "3x kubejs:circuit_board"); } if (i1==122) { scene.world.removeEntity(Rocket2) scene.effects.indicateRedstone([8.5, 2.25, 12.5]) } if (i1==125) { scene.world.createItemOnBeltLike([8, 1, 12], Direction.down, "1x kubejs:carrier_rocket"); scene.world.createItemOnBeltLike([8, 1, 11], Direction.down, "3x kubejs:lamb_kebarb"); scene.world.createItemOnBeltLike([7, 1, 11], Direction.down, "31x ad_astra:cheese"); scene.world.createItemOnBeltLike([9, 1, 12], Direction.down, "12x kubejs:large_fries"); scene.world.createItemOnBeltLike([9, 1, 13], Direction.down, "61x kubejs:slime_cola_can"); } scene.idle(1); } } ) .scene( "kubejs:pad_automatic", "发射台自动化", "kubejs:launcher_pad_controller_auto", (scene, utils) => { scene.configureBasePlate(0, 0, 9); scene.showStructure(0); scene.world.showSection([4,1,4],Direction.down) scene.idle(5); scene.world.setBlock([5,1,4],"minecraft:chest",false) scene.world.showSection([5,1,4],Direction.down) scene.idle(5); scene.idle(20); scene.addKeyframe(); scene.text(60, "发射台控制器可以自动从接触的容器中提取物品"); scene.overlay.showOutline("green", {}, [5,1,4], 30); scene.showControls(15, [5,2,4], "up").withItem("kubejs:parts_box") scene.idle(10); scene.showControls(15, [4,2,4], "down").withItem("kubejs:parts_box") scene.idle(70); scene.addKeyframe(); scene.text(60, "发射台控制器还支持自动将物品输出到旁边的容器中"); scene.overlay.showOutline("green", {}, [4,1,4], 30); scene.showControls(15, [4,2,4], "up").withItem("kubejs:navigate_data_empty") scene.idle(10); scene.showControls(15, [5,2,4], "down").withItem("kubejs:navigate_data_empty") scene.idle(70); scene.addKeyframe(); scene.text(60, "更棒的是,它也可以跟抽屉控制器交互!"); scene.world.setBlock([5,1,4],"storagedrawers:controller",true) scene.idle(5); scene.world.showSection([6,1,4],Direction.down) scene.idle(5); scene.showControls(15, [5,2,4], "up").withItem("kubejs:parts_box") scene.idle(10); scene.showControls(15, [4,2,4], "down").withItem("kubejs:parts_box") scene.idle(30); scene.showControls(15, [4,2,4], "up").withItem("kubejs:navigate_data_empty") scene.idle(10); scene.showControls(15, [5,2,4], "down").withItem("kubejs:navigate_data_empty") scene.idle(70); } ) });