Mod里制作劍(一)
淺海:請問,如何(在Minecraft mod里)制作一把劍?
深湖:你想做一把劍?不錯不錯,比想做一把槍的靠譜多了。
淺海:……這有很大區(qū)別嗎?
深湖:有。劍是原版就有的概念,可以靠繼承ItemSword實現(xiàn)大部分內(nèi)容。槍這種東西原版沒有,而且基本每個想做槍的人都想要左鍵開火、右鍵瞄準,但mc原版的交互邏輯是左鍵近戰(zhàn)攻擊、右鍵使用物品與交互。想要做槍的話,得把整個邏輯都重做。而且,制作子彈涉及到實體與運動的處理,基礎就要說很多,也有很多坑要避免。
淺海:那么那些槍械mod……?
深湖:Bingo!正確的學習“如何做一把槍”的方式是找那些槍械mod的源碼自己慢慢翻看,而不是去群里問怎么做一把槍。
淺海:……所以我們可以開始做劍了嗎?
深湖:很遺憾,還不行。我得確認你對劍的理解正確,否則你可能會在后面制作的時候遇到一堆問題,看ItemSword源碼的時候一頭霧水。
淺海:對劍的理解是指?
深湖:有設計和代碼的兩方面問題。設計上是“劍的意義”,代碼上是“屬性加成”。雖然很多萌新都急急急得不行,完全不知道自己連設計mod都做不到,就更別提用代碼寫出來了。因此,我要先從設計,或者游戲策劃上確認這件事。你覺得玩家為什么會合成一把劍?比如,鐵劍?
淺海:為了打怪?
深湖:對。假如手持鐵劍的攻擊傷害是6,但鐵鎬是12,那你覺得玩家還會做鐵劍嗎?
淺海:大概不會了。鐵鎬的傷害更高,還能用來挖東西,完爆鐵劍了。
深湖:那么斧子呢?鐵斧的攻擊傷害比劍高,還能砍樹,照這個說法豈不是一樣導致鐵劍沒有用武之地?斧子甚至還能穿盾牌。
淺海:啊……這個……我想是因為攻擊速度的影響?如果按照攻速乘傷害=每秒傷害(DPS)來說的話,鐵劍的DPS為9.6,略高于鐵斧。


深湖:不錯,這確實是原因之一。此外,劍能橫掃打AoE,這件事是在EntityPlayer::attackTargetEntityWithCurrentItem里寫死的,且沒有用于patch的事件。
N級的橫掃之刃附魔劍,在主目標傷害為K的時候,可以對橫掃目標造成(1+X*? (N/N+1))的傷害。雖然說沒有這個附魔,橫掃傷害是1吧,不過有點擊退也是好的。此外,劍也能用來高速(15x)摧毀蜘蛛網(wǎng),快速(1.5x)摧毀植物,不過這只是個錦上添花。哦,關于挖掘類別,這些是寫在ItemSword的getDestroySpeed里的,相對好覆寫一些。
淺海:那看來劍的數(shù)值要仔細設計了。
深湖:或者說,其實是斧子的數(shù)值要仔細設計。劍的數(shù)值默認是跟著材質(zhì)套公式的,但是斧子的攻速和傷害跟質(zhì)地完全無關,單獨hardcode了。ItemAxe沒法像劍那樣直接指定了質(zhì)地就了事,不單獨設置傷害和攻速的話它會報錯。
淺海:我還真沒考慮過斧子應該是多少……
深湖:那你可以先干脆不做對應的斧子。做游戲策劃的時候,多一事不如少一事,加入太多干擾項反而會讓你的核心設計崩潰。
淺海:容我先仔細想想……我還要不要做這把劍。