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] 個並計入島嶼等級。