diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index c276f0e..290ec3b 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -18,7 +18,7 @@ on:
jobs:
publish:
- uses: bentoboxworld/.github/.github/workflows/publish-platforms.yml@ca2dcd167e8db4e0f671a976080744dda43801a6 # master
+ uses: bentoboxworld/.github/.github/workflows/publish-platforms.yml@1f91a0edf72e8c86d671b3b8fdd3121ac6fb88e1 # master
with:
use_release_asset: "true" # publish the jar attached to the release; do not rebuild
hangar_slug: "Level"
diff --git a/pom.xml b/pom.xml
index c3bf7fe..c565baf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,7 +69,7 @@
-LOCAL
- 2.28.1
+ 2.29.0
BentoBoxWorld_Level
bentobox-world
https://sonarcloud.io
diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java
index 82f6702..b903185 100644
--- a/src/main/java/world/bentobox/level/Level.java
+++ b/src/main/java/world/bentobox/level/Level.java
@@ -380,6 +380,7 @@ public long getIslandLevel(World world, @Nullable UUID targetPlayer) {
* @param level - level
* @deprecated This is a useless method.
*/
+ @Deprecated
public void setIslandLevel(World world, UUID targetPlayer, long level) {
getManager().setIslandLevel(world, targetPlayer, level);
}
diff --git a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java
index afa9d1c..7ac34d7 100644
--- a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java
+++ b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java
@@ -36,7 +36,6 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BlockStateMeta;
-import io.th0rgal.oraxen.mechanics.provided.gameplay.furniture.FurnitureMechanic;
import com.bgsoftware.wildstacker.api.WildStackerAPI;
import com.bgsoftware.wildstacker.api.objects.StackedBarrel;
diff --git a/src/main/java/world/bentobox/level/objects/IslandLevels.java b/src/main/java/world/bentobox/level/objects/IslandLevels.java
index 561a055..2454829 100644
--- a/src/main/java/world/bentobox/level/objects/IslandLevels.java
+++ b/src/main/java/world/bentobox/level/objects/IslandLevels.java
@@ -441,14 +441,16 @@ public long getTotalDeaths() {
* @return the initialLevel
* @deprecated only used for backwards compatibility. Use {@link #getInitialCount()} instead
*/
+ @Deprecated
public Long getInitialLevel() {
return initialLevel;
}
/**
* @param initialLevel the initialLevel to set
- * @deprecated only used for backwards compatil
+ * @deprecated only used for backwards compatibility. Use {@link #setInitialCount(Long)} instead
*/
+ @Deprecated
public void setInitialLevel(Long initialLevel) {
this.initialLevel = initialLevel;
}
diff --git a/src/main/java/world/bentobox/level/panels/DetailsPanel.java b/src/main/java/world/bentobox/level/panels/DetailsPanel.java
index 3bd84fd..f657809 100644
--- a/src/main/java/world/bentobox/level/panels/DetailsPanel.java
+++ b/src/main/java/world/bentobox/level/panels/DetailsPanel.java
@@ -213,6 +213,11 @@ private void build() {
private void updateFilters() {
this.blockCountList.clear();
+ if (this.levelsData == null) {
+ // No island, nothing to show. build() reports this to the user.
+ return;
+ }
+
if (this.activeTab == Tab.DONATED) {
// Show donated blocks
Map donated = this.levelsData.getDonatedBlocks();
diff --git a/src/main/java/world/bentobox/level/panels/ValuePanel.java b/src/main/java/world/bentobox/level/panels/ValuePanel.java
index 7a7695f..688b9cf 100644
--- a/src/main/java/world/bentobox/level/panels/ValuePanel.java
+++ b/src/main/java/world/bentobox/level/panels/ValuePanel.java
@@ -679,12 +679,22 @@ private static String stripCustomPrefix(String key) {
return key;
}
+ /**
+ * Looks up a material by namespaced key string, tolerating malformed keys.
+ * @param key namespaced key string, e.g. "minecraft:stone"
+ * @return the material, or null if the key is malformed or unknown
+ */
+ private static Material lookupMaterial(String key) {
+ NamespacedKey namespacedKey = NamespacedKey.fromString(key);
+ return namespacedKey == null ? null : Registry.MATERIAL.get(namespacedKey);
+ }
+
private Material getIcon(String key) {
// Filter out some names
- key = key.replaceAll("wall_", "");
- Material icon = Registry.MATERIAL.get(NamespacedKey.fromString(key));
+ key = key.replace("wall_", "");
+ Material icon = lookupMaterial(key);
if (icon == null && key.endsWith("_spawner")) {
- icon = Registry.MATERIAL.get(NamespacedKey.fromString(key.substring(0, key.length() - 2) + "_egg"));
+ icon = lookupMaterial(key.substring(0, key.length() - 2) + "_egg");
}
// ItemsAdder
if (icon == null && addon.isItemsAdder() && ItemsAdderHook.isInRegistry(key)) {
diff --git a/src/main/resources/locales/zh-TW.yml b/src/main/resources/locales/zh-TW.yml
new file mode 100644
index 0000000..17e2e18
--- /dev/null
+++ b/src/main/resources/locales/zh-TW.yml
@@ -0,0 +1,254 @@
+# ##########################################################################################
+# This is a YML file. Be careful when editing. Check your edits in a YAML checker like #
+# the one at http://yaml-online-parser.appspot.com #
+# ##########################################################################################
+
+admin:
+ level:
+ parameters:
+ description: 計算玩家的島嶼等級
+ sethandicap:
+ parameters: [+/-]
+ description: |-
+ 設定或修改島嶼補正值。
+ 例如:
+ +10 會扣除 10 個等級;
+ 30 會將補正值設為 30;
+ -20 會增加 20 個等級。
+ changed: 島嶼補正值已由 [number] 變更為 [new_number]。
+ invalid-level: 補正值無效,請輸入整數。
+ levelstatus:
+ description: 顯示等待掃描的島嶼數量
+ islands-in-queue: '佇列中的島嶼: [number]'
+ top:
+ description: 顯示前十名排行榜
+ unknown-world: 未知的世界!
+ display: [rank]. [name] - [level]
+ remove:
+ description: 將玩家從前十名排行榜中移除
+ parameters:
+ stats:
+ description: 顯示此伺服器的島嶼統計資料
+ title: 伺服器島嶼統計資料
+ world: [name]
+ no-data: 沒有可處理的資料。
+ average-level: '平均島嶼等級: [number]'
+ median-level: '島嶼等級中位數: [number]'
+ mode-level: '島嶼等級眾數: [number]'
+ highest-level: '最高島嶼等級: [number]'
+ lowest-level: '最低島嶼等級: [number]'
+ distribution: '島嶼等級分布:'
+ islands: 座島嶼
+island:
+ level:
+ parameters: '[player]'
+ description: 計算你的島嶼等級,或顯示 [player] 的島嶼等級
+ calculating: 正在計算島嶼等級……
+ estimated-wait: '預估等待時間: [number] 秒'
+ in-queue: 你目前位於佇列第 [number] 位
+ island-level-is: 島嶼等級:[level]
+ required-points-to-next-level: '等級進度:[progress]/[levelcost] 點'
+ deaths: (死亡 [number] 次)
+ cooldown: 請等待 [time] 秒後才能再次使用。
+ in-progress: 正在計算島嶼等級……
+ time-out: 島嶼等級計算逾時,請稍後再試。
+ donate:
+ parameters: '[hand [amount]] [inv]'
+ description: 捐贈方塊以永久提升島嶼等級
+ must-be-on-island: 你必須位於自己的島嶼上才能捐贈方塊。
+ no-permission: 你沒有權限在此島嶼捐贈方塊。
+ no-value: 此方塊沒有島嶼等級價值。
+ invalid-amount: 數量無效,請輸入正整數。
+ invalid-item: 只有已設定等級價值的方塊才能捐贈。
+ empty: 沒有可捐贈的有效方塊。
+ cancelled: 已取消捐贈,物品已退還。
+ success: 成功捐贈 [number] 個方塊,獲得 [points] 點永久點數!
+ confirm: 確認-物品將會被銷毀!
+ cancel: 取消-退還物品
+ gui-title: 捐贈方塊
+ gui-info: '捐贈方塊以提升島嶼等級|目前已捐贈:[points] 點|注意:已捐贈的物品|會被銷毀且無法取回!'
+ preview: '將增加點數:[points]|這些物品將被銷毀!'
+ limit-reached: [material] 的捐贈數量已達上限。
+ limit-reached-all: 這些方塊的捐贈數量皆已達上限。
+ limit-notice: '部分方塊有數量上限限制|超過上限的部分將不會被捐贈'
+ hand:
+ keyword: hand
+ success: 成功捐贈 [number] 個 [material],獲得 [points] 點永久點數!
+ not-block: 你必須手持可放置的方塊才能捐贈。
+ confirm-prompt: 即將銷毀 [number] 個 [material],並獲得 [points] 點永久點數。
+ inv:
+ keyword: inv
+ confirm-header: '即將從你的背包中銷毀以下方塊:'
+ confirm-line: [number] 個 [material] = [points] 點
+ confirm-total: '合計:[points] 點永久點數。'
+ detail:
+ description: 顯示島嶼方塊詳細資訊
+ top:
+ description: 顯示前十名排行榜
+ gui-title: 前十名排行榜
+ gui-heading: '[name]:[rank]'
+ island-level: 等級 [level]
+ warp-to: 正在傳送至 [name] 的島嶼
+ level-details:
+ above-sea-level-blocks: 海平面以上的方塊
+ spawners: 生怪磚
+ underwater-blocks: 海平面以下的方塊
+ all-blocks: 所有方塊
+ no-island: 你沒有島嶼!
+ names-island: '[name] 的島嶼'
+ syntax: '[name] x [number]'
+ hint: 請執行 level 指令查看方塊報告。
+protection:
+ flags:
+ ISLAND_BLOCK_DONATION:
+ description: |-
+ 設定哪些人可以
+ 捐贈方塊以提升島嶼等級。
+ name: 方塊捐贈
+ hint: 不允許捐贈方塊
+level:
+ commands:
+ value:
+ parameters: '[hand|]'
+ description: 顯示方塊的價值。加入「hand」可顯示手中物品的價值。
+ gui:
+ titles:
+ top: 島嶼排行榜
+ detail-panel: [name] 的島嶼
+ value-panel: 方塊價值
+ buttons:
+ island:
+ empty: 第 [name] 名
+ name: [name]
+ description: |-
+ [owner]
+ [members]
+ [place]
+ [level]
+ owners-island: '[player] 的島嶼'
+ owner: '島主:[player]'
+ members-title: '成員:'
+ member: - [player]
+ unknown: 未知
+ place: 第 [number] 名
+ level: '等級:[number]'
+ material:
+ name: [number] x [material]
+ description: |-
+ [description]
+ [count]
+ [value]
+ [calculated]
+ [limit]
+ [id]
+ id: '方塊 ID:[id]'
+ value: '方塊價值:[number]'
+ limit: '方塊上限:[number]'
+ count: '方塊數量:[number]'
+ calculated: '計算價值:[number]'
+ value_blocks:
+ name: 所有有價值的方塊
+ description: |-
+ 顯示島嶼上所有
+ 具有價值的方塊。
+ all_blocks:
+ name: 所有方塊
+ description: |-
+ 顯示島嶼上的
+ 所有方塊。
+ above_sea_level:
+ name: 海平面以上的方塊
+ description: |-
+ 只顯示位於
+ 海平面以上的
+ 方塊。
+ underwater:
+ name: 海平面以下的方塊
+ description: |-
+ 只顯示位於
+ 海平面以下的
+ 方塊。
+ spawner:
+ name: 生怪磚
+ description: 只顯示生怪磚。
+ block-name: 生怪磚
+ donated:
+ name: 已捐贈方塊
+ description: |-
+ 顯示所有已永久
+ 捐贈給島嶼等級的方塊。
+ filters:
+ name:
+ name: 依名稱排序
+ description: 依名稱排序所有方塊。
+ value:
+ name: 依價值排序
+ description: 依方塊價值排序。
+ count:
+ name: 依數量排序
+ description: 依方塊數量排序。
+ value:
+ name: [material]
+ description: |-
+ [description]
+ [value]
+ [underwater]
+ [limit]
+ [id]
+ id: '方塊 ID:[id]'
+ value: '方塊價值:[number]'
+ underwater: '海平面以下價值:[number]'
+ limit: '方塊上限:[number]'
+ previous:
+ name: 上一頁
+ description: 切換至第 [number] 頁。
+ next:
+ name: 下一頁
+ description: 切換至第 [number] 頁。
+ search:
+ name: 搜尋
+ description: |-
+ 搜尋指定的
+ 數值。
+ search: '搜尋值: [value]'
+ tips:
+ click-to-view: 點擊 即可查看。
+ click-to-previous: 點擊 即可查看上一頁。
+ click-to-next: 點擊 即可查看下一頁。
+ click-to-select: 點擊 即可選取。
+ left-click-to-cycle-up: 左鍵 即可切換至上一個選項。
+ right-click-to-cycle-down: 右鍵 即可切換至下一個選項。
+ left-click-to-change: 左鍵 即可編輯。
+ right-click-to-clear: 右鍵 即可清除。
+ click-to-asc: 點擊 即可依升冪排序。
+ click-to-desc: 點擊 即可依降冪排序。
+ click-to-warp: 點擊 即可傳送。
+ click-to-visit: 點擊 即可參觀。
+ right-click-to-visit: 右鍵 即可參觀。
+ conversations:
+ # Prefix for messages that are send from server.
+ prefix: '[BentoBox]: '
+ no-data: 請執行 level 指令查看方塊報告。
+ # String that allows to cancel conversation. (can be only one)
+ cancel-string: cancel
+ # List of strings that allows to exit conversation. (separated with ,)
+ exit-string: cancel, exit, quit
+ # Message that asks for search value input.
+ write-search: 請輸入要搜尋的數值。(輸入「cancel」即可取消)
+ # Message that appears after updating search value.
+ search-updated: 搜尋條件已更新。
+ # Message that is sent to user when conversation is cancelled.
+ cancelled: 對話已取消!
+ # Message that is sent to user when given material does not have any value.
+ no-value: 此物品沒有價值。
+ # Message that is sent to user when requested material does not exist.
+ unknown-item: 遊戲中不存在「[material]」。
+ # Messages that is sent to user when requesting value for a specific material.
+ value: '「[material]」的價值:[value]'
+ value-underwater: '「[material]」在海平面以下的價值:[value]'
+ # Message that is sent to user when he does not hold any items in hand.
+ empty-hand: 你的手中沒有可計算的方塊。
+ # Message when showing how many have been placed of a block
+ you-have: 上次統計時共有 [number] 個。
+ # Message about the limit
+ you-can-place: 最多可放置 [number] 個並計入島嶼等級。