Re: [討論] 有沒有人在寫bukkit plugin?
※ 引述《vencin1987 (迪納敏斯)》之銘言:
: 感謝協助
: 但這看起來只能解決工具
: 武器部分應該EntityDamageByEntityEvent
: 可從getEntity拿到player再拿到手上道具處理
: 但裝備部分看起來都是要迭代物品欄,我擔心會對SERVER負擔太重
: 不知道有沒有可能用類似複寫setDurability的方式處理(應該不太行
: 所以最後我選擇裝了RepairRecipe解決
武器的部分,我沒經驗,PASS,只討論下面附魔的部分。
: 另外
: 看到你有寫附魔部分 我目前的理解是
: 就算接了event 但不做任何處理
: (例如接了BlockBreakEvent但public void OnBlockBreak(BlockBreakEvent e){})
: 原本該發生的事應該不會有影響 例如耐久度附魔
: 不知道有沒有誤會
這幾行寫得模糊不清,我感覺你已經懂了,但是文句沒寫對。
附魔的部分並不是接了event(事件)不做任何處理
解釋這件事情必須從「如何提升最大耐久度」說起
一般而言,在遊戲內可以附魔「耐久」讓工具可以用更久
若不去看工具耐久度的變化
可能會誤以為工具可以用得更久是因為最大耐久度提升了
事實上附魔「耐久」的功能並沒有增加最大耐久度,最大耐久度並沒有變化
每次使用工具時,附魔「耐久」是增加一個機率使工具耐久度不變
所以說,如果今天想要開發一個增加工具最大耐久度的Plugin
由於目前還沒有辦法真的增加工具最大耐久度
所以可以從類似附魔「耐久」的方式著手
也就是說,在玩家破壞方塊的時候,增加一個機率讓工具耐久度不發生變化
在程式實作方面,可分兩種方法達成目的:
1. 取消原 BlockBreakEvent 事件,對應的程式碼是 event.setCancelled(true);
這樣craftBukkit就不會對方塊被破壞事件做出任何動作
(在客戶端會看到方塊破壞掉之後,馬上又長回去)
走這條路,要自己撰寫事件處理器,處理所有應發生的事情
如:方塊換成空氣、掉出經驗值、工具耐久度變化……等
(讓客戶端看到方塊確實被破壞掉了)
2. 不取消原 BlockBreakEvent 事件
這方法要注意
事件處理順序是先經過Plugin才傳送到craftBukkit
傳送到craftBukkit的時候,視附魔有無耐久而定,耐久度有一定機率不會變化。
走這條路,只要將耐久度設定減一就可以了 (讓工具變新)
但若有附魔耐久的話,工具有一定機率會愈來愈新,也許最後會變成全新的。(bug?)
: ※ 引述《H45 (!H45)》之銘言:
: : 事件:BlockBreakEvent 方塊破壞事件
: : 耐久度增減相關類別與方法:
: : Player player = blockBreakEvent.getPlayer(); // 取得破壞方塊的玩家
: : ItemStack item = player.getItemInHand(); // 取得玩家手上的物品
: : short durability = item.getDurability(); // 取得物品的耐久度
: : item.setDurability(durability - 1); // 耐久度減一
: : (全新的物品耐久度是零,所以耐久度加一,是讓物品愈來愈舊,加到最後壞掉。)
: : 附魔相關:
: : if (item.containsEnchantment(Enchantment.DURABILITY)) { // 有無耐久附魔
: : // 取得耐久附魔等級
: : int level = item.getEnchantmentLevel(Enchantment.DURABILITY);
: : if (random.nextInt(level + 1) == 0) { // 一定機率扣耐久
: : // TODO 減少耐久度
: : }
: : }
: : 相關 Plugin 可參考:
: : 1. Lumberjack (專案較小): https://github.com/ChinChangYang/Lumberjack
: : 2. mcMMO (專案較大): https://github.com/mcMMO-Dev/mcMMO
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.22
推
01/08 00:56, , 1F
01/08 00:56, 1F
→
01/08 00:56, , 2F
01/08 00:56, 2F
→
01/08 00:57, , 3F
01/08 00:57, 3F
→
01/08 00:57, , 4F
01/08 00:57, 4F
→
01/08 00:59, , 5F
01/08 00:59, 5F
→
01/08 01:06, , 6F
01/08 01:06, 6F
→
01/08 01:08, , 7F
01/08 01:08, 7F
看不懂上面這段
編輯:之前我推文語氣有點衝,修掉了。
※ 編輯: H45 來自: 114.33.235.24 (01/08 20:15)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):