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

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

Mod里制作劍(二)

2023-09-03 21:05 作者:道家深湖  | 我要投稿

前篇:做劍一

淺海:所以我準(zhǔn)備開始做劍了。

深湖:那么今天我們討論代碼方面的問題。

淺海:會比上次的多嗎?

深湖:那就取決于你已經(jīng)懂多少了。好,我們從這個問題開始:鐵劍的攻擊加成是多少?

第一篇里的圖

淺海:我打開游戲看到的是6。

深湖:錯了。

淺海:昨天你不是也說鐵劍的攻擊傷害是6嗎?

深湖:對,所以我今天問的是“鐵劍的攻擊加成是多少”,而不是“鐵劍的傷害是多少”。

左:模組物品的抽象顯示;右上:武器的顯示;右下:盔甲的顯示

淺海:這還有區(qū)別的嗎?

深湖:有。玩家徒手的攻擊傷害是1,拿著鐵劍的傷害是6,說明鐵劍的傷害加成是5。如果你仔細(xì)觀察過的話,你會發(fā)現(xiàn)武器、工具會顯示拿著的時候,玩家的最終傷害是多少,灰色的字;如果是盔甲的話,會顯示屬性加某數(shù),而且是藍(lán)色的字。

正因如此,你會清楚盔甲每一件【加】了多少數(shù)值,并且產(chǎn)生一個鐵劍上寫的數(shù)值就【是】它在代碼底層實現(xiàn)的數(shù)值的錯覺

淺海:那么代碼底層的實現(xiàn)的實際情況是?

深湖:是玩家徒手攻擊力為1(半顆心)、攻擊速度為4(赫茲),手持其他物品的時候不顯示這個數(shù)字。當(dāng)你需要實現(xiàn)一個物品改變這些數(shù)值的時候,你需要以此為基礎(chǔ)做出修正。比如你希望做一個攻速為8的主手物品,那么你應(yīng)該做到的攻速加成是+4,而不是8;你想做一個攻擊為8的武器,那么你應(yīng)該在代碼里寫的是攻擊力為8-1=7。

淺海:原來如此。等等,劍的攻速是1.6,徒手的攻速是4,那豈不是……

深湖:對,劍在拖慢你進(jìn)攻的速度。因此,實際上他的攻速加成是負(fù)2.4。如果按照其他地方的顯示,它會顯示一個難看的紅字。

ItemSword的節(jié)選
負(fù)的加成會用紅字

但mc顯然不希望你拿到一把劍的時候,天天看著那個攻速變慢而惡心,更何況你也不知道自己的徒手攻速是4、基礎(chǔ)攻擊是1,這點游戲里沒有地方說過。因此……他在某些時候會直接顯示最終計算結(jié)果,而非修正值。

淺海:所以,在武器和工具上顯示的是最終值,盔甲上顯示的是加成,因為盔甲有四件,都在修正同一個屬性?

深湖:就原版無nbt物品的表現(xiàn)來說是你這樣。但底層不是。

淺海:所以底層在主手里的是顯示最終值,盔甲欄的,比如“戴在頭上時”是顯示加成?

深湖:也不是。

淺海:所以是攻擊傷害和攻速顯示最終值,其他的顯示加成值?

深湖:也不是。

淺海:啊,我看到上面那個圖了,確實反駁了一切……

深湖:正確答案是,當(dāng)你的屬性修飾符(AttributeModifier)的UUID為特定的兩個值的時候,這項修正顯示灰色最終值;否則的話,顯示藍(lán)色正加成或者紅色負(fù)加成。

以下是ItemStack里的相關(guān)代碼。你作為萌新的話不用細(xì)看,只需要有個模糊印象,知道這個東西是寫在ItemStack::getTooltip里的就行。注意是ItemStack類,不是大家整天擺弄的Item類,這也是很多人找不到這代碼在哪的原因之一。

至于這兩個UUID具體是什么,它們是在Item里定義的。



淺海:什么什么?

深湖:首先,我想你不知道什么是屬性修飾符。

淺海:確實……不是很懂。

深湖:生物有屬性。生物都有最大血量這個屬性,多數(shù)的屬性你可以在SharedMonsterAttributes類里查找到。

最常用的那些屬性

淺海:monster,怪物,那么玩家的呢?

深湖:這個類名不應(yīng)該望文生義。

同一條屬性,比如血量上限(MAX_HEALTH),玩家和怪物用得是同一條。

另外,不是所有怪物都有這個類里的所有屬性,比如新人最常犯的一個錯誤是誤以為所有EntityLivingBase都有ATTACK_DAMAGE。實際上這玩意是EntityMob里注冊的,就連EntityLiving、EntityCreature里都不一定有。正因如此,如果你是試圖調(diào)用牛、羊之類動物的這條屬性,就會引發(fā)空指針報錯,因為牛根本就沒有ATTACK_DAMAGE這條屬性。實際調(diào)用的時候你記得要判定空指針,或者是注意觀察那些東西的注冊時機(jī)。


活物共有的屬性,注冊于EntityLivingBase
但ATTACK_DAMAGE不在上述地方注冊。玩家也在另一個地方注冊了它。

淺海:那如果給牛發(fā)一把劍,會報錯嗎?

深湖:不會。因為原版在這里做了判空處理,屬性修飾符只對這個生物確實存在的屬性生效。當(dāng)然,你拿在手里的時候,所有的屬性修飾符是都看得見描述的,但里面有幾條是玩家所沒有的屬性,所以實際上不會生效。比如玩家沒有FOLLOW_RANGE,也就是怪物的視野范圍,之類的。玩家沒有ai,不需要他,所以根本沒注冊這條。

淺海:所以……做劍的話只需要像原版一樣修改攻速和攻擊傷害就行了吧,別的我先不用。

深湖:你最好不用,那些屬性有很多個都挺坑的。新人做的時候,望文生義,不起作用的問題時有發(fā)生。

淺海:那么UUID是什么?

深湖:你可以看我的這篇文章。簡單來說就是個唯一id,這玩意相同的就視為同一個東西。如果你在今天看到一個身份證號為N的人,明天又看到了身份證號為N的人,那么這兩人應(yīng)該被視為同一個人。你不記得他的長相,或者說整容、變性也無關(guān)緊要,只要身份證號一樣,他們就會被系統(tǒng)認(rèn)為是同一個人。

淺海:啊……

深湖:我覺得你今天學(xué)的夠多了,可以先休息了。下周我們再具體談屬性修飾符的寫法。



Mod里制作劍(二)的評論 (共 條)

分享到微博請遵守國家法律
曲水县| 元朗区| 岳普湖县| 通州区| 贵德县| 北安市| 安塞县| 通州区| 咸阳市| 兰坪| 河西区| 南通市| 广丰县| 唐河县| 通州市| 离岛区| 彰化县| 乌鲁木齐县| 石渠县| 巫溪县| 九龙县| 凌云县| 韶关市| 梁山县| 广东省| 萨迦县| 墨竹工卡县| 高台县| 宣威市| 临高县| 新乡市| 徐州市| 林芝县| 方城县| 祥云县| 南召县| 东源县| 四平市| 迭部县| 德清县| 桐梓县|