快轉到主要內容

Add-On Scripting API 入門

分類   遊戲攻略 Minecraft
標籤   Minecraft Bedrock
🗓️ 民國110年 辛丑年
✍ 切換正體/簡體字
目錄

注意:這篇文章介紹的是舊版的Scripting API,Minecraft 1.18以後已經從遊戲中移除。


2018年加入的Scripting API (腳本API) 是用於控制Minecraft Add-On組件的腳本程式,以JavaScript寫成,可以自訂UI和對Minecraft做更進階的操作。

不過Script API只能運作在Windows 10或伺服器。

2021年,Mojang加入了Gametest Framework,舊的Scripting API稱做v1。官方在 Q&A已經表示若發展成熟,舊的Scripting API就會被取代掉,畢竟Scripting API已經N年沒更新了。可以確定的是,這些新項目將保證在手機上也能運作,而不是只限電腦。

2022年,Scripting API正式被新的Script API取代。請看: Minecraft基岩版Add-On Script API入門

1. 在manifest.json中註冊使用Scripting API
#

腳本是放在行為包中,除了註冊代表行為包的"data"外,還要使用"client_data"來註冊。

{
	"format_version": 2,
	"header": {
		"name": "Scripting API 範本包",
		"description": "Scripting API 範本包",
		"min_engine_version": [
			1,
			14,
			0
		],
		"uuid": "cd60231a-ebd3-450b-95af-2dea0034b1e0",
		"version": [
			0,
			0,
			1
		]
	},
	"modules": [
		{
			"type": "data",
			"description": "Scripting API module",
			"uuid": "3bde2b9a-051c-49ab-905e-e6eda498a34e",
			"version": [
				0,
				0,
				1
			]
		},
		//Scripting API
		{
			"type": "client_data",
			"description": "Scripting API module",
			"uuid": "fbf54196-a027-4d22-a976-c2b390c0fe94",
			"version": [
				0,
				0,
				1
			]
		}
	]
}

2. 檔案結構
#

腳本檔案放在行為包scripts/下,裡面有server和client二個資料夾,二個資料夾下又可以有個別的js,代表伺服器端和使用者端,有不同的函數可以使用。但沒有硬性規定要分client和server資料夾放。

3. 簡單的例子
#

這個範本改寫自 Bedrock Wiki

行為包scripts/server/serverScript.js,輸入:

//註冊server端的system
const systemServer = server.registerSystem(0, 0)

// 腳本完整載入後就會執行
systemServer.initialize = function () {
	// 開啟除錯訊息
	const scriptLoggerConfig = this.createEventData(
		'minecraft:script_logger_config'
	)
	scriptLoggerConfig.data.log_errors = true
	scriptLoggerConfig.data.log_information = true
	scriptLoggerConfig.data.log_warnings = true
	this.broadcastEvent('minecraft:script_logger_config', scriptLoggerConfig)

	//開始註冊事件,組件,監聽器...

	this.counter = 0
}

//  每1秒執行20次
systemServer.update = function () {
	this.counter++
	if (this.counter === 20) {
		this.log('Server!')
		this.counter = 0;
	}
}

//顯示訊息的方法
systemServer.log = function (input) {
	const chatEvent = this.createEventData('minecraft:display_chat_event')
	chatEvent.data.message = input;
	this.broadcastEvent('minecraft:display_chat_event', chatEvent)
}

// 離開世界時執行
systemServer.shutdown = function () {
}

行為包scripts/client/clientScript.js,輸入:

// 註冊client端的system
const systemClient = client.registerSystem(0, 0)

// 腳本完整載入後就會執行
systemClient.initialize = function () {
  // 開啟除錯訊息
  const scriptLoggerConfig = this.createEventData(
    'minecraft:script_logger_config'
  )
  scriptLoggerConfig.data.log_errors = true
  scriptLoggerConfig.data.log_information = true
  scriptLoggerConfig.data.log_warnings = true
  this.broadcastEvent('minecraft:script_logger_config', scriptLoggerConfig)

  // 開始註冊事件,組件,監聽器...

  this.counter = 0
}

// 每1秒執行20次
systemClient.update = function () {
  // print hello world to the world's chat once per second
  this.counter++
  if (this.counter === 20) {
    this.log('Client!')
    this.counter = 0;
  }
}

//顯示訊息的方法
systemClient.log = function(input){
  const chatEvent = this.createEventData('minecraft:display_chat_event')
	chatEvent.data.message = input;
	this.broadcastEvent('minecraft:display_chat_event', chatEvent)
}

// 離開世界時執行
systemClient.shutdown = function () {
}

啟用這個行為包進入世界後,client和server的script會交替執行(每1秒20次),並一直輪流顯示訊息在聊天欄中。

在這裡可以觀察到,總是server端先執行,才輪到client端。

按這裡閱讀Scripting API文檔

MCPEDL上用Scripting API寫成的作品

相關文章

【模組分享】手機版JEI,Toolbox for Minecraft: PE
分類   遊戲攻略 Minecraft
標籤   Minecraft Bedrock Android
在手機上製作Add-On模組,Add-On Maker簡介
分類   遊戲攻略 Minecraft
標籤   Minecraft Add-On Android
Minecraft Add-On的中文應該怎麼稱呼
分類   遊戲攻略 Minecraft

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。