大家好,這裡是準備要去參加FF38的小編過路君子
本來只要自己去,結果臨時有人說要一起去,那...好吧!走~
對於一般人來說,使用遊戲內所提供的指令/co lookup 就已經很夠用了。
但是對於程式設計人員來說,這點遠遠不夠用,能直接使用 SQL 語法去找尋資料當然是所樂見的事情。
所以,今天的主題就是如何直接從原始資料透過 SQL 語法去取得資料。
那第一步當然要先知道原始資料檔案放在哪裡啦~
正常來說會放在./plugins/CoreProtect/database.db這裡。
(所有圖片點擊都可以放大、變高清)
沒錯,我們要找的就是 database.db 這個檔案。
然後接下來就是使用軟體開啟這個檔案。
那小編在這裡是使用 SQLiteStudio 這個軟體,至於各位要使用什麼軟體都可以,只要能打開 .db 檔就好。
然後準備開啟將我們剛剛找到的那個檔案。
匯入檔案。
然後就可以看到所有被 CoreProtect 記錄的下來的紀錄了。
那接下來小編就條列出所有 table 所擁有以及代表的資訊吧(由上至下),紅字的為常用 table。
co_art_map | (未知) |
co_block | 所有方塊的資料,包括放置、摧毀;生物擊殺資料也放在這裡。 |
co_blockdata_map | 所有的方塊狀態。 |
co_chat | 所有的聊天訊息。 |
co_command | 所有被使用過的指令紀錄。 |
co_container | 所有箱子、投擲器等可放置物品的容器紀錄。 |
co_database_lock | (未知) |
co_entity | 村民以及其他生物的紀錄。 |
co_entity_map | 生物對應其在 CoreProtect ID 的紀錄。 |
co_item | 所有生物的紀錄。 |
co_material_map | 所有物品對應其在 CoreProtect ID 的紀錄。 |
co_session | 所有玩家的登入以及登出紀錄。 |
co_sign | 所有告示牌的紀錄。 |
co_skull | 所有頭顱的紀錄。 |
co_user | 所有會被記錄事件的物品或是玩家。 |
co_username_log | 玩家的暱稱和UUID 對應其在 CoreProtect ID 的紀錄。 |
co_version | Minecraft 運行的版本。 |
co_world | 世界的名稱對應其在 CoreProtect ID 的紀錄。 |
那至於要怎麼搜尋資料...就考驗各位的 SQL 語法了。
這邊就以查詢位於 (x 171, y 64, z -293) 的 #dispenser(投擲器) 紀錄為範例:
SELECT a.time, b.id, b.user, a.x, a.y, a.z, a.action FROM co_container AS a RIGHT JOIN co_user AS b ON b.user = "#dispenser" WHERE a.user = 10 AND a.x = 171 AND a.y = 64 AND a.z = -293;
你說小編怎麼知道 #dispenser 的 user 代號是 10?因為小編有偷偷先用 SQL 查了一下 (#
這邊一樣提供給各位參考:
那你說這個有什麼用?
只要能使用 SQL 直接抓出來代表說我可以另存成 .csv 之類的,或是寫程式去快速爬取資料。
當然 CoreProtect 也有提供相應的 API 可以用(使用 Java 來讀取資料),但那就不是今天的主題了。
後記
希望有知道更多表格資訊的高手可以補充那兩個表格所代表的意義,小編有試著研究過,但是怎麼樣都串不起來。