創作內容

8 GP

MCDP - Minecraft 資料包編輯器(Beta 1.2)

作者:貓狗喵│2019-07-03 00:16:26│巴幣:1,022│人氣:2069

MCDP 是什麼


MCDP 為 Minecraft Data Pack 的縮寫,透過 Python 進行開發。
MCDP 是一款建置資料包的軟體,你可以透過他將 dpl 腳本文件建置成資料包。
dpl 腳本文件旨在協助創作者更加方便的編寫 Minecraft functions,並且可以引用其它 dpl 腳本中的內容增加可讀性與開發效率。

這款軟體仍在開發階段,並且完全開源。
未來期望可以建立一個創作者的社群以及 dpl 函式庫,降低創作的門檻。

特色介紹影片


基礎教學


  • 基本概念
MCDP 所有操作均需在命令提示字元 (cmd) 中執行,執行時會以 cmd 當前路徑為基準建立或尋找檔案,關於 cmd 中路徑設定相關內容請詳見維基內容。若成功安裝 MCDP 後,在 cmd 中輸入 "mcdp" 應該會出現可用指令的提示。

  • 建立專案
輸入 "mcdp create <專案名稱>" 在當前目錄建立一個對應名稱的專案資料夾。專案名稱可以是一個路徑,程式會在指定路徑建立專案資料夾,並以路徑中最後的目錄替專案命名,專案名稱與位置可以在日後隨時修改。
專案資料夾中存放著 __main__.dpl 檔案與 build / data 兩個資料夾,其中 __main__.dpl 即是我們的腳本文件,不可更改其位置與名稱。而未來建置好的資料包則會存放在 build 資料夾中,data 則用來放入資料包中無法直接透過 mcdp 編輯的檔案。

  • 編輯腳本
你可以使用任何文字編輯軟體編輯 dpl 腳本,若你是 notepad++ 的使用者,可以下載 highlight xml for notepad++ 並套用 highlight。若使用黑色背景可以下載暗色版本的 highlight。(另外還有灰色版本 highlight)

Highlight 套用教學:打開 Notepad++ ➔ 程式語言 ➔ 定義程式語言 ➔ 匯入... ➔ 選擇下載的 dpl.xml 檔案 ➔ 完成

  • 建置資料包
輸入 "mcdp make <專案資料夾位置>" 嘗試將專案建置為資料包。建置完成的資料包會存放在專案資料夾中的 build 資料夾內。

  • 安裝函式庫
輸入 "mcdp install <函式庫名稱>" 從網路上下載並安裝對應的函式庫 (尚未實現)。

將寫好的專案資料夾或單純的腳本文件放置在安裝的 mcdp 資料夾中的 lib 資料夾內,其他腳本文件就能根據檔案名稱引用該專案中的內容,注意檔案名稱不能有空格。另外也可以將它們放置在你的專案資料夾內,與 __main__.dpl 位於相同目錄底下的檔案都可以被該專案引用。

輸入 "mcdp uninstall <函式庫名稱>" 將指定名稱的函式庫從 lib 資料夾中移除。


腳本格式介紹


詳細格式範例可以參見安裝的 mcdp 資料夾中的 samp 資料夾的內容。
內容採逐行讀取模式,除安插的 python 程式碼外沒有縮排限制。
  • 空行:沒有限制,讀取過程會直接忽略空行。
  • 註解:該行內容的開頭 (不含縮排) 為 # 符號時代表該行為註解,將視為空行處理。
  • 字串:由雙引號 "" 包裝的文字視為字串,部分需要輸入文字的內容可以使用字串。
  • 資料包敘述:"description = <敘述字串>" 編寫,不可換行。
  • 宣告檔案:
行的開頭可以用 namespace / folder / func 分別宣告 namespace 資料夾 / 普通資料夾 / function檔案。其中 namespace 資料夾的名稱不能重複,除非先前宣告的 namespace 資料夾虛擬檔案。但在同一個 namespace 底下的檔案若有重複的名稱,則後宣告的檔案會覆蓋先宣告的檔案。

例如用 "namespace test()" 宣告一個名叫 test 的 namespace 資料夾。要注意建立檔案母子關係時,最上層的檔案必須是 namespace 類別,namespace 類別中也不可以定義其它 namespace 類別的內容。小括號內可以傳入參數名稱,以逗號或空格分隔,可以使用字串。需要注意的是有設定參數的檔案必須設定為虛擬檔案 (as virtual),後面會再詳細說明。

宣告完一個檔案後可以在同一行後面加上其它參數,例如 fromas virtual
其中 from 後面必須接續其它已定義的檔案,例如 "folder test2() from test()" 會將上述宣告的 test 這個 namespace 中定義的內容複製到 test2 這個資料夾。若 test 有設定參數,這邊也需要在 test 後面的小括號傳入對應數量的參數。假設 test 這個 namespace 中有另外宣告 test3 這個資料夾,若是想要複製 test3 的內容到 test2 中,則可以使用 "folder test2() from test().test3()",以點 . 來串接子檔案。

要注意 from 的來源檔案類型必須與宣告的檔案類型相容,其中 func 不可以與 namespacefolder 相容,但 namespacefolder 類型則可相容。

as virtual 必須宣告在該行的最後面,代表這個檔案是虛擬檔案。虛擬檔案可以被其它宣告的檔案使用 from 來引用,但是不會在建置資料包的時候被建置出來。

  • 區塊:完成檔案的宣告後,會從接下來的內容中讀取區塊。
