{"id":81894,"date":"2026-06-04T19:55:18","date_gmt":"2026-06-04T16:55:18","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/"},"modified":"2026-06-04T19:55:18","modified_gmt":"2026-06-04T16:55:18","slug":"hordechat","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/","title":{"rendered":"Horde Chat"},"content":{"rendered":"<p># Horde \u2014 Velocity \u804a\u5929\u63d2\u4ef6 | Velocity Chat Plugin<\/p>\n<p>\u4e00\u6b3e\u8f7b\u91cf\u3001\u96f6\u6298\u817e\u7684 Velocity \u804a\u5929\u63d2\u4ef6\u3002Horde \u63d0\u4f9b\u5168\u5c40\u4e0e\u672c\u5730\u804a\u5929\u3001\u7b80\u6d01\u53ef\u914d\u7684\u6a21\u677f\u3001\u57fa\u4e8e\u6743\u9650\u7684\u524d\u7f00\uff0c\u5e76\u5c3d\u91cf\u51cf\u5c11\u590d\u6742\u5ea6\u3002<br \/>\nA lightweight, zero-fuss chat plugin for Velocity. Horde provides global and local chat with clean, configurable templates, permission-based prefixes, and minimal moving parts.<\/p>\n<p>&#8211; \u5e73\u53f0\uff1aVelocity<br \/>\n&#8211; Platform: Velocity<br \/>\n&#8211; Java\uff1a21+<br \/>\n&#8211; Java: 21+<\/p>\n<p>## \u529f\u80fd | Features<br \/>\n&#8211; \u5168\u5c40\u4e0e\u672c\u5730\u804a\u5929\uff1a\u53ef\u5728\u6574\u4e2a\u4ee3\u7406\u5e7f\u64ad\uff0c\u6216\u4ec5\u9650\u5f53\u524d\u5b50\u670d\u672c\u5730\u3002<br \/>\n&#8211; Global and local chat: broadcast across the proxy or keep it server-local.<br \/>\n&#8211; \u73a9\u5bb6\u9ed8\u8ba4\u6a21\u5f0f\uff1a\u4f7f\u7528\u4e0d\u5e26\u53c2\u6570\u7684 `\/broadcast` \u6216 `\/local` \u5728\u4e2a\u4eba\u9ed8\u8ba4\u5168\u5c40\/\u672c\u5730\u4e4b\u95f4\u5207\u6362\u3002<br \/>\n&#8211; Per-player default mode: toggle with `\/broadcast` or `\/local` without arguments.<br \/>\n&#8211; \u6781\u7b80\u914d\u7f6e\uff1a\u5f00\u7bb1\u5373\u7528\u7684\u5408\u7406\u9ed8\u8ba4\uff0c\u540c\u65f6\u4fdd\u6301\u9ad8\u5ea6\u53ef\u5b9a\u5236\u3002<br \/>\n&#8211; Minimal config: sensible defaults, yet still extremely customizable.<br \/>\n&#8211; \u7075\u6d3b\u683c\u5f0f\uff1a\u672c\u5730\u5316\u3001\u6a21\u677f\u548c\u804a\u5929\u6587\u672c\u652f\u6301 MiniMessage \u6216\u4f20\u7edf\u989c\u8272\u7801\uff08Legacy \u00a7\/&#038;\uff09\u3002<br \/>\n&#8211; Flexible formatting: MiniMessage or Legacy (\u00a7\/&#038;) style for localizations, templates and chat.<br \/>\n&#8211; \u57fa\u4e8e\u6743\u9650\u7684\u524d\u7f00\uff1a\u901a\u8fc7 `prefix.yml` \u5728\u804a\u5929\u6a21\u677f\u4e2d\u6ce8\u5165\u524d\u7f00\u3002<br \/>\n&#8211; Prefixes by permission: inject prefixes via `prefix.yml` in your chat templates.<br \/>\n&#8211; \u540d\u79f0\u6620\u5c04\uff1a\u4e3a\u670d\u52a1\u5668\u540d\u5c55\u793a\u6613\u8bfb\u7684\u522b\u540d\uff08\u5982 `survival` -> `Survival`\uff09\u3002<br \/>\n&#8211; Name mappings: show pretty server names (e.g., `survival` -> `Survival`).<br \/>\n&#8211; \u53ef\u9009\u7684\u53d1\u9001\u8005 UUID \u8f6c\u53d1\uff1a\u63d0\u5347\u4e0e\u67d0\u4e9b\u5ba2\u6237\u7aef\u6a21\u7ec4\u7684\u517c\u5bb9\u6027\u3002<br \/>\n&#8211; Optional sender UUID forwarding: better compatibility with some client mods.<br \/>\n&#8211; \u53ef\u9009\u7684\u6d88\u606f\u65e5\u5fd7\uff1a\u5c06\u804a\u5929\u955c\u50cf\u5230\u4ee3\u7406\u63a7\u5236\u53f0\u65e5\u5fd7\u3002<br \/>\n&#8211; Optional message logging: mirror chat into the proxy logs.<\/p>\n<p>## \u73af\u5883\u8981\u6c42 | Requirements<br \/>\n&#8211; Velocity \u4ee3\u7406 3.x<br \/>\n&#8211; Velocity proxy 3.x<br \/>\n&#8211; Java 21 \u53ca\u4ee5\u4e0a<br \/>\n&#8211; Java 21+<\/p>\n<p>## \u5b89\u88c5 | Installation<br \/>\n1. \u6784\u5efa\u6216\u4e0b\u8f7d\u63d2\u4ef6 JAR\u3002<br \/>\n2. \u5c06 JAR \u653e\u5165 Velocity \u7684 `plugins\/` \u76ee\u5f55\u3002<br \/>\n3. \u542f\u52a8\u4e00\u6b21 Velocity \u4ee5\u5728 `plugins\/horde\/` \u751f\u6210\u914d\u7f6e\u6587\u4ef6\u3002<br \/>\n4. \u6309\u9700\u7f16\u8f91 `config.yml`\u3001`localization.yml` \u4e0e `prefix.yml`\u3002<br \/>\n5. \u4f7f\u7528 `\/horde reload` \u91cd\u8f7d\u6216\u91cd\u542f\u4ee3\u7406\u3002<br \/>\n1. Build or download the plugin JAR.<br \/>\n2. Place the JAR into your Velocity `plugins\/` folder.<br \/>\n3. Start Velocity once to generate config files at `plugins\/horde\/`.<br \/>\n4. Edit `config.yml`, `localization.yml`, and `prefix.yml` to taste.<br \/>\n5. Reload with `\/horde reload` or restart the proxy.<\/p>\n<p>## \u914d\u7f6e | Configuration<br \/>\n\u9664\u7279\u522b\u8bf4\u660e\u5916\uff0c\u914d\u7f6e\u6587\u4ef6\u4f4d\u4e8e `plugins\/horde\/`\u3002<br \/>\nFiles live under `plugins\/horde\/` unless otherwise noted.<\/p>\n<p>### `config.yml`<br \/>\n&#8211; `default-global-chat`\uff08\u5e03\u5c14\uff0c\u9ed8\u8ba4 `true`\uff09\uff1a<br \/>\n  &#8211; \u4e3a `true` \u65f6\u73a9\u5bb6\u9ed8\u8ba4\u5168\u5c40\u804a\u5929\uff1b\u4e3a `false` \u65f6\u9ed8\u8ba4\u672c\u5730\u804a\u5929\u3002<br \/>\n  &#8211; \u73a9\u5bb6\u53ef\u901a\u8fc7\u4e0d\u5e26\u6d88\u606f\u7684 `\/broadcast` \u6216 `\/local` \u8986\u76d6\u81ea\u5df1\u7684\u9ed8\u8ba4\u6a21\u5f0f\u3002<br \/>\n&#8211; `default-global-chat` (boolean, default `true`):<br \/>\n  &#8211; When true, players chat globally by default; when false, locally.<br \/>\n  &#8211; Players can override their own default using `\/broadcast` or `\/local` with no message.<br \/>\n&#8211; `log-messages`\uff08\u5e03\u5c14\uff0c\u9ed8\u8ba4 `false`\uff09\uff1a\u540c\u65f6\u5c06\u804a\u5929\u8f93\u51fa\u5230\u4ee3\u7406\u63a7\u5236\u53f0\u65e5\u5fd7\u3002<br \/>\n&#8211; `log-messages` (boolean, default `false`): also log chat to the proxy console.<br \/>\n&#8211; `enable-legacy-chat-formatting`\uff08\u5e03\u5c14\uff0c\u9ed8\u8ba4 `true`\uff09\uff1a<br \/>\n  &#8211; \u4ec5\u4f5c\u7528\u4e8e\u73a9\u5bb6\u8f93\u5165\u7684\u539f\u59cb\u804a\u5929\u5185\u5bb9\u3002<br \/>\n  &#8211; \u4e3a `true` \u65f6\u5141\u8bb8\u4f7f\u7528 `&#038;` \u989c\u8272\u7801\uff08\u5982 `&#038;aHello`\uff09\uff0c\u6309 Legacy (\u00a7) \u89e3\u6790\u3002<br \/>\n  &#8211; \u4e3a `false` \u65f6\u539f\u59cb\u6d88\u606f\u6309 MiniMessage \u89e3\u6790\u3002<br \/>\n&#8211; `enable-legacy-chat-formatting` (boolean, default `true`):<br \/>\n  &#8211; Applies only to raw messages players type (the message content).<br \/>\n  &#8211; When true, players can use `&#038;` codes (e.g., `&#038;aHello`). Parsed as Legacy (\u00a7) via Adventure.<br \/>\n  &#8211; When false, raw messages are parsed as MiniMessage.<br \/>\n&#8211; `enable-legacy-localization-formatting`\uff08\u5e03\u5c14\uff0c\u9ed8\u8ba4 `false`\uff09\uff1a<br \/>\n  &#8211; \u4f5c\u7528\u4e8e `localization.yml` \u4e0e `prefix.yml` \u4e2d\u7684\u672c\u5730\u5316\u5b57\u7b26\u4e32\u4e0e\u6a21\u677f\u3002<br \/>\n  &#8211; \u4e3a `true` \u65f6\u6309 Legacy (\u00a7) \u89e3\u6790\uff1b\u5426\u5219\u4e3a MiniMessage\u3002<br \/>\n  &#8211; \u6ce8\u610f\uff1a\u9ed8\u8ba4\u6a21\u677f\u57fa\u4e8e MiniMessage\u3002<br \/>\n&#8211; `enable-legacy-localization-formatting` (boolean, default `false`):<br \/>\n  &#8211; Applies to localization strings and templates in `localization.yml` and `prefix.yml`.<br \/>\n  &#8211; When true, those files are parsed as Legacy (\u00a7); otherwise MiniMessage.<br \/>\n  &#8211; Note: default templates assume MiniMessage.<br \/>\n&#8211; `forward-sender-uuid`\uff08\u5e03\u5c14\uff0c\u9ed8\u8ba4 `false`\uff09\uff1a<br \/>\n  &#8211; \u542f\u7528\u540e\u901a\u8fc7 Adventure Identity \u9644\u5e26\u4f5c\u8005 UUID \u53d1\u9001\u6d88\u606f\u3002<br \/>\n  &#8211; \u53ef\u63d0\u5347\u4e0e Chat Heads \u7b49\u5ba2\u6237\u7aef\u6a21\u7ec4\u7684\u517c\u5bb9\u6027\u3002<br \/>\n  &#8211; Mojang \u5b89\u5168\u6863\u6848\u53ef\u80fd\u963b\u6b62\u672a\u7b7e\u540d\u8eab\u4efd\uff1b\u5982\u9700\u5b8c\u6574\u751f\u6548\uff0c\u540e\u7aef\u9700\u8bbe\u7f6e `enforce-secure-profiles=false`\uff08\u98ce\u9669\u81ea\u8d1f\uff09\u3002<br \/>\n&#8211; `forward-sender-uuid` (boolean, default `false`):<br \/>\n  &#8211; Sends messages with the author UUID using Adventure Identity when enabled.<br \/>\n  &#8211; Can improve compatibility with client mods like Chat Heads.<br \/>\n  &#8211; Mojang secure profiles may block unsigned identities; requires `enforce-secure-profiles=false` on backends to fully function (use at your risk).<\/p>\n<p>### `localization.yml`<br \/>\n&#8211; \u5b58\u653e\u901a\u7528\u6d88\u606f\u4e0e\u804a\u5929\u6a21\u677f\u3002<br \/>\n&#8211; \u5360\u4f4d\u7b26\u4ee5 `{key}` \u8868\u793a\uff0c\u5e76\u5728\u8fd0\u884c\u65f6\u66ff\u6362\u3002<br \/>\n&#8211; Horde \u5728\u683c\u5f0f\u5316\u804a\u5929\u65f6\u63d0\u4f9b\u7684\u5185\u7f6e\u5360\u4f4d\u7b26\uff1a<br \/>\n  &#8211; `{server}`\uff1a\u6765\u81ea `SERVER_NAME_MAPPINGS` \u7684\u7f8e\u5316\u670d\u52a1\u5668\u540d\u79f0\u3002<br \/>\n  &#8211; `{player}`\uff1a\u53d1\u9001\u8005\u7528\u6237\u540d\u3002<br \/>\n  &#8211; \u4f60\u5728 `prefix.yml` \u4e2d\u5b9a\u4e49\u7684\u4efb\u610f\u952e\uff08\u89c1\u4e0b\uff09\u4e5f\u53ef\u5728\u6b64\u4f7f\u7528\u3002<br \/>\n&#8211; General messages and chat templates.<br \/>\n&#8211; Placeholders are denoted `{key}` and replaced at runtime.<br \/>\n&#8211; Built-in placeholders provided by Horde when formatting chat:<br \/>\n  &#8211; `{server}`: pretty server name from `SERVER_NAME_MAPPINGS`.<br \/>\n  &#8211; `{player}`: the sender\u2019s username.<br \/>\n  &#8211; Any keys you define in `prefix.yml` (see below) can appear here.<br \/>\n&#8211; \u5173\u952e\u6a21\u677f\u952e\uff1a<br \/>\n  &#8211; `GLOBAL_CHAT_TEMPLATE`\uff1a\u5168\u5c40\u6d88\u606f\u7684\u6a21\u677f\u524d\u7f00\u3002<br \/>\n  &#8211; `LOCAL_CHAT_TEMPLATE`\uff1a\u672c\u5730\u6d88\u606f\u7684\u6a21\u677f\u524d\u7f00\u3002<br \/>\n&#8211; Key templates:<br \/>\n  &#8211; `GLOBAL_CHAT_TEMPLATE`: template prefix for global messages.<br \/>\n  &#8211; `LOCAL_CHAT_TEMPLATE`: template prefix for local messages.<br \/>\n&#8211; \u793a\u4f8b\uff08\u9ed8\u8ba4\uff09\uff1a<br \/>\n  &#8220;`<br \/>\n  GLOBAL_CHAT_TEMPLATE: &#8220;[{server}]{player}:&#8221; # \u6a21\u677f\u540e\u4f1a\u8ffd\u52a0\u6d88\u606f\u5185\u5bb9<br \/>\n  LOCAL_CHAT_TEMPLATE: &#8220;{player}:&#8221;           # \u6a21\u677f\u540e\u4f1a\u8ffd\u52a0\u6d88\u606f\u5185\u5bb9<br \/>\n  &#8220;`<br \/>\n&#8211; Example (default):<br \/>\n  &#8220;`<br \/>\n  GLOBAL_CHAT_TEMPLATE: &#8220;[{server}]{player}:&#8221; # message appended after template<br \/>\n  LOCAL_CHAT_TEMPLATE: &#8220;{player}:&#8221;           # message appended after template<br \/>\n  &#8220;`<br \/>\n&#8211; \u540d\u79f0\u6620\u5c04\uff1a<br \/>\n  &#8220;`yaml<br \/>\n  SERVER_NAME_MAPPINGS:<br \/>\n    lobby: &#8220;<aqua>Lobby<\/aqua>&#8221;<br \/>\n    survival: &#8220;<green>Survival<\/green>&#8221;<br \/>\n  &#8220;`<br \/>\n&#8211; Name mappings:<br \/>\n  &#8220;`yaml<br \/>\n  SERVER_NAME_MAPPINGS:<br \/>\n    lobby: &#8220;<aqua>Lobby<\/aqua>&#8221;<br \/>\n    survival: &#8220;<green>Survival<\/green>&#8221;<br \/>\n  &#8220;`<\/p>\n<p>### `prefix.yml`<br \/>\n&#8211; \u5b9a\u4e49\u4e00\u4e2a\u6216\u591a\u4e2a\u4ee5\u524d\u7f00\u5360\u4f4d\u7b26\u540d\u4e3a\u952e\u7684\u524d\u7f00\u96c6\u5408\u3002<br \/>\n&#8211; \u6bcf\u4e2a\u96c6\u5408\u662f\u6309\u987a\u5e8f\u8fdb\u884c\u7684\u6743\u9650\u68c0\u67e5\uff0c\u9996\u4e2a\u5339\u914d\u7684\u6743\u9650\u51b3\u5b9a\u6240\u7528\u524d\u7f00\u3002<br \/>\n&#8211; Define one or more prefix sets keyed by a placeholder name.<br \/>\n&#8211; Each set is an ordered list of permission checks; the first matching permission wins.<br \/>\n&#8211; \u793a\u4f8b\uff1a<br \/>\n  &#8220;`yaml<br \/>\n  any_permission_prefix_set:<br \/>\n    &#8211; permission: &#8220;horde.prefix.moderator&#8221;<br \/>\n      prefix: &#8220;<red>[MOD]<\/red>&#8221;<br \/>\n    &#8211; permission: &#8220;horde.prefix.member&#8221;<br \/>\n      prefix: &#8220;<gray>[MEMBER]<\/gray>&#8221;<br \/>\n    &#8211; permission: &#8220;horde.prefix.default&#8221;<br \/>\n      prefix: &#8220;<white>[PLAYER]<\/white>&#8221;<br \/>\n  &#8220;`<br \/>\n&#8211; Example:<br \/>\n  &#8220;`yaml<br \/>\n  any_permission_prefix_set:<br \/>\n    &#8211; permission: &#8220;horde.prefix.moderator&#8221;<br \/>\n      prefix: &#8220;<red>[MOD]<\/red>&#8221;<br \/>\n    &#8211; permission: &#8220;horde.prefix.member&#8221;<br \/>\n      prefix: &#8220;<gray>[MEMBER]<\/gray>&#8221;<br \/>\n    &#8211; permission: &#8220;horde.prefix.default&#8221;<br \/>\n      prefix: &#8220;<white>[PLAYER]<\/white>&#8221;<br \/>\n  &#8220;`<br \/>\n&#8211; \u5728 `localization.yml` \u6a21\u677f\u4e2d\u4f7f\u7528 `{any_permission_prefix_set}` \u63d2\u5165\u89e3\u6790\u51fa\u7684\u524d\u7f00\uff08\u65e0\u5339\u914d\u5219\u4e3a\u7a7a\uff09\u3002<br \/>\n&#8211; Use `{any_permission_prefix_set}` in your `localization.yml` templates to insert the resulting prefix (or empty if none matched).<\/p>\n<p>### \u6570\u636e\u6587\u4ef6 | Data file<br \/>\n&#8211; `data\/preferences.yml`\uff1a\u6309 UUID \u5b58\u50a8\u73a9\u5bb6\u9ed8\u8ba4\u804a\u5929\u6a21\u5f0f\uff08\u5168\u5c40\/\u672c\u5730\uff09\uff0c\u7531\u63d2\u4ef6\u81ea\u52a8\u7ba1\u7406\u3002<br \/>\n&#8211; `data\/preferences.yml`: per-player defaults (global vs local) stored by UUID. Automatically managed.<\/p>\n<p>## \u6307\u4ee4 | Commands<br \/>\n&#8211; `\/horde help` \u2014 \u663e\u793a\u5e2e\u52a9\u3002<br \/>\n  &#8211; _Show help._<br \/>\n&#8211; `\/horde reload` \u2014 \u91cd\u8f7d\u914d\u7f6e\u3002\u6743\u9650\uff1a`horde.command.reload`\u3002<br \/>\n  &#8211; _Reload configs. Permission: `horde.command.reload`._<br \/>\n&#8211; `\/broadcast [message\u2026]`\uff08\u522b\u540d\uff1a`\/b`\u3001`\/bc`\uff09<br \/>\n  &#8211; \u5e26\u6d88\u606f\uff1a\u7acb\u5373\u53d1\u9001\u5168\u5c40\u804a\u5929\u3002<br \/>\n  &#8211; \u4e0d\u5e26\u6d88\u606f\uff1a\u5c06\u4f60\u7684\u9ed8\u8ba4\u804a\u5929\u6a21\u5f0f\u8bbe\u4e3a\u201c\u5168\u5c40\u201d\u3002<br \/>\n  &#8211; \u6743\u9650\uff1a`horde.command.broadcast`<br \/>\n  &#8211; _With message: send a global chat message now. Without message: set your default chat mode to Global. Permission: `horde.command.broadcast`._<br \/>\n&#8211; `\/local [message\u2026]`\uff08\u522b\u540d\uff1a`\/l`\u3001`\/lc`\uff09<br \/>\n  &#8211; \u5e26\u6d88\u606f\uff1a\u7acb\u5373\u53d1\u9001\u672c\u5730\uff08\u540c\u670d\uff09\u804a\u5929\u3002<br \/>\n  &#8211; \u4e0d\u5e26\u6d88\u606f\uff1a\u5c06\u4f60\u7684\u9ed8\u8ba4\u804a\u5929\u6a21\u5f0f\u8bbe\u4e3a\u201c\u672c\u5730\u201d\u3002<br \/>\n  &#8211; \u6743\u9650\uff1a`horde.command.local`<br \/>\n  &#8211; _With message: send a local (same-server) chat message now. Without message: set your default chat mode to Local. Permission: `horde.command.local`._<\/p>\n<p>## \u5de5\u4f5c\u539f\u7406 | How chatting works<br \/>\n&#8211; Horde \u76d1\u542c\u73a9\u5bb6\u804a\u5929\u4e8b\u4ef6\u5e76\u66ff\u6362\u539f\u7248\u7684\u804a\u5929\u6295\u9012\u903b\u8f91\u3002<br \/>\n&#8211; \u5982\u679c\u4f60\u7684\u9ed8\u8ba4\u6a21\u5f0f\u662f\u201c\u5168\u5c40\u201d\u4e14\u62e5\u6709 `horde.command.broadcast`\uff0c\u6d88\u606f\u5c06\u4ee3\u7406\u8303\u56f4\u5e7f\u64ad\u3002<br \/>\n&#8211; \u5982\u679c\u4f60\u7684\u9ed8\u8ba4\u6a21\u5f0f\u662f\u201c\u672c\u5730\u201d\u4e14\u62e5\u6709 `horde.command.local`\uff0c\u6d88\u606f\u53ea\u4f1a\u53d1\u9001\u5230\u5f53\u524d\u670d\u52a1\u5668\u7684\u73a9\u5bb6\u3002<br \/>\n&#8211; \u82e5\u6240\u9009\u6a21\u5f0f\u7f3a\u5c11\u5bf9\u5e94\u6743\u9650\uff0cHorde \u4f1a\u62e6\u622a\u6d88\u606f\u5e76\u63d0\u793a\u6ca1\u6709\u6743\u9650\u3002<br \/>\n&#8211; Horde listens to player chat events and replaces vanilla chat delivery.<br \/>\n&#8211; If your default mode is Global and you have `horde.command.broadcast`, your messages broadcast proxy-wide.<br \/>\n&#8211; If your default mode is Local and you have `horde.command.local`, your messages deliver only to your current server.<br \/>\n&#8211; If you lack the needed permission for your selected mode, Horde blocks the message and shows a no-permission notice.<\/p>\n<p>## \u6743\u9650 | Permissions<br \/>\n&#8211; `horde.command.reload`\uff1a\u4f7f\u7528 `\/horde reload`\u3002<br \/>\n  &#8211; _Use `\/horde reload`._<br \/>\n&#8211; `horde.command.broadcast`\uff1a\u4f7f\u7528 `\/broadcast` \u6216\u5728\u9ed8\u8ba4\u5168\u5c40\u6a21\u5f0f\u4e0b\u8fdb\u884c\u5168\u5c40\u804a\u5929\u3002<br \/>\n  &#8211; _Use `\/broadcast` or chat globally when set to global._<br \/>\n&#8211; `horde.command.local`\uff1a\u4f7f\u7528 `\/local` \u6216\u5728\u9ed8\u8ba4\u672c\u5730\u6a21\u5f0f\u4e0b\u8fdb\u884c\u672c\u5730\u804a\u5929\u3002<br \/>\n  &#8211; _Use `\/local` or chat locally when set to local._<br \/>\n&#8211; \u53ef\u5728\u6743\u9650\u63d2\u4ef6\u4e2d\u81ea\u5b9a\u4e49\u6388\u4e88\u7684\u524d\u7f00\u6743\u9650\u793a\u4f8b\uff1a<br \/>\n  &#8211; `horde.prefix.moderator`\u3001`horde.prefix.member`\u3001`horde.prefix.default` \u7b49\uff08\u540d\u79f0\u4e0e\u6743\u9650\u503c\u7531\u4f60\u51b3\u5b9a\uff09\u3002<br \/>\n  &#8211; _Prefix examples you might grant via your permissions plugin: `horde.prefix.moderator`, `horde.prefix.member`, `horde.prefix.default`, etc. (you choose names\/values)._ <\/p>\n<p>## \u683c\u5f0f\u5316\u8bf4\u660e | Formatting notes<br \/>\n&#8211; \u6a21\u677f\/\u672c\u5730\u5316\uff1a\u9ed8\u8ba4\u4f7f\u7528 MiniMessage\uff1b\u5c06 `enable-legacy-localization-formatting: true` \u53ef\u5207\u6362\u4e3a Legacy (\u00a7)\u3002<br \/>\n&#8211; Templates\/localizations: MiniMessage by default; set `enable-legacy-localization-formatting: true` to switch to Legacy (\u00a7).<br \/>\n&#8211; \u73a9\u5bb6\u539f\u59cb\u6d88\u606f\uff1a`enable-legacy-chat-formatting: true` \u5141\u8bb8\u4f7f\u7528 `&#038;` \u989c\u8272\u7801\uff1b\u5426\u5219\u6309 MiniMessage \u89e3\u6790\u3002<br \/>\n&#8211; Raw player message: `enable-legacy-chat-formatting: true` lets players use `&#038;` codes; otherwise raw content is MiniMessage.<br \/>\n&#8211; \u907f\u514d\u91cd\u590d\u7740\u8272\uff1a\u9664\u975e\u786e\u6709\u9700\u8981\uff0c\u4e0d\u8981\u5728\u6a21\u677f\u4e0e\u540d\u79f0\u6620\u5c04\/\u524d\u7f00\u4e2d\u540c\u65f6\u6dfb\u52a0\u989c\u8272\u4ee3\u7801\u3002<br \/>\n&#8211; Avoid double-formatting: don\u2019t add color codes both in templates and in the mapped names\/prefixes unless intended.<\/p>\n<p>## \u4ece\u6e90\u7801\u6784\u5efa | Build From Source<br \/>\n\u9700\u8981 JDK 21 \u4e0e Maven\u3002<br \/>\nRequires JDK 21 and Maven.<\/p>\n<p>&#8220;`powershell<br \/>\n# \u5728\u9879\u76ee\u6839\u76ee\u5f55\u6267\u884c \/ From the project root<br \/>\nmvn -V -B clean package<br \/>\n&#8220;`<\/p>\n<p>&#8211; \u6784\u5efa\u4ea7\u7269 JAR \u4f4d\u4e8e `target\/`\u3002<br \/>\n&#8211; \u5c06\u5176\u590d\u5236\u5230\u4f60\u7684 Velocity \u4ee3\u7406\u7684 `plugins\/` \u76ee\u5f55\u5e76\u542f\u52a8\u670d\u52a1\u5668\u3002<br \/>\n&#8211; The built JAR will be in `target\/`.<br \/>\n&#8211; Copy it into `plugins\/` on your Velocity proxy and start the server.<\/p>\n<p>## \u517c\u5bb9\u6027 | Compatibility<br \/>\n&#8211; Velocity API\uff1a\u4f7f\u7528 Velocity 3.x \u7684 `PlayerChatEvent` \u4e0e\u6307\u4ee4 API\u3002<br \/>\n&#8211; Velocity API: uses `PlayerChatEvent` and command APIs from Velocity 3.x.<br \/>\n&#8211; \u8eab\u4efd\u8f6c\u53d1\uff1a\u5728\u5b89\u5168\u6863\u6848\u573a\u666f\u4e0b\u88ab Velocity \u6807\u8bb0\u4e3a\u4e0d\u63a8\u8350\uff1b\u8bf7\u8c28\u614e\u4f7f\u7528 `forward-sender-uuid`\u3002<br \/>\n&#8211; Identity forwarding: marked deprecated by Velocity for secure profiles; toggle `forward-sender-uuid` with care.<\/p>\n<p>## \u8bb8\u53ef\u8bc1 | License<br \/>\nMIT \u8bb8\u53ef\u8bc1 \u2014\u2014 \u89c1 `LICENSE`\u3002<br \/>\nMIT License \u2014 see `LICENSE`.<\/p>\n<p>&#8212;<br \/>\n\u9700\u8981\u5e2e\u52a9\u6216\u6709\u5efa\u8bae\uff1f\u6b22\u8fce\u63d0\u4ea4 Issue \u6216 PR\u3002\u795d\u4f60\u804a\u5929\u6109\u5feb\uff01<br \/>\nNeed help or have suggestions? Open an issue or PR. Enjoy the chat!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A lightweight, zero-fuss chat plugin for Velocity. Horde provides global and local chat with clean, configurable templates, permission-based prefixes, and minimal moving parts.<\/p>\n","protected":false},"featured_media":81895,"template":"","meta":{"_minecraft_slug":"hordechat","_minecraft_project_id":"OR9VQG2L","_minecraft_author":"kpAjun","_minecraft_license":"MIT","_minecraft_downloads":46,"_minecraft_follows":4,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"hordechat.zip","_minecraft_size_bytes":21562,"_minecraft_version_count":1,"_minecraft_updated_at":"2026-05-15T21:20:26.917586Z","_minecraft_date_created":"2025-09-16T11:16:34.142965Z","_minecraft_date_modified":"2025-09-15T12:28:06.211235Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/hordechat","_minecraft_icon_attachment_id":81895,"_minecraft_imported_at":"2026-06-04T16:55:20+00:00","_minecraft_import_hash":"f2d21f3e486205b21ee3e39132ddc956","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[867,92,985],"mod_loader":[986],"minecraft_version":[59,36,60,93,94,101,102,62,37,73,74,38,78,79,80,81,82],"class_list":["post-81894","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-social","mod_category-utility","mod_category-velocity","mod_loader-velocity","minecraft_version-1-20","minecraft_version-1-20-1","minecraft_version-1-20-2","minecraft_version-1-20-3","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-6","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Horde Chat - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Horde Chat - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A lightweight, zero-fuss chat plugin for Velocity. Horde provides global and local chat with clean, configurable templates, permission-based prefixes, and minimal moving parts.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/\",\"name\":\"Horde Chat - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/hordechat-icon-787cbfdf6c29c3b6ceb93c90a284ba8763ae312c_96.webp\",\"datePublished\":\"2026-06-04T16:55:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/hordechat-icon-787cbfdf6c29c3b6ceb93c90a284ba8763ae312c_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/hordechat-icon-787cbfdf6c29c3b6ceb93c90a284ba8763ae312c_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/hordechat\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Horde Chat\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Horde Chat - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/","og_locale":"en_US","og_type":"article","og_title":"Horde Chat - Minecraft","og_description":"A lightweight, zero-fuss chat plugin for Velocity. Horde provides global and local chat with clean, configurable templates, permission-based prefixes, and minimal moving parts.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/","name":"Horde Chat - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/hordechat-icon-787cbfdf6c29c3b6ceb93c90a284ba8763ae312c_96.webp","datePublished":"2026-06-04T16:55:18+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/hordechat-icon-787cbfdf6c29c3b6ceb93c90a284ba8763ae312c_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/hordechat-icon-787cbfdf6c29c3b6ceb93c90a284ba8763ae312c_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/hordechat\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"Horde Chat"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/81894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/81895"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=81894"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=81894"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=81894"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=81894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}