Skip to content

Kevin28576/ChatConduit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ChatConduit

⚠️ 本插件仍在開發中(WIP) 功能與設定格式都可能變動,尚未經過大規模正式環境驗證。 目前 SQL / Redis 部分僅在有限環境測試過,請勿直接用於正式伺服器,或務必先備份。

Paper 伺服器的聊天頻道系統:公開/私人頻道、GUI 選單、逐玩家的訊息隱藏(死亡/達成進度/AFK), 以及可插拔的資料保存後端。

需求:Paper 26.1、Java 25


功能

頻道

  • 公開頻道:channels/ 資料夾內一個 .yml = 一個頻道,可各自設定顏色與可見範圍。
  • 私人頻道:玩家自建,群主管理(邀請、踢人、人數上限、描述、解散),預設邀請制。
  • 加入頻道即在該頻道發言,訊息自動帶上該頻道前綴,例如 [交易] 玩家 » 訊息。 想暫時回公共聊天可用 /chat talk 或選單的「輸入模式」按鈕切換,不必離開頻道。
  • 公共聊天:沒有作用中頻道的玩家,訊息前面加上 [公共] 前綴。

逐玩家訊息隱藏(需 packetevents)

玩家可自行在選單裡隱藏別人的自己的訊息,只影響他自己,其他人照常看到:

類型 操作 支援來源
死亡訊息 左鍵=他人 / 右鍵=自己 原版、CMI
達成進度 左鍵=他人 / 右鍵=自己 原版
AFK 訊息 左鍵切換 CMI(需其 AFK 模組開啟)

資料保存

  • 後端可選:file(yml) / SQLite / H2 / MySQL / MariaDB / PostgreSQL
  • 選用 Redis 作為紀錄的寫入緩衝:聊天/指令紀錄先進 Redis 佇列再批次落地, 避免高頻紀錄打爆資料庫連線。沒配置 Redis 就每筆直接落地。
  • 執行期依賴(HikariCP / JDBC 驅動 / Jedis)由 Paper 的 library loader 依設定自動下載,不打包進 jar。

指令

指令 說明
/chat 開啟頻道選單
/chat list 文字總覽
/chat join <頻道> 加入/切換頻道
/chat leave [頻道] 離開頻道(預設為作用中的)
/chat create <名稱> 建立私人頻道
/chat invite <玩家> 邀請玩家進你的頻道(群主)
/chat who 列出作用中頻道的成員
/chat talk 切換輸入模式(講話進頻道 ↔ 公共聊天)
/chat deathmessages [self] 切換隱藏死亡訊息(他人/自己)
/chat advancements [self] 切換隱藏達成進度訊息(他人/自己)
/chat afk 切換隱藏 AFK 訊息
/chat reload 重載設定與語言檔
/chat debug 切換除錯模式
/c <訊息>(別名 /cc) 單獨發一句到作用中頻道

權限

節點 預設 說明
chatconduit.use 所有人 基本功能
chatconduit.create 所有人 建立私人頻道
chatconduit.admin OP /chat reload/chat debug

設定

公開頻道 channels/<檔名>.yml

新增頻道 = 複製一個檔。檔名僅供識別,玩家看到的是 name

enabled: true
name: "交易"
description: "買賣物品、尋找你需要的東西"
color: "<gold>"              # MiniMessage 顏色,也可用 <#ff8800>
show-in-public-chat: false   # true = 沒加入本頻道的玩家也看得到

內建兩個範例:交易(僅成員可見)、組隊(全服可見)。

config.yml(重點)

language: zh_TW
debug: false

chat:
  public-prefix: true   # 公共聊天是否加上 [公共] 前綴
  priority: LOWEST      # 聊天事件優先級,與 CMI/LPC 等搭配時可調

private-channels:
  max-per-player: 3
  default-member-limit: 20

death-messages:
  allow-player-hide: true
  self-death-keywords: []   # CMI 死亡座標等「無玩家名」訊息的比對關鍵字

storage:
  type: yml               # yml / sqlite / h2 / mysql / mariadb / postgresql
  logging:                # 要保存哪些紀錄
    commands: false
    channel-chat: false
    global-chat: false
  sql:
    file: data
    host: 127.0.0.1
    port: 3306
    database: chatconduit
    username: root
    password: ""

redis:                    # 選用:紀錄的寫入緩衝
  enabled: false
  host: 127.0.0.1
  port: 6379

切換到 SQL 或啟用 Redis 後請重啟一次 —— library loader 要先讀得到 config.yml 才知道要下載哪個驅動。SQL 初始化失敗會自動退回 yml,不會讓伺服器起不來。

語言檔 lang/

玩家看得到的文字全部在語言檔(MiniMessage 格式),內建 zh_TWen_US。 複製一份改名(如 de_DE.yml)再設定 language: 即可新增語言。 玩家輸入的內容一律以純文字插入,不會被當成標籤解析。


與其他聊天插件整合

若你的伺服器由 CMILPCFreedomChat 等插件接管聊天渲染, 本插件的 [公共] 前綴可能不會顯示(對方自行廣播、不走 renderer)。 此時請關閉 chat.public-prefix,改用 PlaceholderAPI 佔位符放進對方的聊天格式:

佔位符 回傳
%chatconduit_prefix% 完整前綴,§ 色碼,如 §8[§6交易§8] —— 直接可顯示
%chatconduit_prefix_amp% 同上但用 & 色碼
%chatconduit_channel% 頻道純名稱;沒有頻道時回傳「公共」
%chatconduit_channel_raw% 頻道純名稱;沒有頻道時回傳空字串
%chatconduit_public% 「公共」純文字
%chatconduit_in_channel% true / false

CMI 範例:

GeneralFormat: '%chatconduit_prefix% &r{displayName} &8» &r{message}'

軟依賴(有裝才啟用,啟動時 console 會回報)

插件 用途
packetevents 逐玩家訊息隱藏、頻道訊息不外洩到公共聊天
CMI 偵測其 DeathMessages / AFK 模組以正確處理對應訊息
PlaceholderAPI 提供上述佔位符

都沒裝也能正常運作,只是對應功能會停用。


建置

需要 JDK 25(Paper 26.1 的 API 以 Java 25 編譯)。

mvn clean package

產出:target/ChatConduit-1.0.0.jar

CMI 整合需要 src/main/java/kevin/chatconduit/library/CMI-API*.jar(已隨庫附上)。


授權

LICENSE。Copyright (c) 2026 Kevin28576。

About

Public and private chat channels for Paper servers

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors