最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

MC和UUID

2022-07-30 19:24 作者:道家深湖  | 我要投稿

對(duì)于多數(shù)MC玩家來(lái)說(shuō),他只需要知道,每個(gè)正版MC玩家無(wú)論怎么改名,都對(duì)應(yīng)著唯一的一串UUID就好了。

一些服務(wù)器運(yùn)營(yíng)者可能會(huì)要求玩家提供他們的正版ID。你可以在這里查詢,https://minecraftuuid.com/——當(dāng)然,是如果這網(wǎng)站還沒(méi)倒閉的前提下。給他“Player UUID”,就是很多橫杠的那個(gè)。

為啥不給他我的用戶名?

MCID更像用戶名,它長(zhǎng)得像TaoismDeepLake這樣,可以更改。

UUID是一串很長(zhǎng)的數(shù)字、字母串,長(zhǎng)得像54860ea1-ae08-454f-a58a-b41215a90876這樣,不能更改。所以,很多技術(shù)性問(wèn)題上,都是使用UUID去判定是不是同一個(gè)玩家的。

有的地方,比如https://minecraftuuid.com/,還會(huì)提供一個(gè)刪掉橫杠的版本(Trimmed UUID),像54860ea1ae08454fa58ab41215a90876,這個(gè)版本沒(méi)什么用。主要常用的還是上面那倆。如果有人跟你要正版UUID,那么提供有橫杠的那個(gè)就行。

普通玩家看到這里就行了。下面的部分是給開(kāi)發(fā)者看的。

UUID,也就是Universal Unique Identifier,全局唯一標(biāo)識(shí)符,在代碼里是UUID類,很多時(shí)候也直接用字符串表示。不只是MC正版賬戶有UUID,MC里也不是只有玩家有UUID。

這東西怎么用?UUID是一個(gè)抽象概念,問(wèn)這個(gè)東西怎么用,就像是問(wèn)“微積分怎么用”一樣,答案是場(chǎng)合對(duì)的時(shí)候就用。

用在什么場(chǎng)合?需要判斷“是不是同一個(gè)東西”的時(shí)候,或者是“函數(shù)的參數(shù)要求你傳UUID”的時(shí)候。具體來(lái)說(shuō),我在MOD中使用的時(shí)候,處理屬性修飾符(Attribute Modifier),以及標(biāo)識(shí)對(duì)應(yīng)玩家的時(shí)候用的最多。

有的時(shí)候,你需要獲取特定的UUID,也有的時(shí)候,你隨便找個(gè)UUID生成器,隨機(jī)出幾個(gè)格式正確的就行。

什么時(shí)候需要獲取特定的UUID?

某個(gè)事情的UUID已經(jīng)被人規(guī)定過(guò)了。

例子1:你希望某件道具記住自己的主人是誰(shuí),主人使用的時(shí)候,造成傷害+1。這個(gè)時(shí)候,你就可以把玩家player.getUUID()所得的結(jié)果記錄進(jìn)道具的nbt里。之后,只要判斷手持player的UUID是否與之相等,就知道是不是所記錄的玩家,就實(shí)現(xiàn)判斷主人的效果了。

例子2:舉例來(lái)說(shuō),你需要做一件胸甲,但這個(gè)盔甲有攻擊百分比加成。這個(gè)時(shí)候,你就需要找到MC自身對(duì)于胸甲欄屬性使用的UUID,比如說(shuō)是uuid1,在getAttrModifier之類的接口里寫

list.add(new (屬性名,uuid1, 1,0.1))之類的東西。那么,為什么這里非要塞個(gè)uuid不可呢?

因?yàn)椋绻悴恢付║UID,這里就會(huì)隨機(jī)一個(gè)UUID,而且每次隨機(jī)都不同。

玩家穿上胸甲,就應(yīng)該獲得這個(gè)加成,脫掉的時(shí)候,就應(yīng)該失去這個(gè)加成。由于每次需要計(jì)算加成內(nèi)容的時(shí)候,都是現(xiàn)場(chǎng)計(jì)算的,所以為了確保能失去這個(gè)加成,就要確保每次返回的UUID一致。不然,如果穿上時(shí)給的是uuid1,脫下的時(shí)候試圖用uuid2去找,那就會(huì)失去對(duì)它的控制,野在里面了。這種情況一旦發(fā)生,想要精確干掉就會(huì)特別麻煩,基本只能不分青紅皂白地刪掉該屬性的所有修飾符,才能去掉野的屬性修飾符。還有更離譜的,那就是脫下再穿上之后,因?yàn)閁UID不同,所以會(huì)被認(rèn)為是新的修改器,以至于又增加一份;玩家每次穿脫,就能把屬性加一倍。

