ProfanityFilter filters configured profanity in PocketMine-MP chat and command messages. It can block a message, hide matched words, and apply a moderation action after repeated violations.
- Block a message or replace matched words with a configured character.
- Use the bundled profanity list or maintain a server-specific list.
- Manage custom words from the
/profanityfiltercommand or its/pfalias. - Open a PMForms management UI in-game.
- Count violations and kick, ban, or run a configured command at the limit.
- Configure command and bypass permissions.
- Use the English or Vietnamese language resources, or provide a custom locale.
- Keep the bundled word list immutable while allowing custom words in plugin data.
| Requirement | Supported scope |
|---|---|
| PocketMine-MP or Axolotl-PM | API 5.36.0 or newer within the API 5 line |
| PHP | 8.4 in the build workflow |
| Runtime dependency | The PHAR contains the required dependencies |
The repository build pins Axolotl-PM 5.51.1 for analysis and packaging. A
passing build does not certify every API 5 server revision or every Bedrock
client version.
- Download
ProfanityFilter.pharfrom GitHub Releases or the Poggit project page. - Copy the PHAR to the server's
plugins/directory. - Start the server once so it creates the data files.
- Edit
plugin_data/ProfanityFilter/config.ymlandplugin_data/ProfanityFilter/profanity.yml. - Restart the server after changing configuration.
The plugin has no mandatory external runtime plugin. Its PHAR includes the dependencies required by the active code path.
Set type in config.yml to one of these values:
| Mode | Behavior |
|---|---|
block |
Cancel the message and send block-message to the player |
hide |
Replace each matched word with replacementCharacter and keep the message flow |
Set profanity to custom to use the editable list in
plugin_data/ProfanityFilter/profanity.yml. Set it to provided to use the
bundled list. Custom words are managed by the plugin and can also be edited
manually while the server is stopped.
Matching is case-insensitive and can find a configured word inside a longer word. The filter processes outgoing chat and command-related text after other plugins may already have changed it. It cannot restore text removed by an earlier plugin.
The command permission is configurable through command-permission and is
profanityfilter.command by default. The bypass permission is configurable
through bypass-permission and is profanityfilter.bypass by default.
| Command | Purpose |
|---|---|
/profanityfilter help |
Show the localized command help |
/profanityfilter ui |
Open the management form in-game |
/profanityfilter info |
Show credits and plugin information |
/profanityfilter list |
List words from the active custom list |
/profanityfilter add <word> |
Add a word to the custom list |
/profanityfilter remove <word> |
Remove a word from the custom list |
/profanityfilter toggle |
Enable or disable filtering until reload |
/profanityfilter reload |
Reload plugin configuration and word data |
/pf <subcommand> |
Alias for /profanityfilter |
The UI subcommand is available only to a player. Console operators can use the command subcommands that do not require a player form.
The main settings in plugin_data/ProfanityFilter/config.yml are:
| Key | Purpose |
|---|---|
type |
Select block or hide |
replacementCharacter |
Character used by hide mode |
block-message |
Message sent when a message is blocked |
lang |
Select eng, vie, or custom |
punishment-type |
Select kick, ban, or command |
max-violations |
Violation count needed for moderation |
ban-duration |
Duration used by native ban handling |
execute-as-player |
Run the custom punishment command as the player when true |
command |
Command used when punishment-type is command |
command-permission |
Permission for the management command |
bypass-permission |
Permission that skips filtering |
profanity |
Select custom or provided |
check-updates |
Enable or disable update checks |
The config-version value is managed by the plugin. Do not edit it manually.
When the default configuration changes, the loader keeps the old file and
creates the current resource version.
The repository includes English and Vietnamese resources. To add a custom
language, set lang: custom and create a language file in
plugin_data/ProfanityFilter/languages/. Use an ISO 639-2 code when adding a
language that may be contributed back to the project.
The stable branch workflow runs PHP linting through the build tools, PHPStan
at maximum level, the regression test, a PHAR build, and a packaged UI check.
The build also creates the Poggit package on pushes to stable.
Local checks use the locked dependencies:
composer install
composer analyze
composer test
composer buildThe packaged UI test is separate from a live Bedrock client test. A green source or PHAR check does not prove that every client version renders a label or form the same way.
See LICENSE for the repository's LGPL license text. The project credits ReinfyTeam, NhanAZ and the other listed contributors in the source history. Report bugs through GitHub Issues and include the server version, plugin version and relevant logs.