第四節 插件設定檔

想必前面學幾招後大家已經在著手自己的新插件,在這裡我們可以製作簡單的生命插件,當玩家等級提升時提升玩家的生命值,當然我們採用的是最簡易的做法。

玩家一出生時就帶有20點生命值不管如何成長都不會成長,除了特殊藥水能在一段時間額外增加生命值外沒有其他方法,當然提高玩家生命自然就打破遊戲平衡相對也有不少增加遊戲難度的插件,這部分就由開服者自行調整,這個插件設定為LV0~4 血量20不變,LV5~19 血量額外增加2點(一共22點)而LV20 以後血量增加10點也就是玩家20級以後有30點血量。

改變血量與等級變化有關我們查詢API很快就找到了玩家等級變動事件PlayerLevelChangeEvent,在使用之前最好保持著良好的習慣,先確認我們可以在API中取得那些資訊動用哪些方法。

@EventHandler public void onLevel (PlayerLevelChangeEvent event) { Player p = event.getPlayer(); // 取得改變後的等級 int newLv = event.getNewLevel(); double maxHealth = p.getMaxHealth(); // 判斷LV 0~4 if (newLv < 5 && maxHealth != 20) { p.setMaxHealth(20); // 改變玩家最大生命值 p.sendRawMessage("玩家生命調整,目前 20 點"); return; } // 判斷LV 5~19 if (4 < newLv && newLv < 20 && maxHealth != 22) { p.setMaxHealth(22); p.sendRawMessage("玩家生命調整,目前 22 點"); return; } // 判斷LV 20+ if (newLv > 19 && maxHealth != 30) { p.setMaxHealth(30); p.sendRawMessage("玩家生命調整,目前 30 點"); } }

上面的寫法很清楚的將等級的三層次劃分開來,我們可以看到除了劃分等級區域外同時也檢查了玩家生命的最大值,排除已完成變更的玩家外還考量了因附魔或死亡掉等時生命值也該修正回當時的等級,內容方面除了修改該玩家最大血量還需要額外的通知玩已變更血量,在測試插件也可以達到檢查的效果。

您興高采烈的分享製作成果,很快地就遇到問題比如血量設定值是不是可以修改,當然遇到第一次有人提出問題您可能修改好了之後便重新上傳,但是當許多人同時要求修改時或同一人一直要求修改就會覺得煩躁,所以我們需要把血量設定的部分取出,讓外部使用的玩家可以任意變更成自己想要的設定。

講到設定文件不少人便想到JSON這種輕量化的資訊文件,不過Spigot是採用YAML格式,畢竟設定檔需要簡明易讀層次表現也要明確,而JSON主要作用在資料庫上有較佳的效果,但是想用YAML來當簡易的資料庫也是不錯的方式。

# 文字敘述,解釋設定檔內容或建議設定值等

world: value0 
one:
  two: value1
  three:
    - values2
    - values3
    - values4
  four: 
    five: value5

在YAML文件內我們先看「#」字號就像平時編碼中使用的單行註解「//」一樣,不過使用上要單獨放一行不要跟key:value放一起,而註解內容大多是簡易的說明或建議使用者參數範圍等。

在設定值上可以看到有層次的樹狀結構,「:」號右邊是設定值,可以是Integer、String、Boolean外更可以存入List與Map相當的方便,所以前面有說到可以當資料庫來運用;左邊我們稱為key/鍵,簡單說就像Map,比如取得「value0」的鍵為「world」而「value1」的鍵為「one.two」,以下是我們的插件預設範本,如果是預設文件我們可以先寫好並且放置與plugin.yml同樣的位置,而檔案名為config.yml。

# 生命值設定,建議不要超過40

Level0~4: 20
Level5~19: 22
Level20+: 30

建立好文件重點是如何運用

powered by GitbookFile Modify: 2017-07-19 14:28:16

results matching ""

    No results matching ""