跳至主要內容

CannonRTP 保護插件整合

CannonRTP 可以在將候選降落位置加入使用佇列之前,對其進行多個保護插件的驗證。

支援的整合​

支援的保護插件為:

  • WorldGuard(同時需要 WorldEdit,而 WorldGuard 本來就需要它)
  • Towny
  • Lands
  • GriefPrevention
  • HuskTowns
  • HuskClaims

以上全部在 plugin.yml 中以 softdepend 宣告(與 WorldEdit 和 FreeMinecraftModels 並列)。即使未安裝任何一個,CannonRTP 仍可運作;缺少的插件會被默默略過。

保護檢查的運作方式​

  • 介接器以固定順序進行檢查:WorldGuard、Towny、Lands、GriefPrevention、HuskTowns、HuskClaims。
  • 保護介接器只在 (a) 其 enabled 開關於 protection.yml 中為 true,且 (b) 該插件已於伺服器上存在並載入時才會被註冊。
  • 第一個阻擋位置的介接器會停止檢查,並成為回報的原因。
  • 若保護 API 拋出錯誤,CannonRTP 預設會阻擋該降落(fail-closed,失敗封閉)。此行為由 landing.yml 中的 failOpenOnProtectionErrors 控制。
  • 若某個介接器已啟用且其插件存在,但介接器本身載入失敗(缺少類別、API 版本不相容),CannonRTP 會記錄 Failed to hook into <plugin>,並在檢查鏈中為該插件保留一個佔位項,因此該失敗不會被當作該插件根本沒安裝。failOpenOnProtectionErrors 決定佔位項的行為:
    • false(預設):佔位項會以 its adapter failed to initialize (...) 為原因阻擋每個位置,且大砲會停止搜尋。每座大砲都會被標記為 Exhausted,原因為受保護領地,而不會繼續取樣無法通過的位置。請修正該整合,或在 protection.yml 中停用它,然後執行 /wc reload。
    • true:佔位項會允許每個位置,其他介接器仍會照常執行。

API 失敗時的全域安全切換為:

  • failOpenOnProtectionErrors(位於 landing.yml)

預設:false

當設為 true 時,CannonRTP 會在保護插件無法被安全查詢時允許降落繼續。設為 false 時,查詢錯誤會以 its API could not be queried safely 為原因阻擋該位置。無論哪種設定,查詢錯誤都會以警告形式記錄。

/wc probe 指令​

管理員可在任何位置執行 /wc probe,檢查該位置是否通過所有已啟用的保護檢查。結果會指出哪個插件拒絕該位置及其原因,或確認保護介接器允許它。此指令不驗證地形、空投整列空間、搜尋半徑,也不觸發 API 的位置驗證事件。

設定檔​

所有保護開關位於 plugins/CannonRTP/protection.yml。鍵為頂層(例如 worldGuard.enabled,而非 protection.worldGuard.enabled)。

各插件行為​

WorldGuard​

設定鍵:

  • worldGuard.enabled
  • worldGuard.allowGlobalRegionOnly
  • worldGuard.allowBuildAllowedRegions
  • worldGuard.allowPassthroughRegions

預設行為:

  • 預設啟用
  • 僅由 __global__ 覆蓋的位置預設被允許
  • 設定 build=ALLOW 的區域預設被允許
  • 設定 passthrough=ALLOW 的區域預設被允許
  • 其他匹配的受保護區域被阻擋

Towny​

設定鍵:

  • towny.enabled
  • towny.allowWilderness
  • towny.allowNationZones
  • towny.allowClaimedTownBlocks

預設行為:

  • 預設啟用
  • 未啟用 Towny 的世界一律被允許
  • 荒野被允許
  • 國家區域被阻擋
  • 已佔領的城鎮方塊被阻擋

Lands​

設定鍵:

  • lands.enabled
  • lands.allowUnclaimedAreas
  • lands.allowClaimedAreas

預設行為:

  • 預設啟用
  • 未佔領區域被允許
  • 已佔領區域被阻擋

GriefPrevention​

設定鍵:

  • griefPrevention.enabled
  • griefPrevention.allowWilderness
  • griefPrevention.allowAdminClaims
  • griefPrevention.allowPlayerClaims

預設行為:

  • 預設啟用
  • 荒野被允許
  • 管理員領地被阻擋
  • 玩家領地被阻擋

HuskTowns​

設定鍵:

  • huskTowns.enabled
  • huskTowns.allowWilderness
  • huskTowns.allowAdminClaims
  • huskTowns.allowRegularClaims
  • huskTowns.allowFarmClaims
  • huskTowns.allowPlotClaims

預設行為:

  • 預設啟用
  • 荒野被允許
  • 管理員領地被阻擋
  • 一般城鎮領地被阻擋
  • 農地領地被阻擋
  • 地塊領地被阻擋

HuskClaims​

設定鍵:

  • huskClaims.enabled
  • huskClaims.allowWilderness
  • huskClaims.allowAdminClaims
  • huskClaims.allowPlayerClaims

預設行為:

  • 預設啟用
  • 荒野被允許
  • 管理員領地被阻擋
  • 玩家領地被阻擋

非保護驗證同樣適用​

保護插件整合只是降落驗證的一部分。位置仍可能因下列原因被拒絕:

  • 位於世界邊界外
  • 不存在安全表面
  • 腳部或頭部空間被阻擋
  • 地形與設定的不安全材質清單匹配
  • CannonRTPLocationValidationEvent 監聽器否決該位置(見 API 事件)

失敗報告​

大砲用盡 searchTimeoutAttempts 仍未找到足夠有效降落點,或因保護整合載入失敗而提早停止時,狀態與玩家訊息會列出該輪搜尋遇到的拒絕類別。即使只有一個樣本因受保護領地而被拒絕,也會列出該類別。預設文案雖有「most samples」等說法,但不提供次數,也不按頻率排序。請用它判斷應調查哪些檢查,而非衡量哪項檢查拒絕了最多位置。