區塊是由大括號 {} 包裝的範圍,其中 {} 兩個符號都必須個別存在獨立的一行中,不可包含其它內容,否則會導致判讀錯誤。另外可以在宣告檔案的那行的末尾加上分號代表一個空的區塊,例如 "func test();"。分號在資料夾類型的檔案宣告中與空的括號無異,但在 function 檔案的宣告中,如果使用空括號則會由空的內容取代先前已經存在的內容。

資料夾類型檔案的區塊中可以宣告其它資料夾檔案或 function 檔案,而 function 檔案的區塊中則是每一行都視為一條 Minecraft 指令,並且忽略縮排。

若是宣告的檔案有包含參數,在接下來的區塊中可以使用 ARG(參數名稱) 代表當參數傳入時要被對應替代的內容。接下來在讀取這個區塊的時候,會先將所有參數替代成對應的內容再進行讀取。
另外在 function 檔案的指令內容中可以使用系統參數 ARG(_PATH)在建置資料包時會被替換為:使用 function 指令呼叫該 function 時,其所在資料夾的路徑。
例如 "sample:test" 中的 "sample:""sample:test/test2" 中的 "sample:test/"

  • 標籤:宣告 tickload 兩種標籤,使指定 function 連閃或在載入時執行。
分別透過 "tag tick" 以及 "tag load" 來宣告兩種標籤,宣告完必須接續一個區塊,不可使用分號作為空區塊。區塊內每一行的內容會被視為一個 function 名稱,與 Minecraft 中呼叫 function 時輸入的名稱相同,並且依序添加到標籤當中。需要注意的是,若指定的 namespace 被設定為虛擬檔案,則與該 namespace 相關的標籤都不會被套用。

  • 引入:
分為兩種引入方式,兩種均能在該行最後加上 as virtual 參數,將引入的 namespace 檔案設定為虛擬檔案。

第一種格式為 "import <函式庫名稱1>[, <函式庫名稱2> [, ...]]"
例如 "import test""import test1, test2"。函式庫名稱不能有空格,也不接受字串形式的輸入,要引入的函式庫之間以逗號或空格隔開。程式會從專案資料夾以及系統安裝的函式庫中尋找對應名稱的腳本文件或專案內容,並將其中宣告的 namespace 檔案引入到你的專案中。

第二種格式為 "from <函式庫名稱> import <namespace1>[, <namespace2>[, ...]]"
例如 "from test import test1""from test import test1, test2"。注意只能輸入一個函式庫,程式會從該函式庫找到對應名稱的 namespace 引入到你的專案中。

  • 安插 Python 程式碼:
你可以安插部分 Python 3 的程式碼在腳本中,用以產生腳本內容。

要安插 Python 程式碼,你必須先在獨立的一行中輸入 ``` 作為開端,並同樣以獨立的一行 ``` 作為結尾。其中程式碼內容的縮排必須與第一行的 ``` 對齊,一個 tab 視為 4 個空格處理。將你要產生的腳本內容透過 print() 的方式打印出來,完整執行整段程式之後會將打印出來的內容視為一般腳本內容進行讀取。

要注意在解析 Python 程式碼的時候有區塊層級問題,程式只會解析當前區塊中的 Python 程式碼,內層區塊中的 Python 程式碼會在讀取該區塊的時候才被解析。



下載




如何安裝


1. 雙擊安裝檔執行後會出現下列視窗
2. 選擇目標資料夾,程式會在目標資料夾建立一個 mcdp 資料夾
3. 點擊安裝,會出現下列視窗
4. 輸入 "y" 即可自動設定環境變數 (若無特殊需求建議自動設定)
5. 安裝完成後即可開啟命令提示字元使用 mcdp 功能


更新紀錄

Beta 1.1
  • 新增系統參數 "ARG(_PATH)"。該參數只有在 function 的指令內容中有效,在建置資料包時會被替換為:使用 function 指令呼叫該 function 時,其所在資料夾的路徑。例如 "sample:test" 中的 "sample:""sample:test/test2" 中的 "sample:test/"
  • 新增兩個內建函式庫:random, loop
Beta 1.2
  • 新增對 function 以外的 datapack 檔案的支援。現在在建置資料包時,會將專案資料夾中的 data 資料夾複製到資料包中,若有重複的內容則會進行取代。例如:在專案的data 資料夾中新增 "test\loot_tables\test.json" 檔案,則會在資料包中 test 這個 namespace 底下新增 test 這個 loot_table 檔案。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4447273
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 3 篇留言

策夢侯
有一個可以快速畫出好幾個方塊的模式要怎麼用出來(最近有看到一些人建其他遊戲的地圖影片

07-03 08:19

貓狗喵
你可能搞錯程式了喔,這個是我這幾天剛寫好的程式07-03 08:28
策夢侯
原來如此(´-ω-`)

07-03 10:41

藍色收音機
降低開發資料包的門檻是好事,可是要怎麼帶動開發的風氣又是另一個問題了,畢竟現在板上討論技術的風氣非常差

11-30 18:24

貓狗喵
這確實是我一直覺得很尷尬的點,會寫的人懶得重學另一套架構,不會寫的根本不會用11-30 19:16
我要留言提醒:您尚未登入,請先登入再留言

8喜歡★kevin22152 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:(已解決)關於我被某知名... 後一篇:(備份) MapleCr...

追蹤私訊切換新版閱覽

作品資料夾

ilove487奇幻小說連載中
《克蘇魯的黎明》0667.掉到海裡要先救誰?看更多我要大聲說昨天13:38


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】