Languages
The plugin ships with 18 complete translations. By default it picks one based on the server's region; you can also pin it.
Supported languages
| Code | Language | Code | Language |
|---|---|---|---|
en_us | English (default) | it_it | Italiano |
zh_cn | 简体中文 | pt_pt | Português |
zh_tw | 繁體中文 | ru_ru | Русский |
ja_jp | 日本語 | nl_nl | Nederlands |
ko_kr | 한국어 | pl_pl | Polski |
fr_fr | Français | sv_se | Svenska |
de_de | Deutsch | tr_tr | Türkçe |
es_es | Español | ar_sa | العربية |
hi_in | हिन्दी | th_th | ไทย |
Legacy codes still work
Earlier versions used two-letter codes. They are converted automatically, so existing configs do not need to change:
| Old | Becomes | Old | Becomes | Old | Becomes |
|---|---|---|---|---|---|
zh | zh_cn | de | de_de | sv | sv_se |
zht | zh_tw | es | es_es | tr | tr_tr |
en | en_us | it | it_it | ar | ar_sa |
ja | ja_jp | pt | pt_pt | hi | hi_in |
ko | ko_kr | ru | ru_ru | th | th_th |
fr | fr_fr | nl | nl_nl |
If you edited languages/zh.yml in the past, it is renamed to zh_cn.yml on startup — your changes are kept.
Auto detection
With language: auto the plugin looks up the country of the server's public IP during enable, then maps it to a language.
- Six public GeoIP endpoints are queried in parallel; the first valid answer wins, so one dead or rate-limited API cannot break detection;
- 3 s connect and 3 s read timeouts, 6 s total, then it gives up;
- If everything fails it falls back to
en_usand logs[GeoIP] All region APIs failed; - After the lookup it hops back onto the main thread (the global region thread on Folia) before touching any Bukkit state.
Country to language
| Language | Country codes |
|---|---|
zh_cn | CN, MO |
zh_tw | HK, TW |
ja_jp | JP |
ko_kr | KR |
fr_fr | FR, BE, CH, LU, MC, CA |
de_de | DE, AT, LI |
es_es | ES, MX, AR, CO, CL, PE, VE |
it_it | IT, SM |
pt_pt | PT, BR |
ru_ru | RU, BY, KZ, KG, UA |
ar_sa | SA, AE, EG, DZ, MA |
hi_in | IN |
tr_tr | TR |
nl_nl | NL |
pl_pl | PL |
sv_se | SE |
th_th | TH |
en_us | every other country |
Auto-detection needs outbound internet access. LAN-only servers, hosts that block foreign requests, and fully offline setups all fail and land on English. For those, set language: en_us (or your language) explicitly instead of auto.
With debug: true the log shows the resolved result:
[GeoIP] CN → 简体中文 (zh_cn)
Custom language files
Files live in plugins/CreeperConfettiPro/languages/ and are plain YAML. Edit the text and run /cc language reload.
command:
no_permission: "&cYou do not have permission to use this command!"
reload_success: "&aConfiguration reloaded!"
help:
header: "&6&l=== CreeperConfettiPro help ==="
effect:
list_header: "&6=== Firework styles (&e{0}&6) ==="
chance_set: "&aStyle '&e{0}&a is now &f{1}%&a."
| Rule | Details |
|---|---|
| Placeholders | {0}, {1}… are filled by the plugin; order matters, repetition is fine |
| Missing keys | Fall back to the en_us text, so you can translate only what you care about |
| Overwrite policy | Files are only written when missing; your edits are never replaced |
| Reset | Delete the file and restart to regenerate the original |
| Console messages | The console.* strings are built into the jar and cannot be changed via language files |
Key groups: command.* generic messages, help.* the help screen, effect.* style operations, chance.* chances, language.* language management, gui.* interface text.
Want a brand new language? Copy en_us.yml to xx_yy.yml and translate. Note that only the 18 built-in codes are loaded — a new code has to be added to SUPPORTED_LANGUAGES in the source.
Colour codes
Use & for colours (same as § in game). & needs no escaping in YAML, but in XML/HTML it has to be written as &.
| Code | Colour | Code | Colour | Code | Style |
|---|---|---|---|---|---|
&0 | Black | &9 | Blue | &l | Bold |
&1 | Dark blue | &a | Green | &o | Italic |
&2 | Dark green | &b | Aqua | &n | Underline |
&3 | Dark aqua | &c | Red | &m | Strikethrough |
&4 | Dark red | &d | Light purple | &k | Obfuscated |
&5 | Dark purple | &e | Yellow | &r | Reset |
&6 | Gold | &f | White | ||
&7 | Gray | &8 | Dark gray |
These codes are converted to ANSI colours in the console, so the startup banner is coloured in a Linux terminal too.