誠(chéng)然,這里不一定非要用mc原版對(duì)于胸甲規(guī)定的UUID,但是也沒(méi)必要非單獨(dú)開(kāi)一個(gè)新的。你固然可以給每一類你的裝備都規(guī)定一個(gè)UUID,寫在代碼里,

static UUID SOME_ID = UUID.fromString("某個(gè)剛生成的一大串UUID");這樣就好了,但我更推薦使用原版所提供的的UUID。其值隨版本可能有變化,大概是在ItemArmor之類的地方里可以找到。

什么時(shí)候需要新增一個(gè)UUID?

上面例子2的末尾其實(shí)提到了一種,那就是你希望定義一種新的屬性修改器的時(shí)候。比如,“戒指”的屬性修改器。又或者,生命屬性可能同時(shí)有一個(gè)百分比增加,還有個(gè)固定值增加,這時(shí)候你就需要兩個(gè)不同的UUID。

那么,怎么新增呢?

https://www.zxgj.cn/g/uuid

https://www.uuid.online/

有很多的UUID生成器,隨便搜一下“UUID生成“就能搜到,點(diǎn)擊生成就可以隨機(jī)到一個(gè)從沒(méi)人用過(guò)的。雖然,不同的隨機(jī)生成器理論上有可能生成重復(fù),但那屬于概率不可能事件,概率低到像是……一杯水自發(fā)地,上半部分沸騰、下半部分結(jié)冰一樣。

不要自己亂發(fā)揮,比如寫出“aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa”這樣的uuid。要知道,自己亂發(fā)揮很容易和別人撞,就像是很多人隨便設(shè)個(gè)密碼的時(shí)候,會(huì)設(shè)置12345、11111這樣的密碼。此外,找個(gè)生成器也沒(méi)費(fèi)多少勁,老老實(shí)實(shí)使用正確的方式即可。

——為什么用UUID,不用其他的東西?

舉例來(lái)說(shuō),我在代碼里,緩存一下Player/PlayerEntity/EntityPlayer的對(duì)象引用可以嗎?

有的時(shí)候是可以的,有的時(shí)候不行。

如果這個(gè)對(duì)象只是在函數(shù)內(nèi)部引用,確保它的作用域之內(nèi),玩家不會(huì)下線再上線就可以。

比如有人開(kāi)了一個(gè)服務(wù)器,有一個(gè)玩家登錄了,那么服務(wù)器會(huì)創(chuàng)建一個(gè)它的玩家對(duì)象,我們記做player1;然后他退了,過(guò)一段時(shí)間又登錄回來(lái)了,這時(shí)候服務(wù)器會(huì)重新給他再創(chuàng)建一個(gè)玩家對(duì)象,我們叫它player2。如果你只是緩存了player1的引用,那么player2并不等于player1,就沒(méi)辦法實(shí)現(xiàn)前面說(shuō)的“記住主人”的功能了。

但是,如果是一個(gè)函數(shù)之內(nèi),比如某個(gè)道具的use函數(shù),之內(nèi),前面先記住某個(gè)道具的使用者,然后立刻獲取周圍的所有實(shí)體列表,這個(gè)時(shí)候利用判斷對(duì)象的方式,去判斷那些實(shí)體里哪個(gè)是使用者,這件事就是ok的。


以上,應(yīng)邀作文。


MC和UUID的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
锦州市| 上林县| 正阳县| 阳西县| 洞头县| 印江| 海丰县| 宁波市| 黔西| 南丹县| 锡林郭勒盟| 邛崃市| 大庆市| 南华县| 乐陵市| 乌兰县| 射阳县| 文化| 黄冈市| 清原| 温州市| 两当县| 克东县| 慈利县| 仁怀市| 桃园县| 庆安县| 莱西市| 浦县| 东乡族自治县| 崇义县| 百色市| 阳原县| 汝州市| 崇左市| 巴南区| 金堂县| 城市| 灯塔市| 信阳市| 沁阳市|