天才一秒記住【UU看書】地址:www.uukanshu.co
我們在第九章中學習了tp指令的用法,讓我們來複習一下:
『tp
作用:將一個實體傳送到另一個實體或者是座標。
需要許可權等級:Java2,基岩1
需要作弊:是
格式:
tp傳送目標:目標選擇器lt目的地實體:目標選擇器gt
這可以將選定的目標傳送到另一個實體的位置,比如把張三傳送到李四的位置。注意,目的地實體不能為多個,即你並不能將張三傳送到李四和王五的位置(就算張三不止一個也不能這樣幹)。如果將傳送目標省略,那麼將會傳送執行者自己(一般是你自己)。
tp傳送目標:目標選擇器lt一個地點:座標gtlt水平旋轉角度gtlt垂直旋轉角度gt
這可以將選定的目標傳送到一個指定的地點。』
看起來絲毫沒有問題,遊戲中也能用對吧?
但其實,tp並沒有這麼簡單。正如我在第九章開頭所說的:『這條指令深究起來很複雜』。現在,深究的時候到了。
在Minecraft中,傳送指令並不只有tp,還有一個teleport。這個teleport雖然是tp的全稱,但這兩個指令在MinecraftJava113版本更新之前有很大區別,直到113版本更新中兩者才被統一,tp才正式作為指令teleport的簡寫指令。
接下來,我們將會分兩步走:先探究指令tp與teleport在Minecraft113版本前的差異,然後再研究113版本賦予了這兩者什麼樣的新內容。
——第一步:tp與teleport在MinecraftJava113版本更新前的差異
相比tp指令,teleport指令雖然比tp更早加入,但很快就被tp取代,直到Minecraft110版本才被重新加入。在當時,看起來這個teleport的單詞更長,更厲害,但實際上相比tp,這個玩意兒可以說是十分雞肋。
怎麼個雞肋法呢?來看看teleport的介紹,你就知道了。
teleport(JE113更新前)
作用:同tp,傳送實體至一個指定的地點
需要許可權等級:JE2BE1
需要作弊:是
格式:
teleportlt傳送目標:目標選擇器gtlt目的地:座標gtlt水平旋轉角度gtlt垂直旋轉角度gt
你對比對比一下樓上的tp指令,就會發現teleport的功能比tp還要少,僅僅只能將目標傳送到一個指定的位置。而且這樣的格式tp也有一模一樣的,根本就不需要teleport啊!
所以這就是tp與teleport的區別,我們下一章再見。
……
……
……
……
……
……
你以為Mojang真的這麼傻嗎,新增一個完全可以被替代的指令,而且用起來還比那個指令還要麻煩?
其實,teleport看起來簡單,但實際上這只是它的冰山一角而已。
我們先不管teleport。來回顧回顧我們當時學座標的時候,我在章末寫了如下內容:
『相對座標的原點實際是因指令而異的,在大部分情況下原點即是指令執行的位置,但也有特殊的情況,如Java113版本之前的tp指令。』
唉,這個tp怎麼就特殊了呢?
我在第九章有舉一個例子:tpp900
當時,我舉這個例子是用來說明旋轉角度的使用,並給出瞭如下解釋:
『這將會使最近的玩家朝向正西而不改變其位置。』
重點來了!如果tp的相對座標是採用指令執行的位置作為原點,那麼當這條指令在命令方塊裡執行的時候,應該是會把這名玩家傳送到命令方塊的位置並讓其朝向正西方向,而不是讓他留在原地。而事實是他留在了原地,並沒有被傳過來。
這說明了什麼?
這說明了,tp指令的相對座標採用的是傳送目標的位置作為原點,而非指令執行的位置。
那如果我們把tp換成teleport呢?
執行teleportp900,然後你就會驚喜的發現,那名玩家不僅僅再次朝向了正西,還跑到了命令方塊那裡!
這就是teleport與tp最大的區別。當然,在現在的基岩版和最新的Java版中,tp也已經變成以指令執行的位置作為相對座標的原點了,所以如果你在基岩版或最新的Java版執行上述兩個指令,將會得到一模一樣的結果。
但別忘了,除了相對座標,還有相對旋轉角度呢!讓我們來看看我在第九章舉的另一個例子:
『tpp301
假設這p選中的還是上面那位被迫朝向正西的玩家,那麼這條指令將會使他朝向南偏西60°,頭微微朝下1°。』
不難發現,tp的相對旋轉角度也是基於傳送目標的相對角度。那麼teleport呢?
假設這裡有一隻豬,我們對它使用如下指令:
teleportec1,typepig9090
然後開啟第三人稱,執行這條指令。仔細觀察這頭豬,你就會發現這頭豬在傳送到你身上那一刻,身子和你成了90°角。
這說明了什麼?這說明了,teleport的相對旋轉角度也是基於命令執行者的旋轉角度,而不是基於傳送目標的。
(但是這頭豬的頭並沒有朝下看啊)
(因為豬的AI強迫它向前看,所以它在正常情況下無法朝下,只要你實驗過就會發現這個問題)
現在我們來總結一下:
在JE113版本更新前,tp和teleport的區別不僅僅是在格式上,還有相對座標和相對旋轉角度的區別。tp的相對座標和相對旋轉角度基於傳送目標,而teleport是基於命令執行者的。
所以JE113版本前的tp和teleport算是徹底搞清楚了,接下來我們將看看新版的tp和teleport究竟做了怎樣的更新吧!
——第二步:新版本的tp與teleport
正如在前面說的,JE113將tp和teleport指令做了統一,tp成為了teleport的別稱。也就是說,在新版本,兩者是完全一樣的,而且相對座標和相對旋轉角度都統一成以指令執行地點和執行者的旋轉角度為基準。
所以格式呢?如下:
tp和teleport
作用:你知我知天下知。
需要許可權等級:Java2基岩1
需要作弊:是
格式(teleport可替換為tp):
——Java版113及之後
teleport傳送目標lt一個實體gt——將選中的目標或執行者傳送至指定實體的位置
teleportlt一個位置gt——將執行者傳送至指定位置
teleportlt傳送目標gtlt一個位置gtlt水平旋轉角度gtlt垂直旋轉角度gt——將選中的目標或執行者傳送至指定位置
teleportlt傳送目標gtlt一個位置gtfacinglt朝向座標gt——將選中的目標傳送至指定位置,並讓其朝向另一個位置
teleportlt傳送目標gtlt一個位置gtfacingentitylt朝向實體gt朝向部位——將選中的目標傳送至指定的位置,並讓其朝向一個實體
——基岩版
teleport傳送目標lt一個實體gt安全檢查:布林值——將選中的目標或執行者傳送至指定實體的位置
teleport傳送目標lt一個位置gt安全檢查:布林值——將選中的目標或執行者傳送至指定位置
teleport傳送目標lt一個位置gtlt水平旋轉角度gtlt垂直旋轉角度gt安全檢查:布林值——將選中的目標或執行者自己傳送至指定位置
teleport傳送目標lt一個位置gtfacinglt朝向座標gt安全檢查:布林值——將選中的目標或執行者自己傳送至指定位置,並讓其朝向另一個位置
teleport傳送目標lt一個位置gtfacinglt朝向實體gt安全檢查:布林值——將選中的目標或執行者自己傳送至指定位置,並讓其朝向一個實體
看起來格式非常的多,但其實仔細看的話,相比我們之前學的,Mojang無非就新增了三個新功能:
①可以指定朝向的座標或實體
②可以檢查傳送目的地的安全性(僅基岩版)
③未指定傳送目標,也就是傳送執行者自己到一個指定位置的時候,也可以更改旋轉角度了(僅基岩版)。
其中,我們要講解的是前兩個。
首先,可以指定朝向的座標或實體是一個非常重磅的功能,因為它十分有用。在本章的番外中,作者就利用了這個功能製造出了『我在這兒』的宇宙廣播功能,只不過這個番外馬上就要撤掉了,因為有些新東西要講。
那麼這個功能怎麼用呢?
不很簡單嗎?你看了上面的作用簡介估計就懂了一半了,所以我們直接上例子:
tppfacing1
這條指令相當於tpp090,最終都會讓這名玩家朝天上看,但前者是讓玩家直接朝著命令執行地點的上方看,後者則是透過修改這名玩家的垂直旋轉角度使其向天上看。
還有一個例子:
tppfacingentityelimit1,typevillager,sortnearest——Java
tppfacingec1,typevillager——基岩
這條指令將會把最近的玩家傳送至指令執行地點,並使其朝向最近的一名村民。
有趣的是,如果你執行tpsfacingentitys,即讓你朝向你自己,你將會發現不管你傳送前的姿勢多麼奇怪,傳送後你總會水平地朝向正東方向(JAVA)或正南方向(基岩版)。
相信你在看完上面兩個例子已經會用facing了吧?基岩版中facing就這麼個用法,但在Java版中還有一個引數:朝向部位
這個引數你可以填寫兩個東西:eyes或feet
填eyes,代表你要讓傳送目標完成傳送後面朝對方的眼睛,填feet,則代表面朝對方的腳。預設是朝向對方的眼睛,但你也可以改成看腳。
比如:
tpsfacingentityrfeet
這將會讓你隨機看向某一個玩家的腳。
很簡單吧。等等,不對,有些問題。
如果你確實按照上面的指令來,你就會發現你看到的並不是這位玩家的腳,而是和這位玩家的眼睛平視。
為什麼?
如果你嘗試將feet改成eyes,你就會發現你的視角竟然看向了這位玩家上方。
唉Mojang,你這是不是BUG啊?設定為看腳,卻看向眼睛;設定為看眼睛,卻看向眼睛的上方。
其實這不是BUG,而是跟這個tp指令有關。
tp指令,說是『將一個實體傳送到另一個實體或者是座標』。其實更加確切地說,是這樣的:
將一個實體的腳部傳送到另一個實體的腳部或者是一個指定的位置。
也就是說,tp指令在傳送實體時,其實是傳送這個實體的腳部。
為什麼呢?想想,如果tp是傳送你的眼睛,那麼你傳送過去,身體是不是要埋半截在土裡啊?如果tp是將你的腳傳送到另外一個實體的眼睛,那麼你傳過去,你的腳是不是要踩在那個實體頭上啊?
所以Mojang為了使傳送能夠符合我們人的直覺,就將預設傳送的部位設定為了腳。
因此,當tp的facing計算朝向的時候,也是以傳送目標的腳的座標(也就是你腳的座標)來計算的。而如果你從你的腳看向對方的腳,是不是就是平視?看向對方的眼睛,是不是就要仰頭?
並且,不管是基於眼睛還是基於腳來計算朝向,最終都會體現在玩家以及其他實體的頭部(因為對於有人形的實體來說,頭部的朝向決定了該實體的水平旋轉角度和垂直旋轉角度,而不是身體決定),所以就造成了上面奇怪的結果。
懂了吧?
第二個『安全檢查』就更加簡單了,你只需要選擇是否開啟即可(true或false)
如果開啟安全檢查,會發生什麼呢?
其實這個安全檢查很雞肋,僅僅會檢查傳送目的地是否有足夠的空間以防止你窒息,如果不會才會傳送,但這並不能防止你掉進岩漿或摔死。
這些內容就是現在版本的tp和teleport,簡單吧?
那我們下一章再見。
………
………
………
………
雖說全部內容已經完了,但是還是有一些疑問以及一些注意事項。
上面說到過,在新版中,相對座標和相對旋轉角度都統一成以指令執行地點和執行者的旋轉角度為基準。但是這句話並不嚴謹,因為在基岩版中,相對旋轉角度還是以傳送目標的原先旋轉角度為基準來計算的。
有點亂啊,理一理:
JE113前,tp的相對座標和相對旋轉角度都以傳送目標的為基準,而teleport則反之。
JE113之後,tp和teleport均採用指令執行地點和執行者為基準。
基岩版中,tp和teleport的相對座標均採用以指令執行地點為原點,但相對旋轉角度卻是以傳送目標為基準。
理一理之後確實清楚了許多,但由此就有了一個新的問題:
當相對旋轉角度以執行者的為基準時,如果執行者不是個實體而是方塊該怎麼辦,比如命令方塊?
其實部分方塊也有朝向,但最多也就六個方向,東西南北上下而已。難不成當方塊執行tp時,相對旋轉角度會採用方塊的朝向作為基準朝向?
想得太多了,方塊雖然有朝向,但方塊又不是實體。當諸如命令方塊之類的方塊執行指令時,甚至是函式這種連實體都沒有的東西執行指令時,指令執行地點和朝向都是預設值,即0,0,0和水平朝向正南。
那麼本章也就到此正式,真的結束了。