【Minecraft21w03a】如何利用磁石指南針讓指南針指向指定玩家
此文章是應小豆光輝的需求所做的文章,為了深表自己鴿了他的歉意,我決定開一個專欄來賠償。
注:1.原本是要求利用1.16.1版本進行制作。但是限于我對loot table(戰(zhàn)利品表)的研究其實較為有限,所以決定將版本升級為21w03a(理論在快照加入item指令后的版本都可以),這樣可以用更簡單的指令解決此問題。 2.其實我開專欄的第二個原因是像這一類問題運用命令方塊來解決會有一定的局限性,所以我決定采用數(shù)據(jù)包來解決此問題,所以評論區(qū)比較難解釋,故選擇專欄來回答。
一、成品下載&使用:
鏈接:https://pan.baidu.com/s/1XNtnw_GvlWjuBAPUe-acVA?
提取碼:5ykq?
復制這段內(nèi)容后打開百度網(wǎng)盤手機App,操作更方便哦--來自百度網(wǎng)盤超級會員V2的分享
使用方法:將文件夾中的「指人針」文件夾放入到.minecraft/save/<指定游戲地圖>/datapack里并且重新加載入地圖?;蛘咴趧?chuàng)建世界時直接點擊數(shù)據(jù)包將「指人針」文件夾放入到臨時文件夾中。
使用注意事項:1、只能在同一個維度里時指針才有效 2、要給指定的玩家附上"CompassPlayer"的標簽后指針就會指著他。 3、只能給一個玩家指定這個標簽,否則會隨機選擇一個有標簽的玩家指。 4、給玩家添加標簽的命令:tag <玩家名> add CompassPlayer
5、給玩家刪除標簽的命令tag <玩家名> remove?CompassPlayer
二、原理講解:
其實這個裝置的原理在少掉了loot table以后就簡單了許多。但是介于1.16新加入的自定義維度,我想出了一個可以解決之前
具體想修改物品信息的情形,可以通過直接修改潛影盒內(nèi)物品實現(xiàn),這里不做贅述。
唯一的缺點就是,需要在255高度引入額外的方塊潛影盒,這會導致原有的位于255高度的方塊消失。---摘抄自MCBBS《修改玩家背包物品信息(免窮舉)》
的這一問題的一個完美解決方案,那邊是利用自定義維度創(chuàng)造一個全新的空間來作為存儲的容器!
然后接下來指人的主要原理是通過在自定義維度里創(chuàng)建一個箱子,在箱子里放入一個指南針,并且給指南針附上帶標簽玩家所在的維度、位置。然后再將這里面的指南針通過item指令傳到玩家的九號快捷欄。
三、具體步驟:
首先我們需要先搭建好一個datapack的框架:
1.創(chuàng)建一個根文件夾,并在里面裝入一個文件,命名為“pack.mcmeta”,這是作為你數(shù)據(jù)包的一個基本信息,包括版本信息、介紹:
{
????"pack":
????{
????????"pack_format":7,
????????"description":"指人的指南針"
????}
}
2.再創(chuàng)建一個文件夾,名字為data。
3.在data里面創(chuàng)建兩個文件夾,一個為"minecraft"(這是修改原本數(shù)據(jù)包的渠道),另一個則為"compass_to_player"(這是自己的數(shù)據(jù)包)。
4.在minecraft文件夾里,我們需要干兩件事情,一件是引用自己的函數(shù),其次是創(chuàng)建一個空的世界。而在compass_to_player里面,主要只有一件事,也就是寫函數(shù)指令。
5.我們先預設(shè)好我們會創(chuàng)建一個在minecraft命名空間下的一個文件夾叫store_place內(nèi)一個叫void的維度世界。然后進入compass_to_player文件夾,創(chuàng)建一個functions文件夾,里面創(chuàng)建1個叫start.mcfunction的文件輸入以下初始化指令:
#指向玩家的tag:CompassPlayer
scoreboard?objectives?add?pointX?dummy
scoreboard?objectives?add?pointY?dummy
scoreboard?objectives?add?pointZ?dummy
scoreboard?objectives?add?timer?dummy
然后創(chuàng)建一個main.mcfunction,輸入以下指令:
scoreboard?players?add?@a?timer?1
execute?as?@a[scores={timer=1},
tag=!CompassPlayer]?at?@s?in?minecraft:store_space/void?run?function?compass_to_player:place_chest
scoreboard?players?set?@a[scores={timer=40..}]?timer?0
最后再創(chuàng)建一個place_chest.mcfunction,輸入以下指令:
forceload?add?~?~?~?~
setblock?~?~?~?chest
item?block?~?~?~?container.0?replace?compass
data?modify?block?~?~?~?Items[0].tag.LodestoneTracked?set?value?false
data?modify?block?~?~?~?Items[0].tag.LodestoneDimension?set?from?entity?@a[limit=1,tag=CompassPlayer]?Dimension
data?modify?block?~?~?~?Items[0].tag.LodestonePos.X?set?from?entity?@a[limit=1,tag=CompassPlayer]?Pos[0]
data?modify?block?~?~?~?Items[0].tag.LodestonePos.Y?set?from?entity?@a[limit=1,tag=CompassPlayer]?Pos[1]
data?modify?block?~?~?~?Items[0].tag.LodestonePos.Z?set?from?entity?@a[limit=1,tag=CompassPlayer]?Pos[2]
item?entity?@s?container.8?copy?block?~?~?~?container.0
setblock?~?~?~?air
forceload?remove?~?~?~?~
完成以后我們的核心代碼部分就大功告成??!
6.繼續(xù)到minecraft文件夾,完成對函數(shù)的引用。
(1)創(chuàng)建tags文件夾
(2)在tags文件夾里創(chuàng)建functions文件夾
(3)在functions文件夾里創(chuàng)建一個tick.json(代表游戲每一刻都會調(diào)用一次這個函數(shù)腳本),輸入以下json腳本:
{
????"replace":false,
????"values":
????[
????????"compass_to_player:main"
????]
}
(4)在functions文件夾里再創(chuàng)建一個load.json(代表游戲初始化世界時會調(diào)用一次這個函數(shù)腳本),輸入以下json腳本:
{
????"replace":false,
????"values":
????[
????????"compass_to_player:start"
????]
}
7.接下來到了最后一步,創(chuàng)建一個自定義維度:
在minecraft文件夾里創(chuàng)建一個dimension的文件夾,在里面再創(chuàng)建一個文件夾叫store_space,再在里面創(chuàng)建一個文件叫void.json,輸入以下腳本來創(chuàng)造一個只有空氣的超平坦世界:
{
????"type":"overworld",
????"generator":?
????{
????????"type":"minecraft:flat",
????????"seed":?0,
????????"settings":
????????{
????????????"layers":
????????????[
????????????????{"block":"air","height":319}
????????????],
????????????"biome":"the_void",
????????????"structures":?{"stronghold":?{"count":?1,"distance":?0,"spread":?0},"structures":?{}}
????????}
????}
}
最后這一切都完結(jié)后,我們的任務(wù)也就結(jié)束了!

四、效果展示:
話不多說,上幾張圖:


