diff --git a/.github/workflows/check-translations.yml b/.github/workflows/check-translations.yml new file mode 100644 index 00000000..a68d7b93 --- /dev/null +++ b/.github/workflows/check-translations.yml @@ -0,0 +1,171 @@ +name: Check Translations + +on: + pull_request: + paths: + - 'src/main/resources/Server/Languages/**' + +jobs: + check-lang-keys: + name: Verify .lang keys + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Check for missing translation keys + run: | + LANG_DIR="src/main/resources/Server/Languages" + EN_DIR="$LANG_DIR/en-US" + EXIT_CODE=0 + TOTAL_MISSING=0 + + if [ ! -d "$EN_DIR" ]; then + echo "::error::No en-US directory found at $EN_DIR" + exit 1 + fi + + # Collect en-US keys per file + for en_file in "$EN_DIR"/*.lang; do + [ -f "$en_file" ] || continue + filename=$(basename "$en_file") + + # Extract keys (non-blank, non-comment lines before '=') + en_keys=$(grep -v '^\s*#' "$en_file" | grep -v '^\s*$' | sed 's/=.*//' | sed 's/\s*$//' | sort) + en_count=$(echo "$en_keys" | wc -l) + + # Check each locale + for locale_dir in "$LANG_DIR"/*/; do + locale=$(basename "$locale_dir") + [ "$locale" = "en-US" ] && continue + + locale_file="$locale_dir/$filename" + + if [ ! -f "$locale_file" ]; then + echo "::error file=$locale_file::[$locale] MISSING FILE: $filename ($en_count keys)" + TOTAL_MISSING=$((TOTAL_MISSING + en_count)) + EXIT_CODE=1 + continue + fi + + # Extract locale keys + locale_keys=$(grep -v '^\s*#' "$locale_file" | grep -v '^\s*$' | sed 's/=.*//' | sed 's/\s*$//' | sort) + + # Find missing keys + missing=$(comm -23 <(echo "$en_keys") <(echo "$locale_keys")) + + if [ -n "$missing" ]; then + count=$(echo "$missing" | wc -l) + echo "::warning file=$locale_file::[$locale] $filename: $count missing key(s)" + echo "$missing" | while read -r key; do + echo " - $key" + done + TOTAL_MISSING=$((TOTAL_MISSING + count)) + EXIT_CODE=1 + fi + + # Find extra keys (in locale but not in en-US) + extra=$(comm -13 <(echo "$en_keys") <(echo "$locale_keys")) + if [ -n "$extra" ]; then + extra_count=$(echo "$extra" | wc -l) + echo "::notice file=$locale_file::[$locale] $filename: $extra_count extra key(s) not in en-US" + fi + done + done + + echo "" + if [ $TOTAL_MISSING -gt 0 ]; then + echo "::error::Total missing keys across all locales: $TOTAL_MISSING" + else + echo "All locales have complete .lang key coverage." + fi + + exit $EXIT_CODE + + check-help-files: + name: Verify help files + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Check for missing help files + run: | + LANG_DIR="src/main/resources/Server/Languages" + EN_HELP="$LANG_DIR/en-US/help" + EXIT_CODE=0 + TOTAL_MISSING=0 + + if [ ! -d "$EN_HELP" ]; then + echo "::error::No en-US/help directory found at $EN_HELP" + exit 1 + fi + + # Collect all en-US help file relative paths + en_files=$(cd "$EN_HELP" && find . -name "*.md" -type f | sort) + en_count=$(echo "$en_files" | wc -l) + echo "Found $en_count help files in en-US" + + # Check each locale + for locale_dir in "$LANG_DIR"/*/; do + locale=$(basename "$locale_dir") + [ "$locale" = "en-US" ] && continue + + locale_help="$locale_dir/help" + + if [ ! -d "$locale_help" ]; then + echo "::error file=$locale_help::[$locale] MISSING help/ directory ($en_count files)" + TOTAL_MISSING=$((TOTAL_MISSING + en_count)) + EXIT_CODE=1 + continue + fi + + # Check each en-US help file exists in locale + missing_files="" + missing_count=0 + while IFS= read -r relpath; do + locale_file="$locale_help/$relpath" + if [ ! -f "$locale_file" ]; then + missing_files="$missing_files - $relpath"$'\n' + missing_count=$((missing_count + 1)) + fi + done <<< "$en_files" + + if [ $missing_count -gt 0 ]; then + echo "::error file=$locale_help::[$locale] $missing_count missing help file(s)" + echo "$missing_files" + TOTAL_MISSING=$((TOTAL_MISSING + missing_count)) + EXIT_CODE=1 + fi + + # Check for untranslated files (identical to en-US) + untranslated=0 + while IFS= read -r relpath; do + locale_file="$locale_help/$relpath" + en_file="$EN_HELP/$relpath" + if [ -f "$locale_file" ] && cmp -s "$en_file" "$locale_file"; then + untranslated=$((untranslated + 1)) + fi + done <<< "$en_files" + + if [ $untranslated -gt 0 ]; then + echo "::warning file=$locale_help::[$locale] $untranslated help file(s) identical to en-US (possibly untranslated)" + fi + + # Check for extra files not in en-US + if [ -d "$locale_help" ]; then + locale_files=$(cd "$locale_help" && find . -name "*.md" -type f | sort) + extra=$(comm -13 <(echo "$en_files") <(echo "$locale_files")) + if [ -n "$extra" ]; then + extra_count=$(echo "$extra" | wc -l) + echo "::notice file=$locale_help::[$locale] $extra_count extra help file(s) not in en-US" + fi + fi + done + + echo "" + if [ $TOTAL_MISSING -gt 0 ]; then + echo "::error::Total missing help files across all locales: $TOTAL_MISSING" + else + echo "All locales have complete help file coverage." + fi + + exit $EXIT_CODE diff --git a/.gitignore b/.gitignore index 7d74e39a..af0c00dc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .gradle/ build/ !gradle/wrapper/gradle-wrapper.jar +!src/main/java/com/hyperfactions/build/ # IDE .idea/ diff --git a/build.gradle b/build.gradle index 88d9feb0..98289c94 100644 --- a/build.gradle +++ b/build.gradle @@ -128,6 +128,85 @@ public final class BuildInfo { } } +// Generate help .lang files from markdown sources +tasks.register('generateHelpLang', JavaExec) { + group = 'build' + description = 'Generate help .lang files from markdown sources' + dependsOn 'compileJava' + classpath = sourceSets.main.compileClasspath + files(sourceSets.main.java.classesDirectory) + mainClass = 'com.hyperfactions.build.HelpLangGenerator' + args = [ + file('src/main/resources/Server/Languages').absolutePath, + layout.buildDirectory.dir('generated/resources').get().asFile.absolutePath + ] + inputs.dir(file('src/main/resources/Server/Languages')) + outputs.dir(layout.buildDirectory.dir('generated/resources')) +} + +sourceSets.main.resources.srcDir(layout.buildDirectory.dir('generated/resources')) + +// Check translations: compare keys in en-US against other locales +tasks.register('checkTranslations') { + group = 'verification' + description = 'Report missing translation keys compared to en-US' + doLast { + def langDir = file('src/main/resources/Server/Languages') + def enDir = new File(langDir, 'en-US') + if (!enDir.exists()) { + println "No en-US directory found at ${enDir.absolutePath}" + return + } + // Collect en-US keys per file + def enKeys = [:] + enDir.listFiles({ f -> f.name.endsWith('.lang') } as FileFilter).each { f -> + def keys = [] + f.eachLine { line -> + line = line.trim() + if (line && !line.startsWith('#') && line.contains('=')) { + keys << line.substring(0, line.indexOf('=')).trim() + } + } + enKeys[f.name] = keys + } + // Check each locale + def locales = langDir.listFiles({ f -> f.isDirectory() && f.name != 'en-US' } as FileFilter) + if (!locales) { + println "No non-English locales found." + return + } + def totalMissing = 0 + locales.sort { it.name }.each { localeDir -> + def localeMissing = 0 + enKeys.each { fileName, keys -> + def localeFile = new File(localeDir, fileName) + if (!localeFile.exists()) { + println "[${localeDir.name}] MISSING FILE: ${fileName} (${keys.size()} keys)" + localeMissing += keys.size() + return + } + def localeKeys = [] + localeFile.eachLine { line -> + line = line.trim() + if (line && !line.startsWith('#') && line.contains('=')) { + localeKeys << line.substring(0, line.indexOf('=')).trim() + } + } + def missing = keys.findAll { !localeKeys.contains(it) } + if (missing) { + println "[${localeDir.name}] ${fileName}: ${missing.size()} missing keys" + missing.each { println " - ${it}" } + localeMissing += missing.size() + } + } + if (localeMissing == 0) { + println "[${localeDir.name}] All keys present" + } + totalMissing += localeMissing + } + println "\nTotal missing keys across all locales: ${totalMissing}" + } +} + // Expand version placeholder in manifest.json processResources { def ver = buildVersion @@ -192,6 +271,11 @@ javadoc { failOnError = false } +// Ensure help lang files are generated before processResources copies them +tasks.named('processResources') { + dependsOn 'generateHelpLang' +} + // Ensure build info is generated and HyperPerms shadowJar is built before compiling tasks.named('compileJava') { dependsOn 'generateBuildInfo' diff --git a/docs/help-markdown.md b/docs/help-markdown.md new file mode 100644 index 00000000..b9cb177c --- /dev/null +++ b/docs/help-markdown.md @@ -0,0 +1,188 @@ +# Help Markdown Style Guide + +Reference for content authors writing HyperFactions help topics. + +Help files are located at `src/main/resources/Server/Languages/{locale}/help/{category}/{topic}.md` and compiled into `.lang` files and `help-manifest.json` at build time by `HelpLangGenerator`. + +## Frontmatter + +Every topic file starts with YAML frontmatter: + +```markdown +--- +id: welcome_started +commands: gui, menu, create +--- +``` + +- `id` — Unique topic identifier (optional, defaults to `{category}_{filename}`) +- `commands` — Comma-separated list of command names that deep-link to this topic + +## Syntax Reference + +### Basic Entry Types + +| Syntax | Type | Default Color | Style | +|---|---|---|---| +| Plain text | TEXT | #CCCCCC | normal | +| `## Heading` | HEADING | #00AAAA | bold | +| `` `command` `` | COMMAND | #FFFF55 | bold | +| Blank line | SPACER | — | — | + +### Text Formatting + +| Syntax | Type | Style | +|---|---|---| +| `**bold text**` | BOLD | #CCCCCC, bold | +| `*italic text*` | ITALIC | #CCCCCC, italic | + +Bold and italic are **whole-line only**. You cannot mix bold/italic within a line (`some **bold** here` does NOT work — the entire line must be wrapped). + +### Lists + +| Syntax | Rendering | +|---|---| +| `- item text` | Bullet list item (indented, with bullet prefix) | +| `1. item text` | Numbered list item (indented, number preserved in text) | + +List items are indented 12px from normal text. Bullet items get a `•` prefix automatically. Numbered items keep the `1.` prefix as written. + +### Separators + +```markdown +--- +``` + +Three or more dashes on a line (outside frontmatter) render as a visible horizontal rule — a thin line at `#2a3a4a`. + +### Inline Colors + +#### Hex Colors + +```markdown +[#FF5555] This text appears in red +[#55AAFF] This text appears in blue +``` + +Any `[#RRGGBB]` prefix sets the text color. Uses the TEXT template. + +#### Named Shortcuts + +| Syntax | Color | Use Case | +|---|---|---| +| `!warning text` | #FF5555 (red) | Warnings, errors | +| `!success text` | #55FF55 (green) | Success messages | +| `!note text` | #55AAFF (blue) | Informational notes | +| `!muted text` | #888888 (gray) | De-emphasized text | + +Named shortcuts are syntactic sugar for `[#hex]` colors. Uses the TEXT template. + +### Callout Boxes + +Callouts render as boxed text with a colored left accent bar and tinted background. + +#### Simple Callout (Tip) + +```markdown +> This renders as a green tip callout +``` + +`>` (blockquote) is shorthand for `>[!TIP]`. + +#### Typed Callouts + +| Syntax | Color | Use Case | +|---|---|---| +| `>[!TIP] text` | #55FF55 (green) | Tips and advice | +| `>[!WARNING] text` | #FF5555 (red) | Dangers, cautions | +| `>[!INFO] text` | #55AAFF (blue) | Supplementary info | +| `>[!NOTE] text` | #FFAA55 (orange) | Important notes | +| `>[!SUCCESS] text` | #55FF55 (green) | Confirmation messages | + +The type tag (`[!WARNING]`, etc.) controls the accent bar and text color. + +### Tables + +Tables use standard markdown pipe syntax: + +```markdown +| Level | Members | Daily Upkeep | +|-------|---------|--------------| +| 1 | 1-5 | 0 | +| 2 | 6-10 | 5 | +| 3 | 11-20 | 15 | +``` + +- The first row is the **header** (bold, teal `#00AAAA`) — it must be followed by a separator row (`|---|---|---|`) +- The separator row is consumed by the parser and not rendered +- Subsequent `|` rows are **data rows** (normal text, `#CCCCCC`) +- Columns are laid out horizontally using `LayoutMode: Left` +- Each cell is individually localized (e.g., `line.5.col.0`, `line.5.col.1`) + +Tables are ideal for reference data like upkeep scales, permission lists, or config examples. + +## Example Topic + +```markdown +--- +id: power_claiming +commands: claim, unclaim, autoclaim +--- +# Claiming Territory + +## How Claims Work + +Each chunk you claim costs 1 power. Your faction can claim +as many chunks as it has power. + +`/f claim` +`/f unclaim` + +- Stand in the chunk you want to claim +- Your faction must have enough power +- You cannot claim next to enemy territory + +## Auto-Claim Mode + +**Auto-claim claims every chunk you walk into.** + +`/f autoclaim` + +> Toggle auto-claim off when you're done! + +>[!WARNING] Don't wander into enemy territory with auto-claim on! + +--- + +## Power Costs + +| Chunks | Power Cost | +|--------|------------| +| 1-10 | 1 per chunk | +| 11-25 | 2 per chunk | +| 26+ | 3 per chunk | + +## Losing Claims + +!warning Territory can be overclaimed if your power drops below your claim count. + +*Keep your power above your claim count to stay safe.* +``` + +## Formatting Limitations + +1. **Whole-line only** — Bold, italic, commands, callouts, and colors apply to entire lines. No inline mixing (e.g., `some **bold** here` won't work). +2. **No underline** — Hytale Labels have no underline property. +3. **No nested formatting** — Cannot combine bold + color on the same line through markdown syntax. Colors override the template default; bold/italic are separate templates. +4. **Single-level lists** — No nested/indented sub-lists. + +## Line Length + +The help content area is approximately 450px wide. Text that exceeds this width wraps naturally. For readability: +- Keep text lines under ~70 characters +- Long commands may wrap — test visually +- Callout boxes have slightly less width (padding + accent bar) + +## Testing + +Use `/f admin test md` in-game to open the markdown rendering test page, which shows every supported entry type rendered with the real templates. diff --git a/docs/translation-guide.md b/docs/translation-guide.md new file mode 100644 index 00000000..9697ae96 --- /dev/null +++ b/docs/translation-guide.md @@ -0,0 +1,212 @@ +# HyperFactions Translation Guide + +This guide explains how to contribute translations for HyperFactions. + +## Quick Start + +1. Run the scaffolding script to create a new locale: + ```bash + ./scripts/new-translation.sh fr-FR # Linux/Mac + scripts\new-translation.bat fr-FR # Windows + ``` + +2. Edit the `.lang` files in `src/main/resources/Server/Languages//` +3. Edit the help markdown files in `src/main/resources/Server/Languages//help/` +4. Build to verify: `./gradlew :HyperFactions:shadowJar` +5. Submit a pull request + +## Supported Locales + +| Code | Language | Status | +|--------|-----------------------|---------------| +| en-US | English (US) | Complete | +| es-ES | Spanish (Spain) | Complete | +| de-DE | German | Untranslated | +| fr-FR | French | Untranslated | +| ja-JP | Japanese | Untranslated | +| pt-BR | Brazilian Portuguese | Untranslated | +| ru-RU | Russian | Untranslated | +| tr-TR | Turkish | Untranslated | +| zh-CN | Simplified Chinese | Untranslated | + +## File Structure + +### .lang Files (Commands, GUI, Admin) + +Located at `src/main/resources/Server/Languages//`: + +| File | Content | Key Count | +|----------------------------|----------------------------------|-----------| +| `hyperfactions.lang` | Commands, errors, common strings | ~450 | +| `hyperfactions_gui.lang` | GUI labels, buttons, nav | ~440 | +| `hyperfactions_admin.lang` | Admin GUI strings | ~260 | + +### .lang File Format + +```properties +# Section comments start with # +key.name = Translated value here +key.with.placeholder = Hello {0}, you have {1} power +``` + +**Rules:** +- Keys are on the left side of `=` — **never modify keys** +- Values are on the right side — translate these +- `{0}`, `{1}`, etc. are placeholders — keep them in the translation +- Lines starting with `#` are comments — translate for context but not required +- Blank lines are ignored +- Backslash `\` at end of line continues to next line + +### Help Markdown Files + +Located at `src/main/resources/Server/Languages//help//.md`. + +Each file has YAML frontmatter and markdown content. See [docs/help-markdown.md](help-markdown.md) for the full syntax reference. + +## What to Translate vs. What to Keep + +### Markdown Syntax → Entry Type Mapping + +| Markdown Syntax | Entry Type | Translate? | +|---|---|---| +| `# Heading` | Topic title | Yes | +| `## Subheading` | HEADING | Yes | +| Plain text line | TEXT | Yes | +| Blank line | SPACER | Keep as-is | +| `` `command text` `` | COMMAND | **No** — command syntax stays in English | +| `**bold text**` | BOLD | Yes | +| `*italic text*` | ITALIC | Yes | +| `- list item` | LIST | Yes | +| `1. numbered item` | LIST | Yes (translate text, keep number) | +| `---` | SEPARATOR | Keep as-is | +| `> tip text` | CALLOUT | Yes | +| `>[!TYPE] text` | CALLOUT | Yes (translate text only) | +| `[#RRGGBB] text` | TEXT (colored) | Yes (translate text only) | +| `!warning text` | TEXT (colored) | Yes (translate text only) | +| `\| col \| col \|` header row | TABLE_HEADER | Yes (translate column labels) | +| `\| val \| val \|` data row | TABLE_ROW | Yes (translate cell values) | +| `\|---\|---\|` separator | — (consumed) | Keep as-is | + +### Do NOT Translate + +These are syntax markers or identifiers — keep them exactly as written: + +- **Frontmatter**: `id:` and `commands:` values +- **Command syntax**: `/f create `, `/f claim`, etc. +- **Color codes**: `[#FF5555]`, `[#55AAFF]`, etc. +- **Named color keywords**: `!warning`, `!success`, `!note`, `!muted` +- **Callout type tags**: `>[!WARNING]`, `>[!TIP]`, `>[!INFO]`, `>[!NOTE]`, `>[!SUCCESS]` +- **Separator syntax**: `---` +- **Table separators**: `|---|---|---|` (the row between header and data) +- **Table pipe syntax**: `|` characters (keep the pipe structure intact) + +### Do Translate + +- Topic titles (`# Getting Started`) +- Heading text after `## ` +- Plain text lines +- Text content in bold (`**text here**`) and italic (`*text here*`) +- List item text (after `- ` or `1. `) +- Callout text (after `> ` or `>[!TYPE] `) +- Colored text (after `[#RRGGBB] ` or `!warning `) +- Table header labels and data cell values (between `|` pipes) + +**Example:** + +```markdown +# Getting Started ← Translate: "Primeros Pasos" +## How Claims Work ← Translate: "Como Funcionan los Reclamos" +`/f claim` ← Do NOT translate +- Stand in the chunk ← Translate: "- Parate en el chunk" +>[!WARNING] Don't wander off! ← Translate: ">[!WARNING] No te alejes!" +!note Power regenerates ← Translate: "!note El poder se regenera" +[#FF5555] Important info ← Translate: "[#FF5555] Informacion importante" +``` + +## Translation Tips + +### Character Limits + +GUI labels have limited space. Keep translations concise: + +| Element Type | Max Length (approx) | +|------------------|---------------------| +| Nav bar buttons | 12 characters | +| Button labels | 20 characters | +| Section titles | 30 characters | +| Descriptions | 60 characters | +| Chat messages | No limit | +| Help content | No limit | + +If a translation is too long, it may overflow or be truncated in the UI. + +### Gaming Terminology + +Use commonly understood gaming terms in your language. Some terms are typically kept in English across all languages: + +- **PvP** (Player vs Player) +- **PvE** (Player vs Environment) +- **NPC** (Non-Player Character) +- **K/D** (Kill/Death ratio) +- **UUID** +- **chunk** (a 16x16 block area) + +Brand names should not be translated: +- **HyperFactions** +- **HyperPerms** +- **OrbisGuard** +- **HyperProtect** + +### Placeholder Values + +Placeholders like `{0}`, `{1}` are replaced at runtime with dynamic values. The order matters — `{0}` is always the first argument, `{1}` the second, etc. + +Common placeholder meanings (by context): +- `{0}` in faction messages: usually faction name or player name +- `{0}` in error messages: usually the specific value that failed +- `{0}`, `{1}` in range messages: min and max values + +### Consistency + +Use consistent terminology throughout your translation: +- Pick one word for "faction" and use it everywhere +- Pick one word for "claim/territory" and use it consistently +- Role names should be consistent (Leader, Officer, Member, Recruit) + +## Checking Your Translation + +### Build and Test + +```bash +# Build (generates help .lang from markdown + compiles) +./gradlew :HyperFactions:shadowJar + +# Deploy to dev server +./gradlew buildAndDeploy + +# In-game: change your client language to test +``` + +### Check for Missing Keys + +```bash +# Compare key counts between locales +./gradlew :HyperFactions:checkTranslations +``` + +This task reports any keys present in en-US but missing in other locales. + +## Contributing + +1. Fork the repository +2. Create a branch: `feat/i18n-` (e.g., `feat/i18n-fr-FR`) +3. Run `./scripts/new-translation.sh ` if starting fresh +4. Translate all `.lang` files and help `.md` files +5. Build and test locally +6. Submit a pull request + +### Review Process + +- Translations are reviewed by native speakers when possible +- Machine translations are accepted as a starting point but should be refined +- Partial translations are welcome — untranslated keys fall back to English diff --git a/scripts/new-translation.bat b/scripts/new-translation.bat new file mode 100644 index 00000000..e1d31dc0 --- /dev/null +++ b/scripts/new-translation.bat @@ -0,0 +1,75 @@ +@echo off +REM ============================================================ +REM new-translation.bat — Scaffold a new HyperFactions locale +REM Usage: scripts\new-translation.bat +REM Example: scripts\new-translation.bat fr-FR +REM ============================================================ + +if "%~1"=="" ( + echo Usage: %~nx0 ^ + echo Example: %~nx0 fr-FR + exit /b 1 +) + +set "LOCALE=%~1" + +REM Resolve project root (parent of scripts\) +set "SCRIPT_DIR=%~dp0" +pushd "%SCRIPT_DIR%.." +set "PROJECT_ROOT=%CD%" +popd + +set "LANG_SRC=%PROJECT_ROOT%\src\main\resources\Server\Languages\en-US" +set "LANG_DST=%PROJECT_ROOT%\src\main\resources\Server\Languages\%LOCALE%" + +set "HELP_SRC=%PROJECT_ROOT%\src\main\resources\Server\Languages\en-US\help" +set "HELP_DST=%PROJECT_ROOT%\src\main\resources\Server\Languages\%LOCALE%\help" + +REM --- Validate source exists --- +if not exist "%LANG_SRC%\" ( + echo Error: Source language directory not found: %LANG_SRC% + exit /b 1 +) + +REM --- Copy .lang files --- +set LANG_COUNT=0 +if exist "%LANG_DST%\" ( + echo Language directory already exists: %LANG_DST% + echo Skipping .lang file copy (delete the directory first to re-scaffold). +) else ( + mkdir "%LANG_DST%" + for %%f in ("%LANG_SRC%\*.lang") do ( + copy "%%f" "%LANG_DST%\" >nul + set /a LANG_COUNT+=1 + ) + echo Copied %LANG_COUNT% .lang file(s) to %LANG_DST% +) + +REM --- Copy help markdown --- +set HELP_COUNT=0 +if exist "%HELP_SRC%\" ( + if exist "%HELP_DST%\" ( + echo Help directory already exists: %HELP_DST% + echo Skipping help file copy (delete the directory first to re-scaffold). + ) else ( + xcopy "%HELP_SRC%" "%HELP_DST%" /E /I /Q >nul + REM Count .md files + for /r "%HELP_DST%" %%f in (*.md) do set /a HELP_COUNT+=1 + echo Copied %HELP_COUNT% help file(s) to %HELP_DST% + ) +) else ( + echo No help directory found at %HELP_SRC% — skipping help files. +) + +REM --- Summary --- +echo. +echo === Scaffold Summary === +echo Locale: %LOCALE% +echo Lang files: %LANG_COUNT% copied to src\main\resources\Server\Languages\%LOCALE%\ +echo Help files: %HELP_COUNT% copied to src\main\resources\Server\Languages\%LOCALE%\help\ +echo. +echo Next steps: +echo 1. Add a header comment to each .lang file indicating the language and status +echo 2. Translate the values (keep keys and {0} placeholders unchanged) +echo 3. Translate the help markdown files in Server\Languages\%LOCALE%\help\ +echo 4. Test in-game with /f settings to switch language diff --git a/scripts/new-translation.sh b/scripts/new-translation.sh new file mode 100755 index 00000000..4674d972 --- /dev/null +++ b/scripts/new-translation.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# ============================================================ +# new-translation.sh — Scaffold a new HyperFactions locale +# Usage: ./scripts/new-translation.sh +# Example: ./scripts/new-translation.sh fr-FR +# ============================================================ +set -euo pipefail + +if [ $# -lt 1 ]; then + echo "Usage: $0 " + echo "Example: $0 fr-FR" + exit 1 +fi + +LOCALE="$1" + +# Resolve project root (parent of scripts/) +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +LANG_SRC="$PROJECT_ROOT/src/main/resources/Server/Languages/en-US" +LANG_DST="$PROJECT_ROOT/src/main/resources/Server/Languages/$LOCALE" + +HELP_SRC="$PROJECT_ROOT/src/main/resources/Server/Languages/en-US/help" +HELP_DST="$PROJECT_ROOT/src/main/resources/Server/Languages/$LOCALE/help" + +# --- Validate inputs --- +if [[ ! "$LOCALE" =~ ^[a-z]{2}-[A-Z]{2}$ ]]; then + echo "Warning: '$LOCALE' does not match standard locale format (e.g., fr-FR)." + echo "Continuing anyway..." +fi + +if [ ! -d "$LANG_SRC" ]; then + echo "Error: Source language directory not found: $LANG_SRC" + exit 1 +fi + +# --- Copy .lang files --- +LANG_COUNT=0 +if [ -d "$LANG_DST" ]; then + echo "Language directory already exists: $LANG_DST" + echo "Skipping .lang file copy (delete the directory first to re-scaffold)." +else + mkdir -p "$LANG_DST" + for file in "$LANG_SRC"/*.lang; do + if [ -f "$file" ]; then + cp "$file" "$LANG_DST/" + LANG_COUNT=$((LANG_COUNT + 1)) + fi + done + echo "Copied $LANG_COUNT .lang file(s) to $LANG_DST" +fi + +# --- Copy help markdown --- +HELP_COUNT=0 +if [ -d "$HELP_SRC" ]; then + if [ -d "$HELP_DST" ]; then + echo "Help directory already exists: $HELP_DST" + echo "Skipping help file copy (delete the directory first to re-scaffold)." + else + cp -r "$HELP_SRC" "$HELP_DST" + HELP_COUNT=$(find "$HELP_DST" -name '*.md' -type f | wc -l) + echo "Copied $HELP_COUNT help file(s) to $HELP_DST" + fi +else + echo "No help directory found at $HELP_SRC — skipping help files." +fi + +# --- Summary --- +echo "" +echo "=== Scaffold Summary ===" +echo "Locale: $LOCALE" +echo "Lang files: $LANG_COUNT copied to src/main/resources/Server/Languages/$LOCALE/" +echo "Help files: $HELP_COUNT copied to src/main/resources/Server/Languages/$LOCALE/help/" +echo "" +echo "Next steps:" +echo " 1. Add a header comment to each .lang file indicating the language and status" +echo " 2. Translate the values (keep keys and {0} placeholders unchanged)" +echo " 3. Translate the help markdown files in Server/Languages/$LOCALE/help/" +echo " 4. Test in-game with /f settings to switch language" diff --git a/src/main/java/com/hyperfactions/HyperFactions.java b/src/main/java/com/hyperfactions/HyperFactions.java index 5c4a005e..b9a5196a 100644 --- a/src/main/java/com/hyperfactions/HyperFactions.java +++ b/src/main/java/com/hyperfactions/HyperFactions.java @@ -389,7 +389,7 @@ public void enable() { // Initialize territory notifier (for entry/exit notifications) territoryNotifier = new TerritoryNotifier( - factionManager, claimManager, zoneManager, relationManager + factionManager, claimManager, zoneManager, relationManager, playerStorage ); // Initialize world map service (for claim markers on map) diff --git a/src/main/java/com/hyperfactions/build/HelpLangGenerator.java b/src/main/java/com/hyperfactions/build/HelpLangGenerator.java new file mode 100644 index 00000000..2c101cd4 --- /dev/null +++ b/src/main/java/com/hyperfactions/build/HelpLangGenerator.java @@ -0,0 +1,614 @@ +package com.hyperfactions.build; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.io.IOException; +import java.nio.file.*; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +/** + * Build-time tool that converts help markdown files into .lang translation files + * and a help-manifest.json for the HyperFactions help system. + * + *

Usage: {@code java HelpLangGenerator } + * + *

Reads {@code Server/Languages/{locale}/help/{category}/{topic}.md} and produces: + *

    + *
  • {@code {outputDir}/Server/Languages/{locale}/hyperfactions_help.lang}
  • + *
  • {@code {outputDir}/help-manifest.json} (generated from en-US only)
  • + *
+ * + *

Supported Markdown Syntax

+ *
+ * Plain text              → TEXT
+ * ## Heading              → HEADING
+ * `command`               → COMMAND
+ * **bold text**           → BOLD
+ * *italic text*           → ITALIC
+ * - list item             → LIST
+ * 1. numbered item        → LIST
+ * ---                     → SEPARATOR
+ * [#RRGGBB] text          → TEXT + color
+ * !warning text           → TEXT + #FF5555
+ * !success text           → TEXT + #55FF55
+ * !note text              → TEXT + #55AAFF
+ * !muted text             → TEXT + #888888
+ * > tip text              → CALLOUT + #55FF55
+ * >[!TIP] text            → CALLOUT + #55FF55
+ * >[!WARNING] text        → CALLOUT + #FF5555
+ * >[!INFO] text           → CALLOUT + #55AAFF
+ * >[!NOTE] text           → CALLOUT + #FFAA55
+ * >[!SUCCESS] text        → CALLOUT + #55FF55
+ * | col | col |           → TABLE_HEADER (if followed by separator)
+ * | val | val |           → TABLE_ROW
+ * blank line              → SPACER
+ * 
+ */ +public class HelpLangGenerator { + + /** Fixed category processing order (player help). */ + private static final List CATEGORY_ORDER = List.of( + "welcome", "your_faction", "power_land", "diplomacy", "combat", "economy", "quick_ref" + ); + + /** Fixed category processing order (admin help). */ + private static final List ADMIN_CATEGORY_ORDER = List.of( + "admin_overview", "admin_factions", "admin_zones", "admin_power", + "admin_economy", "admin_config", "admin_maintenance", "admin_reference" + ); + + /** Pattern for inline bold: **text** */ + private static final Pattern INLINE_BOLD_PATTERN = Pattern.compile("\\*\\*(.+?)\\*\\*"); + + /** Pattern for inline code: `text` */ + private static final Pattern INLINE_CODE_PATTERN = Pattern.compile("`(.+?)`"); + + /** Pattern for inline italic: *text* (not bold **) */ + private static final Pattern INLINE_ITALIC_PATTERN = Pattern.compile("(?[!TYPE] text */ + private static final Pattern CALLOUT_TYPE_PATTERN = Pattern.compile("^>\\[!([A-Z]+)]\\s*(.+)$"); + + /** Pattern for numbered list: 1. text, 2. text, etc. */ + private static final Pattern NUMBERED_LIST_PATTERN = Pattern.compile("^\\d+\\.\\s+(.+)$"); + + /** Pattern for horizontal rule: 3+ dashes on a line */ + private static final Pattern HR_PATTERN = Pattern.compile("^-{3,}$"); + + /** Pattern for table separator row: |---|---|---| (with optional colons for alignment) */ + private static final Pattern TABLE_SEPARATOR_PATTERN = Pattern.compile("^\\|[-:| ]+\\|$"); + + /** Named color shortcuts */ + private static final Map NAMED_COLORS = Map.of( + "warning", "#FF5555", + "success", "#55FF55", + "note", "#55AAFF", + "muted", "#888888" + ); + + /** Callout type colors */ + private static final Map CALLOUT_COLORS = Map.of( + "TIP", "#55FF55", + "WARNING", "#FF5555", + "INFO", "#55AAFF", + "NOTE", "#FFAA55", + "SUCCESS", "#55FF55" + ); + + // ── Data structures ────────────────────────────────────────────────── + + /** A column within a table entry. */ + record ColumnEntry(String key, String text) {} + + /** A single parsed entry from a markdown topic file. */ + record Entry(String type, String key, String color, List columns) { + Entry(String type, String key) { + this(type, key, null, null); + } + + Entry(String type, String key, String color) { + this(type, key, color, null); + } + } + + /** A fully parsed topic ready for manifest / lang output. */ + record Topic( + String id, + String category, + String topic, + String titleKey, + String titleText, + List commands, + List entries, + List entryTexts + ) {} + + // ── Entry point ────────────────────────────────────────────────────── + + public static void main(String[] args) { + if (args.length < 2) { + System.err.println("Usage: HelpLangGenerator "); + System.exit(1); + } + + Path langDir = Paths.get(args[0]); + Path outputDir = Paths.get(args[1]); + + if (!Files.isDirectory(langDir)) { + System.err.println("Languages directory not found: " + langDir); + System.exit(1); + } + + try { + // Find locales that have a help/ subdirectory + List locales = listSortedDirectories(langDir).stream() + .filter(d -> Files.isDirectory(langDir.resolve(d).resolve("help"))) + .toList(); + if (locales.isEmpty()) { + System.err.println("No locale directories with help/ found under " + langDir); + System.exit(1); + } + + System.out.println("Found locales with help content: " + locales); + + for (String locale : locales) { + Path helpDir = langDir.resolve(locale).resolve("help"); + List topics = parseLocale(helpDir); + writeLangFile(outputDir, locale, topics); + + if ("en-US".equals(locale)) { + writeManifest(outputDir, topics); + } + } + + System.out.println("Help language generation complete."); + } catch (IOException e) { + System.err.println("Error generating help lang files: " + e.getMessage()); + e.printStackTrace(); + System.exit(1); + } + } + + // ── Locale parsing ─────────────────────────────────────────────────── + + private static List parseLocale(Path localeDir) throws IOException { + List topics = new ArrayList<>(); + + // Process player categories in defined order + for (String category : CATEGORY_ORDER) { + Path categoryDir = localeDir.resolve(category); + if (!Files.isDirectory(categoryDir)) { + continue; + } + + List mdFiles = listMarkdownFiles(categoryDir); + for (Path mdFile : mdFiles) { + Topic topic = parseTopic(category, mdFile); + if (topic != null) { + topics.add(topic); + System.out.println(" Parsed: " + category + "/" + mdFile.getFileName()); + } + } + } + + // Process admin categories from help/admin/ subdirectory + Path adminDir = localeDir.resolve("admin"); + if (Files.isDirectory(adminDir)) { + for (String category : ADMIN_CATEGORY_ORDER) { + Path categoryDir = adminDir.resolve(category); + if (!Files.isDirectory(categoryDir)) { + continue; + } + + List mdFiles = listMarkdownFiles(categoryDir); + for (Path mdFile : mdFiles) { + Topic topic = parseTopic(category, mdFile); + if (topic != null) { + topics.add(topic); + System.out.println(" Parsed: admin/" + category + "/" + mdFile.getFileName()); + } + } + } + } + + return topics; + } + + // ── Markdown parsing ───────────────────────────────────────────────── + + private static Topic parseTopic(String category, Path mdFile) throws IOException { + String filename = mdFile.getFileName().toString(); + String topicName = filename.substring(0, filename.length() - 3); // strip .md + + List lines = Files.readAllLines(mdFile); + + // Parse frontmatter + String id = null; + List commands = new ArrayList<>(); + int contentStart = 0; + boolean inFrontmatter = false; + + if (!lines.isEmpty() && "---".equals(lines.get(0).trim())) { + inFrontmatter = true; + for (int i = 1; i < lines.size(); i++) { + String line = lines.get(i).trim(); + if ("---".equals(line)) { + contentStart = i + 1; + inFrontmatter = false; + break; + } + if (line.startsWith("id:")) { + id = line.substring(3).trim(); + } else if (line.startsWith("commands:")) { + String commandStr = line.substring(9).trim(); + for (String cmd : commandStr.split(",")) { + String trimmed = cmd.trim(); + if (!trimmed.isEmpty()) { + commands.add(trimmed); + } + } + } + } + } + + if (id == null) { + id = category + "_" + topicName; + } + + // Parse content lines + String titleText = null; + boolean foundFirstContent = false; + String keyPrefix = category + "." + topicName; + List entries = new ArrayList<>(); + List entryTexts = new ArrayList<>(); + int lineCounter = 0; + + for (int i = contentStart; i < lines.size(); i++) { + String line = lines.get(i); + String trimmed = line.trim(); + + // Skip blank lines before the title is found + if (trimmed.isEmpty() && titleText == null) { + continue; + } + + if (trimmed.startsWith("# ") && titleText == null) { + // First H1 → title + titleText = trimmed.substring(2).trim(); + continue; + } + + // Skip blank lines between title and first content + if (trimmed.isEmpty() && !foundFirstContent) { + continue; + } + + if (trimmed.isEmpty()) { + // Blank line → SPACER (only after first content line) + entries.add(new Entry("SPACER", null)); + entryTexts.add(null); + continue; + } + + foundFirstContent = true; + + // ── Order matters: check specific patterns before plain text ── + + // 1. Horizontal rule: --- (3+ dashes, not in frontmatter context) + if (HR_PATTERN.matcher(trimmed).matches()) { + entries.add(new Entry("SEPARATOR", null)); + entryTexts.add(null); + continue; + } + + // 2. Callout with explicit type: >[!WARNING] text, >[!TIP] text, etc. + Matcher calloutMatcher = CALLOUT_TYPE_PATTERN.matcher(trimmed); + if (calloutMatcher.matches()) { + String calloutType = calloutMatcher.group(1); + String text = calloutMatcher.group(2).trim(); + String color = CALLOUT_COLORS.getOrDefault(calloutType, "#55FF55"); + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + entries.add(new Entry("CALLOUT", key, color)); + entryTexts.add(text); + continue; + } + + // 3. Simple blockquote → CALLOUT (tip shorthand, green) + if (trimmed.startsWith("> ")) { + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + String text = trimmed.substring(2).trim(); + entries.add(new Entry("CALLOUT", key, "#55FF55")); + entryTexts.add(text); + continue; + } + + // 4. Inline hex color: [#RRGGBB] text + Matcher hexMatcher = HEX_COLOR_PATTERN.matcher(trimmed); + if (hexMatcher.matches()) { + String color = "#" + hexMatcher.group(1); + String text = hexMatcher.group(2).trim(); + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + entries.add(new Entry("TEXT", key, color)); + entryTexts.add(text); + continue; + } + + // 5. Named color shortcuts: !warning, !success, !note, !muted + if (trimmed.startsWith("!")) { + String rest = trimmed.substring(1); + int spaceIdx = rest.indexOf(' '); + if (spaceIdx > 0) { + String colorName = rest.substring(0, spaceIdx).toLowerCase(); + String color = NAMED_COLORS.get(colorName); + if (color != null) { + String text = rest.substring(spaceIdx + 1).trim(); + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + entries.add(new Entry("TEXT", key, color)); + entryTexts.add(text); + continue; + } + } + } + + // 6. Bold: **text** (whole line wrapped) + if (trimmed.startsWith("**") && trimmed.endsWith("**") && trimmed.length() > 4) { + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + String text = trimmed.substring(2, trimmed.length() - 2); + entries.add(new Entry("BOLD", key)); + entryTexts.add(text); + continue; + } + + // 7. Italic: *text* (whole line wrapped, but not bold **) + if (trimmed.startsWith("*") && trimmed.endsWith("*") && !trimmed.startsWith("**") && trimmed.length() > 2) { + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + String text = trimmed.substring(1, trimmed.length() - 1); + entries.add(new Entry("ITALIC", key)); + entryTexts.add(text); + continue; + } + + // 8. Bullet list: - text + if (trimmed.startsWith("- ")) { + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + String text = trimmed.substring(2).trim(); + entries.add(new Entry("LIST", key)); + entryTexts.add(text); + continue; + } + + // 9. Numbered list: 1. text, 2. text, etc. + Matcher numberedMatcher = NUMBERED_LIST_PATTERN.matcher(trimmed); + if (numberedMatcher.matches()) { + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + // Preserve the number prefix as part of the text + entries.add(new Entry("LIST", key)); + entryTexts.add(trimmed); + continue; + } + + // 9.5. Table row: | col1 | col2 | col3 | + if (trimmed.startsWith("|") && trimmed.endsWith("|") && trimmed.length() > 2) { + // Parse cells + String inner = trimmed.substring(1, trimmed.length() - 1); + String[] rawCells = inner.split("\\|"); + List cellTexts = new ArrayList<>(); + for (String cell : rawCells) { + cellTexts.add(cell.trim()); + } + + // Check if next line is a table separator (indicates this is a header row) + boolean isHeader = false; + if (i + 1 < lines.size()) { + String nextLine = lines.get(i + 1).trim(); + if (TABLE_SEPARATOR_PATTERN.matcher(nextLine).matches()) { + isHeader = true; + i++; // skip separator line + } + } + + lineCounter++; + String type = isHeader ? "TABLE_HEADER" : "TABLE_ROW"; + List columns = new ArrayList<>(); + for (int col = 0; col < cellTexts.size(); col++) { + String colKey = keyPrefix + ".line." + lineCounter + ".col." + col; + columns.add(new ColumnEntry(colKey, cellTexts.get(col))); + } + entries.add(new Entry(type, null, null, columns)); + entryTexts.add(null); + continue; + } + + // 10. H2 → HEADING + if (trimmed.startsWith("## ")) { + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + String text = trimmed.substring(3).trim(); + entries.add(new Entry("HEADING", key)); + entryTexts.add(text); + continue; + } + + // 11. Command line (backtick-wrapped) + if (trimmed.startsWith("`") && trimmed.endsWith("`") && trimmed.length() > 2) { + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + String text = trimmed.substring(1, trimmed.length() - 1); + entries.add(new Entry("COMMAND", key)); + entryTexts.add(text); + continue; + } + + // 12. Plain text → TEXT + lineCounter++; + String key = keyPrefix + ".line." + lineCounter; + entries.add(new Entry("TEXT", key)); + entryTexts.add(trimmed); + } + + if (titleText == null) { + titleText = topicName.replace('_', ' '); + } + + return new Topic(id, category, topicName, keyPrefix + ".title", titleText, commands, entries, entryTexts); + } + + // ── .lang file output ──────────────────────────────────────────────── + + private static void writeLangFile(Path outputDir, String locale, List topics) throws IOException { + Path langDir = outputDir.resolve("Server").resolve("Languages").resolve(locale); + Files.createDirectories(langDir); + Path langFile = langDir.resolve("hyperfactions_help.lang"); + + StringBuilder sb = new StringBuilder(); + sb.append("# HyperFactions Help System - ").append(locale).append("\n"); + sb.append("# AUTO-GENERATED by HelpLangGenerator — do not edit manually\n\n"); + + for (Topic topic : topics) { + sb.append("# AUTO-GENERATED from Server/Languages/") + .append(locale).append("/help/") + .append(topic.category()).append("/") + .append(topic.topic()).append(".md\n"); + + sb.append(topic.category()).append(".").append(topic.topic()) + .append(".title = ").append(topic.titleText()).append("\n"); + + for (int i = 0; i < topic.entries().size(); i++) { + Entry entry = topic.entries().get(i); + if (entry.columns() != null) { + // Table entry — write each column as a separate lang key + // (table cell formatting is handled at render time by applyCellFormatting) + for (ColumnEntry col : entry.columns()) { + sb.append(col.key()).append(" = ").append(col.text()).append("\n"); + } + } else if (entry.key() != null) { + String text = topic.entryTexts().get(i); + sb.append(entry.key()).append(" = ").append(text).append("\n"); + } + } + + sb.append("\n"); + } + + Files.writeString(langFile, sb.toString()); + System.out.println("Wrote: " + langFile); + } + + // ── Manifest output ────────────────────────────────────────────────── + + private static void writeManifest(Path outputDir, List topics) throws IOException { + List> topicList = new ArrayList<>(); + Map commandMappings = new LinkedHashMap<>(); + + for (Topic topic : topics) { + Map topicMap = new LinkedHashMap<>(); + topicMap.put("id", topic.id()); + topicMap.put("category", topic.category()); + topicMap.put("titleKey", "hyperfactions_help." + topic.titleKey()); + topicMap.put("commands", topic.commands()); + + List> entryList = new ArrayList<>(); + for (int i = 0; i < topic.entries().size(); i++) { + Entry entry = topic.entries().get(i); + Map entryMap = new LinkedHashMap<>(); + entryMap.put("type", entry.type()); + if (entry.columns() != null) { + // Table entry — store column keys as JSON array + List colKeys = entry.columns().stream() + .map(c -> "hyperfactions_help." + c.key()) + .toList(); + entryMap.put("columns", colKeys); + } else if (entry.key() != null) { + entryMap.put("key", "hyperfactions_help." + entry.key()); + } + if (entry.color() != null) { + entryMap.put("color", entry.color()); + } + entryList.add(entryMap); + } + topicMap.put("entries", entryList); + + topicList.add(topicMap); + + // Build command mappings + for (String cmd : topic.commands()) { + commandMappings.put(cmd, topic.category()); + } + } + + Map manifest = new LinkedHashMap<>(); + manifest.put("topics", topicList); + manifest.put("commandMappings", commandMappings); + + Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); + String json = gson.toJson(manifest); + + Path manifestFile = outputDir.resolve("help-manifest.json"); + Files.createDirectories(manifestFile.getParent()); + Files.writeString(manifestFile, json + "\n"); + System.out.println("Wrote: " + manifestFile); + } + + // ── Inline marker stripping ───────────────────────────────────────── + + /** + * Strips inline markdown markers from text destined for .lang files. + *

The UI Labels can't mix bold and regular text in one element, + * so we strip markers to produce clean readable text: + *

    + *
  • {@code **bold**} → {@code bold}
  • + *
  • {@code `code`} → {@code code}
  • + *
  • {@code *italic*} → {@code italic}
  • + *
  • {@code " -- "} → {@code " — "} (em-dash)
  • + *
+ */ + private static String stripInlineMarkers(String text) { + if (text == null) return null; + // Order matters: strip bold (**) before italic (*) to avoid partial matches + text = INLINE_BOLD_PATTERN.matcher(text).replaceAll("$1"); + text = INLINE_CODE_PATTERN.matcher(text).replaceAll("$1"); + text = INLINE_ITALIC_PATTERN.matcher(text).replaceAll("$1"); + text = EM_DASH_PATTERN.matcher(text).replaceAll(" \u2014 "); + return text; + } + + // ── Utility ────────────────────────────────────────────────────────── + + private static List listSortedDirectories(Path dir) throws IOException { + try (Stream stream = Files.list(dir)) { + return stream + .filter(Files::isDirectory) + .map(p -> p.getFileName().toString()) + .sorted() + .toList(); + } + } + + private static List listMarkdownFiles(Path dir) throws IOException { + try (Stream stream = Files.list(dir)) { + return stream + .filter(p -> p.toString().endsWith(".md")) + .filter(Files::isRegularFile) + .sorted() + .toList(); + } + } +} diff --git a/src/main/java/com/hyperfactions/command/FactionCommand.java b/src/main/java/com/hyperfactions/command/FactionCommand.java index bfbc94da..f9a03fca 100644 --- a/src/main/java/com/hyperfactions/command/FactionCommand.java +++ b/src/main/java/com/hyperfactions/command/FactionCommand.java @@ -15,6 +15,8 @@ import com.hyperfactions.command.util.CommandUtil; import com.hyperfactions.integration.PermissionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -123,7 +125,7 @@ protected void execute(@NotNull CommandContext ctx, // No subcommand provided - open faction main dashboard GUI if (!hasPermission(player, Permissions.USE)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg("You don't have permission to use factions.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NO_PERMISSION)); return; } @@ -131,7 +133,7 @@ protected void execute(@NotNull CommandContext ctx, if (playerEntity != null) { hyperFactions.getGuiManager().openFactionMain(playerEntity, ref, store, player); } else { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg("Could not access GUI. Use /f help for commands.", CommandUtil.COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Common.GUI_FALLBACK, CommandUtil.COLOR_YELLOW)); } } diff --git a/src/main/java/com/hyperfactions/command/FactionSubCommand.java b/src/main/java/com/hyperfactions/command/FactionSubCommand.java index 901deb50..1a7f117f 100644 --- a/src/main/java/com/hyperfactions/command/FactionSubCommand.java +++ b/src/main/java/com/hyperfactions/command/FactionSubCommand.java @@ -4,6 +4,7 @@ import com.hyperfactions.command.util.CommandUtil; import com.hyperfactions.data.Faction; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -109,7 +110,7 @@ protected FactionCommandContext parseContext(String[] args) { protected Faction requireFaction(@NotNull CommandContext ctx, @NotNull PlayerRef player) { Faction faction = hyperFactions.getFactionManager().getPlayerFaction(player.getUuid()); if (faction == null) { - ctx.sendMessage(MessageUtil.error("You are not in a faction.")); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); return null; } return faction; diff --git a/src/main/java/com/hyperfactions/command/admin/AdminSubCommand.java b/src/main/java/com/hyperfactions/command/admin/AdminSubCommand.java index 42517592..050f4c20 100644 --- a/src/main/java/com/hyperfactions/command/admin/AdminSubCommand.java +++ b/src/main/java/com/hyperfactions/command/admin/AdminSubCommand.java @@ -11,6 +11,7 @@ import com.hyperfactions.command.admin.handler.AdminIntegrationHandler; import com.hyperfactions.command.admin.handler.AdminMapDecayHandler; import com.hyperfactions.command.admin.handler.AdminPowerHandler; +import com.hyperfactions.command.admin.handler.AdminTestHandler; import com.hyperfactions.command.admin.handler.AdminUpdateHandler; import com.hyperfactions.command.admin.handler.AdminWorldHandler; import com.hyperfactions.command.admin.handler.AdminZoneHandler; @@ -73,6 +74,8 @@ public class AdminSubCommand extends AbstractAsyncCommand { private final AdminMapDecayHandler mapDecayHandler; + private final AdminTestHandler testHandler; + private final AdminWorldHandler worldHandler; /** Creates a new AdminSubCommand. */ @@ -92,6 +95,7 @@ public AdminSubCommand(@NotNull HyperFactions hyperFactions, @NotNull HyperFacti this.powerHandler = new AdminPowerHandler(hyperFactions, plugin); this.economyHandler = new AdminEconomyHandler(hyperFactions); this.mapDecayHandler = new AdminMapDecayHandler(hyperFactions); + this.testHandler = new AdminTestHandler(hyperFactions); this.worldHandler = new AdminWorldHandler(hyperFactions); } @@ -268,15 +272,7 @@ private void dispatchCommand(@NotNull CommandContext ctx, @Nullable Store { - if (!requirePlayer(ctx, isPlayer)) { - break; - } - Player playerEntity = store.getComponent(ref, Player.getComponentType()); - if (playerEntity != null) { - hyperFactions.getGuiManager().openButtonTestPage(playerEntity, ref, store, player); - } - } + case "test" -> testHandler.handleTest(ctx, store, ref, player, subArgs, isPlayer); case "safezone" -> { if (requirePlayer(ctx, isPlayer)) zoneHandler.handleSafezone(ctx, player, currentWorld, chunkX, chunkZ, args); } case "warzone" -> { if (requirePlayer(ctx, isPlayer)) zoneHandler.handleWarzone(ctx, player, currentWorld, chunkX, chunkZ, args); } case "removezone" -> { if (requirePlayer(ctx, isPlayer)) zoneHandler.handleRemovezone(ctx, currentWorld, chunkX, chunkZ); } @@ -287,7 +283,6 @@ private void dispatchCommand(@NotNull CommandContext ctx, @Nullable Store worldHandler.handleAdminWorld(ctx, player, subArgs); case "version" -> handleVersion(ctx, store, ref, player, isPlayer); case "sentry" -> handleSentry(ctx, subArgs); - case "sentrytest" -> handleSentryTest(ctx); case "log", "logs", "activitylog" -> { if (!requirePlayer(ctx, isPlayer)) { break; @@ -383,7 +378,9 @@ private void showAdminHelp(CommandContext ctx) { commands.add(new CommandHelp("/f admin sentry", "View Sentry status")); commands.add(new CommandHelp("/f admin sentry disable", "Opt out of Sentry error reporting")); commands.add(new CommandHelp("/f admin sentry enable", "Opt in to Sentry error reporting")); - commands.add(new CommandHelp("/f admin sentrytest", "Send a test error to Sentry")); + commands.add(new CommandHelp("/f admin test gui", "Open UI element test page")); + commands.add(new CommandHelp("/f admin test sentry", "Send a test error to Sentry")); + commands.add(new CommandHelp("/f admin test md", "Open markdown rendering test page")); ctx.sendMessage(HelpFormatter.buildHelp("Admin Commands", "Server administration", commands, null)); } @@ -457,21 +454,6 @@ private void handleSentry(CommandContext ctx, String[] args) { } } - // === Sentry Test === - private void handleSentryTest(CommandContext ctx) { - if (!SentryIntegration.isInitialized()) { - ctx.sendMessage(prefix().insert(msg("Sentry is not initialized. Check config/debug.json", COLOR_RED))); - return; - } - - boolean sent = SentryIntegration.sendTestEvent(); - if (sent) { - ctx.sendMessage(prefix().insert(msg("Test error sent to Sentry. Check your Sentry dashboard.", COLOR_GREEN))); - } else { - ctx.sendMessage(prefix().insert(msg("Failed to send test event.", COLOR_RED))); - } - } - // === Reload === private void handleReload(CommandContext ctx, PlayerRef player) { if (!hasPermission(player, Permissions.ADMIN)) { diff --git a/src/main/java/com/hyperfactions/command/admin/handler/AdminPowerHandler.java b/src/main/java/com/hyperfactions/command/admin/handler/AdminPowerHandler.java index a08f2af8..055af530 100644 --- a/src/main/java/com/hyperfactions/command/admin/handler/AdminPowerHandler.java +++ b/src/main/java/com/hyperfactions/command/admin/handler/AdminPowerHandler.java @@ -13,6 +13,7 @@ import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.CommandHelp; import com.hyperfactions.util.HelpFormatter; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.PlayerResolver; import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -132,6 +133,14 @@ private void logAdminPowerChange(UUID targetUuid, UUID adminUuid, String message } } + private void logAdminPowerChange(UUID targetUuid, UUID adminUuid, String message, String key, String... args) { + Faction faction = hyperFactions.getFactionManager().getPlayerFaction(targetUuid); + if (faction != null) { + Faction updated = faction.withLog(FactionLog.create(FactionLog.LogType.ADMIN_POWER, message, adminUuid, key, args)); + hyperFactions.getFactionManager().updateFaction(updated); + } + } + // /f admin power set /** Handles power set. */ public void handlePowerSet(CommandContext ctx, UUID senderUuid, String[] args) { @@ -155,7 +164,8 @@ public void handlePowerSet(CommandContext ctx, UUID senderUuid, String[] args) { double oldPower = hyperFactions.getPowerManager().getPlayerPower(target.uuid()).power(); double newPower = hyperFactions.getPowerManager().setPlayerPower(target.uuid(), amount); logAdminPowerChange(target.uuid(), senderUuid, - "Admin set " + target.name() + "'s power to " + String.format("%.1f", newPower) + " (was " + String.format("%.1f", oldPower) + ")"); + "Admin set " + target.name() + "'s power to " + String.format("%.1f", newPower) + " (was " + String.format("%.1f", oldPower) + ")", + MessageKeys.LogsGui.MSG_ADMIN_POWER_SET, target.name(), String.format("%.1f", newPower), String.format("%.1f", oldPower)); ctx.sendMessage(prefix().insert(msg("Set ", COLOR_GREEN)) .insert(msg(target.name(), COLOR_CYAN)) .insert(msg("'s power to ", COLOR_GREEN)) @@ -186,7 +196,8 @@ public void handlePowerAdd(CommandContext ctx, UUID senderUuid, String[] args) { double oldPower = hyperFactions.getPowerManager().getPlayerPower(target.uuid()).power(); double newPower = hyperFactions.getPowerManager().adjustPlayerPower(target.uuid(), amount); logAdminPowerChange(target.uuid(), senderUuid, - "Admin added " + String.format("%.1f", amount) + " power to " + target.name() + " (" + String.format("%.1f", oldPower) + " -> " + String.format("%.1f", newPower) + ")"); + "Admin added " + String.format("%.1f", amount) + " power to " + target.name() + " (" + String.format("%.1f", oldPower) + " -> " + String.format("%.1f", newPower) + ")", + MessageKeys.LogsGui.MSG_ADMIN_POWER_ADD, String.format("%.1f", amount), target.name(), String.format("%.1f", oldPower), String.format("%.1f", newPower)); ctx.sendMessage(prefix().insert(msg("Added ", COLOR_GREEN)) .insert(msg(String.format("%.1f", amount), COLOR_WHITE)) .insert(msg(" power to ", COLOR_GREEN)) @@ -217,7 +228,8 @@ public void handlePowerRemove(CommandContext ctx, UUID senderUuid, String[] args double oldPower = hyperFactions.getPowerManager().getPlayerPower(target.uuid()).power(); double newPower = hyperFactions.getPowerManager().adjustPlayerPower(target.uuid(), -amount); logAdminPowerChange(target.uuid(), senderUuid, - "Admin removed " + String.format("%.1f", amount) + " power from " + target.name() + " (" + String.format("%.1f", oldPower) + " -> " + String.format("%.1f", newPower) + ")"); + "Admin removed " + String.format("%.1f", amount) + " power from " + target.name() + " (" + String.format("%.1f", oldPower) + " -> " + String.format("%.1f", newPower) + ")", + MessageKeys.LogsGui.MSG_ADMIN_POWER_REMOVE, String.format("%.1f", amount), target.name(), String.format("%.1f", oldPower), String.format("%.1f", newPower)); ctx.sendMessage(prefix().insert(msg("Removed ", COLOR_GREEN)) .insert(msg(String.format("%.1f", amount), COLOR_WHITE)) .insert(msg(" power from ", COLOR_GREEN)) @@ -241,7 +253,8 @@ public void handlePowerReset(CommandContext ctx, UUID senderUuid, String[] args) double oldPower = hyperFactions.getPowerManager().getPlayerPower(target.uuid()).power(); double newPower = hyperFactions.getPowerManager().resetPlayerPower(target.uuid()); logAdminPowerChange(target.uuid(), senderUuid, - "Admin reset " + target.name() + "'s power to " + String.format("%.1f", newPower) + " (was " + String.format("%.1f", oldPower) + ")"); + "Admin reset " + target.name() + "'s power to " + String.format("%.1f", newPower) + " (was " + String.format("%.1f", oldPower) + ")", + MessageKeys.LogsGui.MSG_ADMIN_POWER_RESET, target.name(), String.format("%.1f", newPower), String.format("%.1f", oldPower)); ctx.sendMessage(prefix().insert(msg("Reset ", COLOR_GREEN)) .insert(msg(target.name(), COLOR_CYAN)) .insert(msg("'s power to ", COLOR_GREEN)) @@ -277,7 +290,8 @@ public void handlePowerSetMax(CommandContext ctx, UUID senderUuid, String[] args double oldMax = oldPower.getEffectiveMaxPower(); double newCurrentPower = hyperFactions.getPowerManager().setPlayerMaxPower(target.uuid(), amount); logAdminPowerChange(target.uuid(), senderUuid, - "Admin set " + target.name() + "'s max power to " + String.format("%.1f", amount) + " (was " + String.format("%.1f", oldMax) + ")"); + "Admin set " + target.name() + "'s max power to " + String.format("%.1f", amount) + " (was " + String.format("%.1f", oldMax) + ")", + MessageKeys.LogsGui.MSG_ADMIN_MAXPOWER_SET, target.name(), String.format("%.1f", amount), String.format("%.1f", oldMax)); ctx.sendMessage(prefix().insert(msg("Set ", COLOR_GREEN)) .insert(msg(target.name(), COLOR_CYAN)) .insert(msg("'s max power to ", COLOR_GREEN)) @@ -303,7 +317,8 @@ public void handlePowerResetMax(CommandContext ctx, UUID senderUuid, String[] ar hyperFactions.getPowerManager().resetPlayerMaxPower(target.uuid()); double globalMax = ConfigManager.get().getMaxPlayerPower(); logAdminPowerChange(target.uuid(), senderUuid, - "Admin reset " + target.name() + "'s max power to global default (" + String.format("%.1f", globalMax) + ")"); + "Admin reset " + target.name() + "'s max power to global default (" + String.format("%.1f", globalMax) + ")", + MessageKeys.LogsGui.MSG_ADMIN_MAXPOWER_RESET, target.name(), String.format("%.1f", globalMax)); ctx.sendMessage(prefix().insert(msg("Reset ", COLOR_GREEN)) .insert(msg(target.name(), COLOR_CYAN)) .insert(msg("'s max power to global default ", COLOR_GREEN)) @@ -328,7 +343,8 @@ public void handlePowerNoLoss(CommandContext ctx, UUID senderUuid, String[] args boolean newState = !current.powerLossDisabled(); hyperFactions.getPowerManager().setPlayerPowerLossDisabled(target.uuid(), newState); logAdminPowerChange(target.uuid(), senderUuid, - "Admin " + (newState ? "disabled" : "enabled") + " power loss for " + target.name()); + "Admin " + (newState ? "disabled" : "enabled") + " power loss for " + target.name(), + newState ? MessageKeys.LogsGui.MSG_ADMIN_POWERLOSS_DISABLED : MessageKeys.LogsGui.MSG_ADMIN_POWERLOSS_ENABLED, target.name()); ctx.sendMessage(prefix().insert(msg("Power loss ", COLOR_GREEN)) .insert(msg(newState ? "disabled" : "enabled", newState ? COLOR_RED : COLOR_GREEN)) .insert(msg(" for ", COLOR_GREEN)) @@ -352,7 +368,8 @@ public void handlePowerNoDecay(CommandContext ctx, UUID senderUuid, String[] arg boolean newState = !current.claimDecayExempt(); hyperFactions.getPowerManager().setPlayerClaimDecayExempt(target.uuid(), newState); logAdminPowerChange(target.uuid(), senderUuid, - "Admin " + (newState ? "enabled" : "disabled") + " claim decay exemption for " + target.name()); + "Admin " + (newState ? "enabled" : "disabled") + " claim decay exemption for " + target.name(), + newState ? MessageKeys.LogsGui.MSG_ADMIN_DECAY_ENABLED : MessageKeys.LogsGui.MSG_ADMIN_DECAY_DISABLED, target.name()); ctx.sendMessage(prefix().insert(msg("Claim decay exemption ", COLOR_GREEN)) .insert(msg(newState ? "enabled" : "disabled", newState ? COLOR_GREEN : COLOR_RED)) .insert(msg(" for ", COLOR_GREEN)) @@ -392,7 +409,8 @@ public void handlePowerFaction(CommandContext ctx, UUID senderUuid, String[] arg hyperFactions.getFactionManager().updateFaction(faction.withLog(FactionLog.create( FactionLog.LogType.ADMIN_POWER, "Admin set all " + members.size() + " members' power to " + String.format("%.1f", amount), - senderUuid))); + senderUuid, + MessageKeys.LogsGui.MSG_ADMIN_POWER_SET_ALL, String.valueOf(members.size()), String.format("%.1f", amount)))); ctx.sendMessage(prefix().insert(msg("Set power to ", COLOR_GREEN)) .insert(msg(String.format("%.1f", amount), COLOR_WHITE)) .insert(msg(" for " + members.size() + " members of ", COLOR_GREEN)) @@ -413,7 +431,8 @@ public void handlePowerFaction(CommandContext ctx, UUID senderUuid, String[] arg hyperFactions.getFactionManager().updateFaction(faction.withLog(FactionLog.create( FactionLog.LogType.ADMIN_POWER, "Admin added " + String.format("%.1f", amount) + " power to all " + members.size() + " members", - senderUuid))); + senderUuid, + MessageKeys.LogsGui.MSG_ADMIN_POWER_ADD_ALL, String.format("%.1f", amount), String.valueOf(members.size())))); ctx.sendMessage(prefix().insert(msg("Added ", COLOR_GREEN)) .insert(msg(String.format("%.1f", amount), COLOR_WHITE)) .insert(msg(" power to " + members.size() + " members of ", COLOR_GREEN)) @@ -434,7 +453,8 @@ public void handlePowerFaction(CommandContext ctx, UUID senderUuid, String[] arg hyperFactions.getFactionManager().updateFaction(faction.withLog(FactionLog.create( FactionLog.LogType.ADMIN_POWER, "Admin removed " + String.format("%.1f", amount) + " power from all " + members.size() + " members", - senderUuid))); + senderUuid, + MessageKeys.LogsGui.MSG_ADMIN_POWER_REMOVE_ALL, String.format("%.1f", amount), String.valueOf(members.size())))); ctx.sendMessage(prefix().insert(msg("Removed ", COLOR_GREEN)) .insert(msg(String.format("%.1f", amount), COLOR_WHITE)) .insert(msg(" power from " + members.size() + " members of ", COLOR_GREEN)) @@ -447,7 +467,8 @@ public void handlePowerFaction(CommandContext ctx, UUID senderUuid, String[] arg hyperFactions.getFactionManager().updateFaction(faction.withLog(FactionLog.create( FactionLog.LogType.ADMIN_POWER, "Admin reset power for all " + members.size() + " members", - senderUuid))); + senderUuid, + MessageKeys.LogsGui.MSG_ADMIN_POWER_RESET_ALL, String.valueOf(members.size())))); ctx.sendMessage(prefix().insert(msg("Reset power for ", COLOR_GREEN)) .insert(msg(String.valueOf(members.size()), COLOR_WHITE)) .insert(msg(" members of ", COLOR_GREEN)) diff --git a/src/main/java/com/hyperfactions/command/admin/handler/AdminTestHandler.java b/src/main/java/com/hyperfactions/command/admin/handler/AdminTestHandler.java new file mode 100644 index 00000000..18462b93 --- /dev/null +++ b/src/main/java/com/hyperfactions/command/admin/handler/AdminTestHandler.java @@ -0,0 +1,114 @@ +package com.hyperfactions.command.admin.handler; + +import com.hyperfactions.HyperFactions; +import com.hyperfactions.command.util.CommandUtil; +import com.hyperfactions.integration.SentryIntegration; +import com.hyperfactions.util.CommandHelp; +import com.hyperfactions.util.HelpFormatter; +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.server.core.Message; +import com.hypixel.hytale.server.core.command.system.CommandContext; +import com.hypixel.hytale.server.core.entity.entities.Player; +import com.hypixel.hytale.server.core.universe.PlayerRef; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import java.util.ArrayList; +import java.util.List; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Handles /f admin test subcommands: gui, sentry, md. + */ +public class AdminTestHandler { + + private final HyperFactions hyperFactions; + + private static final String COLOR_CYAN = CommandUtil.COLOR_CYAN; + + private static final String COLOR_GREEN = CommandUtil.COLOR_GREEN; + + private static final String COLOR_RED = CommandUtil.COLOR_RED; + + private static final String COLOR_YELLOW = CommandUtil.COLOR_YELLOW; + + private static final String COLOR_GRAY = CommandUtil.COLOR_GRAY; + + private static Message prefix() { + return CommandUtil.prefix(); + } + + private static Message msg(String text, String color) { + return CommandUtil.msg(text, color); + } + + /** Creates a new AdminTestHandler. */ + public AdminTestHandler(@NotNull HyperFactions hyperFactions) { + this.hyperFactions = hyperFactions; + } + + /** + * Dispatches /f admin test subcommands. + */ + public void handleTest(@NotNull CommandContext ctx, @Nullable Store store, + @Nullable Ref ref, @Nullable PlayerRef player, + @NotNull String[] subArgs, boolean isPlayer) { + if (subArgs.length == 0) { + showTestHelp(ctx); + return; + } + + switch (subArgs[0].toLowerCase()) { + case "gui" -> handleTestGui(ctx, store, ref, player, isPlayer); + case "sentry" -> handleSentryTest(ctx); + case "md", "markdown" -> handleMarkdownTest(ctx, store, ref, player, isPlayer); + default -> showTestHelp(ctx); + } + } + + private void handleTestGui(CommandContext ctx, Store store, + Ref ref, PlayerRef player, boolean isPlayer) { + if (!isPlayer) { + ctx.sendMessage(prefix().insert(msg("This command can only be used by a player.", COLOR_RED))); + return; + } + Player playerEntity = store.getComponent(ref, Player.getComponentType()); + if (playerEntity != null) { + hyperFactions.getGuiManager().openButtonTestPage(playerEntity, ref, store, player); + } + } + + private void handleSentryTest(CommandContext ctx) { + if (!SentryIntegration.isInitialized()) { + ctx.sendMessage(prefix().insert(msg("Sentry is not initialized. Check config/debug.json", COLOR_RED))); + return; + } + + boolean sent = SentryIntegration.sendTestEvent(); + if (sent) { + ctx.sendMessage(prefix().insert(msg("Test error sent to Sentry. Check your Sentry dashboard.", COLOR_GREEN))); + } else { + ctx.sendMessage(prefix().insert(msg("Failed to send test event.", COLOR_RED))); + } + } + + private void handleMarkdownTest(CommandContext ctx, Store store, + Ref ref, PlayerRef player, boolean isPlayer) { + if (!isPlayer) { + ctx.sendMessage(prefix().insert(msg("This command can only be used by a player.", COLOR_RED))); + return; + } + Player playerEntity = store.getComponent(ref, Player.getComponentType()); + if (playerEntity != null) { + hyperFactions.getGuiManager().openMarkdownTestPage(playerEntity, ref, store, player); + } + } + + private void showTestHelp(CommandContext ctx) { + List commands = new ArrayList<>(); + commands.add(new CommandHelp("/f admin test gui", "Open UI element test page")); + commands.add(new CommandHelp("/f admin test sentry", "Send test error to Sentry")); + commands.add(new CommandHelp("/f admin test md", "Open markdown rendering test page")); + ctx.sendMessage(HelpFormatter.buildHelp("Test Commands", "Development testing tools", commands, null)); + } +} diff --git a/src/main/java/com/hyperfactions/command/economy/MoneySubCommand.java b/src/main/java/com/hyperfactions/command/economy/MoneySubCommand.java index 17180827..4c67ad10 100644 --- a/src/main/java/com/hyperfactions/command/economy/MoneySubCommand.java +++ b/src/main/java/com/hyperfactions/command/economy/MoneySubCommand.java @@ -4,6 +4,9 @@ import com.hyperfactions.command.FactionSubCommand; import com.hyperfactions.command.util.CommandUtil; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -36,7 +39,7 @@ protected void execute(@NotNull CommandContext ctx, String[] parts = input != null ? input.trim().split("\\s+") : new String[0]; if (parts.length < 3) { - sendHelp(ctx); + sendHelp(ctx, player); return; } @@ -49,21 +52,16 @@ protected void execute(@NotNull CommandContext ctx, case "withdraw", "wd" -> TreasuryCommandHandler.handleWithdraw(ctx, player, hyperFactions, subArgs); case "transfer", "send" -> TreasuryCommandHandler.handleTransfer(ctx, player, hyperFactions, subArgs); case "log", "history" -> TreasuryCommandHandler.handleLog(ctx, player, hyperFactions, subArgs); - default -> sendHelp(ctx); + default -> sendHelp(ctx, player); } } - private void sendHelp(CommandContext ctx) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg("Treasury Commands:", COLOR_CYAN))); - ctx.sendMessage(CommandUtil.msg(" /f money balance [faction]", COLOR_YELLOW) - .insert(CommandUtil.msg(" - View balance", COLOR_GRAY))); - ctx.sendMessage(CommandUtil.msg(" /f money deposit ", COLOR_YELLOW) - .insert(CommandUtil.msg(" - Deposit into treasury", COLOR_GRAY))); - ctx.sendMessage(CommandUtil.msg(" /f money withdraw ", COLOR_YELLOW) - .insert(CommandUtil.msg(" - Withdraw from treasury", COLOR_GRAY))); - ctx.sendMessage(CommandUtil.msg(" /f money transfer ", COLOR_YELLOW) - .insert(CommandUtil.msg(" - Transfer between factions", COLOR_GRAY))); - ctx.sendMessage(CommandUtil.msg(" /f money log [page] [type]", COLOR_YELLOW) - .insert(CommandUtil.msg(" - View transaction history", COLOR_GRAY))); + private void sendHelp(CommandContext ctx, PlayerRef player) { + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Economy.MONEY_HELP_HEADER, COLOR_CYAN)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Economy.MONEY_HELP_BALANCE), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Economy.MONEY_HELP_DEPOSIT), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Economy.MONEY_HELP_WITHDRAW), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Economy.MONEY_HELP_TRANSFER), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Economy.MONEY_HELP_LOG), COLOR_GRAY)); } } diff --git a/src/main/java/com/hyperfactions/command/economy/TreasuryCommandHandler.java b/src/main/java/com/hyperfactions/command/economy/TreasuryCommandHandler.java index ef2aad40..93f3dd35 100644 --- a/src/main/java/com/hyperfactions/command/economy/TreasuryCommandHandler.java +++ b/src/main/java/com/hyperfactions/command/economy/TreasuryCommandHandler.java @@ -10,6 +10,9 @@ import com.hyperfactions.data.FactionPermissions; import com.hyperfactions.integration.economy.VaultEconomyProvider; import com.hyperfactions.manager.EconomyManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.command.system.CommandContext; import com.hypixel.hytale.server.core.universe.PlayerRef; @@ -38,15 +41,13 @@ private TreasuryCommandHandler() {} public static void handleBalance(@NotNull CommandContext ctx, @NotNull PlayerRef player, @NotNull HyperFactions hf, String[] args) { if (!CommandUtil.hasPermission(player, Permissions.ECONOMY_BALANCE)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have permission to view balances.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.BALANCE_NO_PERMISSION)); return; } EconomyManager econ = hf.getEconomyManager(); if (econ == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Treasury is not available.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TREASURY_UNAVAILABLE)); return; } @@ -54,23 +55,20 @@ public static void handleBalance(@NotNull CommandContext ctx, @NotNull PlayerRef if (args.length > 0) { faction = hf.getFactionManager().getFactionByName(args[0]); if (faction == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Faction '" + args[0] + "' not found.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.FACTION_NOT_FOUND)); return; } } else { faction = hf.getFactionManager().getPlayerFaction(player.getUuid()); if (faction == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You are not in a faction.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); return; } } BigDecimal balance = econ.getFactionBalance(faction.id()); - ctx.sendMessage(CommandUtil.prefix() - .insert(CommandUtil.msg(faction.name() + "'s treasury: ", CommandUtil.COLOR_CYAN)) - .insert(CommandUtil.msg(econ.formatCurrency(balance), CommandUtil.COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Economy.BALANCE_DISPLAY, + faction.name(), econ.formatCurrency(balance))); } /** @@ -79,23 +77,20 @@ public static void handleBalance(@NotNull CommandContext ctx, @NotNull PlayerRef public static void handleDeposit(@NotNull CommandContext ctx, @NotNull PlayerRef player, @NotNull HyperFactions hf, String[] args) { if (!CommandUtil.hasPermission(player, Permissions.ECONOMY_DEPOSIT)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have permission to deposit.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.DEPOSIT_NO_PERMISSION)); return; } EconomyManager econ = hf.getEconomyManager(); VaultEconomyProvider vault = econ != null ? econ.getVaultProvider() : null; if (econ == null || vault == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Treasury is not available.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TREASURY_UNAVAILABLE)); return; } Faction faction = hf.getFactionManager().getPlayerFaction(player.getUuid()); if (faction == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You are not in a faction.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); return; } @@ -103,14 +98,12 @@ public static void handleDeposit(@NotNull CommandContext ctx, @NotNull PlayerRef FactionMember member = faction.getMember(player.getUuid()); if (member != null && !faction.getEffectivePermissions().get(FactionPermissions.TREASURY_DEPOSIT) && !member.isOfficerOrHigher()) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have faction permission to deposit.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.DEPOSIT_FACTION_DENIED)); return; } if (args.length < 1) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Usage: /f deposit ", CommandUtil.COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Economy.DEPOSIT_USAGE, MessageUtil.COLOR_YELLOW)); return; } @@ -118,29 +111,25 @@ public static void handleDeposit(@NotNull CommandContext ctx, @NotNull PlayerRef try { amount = new BigDecimal(args[0]); } catch (NumberFormatException e) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Invalid amount: " + args[0], CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.INVALID_AMOUNT, args[0])); return; } if (amount.compareTo(BigDecimal.ZERO) <= 0) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Amount must be positive.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.AMOUNT_POSITIVE)); return; } // Check player has enough in wallet if (!vault.has(player.getUuid(), amount)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have enough money. Wallet: " + econ.formatCurrency(vault.getBalanceBigDecimal(player.getUuid())), - CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WALLET_INSUFFICIENT, + econ.formatCurrency(vault.getBalanceBigDecimal(player.getUuid())))); return; } // Withdraw from player wallet if (!vault.withdraw(player.getUuid(), amount)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Failed to withdraw from your wallet.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WALLET_WITHDRAW_FAILED)); return; } @@ -151,15 +140,11 @@ public static void handleDeposit(@NotNull CommandContext ctx, @NotNull PlayerRef if (result != EconomyAPI.TransactionResult.SUCCESS) { // Rollback: return money to player vault.deposit(player.getUuid(), amount); - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Failed to deposit to faction treasury. Money returned.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.DEPOSIT_FAILED)); return; } - ctx.sendMessage(CommandUtil.prefix() - .insert(CommandUtil.msg("Deposited ", CommandUtil.COLOR_GREEN)) - .insert(CommandUtil.msg(econ.formatCurrency(amount), CommandUtil.COLOR_CYAN)) - .insert(CommandUtil.msg(" into the faction treasury.", CommandUtil.COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Economy.DEPOSITED, econ.formatCurrency(amount))); } /** @@ -168,23 +153,20 @@ public static void handleDeposit(@NotNull CommandContext ctx, @NotNull PlayerRef public static void handleWithdraw(@NotNull CommandContext ctx, @NotNull PlayerRef player, @NotNull HyperFactions hf, String[] args) { if (!CommandUtil.hasPermission(player, Permissions.ECONOMY_WITHDRAW)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have permission to withdraw.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WITHDRAW_NO_PERMISSION)); return; } EconomyManager econ = hf.getEconomyManager(); VaultEconomyProvider vault = econ != null ? econ.getVaultProvider() : null; if (econ == null || vault == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Treasury is not available.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TREASURY_UNAVAILABLE)); return; } Faction faction = hf.getFactionManager().getPlayerFaction(player.getUuid()); if (faction == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You are not in a faction.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); return; } @@ -192,14 +174,12 @@ public static void handleWithdraw(@NotNull CommandContext ctx, @NotNull PlayerRe FactionMember member = faction.getMember(player.getUuid()); if (member != null && !faction.getEffectivePermissions().get(FactionPermissions.TREASURY_WITHDRAW) && !member.isLeader()) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have faction permission to withdraw.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WITHDRAW_FACTION_DENIED)); return; } if (args.length < 1) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Usage: /f withdraw ", CommandUtil.COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Economy.WITHDRAW_USAGE, MessageUtil.COLOR_YELLOW)); return; } @@ -207,22 +187,19 @@ public static void handleWithdraw(@NotNull CommandContext ctx, @NotNull PlayerRe try { amount = new BigDecimal(args[0]); } catch (NumberFormatException e) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Invalid amount: " + args[0], CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.INVALID_AMOUNT, args[0])); return; } if (amount.compareTo(BigDecimal.ZERO) <= 0) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Amount must be positive.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.AMOUNT_POSITIVE)); return; } // Check limits before attempting String limitReason = econ.checkWithdrawLimits(faction.id(), amount); if (limitReason != null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Withdrawal denied: " + limitReason, CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WITHDRAW_LIMIT_DENIED, limitReason)); return; } @@ -235,22 +212,14 @@ public static void handleWithdraw(@NotNull CommandContext ctx, @NotNull PlayerRe // Deposit to player wallet if (!vault.deposit(player.getUuid(), amount)) { // Rollback is complex — log the error - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Warning: Failed to deposit to your wallet. Contact an admin.", - CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WALLET_DEPOSIT_FAILED)); return; } - ctx.sendMessage(CommandUtil.prefix() - .insert(CommandUtil.msg("Withdrew ", CommandUtil.COLOR_GREEN)) - .insert(CommandUtil.msg(econ.formatCurrency(amount), CommandUtil.COLOR_CYAN)) - .insert(CommandUtil.msg(" from the faction treasury.", CommandUtil.COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Economy.WITHDRAWN, econ.formatCurrency(amount))); } - case INSUFFICIENT_FUNDS -> ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Insufficient funds in faction treasury.", CommandUtil.COLOR_RED))); - case LIMIT_EXCEEDED -> ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Withdrawal denied: limit exceeded.", CommandUtil.COLOR_RED))); - default -> ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Withdrawal failed: " + result, CommandUtil.COLOR_RED))); + case INSUFFICIENT_FUNDS -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.INSUFFICIENT)); + case LIMIT_EXCEEDED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WITHDRAW_LIMIT_EXCEEDED)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.WITHDRAW_FAILED, result)); } } @@ -260,22 +229,19 @@ public static void handleWithdraw(@NotNull CommandContext ctx, @NotNull PlayerRe public static void handleTransfer(@NotNull CommandContext ctx, @NotNull PlayerRef player, @NotNull HyperFactions hf, String[] args) { if (!CommandUtil.hasPermission(player, Permissions.ECONOMY_TRANSFER)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have permission to transfer.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TRANSFER_NO_PERMISSION)); return; } EconomyManager econ = hf.getEconomyManager(); if (econ == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Treasury is not available.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TREASURY_UNAVAILABLE)); return; } Faction faction = hf.getFactionManager().getPlayerFaction(player.getUuid()); if (faction == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You are not in a faction.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); return; } @@ -283,27 +249,23 @@ public static void handleTransfer(@NotNull CommandContext ctx, @NotNull PlayerRe FactionMember member = faction.getMember(player.getUuid()); if (member != null && !faction.getEffectivePermissions().get(FactionPermissions.TREASURY_TRANSFER) && !member.isLeader()) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have faction permission to transfer.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TRANSFER_FACTION_DENIED)); return; } if (args.length < 2) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Usage: /f money transfer ", CommandUtil.COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Economy.TRANSFER_USAGE, MessageUtil.COLOR_YELLOW)); return; } Faction target = hf.getFactionManager().getFactionByName(args[0]); if (target == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Faction '" + args[0] + "' not found.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.FACTION_NOT_FOUND)); return; } if (target.id().equals(faction.id())) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Cannot transfer to your own faction.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TRANSFER_SELF)); return; } @@ -311,22 +273,19 @@ public static void handleTransfer(@NotNull CommandContext ctx, @NotNull PlayerRe try { amount = new BigDecimal(args[1]); } catch (NumberFormatException e) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Invalid amount: " + args[1], CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.INVALID_AMOUNT, args[1])); return; } if (amount.compareTo(BigDecimal.ZERO) <= 0) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Amount must be positive.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.AMOUNT_POSITIVE)); return; } // Check limits String limitReason = econ.checkTransferLimits(faction.id(), amount); if (limitReason != null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Transfer denied: " + limitReason, CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TRANSFER_LIMIT_DENIED, limitReason)); return; } @@ -334,16 +293,11 @@ public static void handleTransfer(@NotNull CommandContext ctx, @NotNull PlayerRe faction.id(), target.id(), amount, player.getUuid(), "Player transfer").join(); switch (result) { - case SUCCESS -> ctx.sendMessage(CommandUtil.prefix() - .insert(CommandUtil.msg("Transferred ", CommandUtil.COLOR_GREEN)) - .insert(CommandUtil.msg(econ.formatCurrency(amount), CommandUtil.COLOR_CYAN)) - .insert(CommandUtil.msg(" to " + target.name() + ".", CommandUtil.COLOR_GREEN))); - case INSUFFICIENT_FUNDS -> ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Insufficient funds in faction treasury.", CommandUtil.COLOR_RED))); - case LIMIT_EXCEEDED -> ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Transfer denied: limit exceeded.", CommandUtil.COLOR_RED))); - default -> ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Transfer failed: " + result, CommandUtil.COLOR_RED))); + case SUCCESS -> ctx.sendMessage(MessageUtil.success(player, MessageKeys.Economy.TRANSFERRED, + econ.formatCurrency(amount), target.name())); + case INSUFFICIENT_FUNDS -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.INSUFFICIENT)); + case LIMIT_EXCEEDED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TRANSFER_LIMIT_EXCEEDED)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TRANSFER_FAILED, result)); } } @@ -353,22 +307,19 @@ public static void handleTransfer(@NotNull CommandContext ctx, @NotNull PlayerRe public static void handleLog(@NotNull CommandContext ctx, @NotNull PlayerRef player, @NotNull HyperFactions hf, String[] args) { if (!CommandUtil.hasPermission(player, Permissions.ECONOMY_LOG)) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You don't have permission to view the transaction log.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.LOG_NO_PERMISSION)); return; } EconomyManager econ = hf.getEconomyManager(); if (econ == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "Treasury is not available.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Economy.TREASURY_UNAVAILABLE)); return; } Faction faction = hf.getFactionManager().getPlayerFaction(player.getUuid()); if (faction == null) { - ctx.sendMessage(CommandUtil.prefix().insert(CommandUtil.msg( - "You are not in a faction.", CommandUtil.COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); return; } @@ -395,8 +346,7 @@ public static void handleLog(@NotNull CommandContext ctx, @NotNull PlayerRef pla int totalPages = Math.max(1, (all.size() + perPage - 1) / perPage); page = Math.max(1, Math.min(page, totalPages)); - ctx.sendMessage(CommandUtil.prefix() - .insert(CommandUtil.msg("Transaction Log (page " + page + "/" + totalPages + ")", CommandUtil.COLOR_CYAN))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Economy.LOG_HEADER, MessageUtil.COLOR_CYAN, page, totalPages)); int start = (page - 1) * perPage; int end = Math.min(start + perPage, all.size()); @@ -422,7 +372,7 @@ public static void handleLog(@NotNull CommandContext ctx, @NotNull PlayerRef pla } if (all.isEmpty()) { - ctx.sendMessage(CommandUtil.msg(" No transactions found.", CommandUtil.COLOR_GRAY)); + ctx.sendMessage(CommandUtil.msg(" " + HFMessages.get(player, MessageKeys.Economy.LOG_EMPTY), CommandUtil.COLOR_GRAY)); } } } diff --git a/src/main/java/com/hyperfactions/command/faction/CloseSubCommand.java b/src/main/java/com/hyperfactions/command/faction/CloseSubCommand.java index ab1e0303..1273fccf 100644 --- a/src/main/java/com/hyperfactions/command/faction/CloseSubCommand.java +++ b/src/main/java/com/hyperfactions/command/faction/CloseSubCommand.java @@ -9,6 +9,8 @@ import com.hyperfactions.data.FactionLog; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -38,7 +40,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.CLOSE)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Close.NO_PERMISSION)); return; } @@ -49,24 +51,24 @@ protected void execute(@NotNull CommandContext ctx, FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isLeader()) { - ctx.sendMessage(prefix().insert(msg("Only the leader can change this setting.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Close.NOT_LEADER)); return; } if (!faction.open()) { - ctx.sendMessage(prefix().insert(msg("Your faction is already closed.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Close.ALREADY_CLOSED, COLOR_YELLOW)); return; } Faction updated = faction.withOpen(false) .withLog(FactionLog.create(FactionLog.LogType.SETTINGS_CHANGE, - "Faction set to invite-only", player.getUuid())); + "Faction set to invite-only", player.getUuid(), + MessageKeys.LogsGui.MSG_SET_CLOSED)); hyperFactions.getFactionManager().updateFaction(updated); - ctx.sendMessage(prefix().insert(msg("Your faction is now invite-only.", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" closed the faction to invite-only.", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Close.SUCCESS)); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Close.BROADCAST, player.getUsername())); // After action, open settings page if not text mode String[] rawArgs = CommandUtil.parseRawArgs(ctx.getInputString(), 2); diff --git a/src/main/java/com/hyperfactions/command/faction/ColorSubCommand.java b/src/main/java/com/hyperfactions/command/faction/ColorSubCommand.java index 7eced8f4..3baedd9f 100644 --- a/src/main/java/com/hyperfactions/command/faction/ColorSubCommand.java +++ b/src/main/java/com/hyperfactions/command/faction/ColorSubCommand.java @@ -10,8 +10,12 @@ import com.hyperfactions.data.FactionLog; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.command.system.CommandContext; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.universe.PlayerRef; @@ -39,7 +43,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.COLOR)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Color.NO_PERMISSION)); return; } @@ -50,12 +54,12 @@ protected void execute(@NotNull CommandContext ctx, FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isOfficerOrHigher()) { - ctx.sendMessage(prefix().insert(msg("You must be an officer to change the color.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Color.NOT_OFFICER)); return; } if (!ConfigManager.get().isAllowColors()) { - ctx.sendMessage(prefix().insert(msg("Faction colors are disabled.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Color.COLORS_DISABLED)); return; } @@ -73,8 +77,8 @@ protected void execute(@NotNull CommandContext ctx, // Text mode requires args if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f color ", COLOR_RED))); - ctx.sendMessage(msg("Valid codes: 0-9, a-f or #RRGGBB hex", COLOR_GRAY)); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Color.USAGE)); + ctx.sendMessage(Message.raw(HFMessages.get(player, MessageKeys.Color.USAGE_HINT)).color(COLOR_GRAY)); return; } @@ -87,22 +91,24 @@ protected void execute(@NotNull CommandContext ctx, // Legacy color code - convert to hex hexColor = com.hyperfactions.util.LegacyColorParser.codeToHex(colorInput.charAt(0)); } else { - ctx.sendMessage(prefix().insert(msg("Invalid color. Use 0-9, a-f, or #RRGGBB.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Color.INVALID)); return; } Faction updated = faction.withColor(hexColor) .withLog(FactionLog.create(FactionLog.LogType.SETTINGS_CHANGE, - "Color changed to '" + hexColor + "'", player.getUuid())); + "Color changed to '" + hexColor + "'", player.getUuid(), + MessageKeys.LogsGui.MSG_COLOR_CHANGED, hexColor)); hyperFactions.getFactionManager().updateFaction(updated); // Refresh world maps to show new faction color (respects configured refresh mode) hyperFactions.getWorldMapService().triggerFactionWideRefresh(faction.id()); - ctx.sendMessage(prefix().insert(msg("Faction color updated to ", COLOR_GREEN)) - .insert(msg("this color", null).color(hexColor)) - .insert(msg("!", COLOR_GREEN))); + // Show success with the actual color swatch + ctx.sendMessage(MessageUtil.prefix().insert( + Message.raw(HFMessages.get(player, MessageKeys.Color.SUCCESS) + " ").color(COLOR_GREEN)) + .insert(Message.raw("\u2588\u2588").color(hexColor))); // After action, open settings page if not text mode if (fctx.shouldOpenGuiAfterAction()) { diff --git a/src/main/java/com/hyperfactions/command/faction/CreateSubCommand.java b/src/main/java/com/hyperfactions/command/faction/CreateSubCommand.java index 17d6dae8..e7f5c366 100644 --- a/src/main/java/com/hyperfactions/command/faction/CreateSubCommand.java +++ b/src/main/java/com/hyperfactions/command/faction/CreateSubCommand.java @@ -8,6 +8,8 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -37,7 +39,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.CREATE)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to create factions.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Create.NO_PERMISSION)); return; } @@ -55,7 +57,7 @@ protected void execute(@NotNull CommandContext ctx, // Text mode or with args: create directly if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f create ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Create.USAGE)); return; } @@ -66,8 +68,7 @@ protected void execute(@NotNull CommandContext ctx, switch (result) { case SUCCESS -> { - ctx.sendMessage(prefix().insert(msg("Faction '", COLOR_GREEN)) - .insert(msg(name, COLOR_CYAN)).insert(msg("' created!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Create.SUCCESS, name)); // Open dashboard after creation (if not text mode) if (!fctx.isTextMode()) { Player playerEntity = store.getComponent(ref, Player.getComponentType()); @@ -80,18 +81,16 @@ protected void execute(@NotNull CommandContext ctx, case ALREADY_IN_FACTION -> { Faction existingFaction = hyperFactions.getFactionManager().getPlayerFaction(player.getUuid()); if (existingFaction != null) { - ctx.sendMessage(prefix().insert(msg("You are already in ", COLOR_RED)) - .insert(msg(existingFaction.name(), COLOR_CYAN)) - .insert(msg(".", COLOR_RED))); - ctx.sendMessage(prefix().insert(msg("Use /f leave first if you want to create a new faction.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Create.ALREADY_IN_NAMED, existingFaction.name())); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Create.USE_LEAVE_FIRST, COLOR_YELLOW)); } else { - ctx.sendMessage(prefix().insert(msg("You are already in a faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.ALREADY_IN_FACTION)); } } - case NAME_TAKEN -> ctx.sendMessage(prefix().insert(msg("That faction name is already taken.", COLOR_RED))); - case NAME_TOO_SHORT -> ctx.sendMessage(prefix().insert(msg("Faction name is too short.", COLOR_RED))); - case NAME_TOO_LONG -> ctx.sendMessage(prefix().insert(msg("Faction name is too long.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to create faction.", COLOR_RED))); + case NAME_TAKEN -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Create.NAME_TAKEN)); + case NAME_TOO_SHORT -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Create.NAME_TOO_SHORT)); + case NAME_TOO_LONG -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Create.NAME_TOO_LONG)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Create.FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/faction/DescSubCommand.java b/src/main/java/com/hyperfactions/command/faction/DescSubCommand.java index 716a6c95..605e25e3 100644 --- a/src/main/java/com/hyperfactions/command/faction/DescSubCommand.java +++ b/src/main/java/com/hyperfactions/command/faction/DescSubCommand.java @@ -9,6 +9,8 @@ import com.hyperfactions.data.FactionLog; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -39,7 +41,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.DESC)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Desc.NO_PERMISSION)); return; } @@ -50,7 +52,7 @@ protected void execute(@NotNull CommandContext ctx, FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isOfficerOrHigher()) { - ctx.sendMessage(prefix().insert(msg("You must be an officer to set the description.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Desc.NOT_OFFICER)); return; } @@ -71,14 +73,15 @@ protected void execute(@NotNull CommandContext ctx, Faction updated = faction.withDescription(description) .withLog(FactionLog.create(FactionLog.LogType.SETTINGS_CHANGE, - description != null ? "Description set" : "Description cleared", player.getUuid())); + description != null ? "Description set" : "Description cleared", player.getUuid(), + description != null ? MessageKeys.LogsGui.MSG_DESC_SET : MessageKeys.LogsGui.MSG_DESC_CLEARED)); hyperFactions.getFactionManager().updateFaction(updated); if (description != null) { - ctx.sendMessage(prefix().insert(msg("Faction description set!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Desc.SET)); } else { - ctx.sendMessage(prefix().insert(msg("Faction description cleared.", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Desc.CLEARED)); } // After action, open settings page if not text mode diff --git a/src/main/java/com/hyperfactions/command/faction/DisbandSubCommand.java b/src/main/java/com/hyperfactions/command/faction/DisbandSubCommand.java index b461b81c..2e91d1fc 100644 --- a/src/main/java/com/hyperfactions/command/faction/DisbandSubCommand.java +++ b/src/main/java/com/hyperfactions/command/faction/DisbandSubCommand.java @@ -12,6 +12,8 @@ import com.hyperfactions.manager.ConfirmationManager; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -42,7 +44,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.DISBAND)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to disband factions.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Disband.NO_PERMISSION)); return; } @@ -54,7 +56,7 @@ protected void execute(@NotNull CommandContext ctx, // Check if leader FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isLeader()) { - ctx.sendMessage(prefix().insert(msg("Only the faction leader can disband.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Disband.NOT_LEADER)); return; } @@ -78,10 +80,8 @@ protected void execute(@NotNull CommandContext ctx, switch (confirmResult) { case NEEDS_CONFIRMATION, EXPIRED_RECREATED -> { - ctx.sendMessage(prefix().insert(msg("Are you sure you want to disband your faction?", COLOR_YELLOW))); - ctx.sendMessage(prefix().insert(msg("Type ", COLOR_YELLOW)) - .insert(msg("/f disband --text", COLOR_WHITE)) - .insert(msg(" again within " + confirmManager.getTimeoutSeconds() + " seconds to confirm.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Disband.CONFIRM_PROMPT, COLOR_YELLOW)); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Disband.CONFIRM_INSTRUCTION, COLOR_YELLOW, confirmManager.getTimeoutSeconds())); } case CONFIRMED -> { UUID factionId = faction.id(); @@ -93,13 +93,13 @@ protected void execute(@NotNull CommandContext ctx, hyperFactions.getInviteManager().clearFactionInvites(factionId); hyperFactions.getJoinRequestManager().clearFactionRequests(factionId); hyperFactions.getRelationManager().clearAllRelations(factionId); - ctx.sendMessage(prefix().insert(msg("Your faction has been disbanded.", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Disband.SUCCESS)); } else { - ctx.sendMessage(prefix().insert(msg("Failed to disband faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Disband.FAILED)); } } case DIFFERENT_ACTION -> { - ctx.sendMessage(prefix().insert(msg("Previous confirmation cancelled. Type again to confirm disband.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Disband.CANCELLED, COLOR_YELLOW)); } default -> throw new IllegalStateException("Unexpected value"); } diff --git a/src/main/java/com/hyperfactions/command/faction/OpenSubCommand.java b/src/main/java/com/hyperfactions/command/faction/OpenSubCommand.java index 2e934b7d..60702100 100644 --- a/src/main/java/com/hyperfactions/command/faction/OpenSubCommand.java +++ b/src/main/java/com/hyperfactions/command/faction/OpenSubCommand.java @@ -9,6 +9,8 @@ import com.hyperfactions.data.FactionLog; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -38,7 +40,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.OPEN)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Open.NO_PERMISSION)); return; } @@ -49,24 +51,24 @@ protected void execute(@NotNull CommandContext ctx, FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isLeader()) { - ctx.sendMessage(prefix().insert(msg("Only the leader can change this setting.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Open.NOT_LEADER)); return; } if (faction.open()) { - ctx.sendMessage(prefix().insert(msg("Your faction is already open.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Open.ALREADY_OPEN, COLOR_YELLOW)); return; } Faction updated = faction.withOpen(true) .withLog(FactionLog.create(FactionLog.LogType.SETTINGS_CHANGE, - "Faction set to open", player.getUuid())); + "Faction set to open", player.getUuid(), + MessageKeys.LogsGui.MSG_SET_OPEN)); hyperFactions.getFactionManager().updateFaction(updated); - ctx.sendMessage(prefix().insert(msg("Your faction is now open! Anyone can join with /f join.", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" opened the faction to public joining.", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Open.SUCCESS)); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Open.BROADCAST, player.getUsername())); // After action, open settings page if not text mode String[] rawArgs = CommandUtil.parseRawArgs(ctx.getInputString(), 2); diff --git a/src/main/java/com/hyperfactions/command/faction/RenameSubCommand.java b/src/main/java/com/hyperfactions/command/faction/RenameSubCommand.java index a9ee6341..9c90fde6 100644 --- a/src/main/java/com/hyperfactions/command/faction/RenameSubCommand.java +++ b/src/main/java/com/hyperfactions/command/faction/RenameSubCommand.java @@ -10,6 +10,8 @@ import com.hyperfactions.data.FactionLog; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -39,7 +41,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.RENAME)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rename.NO_PERMISSION)); return; } @@ -50,7 +52,7 @@ protected void execute(@NotNull CommandContext ctx, FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isLeader()) { - ctx.sendMessage(prefix().insert(msg("Only the leader can rename the faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rename.NOT_LEADER)); return; } @@ -68,7 +70,7 @@ protected void execute(@NotNull CommandContext ctx, // Text mode requires args if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f rename ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rename.USAGE)); return; } @@ -76,22 +78,23 @@ protected void execute(@NotNull CommandContext ctx, ConfigManager config = ConfigManager.get(); if (newName.length() < config.getMinNameLength()) { - ctx.sendMessage(prefix().insert(msg("Name is too short (min " + config.getMinNameLength() + " chars).", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rename.TOO_SHORT, config.getMinNameLength())); return; } if (newName.length() > config.getMaxNameLength()) { - ctx.sendMessage(prefix().insert(msg("Name is too long (max " + config.getMaxNameLength() + " chars).", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rename.TOO_LONG, config.getMaxNameLength())); return; } if (hyperFactions.getFactionManager().isNameTaken(newName) && !newName.equalsIgnoreCase(faction.name())) { - ctx.sendMessage(prefix().insert(msg("That name is already taken.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rename.NAME_TAKEN)); return; } String oldName = faction.name(); Faction updated = faction.withName(newName) .withLog(FactionLog.create(FactionLog.LogType.SETTINGS_CHANGE, - "Renamed from '" + oldName + "' to '" + newName + "'", player.getUuid())); + "Renamed from '" + oldName + "' to '" + newName + "'", player.getUuid(), + MessageKeys.LogsGui.MSG_RENAMED, oldName, newName)); hyperFactions.getFactionManager().updateFaction(updated); @@ -100,11 +103,8 @@ protected void execute(@NotNull CommandContext ctx, hyperFactions.getWorldMapService().triggerFactionWideRefresh(faction.id()); } - ctx.sendMessage(prefix().insert(msg("Faction renamed to ", COLOR_GREEN)) - .insert(msg(newName, COLOR_CYAN)).insert(msg("!", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" renamed the faction to ", COLOR_GREEN)) - .insert(msg(newName, COLOR_CYAN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Rename.SUCCESS, newName)); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Rename.BROADCAST, player.getUsername(), newName)); // After action, open settings page if not text mode if (fctx.shouldOpenGuiAfterAction()) { diff --git a/src/main/java/com/hyperfactions/command/info/HelpSubCommand.java b/src/main/java/com/hyperfactions/command/info/HelpSubCommand.java index f60e771b..7d0829aa 100644 --- a/src/main/java/com/hyperfactions/command/info/HelpSubCommand.java +++ b/src/main/java/com/hyperfactions/command/info/HelpSubCommand.java @@ -10,6 +10,8 @@ import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.CommandHelp; import com.hyperfactions.util.HelpFormatter; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -43,7 +45,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.HELP)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view help.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.HELP_NO_PERMISSION)); return; } diff --git a/src/main/java/com/hyperfactions/command/info/InfoSubCommand.java b/src/main/java/com/hyperfactions/command/info/InfoSubCommand.java index 061fecb3..d0dd7c07 100644 --- a/src/main/java/com/hyperfactions/command/info/InfoSubCommand.java +++ b/src/main/java/com/hyperfactions/command/info/InfoSubCommand.java @@ -11,6 +11,8 @@ import com.hyperfactions.data.RelationType; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -43,7 +45,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.INFO)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view faction info.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.NO_PERMISSION)); return; } @@ -55,13 +57,13 @@ protected void execute(@NotNull CommandContext ctx, String factionName = fctx.joinArgs(); faction = hyperFactions.getFactionManager().getFactionByName(factionName); if (faction == null) { - ctx.sendMessage(prefix().insert(msg("Faction '" + factionName + "' not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.FACTION_NOT_FOUND, factionName)); return; } } else { faction = hyperFactions.getFactionManager().getPlayerFaction(player.getUuid()); if (faction == null) { - ctx.sendMessage(MessageUtil.error("You are not in a faction. Use /f info ")); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.NOT_IN_FACTION_HINT)); return; } } @@ -79,39 +81,29 @@ protected void execute(@NotNull CommandContext ctx, PowerManager.FactionPowerStats stats = hyperFactions.getPowerManager().getFactionPowerStats(faction.id()); FactionMember leader = faction.getLeader(); - ctx.sendMessage(msg("=== " + faction.name() + " ===", COLOR_CYAN).bold(true)); - ctx.sendMessage(msg("Leader: ", COLOR_GRAY).insert(msg(leader != null ? leader.username() : "None", COLOR_YELLOW))); - ctx.sendMessage(msg("Members: ", COLOR_GRAY).insert(msg(faction.getMemberCount() + "/" + ConfigManager.get().getMaxMembers(), COLOR_WHITE))); - ctx.sendMessage(msg("Power: ", COLOR_GRAY).insert(msg(String.format("%.1f/%.1f", stats.currentPower(), stats.maxPower()), COLOR_WHITE))); - ctx.sendMessage(msg("Claims: ", COLOR_GRAY).insert(msg(stats.currentClaims() + "/" + stats.maxClaims(), COLOR_WHITE))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.FACTION_HEADER, faction.name()), COLOR_CYAN).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.LEADER, leader != null ? leader.username() : HFMessages.get(player, MessageKeys.Common.NONE)), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.MEMBERS, faction.getMemberCount(), ConfigManager.get().getMaxMembers()), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.POWER, String.format("%.1f/%.1f", stats.currentPower(), stats.maxPower())), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.CLAIMS, stats.currentClaims() + "/" + stats.maxClaims()), COLOR_GRAY)); if (stats.isRaidable()) { - ctx.sendMessage(msg("RAIDABLE!", COLOR_RED).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.RAIDABLE), COLOR_RED).bold(true)); } // Relation info var relationManager = hyperFactions.getRelationManager(); int allyCount = relationManager.getAllies(faction.id()).size(); int enemyCount = relationManager.getEnemies(faction.id()).size(); - ctx.sendMessage(msg("Allies: ", COLOR_GRAY).insert(msg(String.valueOf(allyCount), COLOR_GREEN))); - ctx.sendMessage(msg("Enemies: ", COLOR_GRAY).insert(msg(String.valueOf(enemyCount), COLOR_RED))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.ALLIES, allyCount), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.ENEMIES, enemyCount), COLOR_GRAY)); // Show bidirectional relation if viewer is in a different faction Faction viewerFaction = hyperFactions.getFactionManager().getPlayerFaction(player.getUuid()); if (viewerFaction != null && !viewerFaction.id().equals(faction.id())) { RelationType theyThinkOfUs = relationManager.getRelation(faction.id(), viewerFaction.id()); RelationType weThinkOfThem = relationManager.getRelation(viewerFaction.id(), faction.id()); - ctx.sendMessage(msg("They consider you: ", COLOR_GRAY) - .insert(msg(theyThinkOfUs.name(), relationColor(theyThinkOfUs)))); - ctx.sendMessage(msg("You consider them: ", COLOR_GRAY) - .insert(msg(weThinkOfThem.name(), relationColor(weThinkOfThem)))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.THEY_CONSIDER, theyThinkOfUs.name()), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.YOU_CONSIDER, weThinkOfThem.name()), COLOR_GRAY)); } } - - private String relationColor(RelationType type) { - return switch (type) { - case ALLY, OWN -> COLOR_GREEN; - case ENEMY -> COLOR_RED; - case NEUTRAL -> COLOR_GRAY; - }; - } } diff --git a/src/main/java/com/hyperfactions/command/info/ListSubCommand.java b/src/main/java/com/hyperfactions/command/info/ListSubCommand.java index 7b1f25a7..b98a24fc 100644 --- a/src/main/java/com/hyperfactions/command/info/ListSubCommand.java +++ b/src/main/java/com/hyperfactions/command/info/ListSubCommand.java @@ -8,6 +8,9 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -40,7 +43,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.LIST)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view faction list.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.LIST_NO_PERMISSION)); return; } @@ -59,16 +62,16 @@ protected void execute(@NotNull CommandContext ctx, // Text mode: output to chat Collection factions = hyperFactions.getFactionManager().getAllFactions(); if (factions.isEmpty()) { - ctx.sendMessage(prefix().insert(msg("There are no factions.", COLOR_GRAY))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Info.LIST_EMPTY, COLOR_GRAY)); return; } - ctx.sendMessage(msg("=== Factions (" + factions.size() + ") ===", COLOR_CYAN).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.LIST_HEADER, factions.size()), COLOR_CYAN).bold(true)); for (Faction faction : factions) { PowerManager.FactionPowerStats stats = hyperFactions.getPowerManager().getFactionPowerStats(faction.id()); - String raidable = stats.isRaidable() ? " [RAIDABLE]" : ""; - ctx.sendMessage(msg(faction.name(), COLOR_YELLOW) - .insert(msg(" - " + faction.getMemberCount() + " members, " + String.format("%.0f", stats.currentPower()) + " power" + raidable, COLOR_GRAY))); + String key = stats.isRaidable() ? MessageKeys.Info.LIST_ENTRY_RAIDABLE : MessageKeys.Info.LIST_ENTRY; + ctx.sendMessage(msg(HFMessages.get(player, key, + faction.name(), faction.getMemberCount(), String.format("%.0f", stats.currentPower())), COLOR_GRAY)); } } } diff --git a/src/main/java/com/hyperfactions/command/info/MapSubCommand.java b/src/main/java/com/hyperfactions/command/info/MapSubCommand.java index 3a0ce5e3..677bf25b 100644 --- a/src/main/java/com/hyperfactions/command/info/MapSubCommand.java +++ b/src/main/java/com/hyperfactions/command/info/MapSubCommand.java @@ -7,6 +7,9 @@ import com.hyperfactions.command.util.CommandUtil; import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.ChunkUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.math.vector.Vector3d; @@ -40,7 +43,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.MAP)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view the map.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.MAP_NO_PERMISSION)); return; } @@ -68,7 +71,7 @@ protected void execute(@NotNull CommandContext ctx, UUID playerFactionId = hyperFactions.getFactionManager().getPlayerFactionId(player.getUuid()); - ctx.sendMessage(msg("=== Territory Map ===", COLOR_CYAN).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.MAP_HEADER), COLOR_CYAN).bold(true)); for (int dz = -3; dz <= 3; dz++) { StringBuilder row = new StringBuilder(); @@ -90,7 +93,7 @@ protected void execute(@NotNull CommandContext ctx, } ctx.sendMessage(Message.raw(row.toString())); } - ctx.sendMessage(msg("Legend: +You /Own /Ally /Enemy -Wild", COLOR_GRAY)); - ctx.sendMessage(msg("Use /f gui for interactive map", COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.MAP_LEGEND), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.MAP_GUI_HINT), COLOR_GRAY)); } } diff --git a/src/main/java/com/hyperfactions/command/info/MembersSubCommand.java b/src/main/java/com/hyperfactions/command/info/MembersSubCommand.java index 85a1a9b6..46de7449 100644 --- a/src/main/java/com/hyperfactions/command/info/MembersSubCommand.java +++ b/src/main/java/com/hyperfactions/command/info/MembersSubCommand.java @@ -9,6 +9,9 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -39,7 +42,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.MEMBERS)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view faction members.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.MEMBERS_NO_PERMISSION)); return; } @@ -62,7 +65,7 @@ protected void execute(@NotNull CommandContext ctx, // Text mode: output member list to chat List members = faction.getMembersSorted(); - ctx.sendMessage(msg("=== " + faction.name() + " Members (" + members.size() + ") ===", COLOR_CYAN).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.MEMBERS_HEADER, faction.name(), members.size()), COLOR_CYAN).bold(true)); for (FactionMember member : members) { String roleColor = switch (member.role()) { @@ -71,7 +74,7 @@ protected void execute(@NotNull CommandContext ctx, default -> COLOR_GRAY; }; boolean isOnline = plugin.getTrackedPlayer(member.uuid()) != null; - String status = isOnline ? " [Online]" : ""; + String status = isOnline ? " " + HFMessages.get(player, MessageKeys.Info.MEMBER_ONLINE) : ""; ctx.sendMessage(msg(ConfigManager.get().getRoleDisplayName(member.role()) + " ", roleColor) .insert(msg(member.username(), COLOR_WHITE)) .insert(msg(status, isOnline ? COLOR_GREEN : COLOR_GRAY))); diff --git a/src/main/java/com/hyperfactions/command/info/PowerSubCommand.java b/src/main/java/com/hyperfactions/command/info/PowerSubCommand.java index 81d51213..bdd714dc 100644 --- a/src/main/java/com/hyperfactions/command/info/PowerSubCommand.java +++ b/src/main/java/com/hyperfactions/command/info/PowerSubCommand.java @@ -7,6 +7,9 @@ import com.hyperfactions.command.util.CommandUtil; import com.hyperfactions.data.PlayerPower; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.PlayerResolver; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -38,7 +41,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.POWER)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view power info.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Power.NO_PERMISSION)); return; } @@ -56,7 +59,7 @@ protected void execute(@NotNull CommandContext ctx, // Look up target player using centralized resolver var resolved = PlayerResolver.resolve(hyperFactions, fctx.getArg(0)); if (resolved == null) { - ctx.sendMessage(prefix().insert(msg("Player not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.PLAYER_NOT_FOUND)); return; } targetUuid = resolved.uuid(); @@ -65,8 +68,8 @@ protected void execute(@NotNull CommandContext ctx, // Power info is text-only (no GUI mode needed) PlayerPower power = hyperFactions.getPowerManager().getPlayerPower(targetUuid); - ctx.sendMessage(msg(targetName + "'s Power:", COLOR_CYAN)); - ctx.sendMessage(msg("Current: ", COLOR_GRAY).insert(msg(String.format("%.1f/%.1f (%d%%)", - power.power(), power.getEffectiveMaxPower(), power.getPowerPercent()), COLOR_WHITE))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Power.HEADER, targetName), COLOR_CYAN)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Power.CURRENT, + String.format("%.1f/%.1f (%d%%)", power.power(), power.getEffectiveMaxPower(), power.getPowerPercent())), COLOR_GRAY)); } } diff --git a/src/main/java/com/hyperfactions/command/info/WhoSubCommand.java b/src/main/java/com/hyperfactions/command/info/WhoSubCommand.java index 3c0a4e1c..f5ee9baf 100644 --- a/src/main/java/com/hyperfactions/command/info/WhoSubCommand.java +++ b/src/main/java/com/hyperfactions/command/info/WhoSubCommand.java @@ -10,6 +10,9 @@ import com.hyperfactions.data.FactionMember; import com.hyperfactions.data.PlayerPower; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.PlayerResolver; import com.hyperfactions.util.TimeUtil; import com.hypixel.hytale.component.Ref; @@ -42,7 +45,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.WHO)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view player info.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Info.WHO_NO_PERMISSION)); return; } @@ -60,7 +63,7 @@ protected void execute(@NotNull CommandContext ctx, // Look up target player using centralized resolver var resolved = PlayerResolver.resolve(hyperFactions, fctx.getArg(0)); if (resolved == null) { - ctx.sendMessage(prefix().insert(msg("Player not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.PLAYER_NOT_FOUND)); return; } targetUuid = resolved.uuid(); @@ -85,14 +88,14 @@ protected void execute(@NotNull CommandContext ctx, boolean isOnline = plugin.getTrackedPlayer(targetUuid) != null; // Display info - ctx.sendMessage(msg("=== " + targetName + " ===", COLOR_CYAN)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.PLAYER_HEADER, targetName), COLOR_CYAN)); if (faction != null && member != null) { - ctx.sendMessage(msg("Faction: ", COLOR_GRAY).insert(msg(faction.name(), COLOR_WHITE))); - ctx.sendMessage(msg("Role: ", COLOR_GRAY).insert(msg(ConfigManager.get().getRoleDisplayName(member.role()), COLOR_WHITE))); - ctx.sendMessage(msg("Joined: ", COLOR_GRAY).insert(msg(TimeUtil.formatRelative(member.joinedAt()), COLOR_WHITE))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.WHO_FACTION, faction.name()), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.WHO_ROLE, ConfigManager.get().getRoleDisplayName(member.role())), COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.WHO_JOINED, TimeUtil.formatRelative(member.joinedAt())), COLOR_GRAY)); } else { - ctx.sendMessage(msg("Faction: ", COLOR_GRAY).insert(msg("None", COLOR_WHITE))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.WHO_FACTION_NONE), COLOR_GRAY)); } // Power display — hardcore mode shows faction power, normal mode shows player power @@ -109,11 +112,12 @@ protected void execute(@NotNull CommandContext ctx, PlayerPower power = hyperFactions.getPowerManager().getPlayerPower(targetUuid); powerText = String.format("%.1f/%.1f", power.power(), power.getEffectiveMaxPower()); } - ctx.sendMessage(msg("Power: ", COLOR_GRAY).insert(msg(powerText, COLOR_WHITE))); - ctx.sendMessage(msg("Status: ", COLOR_GRAY).insert(msg(isOnline ? "Online" : "Offline", isOnline ? COLOR_GREEN : COLOR_RED))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.WHO_POWER, powerText), COLOR_GRAY)); + String statusText = isOnline ? HFMessages.get(player, MessageKeys.Common.ONLINE) : HFMessages.get(player, MessageKeys.Common.OFFLINE); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.WHO_STATUS, statusText), COLOR_GRAY)); if (!isOnline && member != null) { - ctx.sendMessage(msg("Last seen: ", COLOR_GRAY).insert(msg(TimeUtil.formatRelative(member.lastOnline()), COLOR_WHITE))); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Info.WHO_LAST_SEEN, TimeUtil.formatRelative(member.lastOnline())), COLOR_GRAY)); } } } diff --git a/src/main/java/com/hyperfactions/command/member/AcceptSubCommand.java b/src/main/java/com/hyperfactions/command/member/AcceptSubCommand.java index d08bbb92..0c45d138 100644 --- a/src/main/java/com/hyperfactions/command/member/AcceptSubCommand.java +++ b/src/main/java/com/hyperfactions/command/member/AcceptSubCommand.java @@ -9,6 +9,8 @@ import com.hyperfactions.data.PendingInvite; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -41,19 +43,17 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.JOIN)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to join factions.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.NO_PERMISSION)); return; } if (hyperFactions.getFactionManager().isInFaction(player.getUuid())) { Faction existingFaction = hyperFactions.getFactionManager().getPlayerFaction(player.getUuid()); if (existingFaction != null) { - ctx.sendMessage(prefix().insert(msg("You are already in ", COLOR_RED)) - .insert(msg(existingFaction.name(), COLOR_CYAN)) - .insert(msg(".", COLOR_RED))); - ctx.sendMessage(prefix().insert(msg("Use /f leave first if you want to join another faction.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.ALREADY_IN_NAMED, existingFaction.name())); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Join.USE_LEAVE_HINT, COLOR_YELLOW)); } else { - ctx.sendMessage(prefix().insert(msg("You are already in a faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.ALREADY_IN_FACTION)); } return; } @@ -73,7 +73,7 @@ protected void execute(@NotNull CommandContext ctx, } if (invites.isEmpty()) { - ctx.sendMessage(prefix().insert(msg("You have no pending invites.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.NO_INVITES)); return; } @@ -82,12 +82,12 @@ protected void execute(@NotNull CommandContext ctx, String factionName = fctx.joinArgs(); Faction targetFaction = hyperFactions.getFactionManager().getFactionByName(factionName); if (targetFaction == null) { - ctx.sendMessage(prefix().insert(msg("Faction '" + factionName + "' not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.FACTION_NOT_FOUND, factionName)); return; } invite = hyperFactions.getInviteManager().getInvite(targetFaction.id(), player.getUuid()); if (invite == null) { - ctx.sendMessage(prefix().insert(msg("You have no invite from that faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.NOT_INVITED)); return; } } else { @@ -96,7 +96,7 @@ protected void execute(@NotNull CommandContext ctx, Faction faction = hyperFactions.getFactionManager().getFaction(invite.factionId()); if (faction == null) { - ctx.sendMessage(prefix().insert(msg("That faction no longer exists.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.FACTION_GONE)); hyperFactions.getInviteManager().removeInvite(invite.factionId(), player.getUuid()); return; } @@ -108,14 +108,12 @@ protected void execute(@NotNull CommandContext ctx, if (result == FactionManager.FactionResult.SUCCESS) { hyperFactions.getInviteManager().clearPlayerInvites(player.getUuid()); hyperFactions.getJoinRequestManager().clearPlayerRequests(player.getUuid()); - ctx.sendMessage(prefix().insert(msg("You have joined ", COLOR_GREEN)) - .insert(msg(faction.name(), COLOR_CYAN)).insert(msg("!", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" has joined the faction!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Join.SUCCESS, faction.name())); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Join.BROADCAST, player.getUsername())); } else if (result == FactionManager.FactionResult.FACTION_FULL) { - ctx.sendMessage(prefix().insert(msg("That faction is full.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.FACTION_FULL)); } else { - ctx.sendMessage(prefix().insert(msg("Failed to join faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Join.FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/member/DemoteSubCommand.java b/src/main/java/com/hyperfactions/command/member/DemoteSubCommand.java index c8cbf833..757ec1b4 100644 --- a/src/main/java/com/hyperfactions/command/member/DemoteSubCommand.java +++ b/src/main/java/com/hyperfactions/command/member/DemoteSubCommand.java @@ -11,6 +11,8 @@ import com.hyperfactions.data.FactionRole; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -40,7 +42,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.DEMOTE)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to demote members.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.DEMOTE_NO_PERMISSION)); return; } @@ -53,7 +55,7 @@ protected void execute(@NotNull CommandContext ctx, FactionCommandContext fctx = parseContext(rawArgs); if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f demote ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.DEMOTE_USAGE)); return; } @@ -63,7 +65,7 @@ protected void execute(@NotNull CommandContext ctx, .findFirst().orElse(null); if (target == null) { - ctx.sendMessage(prefix().insert(msg("Player not found in your faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.PLAYER_NOT_IN_FACTION)); return; } @@ -74,10 +76,8 @@ protected void execute(@NotNull CommandContext ctx, switch (result) { case SUCCESS -> { String memberName = ConfigManager.get().getRoleDisplayName(FactionRole.MEMBER); - ctx.sendMessage(prefix().insert(msg("Demoted ", COLOR_GREEN)) - .insert(msg(target.username(), COLOR_YELLOW)).insert(msg(" to " + memberName + ".", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(target.username(), COLOR_YELLOW)) - .insert(msg(" was demoted to " + memberName + ".", COLOR_RED))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Rank.DEMOTED, target.username(), memberName)); + broadcastToFaction(faction.id(), MessageUtil.error(player, MessageKeys.Rank.DEMOTE_BROADCAST, target.username(), memberName)); // Show members page after action (if not text mode) if (!fctx.isTextMode()) { Player playerEntity = store.getComponent(ref, Player.getComponentType()); @@ -86,9 +86,9 @@ protected void execute(@NotNull CommandContext ctx, } } } - case NOT_LEADER -> ctx.sendMessage(prefix().insert(msg("Only the leader can demote members.", COLOR_RED))); - case CANNOT_DEMOTE_MEMBER -> ctx.sendMessage(prefix().insert(msg("That player is already a Member.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to demote player.", COLOR_RED))); + case NOT_LEADER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.MUST_BE_LEADER)); + case CANNOT_DEMOTE_MEMBER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.ALREADY_LOWEST)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.DEMOTE_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/member/InviteSubCommand.java b/src/main/java/com/hyperfactions/command/member/InviteSubCommand.java index f6c2fd43..d231a190 100644 --- a/src/main/java/com/hyperfactions/command/member/InviteSubCommand.java +++ b/src/main/java/com/hyperfactions/command/member/InviteSubCommand.java @@ -8,6 +8,8 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -37,7 +39,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.INVITE)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to invite players.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Invite.NO_PERMISSION)); return; } @@ -48,7 +50,7 @@ protected void execute(@NotNull CommandContext ctx, FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isOfficerOrHigher()) { - ctx.sendMessage(prefix().insert(msg("You must be an officer to invite players.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Invite.NOT_OFFICER)); return; } @@ -65,29 +67,26 @@ protected void execute(@NotNull CommandContext ctx, } if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f invite ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Invite.USAGE)); return; } String targetName = fctx.getArg(0); PlayerRef target = findOnlinePlayer(targetName); if (target == null) { - ctx.sendMessage(prefix().insert(msg("Player '" + targetName + "' not found or offline.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Invite.PLAYER_NOT_FOUND, targetName)); return; } if (hyperFactions.getFactionManager().isInFaction(target.getUuid())) { - ctx.sendMessage(prefix().insert(msg("That player is already in a faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Invite.TARGET_IN_FACTION)); return; } hyperFactions.getInviteManager().createInvite(faction.id(), target.getUuid(), player.getUuid()); - ctx.sendMessage(prefix().insert(msg("Invited ", COLOR_GREEN)) - .insert(msg(target.getUsername(), COLOR_YELLOW)).insert(msg(" to your faction.", COLOR_GREEN))); - target.sendMessage(prefix().insert(msg("You have been invited to join ", COLOR_YELLOW)) - .insert(msg(faction.name(), COLOR_CYAN)).insert(msg("!", COLOR_YELLOW))); - target.sendMessage(prefix().insert(msg("Type ", COLOR_YELLOW)) - .insert(msg("/f accept " + faction.name(), COLOR_GREEN)).insert(msg(" to join.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Invite.SENT, target.getUsername())); + target.sendMessage(MessageUtil.info(target, MessageKeys.Invite.RECEIVED, COLOR_YELLOW, faction.name())); + target.sendMessage(MessageUtil.info(target, MessageKeys.Invite.ACCEPT_HINT, COLOR_YELLOW, faction.name())); } } diff --git a/src/main/java/com/hyperfactions/command/member/KickSubCommand.java b/src/main/java/com/hyperfactions/command/member/KickSubCommand.java index 694fadb9..0a796747 100644 --- a/src/main/java/com/hyperfactions/command/member/KickSubCommand.java +++ b/src/main/java/com/hyperfactions/command/member/KickSubCommand.java @@ -9,6 +9,8 @@ import com.hyperfactions.data.FactionMember; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -38,7 +40,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.KICK)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to kick members.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Kick.NO_PERMISSION)); return; } @@ -51,7 +53,7 @@ protected void execute(@NotNull CommandContext ctx, FactionCommandContext fctx = parseContext(rawArgs); if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f kick ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Kick.USAGE)); return; } @@ -61,7 +63,7 @@ protected void execute(@NotNull CommandContext ctx, .findFirst().orElse(null); if (target == null) { - ctx.sendMessage(prefix().insert(msg("Player '" + targetName + "' is not in your faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Kick.NOT_IN_YOUR_FACTION, targetName)); return; } @@ -71,13 +73,11 @@ protected void execute(@NotNull CommandContext ctx, switch (result) { case SUCCESS -> { - ctx.sendMessage(prefix().insert(msg("Kicked ", COLOR_GREEN)) - .insert(msg(target.username(), COLOR_YELLOW)).insert(msg(" from the faction.", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(target.username(), COLOR_YELLOW)) - .insert(msg(" was kicked from the faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Kick.SUCCESS, target.username())); + broadcastToFaction(faction.id(), MessageUtil.error(player, MessageKeys.Kick.BROADCAST, target.username())); PlayerRef targetPlayer = plugin.getTrackedPlayer(target.uuid()); if (targetPlayer != null) { - targetPlayer.sendMessage(prefix().insert(msg("You have been kicked from the faction.", COLOR_RED))); + targetPlayer.sendMessage(MessageUtil.error(targetPlayer, MessageKeys.Kick.KICKED)); } // Show members page after action (if not text mode) @@ -88,9 +88,9 @@ protected void execute(@NotNull CommandContext ctx, } } } - case NOT_OFFICER -> ctx.sendMessage(prefix().insert(msg("You don't have permission to kick that player.", COLOR_RED))); - case CANNOT_KICK_LEADER -> ctx.sendMessage(prefix().insert(msg("You cannot kick the faction leader.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to kick player.", COLOR_RED))); + case NOT_OFFICER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Kick.CANNOT_KICK_HIGHER)); + case CANNOT_KICK_LEADER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Kick.CANNOT_KICK_LEADER)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Kick.FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/member/LeaveSubCommand.java b/src/main/java/com/hyperfactions/command/member/LeaveSubCommand.java index 20977ea1..91176bca 100644 --- a/src/main/java/com/hyperfactions/command/member/LeaveSubCommand.java +++ b/src/main/java/com/hyperfactions/command/member/LeaveSubCommand.java @@ -13,6 +13,8 @@ import com.hyperfactions.manager.ConfirmationManager; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -43,7 +45,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.LEAVE)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to leave factions.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Leave.NO_PERMISSION)); return; } @@ -78,10 +80,9 @@ protected void execute(@NotNull CommandContext ctx, switch (confirmResult) { case NEEDS_CONFIRMATION, EXPIRED_RECREATED -> { - ctx.sendMessage(prefix().insert(msg("Are you sure you want to leave your faction?", COLOR_YELLOW))); - ctx.sendMessage(prefix().insert(msg("Type ", COLOR_YELLOW)) - .insert(msg("/f leave --text", COLOR_WHITE)) - .insert(msg(" again within " + confirmManager.getTimeoutSeconds() + " seconds to confirm.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Leave.CONFIRM_PROMPT, COLOR_YELLOW)); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Leave.CONFIRM_INSTRUCTION, COLOR_YELLOW, + confirmManager.getTimeoutSeconds())); } case CONFIRMED -> { UUID factionId = faction.id(); @@ -89,15 +90,14 @@ protected void execute(@NotNull CommandContext ctx, factionId, player.getUuid(), player.getUuid(), false ); if (result == FactionManager.FactionResult.SUCCESS) { - ctx.sendMessage(prefix().insert(msg("You have left your faction.", COLOR_GREEN))); - broadcastToFaction(factionId, prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" has left the faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Leave.SUCCESS)); + broadcastToFaction(factionId, MessageUtil.error(player, MessageKeys.Leave.BROADCAST, player.getUsername())); } else { - ctx.sendMessage(prefix().insert(msg("Failed to leave faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Leave.FAILED)); } } case DIFFERENT_ACTION -> { - ctx.sendMessage(prefix().insert(msg("Previous confirmation cancelled. Type again to confirm leave.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Leave.CANCELLED, COLOR_YELLOW)); } default -> throw new IllegalStateException("Unexpected value"); } diff --git a/src/main/java/com/hyperfactions/command/member/PromoteSubCommand.java b/src/main/java/com/hyperfactions/command/member/PromoteSubCommand.java index 7548a6f4..2ecd1f23 100644 --- a/src/main/java/com/hyperfactions/command/member/PromoteSubCommand.java +++ b/src/main/java/com/hyperfactions/command/member/PromoteSubCommand.java @@ -11,6 +11,8 @@ import com.hyperfactions.data.FactionRole; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -40,7 +42,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.PROMOTE)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to promote members.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.PROMOTE_NO_PERMISSION)); return; } @@ -53,7 +55,7 @@ protected void execute(@NotNull CommandContext ctx, FactionCommandContext fctx = parseContext(rawArgs); if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f promote ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.PROMOTE_USAGE)); return; } @@ -63,7 +65,7 @@ protected void execute(@NotNull CommandContext ctx, .findFirst().orElse(null); if (target == null) { - ctx.sendMessage(prefix().insert(msg("Player not found in your faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.PLAYER_NOT_IN_FACTION)); return; } @@ -74,10 +76,8 @@ protected void execute(@NotNull CommandContext ctx, switch (result) { case SUCCESS -> { String officerName = ConfigManager.get().getRoleDisplayName(FactionRole.OFFICER); - ctx.sendMessage(prefix().insert(msg("Promoted ", COLOR_GREEN)) - .insert(msg(target.username(), COLOR_YELLOW)).insert(msg(" to " + officerName + "!", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(target.username(), COLOR_YELLOW)) - .insert(msg(" was promoted to " + officerName + "!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Rank.PROMOTED, target.username(), officerName)); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Rank.PROMOTE_BROADCAST, target.username(), officerName)); // Show members page after action (if not text mode) if (!fctx.isTextMode()) { Player playerEntity = store.getComponent(ref, Player.getComponentType()); @@ -86,9 +86,9 @@ protected void execute(@NotNull CommandContext ctx, } } } - case NOT_LEADER -> ctx.sendMessage(prefix().insert(msg("Only the leader can promote members.", COLOR_RED))); - case CANNOT_PROMOTE_LEADER -> ctx.sendMessage(prefix().insert(msg("Cannot promote further. Use /f transfer to change leader.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to promote player.", COLOR_RED))); + case NOT_LEADER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.MUST_BE_LEADER)); + case CANNOT_PROMOTE_LEADER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.ALREADY_HIGHEST)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.PROMOTE_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/member/TransferSubCommand.java b/src/main/java/com/hyperfactions/command/member/TransferSubCommand.java index ca766ec8..8d0cdaac 100644 --- a/src/main/java/com/hyperfactions/command/member/TransferSubCommand.java +++ b/src/main/java/com/hyperfactions/command/member/TransferSubCommand.java @@ -12,6 +12,8 @@ import com.hyperfactions.manager.ConfirmationManager; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -41,7 +43,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.TRANSFER)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to transfer leadership.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.TRANSFER_NO_PERMISSION)); return; } @@ -53,7 +55,7 @@ protected void execute(@NotNull CommandContext ctx, // Check if leader FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isLeader()) { - ctx.sendMessage(prefix().insert(msg("Only the leader can transfer leadership.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.MUST_BE_LEADER)); return; } @@ -61,7 +63,7 @@ protected void execute(@NotNull CommandContext ctx, FactionCommandContext fctx = parseContext(rawArgs); if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f transfer ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.TRANSFER_USAGE)); return; } @@ -71,7 +73,7 @@ protected void execute(@NotNull CommandContext ctx, .findFirst().orElse(null); if (target == null) { - ctx.sendMessage(prefix().insert(msg("Player not found in your faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.PLAYER_NOT_IN_FACTION)); return; } @@ -93,27 +95,23 @@ protected void execute(@NotNull CommandContext ctx, switch (confirmResult) { case NEEDS_CONFIRMATION, EXPIRED_RECREATED -> { - ctx.sendMessage(prefix().insert(msg("Are you sure you want to transfer leadership to ", COLOR_YELLOW)) - .insert(msg(target.username(), COLOR_WHITE)).insert(msg("?", COLOR_YELLOW))); - ctx.sendMessage(prefix().insert(msg("Type ", COLOR_YELLOW)) - .insert(msg("/f transfer " + target.username() + " --text", COLOR_WHITE)) - .insert(msg(" again within " + confirmManager.getTimeoutSeconds() + " seconds to confirm.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Rank.TRANSFER_CONFIRM, COLOR_YELLOW, target.username())); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Rank.TRANSFER_CONFIRM_INSTRUCTION, COLOR_YELLOW, + target.username(), confirmManager.getTimeoutSeconds())); } case CONFIRMED -> { FactionManager.FactionResult result = hyperFactions.getFactionManager().transferLeadership( faction.id(), target.uuid(), player.getUuid() ); if (result == FactionManager.FactionResult.SUCCESS) { - ctx.sendMessage(prefix().insert(msg("Transferred leadership to ", COLOR_GREEN)) - .insert(msg(target.username(), COLOR_YELLOW)).insert(msg("!", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(target.username(), COLOR_YELLOW)) - .insert(msg(" is now the faction leader!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Rank.TRANSFERRED, target.username())); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Rank.TRANSFER_BROADCAST, target.username())); } else { - ctx.sendMessage(prefix().insert(msg("Failed to transfer leadership.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Rank.TRANSFER_FAILED)); } } case DIFFERENT_ACTION -> { - ctx.sendMessage(prefix().insert(msg("Previous confirmation cancelled. Type again to confirm transfer.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Rank.TRANSFER_CANCELLED, COLOR_YELLOW)); } default -> throw new IllegalStateException("Unexpected value"); } diff --git a/src/main/java/com/hyperfactions/command/relation/AllySubCommand.java b/src/main/java/com/hyperfactions/command/relation/AllySubCommand.java index 97767485..fa48f858 100644 --- a/src/main/java/com/hyperfactions/command/relation/AllySubCommand.java +++ b/src/main/java/com/hyperfactions/command/relation/AllySubCommand.java @@ -8,6 +8,7 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.RelationManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -38,7 +39,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.ALLY)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to manage alliances.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ALLY_NO_PERMISSION)); return; } @@ -60,34 +61,28 @@ protected void execute(@NotNull CommandContext ctx, } if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f ally ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ALLY_USAGE)); return; } String factionName = fctx.joinArgs(); Faction targetFaction = hyperFactions.getFactionManager().getFactionByName(factionName); if (targetFaction == null) { - ctx.sendMessage(prefix().insert(msg("Faction '" + factionName + "' not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.FACTION_NOT_FOUND)); return; } RelationManager.RelationResult result = hyperFactions.getRelationManager().requestAlly(player.getUuid(), targetFaction.id()); switch (result) { - case REQUEST_SENT -> { - ctx.sendMessage(prefix().insert(msg("Ally request sent to ", COLOR_GREEN)) - .insert(msg(targetFaction.name(), COLOR_CYAN)).insert(msg("!", COLOR_GREEN))); - } - case REQUEST_ACCEPTED -> { - ctx.sendMessage(prefix().insert(msg("You are now allies with ", COLOR_GREEN)) - .insert(msg(targetFaction.name(), COLOR_CYAN)).insert(msg("!", COLOR_GREEN))); - } - case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error("You are not in a faction.")); - case NOT_OFFICER -> ctx.sendMessage(prefix().insert(msg("You must be an officer to manage relations.", COLOR_RED))); - case CANNOT_RELATE_SELF -> ctx.sendMessage(prefix().insert(msg("You cannot ally with yourself.", COLOR_RED))); - case ALREADY_ALLY -> ctx.sendMessage(prefix().insert(msg("You are already allied with that faction.", COLOR_RED))); - case ALLY_LIMIT_REACHED -> ctx.sendMessage(prefix().insert(msg("You have reached the maximum number of allies.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to send ally request.", COLOR_RED))); + case REQUEST_SENT -> ctx.sendMessage(MessageUtil.success(player, MessageKeys.Relation.ALLY_SENT, targetFaction.name())); + case REQUEST_ACCEPTED -> ctx.sendMessage(MessageUtil.success(player, MessageKeys.Relation.ALLY_FORMED, targetFaction.name())); + case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); + case NOT_OFFICER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.MUST_BE_OFFICER)); + case CANNOT_RELATE_SELF -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.CANNOT_SELF)); + case ALREADY_ALLY -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ALREADY_ALLY)); + case ALLY_LIMIT_REACHED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.MAX_ALLIES)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ALLY_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/relation/EnemySubCommand.java b/src/main/java/com/hyperfactions/command/relation/EnemySubCommand.java index d5f4da6a..0a221725 100644 --- a/src/main/java/com/hyperfactions/command/relation/EnemySubCommand.java +++ b/src/main/java/com/hyperfactions/command/relation/EnemySubCommand.java @@ -8,6 +8,7 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.RelationManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -38,7 +39,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.ENEMY)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to declare enemies.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ENEMY_NO_PERMISSION)); return; } @@ -60,27 +61,26 @@ protected void execute(@NotNull CommandContext ctx, } if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f enemy ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ENEMY_USAGE)); return; } String factionName = fctx.joinArgs(); Faction targetFaction = hyperFactions.getFactionManager().getFactionByName(factionName); if (targetFaction == null) { - ctx.sendMessage(prefix().insert(msg("Faction '" + factionName + "' not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.FACTION_NOT_FOUND)); return; } RelationManager.RelationResult result = hyperFactions.getRelationManager().setEnemy(player.getUuid(), targetFaction.id()); switch (result) { - case SUCCESS -> ctx.sendMessage(prefix().insert(msg(targetFaction.name(), COLOR_RED)) - .insert(msg(" is now your enemy!", COLOR_RED))); - case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error("You are not in a faction.")); - case NOT_OFFICER -> ctx.sendMessage(prefix().insert(msg("You must be an officer to manage relations.", COLOR_RED))); - case ALREADY_ENEMY -> ctx.sendMessage(prefix().insert(msg("You are already enemies with that faction.", COLOR_RED))); - case ENEMY_LIMIT_REACHED -> ctx.sendMessage(prefix().insert(msg("You have reached the maximum number of enemies.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to set enemy.", COLOR_RED))); + case SUCCESS -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ENEMY_DECLARED, targetFaction.name())); + case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); + case NOT_OFFICER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.MUST_BE_OFFICER)); + case ALREADY_ENEMY -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ALREADY_ENEMY)); + case ENEMY_LIMIT_REACHED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.MAX_ENEMIES)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ENEMY_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/relation/NeutralSubCommand.java b/src/main/java/com/hyperfactions/command/relation/NeutralSubCommand.java index 6a37e6af..ddadcbb9 100644 --- a/src/main/java/com/hyperfactions/command/relation/NeutralSubCommand.java +++ b/src/main/java/com/hyperfactions/command/relation/NeutralSubCommand.java @@ -8,6 +8,7 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.RelationManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -38,7 +39,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.NEUTRAL)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to set neutral relations.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.NEUTRAL_NO_PERMISSION)); return; } @@ -60,25 +61,25 @@ protected void execute(@NotNull CommandContext ctx, } if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f neutral ", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.NEUTRAL_USAGE)); return; } String factionName = fctx.joinArgs(); Faction targetFaction = hyperFactions.getFactionManager().getFactionByName(factionName); if (targetFaction == null) { - ctx.sendMessage(prefix().insert(msg("Faction '" + factionName + "' not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.FACTION_NOT_FOUND)); return; } RelationManager.RelationResult result = hyperFactions.getRelationManager().setNeutral(player.getUuid(), targetFaction.id()); switch (result) { - case SUCCESS -> ctx.sendMessage(prefix().insert(msg("Your faction is now neutral with " + targetFaction.name() + ".", COLOR_GRAY))); - case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error("You are not in a faction.")); - case NOT_OFFICER -> ctx.sendMessage(prefix().insert(msg("You must be an officer to manage relations.", COLOR_RED))); - case ALREADY_NEUTRAL -> ctx.sendMessage(prefix().insert(msg("You are already neutral with that faction.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to set neutral.", COLOR_RED))); + case SUCCESS -> ctx.sendMessage(MessageUtil.info(player, MessageKeys.Relation.NEUTRAL_SET, COLOR_GRAY, targetFaction.name())); + case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); + case NOT_OFFICER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.MUST_BE_OFFICER)); + case ALREADY_NEUTRAL -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.ALREADY_NEUTRAL)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.NEUTRAL_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/relation/RelationsSubCommand.java b/src/main/java/com/hyperfactions/command/relation/RelationsSubCommand.java index 95d94d74..878e08b6 100644 --- a/src/main/java/com/hyperfactions/command/relation/RelationsSubCommand.java +++ b/src/main/java/com/hyperfactions/command/relation/RelationsSubCommand.java @@ -7,6 +7,9 @@ import com.hyperfactions.command.util.CommandUtil; import com.hyperfactions.data.Faction; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -38,7 +41,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.RELATIONS)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to view relations.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Relation.VIEW_NO_PERMISSION)); return; } @@ -63,28 +66,28 @@ protected void execute(@NotNull CommandContext ctx, List allies = hyperFactions.getRelationManager().getAllies(faction.id()); List enemies = hyperFactions.getRelationManager().getEnemies(faction.id()); - ctx.sendMessage(msg("=== Faction Relations ===", COLOR_CYAN).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Relation.HEADER), COLOR_CYAN).bold(true)); - ctx.sendMessage(msg("Allies (" + allies.size() + "):", COLOR_GREEN)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Relation.ALLIES_COUNT, allies.size()), COLOR_GREEN)); if (allies.isEmpty()) { - ctx.sendMessage(msg(" (none)", COLOR_GRAY)); + ctx.sendMessage(msg(" (" + HFMessages.get(player, MessageKeys.Common.NONE) + ")", COLOR_GRAY)); } else { for (UUID allyId : allies) { Faction ally = hyperFactions.getFactionManager().getFaction(allyId); if (ally != null) { - ctx.sendMessage(msg(" - ", COLOR_GRAY).insert(msg(ally.name(), COLOR_GREEN))); + ctx.sendMessage(msg(" ", COLOR_GRAY).insert(msg(HFMessages.get(player, MessageKeys.Relation.LIST_ENTRY, ally.name()), COLOR_GREEN))); } } } - ctx.sendMessage(msg("Enemies (" + enemies.size() + "):", COLOR_RED)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Relation.ENEMIES_COUNT, enemies.size()), COLOR_RED)); if (enemies.isEmpty()) { - ctx.sendMessage(msg(" (none)", COLOR_GRAY)); + ctx.sendMessage(msg(" (" + HFMessages.get(player, MessageKeys.Common.NONE) + ")", COLOR_GRAY)); } else { for (UUID enemyId : enemies) { Faction enemy = hyperFactions.getFactionManager().getFaction(enemyId); if (enemy != null) { - ctx.sendMessage(msg(" - ", COLOR_GRAY).insert(msg(enemy.name(), COLOR_RED))); + ctx.sendMessage(msg(" ", COLOR_GRAY).insert(msg(HFMessages.get(player, MessageKeys.Relation.LIST_ENTRY, enemy.name()), COLOR_RED))); } } } diff --git a/src/main/java/com/hyperfactions/command/social/ChatSubCommand.java b/src/main/java/com/hyperfactions/command/social/ChatSubCommand.java index cf0dea1d..ea79b2c9 100644 --- a/src/main/java/com/hyperfactions/command/social/ChatSubCommand.java +++ b/src/main/java/com/hyperfactions/command/social/ChatSubCommand.java @@ -6,6 +6,8 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.ChatManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -68,7 +70,7 @@ protected void execute(@NotNull CommandContext ctx, yield new ChatManager.ToggleResult(ChatManager.ChatResult.SUCCESS, ChatManager.ChatChannel.NORMAL); } default -> { - ctx.sendMessage(prefix().insert(msg("Usage: /f c [f|a|off]", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Chat.USAGE)); yield null; } }; @@ -79,7 +81,7 @@ protected void execute(@NotNull CommandContext ctx, } if (!result.isSuccess()) { - ctx.sendMessage(prefix().insert(msg("You don't have permission for that chat mode.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Chat.NO_PERMISSION)); return; } @@ -87,8 +89,6 @@ protected void execute(@NotNull CommandContext ctx, String display = ChatManager.getChannelDisplay(channel); String color = ChatManager.getChannelColor(channel); - ctx.sendMessage(prefix() - .insert(msg("Chat mode set to ", COLOR_GRAY)) - .insert(msg(display, color))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Chat.MODE_SET, color, display)); } } diff --git a/src/main/java/com/hyperfactions/command/social/InvitesSubCommand.java b/src/main/java/com/hyperfactions/command/social/InvitesSubCommand.java index 8c5cc52a..63bd6f43 100644 --- a/src/main/java/com/hyperfactions/command/social/InvitesSubCommand.java +++ b/src/main/java/com/hyperfactions/command/social/InvitesSubCommand.java @@ -9,6 +9,9 @@ import com.hyperfactions.data.JoinRequest; import com.hyperfactions.data.PendingInvite; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -47,7 +50,7 @@ protected void execute(@NotNull CommandContext ctx, if (faction != null) { FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isOfficerOrHigher()) { - ctx.sendMessage(prefix().insert(msg("You must be an officer to manage invites.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Invites.NOT_OFFICER)); return; } @@ -64,32 +67,32 @@ protected void execute(@NotNull CommandContext ctx, List invites = hyperFactions.getInviteManager().getFactionInvitesList(faction.id()); List requests = hyperFactions.getJoinRequestManager().getFactionRequests(faction.id()); - ctx.sendMessage(msg("=== Faction Invites ===", COLOR_CYAN).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Invites.HEADER), COLOR_CYAN).bold(true)); if (invites.isEmpty() && requests.isEmpty()) { - ctx.sendMessage(msg("No pending invites or requests.", COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Invites.NO_PENDING), COLOR_GRAY)); return; } if (!invites.isEmpty()) { - ctx.sendMessage(msg("Outgoing Invites:", COLOR_YELLOW)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Invites.OUTGOING), COLOR_YELLOW)); for (PendingInvite invite : invites) { String inviterName = plugin.getTrackedPlayer(invite.invitedBy()) != null ? plugin.getTrackedPlayer(invite.invitedBy()).getUsername() - : "Unknown"; - ctx.sendMessage(msg(" - ", COLOR_GRAY) - .insert(msg(invite.playerUuid().toString().substring(0, 8), COLOR_WHITE)) - .insert(msg(" (invited by " + inviterName + ")", COLOR_GRAY))); + : HFMessages.get(player, MessageKeys.Common.UNKNOWN); + ctx.sendMessage(msg(" ", COLOR_GRAY) + .insert(msg(HFMessages.get(player, MessageKeys.Invites.OUTGOING_ENTRY, + invite.playerUuid().toString().substring(0, 8), inviterName), COLOR_WHITE))); } } if (!requests.isEmpty()) { - ctx.sendMessage(msg("Join Requests:", COLOR_GREEN)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Invites.REQUESTS), COLOR_GREEN)); for (JoinRequest request : requests) { String message = request.message() != null ? " \"" + request.message() + "\"" : ""; - ctx.sendMessage(msg(" - ", COLOR_GRAY) - .insert(msg(request.playerName(), COLOR_WHITE)) - .insert(msg(message, COLOR_GRAY))); + ctx.sendMessage(msg(" ", COLOR_GRAY) + .insert(msg(HFMessages.get(player, MessageKeys.Invites.REQUEST_ENTRY, + request.playerName(), message), COLOR_WHITE))); } } } else { @@ -106,19 +109,19 @@ protected void execute(@NotNull CommandContext ctx, // Text mode: show incoming invites List invites = hyperFactions.getInviteManager().getPlayerInvites(player.getUuid()); - ctx.sendMessage(msg("=== Your Invites ===", COLOR_CYAN).bold(true)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Invites.YOUR_INVITES_HEADER), COLOR_CYAN).bold(true)); if (invites.isEmpty()) { - ctx.sendMessage(msg("You have no pending invites.", COLOR_GRAY)); + ctx.sendMessage(msg(HFMessages.get(player, MessageKeys.Invites.NO_INVITES), COLOR_GRAY)); return; } for (PendingInvite invite : invites) { Faction invitingFaction = hyperFactions.getFactionManager().getFaction(invite.factionId()); if (invitingFaction != null) { - ctx.sendMessage(msg(" - ", COLOR_GRAY) - .insert(msg(invitingFaction.name(), COLOR_YELLOW)) - .insert(msg(" - Use /f accept " + invitingFaction.name(), COLOR_GRAY))); + ctx.sendMessage(msg(" ", COLOR_GRAY) + .insert(msg(HFMessages.get(player, MessageKeys.Invites.INVITE_ENTRY, + invitingFaction.name(), invitingFaction.name()), COLOR_YELLOW))); } } } diff --git a/src/main/java/com/hyperfactions/command/social/RequestSubCommand.java b/src/main/java/com/hyperfactions/command/social/RequestSubCommand.java index 23ac510f..3af34cd4 100644 --- a/src/main/java/com/hyperfactions/command/social/RequestSubCommand.java +++ b/src/main/java/com/hyperfactions/command/social/RequestSubCommand.java @@ -10,6 +10,8 @@ import com.hyperfactions.manager.InviteManager; import com.hyperfactions.manager.JoinRequestManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -41,7 +43,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.JOIN)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to request faction membership.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Request.NO_PERMISSION)); return; } @@ -49,12 +51,10 @@ protected void execute(@NotNull CommandContext ctx, if (hyperFactions.getFactionManager().isInFaction(player.getUuid())) { Faction existingFaction = hyperFactions.getFactionManager().getPlayerFaction(player.getUuid()); if (existingFaction != null) { - ctx.sendMessage(prefix().insert(msg("You are already in ", COLOR_RED)) - .insert(msg(existingFaction.name(), COLOR_CYAN)) - .insert(msg(".", COLOR_RED))); - ctx.sendMessage(prefix().insert(msg("Use /f leave first if you want to join another faction.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Request.ALREADY_IN_NAMED, existingFaction.name())); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Request.USE_LEAVE_HINT, COLOR_YELLOW)); } else { - ctx.sendMessage(prefix().insert(msg("You are already in a faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.ALREADY_IN_FACTION)); } return; } @@ -73,7 +73,7 @@ protected void execute(@NotNull CommandContext ctx, // Text mode requires faction name if (!fctx.hasArgs()) { - ctx.sendMessage(prefix().insert(msg("Usage: /f request [message]", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Request.USAGE)); return; } @@ -81,31 +81,27 @@ protected void execute(@NotNull CommandContext ctx, String factionName = fctx.getArg(0); Faction faction = hyperFactions.getFactionManager().getFactionByName(factionName); if (faction == null) { - ctx.sendMessage(prefix().insert(msg("Faction '" + factionName + "' not found.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.FACTION_NOT_FOUND)); return; } // Check if faction is open (if open, just join directly) if (faction.open()) { - ctx.sendMessage(prefix().insert(msg("That faction is open! Use ", COLOR_YELLOW)) - .insert(msg("/f accept " + faction.name(), COLOR_GREEN)) - .insert(msg(" to join directly.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Request.FACTION_OPEN, COLOR_YELLOW, faction.name())); return; } // Check if player already has a pending request JoinRequestManager requestManager = hyperFactions.getJoinRequestManager(); if (requestManager.hasRequest(faction.id(), player.getUuid())) { - ctx.sendMessage(prefix().insert(msg("You already have a pending request to that faction.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Request.ALREADY_REQUESTED)); return; } // Check if player has an invite to this faction (they should accept it instead) InviteManager inviteManager = hyperFactions.getInviteManager(); if (inviteManager.hasInvite(faction.id(), player.getUuid())) { - ctx.sendMessage(prefix().insert(msg("You have been invited to that faction! Use ", COLOR_YELLOW)) - .insert(msg("/f accept " + faction.name(), COLOR_GREEN)) - .insert(msg(" to join.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Request.HAS_INVITE, COLOR_YELLOW, faction.name())); return; } @@ -122,12 +118,11 @@ protected void execute(@NotNull CommandContext ctx, // Create the join request requestManager.createRequest(faction.id(), player.getUuid(), player.getUsername(), message); - ctx.sendMessage(prefix().insert(msg("Sent join request to ", COLOR_GREEN)) - .insert(msg(faction.name(), COLOR_CYAN)).insert(msg("!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Request.SENT, faction.name())); if (message != null) { - ctx.sendMessage(prefix().insert(msg("Your message: \"" + message + "\"", COLOR_GRAY))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Request.YOUR_MESSAGE, COLOR_GRAY, message)); } - ctx.sendMessage(prefix().insert(msg("An officer will review your request.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Request.OFFICER_REVIEW, COLOR_YELLOW)); // Notify online officers for (UUID memberUuid : faction.members().keySet()) { @@ -135,11 +130,8 @@ protected void execute(@NotNull CommandContext ctx, if (member != null && member.isOfficerOrHigher()) { PlayerRef officer = plugin.getTrackedPlayer(memberUuid); if (officer != null) { - officer.sendMessage(prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" has requested to join your faction!", COLOR_GREEN))); - officer.sendMessage(prefix().insert(msg("Use ", COLOR_YELLOW)) - .insert(msg("/f gui", COLOR_GREEN)) - .insert(msg(" > Invites to review.", COLOR_YELLOW))); + officer.sendMessage(MessageUtil.success(officer, MessageKeys.Request.OFFICER_NOTIFY, player.getUsername())); + officer.sendMessage(MessageUtil.info(officer, MessageKeys.Request.OFFICER_REVIEW_HINT, COLOR_YELLOW)); } } } diff --git a/src/main/java/com/hyperfactions/command/teleport/DelHomeSubCommand.java b/src/main/java/com/hyperfactions/command/teleport/DelHomeSubCommand.java index c005f946..7102fc14 100644 --- a/src/main/java/com/hyperfactions/command/teleport/DelHomeSubCommand.java +++ b/src/main/java/com/hyperfactions/command/teleport/DelHomeSubCommand.java @@ -6,6 +6,8 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -34,7 +36,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.DELHOME)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to delete faction home.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.DELHOME_NO_PERMISSION)); return; } @@ -44,20 +46,19 @@ protected void execute(@NotNull CommandContext ctx, } if (faction.home() == null) { - ctx.sendMessage(prefix().insert(msg("Your faction does not have a home set.", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Home.DELHOME_NO_HOME, COLOR_YELLOW)); return; } FactionManager.FactionResult result = hyperFactions.getFactionManager().setHome(faction.id(), null, player.getUuid()); if (result == FactionManager.FactionResult.SUCCESS) { - ctx.sendMessage(prefix().insert(msg("Faction home deleted!", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" deleted the faction home.", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Home.DELETED)); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Home.DELHOME_BROADCAST, player.getUsername())); } else if (result == FactionManager.FactionResult.NOT_OFFICER) { - ctx.sendMessage(prefix().insert(msg("You must be an officer to delete the home.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.DELHOME_NOT_OFFICER)); } else { - ctx.sendMessage(prefix().insert(msg("Failed to delete home.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.DELHOME_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/teleport/HomeSubCommand.java b/src/main/java/com/hyperfactions/command/teleport/HomeSubCommand.java index 96de5b6f..7f2a1726 100644 --- a/src/main/java/com/hyperfactions/command/teleport/HomeSubCommand.java +++ b/src/main/java/com/hyperfactions/command/teleport/HomeSubCommand.java @@ -6,6 +6,7 @@ import com.hyperfactions.data.Faction; import com.hyperfactions.manager.TeleportManager; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -41,7 +42,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.HOME)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to teleport to faction home.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.NO_PERMISSION)); return; } @@ -79,11 +80,11 @@ protected void execute(@NotNull CommandContext ctx, // Handle immediate results (warmup teleports are handled by TerritoryTickingSystem) switch (result) { - case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error("You are not in a faction.")); - case NO_HOME -> ctx.sendMessage(prefix().insert(msg("Your faction has no home set.", COLOR_RED))); - case COMBAT_TAGGED -> ctx.sendMessage(prefix().insert(msg("You cannot teleport while in combat!", COLOR_RED))); + case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); + case NO_HOME -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.NO_HOME)); + case COMBAT_TAGGED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.COMBAT_TAGGED)); case ON_COOLDOWN -> {} // Message sent by TeleportManager - case SUCCESS_INSTANT -> ctx.sendMessage(prefix().insert(msg("Teleported to faction home!", COLOR_GREEN))); + case SUCCESS_INSTANT -> ctx.sendMessage(MessageUtil.success(player, MessageKeys.Home.TELEPORTED)); case SUCCESS_WARMUP -> {} // Message sent by TeleportManager, teleport executed by TerritoryTickingSystem default -> {} } diff --git a/src/main/java/com/hyperfactions/command/teleport/SetHomeSubCommand.java b/src/main/java/com/hyperfactions/command/teleport/SetHomeSubCommand.java index 56ee1bf5..40f43c99 100644 --- a/src/main/java/com/hyperfactions/command/teleport/SetHomeSubCommand.java +++ b/src/main/java/com/hyperfactions/command/teleport/SetHomeSubCommand.java @@ -8,6 +8,8 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.ChunkUtil; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.math.vector.Vector3d; @@ -40,12 +42,12 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.SETHOME)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to set faction home.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.SETHOME_NO_PERMISSION)); return; } if (!ConfigManager.get().isWorldAllowed(currentWorld.getName())) { - ctx.sendMessage(prefix().insert(msg("Cannot set home in this world.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.SETHOME_WORLD_NOT_ALLOWED)); return; } @@ -66,7 +68,7 @@ protected void execute(@NotNull CommandContext ctx, UUID claimOwner = hyperFactions.getClaimManager().getClaimOwner(currentWorld.getName(), chunkX, chunkZ); if (claimOwner == null || !claimOwner.equals(faction.id())) { - ctx.sendMessage(prefix().insert(msg("You can only set home in your faction's territory.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.NOT_IN_TERRITORY)); return; } @@ -78,13 +80,12 @@ protected void execute(@NotNull CommandContext ctx, FactionManager.FactionResult result = hyperFactions.getFactionManager().setHome(faction.id(), home, player.getUuid()); if (result == FactionManager.FactionResult.SUCCESS) { - ctx.sendMessage(prefix().insert(msg("Faction home set!", COLOR_GREEN))); - broadcastToFaction(faction.id(), prefix().insert(msg(player.getUsername(), COLOR_YELLOW)) - .insert(msg(" set the faction home.", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Home.SET)); + broadcastToFaction(faction.id(), MessageUtil.success(player, MessageKeys.Home.SETHOME_BROADCAST, player.getUsername())); } else if (result == FactionManager.FactionResult.NOT_OFFICER) { - ctx.sendMessage(prefix().insert(msg("You must be an officer to set the home.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.SETHOME_NOT_OFFICER)); } else { - ctx.sendMessage(prefix().insert(msg("Failed to set home.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.SETHOME_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/territory/ClaimSubCommand.java b/src/main/java/com/hyperfactions/command/territory/ClaimSubCommand.java index 329887f5..ce30da3d 100644 --- a/src/main/java/com/hyperfactions/command/territory/ClaimSubCommand.java +++ b/src/main/java/com/hyperfactions/command/territory/ClaimSubCommand.java @@ -9,6 +9,7 @@ import com.hyperfactions.manager.ClaimManager; import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.ChunkUtil; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -42,7 +43,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.CLAIM)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to claim territory.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.NO_PERMISSION)); return; } @@ -71,7 +72,7 @@ protected void execute(@NotNull CommandContext ctx, if (playerFactionId != null && playerFactionId.equals(chunkOwner) && !fctx.isTextMode()) { Player playerEntity = store.getComponent(ref, Player.getComponentType()); if (playerEntity != null) { - ctx.sendMessage(prefix().insert(msg("Your faction already owns this chunk.", COLOR_GRAY))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Claim.ALREADY_YOURS, COLOR_GRAY)); hyperFactions.getGuiManager().openChunkMap(playerEntity, ref, store, player); return; } @@ -81,11 +82,9 @@ protected void execute(@NotNull CommandContext ctx, if (chunkOwner != null && !chunkOwner.equals(playerFactionId) && !fctx.isTextMode()) { boolean isAlly = playerFactionId != null && hyperFactions.getRelationManager().areAllies(playerFactionId, chunkOwner); if (isAlly) { - ctx.sendMessage(prefix().insert(msg("You cannot claim ally territory.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.CANNOT_CLAIM_ALLY)); } else { - ctx.sendMessage(prefix().insert(msg("This chunk is claimed. Use ", COLOR_RED)) - .insert(msg("/f overclaim", COLOR_WHITE)) - .insert(msg(" if they are raidable.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.ALREADY_CLAIMED_HINT)); } Player playerEntity = store.getComponent(ref, Player.getComponentType()); if (playerEntity != null) { @@ -101,7 +100,7 @@ protected void execute(@NotNull CommandContext ctx, switch (result) { case SUCCESS -> { - ctx.sendMessage(prefix().insert(msg("Claimed chunk at " + chunkX + ", " + chunkZ + "!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Claim.SUCCESS, chunkX, chunkZ)); // Show map after claiming (if not text mode) if (!fctx.isTextMode()) { Player playerEntity = store.getComponent(ref, Player.getComponentType()); @@ -110,16 +109,16 @@ protected void execute(@NotNull CommandContext ctx, } } } - case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error("You are not in a faction.")); - case NOT_OFFICER -> ctx.sendMessage(prefix().insert(msg("You must be an officer to claim land.", COLOR_RED))); - case ALREADY_CLAIMED_SELF -> ctx.sendMessage(prefix().insert(msg("Your faction already owns this chunk.", COLOR_RED))); - case ALREADY_CLAIMED_OTHER -> ctx.sendMessage(prefix().insert(msg("This chunk is already claimed.", COLOR_RED))); - case MAX_CLAIMS_REACHED -> ctx.sendMessage(prefix().insert(msg("Your faction has reached max claims. Get more power!", COLOR_RED))); - case NOT_ADJACENT -> ctx.sendMessage(prefix().insert(msg("You must claim adjacent to existing territory.", COLOR_RED))); - case WORLD_NOT_ALLOWED -> ctx.sendMessage(prefix().insert(msg("Claiming is not allowed in this world.", COLOR_RED))); - case ORBISGUARD_PROTECTED -> ctx.sendMessage(prefix().insert(msg("This area is protected by OrbisGuard.", COLOR_RED))); - case ZONE_PROTECTED -> ctx.sendMessage(prefix().insert(msg("This chunk is in a safezone or warzone.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to claim chunk.", COLOR_RED))); + case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); + case NOT_OFFICER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.NOT_OFFICER)); + case ALREADY_CLAIMED_SELF -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.ALREADY_YOURS)); + case ALREADY_CLAIMED_OTHER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.ALREADY_CLAIMED)); + case MAX_CLAIMS_REACHED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.MAX_CLAIMS)); + case NOT_ADJACENT -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.NOT_CONNECTED)); + case WORLD_NOT_ALLOWED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.WORLD_NOT_ALLOWED)); + case ORBISGUARD_PROTECTED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.ORBISGUARD)); + case ZONE_PROTECTED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.ZONE_PROTECTED)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/territory/OverclaimSubCommand.java b/src/main/java/com/hyperfactions/command/territory/OverclaimSubCommand.java index b905585a..96fb5374 100644 --- a/src/main/java/com/hyperfactions/command/territory/OverclaimSubCommand.java +++ b/src/main/java/com/hyperfactions/command/territory/OverclaimSubCommand.java @@ -9,6 +9,7 @@ import com.hyperfactions.manager.ClaimManager; import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.ChunkUtil; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -41,7 +42,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.OVERCLAIM)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to overclaim territory.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.OVERCLAIM_NO_PERMISSION)); return; } @@ -68,7 +69,7 @@ protected void execute(@NotNull CommandContext ctx, switch (result) { case SUCCESS -> { - ctx.sendMessage(prefix().insert(msg("Overclaimed enemy territory!", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Claim.OVERCLAIMED)); // Show map after overclaiming (if not text mode) if (!fctx.isTextMode()) { Player playerEntity = store.getComponent(ref, Player.getComponentType()); @@ -77,14 +78,14 @@ protected void execute(@NotNull CommandContext ctx, } } } - case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error("You are not in a faction.")); - case NOT_OFFICER -> ctx.sendMessage(prefix().insert(msg("You must be an officer to overclaim.", COLOR_RED))); - case CHUNK_NOT_CLAIMED -> ctx.sendMessage(prefix().insert(msg("This chunk is not claimed. Use /f claim.", COLOR_RED))); - case ALREADY_CLAIMED_SELF -> ctx.sendMessage(prefix().insert(msg("Your faction already owns this chunk.", COLOR_RED))); - case ALREADY_CLAIMED_ALLY -> ctx.sendMessage(prefix().insert(msg("You cannot overclaim ally territory.", COLOR_RED))); - case TARGET_HAS_POWER -> ctx.sendMessage(prefix().insert(msg("This faction still has enough power.", COLOR_RED))); - case MAX_CLAIMS_REACHED -> ctx.sendMessage(prefix().insert(msg("Your faction has reached max claims.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to overclaim.", COLOR_RED))); + case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); + case NOT_OFFICER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.OVERCLAIM_NOT_OFFICER)); + case CHUNK_NOT_CLAIMED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.OVERCLAIM_NOT_CLAIMED)); + case ALREADY_CLAIMED_SELF -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.OVERCLAIM_OWN)); + case ALREADY_CLAIMED_ALLY -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.OVERCLAIM_ALLY)); + case TARGET_HAS_POWER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.TARGET_HAS_POWER)); + case MAX_CLAIMS_REACHED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.MAX_CLAIMS)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.OVERCLAIM_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/territory/StuckSubCommand.java b/src/main/java/com/hyperfactions/command/territory/StuckSubCommand.java index 0d2aacfa..85acaa86 100644 --- a/src/main/java/com/hyperfactions/command/territory/StuckSubCommand.java +++ b/src/main/java/com/hyperfactions/command/territory/StuckSubCommand.java @@ -5,6 +5,8 @@ import com.hyperfactions.command.FactionSubCommand; import com.hyperfactions.config.ConfigManager; import com.hyperfactions.data.Faction; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hyperfactions.manager.TeleportManager; import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.ChunkUtil; @@ -47,7 +49,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.STUCK)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to use /f stuck.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.STUCK_NO_PERMISSION)); return; } @@ -67,20 +69,20 @@ protected void execute(@NotNull CommandContext ctx, Faction playerFaction = hyperFactions.getFactionManager().getPlayerFaction(playerUuid); if (claimOwner == null) { - ctx.sendMessage(prefix().insert(msg("You're not stuck - this is wilderness.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.STUCK_NOT_STUCK)); return; } // Combat check if (hyperFactions.getCombatTagManager().isTagged(playerUuid)) { - ctx.sendMessage(prefix().insert(msg("You cannot use /f stuck while in combat!", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.STUCK_COMBAT_TAGGED)); return; } // Find nearest safe chunk int[] safeChunk = findNearestSafeChunk(currentWorld.getName(), chunkX, chunkZ); if (safeChunk == null) { - ctx.sendMessage(prefix().insert(msg("Could not find a safe location.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Home.STUCK_NO_SAFE)); return; } @@ -112,7 +114,7 @@ protected void execute(@NotNull CommandContext ctx, "Teleported to safety!" ); - ctx.sendMessage(prefix().insert(msg("Teleporting to safety in " + warmupSeconds + " seconds. Don't move!", COLOR_YELLOW))); + ctx.sendMessage(MessageUtil.info(player, MessageKeys.Home.STUCK_TELEPORTING, COLOR_YELLOW, warmupSeconds)); } /** diff --git a/src/main/java/com/hyperfactions/command/territory/UnclaimSubCommand.java b/src/main/java/com/hyperfactions/command/territory/UnclaimSubCommand.java index 06f656d8..ebc90d48 100644 --- a/src/main/java/com/hyperfactions/command/territory/UnclaimSubCommand.java +++ b/src/main/java/com/hyperfactions/command/territory/UnclaimSubCommand.java @@ -9,6 +9,7 @@ import com.hyperfactions.manager.ClaimManager; import com.hyperfactions.platform.HyperFactionsPlugin; import com.hyperfactions.util.ChunkUtil; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -41,7 +42,7 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(player, Permissions.UNCLAIM)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission to unclaim territory.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.UNCLAIM_NO_PERMISSION)); return; } @@ -68,7 +69,7 @@ protected void execute(@NotNull CommandContext ctx, switch (result) { case SUCCESS -> { - ctx.sendMessage(prefix().insert(msg("Unclaimed chunk at " + chunkX + ", " + chunkZ + ".", COLOR_GREEN))); + ctx.sendMessage(MessageUtil.success(player, MessageKeys.Claim.UNCLAIMED, chunkX, chunkZ)); // Show map after unclaiming (if not text mode) if (!fctx.isTextMode()) { Player playerEntity = store.getComponent(ref, Player.getComponentType()); @@ -77,13 +78,13 @@ protected void execute(@NotNull CommandContext ctx, } } } - case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error("You are not in a faction.")); - case NOT_OFFICER -> ctx.sendMessage(prefix().insert(msg("You must be an officer to unclaim land.", COLOR_RED))); - case CHUNK_NOT_CLAIMED -> ctx.sendMessage(prefix().insert(msg("This chunk is not claimed.", COLOR_RED))); - case NOT_YOUR_CLAIM -> ctx.sendMessage(prefix().insert(msg("Your faction doesn't own this chunk.", COLOR_RED))); - case CANNOT_UNCLAIM_HOME -> ctx.sendMessage(prefix().insert(msg("Cannot unclaim the chunk with faction home.", COLOR_RED))); - case WOULD_DISCONNECT -> ctx.sendMessage(prefix().insert(msg("Cannot unclaim — it would disconnect your territory.", COLOR_RED))); - default -> ctx.sendMessage(prefix().insert(msg("Failed to unclaim chunk.", COLOR_RED))); + case NOT_IN_FACTION -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.NOT_IN_FACTION)); + case NOT_OFFICER -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.UNCLAIM_NOT_OFFICER)); + case CHUNK_NOT_CLAIMED -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.CHUNK_NOT_CLAIMED)); + case NOT_YOUR_CLAIM -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.NOT_YOUR_CLAIM)); + case CANNOT_UNCLAIM_HOME -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.CANNOT_UNCLAIM_HOME)); + case WOULD_DISCONNECT -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.WOULD_DISCONNECT)); + default -> ctx.sendMessage(MessageUtil.error(player, MessageKeys.Claim.UNCLAIM_FAILED)); } } } diff --git a/src/main/java/com/hyperfactions/command/ui/GuiSubCommand.java b/src/main/java/com/hyperfactions/command/ui/GuiSubCommand.java index 081a5b3d..bc6a200f 100644 --- a/src/main/java/com/hyperfactions/command/ui/GuiSubCommand.java +++ b/src/main/java/com/hyperfactions/command/ui/GuiSubCommand.java @@ -4,6 +4,8 @@ import com.hyperfactions.Permissions; import com.hyperfactions.command.FactionSubCommand; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -35,13 +37,13 @@ protected void execute(@NotNull CommandContext ctx, @NotNull World currentWorld) { if (!hasPermission(playerRef, Permissions.USE)) { - ctx.sendMessage(prefix().insert(msg("You don't have permission.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(playerRef, MessageKeys.Common.NO_PERMISSION)); return; } Player player = store.getComponent(ref, Player.getComponentType()); if (player == null) { - ctx.sendMessage(prefix().insert(msg("Could not find player entity.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(playerRef, MessageKeys.Common.ERROR_GENERIC)); return; } diff --git a/src/main/java/com/hyperfactions/command/ui/SettingsSubCommand.java b/src/main/java/com/hyperfactions/command/ui/SettingsSubCommand.java index 250caaba..9f0ae37a 100644 --- a/src/main/java/com/hyperfactions/command/ui/SettingsSubCommand.java +++ b/src/main/java/com/hyperfactions/command/ui/SettingsSubCommand.java @@ -2,9 +2,12 @@ import com.hyperfactions.HyperFactions; import com.hyperfactions.command.FactionSubCommand; +import com.hyperfactions.command.util.CommandUtil; import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionMember; import com.hyperfactions.platform.HyperFactionsPlugin; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.command.system.CommandContext; @@ -15,14 +18,14 @@ import org.jetbrains.annotations.NotNull; /** - * Subcommand: /f settings - * Opens the faction settings GUI. + * Subcommand: /f settings [player] + * Opens the faction settings GUI, or player settings with "player" argument. */ public class SettingsSubCommand extends FactionSubCommand { /** Creates a new SettingsSubCommand. */ public SettingsSubCommand(@NotNull HyperFactions hyperFactions, @NotNull HyperFactionsPlugin plugin) { - super("settings", "Open faction settings", hyperFactions, plugin); + super("settings", "Open faction or player settings", hyperFactions, plugin); } /** Executes the command. */ @@ -33,6 +36,17 @@ protected void execute(@NotNull CommandContext ctx, @NotNull PlayerRef player, @NotNull World currentWorld) { + // Check for "player" argument — opens personal settings (no faction required) + String[] rawArgs = CommandUtil.parseRawArgs(ctx.getInputString(), 2); + if (rawArgs.length > 0 && "player".equalsIgnoreCase(rawArgs[0])) { + Player playerEntity = store.getComponent(ref, Player.getComponentType()); + if (playerEntity != null) { + hyperFactions.getGuiManager().openPlayerSettings(playerEntity, ref, store, player); + } + return; + } + + // Default: open faction settings (requires faction + officer) Faction faction = requireFaction(ctx, player); if (faction == null) { return; @@ -40,7 +54,7 @@ protected void execute(@NotNull CommandContext ctx, FactionMember member = faction.getMember(player.getUuid()); if (member == null || !member.isOfficerOrHigher()) { - ctx.sendMessage(prefix().insert(msg("You must be an officer to access settings.", COLOR_RED))); + ctx.sendMessage(MessageUtil.error(player, MessageKeys.Common.MUST_BE_OFFICER)); return; } diff --git a/src/main/java/com/hyperfactions/config/ConfigManager.java b/src/main/java/com/hyperfactions/config/ConfigManager.java index 462631fa..bb431cb1 100644 --- a/src/main/java/com/hyperfactions/config/ConfigManager.java +++ b/src/main/java/com/hyperfactions/config/ConfigManager.java @@ -1230,6 +1230,17 @@ public int getChatHistoryCleanupIntervalMinutes() { return chatConfig.getHistoryCleanupIntervalMinutes(); } + // Language / i18n (from server config) + /** Returns the default server language code (e.g. "en-US"). */ + @NotNull public String getDefaultLanguage() { + return serverConfig.getDefaultLanguage(); + } + + /** Whether to respect each player's client language for translations. */ + public boolean isUsePlayerLanguage() { + return serverConfig.isUsePlayerLanguage(); + } + // Permissions (from server config) public boolean isAdminRequiresOp() { return serverConfig.isAdminRequiresOp(); diff --git a/src/main/java/com/hyperfactions/config/modules/ServerConfig.java b/src/main/java/com/hyperfactions/config/modules/ServerConfig.java index 01a8e2c2..28836632 100644 --- a/src/main/java/com/hyperfactions/config/modules/ServerConfig.java +++ b/src/main/java/com/hyperfactions/config/modules/ServerConfig.java @@ -76,6 +76,11 @@ public class ServerConfig extends ModuleConfig { private int mobClearIntervalSeconds = 10; + // Language / i18n settings + private String defaultLanguage = "en-US"; + + private boolean usePlayerLanguage = true; + // HyperProtect-Mixin management private boolean hyperProtectAutoDownload = false; @@ -165,6 +170,13 @@ protected void loadModuleSettings(@NotNull JsonObject root) { allowWithoutPermissionMod = getBool(permissions, "allowWithoutPermissionMod", allowWithoutPermissionMod); } + // Language / i18n settings + if (hasSection(root, "language")) { + JsonObject language = root.getAsJsonObject("language"); + defaultLanguage = getString(language, "default", defaultLanguage); + usePlayerLanguage = getBool(language, "usePlayerLanguage", usePlayerLanguage); + } + // Mob clearing settings if (hasSection(root, "mobClearing")) { JsonObject mobClearing = root.getAsJsonObject("mobClearing"); @@ -244,6 +256,12 @@ protected void writeModuleSettings(@NotNull JsonObject root) { permissions.addProperty("allowWithoutPermissionMod", allowWithoutPermissionMod); root.add("permissions", permissions); + // Language / i18n settings + JsonObject language = new JsonObject(); + language.addProperty("default", defaultLanguage); + language.addProperty("usePlayerLanguage", usePlayerLanguage); + root.add("language", language); + // Mob clearing settings JsonObject mobClearing = new JsonObject(); mobClearing.addProperty("enabled", mobClearEnabled); @@ -377,6 +395,17 @@ public int getMobClearIntervalSeconds() { return mobClearIntervalSeconds; } + // Language / i18n + /** Returns the default server language code (e.g. "en-US"). */ + @NotNull public String getDefaultLanguage() { + return defaultLanguage; + } + + /** Whether to respect each player's client language for translations. */ + public boolean isUsePlayerLanguage() { + return usePlayerLanguage; + } + // HyperProtect-Mixin /** Checks if hyper protect auto download. */ public boolean isHyperProtectAutoDownload() { diff --git a/src/main/java/com/hyperfactions/data/Faction.java b/src/main/java/com/hyperfactions/data/Faction.java index c5ca822f..29b8a181 100644 --- a/src/main/java/com/hyperfactions/data/Faction.java +++ b/src/main/java/com/hyperfactions/data/Faction.java @@ -1,6 +1,7 @@ package com.hyperfactions.data; import com.hyperfactions.util.LegacyColorParser; +import com.hyperfactions.util.MessageKeys; import java.util.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -74,7 +75,8 @@ public static Faction create(@NotNull String name, @NotNull UUID leaderUuid, @No members.put(leaderUuid, leader); List logs = new ArrayList<>(); - logs.add(FactionLog.create(FactionLog.LogType.MEMBER_JOIN, leaderName + " created the faction", leaderUuid)); + logs.add(FactionLog.create(FactionLog.LogType.MEMBER_JOIN, leaderName + " created the faction", leaderUuid, + MessageKeys.LogsGui.MSG_FACTION_CREATED, leaderName)); return new Faction( UUID.randomUUID(), diff --git a/src/main/java/com/hyperfactions/data/FactionLog.java b/src/main/java/com/hyperfactions/data/FactionLog.java index 90ffc32c..dcaf774d 100644 --- a/src/main/java/com/hyperfactions/data/FactionLog.java +++ b/src/main/java/com/hyperfactions/data/FactionLog.java @@ -1,5 +1,6 @@ package com.hyperfactions.data; +import java.util.List; import java.util.UUID; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -7,17 +8,32 @@ /** * Represents a log entry for faction activity. * - * @param type the type of log entry - * @param message the log message - * @param timestamp when this occurred (epoch millis) - * @param actorUuid UUID of the player who performed the action (null for system) + *

Supports i18n via optional {@code messageKey} and {@code messageArgs} fields. + * When present, display code resolves the key per-locale using HFMessages. + * The {@code message} field always contains the English fallback text. + * + * @param type the type of log entry + * @param message the log message (English fallback, always populated) + * @param timestamp when this occurred (epoch millis) + * @param actorUuid UUID of the player who performed the action (null for system) + * @param messageKey i18n message key for localized display (null for legacy logs) + * @param messageArgs arguments for the message key placeholders (null if no args) */ public record FactionLog( @NotNull LogType type, @NotNull String message, long timestamp, - @Nullable UUID actorUuid + @Nullable UUID actorUuid, + @Nullable String messageKey, + @Nullable List messageArgs ) { + + /** Backward-compatible constructor for legacy logs (no i18n key). */ + public FactionLog(@NotNull LogType type, @NotNull String message, + long timestamp, @Nullable UUID actorUuid) { + this(type, message, timestamp, actorUuid, null, null); + } + /** * Types of faction log entries. */ @@ -56,23 +72,54 @@ public String getDisplayName() { * Creates a new log entry at the current time. * * @param type the log type - * @param message the message + * @param message the English fallback message * @param actorUuid the actor's UUID * @return a new FactionLog */ public static FactionLog create(@NotNull LogType type, @NotNull String message, @Nullable UUID actorUuid) { - return new FactionLog(type, message, System.currentTimeMillis(), actorUuid); + return new FactionLog(type, message, System.currentTimeMillis(), actorUuid, null, null); + } + + /** + * Creates a new log entry with i18n support. + * + * @param type the log type + * @param message the English fallback message + * @param actorUuid the actor's UUID + * @param key the i18n message key + * @param args arguments for the message key placeholders + * @return a new FactionLog with i18n data + */ + public static FactionLog create(@NotNull LogType type, @NotNull String message, + @Nullable UUID actorUuid, @NotNull String key, String... args) { + return new FactionLog(type, message, System.currentTimeMillis(), actorUuid, + key, args.length > 0 ? List.of(args) : null); } /** * Creates a system log entry (no actor). * * @param type the log type - * @param message the message + * @param message the English fallback message * @return a new FactionLog with null actor */ public static FactionLog system(@NotNull LogType type, @NotNull String message) { - return new FactionLog(type, message, System.currentTimeMillis(), null); + return new FactionLog(type, message, System.currentTimeMillis(), null, null, null); + } + + /** + * Creates a system log entry with i18n support (no actor). + * + * @param type the log type + * @param message the English fallback message + * @param key the i18n message key + * @param args arguments for the message key placeholders + * @return a new FactionLog with i18n data and null actor + */ + public static FactionLog system(@NotNull LogType type, @NotNull String message, + @NotNull String key, String... args) { + return new FactionLog(type, message, System.currentTimeMillis(), null, + key, args.length > 0 ? List.of(args) : null); } /** diff --git a/src/main/java/com/hyperfactions/data/PlayerData.java b/src/main/java/com/hyperfactions/data/PlayerData.java index c0168811..4b19aa3a 100644 --- a/src/main/java/com/hyperfactions/data/PlayerData.java +++ b/src/main/java/com/hyperfactions/data/PlayerData.java @@ -47,6 +47,15 @@ public class PlayerData { private boolean adminBypassEnabled; + // === Player Preferences (i18n + notifications) === + private String languagePreference; + + private boolean territoryAlertsEnabled = true; + + private boolean deathAnnouncementsEnabled = true; + + private boolean powerNotificationsEnabled = true; + /** Creates a new PlayerData. */ public PlayerData() {} @@ -315,4 +324,46 @@ public boolean isAdminBypassEnabled() { public void setAdminBypassEnabled(boolean adminBypassEnabled) { this.adminBypassEnabled = adminBypassEnabled; } + + // === Player Preferences === + + /** Returns the player's preferred language, or null for auto-detect. */ + @Nullable public String getLanguagePreference() { + return languagePreference; + } + + /** Sets the player's preferred language (null = auto-detect from client/server). */ + public void setLanguagePreference(@Nullable String languagePreference) { + this.languagePreference = languagePreference; + } + + /** Whether territory entry/exit alerts are enabled for this player. */ + public boolean isTerritoryAlertsEnabled() { + return territoryAlertsEnabled; + } + + /** Sets territory entry/exit alerts enabled. */ + public void setTerritoryAlertsEnabled(boolean territoryAlertsEnabled) { + this.territoryAlertsEnabled = territoryAlertsEnabled; + } + + /** Whether faction death location broadcasts are enabled for this player. */ + public boolean isDeathAnnouncementsEnabled() { + return deathAnnouncementsEnabled; + } + + /** Sets faction death announcement broadcasts enabled. */ + public void setDeathAnnouncementsEnabled(boolean deathAnnouncementsEnabled) { + this.deathAnnouncementsEnabled = deathAnnouncementsEnabled; + } + + /** Whether power change notifications are enabled for this player. */ + public boolean isPowerNotificationsEnabled() { + return powerNotificationsEnabled; + } + + /** Sets power change notifications enabled. */ + public void setPowerNotificationsEnabled(boolean powerNotificationsEnabled) { + this.powerNotificationsEnabled = powerNotificationsEnabled; + } } diff --git a/src/main/java/com/hyperfactions/data/ZoneFlags.java b/src/main/java/com/hyperfactions/data/ZoneFlags.java index 74be315e..569a2abc 100644 --- a/src/main/java/com/hyperfactions/data/ZoneFlags.java +++ b/src/main/java/com/hyperfactions/data/ZoneFlags.java @@ -759,6 +759,18 @@ public static String getDisplayName(String flagName) { }; } + /** + * Gets the i18n lang key for a flag's display name. + * Maps flag names like "pvp_enabled" to keys like "hyperfactions_admin.gui.zflag_pvp_enabled". + * + * @param flagName the flag name + * @return the lang key for the display name + */ + @NotNull + public static String getDisplayNameKey(String flagName) { + return "hyperfactions_admin.gui.zflag_" + flagName; + } + /** * Gets a short description for a flag. * diff --git a/src/main/java/com/hyperfactions/economy/UpkeepProcessor.java b/src/main/java/com/hyperfactions/economy/UpkeepProcessor.java index e0b6b9e7..3332ef09 100644 --- a/src/main/java/com/hyperfactions/economy/UpkeepProcessor.java +++ b/src/main/java/com/hyperfactions/economy/UpkeepProcessor.java @@ -12,6 +12,7 @@ import com.hyperfactions.integration.economy.VaultEconomyProvider; import com.hyperfactions.util.ErrorHandler; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; @@ -150,7 +151,8 @@ public void processUpkeep() { "#55FF55"); logToFaction(faction.id(), FactionLog.LogType.ECONOMY, String.format("Upkeep paid: %s (%d billable chunks)", - economyManager.formatCurrency(cost), billableChunks)); + economyManager.formatCurrency(cost), billableChunks), + MessageKeys.LogsGui.MSG_UPKEEP_PAID, economyManager.formatCurrency(cost), String.valueOf(billableChunks)); paid++; Logger.debugEconomy("Upkeep paid for %s: %s (%d billable chunks)", faction.name(), economyManager.formatCurrency(cost), billableChunks); @@ -204,7 +206,8 @@ private FactionEconomy handlePaymentFailure(@NotNull Faction faction, @NotNull F reason + " Grace period: " + config.getUpkeepGracePeriodHours() + "h", "#FFAA00"); logToFaction(faction.id(), FactionLog.LogType.ECONOMY, - "Upkeep failed: grace period started (" + config.getUpkeepGracePeriodHours() + "h)"); + "Upkeep failed: grace period started (" + config.getUpkeepGracePeriodHours() + "h)", + MessageKeys.LogsGui.MSG_UPKEEP_GRACE_STARTED, String.valueOf(config.getUpkeepGracePeriodHours())); Logger.info("[Upkeep] Grace started for %s: %s (missed: %d)", faction.name(), reason, missed); return updated; @@ -225,7 +228,8 @@ private FactionEconomy handlePaymentFailure(@NotNull Faction faction, @NotNull F "Upkeep still unpaid! Grace expires in " + remaining, "#FFAA00"); logToFaction(faction.id(), FactionLog.LogType.ECONOMY, - "Upkeep missed (payment " + missed + "), grace expires in " + remaining); + "Upkeep missed (payment " + missed + "), grace expires in " + remaining, + MessageKeys.LogsGui.MSG_UPKEEP_MISSED, String.valueOf(missed), remaining); Logger.debugEconomy("Grace continues for %s: %s remaining (missed: %d)", faction.name(), remaining, missed); @@ -249,7 +253,8 @@ private FactionEconomy handlePaymentFailure(@NotNull Faction faction, @NotNull F Faction current = factionManager.getFaction(faction.id()); if (current != null) { Faction logged = current.withLog(FactionLog.create(FactionLog.LogType.UNCLAIM, - String.format("Lost %d claim(s) to upkeep (missed %d payments)", removed, missed), null)); + String.format("Lost %d claim(s) to upkeep (missed %d payments)", removed, missed), null, + MessageKeys.LogsGui.MSG_CLAIMS_LOST_UPKEEP, String.valueOf(removed), String.valueOf(missed))); factionManager.updateFaction(logged); } @@ -390,6 +395,15 @@ private void logToFaction(@NotNull UUID factionId, @NotNull FactionLog.LogType t } } + private void logToFaction(@NotNull UUID factionId, @NotNull FactionLog.LogType type, + @NotNull String message, @NotNull String key, String... args) { + Faction faction = factionManager.getFaction(factionId); + if (faction != null) { + Faction logged = faction.withLog(FactionLog.system(type, message, key, args)); + factionManager.updateFaction(logged); + } + } + private void notifyFaction(@NotNull UUID factionId, @NotNull String message, @NotNull String hexColor) { if (notificationCallback != null) { try { diff --git a/src/main/java/com/hyperfactions/gui/AdminPageOpener.java b/src/main/java/com/hyperfactions/gui/AdminPageOpener.java index cadda709..42461b9e 100644 --- a/src/main/java/com/hyperfactions/gui/AdminPageOpener.java +++ b/src/main/java/com/hyperfactions/gui/AdminPageOpener.java @@ -2,6 +2,7 @@ import com.hyperfactions.HyperFactions; import com.hyperfactions.Permissions; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionMember; import com.hyperfactions.data.FactionRole; @@ -310,7 +311,7 @@ public void openAdminEconomy(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Economy system is not enabled.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ECON_NOT_ENABLED)); return; } PageManager pageManager = player.getPageManager(); @@ -343,7 +344,7 @@ public void openAdminEconomyAdjust(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Economy system is not enabled.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ECON_NOT_ENABLED)); return; } PageManager pageManager = player.getPageManager(); @@ -371,7 +372,7 @@ public void openAdminBulkEconomy(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Economy system is not enabled.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ECON_NOT_ENABLED)); return; } PageManager pageManager = player.getPageManager(); diff --git a/src/main/java/com/hyperfactions/gui/FactionPageOpener.java b/src/main/java/com/hyperfactions/gui/FactionPageOpener.java index c05c1a4c..dc0cef77 100644 --- a/src/main/java/com/hyperfactions/gui/FactionPageOpener.java +++ b/src/main/java/com/hyperfactions/gui/FactionPageOpener.java @@ -2,6 +2,7 @@ import com.hyperfactions.HyperFactions; import com.hyperfactions.Permissions; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionMember; import com.hyperfactions.data.FactionRole; @@ -13,6 +14,7 @@ import com.hyperfactions.gui.newplayer.page.*; import com.hyperfactions.gui.shared.page.*; import com.hyperfactions.gui.test.ButtonTestPage; +import com.hyperfactions.gui.test.MarkdownTestPage; import com.hyperfactions.manager.*; import com.hyperfactions.storage.PlayerStorage; import com.hyperfactions.util.ErrorHandler; @@ -107,6 +109,27 @@ public void openFactionMain(Player player, Ref ref, } } + /** + * Opens the Player Settings page. + */ + public void openPlayerSettings(Player player, Ref ref, + Store store, PlayerRef playerRef) { + Logger.debug("[GUI] Opening PlayerSettingsPage for %s", playerRef.getUsername()); + try { + PageManager pageManager = player.getPageManager(); + PlayerSettingsPage page = new PlayerSettingsPage( + playerRef, + guiManager.getFactionManager().get(), + guiManager.getPlugin().get().getPlayerStorage(), + guiManager + ); + pageManager.openCustomPage(ref, store, page); + Logger.debug("[GUI] PlayerSettingsPage opened successfully"); + } catch (Exception e) { + ErrorHandler.report("[GUI] Failed to open PlayerSettingsPage", e); + } + } + /** * Opens the Faction Members page. * @@ -708,7 +731,7 @@ public void openFactionTreasury(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Treasury is not available.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.GuiCommon.TREASURY_NOT_AVAILABLE)); return; } PageManager pageManager = player.getPageManager(); @@ -744,7 +767,7 @@ public void openTreasuryDepositModal(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Treasury is not available.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.GuiCommon.TREASURY_NOT_AVAILABLE)); return; } var page = new TreasuryDepositModalPage(playerRef, guiManager.getFactionManager().get(), econ, @@ -765,7 +788,7 @@ public void openTreasuryTransferSearch(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Treasury is not available.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.GuiCommon.TREASURY_NOT_AVAILABLE)); return; } var page = new TreasuryTransferSearchPage(playerRef, guiManager.getFactionManager().get(), econ, @@ -787,7 +810,7 @@ public void openTreasuryTransferConfirm(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Treasury is not available.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.GuiCommon.TREASURY_NOT_AVAILABLE)); return; } var page = new TreasuryTransferConfirmPage(playerRef, guiManager.getFactionManager().get(), econ, @@ -808,7 +831,7 @@ public void openTreasurySettings(Player player, Ref ref, try { EconomyManager econ = guiManager.getPlugin().get().getEconomyManager(); if (econ == null) { - player.sendMessage(com.hyperfactions.util.MessageUtil.errorText("Treasury is not available.")); + player.sendMessage(com.hyperfactions.util.MessageUtil.errorText(playerRef, MessageKeys.GuiCommon.TREASURY_NOT_AVAILABLE)); return; } var page = new TreasurySettingsPage(playerRef, guiManager.getFactionManager().get(), econ, guiManager, faction); @@ -991,7 +1014,6 @@ public void openPlayerInfo(Player player, Ref ref, /** * Opens the button style test page. - * Temporary — DELETE after testing is complete. */ public void openButtonTestPage(Player player, Ref ref, Store store, PlayerRef playerRef) { @@ -1005,4 +1027,19 @@ public void openButtonTestPage(Player player, Ref ref, } } + /** + * Opens the markdown rendering test page. + */ + public void openMarkdownTestPage(Player player, Ref ref, + Store store, PlayerRef playerRef) { + Logger.info("[GUI] Opening MarkdownTestPage for %s", playerRef.getUsername()); + try { + PageManager pageManager = player.getPageManager(); + MarkdownTestPage page = new MarkdownTestPage(playerRef); + pageManager.openCustomPage(ref, store, page); + } catch (Exception e) { + ErrorHandler.report("[GUI] Failed to open MarkdownTestPage", e); + } + } + } diff --git a/src/main/java/com/hyperfactions/gui/GuiManager.java b/src/main/java/com/hyperfactions/gui/GuiManager.java index ae641b07..af6ed713 100644 --- a/src/main/java/com/hyperfactions/gui/GuiManager.java +++ b/src/main/java/com/hyperfactions/gui/GuiManager.java @@ -18,6 +18,7 @@ import com.hyperfactions.gui.shared.page.*; import com.hyperfactions.manager.*; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.entity.entities.Player; @@ -109,7 +110,7 @@ private void registerPages() { // If player has faction, show enhanced dashboard; otherwise show main page registry.registerEntry(new Entry( "dashboard", - "Dashboard", + MessageKeys.Nav.DASHBOARD, null, // No permission required (player, ref, store, playerRef, faction, guiManager) -> { if (faction != null) { @@ -127,7 +128,7 @@ private void registerPages() { // Chat page (faction/ally chat history with send-from-GUI) registry.registerEntry(new Entry( "chat", - "Chat", + MessageKeys.Nav.CHAT, Permissions.CHAT_FACTION, (player, ref, store, playerRef, faction, guiManager) -> { if (faction == null) { @@ -148,7 +149,7 @@ private void registerPages() { // Members page registry.registerEntry(new Entry( "members", - "Members", + MessageKeys.Nav.MEMBERS, Permissions.MEMBERS, (player, ref, store, playerRef, faction, guiManager) -> { if (faction == null) { @@ -164,7 +165,7 @@ private void registerPages() { // Invites page (officers+ only) - shows outgoing invites and incoming join requests registry.registerEntry(new Entry( "invites", - "Invites", + MessageKeys.Nav.INVITES, Permissions.INVITE, (player, ref, store, playerRef, faction, guiManager) -> { if (faction == null) { @@ -182,7 +183,7 @@ private void registerPages() { // Browser page registry.registerEntry(new Entry( "browser", - "Browse", + MessageKeys.Nav.BROWSER, null, (player, ref, store, playerRef, faction, guiManager) -> new FactionBrowserPage(playerRef, factionManager.get(), powerManager.get(), guiManager), @@ -194,7 +195,7 @@ private void registerPages() { // Map page registry.registerEntry(new Entry( "map", - "Map", + MessageKeys.Nav.MAP, Permissions.MAP, (player, ref, store, playerRef, faction, guiManager) -> new ChunkMapPage(playerRef, factionManager.get(), claimManager.get(), @@ -207,7 +208,7 @@ private void registerPages() { // Leaderboard page registry.registerEntry(new Entry( "leaderboard", - "Leaderboard", + MessageKeys.Nav.LEADERBOARD, null, (player, ref, store, playerRef, faction, guiManager) -> { EconomyManager econ = plugin.get().isTreasuryEnabled() ? plugin.get().getEconomyManager() : null; @@ -221,7 +222,7 @@ private void registerPages() { // Relations page registry.registerEntry(new Entry( "relations", - "Relations", + MessageKeys.Nav.RELATIONS, Permissions.RELATIONS, (player, ref, store, playerRef, faction, guiManager) -> { if (faction == null) { @@ -239,7 +240,7 @@ private void registerPages() { if (plugin.get().isTreasuryEnabled()) { registry.registerEntry(new Entry( "treasury", - "Treasury", + MessageKeys.Nav.TREASURY, Permissions.ECONOMY_BALANCE, (player, ref, store, playerRef, faction, guiManager) -> { if (faction == null) { @@ -260,7 +261,7 @@ private void registerPages() { // Settings page (officers+) - unified two-column layout registry.registerEntry(new Entry( "settings", - "Settings", + MessageKeys.Nav.SETTINGS, null, (player, ref, store, playerRef, faction, guiManager) -> { if (faction == null) { @@ -276,7 +277,7 @@ private void registerPages() { // Logs page (faction activity log) registry.registerEntry(new Entry( "logs", - "Logs", + MessageKeys.Nav.LOGS, Permissions.LOGS, (player, ref, store, playerRef, faction, guiManager) -> { if (faction == null) { @@ -292,7 +293,7 @@ private void registerPages() { // Help page (available to all players in faction nav bar) registry.registerEntry(new Entry( "help", - "Help", + MessageKeys.Nav.HELP, null, (player, ref, store, playerRef, faction, guiManager) -> new HelpMainPage(playerRef, guiManager, factionManager.get()), @@ -301,16 +302,29 @@ private void registerPages() { 11 )); + // Player Settings page (registered but NOT in nav bar — rendered separately on far right) + registry.registerEntry(new Entry( + "player_settings", + MessageKeys.Nav.PLAYER_SETTINGS, + null, + (player, ref, store, playerRef, faction, guiManager) -> + new PlayerSettingsPage(playerRef, factionManager.get(), + plugin.get().getPlayerStorage(), guiManager), + false, // NOT in nav bar (rendered separately on far right) + false, // Doesn't require faction + 99 + )); + // Admin page (requires permission) - accessed via /f admin, not in main nav bar registry.registerEntry(new Entry( "admin", - "Admin", + MessageKeys.Nav.ADMIN, Permissions.ADMIN, (player, ref, store, playerRef, faction, guiManager) -> new AdminMainPage(playerRef, factionManager.get(), powerManager.get(), guiManager), false, // Not in main nav bar - separate admin GUI false, - 12 + 13 )); Logger.debug("[GUI] Registered %d pages with FactionPageRegistry", registry.getEntries().size()); @@ -328,7 +342,7 @@ private void registerNewPlayerPages() { // Browse Factions (default landing page) registry.registerEntry(new NewPlayerPageRegistry.Entry( "browse", - "Browse", + MessageKeys.Nav.BROWSER, null, (player, ref, store, playerRef, guiManager) -> new NewPlayerBrowsePage(playerRef, factionManager.get(), powerManager.get(), @@ -340,7 +354,7 @@ private void registerNewPlayerPages() { // Create Faction (permission checked on actual create action, not nav visibility) registry.registerEntry(new NewPlayerPageRegistry.Entry( "create", - "Create", + MessageKeys.Nav.CREATE, null, (player, ref, store, playerRef, guiManager) -> new CreateFactionPage(playerRef, factionManager.get(), guiManager), @@ -351,7 +365,7 @@ private void registerNewPlayerPages() { // My Invites registry.registerEntry(new NewPlayerPageRegistry.Entry( "invites", - "Invites", + MessageKeys.Nav.INVITES, null, (player, ref, store, playerRef, guiManager) -> new InvitesPage(playerRef, factionManager.get(), powerManager.get(), @@ -363,7 +377,7 @@ private void registerNewPlayerPages() { // Territory Map (read-only for new players, always accessible) registry.registerEntry(new NewPlayerPageRegistry.Entry( "map", - "Map", + MessageKeys.Nav.MAP, null, (player, ref, store, playerRef, guiManager) -> new NewPlayerMapPage(playerRef, factionManager.get(), claimManager.get(), @@ -375,7 +389,7 @@ private void registerNewPlayerPages() { // Leaderboard (accessible to all players) registry.registerEntry(new NewPlayerPageRegistry.Entry( "leaderboard", - "Leaderboard", + MessageKeys.Nav.LEADERBOARD, null, (player, ref, store, playerRef, guiManager) -> { EconomyManager econ = plugin.get().isTreasuryEnabled() ? plugin.get().getEconomyManager() : null; @@ -388,7 +402,7 @@ private void registerNewPlayerPages() { // Help Page registry.registerEntry(new NewPlayerPageRegistry.Entry( "help", - "Help", + MessageKeys.Nav.HELP, null, (player, ref, store, playerRef, guiManager) -> new HelpMainPage(playerRef, guiManager, factionManager.get()), @@ -396,6 +410,18 @@ private void registerNewPlayerPages() { 5 )); + // Player Settings page (registered but NOT in nav bar — rendered separately on far right) + registry.registerEntry(new NewPlayerPageRegistry.Entry( + "player_settings", + MessageKeys.Nav.PLAYER_SETTINGS, + null, + (player, ref, store, playerRef, guiManager) -> + new PlayerSettingsPage(playerRef, factionManager.get(), + plugin.get().getPlayerStorage(), guiManager), + false, + 99 + )); + Logger.debug("[GUI] Registered %d pages with NewPlayerPageRegistry", registry.getEntries().size()); } @@ -411,7 +437,7 @@ private void registerAdminPages() { // Dashboard (server-wide stats overview) registry.registerEntry(new AdminPageRegistry.Entry( "dashboard", - "Dashboard", + MessageKeys.AdminNav.DASHBOARD, null, (player, ref, store, playerRef, guiManager) -> new AdminDashboardPage(playerRef, plugin.get(), factionManager.get(), powerManager.get(), @@ -423,7 +449,7 @@ private void registerAdminPages() { // Actions page (server-wide quick actions) registry.registerEntry(new AdminPageRegistry.Entry( "actions", - "Actions", + MessageKeys.AdminNav.ACTIONS, null, (player, ref, store, playerRef, guiManager) -> new AdminActionsPage(playerRef, plugin.get().getPlayerStorage(), guiManager, plugin.get()), @@ -434,7 +460,7 @@ private void registerAdminPages() { // Factions page (faction management with expanding rows) registry.registerEntry(new AdminPageRegistry.Entry( "factions", - "Factions", + MessageKeys.AdminNav.FACTIONS, null, (player, ref, store, playerRef, guiManager) -> new AdminFactionsPage(playerRef, factionManager.get(), powerManager.get(), guiManager), @@ -445,7 +471,7 @@ private void registerAdminPages() { // Players page (server-wide player management) registry.registerEntry(new AdminPageRegistry.Entry( "players", - "Players", + MessageKeys.AdminNav.PLAYERS, Permissions.ADMIN_POWER, (player, ref, store, playerRef, guiManager) -> new AdminPlayersPage(playerRef, factionManager.get(), powerManager.get(), @@ -458,7 +484,7 @@ private void registerAdminPages() { if (plugin.get().isTreasuryEnabled()) { registry.registerEntry(new AdminPageRegistry.Entry( "economy", - "Economy", + MessageKeys.AdminNav.ECONOMY, Permissions.ADMIN_ECONOMY, (player, ref, store, playerRef, guiManager) -> new AdminEconomyPage(playerRef, factionManager.get(), @@ -471,7 +497,7 @@ private void registerAdminPages() { // Zones page registry.registerEntry(new AdminPageRegistry.Entry( "zones", - "Zones", + MessageKeys.AdminNav.ZONES, null, (player, ref, store, playerRef, guiManager) -> new AdminZonePage(playerRef, zoneManager.get(), guiManager, "all", 0), @@ -482,7 +508,7 @@ private void registerAdminPages() { // Config page (placeholder) registry.registerEntry(new AdminPageRegistry.Entry( "config", - "Config", + MessageKeys.AdminNav.CONFIG, null, (player, ref, store, playerRef, guiManager) -> new AdminConfigPage(playerRef, guiManager), @@ -493,7 +519,7 @@ private void registerAdminPages() { // Backups page (placeholder) registry.registerEntry(new AdminPageRegistry.Entry( "backups", - "Backups", + MessageKeys.AdminNav.BACKUPS, null, (player, ref, store, playerRef, guiManager) -> new AdminBackupsPage(playerRef, guiManager), @@ -504,7 +530,7 @@ private void registerAdminPages() { // Activity Log page (global log aggregation) registry.registerEntry(new AdminPageRegistry.Entry( "log", - "Log", + MessageKeys.AdminNav.LOG, null, (player, ref, store, playerRef, guiManager) -> new AdminActivityLogPage(playerRef, factionManager.get(), guiManager), @@ -515,7 +541,7 @@ private void registerAdminPages() { // Updates page (placeholder) registry.registerEntry(new AdminPageRegistry.Entry( "updates", - "Updates", + MessageKeys.AdminNav.UPDATES, null, (player, ref, store, playerRef, guiManager) -> new AdminUpdatesPage(playerRef, guiManager), @@ -526,7 +552,7 @@ private void registerAdminPages() { // Help page (placeholder) registry.registerEntry(new AdminPageRegistry.Entry( "help", - "Help", + MessageKeys.AdminNav.HELP, null, (player, ref, store, playerRef, guiManager) -> new AdminHelpPage(playerRef, guiManager), @@ -537,7 +563,7 @@ private void registerAdminPages() { // Version page (mod versions and integration status) registry.registerEntry(new AdminPageRegistry.Entry( "version", - "Version", + MessageKeys.AdminNav.VERSION, null, (player, ref, store, playerRef, guiManager) -> new AdminVersionPage(playerRef, plugin.get(), guiManager), @@ -688,6 +714,12 @@ public void openTransferConfirm(Player player, Ref ref, factionPageOpener.openTransferConfirm(player, ref, store, playerRef, faction, targetUuid, targetName); } + /** Opens the player settings page. */ + public void openPlayerSettings(Player player, Ref ref, + Store store, PlayerRef playerRef) { + factionPageOpener.openPlayerSettings(player, ref, store, playerRef); + } + /** Opens the faction dashboard page. */ public void openFactionDashboard(Player player, Ref ref, Store store, PlayerRef playerRef, @@ -1096,12 +1128,18 @@ public void openHelp(Player player, Ref ref, newPlayerPageOpener.openHelp(player, ref, store, playerRef, category); } - /** Opens the button test page page. */ + /** Opens the button test page. */ public void openButtonTestPage(Player player, Ref ref, Store store, PlayerRef playerRef) { factionPageOpener.openButtonTestPage(player, ref, store, playerRef); } + /** Opens the markdown rendering test page. */ + public void openMarkdownTestPage(Player player, Ref ref, + Store store, PlayerRef playerRef) { + factionPageOpener.openMarkdownTestPage(player, ref, store, playerRef); + } + /** * Closes the current page. * diff --git a/src/main/java/com/hyperfactions/gui/UIPaths.java b/src/main/java/com/hyperfactions/gui/UIPaths.java index 3960241b..9457da63 100644 --- a/src/main/java/com/hyperfactions/gui/UIPaths.java +++ b/src/main/java/com/hyperfactions/gui/UIPaths.java @@ -45,6 +45,8 @@ private UIPaths() {} public static final String ERROR_PAGE = BASE + "shared/error_page.ui"; + public static final String PLAYER_SETTINGS = BASE + "shared/player_settings.ui"; + public static final String INVITE_NOTIFICATION = BASE + "shared/invite_notification.ui"; public static final String DISBAND_CONFIRM = BASE + "shared/disband_confirm.ui"; @@ -172,6 +174,24 @@ private UIPaths() {} public static final String HELP_SPACER = BASE + "help/help_spacer.ui"; + public static final String HELP_LINE_BOLD = BASE + "help/help_line_bold.ui"; + + public static final String HELP_LINE_ITALIC = BASE + "help/help_line_italic.ui"; + + public static final String HELP_LINE_LIST = BASE + "help/help_line_list.ui"; + + public static final String HELP_SEPARATOR = BASE + "help/help_separator.ui"; + + public static final String HELP_LINE_CALLOUT = BASE + "help/help_line_callout.ui"; + + public static final String HELP_TABLE_HEADER = BASE + "help/help_table_header.ui"; + + public static final String HELP_TABLE_ROW = BASE + "help/help_table_row.ui"; + + public static final String HELP_TABLE_CELL = BASE + "help/help_table_cell.ui"; + + public static final String HELP_TABLE_HEADER_CELL = BASE + "help/help_table_header_cell.ui"; + // ── Admin pages ───────────────────────────────────────────────────────── public static final String ADMIN_MAIN = BASE + "admin/admin_main.ui"; @@ -253,4 +273,6 @@ private UIPaths() {} // ── Test ──────────────────────────────────────────────────────────────── public static final String BUTTON_TEST = BASE + "test/button_test.ui"; + + public static final String MARKDOWN_TEST = BASE + "test/markdown_test.ui"; } diff --git a/src/main/java/com/hyperfactions/gui/admin/AdminNavBarHelper.java b/src/main/java/com/hyperfactions/gui/admin/AdminNavBarHelper.java index 2e12a454..cc0237d9 100644 --- a/src/main/java/com/hyperfactions/gui/admin/AdminNavBarHelper.java +++ b/src/main/java/com/hyperfactions/gui/admin/AdminNavBarHelper.java @@ -2,6 +2,8 @@ import com.hyperfactions.gui.GuiManager; import com.hyperfactions.gui.UIPaths; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.gui.admin.data.AdminNavAwareData; import com.hyperfactions.gui.shared.NavBarUtil; import com.hypixel.hytale.component.Ref; @@ -49,12 +51,13 @@ public static void setupBar( } // Nav bar is included in UI templates via $Nav.@HyperFactionsAdminNavBar - // We just set up the dynamic content here + // Localize the nav bar title + cmd.set("#AdminNavBarTitleLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.NAV_TITLE)); // Create admin nav cards container and build buttons using shared utility cmd.appendInline("#HyperFactionsAdminNavBar #AdminNavBarButtons", "Group #AdminNavCards { LayoutMode: Left; }"); NavBarUtil.buildButtons(entries, "#AdminNavCards", UIPaths.ADMIN_NAV_BUTTON, "#AdminNavActionButton", - "AdminNav", "AdminNavBar", cmd, events); + "AdminNav", "AdminNavBar", playerRef, cmd, events); } /** diff --git a/src/main/java/com/hyperfactions/gui/admin/data/AdminHelpData.java b/src/main/java/com/hyperfactions/gui/admin/data/AdminHelpData.java index ae29fd7b..caa4cb18 100644 --- a/src/main/java/com/hyperfactions/gui/admin/data/AdminHelpData.java +++ b/src/main/java/com/hyperfactions/gui/admin/data/AdminHelpData.java @@ -6,7 +6,7 @@ import org.jetbrains.annotations.Nullable; /** - * Event data for the Admin Help page (placeholder). + * Event data for the Admin Help page. */ public class AdminHelpData implements AdminNavAwareData { @@ -16,6 +16,9 @@ public class AdminHelpData implements AdminNavAwareData { /** Admin nav bar target (for navigation). */ public String adminNavBar; + /** Selected category ID (for category switching). */ + public String category; + /** Codec for serialization/deserialization. */ public static final BuilderCodec CODEC = BuilderCodec .builder(AdminHelpData.class, AdminHelpData::new) @@ -29,6 +32,11 @@ public class AdminHelpData implements AdminNavAwareData { (data, value) -> data.adminNavBar = value, data -> data.adminNavBar ) + .addField( + new KeyedCodec<>("Category", Codec.STRING), + (data, value) -> data.category = value, + data -> data.category + ) .build(); /** Creates a new AdminHelpData. */ diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminActionsPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminActionsPage.java index 39e35815..525a25a3 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminActionsPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminActionsPage.java @@ -11,6 +11,8 @@ import com.hyperfactions.util.ErrorHandler; import com.hyperfactions.util.Logger; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -67,13 +69,25 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar (highlight "actions" tab) AdminNavBarHelper.setupBar(playerRef, "actions", cmd, events); + // Localize page title and labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ACTIONS)); + cmd.set("#CombatStatsLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_COMBAT_STATS)); + cmd.set("#CombatDescLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_COMBAT_DESC)); + cmd.set("#EconomyLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_ECONOMY)); + cmd.set("#EconomyDescLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_ECONOMY_DESC)); + cmd.set("#BulkAdjustBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_BULK_ADJUST)); + cmd.set("#UpkeepLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_UPKEEP_COLLECTION)); + cmd.set("#UpkeepDescLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_UPKEEP_DESC)); + buildContent(cmd, events); } private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { // Reset button text depends on confirmation state if (confirmResetKD) { - cmd.set("#ResetAllKDBtn.Text", "Confirm Reset?"); + cmd.set("#ResetAllKDBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ACT_CONFIRM_RESET)); + } else { + cmd.set("#ResetAllKDBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_RESET_KD)); } // Bind the reset button @@ -94,7 +108,9 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { if (upkeepEnabled) { if (confirmUpkeep) { - cmd.set("#TriggerUpkeepBtn.Text", "Confirm Trigger?"); + cmd.set("#TriggerUpkeepBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ACT_CONFIRM_TRIGGER)); + } else { + cmd.set("#TriggerUpkeepBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ACT_TRIGGER_UPKEEP)); } events.addEventBinding(CustomUIEventBindingType.Activating, "#TriggerUpkeepBtn", EventData.of("Button", "TriggerUpkeep"), false); @@ -130,7 +146,7 @@ public void handleDataEvent(Ref ref, Store store, confirmResetKD = true; UICommandBuilder cmd = new UICommandBuilder(); UIEventBuilder events = new UIEventBuilder(); - cmd.set("#ResetAllKDBtn.Text", "Confirm Reset?"); + cmd.set("#ResetAllKDBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ACT_CONFIRM_RESET)); events.addEventBinding(CustomUIEventBindingType.Activating, "#ResetAllKDBtn", EventData.of("Button", "ResetAllKD"), false); sendUpdate(cmd, events, false); @@ -149,7 +165,7 @@ public void handleDataEvent(Ref ref, Store store, Logger.info("[Admin] %s reset K/D stats for all %d players", playerRef.getUsername(), allUuids.size()); } catch (Exception e) { - player.sendMessage(MessageUtil.adminError("Failed to reset K/D: " + e.getMessage())); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ACT_KD_RESET_FAILED, e.getMessage())); ErrorHandler.report("[Admin] Global K/D reset failed", e); } guiManager.openAdminActions(player, ref, store, playerRef); @@ -163,7 +179,7 @@ public void handleDataEvent(Ref ref, Store store, confirmUpkeep = true; UICommandBuilder cmd = new UICommandBuilder(); UIEventBuilder events = new UIEventBuilder(); - cmd.set("#TriggerUpkeepBtn.Text", "Confirm Trigger?"); + cmd.set("#TriggerUpkeepBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ACT_CONFIRM_TRIGGER)); events.addEventBinding(CustomUIEventBindingType.Activating, "#TriggerUpkeepBtn", EventData.of("Button", "TriggerUpkeep"), false); sendUpdate(cmd, events, false); @@ -171,15 +187,15 @@ public void handleDataEvent(Ref ref, Store store, confirmUpkeep = false; UpkeepProcessor processor = plugin.getUpkeepProcessor(); if (processor == null) { - player.sendMessage(MessageUtil.adminError("Upkeep processor is not available.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ACT_UPKEEP_UNAVAILABLE)); } else { try { processor.processUpkeep(); - player.sendMessage(MessageUtil.adminSuccess("Upkeep collection triggered.")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ACT_UPKEEP_TRIGGERED)); Logger.info("[Admin] %s manually triggered upkeep collection via GUI", playerRef.getUsername()); } catch (Exception e) { - player.sendMessage(MessageUtil.adminError("Upkeep failed: " + e.getMessage())); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ACT_UPKEEP_FAILED, e.getMessage())); ErrorHandler.report("[Admin] Manual upkeep trigger failed", e); } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminActivityLogPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminActivityLogPage.java index 2b62822d..f067e5ac 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminActivityLogPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminActivityLogPage.java @@ -1,5 +1,8 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; + import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionLog; import com.hyperfactions.data.FactionMember; @@ -24,6 +27,7 @@ import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import java.util.*; +import java.util.concurrent.TimeUnit; import org.jetbrains.annotations.Nullable; /** @@ -60,17 +64,17 @@ private record GlobalLogEntry( ) {} private enum TimeFilter { - HOUR_1("1h", 3600_000L), - HOUR_24("24h", 86400_000L), - DAY_7("7d", 604800_000L), - ALL("All", Long.MAX_VALUE); + HOUR_1(MessageKeys.AdminGui.LOG_TIME_1H, 3600_000L), + HOUR_24(MessageKeys.AdminGui.LOG_TIME_24H, 86400_000L), + DAY_7(MessageKeys.AdminGui.LOG_TIME_7D, 604800_000L), + ALL(MessageKeys.AdminGui.LOG_TIME_ALL, Long.MAX_VALUE); - private final String displayName; + private final String messageKey; private final long millis; - TimeFilter(String displayName, long millis) { - this.displayName = displayName; + TimeFilter(String messageKey, long millis) { + this.messageKey = messageKey; this.millis = millis; } } @@ -95,6 +99,24 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "log", cmd, events); + // Localize page title + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ACTIVITY_LOG)); + + // Localize filter labels + cmd.set("#TypeLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_LOG_TYPE)); + cmd.set("#TimeLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_LOG_TIME)); + cmd.set("#PlayerLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_LOG_PLAYER)); + + // Localize column headers + cmd.set("#ColTime.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_TIME)); + cmd.set("#ColType.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_TYPE)); + cmd.set("#ColFaction.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_FACTION)); + cmd.set("#ColMessage.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_MESSAGE)); + + // Localize pagination buttons + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_NEXT)); + buildLogList(cmd, events); } @@ -103,9 +125,10 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { // Type filter dropdown List typeOptions = new ArrayList<>(); - typeOptions.add(new DropdownEntryInfo(LocalizableString.fromString("All Types"), "ALL")); + typeOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.LOG_ALL_TYPES)), "ALL")); for (FactionLog.LogType type : FactionLog.LogType.values()) { - typeOptions.add(new DropdownEntryInfo(LocalizableString.fromString(type.getDisplayName()), type.name())); + typeOptions.add(new DropdownEntryInfo(LocalizableString.fromString( + HFMessages.get(playerRef, MessageKeys.LogsGui.typeKey(type.name()))), type.name())); } cmd.set("#TypeDropdown.Entries", typeOptions); cmd.set("#TypeDropdown.Value", filterType != null ? filterType.name() : "ALL"); @@ -121,7 +144,7 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { // Time filter dropdown List timeOptions = new ArrayList<>(); for (TimeFilter tf : TimeFilter.values()) { - timeOptions.add(new DropdownEntryInfo(LocalizableString.fromString(tf.displayName), tf.name())); + timeOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, tf.messageKey)), tf.name())); } cmd.set("#TimeDropdown.Entries", timeOptions); cmd.set("#TimeDropdown.Value", timeFilter.name()); @@ -149,7 +172,7 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { // === Collect and filter logs === List allLogs = collectGlobalLogs(); - cmd.set("#LogCount.Text", allLogs.size() + " entries"); + cmd.set("#LogCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ENTRIES_SUFFIX, allLogs.size())); // Calculate pagination int totalPages = Math.max(1, (int) Math.ceil((double) allLogs.size() / LOGS_PER_PAGE)); @@ -169,11 +192,11 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { cmd.append("#LogList", UIPaths.ADMIN_ACTIVITY_LOG_ENTRY); - // Time - cmd.set(sel + " #LogTime.Text", TimeUtil.formatRelative(entry.log.timestamp())); + // Time (localized) + cmd.set(sel + " #LogTime.Text", formatRelativeTime(entry.log.timestamp())); - // Type with color - cmd.set(sel + " #LogType.Text", entry.log.type().getDisplayName()); + // Type with color (localized) + cmd.set(sel + " #LogType.Text", HFMessages.get(playerRef, MessageKeys.LogsGui.typeKey(entry.log.type().name()))); cmd.set(sel + " #LogType.Style.TextColor", GuiColors.forLogType(entry.log.type())); // Faction name with color @@ -184,8 +207,8 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { cmd.set(sel + " #FactionName.Text", factionDisplay); cmd.set(sel + " #FactionName.Style.TextColor", entry.factionColor); - // Message - cmd.set(sel + " #LogMessage.Text", entry.log.message()); + // Message (localized if key available, else English fallback) + cmd.set(sel + " #LogMessage.Text", HFMessages.resolveLogMessage(playerRef, entry.log())); index++; } @@ -193,12 +216,12 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { // Empty state if (index == 0) { cmd.appendInline("#LogList", - "Label { Text: \"No activity logs matching filters.\"; " + "Label { Text: \"" + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_LOG_NO_LOGS) + "\"; " + "Style: (FontSize: 11, TextColor: #555555); Anchor: (Height: 30); }"); } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -342,6 +365,28 @@ public void handleDataEvent(Ref ref, Store store, } } + /** Returns a localized relative time string for the given timestamp. */ + private String formatRelativeTime(long timestamp) { + long diff = System.currentTimeMillis() - timestamp; + if (diff < 60_000) { + return HFMessages.get(playerRef, MessageKeys.LogsGui.TIME_JUST_NOW); + } else if (diff < 3600_000) { + long m = TimeUnit.MILLISECONDS.toMinutes(diff); + return HFMessages.get(playerRef, m == 1 ? MessageKeys.LogsGui.TIME_MINUTE : MessageKeys.LogsGui.TIME_MINUTES, m); + } else if (diff < 86400_000) { + long h = TimeUnit.MILLISECONDS.toHours(diff); + return HFMessages.get(playerRef, h == 1 ? MessageKeys.LogsGui.TIME_HOUR : MessageKeys.LogsGui.TIME_HOURS, h); + } else if (diff < 604800_000) { + long d = TimeUnit.MILLISECONDS.toDays(diff); + return HFMessages.get(playerRef, d == 1 ? MessageKeys.LogsGui.TIME_DAY : MessageKeys.LogsGui.TIME_DAYS, d); + } else if (diff < 2592000_000L) { + long w = TimeUnit.MILLISECONDS.toDays(diff) / 7; + return HFMessages.get(playerRef, w == 1 ? MessageKeys.LogsGui.TIME_WEEK : MessageKeys.LogsGui.TIME_WEEKS, w); + } else { + return TimeUtil.formatDate(timestamp); + } + } + private void rebuildList() { UICommandBuilder cmd = new UICommandBuilder(); UIEventBuilder events = new UIEventBuilder(); diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminBackupsPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminBackupsPage.java index 6b309f51..f0f02a28 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminBackupsPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminBackupsPage.java @@ -4,6 +4,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.admin.AdminNavBarHelper; import com.hyperfactions.gui.admin.data.AdminBackupsData; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -39,6 +41,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar (must be after template load) AdminNavBarHelper.setupBar(playerRef, "backups", cmd, events); + + // Localize page title and labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_BACKUPS)); + cmd.set("#ComingSoon.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACKUP_HEADING)); + cmd.set("#ComingSoonSub.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COMING_SOON)); + cmd.set("#Description.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACKUP_DESC1)); + cmd.set("#Description2.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACKUP_DESC2)); } /** Handles data event. */ diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminBulkEconomyPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminBulkEconomyPage.java index 905d4cde..851097a3 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminBulkEconomyPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminBulkEconomyPage.java @@ -1,5 +1,8 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; + import com.hyperfactions.api.EconomyAPI; import com.hyperfactions.data.Faction; import com.hyperfactions.gui.GuiManager; @@ -61,6 +64,17 @@ public void build(Ref ref, UICommandBuilder cmd, AdminNavBarHelper.setupBar(playerRef, "actions", cmd, events); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_BULK_ECONOMY)); + cmd.set("#SectionHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BULK_HEADER)); + cmd.set("#FactionsInfoLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BULK_FACTIONS_LABEL)); + cmd.set("#TotalBalanceInfoLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BULK_TOTAL_LABEL)); + cmd.set("#AmountLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BULK_AMOUNT_HINT)); + cmd.set("#HintLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BULK_HINT)); + cmd.set("#WarningLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BULK_WARNING_MSG)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BULK_APPLY_ALL)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACK)); + int factionCount = economyManager.getFactionEconomyCount(); BigDecimal totalBalance = economyManager.getServerTotalBalance(); @@ -114,7 +128,7 @@ public void handleDataEvent(Ref ref, Store store, } if (amount.compareTo(BigDecimal.ZERO) == 0) { - showError("Amount cannot be zero."); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_AMOUNT_ZERO)); return; } @@ -165,13 +179,13 @@ public void handleDataEvent(Ref ref, Store store, private BigDecimal parseAmountOrError(String amount) { if (amount == null || amount.isBlank()) { - showError("Please enter an amount."); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_ENTER_AMOUNT)); return null; } try { return new BigDecimal(amount.trim()); } catch (NumberFormatException e) { - showError("Invalid number: " + amount); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_INVALID_NUMBER, amount)); return null; } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminConfigPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminConfigPage.java index 2069f8aa..76d45751 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminConfigPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminConfigPage.java @@ -4,6 +4,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.admin.AdminNavBarHelper; import com.hyperfactions.gui.admin.data.AdminConfigData; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -39,6 +41,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar (must be after template load) AdminNavBarHelper.setupBar(playerRef, "config", cmd, events); + + // Localize page title and labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_CONFIG)); + cmd.set("#ComingSoon.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CONFIG_HEADING)); + cmd.set("#ComingSoonSub.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COMING_SOON)); + cmd.set("#Description.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CONFIG_DESC1)); + cmd.set("#Description2.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CONFIG_DESC2)); } /** Handles data event. */ diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminDashboardPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminDashboardPage.java index 59612c78..e83721ca 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminDashboardPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminDashboardPage.java @@ -1,5 +1,8 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; + import com.hyperfactions.HyperFactions; import com.hyperfactions.data.*; import com.hyperfactions.gui.GuiManager; @@ -67,6 +70,21 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "dashboard", cmd, events); + // Localize page title and stat labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_DASHBOARD)); + cmd.set("#ServerStatsLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_SERVER_STATS)); + cmd.set("#FactionsLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_FACTIONS)); + cmd.set("#TotalMembersLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_TOTAL_MEMBERS)); + cmd.set("#TotalClaimsLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_TOTAL_CLAIMS)); + cmd.set("#ZonesLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_ZONES)); + cmd.set("#SafeWarLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_SAFE_WAR)); + cmd.set("#TotalPowerLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_TOTAL_POWER)); + cmd.set("#AvgPowerLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_AVG_POWER)); + cmd.set("#TotalEconomyLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_TOTAL_ECONOMY)); + cmd.set("#WealthiestLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_WEALTHIEST)); + cmd.set("#AvgBalanceLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_AVG_BALANCE)); + cmd.set("#BypassLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_DASH_PROTECTION_BYPASS)); + // Calculate server-wide statistics Collection allFactions = factionManager.getAllFactions(); int totalFactions = allFactions.size(); @@ -112,7 +130,7 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.set("#TotalEconomy.Text", econ.formatCurrencyCompact(total)); // Find wealthiest faction - String wealthiestName = "None"; + String wealthiestName = HFMessages.get(playerRef, MessageKeys.Common.NONE); java.math.BigDecimal wealthiestBalance = java.math.BigDecimal.ZERO; for (Faction f : allFactions) { java.math.BigDecimal balance = econ.getFactionBalance(f.id()); @@ -127,9 +145,9 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup bypass toggle boolean bypassEnabled = plugin.isAdminBypassEnabled(playerRef.getUuid()); - cmd.set("#BypassState.Text", bypassEnabled ? "On" : "Off"); + cmd.set("#BypassState.Text", bypassEnabled ? HFMessages.get(playerRef, MessageKeys.AdminGui.ON) : HFMessages.get(playerRef, MessageKeys.AdminGui.OFF)); cmd.set("#BypassState.Style.TextColor", bypassEnabled ? "#55FF55" : "#FF5555"); - cmd.set("#ToggleBypassBtn.Text", bypassEnabled ? "Disable" : "Enable"); + cmd.set("#ToggleBypassBtn.Text", bypassEnabled ? HFMessages.get(playerRef, MessageKeys.AdminGui.DISABLE_BTN) : HFMessages.get(playerRef, MessageKeys.AdminGui.ENABLE_BTN)); events.addEventBinding( CustomUIEventBindingType.Activating, @@ -173,9 +191,9 @@ private void rebuildBypassSection(boolean bypassEnabled) { UIEventBuilder events = new UIEventBuilder(); // Update bypass state display - cmd.set("#BypassState.Text", bypassEnabled ? "On" : "Off"); + cmd.set("#BypassState.Text", bypassEnabled ? HFMessages.get(playerRef, MessageKeys.AdminGui.ON) : HFMessages.get(playerRef, MessageKeys.AdminGui.OFF)); cmd.set("#BypassState.Style.TextColor", bypassEnabled ? "#55FF55" : "#FF5555"); - cmd.set("#ToggleBypassBtn.Text", bypassEnabled ? "Disable" : "Enable"); + cmd.set("#ToggleBypassBtn.Text", bypassEnabled ? HFMessages.get(playerRef, MessageKeys.AdminGui.DISABLE_BTN) : HFMessages.get(playerRef, MessageKeys.AdminGui.ENABLE_BTN)); // Re-bind the toggle button event events.addEventBinding( diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminDisbandConfirmPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminDisbandConfirmPage.java index c7a15005..6c657f11 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminDisbandConfirmPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminDisbandConfirmPage.java @@ -6,11 +6,12 @@ import com.hyperfactions.gui.admin.data.AdminDisbandConfirmData; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.builder.EventData; @@ -58,6 +59,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Reuse the shared disband confirmation template cmd.append(UIPaths.DISBAND_CONFIRM); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.DISBAND_TITLE)); + cmd.set("#ConfirmText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.DISBAND_PROMPT)); + cmd.set("#WarningText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.DISBAND_WARNING)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.DISBAND)); + // Set faction name in the modal cmd.set("#FactionName.Text", factionName); @@ -101,7 +109,7 @@ public void handleDataEvent(Ref ref, Store store, // Re-fetch faction to verify it still exists Faction faction = factionManager.getFaction(factionId); if (faction == null) { - player.sendMessage(MessageUtil.errorText("Faction no longer exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.DISBAND_FACTION_GONE)); guiManager.openAdminMain(player, ref, store, playerRef); return; } @@ -111,16 +119,12 @@ public void handleDataEvent(Ref ref, Store store, if (leaderId != null) { FactionManager.FactionResult result = factionManager.disbandFaction(factionId, leaderId); if (result == FactionManager.FactionResult.SUCCESS) { - player.sendMessage( - Message.raw("Faction '").color("#FF5555") - .insert(Message.raw(factionName).color("#AAAAAA")) - .insert(Message.raw("' has been disbanded.").color("#FF5555")) - ); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.DISBAND_SUCCESS, factionName)); } else { - player.sendMessage(MessageUtil.errorText("Failed to disband: " + result)); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.DISBAND_FAILED, result)); } } else { - player.sendMessage(MessageUtil.errorText("Faction has no leader, cannot disband.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.DISBAND_NO_LEADER)); } // Return to admin page (will show updated list) diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyAdjustPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyAdjustPage.java index e3a799da..afe099b6 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyAdjustPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyAdjustPage.java @@ -1,5 +1,8 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; + import com.hyperfactions.api.EconomyAPI; import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionEconomy; @@ -66,11 +69,24 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "economy", cmd, events); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ECONOMY_ADJUST)); + cmd.set("#SectionHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_HEADER)); + cmd.set("#FactionLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_FACTION_LABEL)); + cmd.set("#CurrentBalanceLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_CURRENT_BALANCE)); + cmd.set("#AmountLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_AMOUNT_HINT)); + cmd.set("#HintText.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_PREVIEW_HINT)); + cmd.set("#AdjustmentLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_ADJUSTMENT)); + cmd.set("#NewBalanceLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_NEW_BALANCE)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACK)); + cmd.set("#SetBalanceBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_SET_BALANCE)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECADJ_CONFIRM)); + // Get faction info Faction faction = factionManager.getFaction(factionId); if (faction == null) { - cmd.set("#TargetFactionName.Text", "Faction Not Found"); - cmd.set("#CurrentBalance.Text", "N/A"); + cmd.set("#TargetFactionName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FACTION_NOT_FOUND_LABEL)); + cmd.set("#CurrentBalance.Text", HFMessages.get(playerRef, MessageKeys.Common.NA)); return; } @@ -136,7 +152,7 @@ public void handleDataEvent(Ref ref, Store store, } if (amount.compareTo(BigDecimal.ZERO) == 0) { - showError("Amount cannot be zero."); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_AMOUNT_ZERO)); return; } @@ -151,7 +167,7 @@ public void handleDataEvent(Ref ref, Store store, .thenAccept(result -> handleResult(result, player, ref, store, playerRef)) .exceptionally(ex -> { ErrorHandler.report(String.format("Admin economy adjust failed for faction %s", factionId), ex); - showError("An error occurred."); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_ERROR)); return null; }); } @@ -163,7 +179,7 @@ public void handleDataEvent(Ref ref, Store store, } if (newBalance.compareTo(BigDecimal.ZERO) < 0) { - showError("Balance cannot be negative."); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_BALANCE_NEGATIVE)); return; } @@ -174,7 +190,7 @@ public void handleDataEvent(Ref ref, Store store, .thenAccept(result -> handleResult(result, player, ref, store, playerRef)) .exceptionally(ex -> { ErrorHandler.report(String.format("Admin economy set balance failed for faction %s", factionId), ex); - showError("An error occurred."); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_ERROR)); return null; }); } @@ -190,13 +206,13 @@ public void handleDataEvent(Ref ref, Store store, */ private @Nullable BigDecimal parseAmountOrError(@Nullable String amount) { if (amount == null || amount.isBlank()) { - showError("Please enter an amount."); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_ENTER_AMOUNT)); return null; } try { return new BigDecimal(amount.trim()); } catch (NumberFormatException e) { - showError("Invalid number: " + amount); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_INVALID_NUMBER, amount)); return null; } } @@ -209,7 +225,7 @@ private void handleResult(EconomyAPI.TransactionResult result, guiManager.openAdminEconomy(player, ref, store, playerRef); } else { Logger.debugEconomy("Admin economy operation failed for faction %s: %s", factionId, result.name()); - showError("Failed: " + result.name()); + showError(HFMessages.get(playerRef, MessageKeys.AdminGui.ECON_FAILED, result.name())); } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyPage.java index edafebc4..273fc261 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminEconomyPage.java @@ -1,5 +1,8 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; + import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionEconomy; import com.hyperfactions.data.FactionMember; @@ -77,6 +80,33 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "economy", cmd, events); + // Localize page title + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ECONOMY)); + + // Localize stat card labels + cmd.set("#TotalBalanceLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_TOTAL_BALANCE)); + cmd.set("#FactionsLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_FACTIONS)); + cmd.set("#AvgBalanceLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_AVG_BALANCE)); + + // Localize upkeep stat labels + cmd.set("#InGraceLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_IN_GRACE)); + cmd.set("#CollectedLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_COLLECTED)); + cmd.set("#NextCollectionLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_NEXT_COLLECTION)); + + // Localize search/sort labels + cmd.set("#SearchLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SEARCH)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SORT)); + + // Localize column headers + cmd.set("#ColFaction.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_FACTION)); + cmd.set("#ColBalance.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_BALANCE)); + cmd.set("#ColMembers.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_MEMBERS)); + cmd.set("#ColActions.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COL_ACTIONS)); + + // Localize pagination buttons + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_NEXT)); + // === Server Economy Stats === buildServerStats(cmd); @@ -151,7 +181,7 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { // Get sorted/filtered factions List factions = getSortedFactions(); - cmd.set("#FactionCount.Text", factions.size() + " factions"); + cmd.set("#FactionCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FACTIONS_SUFFIX, factions.size())); // Search input if (!searchQuery.isEmpty()) { @@ -166,9 +196,9 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { // Sort dropdown cmd.set("#SortDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Balance"), "BALANCE"), - new DropdownEntryInfo(LocalizableString.fromString("Name"), "NAME"), - new DropdownEntryInfo(LocalizableString.fromString("Members"), "MEMBERS") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_BALANCE)), "BALANCE"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_NAME)), "NAME"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_MEMBERS)), "MEMBERS") )); cmd.set("#SortDropdown.Value", sortMode.name()); events.addEventBinding( @@ -197,6 +227,10 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { cmd.set(sel + " #Balance.Text", economyManager.formatCurrencyCompact(entry.economy.balance())); cmd.set(sel + " #MemberCount.Text", String.valueOf(entry.faction.getMemberCount())); + // Localize entry buttons + cmd.set(sel + " #AdjustBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_BTN_ADJUST)); + cmd.set(sel + " #ViewBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_BTN_INFO)); + // Upkeep status indicator if (com.hyperfactions.config.ConfigManager.get().isUpkeepEnabled()) { cmd.set(sel + " #UpkeepDot.Visible", true); @@ -237,12 +271,12 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { // Empty state if (index == 0) { cmd.appendInline("#FactionList", - "Label { Text: \"No factions with economy data.\"; " + "Label { Text: \"" + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ECON_NO_DATA) + "\"; " + "Style: (FontSize: 11, TextColor: #555555); Anchor: (Height: 30); }"); } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionInfoPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionInfoPage.java index 05bf4f41..affdaaa3 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionInfoPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionInfoPage.java @@ -1,5 +1,8 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; + import com.hyperfactions.config.ConfigManager; import com.hyperfactions.data.Faction; import com.hyperfactions.data.FactionLog; @@ -79,11 +82,44 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "factions", cmd, events); + // Localize page title + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_FACTION_INFO)); + + // Localize stat card labels + cmd.set("#PowerCardLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_POWER)); + cmd.set("#PowerSubLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_CURRENT_MAX)); + cmd.set("#ClaimsCardLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_CLAIMS)); + cmd.set("#ClaimsSubLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_CLAIMED_MAX)); + cmd.set("#MembersCardLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_MEMBERS)); + cmd.set("#RelationsCardLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_RELATIONS)); + cmd.set("#RelationsSubLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ALLY_ENEMY)); + cmd.set("#StatusCardLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_STATUS)); + cmd.set("#InfoCardLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_INFO)); + cmd.set("#TreasurySubLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_TREASURY_BALANCE)); + + // Localize section headers + cmd.set("#LeadershipHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_LEADERSHIP)); + cmd.set("#LeaderLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_LEADER_LABEL)); + cmd.set("#OfficersLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_OFFICERS_LABEL)); + cmd.set("#PowerMgmtHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_POWER_MANAGEMENT)); + cmd.set("#EconMgmtHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ECON_MGMT)); + cmd.set("#DangerZoneHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_DANGER_ZONE)); + + // Localize button labels + cmd.set("#PowerResetAll.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_RESET_ALL_POWER)); + cmd.set("#EconAdjustBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ECON_ADJUST)); + cmd.set("#EconViewLogBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_VIEW_TREASURY)); + cmd.set("#DisbandBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_DISBAND)); + cmd.set("#ViewMembersBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_VIEW_MEMBERS)); + cmd.set("#ViewRelationsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_VIEW_RELATIONS)); + cmd.set("#ViewSettingsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_VIEW_SETTINGS)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACK)); + // Get the faction Faction faction = factionManager.getFaction(factionId); if (faction == null) { - cmd.set("#FactionName.Text", "Faction Not Found"); - cmd.set("#FactionDescription.Text", "This faction no longer exists."); + cmd.set("#FactionName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FACTION_NOT_FOUND_LABEL)); + cmd.set("#FactionDescription.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.INFO_FACTION_GONE)); return; } @@ -101,10 +137,10 @@ public void build(Ref ref, UICommandBuilder cmd, // Description String description = faction.description(); cmd.set("#FactionDescription.Text", - description != null && !description.isEmpty() ? description : "No description set."); + description != null && !description.isEmpty() ? description : HFMessages.get(playerRef, MessageKeys.AdminGui.NO_DESCRIPTION)); // Open/Closed status indicator - cmd.set("#StatusIndicator.Text", faction.open() ? "Open" : "Invite Only"); + cmd.set("#StatusIndicator.Text", faction.open() ? HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN) : HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)); // === Stats Section === PowerManager.FactionPowerStats powerStats = powerManager.getFactionPowerStats(faction.id()); @@ -121,7 +157,7 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.set("#MembersValue.Text", String.format("%d / %d", memberCount, maxMembers)); // Recruitment status - cmd.set("#RecruitmentValue.Text", faction.open() ? "Open" : "Invite Only"); + cmd.set("#RecruitmentValue.Text", faction.open() ? HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN) : HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)); // Founded date cmd.set("#FoundedValue.Text", TimeUtil.formatRelative(faction.createdAt())); @@ -134,28 +170,28 @@ public void build(Ref ref, UICommandBuilder cmd, // Raidable status if (powerStats.isRaidable()) { - cmd.set("#RaidableValue.Text", "Raidable"); + cmd.set("#RaidableValue.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.RAIDABLE)); } else { - cmd.set("#RaidableValue.Text", "Protected"); + cmd.set("#RaidableValue.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.PROTECTED)); } // === Leadership Section === FactionMember leader = faction.getLeader(); - cmd.set("#LeaderName.Text", leader != null ? leader.username() : "Unknown"); + cmd.set("#LeaderName.Text", leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN)); // Officers List officers = faction.getMembersSorted().stream() .filter(m -> m.role() == FactionRole.OFFICER) .toList(); if (officers.isEmpty()) { - cmd.set("#OfficersValue.Text", "None"); + cmd.set("#OfficersValue.Text", HFMessages.get(playerRef, MessageKeys.Common.NONE)); } else { String officerNames = officers.stream() .map(FactionMember::username) .limit(3) .collect(Collectors.joining(", ")); if (officers.size() > 3) { - officerNames += " +" + (officers.size() - 3) + " more"; + officerNames += " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_INFO_MORE, officers.size() - 3); } cmd.set("#OfficersValue.Text", officerNames); } @@ -290,7 +326,8 @@ public void handleDataEvent(Ref ref, Store store, } Faction updated = faction.withLog(FactionLog.create(FactionLog.LogType.ADMIN_POWER, "Admin adjusted all " + faction.getMemberCount() + " members' power by " + String.format("%.1f", delta), - playerRef.getUuid())); + playerRef.getUuid(), + MessageKeys.LogsGui.MSG_ADMIN_POWER_ADJUSTED_ALL, String.valueOf(faction.getMemberCount()), String.format("%.1f", delta))); factionManager.updateFaction(updated); // Rebuild page to show updated stats guiManager.openAdminFactionInfo(player, ref, store, playerRef, factionId); @@ -306,7 +343,8 @@ public void handleDataEvent(Ref ref, Store store, } Faction updated = faction.withLog(FactionLog.create(FactionLog.LogType.ADMIN_POWER, "Admin reset power for all " + faction.getMemberCount() + " members", - playerRef.getUuid())); + playerRef.getUuid(), + MessageKeys.LogsGui.MSG_ADMIN_POWER_RESET_ALL, String.valueOf(faction.getMemberCount()))); factionManager.updateFaction(updated); guiManager.openAdminFactionInfo(player, ref, store, playerRef, factionId); } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionMembersPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionMembersPage.java index 175e1843..335aeb96 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionMembersPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionMembersPage.java @@ -10,6 +10,8 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.TimeUtil; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; @@ -76,10 +78,19 @@ public AdminFactionMembersPage(PlayerRef playerRef, UUID factionId, FactionManag public void build(Ref ref, UICommandBuilder cmd, UIEventBuilder events, Store store) { cmd.append(UIPaths.ADMIN_FACTION_MEMBERS); AdminNavBarHelper.setupBar(playerRef, "factions", cmd, events); + + // Localize page title and labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_FACTION_MEMBERS)); + cmd.set("#SearchLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SEARCH)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SORT)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_NEXT)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACK)); + Faction faction = factionManager.getFaction(factionId); if (faction == null) { - cmd.set("#FactionName.Text", "Faction Not Found"); - cmd.set("#MemberCount.Text", "0 members"); + cmd.set("#FactionName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FACTION_NOT_FOUND_LABEL)); + cmd.set("#MemberCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.MEMBERS_SUFFIX, 0)); return; } cmd.set("#FactionName.Text", faction.name()); @@ -88,8 +99,8 @@ public void build(Ref ref, UICommandBuilder cmd, UIEventBuilder eve private void buildMemberList(UICommandBuilder cmd, UIEventBuilder events, Faction faction) { List allMembers = getFilteredSortedMembers(faction); - cmd.set("#MemberCount.Text", searchQuery.isEmpty() ? allMembers.size() + " members" : allMembers.size() + " found"); - cmd.set("#SortDropdown.Entries", List.of(new DropdownEntryInfo(LocalizableString.fromString("Role"), "ROLE"), new DropdownEntryInfo(LocalizableString.fromString("Online"), "ONLINE"), new DropdownEntryInfo(LocalizableString.fromString("Name"), "NAME"), new DropdownEntryInfo(LocalizableString.fromString("Power"), "POWER"))); + cmd.set("#MemberCount.Text", searchQuery.isEmpty() ? HFMessages.get(playerRef, MessageKeys.AdminGui.MEMBERS_SUFFIX, allMembers.size()) : HFMessages.get(playerRef, MessageKeys.AdminGui.FOUND_SUFFIX, allMembers.size())); + cmd.set("#SortDropdown.Entries", List.of(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.MEM_SORT_ROLE)), "ROLE"), new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.MEM_SORT_ONLINE)), "ONLINE"), new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.MEM_SORT_NAME)), "NAME"), new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.MEM_SORT_POWER)), "POWER"))); cmd.set("#SortDropdown.Value", sortMode.name()); events.addEventBinding(CustomUIEventBindingType.ValueChanged, "#SortDropdown", EventData.of("Button", "SortChanged").append("@SortMode", "#SortDropdown.Value"), false); events.addEventBinding(CustomUIEventBindingType.ValueChanged, "#SearchInput", EventData.of("Button", "SearchChanged").append("@SearchQuery", "#SearchInput.Value"), false); @@ -104,7 +115,7 @@ private void buildMemberList(UICommandBuilder cmd, UIEventBuilder events, Factio buildMemberEntry(cmd, events, i, allMembers.get(idx)); i++; } - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding(CustomUIEventBindingType.Activating, "#PrevBtn", EventData.of("Button", "PrevPage").append("Page", String.valueOf(currentPage - 1)), false); } @@ -118,10 +129,21 @@ private void buildMemberEntry(UICommandBuilder cmd, UIEventBuilder events, int i boolean memberIsOnline = isOnline(member); cmd.append("#IndexCards", UIPaths.ADMIN_FACTION_MEMBERS_ENTRY); String idx = "#IndexCards[" + index + "]"; + // Localize entry labels and buttons + cmd.set(idx + " #PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_LABEL_POWER)); + cmd.set(idx + " #JoinedLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_LABEL_JOINED)); + cmd.set(idx + " #LastDeathLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_LABEL_LAST_DEATH)); + cmd.set(idx + " #UuidLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_LABEL_UUID)); + cmd.set(idx + " #ViewInfoBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_BTN_INFO)); + cmd.set(idx + " #TeleportBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_BTN_TELEPORT)); + cmd.set(idx + " #PromoteBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_BTN_PROMOTE)); + cmd.set(idx + " #DemoteBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_BTN_DEMOTE)); + cmd.set(idx + " #KickBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MEM_BTN_KICK)); + cmd.set(idx + " #MemberName.Text", member.username()); cmd.set(idx + " #MemberRole.Text", formatRole(member.role())); cmd.set(idx + " #RoleIndicator.Background.Color", GuiColors.forRole(member.role())); - cmd.set(idx + " #OnlineStatus.Text", memberIsOnline ? "Online" : "Offline"); + cmd.set(idx + " #OnlineStatus.Text", memberIsOnline ? HFMessages.get(playerRef, MessageKeys.Common.ONLINE) : HFMessages.get(playerRef, MessageKeys.Common.OFFLINE)); cmd.set(idx + " #OnlineStatus.Style.TextColor", GuiColors.forOnlineStatus(memberIsOnline)); if (!memberIsOnline) { cmd.set(idx + " #LastOnline.Text", formatLastOnline(member.lastOnline())); @@ -135,8 +157,8 @@ private void buildMemberEntry(UICommandBuilder cmd, UIEventBuilder events, int i cmd.set(idx + " #PowerValue.Text", String.format("%.0f/%.0f", power.power(), power.getEffectiveMaxPower())); int powerPercent = power.getPowerPercent(); String powerColor = GuiColors.forPowerLevel(powerPercent); cmd.set(idx + " #PowerValue.Style.TextColor", powerColor); - cmd.set(idx + " #JoinedDate.Text", member.joinedAt() > 0 ? DATE_FORMAT.format(Instant.ofEpochMilli(member.joinedAt())) : "Unknown"); - cmd.set(idx + " #LastDeath.Text", power.lastDeath() > 0 ? TimeUtil.formatDuration(System.currentTimeMillis() - power.lastDeath()) + " ago" : "Never"); + cmd.set(idx + " #JoinedDate.Text", member.joinedAt() > 0 ? DATE_FORMAT.format(Instant.ofEpochMilli(member.joinedAt())) : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN)); + cmd.set(idx + " #LastDeath.Text", power.lastDeath() > 0 ? HFMessages.get(playerRef, MessageKeys.AdminGui.AGO_SUFFIX, TimeUtil.formatDuration(System.currentTimeMillis() - power.lastDeath())) : HFMessages.get(playerRef, MessageKeys.AdminGui.MEM_NEVER)); cmd.set(idx + " #UuidValue.Text", member.uuid().toString()); boolean canPromote = member.role() != FactionRole.LEADER; boolean canDemote = member.role() != FactionRole.MEMBER; boolean canKick = member.role() != FactionRole.LEADER; cmd.set(idx + " #ViewInfoBtn.Visible", true); cmd.set(idx + " #TeleportBtn.Visible", true); @@ -184,9 +206,9 @@ private String formatLastOnline(long lastOnlineMs) { } long diffMs = System.currentTimeMillis() - lastOnlineMs; if (diffMs < 60000) { - return "just now"; + return HFMessages.get(playerRef, MessageKeys.AdminGui.JUST_NOW); } - return TimeUtil.formatDuration(diffMs) + " ago"; + return HFMessages.get(playerRef, MessageKeys.AdminGui.AGO_SUFFIX, TimeUtil.formatDuration(diffMs)); } /** Handles data event. */ @@ -212,11 +234,11 @@ public void handleDataEvent(Ref ref, Store store, Admi case "PrevPage" -> { currentPage = Math.max(0, data.page); expandedMembers.clear(); rebuildList(); } case "NextPage" -> { currentPage = data.page; expandedMembers.clear(); rebuildList(); } case "Back" -> guiManager.openAdminFactionInfo(player, ref, store, playerRef, factionId); - case "Teleport" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } PlayerRef targetPlayer = Universe.get().getPlayer(memberUuid); if (targetPlayer != null && targetPlayer.isValid()) { guiManager.closePage(player, ref, store); var targetWorld = Universe.get().getWorld(targetPlayer.getWorldUuid()); if (targetWorld == null) { player.sendMessage(MessageUtil.errorText("Target world not found.")); return; } var targetTransform = targetPlayer.getTransform(); var targetPos = targetTransform.getPosition(); var targetRot = targetTransform.getRotation(); targetWorld.execute(() -> { var teleport = com.hypixel.hytale.server.core.modules.entity.teleport.Teleport.createForPlayer(targetWorld, targetPos, targetRot); store.addComponent(ref, com.hypixel.hytale.server.core.modules.entity.teleport.Teleport.getComponentType(), teleport); }); player.sendMessage(Message.raw("[Admin] Teleported to ").color("#55FF55").insert(Message.raw(data.memberName != null ? data.memberName : "player").color("#00FFFF")).insert(Message.raw(".").color("#55FF55"))); } else { player.sendMessage(MessageUtil.errorText("Player is not online.")); sendUpdate(); } } } - case "Promote" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } Faction faction = factionManager.getFaction(factionId); if (faction != null) { FactionMember member = faction.getMember(memberUuid); if (member != null && member.role() != FactionRole.LEADER) { FactionRole newRole = member.role() == FactionRole.MEMBER ? FactionRole.OFFICER : FactionRole.LEADER; factionManager.adminSetMemberRole(factionId, memberUuid, newRole); player.sendMessage(Message.raw("[Admin] Promoted ").color("#55FF55").insert(Message.raw(data.memberName != null ? data.memberName : "player").color("#00FFFF")).insert(Message.raw(" to ").color("#55FF55")).insert(Message.raw(formatRole(newRole)).color("#FFD700")).insert(Message.raw(".").color("#55FF55"))); rebuildList(); } } } } - case "Demote" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } Faction faction = factionManager.getFaction(factionId); if (faction != null) { FactionMember member = faction.getMember(memberUuid); if (member != null && member.role() != FactionRole.MEMBER) { FactionRole newRole = member.role() == FactionRole.LEADER ? FactionRole.OFFICER : FactionRole.MEMBER; factionManager.adminSetMemberRole(factionId, memberUuid, newRole); player.sendMessage(Message.raw("[Admin] Demoted ").color("#FFAA00").insert(Message.raw(data.memberName != null ? data.memberName : "player").color("#00FFFF")).insert(Message.raw(" to ").color("#FFAA00")).insert(Message.raw(formatRole(newRole)).color("#888888")).insert(Message.raw(".").color("#FFAA00"))); rebuildList(); } } } } - case "Kick" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } Faction faction = factionManager.getFaction(factionId); if (faction != null) { FactionMember member = faction.getMember(memberUuid); if (member != null && member.role() != FactionRole.LEADER) { factionManager.adminRemoveMember(factionId, memberUuid); player.sendMessage(Message.raw("[Admin] Kicked ").color("#FF5555").insert(Message.raw(data.memberName != null ? data.memberName : "player").color("#00FFFF")).insert(Message.raw(" from the faction.").color("#FF5555"))); rebuildList(); } } } } - case "ViewPlayerInfo" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } String memberName = data.memberName != null ? data.memberName : "Unknown"; guiManager.openAdminPlayerInfo(player, ref, store, playerRef, memberUuid, memberName, factionId, AdminPlayerInfoPage.Origin.FACTION_MEMBERS); } } + case "Teleport" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } PlayerRef targetPlayer = Universe.get().getPlayer(memberUuid); if (targetPlayer != null && targetPlayer.isValid()) { guiManager.closePage(player, ref, store); var targetWorld = Universe.get().getWorld(targetPlayer.getWorldUuid()); if (targetWorld == null) { player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.FAC_WORLD_NOT_FOUND)); return; } var targetTransform = targetPlayer.getTransform(); var targetPos = targetTransform.getPosition(); var targetRot = targetTransform.getRotation(); targetWorld.execute(() -> { var teleport = com.hypixel.hytale.server.core.modules.entity.teleport.Teleport.createForPlayer(targetWorld, targetPos, targetRot); store.addComponent(ref, com.hypixel.hytale.server.core.modules.entity.teleport.Teleport.getComponentType(), teleport); }); player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MEM_TELEPORTED, "#55FF55", data.memberName != null ? data.memberName : "player")); } else { player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.PLR_NOT_ONLINE)); sendUpdate(); } } } + case "Promote" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } Faction faction = factionManager.getFaction(factionId); if (faction != null) { FactionMember member = faction.getMember(memberUuid); if (member != null && member.role() != FactionRole.LEADER) { FactionRole newRole = member.role() == FactionRole.MEMBER ? FactionRole.OFFICER : FactionRole.LEADER; factionManager.adminSetMemberRole(factionId, memberUuid, newRole); player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.MEM_PROMOTED, data.memberName != null ? data.memberName : "player", formatRole(newRole))); rebuildList(); } } } } + case "Demote" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } Faction faction = factionManager.getFaction(factionId); if (faction != null) { FactionMember member = faction.getMember(memberUuid); if (member != null && member.role() != FactionRole.MEMBER) { FactionRole newRole = member.role() == FactionRole.LEADER ? FactionRole.OFFICER : FactionRole.MEMBER; factionManager.adminSetMemberRole(factionId, memberUuid, newRole); player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.MEM_DEMOTED, data.memberName != null ? data.memberName : "player", formatRole(newRole))); rebuildList(); } } } } + case "Kick" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } Faction faction = factionManager.getFaction(factionId); if (faction != null) { FactionMember member = faction.getMember(memberUuid); if (member != null && member.role() != FactionRole.LEADER) { factionManager.adminRemoveMember(factionId, memberUuid); player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.MEM_KICKED, data.memberName != null ? data.memberName : "player")); rebuildList(); } } } } + case "ViewPlayerInfo" -> { if (data.memberUuid != null) { UUID memberUuid = UuidUtil.parseOrNull(data.memberUuid); if (memberUuid == null) { sendUpdate(); return; } String memberName = data.memberName != null ? data.memberName : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); guiManager.openAdminPlayerInfo(player, ref, store, playerRef, memberUuid, memberName, factionId, AdminPlayerInfoPage.Origin.FACTION_MEMBERS); } } default -> sendUpdate(); } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionRelationsPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionRelationsPage.java index 9c4edbcd..788fd702 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionRelationsPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionRelationsPage.java @@ -8,6 +8,8 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.RelationManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -56,26 +58,33 @@ public AdminFactionRelationsPage(PlayerRef playerRef, UUID factionId, FactionMan public void build(Ref ref, UICommandBuilder cmd, UIEventBuilder events, Store store) { cmd.append(UIPaths.ADMIN_FACTION_RELATIONS); AdminNavBarHelper.setupBar(playerRef, "factions", cmd, events); + + // Localize page title and labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_FACTION_RELATIONS)); + cmd.set("#SubtitleLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_SUBTITLE)); + cmd.set("#SetNewRelationLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_SET_NEW)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACK)); + Faction faction = factionManager.getFaction(factionId); if (faction == null) { - cmd.set("#FactionName.Text", "Faction Not Found"); + cmd.set("#FactionName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FACTION_NOT_FOUND_LABEL)); return; } cmd.set("#FactionName.Text", faction.name()); events.addEventBinding(CustomUIEventBindingType.Activating, "#BackBtn", EventData.of("Button", "Back").append("FactionId", factionId.toString()), false); List allies = getRelationsOfType(faction, RelationType.ALLY); List enemies = getRelationsOfType(faction, RelationType.ENEMY); - cmd.set("#AlliesHeader.Text", "ALLIES (" + allies.size() + ")"); + cmd.set("#AlliesHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.REL_ALLIES_HEADER, allies.size())); cmd.clear("#AlliesList"); - if (allies.isEmpty()) { cmd.appendInline("#AlliesList", "Label { Text: \"No allies.\"; Style: (FontSize: 11, TextColor: #666666); Anchor: (Height: 24); }"); } + if (allies.isEmpty()) { cmd.appendInline("#AlliesList", "Label { Text: \"" + HFMessages.get(playerRef, MessageKeys.AdminGui.REL_NO_ALLIES) + "\"; Style: (FontSize: 11, TextColor: #666666); Anchor: (Height: 24); }"); } else { for (int i = 0; i < allies.size(); i++) buildRelationEntry(cmd, events, "#AlliesList", i, allies.get(i), "ally"); } - cmd.set("#EnemiesHeader.Text", "ENEMIES (" + enemies.size() + ")"); + cmd.set("#EnemiesHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.REL_ENEMIES_HEADER, enemies.size())); cmd.clear("#EnemiesList"); - if (enemies.isEmpty()) { cmd.appendInline("#EnemiesList", "Label { Text: \"No enemies.\"; Style: (FontSize: 11, TextColor: #666666); Anchor: (Height: 24); }"); } + if (enemies.isEmpty()) { cmd.appendInline("#EnemiesList", "Label { Text: \"" + HFMessages.get(playerRef, MessageKeys.AdminGui.REL_NO_ENEMIES) + "\"; Style: (FontSize: 11, TextColor: #666666); Anchor: (Height: 24); }"); } else { for (int i = 0; i < enemies.size(); @@ -88,8 +97,11 @@ private void buildRelationEntry(UICommandBuilder cmd, UIEventBuilder events, Str cmd.append(container, UIPaths.ADMIN_FACTION_RELATIONS_ENTRY); String idx = container + "[" + index + "]"; cmd.set(idx + " #FactionName.Text", entry.factionName); - cmd.set(idx + " #LeaderName.Text", "Leader: " + entry.leaderName); + cmd.set(idx + " #LeaderName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.LEADER_PREFIX, entry.leaderName)); cmd.set(idx + " #DateEstablished.Text", formatDate(entry.sinceMillis)); + cmd.set(idx + " #SetAllyBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_BTN_ALLY)); + cmd.set(idx + " #SetNeutralBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_BTN_NEUTRAL)); + cmd.set(idx + " #SetEnemyBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_BTN_ENEMY)); if ("ally".equals(type)) { events.addEventBinding(CustomUIEventBindingType.Activating, idx + " #SetNeutralBtn", EventData.of("Button", "AdminSetNeutral").append("TargetFactionId", entry.factionId.toString()), false); events.addEventBinding(CustomUIEventBindingType.Activating, idx + " #SetEnemyBtn", EventData.of("Button", "AdminSetEnemy").append("TargetFactionId", entry.factionId.toString()), false); @@ -110,17 +122,20 @@ private void buildSetRelationSection(UICommandBuilder cmd, UIEventBuilder events } } int count = Math.min(5, neutralFactions.size()); - cmd.set("#NeutralCount.Text", neutralFactions.size() + " neutral factions"); + cmd.set("#NeutralCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.REL_NEUTRAL_COUNT, neutralFactions.size())); cmd.clear("#NeutralList"); for (int i = 0; i < count; i++) { Faction other = neutralFactions.get(i); cmd.append("#NeutralList", UIPaths.ADMIN_FACTION_RELATIONS_ENTRY); String idx = "#NeutralList[" + i + "]"; FactionMember leader = other.getLeader(); - String leaderName = leader != null ? leader.username() : "Unknown"; + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); cmd.set(idx + " #FactionName.Text", other.name()); - cmd.set(idx + " #LeaderName.Text", "Leader: " + leaderName); + cmd.set(idx + " #LeaderName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.LEADER_PREFIX, leaderName)); cmd.set(idx + " #DateEstablished.Text", ""); + cmd.set(idx + " #SetAllyBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_BTN_ALLY)); + cmd.set(idx + " #SetNeutralBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_BTN_NEUTRAL)); + cmd.set(idx + " #SetEnemyBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_REL_BTN_ENEMY)); events.addEventBinding(CustomUIEventBindingType.Activating, idx + " #SetAllyBtn", EventData.of("Button", "AdminSetAlly").append("TargetFactionId", other.id().toString()), false); events.addEventBinding(CustomUIEventBindingType.Activating, idx + " #SetEnemyBtn", EventData.of("Button", "AdminSetEnemy").append("TargetFactionId", other.id().toString()), false); } @@ -129,11 +144,11 @@ private void buildSetRelationSection(UICommandBuilder cmd, UIEventBuilder events private String formatDate(long sinceMillis) { long daysSince = ChronoUnit.DAYS.between(Instant.ofEpochMilli(sinceMillis), Instant.now()); if (daysSince == 0) { - return "Since: today"; + return HFMessages.get(playerRef, MessageKeys.AdminGui.REL_SINCE_TODAY); } else if (daysSince == 1) { - return "Since: 1 day ago"; + return HFMessages.get(playerRef, MessageKeys.AdminGui.REL_SINCE_ONE_DAY); } else { - return "Since: " + daysSince + " days ago"; + return HFMessages.get(playerRef, MessageKeys.AdminGui.REL_SINCE_DAYS, daysSince); } } @@ -144,7 +159,7 @@ private List getRelationsOfType(Faction faction, RelationType tar Faction other = factionManager.getFaction(relation.targetFactionId()); if (other != null) { FactionMember leader = other.getLeader(); - String leaderName = leader != null ? leader.username() : "Unknown"; + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); entries.add(new RelationEntry(other.id(), other.name(), leaderName, relation.since())); } } @@ -174,9 +189,9 @@ public void handleDataEvent(Ref ref, Store store, Admi } switch (data.button) { case "Back" -> guiManager.openAdminFactionInfo(player, ref, store, playerRef, factionId); - case "AdminSetAlly" -> { if (data.targetFactionId != null) { UUID targetId = UuidUtil.parseOrNull(data.targetFactionId); if (targetId == null) { player.sendMessage(MessageUtil.errorText("Invalid faction.")); return; } Faction target = factionManager.getFaction(targetId); String targetName = target != null ? target.name() : "Unknown"; RelationManager.RelationResult result = relationManager.adminSetRelation(factionId, targetId, RelationType.ALLY); if (result == RelationManager.RelationResult.SUCCESS) player.sendMessage(MessageUtil.text("[Admin] Set mutual ally status with " + targetName + ".", MessageUtil.COLOR_BLUE)); else player.sendMessage(MessageUtil.adminError("Failed: " + result)); refresh(player, ref, store, playerRef); } } - case "AdminSetEnemy" -> { if (data.targetFactionId != null) { UUID targetId = UuidUtil.parseOrNull(data.targetFactionId); if (targetId == null) { player.sendMessage(MessageUtil.errorText("Invalid faction.")); return; } Faction target = factionManager.getFaction(targetId); String targetName = target != null ? target.name() : "Unknown"; RelationManager.RelationResult result = relationManager.adminSetRelation(factionId, targetId, RelationType.ENEMY); if (result == RelationManager.RelationResult.SUCCESS) player.sendMessage(MessageUtil.adminError("Set mutual enemy status with " + targetName + ".")); else player.sendMessage(MessageUtil.adminError("Failed: " + result)); refresh(player, ref, store, playerRef); } } - case "AdminSetNeutral" -> { if (data.targetFactionId != null) { UUID targetId = UuidUtil.parseOrNull(data.targetFactionId); if (targetId == null) { player.sendMessage(MessageUtil.errorText("Invalid faction.")); return; } Faction target = factionManager.getFaction(targetId); String targetName = target != null ? target.name() : "Unknown"; RelationManager.RelationResult result = relationManager.adminSetRelation(factionId, targetId, RelationType.NEUTRAL); if (result == RelationManager.RelationResult.SUCCESS) player.sendMessage(MessageUtil.text("[Admin] Set mutual neutral status with " + targetName + ".", "#888888")); else player.sendMessage(MessageUtil.adminError("Failed: " + result)); refresh(player, ref, store, playerRef); } } + case "AdminSetAlly" -> { if (data.targetFactionId != null) { UUID targetId = UuidUtil.parseOrNull(data.targetFactionId); if (targetId == null) { player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction target = factionManager.getFaction(targetId); String targetName = target != null ? target.name() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); RelationManager.RelationResult result = relationManager.adminSetRelation(factionId, targetId, RelationType.ALLY); if (result == RelationManager.RelationResult.SUCCESS) player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.REL_SET_ALLY, MessageUtil.COLOR_BLUE, targetName)); else player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.REL_FAILED, result)); refresh(player, ref, store, playerRef); } } + case "AdminSetEnemy" -> { if (data.targetFactionId != null) { UUID targetId = UuidUtil.parseOrNull(data.targetFactionId); if (targetId == null) { player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction target = factionManager.getFaction(targetId); String targetName = target != null ? target.name() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); RelationManager.RelationResult result = relationManager.adminSetRelation(factionId, targetId, RelationType.ENEMY); if (result == RelationManager.RelationResult.SUCCESS) player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.REL_SET_ENEMY, targetName)); else player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.REL_FAILED, result)); refresh(player, ref, store, playerRef); } } + case "AdminSetNeutral" -> { if (data.targetFactionId != null) { UUID targetId = UuidUtil.parseOrNull(data.targetFactionId); if (targetId == null) { player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction target = factionManager.getFaction(targetId); String targetName = target != null ? target.name() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); RelationManager.RelationResult result = relationManager.adminSetRelation(factionId, targetId, RelationType.NEUTRAL); if (result == RelationManager.RelationResult.SUCCESS) player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.REL_SET_NEUTRAL, "#888888", targetName)); else player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.REL_FAILED, result)); refresh(player, ref, store, playerRef); } } default -> sendUpdate(); } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionSettingsPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionSettingsPage.java index 788a3291..b6dd8d19 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionSettingsPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminFactionSettingsPage.java @@ -9,6 +9,8 @@ import com.hyperfactions.gui.admin.data.AdminFactionSettingsData; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -64,10 +66,71 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "factions", cmd, events); + // Localize page title and labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_FACTION_SETTINGS)); + cmd.set("#EditingLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_EDITING)); + cmd.set("#AdminOverrideLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_ADMIN_OVERRIDE)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_BACK_TO_INFO)); + + // Left column section headers and row labels + cmd.set("#SectionGeneral.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_GENERAL)); + cmd.set("#NameLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_NAME_LABEL)); + cmd.set("#TagLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_TAG_LABEL)); + cmd.set("#DescLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_DESC_LABEL)); + String editText = HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_EDIT); + cmd.set("#NameEditBtn.Text", editText); + cmd.set("#TagEditBtn.Text", editText); + cmd.set("#DescEditBtn.Text", editText); + cmd.set("#SectionRecruitment.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_RECRUITMENT)); + cmd.set("#StatusLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_STATUS_LABEL)); + cmd.set("#SectionHome.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_HOME)); + cmd.set("#LocationLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_LOCATION_LABEL)); + cmd.set("#ClearHomeBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_CLEAR_HOME)); + cmd.set("#SectionDangerZone.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_DANGER_ZONE)); + cmd.set("#IrreversibleWarning.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_IRREVERSIBLE)); + cmd.set("#DisbandBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_DISBAND_FACTION)); + + // Middle column - territory permissions + cmd.set("#LockHint.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_LOCK_HINT)); + cmd.set("#SectionTerritoryPerms.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_TERRITORY_PERMS)); + cmd.set("#ColOutsider.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_COL_OUT)); + cmd.set("#ColAlly.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_COL_ALLY)); + cmd.set("#ColMember.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_COL_MEM)); + cmd.set("#ColOfficer.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_COL_OFF)); + cmd.set("#CatBuilding.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_CAT_BUILDING)); + cmd.set("#PermBreak.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_BREAK)); + cmd.set("#PermPlace.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_PLACE)); + cmd.set("#CatInteraction.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_CAT_INTERACTION)); + cmd.set("#CatInteractionSub.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_CAT_INTERACT_SUB)); + cmd.set("#PermAll.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_ALL)); + cmd.set("#PermDoor.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_DOOR)); + cmd.set("#PermChest.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_CHEST)); + cmd.set("#PermBench.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_BENCH)); + cmd.set("#PermProcessing.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_PROCESSING)); + cmd.set("#PermSeat.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_SEAT)); + cmd.set("#PermTransport.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_TRANSPORT)); + cmd.set("#CatOther.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_CAT_OTHER)); + cmd.set("#PermCrateUse.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_CRATE_USE)); + cmd.set("#PermNpcTame.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_NPC_TAME)); + cmd.set("#PermPveDamage.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_PVE_DAMAGE)); + + // Right column - appearance, mob spawning, faction settings + cmd.set("#SectionAppearance.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_APPEARANCE)); + cmd.set("#ColorLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_COLOR_LABEL)); + cmd.set("#SectionMobSpawning.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_MOB_SPAWNING)); + cmd.set("#SectionMobSpawningSub.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_MOB_SUB)); + cmd.set("#PermMobSpawning.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_MOB_SPAWNING)); + cmd.set("#PermHostile.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_HOSTILE)); + cmd.set("#PermPassive.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_PASSIVE)); + cmd.set("#PermNeutral.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_NEUTRAL)); + cmd.set("#SectionFactionSettings.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_FACTION_SETTINGS)); + cmd.set("#PermPvP.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_PVP)); + cmd.set("#PermOfficersEdit.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET_PERM_OFFICERS_EDIT)); + // Get the faction Faction faction = factionManager.getFaction(factionId); if (faction == null) { - cmd.set("#FactionName.Text", "Faction Not Found"); + cmd.set("#FactionName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FACTION_NOT_FOUND_LABEL)); return; } @@ -104,7 +167,7 @@ private void buildGeneralSettings(UICommandBuilder cmd, UIEventBuilder events, F // Tag String tagDisplay = faction.tag() != null && !faction.tag().isEmpty() ? "[" + faction.tag().toUpperCase() + "]" - : "(None)"; + : HFMessages.get(playerRef, MessageKeys.AdminGui.NONE_PAREN); cmd.set("#TagValue.Text", tagDisplay); events.addEventBinding( CustomUIEventBindingType.Activating, @@ -116,7 +179,7 @@ private void buildGeneralSettings(UICommandBuilder cmd, UIEventBuilder events, F // Description String desc = faction.description() != null && !faction.description().isEmpty() ? faction.description() - : "(None)"; + : HFMessages.get(playerRef, MessageKeys.AdminGui.NONE_PAREN); cmd.set("#DescValue.Text", desc); events.addEventBinding( CustomUIEventBindingType.Activating, @@ -127,8 +190,8 @@ private void buildGeneralSettings(UICommandBuilder cmd, UIEventBuilder events, F // Recruitment dropdown cmd.set("#RecruitmentDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Open"), "OPEN"), - new DropdownEntryInfo(LocalizableString.fromString("Invite Only"), "INVITE_ONLY") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN)), "OPEN"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)), "INVITE_ONLY") )); cmd.set("#RecruitmentDropdown.Value", faction.open() ? "OPEN" : "INVITE_ONLY"); events.addEventBinding( @@ -150,7 +213,7 @@ private void buildGeneralSettings(UICommandBuilder cmd, UIEventBuilder events, F worldName, home.x(), home.y(), home.z()); cmd.set("#HomeLocation.Text", homeText); } else { - cmd.set("#HomeLocation.Text", "Not set"); + cmd.set("#HomeLocation.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.NOT_SET)); } events.addEventBinding( CustomUIEventBindingType.Activating, @@ -220,7 +283,7 @@ private void buildPermissions(UICommandBuilder cmd, UIEventBuilder events, Facti // PvP toggle buildToggle(cmd, events, "PvPToggle", "pvpEnabled", perms.pvpEnabled(), config, false); - cmd.set("#PvPStatus.Text", perms.pvpEnabled() ? "Enabled" : "Disabled"); + cmd.set("#PvPStatus.Text", perms.pvpEnabled() ? HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_ENABLED) : HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_DISABLED)); cmd.set("#PvPStatus.Style.TextColor", perms.pvpEnabled() ? "#55FF55" : "#FF5555"); // Officers can edit @@ -284,7 +347,7 @@ public void handleDataEvent(Ref ref, Store store, Faction faction = factionManager.getFaction(factionId); if (faction == null && !data.button.equals("Back")) { - player.sendMessage(MessageUtil.adminError("Faction not found.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.Common.FACTION_NOT_FOUND)); sendUpdate(); return; } @@ -324,7 +387,7 @@ private void handleTogglePerm(Player player, Ref ref, Store ref, Store ref, Store ref, Store ref, Store Faction updatedFaction = faction.withOpen(isOpen); factionManager.updateFaction(updatedFaction); - player.sendMessage(MessageUtil.adminSuccess("Set recruitment to " + (isOpen ? "Open" : "Invite Only"))); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.SET_RECRUITMENT_SET, isOpen ? HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN) : HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY))); rebuildPage(); } private void handleClearHome(Player player, Ref ref, Store store, Faction faction) { if (faction.home() == null) { - player.sendMessage(MessageUtil.text("[Admin] This faction has no home set.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.SET_NO_HOME, MessageUtil.COLOR_GOLD)); sendUpdate(); return; } @@ -407,7 +470,7 @@ private void handleClearHome(Player player, Ref ref, Store ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "factions", cmd, events); + // Localize page title and common labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_FACTIONS)); + cmd.set("#SearchLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SEARCH)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SORT)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_NEXT)); + // Build faction list buildFactionList(cmd, events); } @@ -97,7 +106,7 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { // Get all factions sorted List factions = getSortedFactions(); - cmd.set("#FactionCount.Text", factions.size() + " factions"); + cmd.set("#FactionCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FACTIONS_SUFFIX, factions.size())); // Search input if (!searchQuery.isEmpty()) { @@ -112,9 +121,9 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { // Sort dropdown cmd.set("#SortDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Power"), "POWER"), - new DropdownEntryInfo(LocalizableString.fromString("Name"), "NAME"), - new DropdownEntryInfo(LocalizableString.fromString("Members"), "MEMBERS") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_POWER)), "POWER"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_NAME)), "NAME"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_MEMBERS)), "MEMBERS") )); cmd.set("#SortDropdown.Value", sortMode.name()); events.addEventBinding( @@ -143,7 +152,7 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -181,14 +190,19 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int // Leader info FactionMember leader = faction.getLeader(); - String leaderName = leader != null ? leader.username() : "None"; - cmd.set(idx + " #LeaderName.Text", "Leader: " + leaderName); + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.NONE); + cmd.set(idx + " #LeaderName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.LEADER_PREFIX, leaderName)); // Stats cmd.set(idx + " #PowerDisplay.Text", String.format("%.0f/%.0f", stats.currentPower(), stats.maxPower())); cmd.set(idx + " #ClaimsDisplay.Text", String.valueOf(faction.claims().size())); cmd.set(idx + " #MemberCount.Text", String.valueOf(faction.members().size())); + // Localize stat labels + cmd.set(idx + " #PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_POWER)); + cmd.set(idx + " #ClaimsLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_CLAIMS)); + cmd.set(idx + " #MembersLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_MEMBERS)); + // Expansion state cmd.set(idx + " #ExpandIcon.Visible", !isExpanded); cmd.set(idx + " #CollapseIcon.Visible", isExpanded); @@ -205,6 +219,18 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int // Extended info (only set values if expanded) if (isExpanded) { + // Localize expanded labels + cmd.set(idx + " #CreatedLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_CREATED)); + cmd.set(idx + " #HomeLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_HOME)); + + // Localize button texts + cmd.set(idx + " #TpHomeBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_TP_HOME)); + cmd.set(idx + " #ViewInfoBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_VIEW_INFO)); + cmd.set(idx + " #MembersBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_MEMBERS_BTN)); + cmd.set(idx + " #SettingsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_SETTINGS)); + cmd.set(idx + " #UnclaimAllBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_UNCLAIM_ALL)); + cmd.set(idx + " #DisbandBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_FAC_ENTRY_DISBAND)); + // Created date String createdDate = DATE_FORMAT.format(Instant.ofEpochMilli(faction.createdAt())); cmd.set(idx + " #CreatedDate.Text", createdDate); @@ -216,7 +242,7 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int String.format("%s (%.0f, %.0f, %.0f)", home.world(), home.x(), home.y(), home.z())); cmd.set(idx + " #TpHomeBtn.Visible", true); } else { - cmd.set(idx + " #HomeLocation.Text", "Not set"); + cmd.set(idx + " #HomeLocation.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.NOT_SET)); cmd.set(idx + " #TpHomeBtn.Visible", false); } @@ -387,7 +413,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction faction = factionManager.getFaction(factionId); @@ -398,7 +424,7 @@ public void handleDataEvent(Ref ref, Store store, // Get target world World targetWorld = Universe.get().getWorld(home.world()); if (targetWorld == null) { - player.sendMessage(MessageUtil.errorText("Target world not found.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.FAC_WORLD_NOT_FOUND)); return; } @@ -410,9 +436,9 @@ public void handleDataEvent(Ref ref, Store store, store.addComponent(ref, Teleport.getComponentType(), teleport); }); - player.sendMessage(MessageUtil.text("Teleported to " + faction.name() + "'s home.", "#00FFFF")); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.FAC_TELEPORTED, "#00FFFF", faction.name())); } else { - player.sendMessage(MessageUtil.errorText("Faction has no home set.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.FAC_NO_HOME)); } } } @@ -421,7 +447,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction faction = factionManager.getFaction(factionId); @@ -436,7 +462,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction faction = factionManager.getFaction(factionId); @@ -450,7 +476,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction faction = factionManager.getFaction(factionId); @@ -464,7 +490,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } guiManager.openAdminDisbandConfirm(player, ref, store, playerRef, factionId, data.factionName); @@ -475,7 +501,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction faction = factionManager.getFaction(factionId); diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminHelpPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminHelpPage.java index d2c9fe75..0ac0c061 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminHelpPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminHelpPage.java @@ -4,44 +4,264 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.admin.AdminNavBarHelper; import com.hyperfactions.gui.admin.data.AdminHelpData; +import com.hyperfactions.gui.help.*; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; +import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; +import com.hypixel.hytale.server.core.ui.builder.EventData; import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder; import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder; import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** - * Admin Help page - placeholder for admin help/documentation. + * Admin Help page with sidebar navigation and card-based content area. + * Mirrors the player help layout but shows only admin categories. */ public class AdminHelpPage extends InteractiveCustomUIPage { + private static final Pattern CELL_HEX_COLOR = Pattern.compile("^\\[#([0-9A-Fa-f]{6})]\\s*(.+)$"); + private final PlayerRef playerRef; private final GuiManager guiManager; - /** Creates a new AdminHelpPage. */ + private final HelpCategory selectedCategory; + + /** Creates a new AdminHelpPage with default category. */ public AdminHelpPage(PlayerRef playerRef, GuiManager guiManager) { + this(playerRef, guiManager, HelpCategory.ADMIN_OVERVIEW); + } + + /** Creates a new AdminHelpPage with a specific category. */ + public AdminHelpPage(PlayerRef playerRef, GuiManager guiManager, + @NotNull HelpCategory initialCategory) { super(playerRef, CustomPageLifetime.CanDismiss, AdminHelpData.CODEC); this.playerRef = playerRef; this.guiManager = guiManager; + this.selectedCategory = initialCategory.isAdmin() ? initialCategory : HelpCategory.ADMIN_OVERVIEW; } - /** Builds . */ @Override public void build(Ref ref, UICommandBuilder cmd, UIEventBuilder events, Store store) { - // Load the placeholder template first (nav bar elements must exist before setupBar) cmd.append(UIPaths.ADMIN_HELP); - // Setup admin nav bar (must be after template load) + // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "help", cmd, events); + + // Page title + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_HELP)); + + // Set localized sidebar button labels (admin categories only) + int catIdx = 0; + for (HelpCategory category : HelpCategory.values()) { + if (!category.isAdmin()) continue; + cmd.set("#Cat" + catIdx + ".Text", " " + category.displayName(playerRef)); + catIdx++; + } + + // Setup category buttons + setupCategoryButtons(cmd, events); + + // Set the category title header text and color + cmd.set("#CategoryTitle.Text", selectedCategory.displayName(playerRef).toUpperCase()); + cmd.set("#CategoryTitle.Style.TextColor", selectedCategory.color()); + + // Build topic cards + buildTopicCards(cmd); + } + + private void setupCategoryButtons(UICommandBuilder cmd, UIEventBuilder events) { + int idx = 0; + for (HelpCategory category : HelpCategory.values()) { + if (!category.isAdmin()) continue; + String buttonId = "#Cat" + idx; + boolean isSelected = category == selectedCategory; + + if (isSelected) { + cmd.set(buttonId + ".Disabled", true); + } else { + events.addEventBinding( + CustomUIEventBindingType.Activating, + buttonId, + EventData.of("Button", "SelectCategory") + .append("Category", category.id()) + ); + } + idx++; + } + } + + private void buildTopicCards(UICommandBuilder cmd) { + List topics = HelpRegistry.getInstance().getTopics(selectedCategory); + int cardIndex = 0; + + for (HelpTopic topic : topics) { + cmd.append("#ContentList", UIPaths.HELP_TOPIC_CARD); + String cardPrefix = "#ContentList[" + cardIndex + "]"; + cmd.set(cardPrefix + " #Title.Text", topic.title(playerRef)); + + int lineIndex = 0; + for (HelpEntry entry : topic.entries()) { + String linesContainer = cardPrefix + " #Lines"; + + // Table entries: inline rows with calculated height and variable columns + if (entry.type() == HelpEntry.EntryType.TABLE_HEADER || entry.type() == HelpEntry.EntryType.TABLE_ROW) { + boolean isHeader = entry.type() == HelpEntry.EntryType.TABLE_HEADER; + String[] columnKeys = entry.columnKeys(); + int numCols = columnKeys.length; + + String[] cellTexts = new String[numCols]; + for (int col = 0; col < numCols; col++) { + cellTexts[col] = HelpMessages.get(playerRef, columnKeys[col]); + } + int rowHeight = estimateTableRowHeight(cellTexts, numCols); + + cmd.appendInline(linesContainer, buildTableRowInline(rowHeight, numCols, isHeader)); + String rowSelector = linesContainer + "[" + lineIndex + "]"; + + for (int col = 0; col < numCols; col++) { + applyCellText(cmd, rowSelector, col, cellTexts[col], entry.color()); + } + lineIndex++; + continue; + } + + String template = getTemplateForType(entry.type()); + cmd.append(linesContainer, template); + String selector = linesContainer + "[" + lineIndex + "]"; + + if (entry.type() != HelpEntry.EntryType.SPACER && entry.type() != HelpEntry.EntryType.SEPARATOR) { + String text = entry.text(playerRef); + + if (entry.type() == HelpEntry.EntryType.LIST && !text.matches("^\\d+\\.\\s.*")) { + text = "\u2022 " + text; + } + + java.awt.Color baseColor = entry.color() != null + ? java.awt.Color.decode(entry.color()) : null; + cmd.set(selector + " #Text.TextSpans", HelpRichText.parse(text, baseColor)); + + if (entry.color() != null && entry.type() == HelpEntry.EntryType.CALLOUT) { + cmd.set(selector + " #AccentBar.Background.Color", entry.color()); + } + } + lineIndex++; + } + cardIndex++; + } + } + + private void applyCellText(UICommandBuilder cmd, String rowSelector, + int col, String text, @Nullable String rowColor) { + String displayText = text; + java.awt.Color cellColor = rowColor != null ? java.awt.Color.decode(rowColor) : null; + + Matcher hexMatcher = CELL_HEX_COLOR.matcher(displayText); + if (hexMatcher.matches()) { + cellColor = java.awt.Color.decode("#" + hexMatcher.group(1)); + displayText = hexMatcher.group(2); + } + + cmd.set(rowSelector + " #Col" + col + ".TextSpans", HelpRichText.parse(displayText, cellColor)); + } + + private static int[] getColumnPixelWidths(int numCols) { + return switch (numCols) { + case 3 -> new int[]{170, 170, 280}; + case 4 -> new int[]{170, 85, 85, 270}; + default -> new int[]{217, 400}; + }; + } + + private static int[] getColumnFixedWidths(int numCols) { + return switch (numCols) { + case 3 -> new int[]{170, 170}; + case 4 -> new int[]{170, 85, 85}; + default -> new int[]{217}; + }; + } + + private static int estimateTableRowHeight(String[] cellTexts, int numCols) { + int[] pixelWidths = getColumnPixelWidths(numCols); + int maxLines = 1; + for (int col = 0; col < Math.min(cellTexts.length, numCols); col++) { + int charsPerLine = Math.max(6, pixelWidths[col] / 6); + int lines = Math.max(1, (int) Math.ceil((double) cellTexts[col].length() / charsPerLine)); + maxLines = Math.max(maxLines, lines); + } + return Math.max(20, 4 + (maxLines * 13)); + } + + private static String buildTableRowInline(int height, int numCols, boolean isHeader) { + String bg = isHeader ? "#141a28" : "#0f1520"; + String tc = isHeader ? "#DDDDDD" : "#CCCCCC"; + String bd = isHeader ? ", RenderBold: true" : ""; + String bh = "2"; + int[] widths = getColumnFixedWidths(numCols); + + StringBuilder sb = new StringBuilder(); + sb.append("Group { Anchor: (Height: ").append(height).append("); Background: (Color: ").append(bg).append("); "); + + int pos = 2; + for (int col = 0; col < numCols; col++) { + boolean last = (col == numCols - 1); + String style = "Style: (FontSize: 10, TextColor: " + tc + bd + ", Wrap: true, VerticalAlignment: Center)"; + + if (last) { + sb.append("Label #Col").append(col).append(" { Text: \"\"; ").append(style).append("; "); + sb.append("Padding: (Left: 10, Right: 8); "); + sb.append("Anchor: (Left: ").append(pos).append(", Right: 2, Top: 0, Bottom: 0); } "); + } else { + sb.append("Group { Anchor: (Left: ").append(pos).append(", Width: ").append(widths[col]); + sb.append(", Top: 0, Bottom: 0); "); + sb.append("Label #Col").append(col).append(" { Text: \"\"; ").append(style).append("; "); + sb.append("Padding: (Left: 10, Right: 6); "); + sb.append("Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); } } "); + + int sepPos = pos + widths[col] + 1; + sb.append("Group { Anchor: (Width: 1, Left: ").append(sepPos); + sb.append(", Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } "); + pos = sepPos + 2; + } + } + + if (isHeader) { + sb.append("Group { Anchor: (Height: 1, Top: 0, Left: 0, Right: 0); Background: (Color: #2a3a4a); } "); + } + sb.append("Group { Anchor: (Height: ").append(bh).append(", Bottom: 0, Left: 0, Right: 0); Background: (Color: #2a3a4a); } "); + sb.append("Group { Anchor: (Width: 1, Left: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } "); + sb.append("Group { Anchor: (Width: 1, Right: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } "); + sb.append("}"); + return sb.toString(); + } + + private String getTemplateForType(HelpEntry.EntryType type) { + return switch (type) { + case TEXT -> UIPaths.HELP_LINE_TEXT; + case COMMAND -> UIPaths.HELP_LINE_COMMAND; + case HEADING -> UIPaths.HELP_LINE_HEADING; + case SPACER -> UIPaths.HELP_SPACER; + case BOLD -> UIPaths.HELP_LINE_BOLD; + case ITALIC -> UIPaths.HELP_LINE_ITALIC; + case LIST -> UIPaths.HELP_LINE_LIST; + case SEPARATOR -> UIPaths.HELP_SEPARATOR; + case CALLOUT -> UIPaths.HELP_LINE_CALLOUT; + case TABLE_HEADER, TABLE_ROW -> UIPaths.HELP_LINE_TEXT; // fallback, not reached + }; } - /** Handles data event. */ @Override public void handleDataEvent(Ref ref, Store store, AdminHelpData data) { @@ -51,6 +271,7 @@ public void handleDataEvent(Ref ref, Store store, PlayerRef playerRef = store.getComponent(ref, PlayerRef.getComponentType()); if (player == null || playerRef == null) { + sendUpdate(); return; } @@ -59,12 +280,20 @@ public void handleDataEvent(Ref ref, Store store, return; } - // Handle other button events (placeholder for future implementation) - if (data.button != null) { - switch (data.button) { - case "Back" -> guiManager.closePage(player, ref, store); - default -> throw new IllegalStateException("Unexpected value"); - } + // Handle category selection + if ("SelectCategory".equals(data.button) && data.category != null) { + HelpCategory newCategory = HelpCategory.fromId(data.category); + AdminHelpPage newPage = new AdminHelpPage(playerRef, guiManager, newCategory); + player.getPageManager().openCustomPage(ref, store, newPage); + return; } + + // Handle back button + if (data.button != null && "Back".equals(data.button)) { + guiManager.closePage(player, ref, store); + return; + } + + sendUpdate(); } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminMainPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminMainPage.java index 19b9a6ae..9612d2b6 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminMainPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminMainPage.java @@ -8,6 +8,8 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -64,6 +66,13 @@ public void build(Ref ref, UICommandBuilder cmd, AdminNavBarHelper.setupBar(playerRef, "dashboard", cmd, events); + // Localize page title and buttons + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_MAIN)); + cmd.set("#ZonesBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONES_BTN)); + cmd.set("#ReloadBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_RELOAD_BTN)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_NEXT)); + // Stats overview Collection allFactions = factionManager.getAllFactions(); int totalFactions = allFactions.size(); @@ -74,9 +83,9 @@ public void build(Ref ref, UICommandBuilder cmd, .mapToInt(f -> f.claims().size()) .sum(); - cmd.set("#TotalFactions.Text", "Factions: " + totalFactions); - cmd.set("#TotalMembers.Text", "Total Members: " + totalMembers); - cmd.set("#TotalClaims.Text", "Total Claims: " + totalClaims); + cmd.set("#TotalFactions.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.DASH_FACTIONS_PREFIX, totalFactions)); + cmd.set("#TotalMembers.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.DASH_MEMBERS_PREFIX, totalMembers)); + cmd.set("#TotalClaims.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.DASH_CLAIMS_PREFIX, totalClaims)); // Navigation buttons events.addEventBinding( @@ -122,14 +131,14 @@ public void build(Ref ref, UICommandBuilder cmd, // Faction info String colorHex = faction.color() != null ? faction.color() : "#00FFFF"; cmd.set(prefix + "#FactionName.Text", faction.name()); - cmd.set(prefix + "#MemberCount.Text", faction.members().size() + " members"); - cmd.set(prefix + "#PowerCount.Text", String.format("%.0f/%.0f power", stats.currentPower(), stats.maxPower())); - cmd.set(prefix + "#ClaimCount.Text", faction.claims().size() + " claims"); + cmd.set(prefix + "#MemberCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.MEMBERS_SUFFIX, faction.members().size())); + cmd.set(prefix + "#PowerCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.POWER_FORMAT, String.format("%.0f", stats.currentPower()), String.format("%.0f", stats.maxPower()))); + cmd.set(prefix + "#ClaimCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.CLAIMS_SUFFIX, faction.claims().size())); // Leader info FactionMember leader = faction.getLeader(); - String leaderName = leader != null ? leader.username() : "None"; - cmd.set(prefix + "#LeaderName.Text", "Leader: " + leaderName); + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.NONE); + cmd.set(prefix + "#LeaderName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.LEADER_PREFIX, leaderName)); // Action buttons events.addEventBinding( @@ -153,7 +162,7 @@ public void build(Ref ref, UICommandBuilder cmd, } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -203,7 +212,7 @@ public void handleDataEvent(Ref ref, Store store, case "Reload" -> { guiManager.closePage(player, ref, store); - player.sendMessage(MessageUtil.text("Use /f reload to reload configuration.", "#00FFFF")); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MAIN_RELOAD_HINT, "#00FFFF")); } case "PrevPage" -> { @@ -220,7 +229,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } @@ -233,7 +242,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID factionId = UuidUtil.parseOrNull(data.factionId); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.INVALID_FACTION)); return; } Faction faction = factionManager.getFaction(factionId); @@ -241,7 +250,7 @@ public void handleDataEvent(Ref ref, Store store, int claimCount = faction.claims().size(); // Admin unclaim - prompt for command guiManager.closePage(player, ref, store); - player.sendMessage(MessageUtil.text("Use /f admin unclaim " + data.factionName + " to unclaim all " + claimCount + " chunks.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MAIN_UNCLAIM_HINT, MessageUtil.COLOR_GOLD, data.factionName, claimCount)); } } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayerInfoPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayerInfoPage.java index 62faee3b..3924803c 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayerInfoPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayerInfoPage.java @@ -18,6 +18,8 @@ import com.hyperfactions.manager.PowerManager; import com.hyperfactions.util.Logger; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.TimeUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -92,6 +94,45 @@ public void build(Ref ref, UICommandBuilder cmd, UIEventBuilder events, Store store) { cmd.append(UIPaths.ADMIN_PLAYER_INFO); AdminNavBarHelper.setupBar(playerRef, "factions", cmd, events); + + // Localize page title + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_PLAYER_INFO)); + + // Localize header labels + cmd.set("#FirstJoinedLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_FIRST_JOINED)); + cmd.set("#LastOnlineLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_LAST_ONLINE)); + cmd.set("#UuidLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_UUID)); + + // Localize stat card labels + cmd.set("#PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_POWER)); + cmd.set("#CombatLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_COMBAT)); + cmd.set("#KDLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_KD_SUBTITLE)); + cmd.set("#KDRLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_KDR)); + cmd.set("#FactionLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_FACTION)); + + // Localize section headers + cmd.set("#HistoryHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_MEMBERSHIP_HISTORY)); + cmd.set("#AdminControlsHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ADMIN_CONTROLS)); + cmd.set("#PowerMgmtHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_POWER_MANAGEMENT)); + cmd.set("#CombatSectionHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_COMBAT)); + cmd.set("#BypassHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_BYPASS_FLAGS)); + + // Localize button labels + cmd.set("#SetPowerBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SET)); + cmd.set("#ResetPowerBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_RESET)); + cmd.set("#MaxLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_MAX_PREFIX)); + cmd.set("#SetMaxBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_SET_MAX_BTN)); + cmd.set("#ResetMaxBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_RESET)); + cmd.set("#ResetKDBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_RESET_KD)); + cmd.set("#ViewFactionBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_VIEW)); + cmd.set("#KickBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_KICK_FROM_FACTION)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_BACK)); + + // Localize no-faction label and bypass checkbox labels + cmd.set("#NoFactionLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.NO_FACTION)); + cmd.set("#NoLossLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_NO_POWER_LOSS)); + cmd.set("#NoDecayLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_NO_CLAIM_DECAY)); + buildContent(cmd, events); } @@ -101,7 +142,7 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { // Online status boolean isOnline = isOnline(targetPlayerUuid); - cmd.set("#OnlineStatus.Text", isOnline ? "Online" : "Offline"); + cmd.set("#OnlineStatus.Text", isOnline ? HFMessages.get(playerRef, MessageKeys.Common.ONLINE) : HFMessages.get(playerRef, MessageKeys.Common.OFFLINE)); cmd.set("#OnlineStatus.Style.TextColor", GuiColors.forOnlineStatus(isOnline)); // Load player data once for all sections @@ -111,15 +152,15 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { if (cachedData != null && cachedData.getFirstJoined() > 0) { cmd.set("#FirstJoinedValue.Text", TimeUtil.formatDate(cachedData.getFirstJoined())); } else { - cmd.set("#FirstJoinedValue.Text", "Unknown"); + cmd.set("#FirstJoinedValue.Text", HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN)); } if (isOnline) { - cmd.set("#LastOnlineValue.Text", "Now"); + cmd.set("#LastOnlineValue.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.NOW)); cmd.set("#LastOnlineValue.Style.TextColor", "#55FF55"); } else if (cachedData != null && cachedData.getLastOnline() > 0) { cmd.set("#LastOnlineValue.Text", TimeUtil.formatRelative(cachedData.getLastOnline())); } else { - cmd.set("#LastOnlineValue.Text", "Unknown"); + cmd.set("#LastOnlineValue.Text", HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN)); } // === Faction Card === @@ -132,7 +173,7 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { if (faction != null) { cmd.set("#FactionName.Text", faction.name()); } else { - cmd.set("#FactionName.Text", "No Faction"); + cmd.set("#FactionName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.NO_FACTION)); cmd.set("#FactionName.Style.TextColor", "#888888"); } @@ -163,9 +204,9 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { // Max override indicator if (power.maxPowerOverride() != null) { - cmd.set("#MaxOverrideLabel.Text", "(custom max)"); + cmd.set("#MaxOverrideLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.CUSTOM_MAX)); } else { - cmd.set("#MaxOverrideLabel.Text", "(default max)"); + cmd.set("#MaxOverrideLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.DEFAULT_MAX)); cmd.set("#MaxOverrideLabel.Style.TextColor", "#666666"); } @@ -196,7 +237,7 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { List history = new java.util.ArrayList<>(cachedData.getMembershipHistory()); Collections.reverse(history); - cmd.set("#HistoryCount.Text", history.size() + " records"); + cmd.set("#HistoryCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_RECORDS, history.size())); cmd.appendInline("#HistoryList", "Group #HistoryCards { LayoutMode: Top; }"); for (int i = 0; i < history.size(); i++) { @@ -206,8 +247,8 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { cmd.set(idx + " #HFactionName.Text", rec.factionName()); cmd.set(idx + " #HRole.Text", ConfigManager.get().getRoleDisplayName(rec.highestRole())); - cmd.set(idx + " #HJoined.Text", "Joined: " + TimeUtil.formatDate(rec.joinedAt())); - cmd.set(idx + " #HLeft.Text", rec.isActive() ? "Current" : "Left: " + TimeUtil.formatDate(rec.leftAt())); + cmd.set(idx + " #HJoined.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_JOINED_DATE, TimeUtil.formatDate(rec.joinedAt()))); + cmd.set(idx + " #HLeft.Text", rec.isActive() ? HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_CURRENT) : HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_LEFT_DATE, TimeUtil.formatDate(rec.leftAt()))); cmd.set(idx + " #HReason.Text", formatReason(rec.reason())); cmd.set(idx + " #HReason.Style.TextColor", GuiColors.forLeaveReason(rec.reason())); cmd.set(idx + " #RoleBar.Background.Color", GuiColors.forRole(rec.highestRole())); @@ -215,7 +256,7 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { } else { cmd.set("#HistoryCount.Text", ""); cmd.appendInline("#HistoryList", - "Label { Text: \"No membership history\"; Style: (FontSize: 10, TextColor: #555555); }"); + "Label { Text: \"" + HFMessages.get(playerRef, MessageKeys.AdminGui.NO_MEMBERSHIP_HISTORY) + "\"; Style: (FontSize: 10, TextColor: #555555); }"); } // === Kick button === @@ -224,9 +265,9 @@ private void buildContent(UICommandBuilder cmd, UIEventBuilder events) { } else { FactionMember targetMember = faction.getMember(targetPlayerUuid); if (targetMember != null && targetMember.isLeader() && faction.getMemberCount() == 1) { - cmd.set("#KickBtn.Text", "Disband Faction"); + cmd.set("#KickBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_DISBAND_FACTION)); } else if (targetMember != null && targetMember.isLeader()) { - cmd.set("#KickBtn.Text", "Kick Leader"); + cmd.set("#KickBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_KICK_LEADER)); } } @@ -297,21 +338,25 @@ public void handleDataEvent(Ref ref, Store store, double newPower = powerManager.adjustPlayerPower(targetPlayerUuid, delta); logAdminPowerChange(adminUuid, "Admin adjusted " + targetPlayerName + "'s power by " + String.format("%.1f", delta) - + " (" + String.format("%.1f", oldPower) + " -> " + String.format("%.1f", newPower) + ")"); + + " (" + String.format("%.1f", oldPower) + " -> " + String.format("%.1f", newPower) + ")", + MessageKeys.LogsGui.MSG_ADMIN_POWER_ADJUSTED, targetPlayerName, + String.format("%.1f", delta), String.format("%.1f", oldPower), String.format("%.1f", newPower)); reopenPage(player, ref, store, playerRef); } case "SetPower" -> { double amount = parseDoubleOrNaN(data.powerInput); if (Double.isNaN(amount)) { - player.sendMessage(MessageUtil.adminError("Enter a valid number.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.PLR_ENTER_VALID_NUMBER)); return; } double oldPower = powerManager.getPlayerPower(targetPlayerUuid).power(); double newPower = powerManager.setPlayerPower(targetPlayerUuid, amount); logAdminPowerChange(adminUuid, "Admin set " + targetPlayerName + "'s power to " + String.format("%.1f", newPower) - + " (was " + String.format("%.1f", oldPower) + ")"); + + " (was " + String.format("%.1f", oldPower) + ")", + MessageKeys.LogsGui.MSG_ADMIN_POWER_SET, targetPlayerName, + String.format("%.1f", newPower), String.format("%.1f", oldPower)); reopenPage(player, ref, store, playerRef); } @@ -320,14 +365,16 @@ public void handleDataEvent(Ref ref, Store store, double newPower = powerManager.resetPlayerPower(targetPlayerUuid); logAdminPowerChange(adminUuid, "Admin reset " + targetPlayerName + "'s power to " + String.format("%.1f", newPower) - + " (was " + String.format("%.1f", oldPower) + ")"); + + " (was " + String.format("%.1f", oldPower) + ")", + MessageKeys.LogsGui.MSG_ADMIN_POWER_RESET, targetPlayerName, + String.format("%.1f", newPower), String.format("%.1f", oldPower)); reopenPage(player, ref, store, playerRef); } case "SetMax" -> { double amount = parseDoubleOrNaN(data.powerInput); if (Double.isNaN(amount) || amount <= 0) { - player.sendMessage(MessageUtil.adminError("Enter a valid positive number.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.PLR_ENTER_VALID_POSITIVE)); return; } PlayerPower old = powerManager.getPlayerPower(targetPlayerUuid); @@ -335,7 +382,9 @@ public void handleDataEvent(Ref ref, Store store, powerManager.setPlayerMaxPower(targetPlayerUuid, amount); logAdminPowerChange(adminUuid, "Admin set " + targetPlayerName + "'s max power to " + String.format("%.1f", amount) - + " (was " + String.format("%.1f", oldMax) + ")"); + + " (was " + String.format("%.1f", oldMax) + ")", + MessageKeys.LogsGui.MSG_ADMIN_MAXPOWER_SET, targetPlayerName, + String.format("%.1f", amount), String.format("%.1f", oldMax)); reopenPage(player, ref, store, playerRef); } @@ -344,7 +393,10 @@ public void handleDataEvent(Ref ref, Store store, double oldMax = old.getEffectiveMaxPower(); powerManager.resetPlayerMaxPower(targetPlayerUuid); logAdminPowerChange(adminUuid, - "Admin reset " + targetPlayerName + "'s max power to global default"); + "Admin reset " + targetPlayerName + "'s max power to global default (" + + String.format("%.1f", ConfigManager.get().getMaxPlayerPower()) + ")", + MessageKeys.LogsGui.MSG_ADMIN_MAXPOWER_RESET, targetPlayerName, + String.format("%.1f", ConfigManager.get().getMaxPlayerPower())); reopenPage(player, ref, store, playerRef); } @@ -354,7 +406,9 @@ public void handleDataEvent(Ref ref, Store store, boolean newState = !current.powerLossDisabled(); powerManager.setPlayerPowerLossDisabled(targetPlayerUuid, newState); logAdminPowerChange(adminUuid, - "Admin " + (newState ? "disabled" : "enabled") + " power loss for " + targetPlayerName); + "Admin " + (newState ? "disabled" : "enabled") + " power loss for " + targetPlayerName, + newState ? MessageKeys.LogsGui.MSG_ADMIN_POWERLOSS_DISABLED : MessageKeys.LogsGui.MSG_ADMIN_POWERLOSS_ENABLED, + targetPlayerName); reopenPage(player, ref, store, playerRef); } @@ -364,7 +418,9 @@ public void handleDataEvent(Ref ref, Store store, boolean newState = !current.claimDecayExempt(); powerManager.setPlayerClaimDecayExempt(targetPlayerUuid, newState); logAdminPowerChange(adminUuid, - "Admin " + (newState ? "enabled" : "disabled") + " claim decay exemption for " + targetPlayerName); + "Admin " + (newState ? "enabled" : "disabled") + " claim decay exemption for " + targetPlayerName, + newState ? MessageKeys.LogsGui.MSG_ADMIN_DECAY_ENABLED : MessageKeys.LogsGui.MSG_ADMIN_DECAY_DISABLED, + targetPlayerName); reopenPage(player, ref, store, playerRef); } @@ -376,10 +432,11 @@ public void handleDataEvent(Ref ref, Store store, Faction faction = factionManager.getPlayerFaction(targetPlayerUuid); if (faction != null) { Faction updated = faction.withLog(FactionLog.create(FactionLog.LogType.ADMIN_POWER, - "Admin reset K/D for " + targetPlayerName, adminUuid)); + "Admin reset K/D for " + targetPlayerName, adminUuid, + MessageKeys.LogsGui.MSG_ADMIN_KD_RESET, targetPlayerName)); factionManager.updateFaction(updated); } - player.sendMessage(MessageUtil.adminSuccess("Reset K/D for " + targetPlayerName + ".")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.PLR_KD_RESET, targetPlayerName)); reopenPage(player, ref, store, playerRef); } @@ -399,8 +456,7 @@ public void handleDataEvent(Ref ref, Store store, // Last member — disband the faction factionManager.forceDisband(faction.id(), "[Admin] Disbanded via admin kick of last member " + targetPlayerName); - player.sendMessage(MessageUtil.text("[Admin] Faction '" + faction.name() - + "' disbanded (last member kicked).", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.PLR_DISBANDED_KICK, MessageUtil.COLOR_GOLD, faction.name())); // Navigate back to factions list since faction no longer exists guiManager.openAdminFactions(player, ref, store, playerRef); } else { @@ -414,13 +470,13 @@ public void handleDataEvent(Ref ref, Store store, .withLog(FactionLog.create(FactionLog.LogType.LEADER_TRANSFER, "[Admin] Leadership transferred from " + targetPlayerName + " to " + successor.username() + " (admin kick)", - adminUuid)); + adminUuid, + MessageKeys.LogsGui.MSG_ADMIN_LEADER_KICK, targetPlayerName, successor.username())); factionManager.updateFaction(updated); // Now kick the demoted member factionManager.adminRemoveMember(faction.id(), targetPlayerUuid); - player.sendMessage(MessageUtil.adminSuccess("Kicked leader " + targetPlayerName - + ". Leadership transferred to " + successor.username() + ".")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.PLR_KICKED_LEADER, targetPlayerName, successor.username())); } reopenPage(player, ref, store, playerRef); } @@ -428,8 +484,7 @@ public void handleDataEvent(Ref ref, Store store, // Normal kick FactionResult result = factionManager.adminRemoveMember(faction.id(), targetPlayerUuid); if (result == FactionResult.SUCCESS) { - player.sendMessage(MessageUtil.adminSuccess("Kicked " + targetPlayerName - + " from " + faction.name() + ".")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.PLR_KICKED_SUCCESS, targetPlayerName, faction.name())); } reopenPage(player, ref, store, playerRef); } @@ -441,7 +496,7 @@ public void handleDataEvent(Ref ref, Store store, if (viewFaction != null) { guiManager.openAdminFactionInfo(player, ref, store, playerRef, viewFaction.id()); } else { - player.sendMessage(MessageUtil.adminError("Faction no longer exists.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.PLR_FACTION_GONE)); } } @@ -472,6 +527,14 @@ private void logAdminPowerChange(UUID adminUuid, String message) { } } + private void logAdminPowerChange(UUID adminUuid, String message, String key, String... args) { + Faction faction = factionManager.getPlayerFaction(targetPlayerUuid); + if (faction != null) { + Faction updated = faction.withLog(FactionLog.create(FactionLog.LogType.ADMIN_POWER, message, adminUuid, key, args)); + factionManager.updateFaction(updated); + } + } + private PlayerData loadPlayerDataSync() { try { return guiManager.getPlugin().get().getPlayerStorage() @@ -497,10 +560,10 @@ private String formatRole(FactionRole role) { private String formatReason(MembershipRecord.LeaveReason reason) { return switch (reason) { - case ACTIVE -> "ACTIVE"; - case LEFT -> "LEFT"; - case KICKED -> "KICKED"; - case DISBANDED -> "DISBANDED"; + case ACTIVE -> HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_REASON_ACTIVE); + case LEFT -> HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_REASON_LEFT); + case KICKED -> HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_REASON_KICKED); + case DISBANDED -> HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_REASON_DISBANDED); }; } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayersPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayersPage.java index fb5aa298..2067957a 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayersPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminPlayersPage.java @@ -11,6 +11,8 @@ import com.hyperfactions.manager.PowerManager; import com.hyperfactions.storage.PlayerStorage; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.TimeUtil; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; @@ -113,6 +115,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "players", cmd, events); + // Localize page title and common labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_PLAYERS)); + cmd.set("#SearchLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SEARCH)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SORT)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_NEXT)); + // Load player data (synchronous for initial build) loadPlayerCache(); @@ -214,18 +223,18 @@ private void buildPlayerList(UICommandBuilder cmd, UIEventBuilder events) { // Count display if (searchQuery.isEmpty()) { - cmd.set("#PlayerCount.Text", filtered.size() + " players"); + cmd.set("#PlayerCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.PLAYERS_SUFFIX, filtered.size())); } else { - cmd.set("#PlayerCount.Text", filtered.size() + " found"); + cmd.set("#PlayerCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.FOUND_SUFFIX, filtered.size())); } // Sort dropdown cmd.set("#SortDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Name"), "NAME"), - new DropdownEntryInfo(LocalizableString.fromString("Power"), "POWER"), - new DropdownEntryInfo(LocalizableString.fromString("Last Online"), "LAST_ONLINE"), - new DropdownEntryInfo(LocalizableString.fromString("Faction"), "FACTION"), - new DropdownEntryInfo(LocalizableString.fromString("Online"), "ONLINE") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_NAME)), "NAME"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.SORT_POWER)), "POWER"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_SORT_LAST_ONLINE)), "LAST_ONLINE"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_SORT_FACTION)), "FACTION"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.PLR_SORT_ONLINE)), "ONLINE") )); cmd.set("#SortDropdown.Value", sortMode.name()); events.addEventBinding( @@ -262,7 +271,7 @@ private void buildPlayerList(UICommandBuilder cmd, UIEventBuilder events) { } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -301,7 +310,7 @@ private void buildPlayerEntry(UICommandBuilder cmd, UIEventBuilder events, int i cmd.set(idx + " #PlayerName.Style.TextColor", info.isOnline() ? "#00FFFF" : "#CCCCCC"); // Online status - cmd.set(idx + " #OnlineStatus.Text", info.isOnline() ? "Online" : "Offline"); + cmd.set(idx + " #OnlineStatus.Text", info.isOnline() ? HFMessages.get(playerRef, MessageKeys.Common.ONLINE) : HFMessages.get(playerRef, MessageKeys.Common.OFFLINE)); cmd.set(idx + " #OnlineStatus.Style.TextColor", GuiColors.forOnlineStatus(info.isOnline())); // Faction name @@ -309,7 +318,7 @@ private void buildPlayerEntry(UICommandBuilder cmd, UIEventBuilder events, int i cmd.set(idx + " #FactionName.Text", info.factionName()); cmd.set(idx + " #FactionName.Style.TextColor", "#AAAAAA"); } else { - cmd.set(idx + " #FactionName.Text", "No Faction"); + cmd.set(idx + " #FactionName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.NO_FACTION)); cmd.set(idx + " #FactionName.Style.TextColor", "#666666"); } @@ -335,23 +344,35 @@ private void buildPlayerEntry(UICommandBuilder cmd, UIEventBuilder events, int i // Extended info if (isExpanded) { + // Localize expanded labels + cmd.set(idx + " #RoleLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_ROLE)); + cmd.set(idx + " #JoinedLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_JOINED)); + cmd.set(idx + " #LastOnlineLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_LAST_ONLINE)); + cmd.set(idx + " #KdrLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_KDR)); + cmd.set(idx + " #PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_POWER)); + cmd.set(idx + " #UuidLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_UUID)); + + // Localize button texts + cmd.set(idx + " #ViewInfoBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_INFO)); + cmd.set(idx + " #TeleportBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_TELEPORT)); + // Role - cmd.set(idx + " #RoleValue.Text", info.factionRole() != null ? info.factionRole() : "N/A"); + cmd.set(idx + " #RoleValue.Text", info.factionRole() != null ? info.factionRole() : HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_NA)); // First joined String joinedDate = info.firstJoined() > 0 ? DATE_FORMAT.format(Instant.ofEpochMilli(info.firstJoined())) - : "Unknown"; + : HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_UNKNOWN); cmd.set(idx + " #JoinedDate.Text", joinedDate); // Last online String lastOnlineText; if (info.isOnline()) { - lastOnlineText = "Now"; + lastOnlineText = HFMessages.get(playerRef, MessageKeys.AdminGui.NOW); } else if (info.lastOnline() > 0) { - lastOnlineText = TimeUtil.formatDuration(System.currentTimeMillis() - info.lastOnline()) + " ago"; + lastOnlineText = HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PLR_ENTRY_AGO, TimeUtil.formatDuration(System.currentTimeMillis() - info.lastOnline())); } else { - lastOnlineText = "Unknown"; + lastOnlineText = HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); } cmd.set(idx + " #LastOnline.Text", lastOnlineText); @@ -507,7 +528,7 @@ public void handleDataEvent(Ref ref, Store store, sendUpdate(); return; } - String targetName = data.playerName != null ? data.playerName : "Unknown"; + String targetName = data.playerName != null ? data.playerName : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); // Find the player's faction for context UUID factionId = null; for (Faction faction : factionManager.getAllFactions()) { @@ -532,7 +553,7 @@ public void handleDataEvent(Ref ref, Store store, guiManager.closePage(player, ref, store); var targetWorld = Universe.get().getWorld(targetPlayer.getWorldUuid()); if (targetWorld == null) { - player.sendMessage(MessageUtil.errorText("Target world not found.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.PLR_WORLD_NOT_FOUND)); return; } var targetTransform = targetPlayer.getTransform(); @@ -543,11 +564,9 @@ public void handleDataEvent(Ref ref, Store store, targetWorld, targetPos, targetRot); store.addComponent(ref, Teleport.getComponentType(), teleport); }); - player.sendMessage(Message.raw("[Admin] Teleported to ").color("#55FF55") - .insert(Message.raw(data.playerName != null ? data.playerName : "player").color("#00FFFF")) - .insert(Message.raw(".").color("#55FF55"))); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.PLR_TELEPORTED, "#55FF55", data.playerName != null ? data.playerName : "player")); } else { - player.sendMessage(MessageUtil.errorText("Player is not online.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.PLR_NOT_ONLINE)); sendUpdate(); } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminUnclaimAllConfirmPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminUnclaimAllConfirmPage.java index cceb0033..f954d897 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminUnclaimAllConfirmPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminUnclaimAllConfirmPage.java @@ -1,5 +1,9 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; + import com.hyperfactions.data.Faction; import com.hyperfactions.gui.GuiManager; import com.hyperfactions.gui.UIPaths; @@ -59,9 +63,17 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.append(UIPaths.UNCLAIM_ALL_CONFIRM); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UNCLAIM_TITLE)); + cmd.set("#ConfirmMsg1.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UNCLAIM_CONFIRM_MSG1)); + cmd.set("#ConfirmMsg2.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UNCLAIM_CONFIRM_MSG2)); + cmd.set("#WarningLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UNCLAIM_WARNING)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CANCEL)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UNCLAIM_ALL)); + // Set faction info cmd.set("#FactionName.Text", factionName); - cmd.set("#ClaimCount.Text", claimCount + " chunks"); + cmd.set("#ClaimCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.CHUNKS_SUFFIX, claimCount)); // Cancel button events.addEventBinding( @@ -103,19 +115,9 @@ public void handleDataEvent(Ref ref, Store store, claimManager.unclaimAll(factionId); if (claimCount > 0) { - player.sendMessage( - Message.raw("[Admin] Removed ").color("#FF5555") - .insert(Message.raw(String.valueOf(claimCount)).color("#FFFFFF")) - .insert(Message.raw(" claims from ").color("#FF5555")) - .insert(Message.raw(factionName).color("#00FFFF")) - .insert(Message.raw(".").color("#FF5555")) - ); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.UNCLAIM_REMOVED, "#FF5555", claimCount, factionName)); } else { - player.sendMessage( - Message.raw("[Admin] ").color("#FFAA00") - .insert(Message.raw(factionName).color("#00FFFF")) - .insert(Message.raw(" had no claims to remove.").color("#FFAA00")) - ); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.UNCLAIM_NO_CLAIMS, "#FFAA00", factionName)); } guiManager.openAdminFactions(player, ref, store, playerRef); diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminUpdatesPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminUpdatesPage.java index cbcb2680..2c2a68f1 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminUpdatesPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminUpdatesPage.java @@ -4,6 +4,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.admin.AdminNavBarHelper; import com.hyperfactions.gui.admin.data.AdminUpdatesData; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -39,6 +41,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar (must be after template load) AdminNavBarHelper.setupBar(playerRef, "updates", cmd, events); + + // Localize page title and labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_UPDATES)); + cmd.set("#ComingSoon.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UPDATES_HEADING)); + cmd.set("#ComingSoonSub.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_COMING_SOON)); + cmd.set("#Description.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UPDATES_DESC1)); + cmd.set("#Description2.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_UPDATES_DESC2)); } /** Handles data event. */ diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminVersionPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminVersionPage.java index fa0632ea..fe97518a 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminVersionPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminVersionPage.java @@ -1,5 +1,8 @@ package com.hyperfactions.gui.admin.page; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; + import com.hyperfactions.HyperFactions; import com.hyperfactions.config.ConfigManager; import com.hyperfactions.gui.GuiManager; @@ -59,20 +62,35 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "version", cmd, events); + // Localize page title + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_VERSION)); + + // Localize version card labels + cmd.set("#VersionLabelFactions.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_HYPERFACTIONS)); + cmd.set("#VersionLabelServer.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_HYTALE_SERVER)); + cmd.set("#VersionLabelJava.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_JAVA)); + + // Localize section headers + cmd.set("#SectionPermissions.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_PERMISSIONS)); + cmd.set("#SectionPlaceholders.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_PLACEHOLDERS)); + cmd.set("#SectionEconomy.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_ECONOMY_SECTION)); + cmd.set("#SectionProtection.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_PROTECTION)); + // --- Version Info --- cmd.set("#FactionsVersion.Text", "v" + HyperFactions.VERSION); String serverVersion = ManifestUtil.getVersion(); - cmd.set("#ServerVersion.Text", serverVersion != null ? serverVersion : "Unknown"); + cmd.set("#ServerVersion.Text", serverVersion != null ? serverVersion : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN)); - cmd.set("#JavaVersion.Text", System.getProperty("java.version", "Unknown")); + String javaVersion = System.getProperty("java.version"); + cmd.set("#JavaVersion.Text", javaVersion != null ? javaVersion : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN)); // --- Permissions --- - setStatus(cmd, "#HyperPermsStatus", HyperPermsIntegration.isAvailable(), "Active", "Not Found"); + setStatus(cmd, "#HyperPermsStatus", HyperPermsIntegration.isAvailable(), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND)); String providerNames = PermissionManager.get().getProviderNames(); - setStatus(cmd, "#LuckPermsStatus", providerNames.contains("LuckPerms"), "Active", "Not Found"); + setStatus(cmd, "#LuckPermsStatus", providerNames.contains("LuckPerms"), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND)); boolean vaultAvailable = providerNames.contains("VaultUnlocked"); boolean vaultInstalled = false; @@ -83,14 +101,14 @@ public void build(Ref ref, UICommandBuilder cmd, } catch (ClassNotFoundException ignored) {} } if (vaultAvailable) { - setStatusColor(cmd, "#VaultUnlockedStatus", "Active", COLOR_GREEN); + setStatusColor(cmd, "#VaultUnlockedStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), COLOR_GREEN); } else if (vaultInstalled) { - setStatusColor(cmd, "#VaultUnlockedStatus", "Installed (no perm provider)", COLOR_YELLOW); + setStatusColor(cmd, "#VaultUnlockedStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE_PROVIDER), COLOR_YELLOW); } else { - setStatusColor(cmd, "#VaultUnlockedStatus", "Not Installed", COLOR_GRAY); + setStatusColor(cmd, "#VaultUnlockedStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_INSTALLED), COLOR_GRAY); } - setStatus(cmd, "#NativeStatus", providerNames.contains("HytaleNative"), "Active", "Not Found"); + setStatus(cmd, "#NativeStatus", providerNames.contains("HytaleNative"), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND)); // --- Protection --- ProtectionMixinBridge.MixinProvider provider = ProtectionMixinBridge.getProvider(); @@ -99,33 +117,33 @@ public void build(Ref ref, UICommandBuilder cmd, switch (provider) { case BOTH -> { String hpVersion = System.getProperty("hyperprotect.bridge.version", "unknown"); - setStatusColor(cmd, "#HyperProtectStatus", "Active (v" + hpVersion + ")", COLOR_GREEN); - setStatusColor(cmd, "#OrbisGuardMixinsStatus", "Active (compatible)", COLOR_GREEN); + setStatusColor(cmd, "#HyperProtectStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE) + " (v" + hpVersion + ")", COLOR_GREEN); + setStatusColor(cmd, "#OrbisGuardMixinsStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE) + " (compatible)", COLOR_GREEN); } case HYPERPROTECT -> { String hpVersion = System.getProperty("hyperprotect.bridge.version", "unknown"); - setStatusColor(cmd, "#HyperProtectStatus", "Active (v" + hpVersion + ")", COLOR_GREEN); - setStatusColor(cmd, "#OrbisGuardMixinsStatus", "N/A", COLOR_GRAY); + setStatusColor(cmd, "#HyperProtectStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE) + " (v" + hpVersion + ")", COLOR_GREEN); + setStatusColor(cmd, "#OrbisGuardMixinsStatus", HFMessages.get(playerRef, MessageKeys.Common.NA), COLOR_GRAY); } case ORBISGUARD -> { - setStatusColor(cmd, "#HyperProtectStatus", "Not Detected", COLOR_GRAY); - setStatusColor(cmd, "#OrbisGuardMixinsStatus", "Active", COLOR_GREEN); + setStatusColor(cmd, "#HyperProtectStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_DETECTED), COLOR_GRAY); + setStatusColor(cmd, "#OrbisGuardMixinsStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), COLOR_GREEN); } case NONE -> { - setStatusColor(cmd, "#HyperProtectStatus", "Not Detected", COLOR_GRAY); - setStatusColor(cmd, "#OrbisGuardMixinsStatus", "Not Detected", COLOR_GRAY); + setStatusColor(cmd, "#HyperProtectStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_DETECTED), COLOR_GRAY); + setStatusColor(cmd, "#OrbisGuardMixinsStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_DETECTED), COLOR_GRAY); } default -> throw new IllegalStateException("Unexpected value"); } if (ogApiAvailable) { String ogLabel = provider == ProtectionMixinBridge.MixinProvider.NONE - ? "Active (claims only)" : "Active"; + ? HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE) + " (claims only)" : HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE); String ogColor = provider == ProtectionMixinBridge.MixinProvider.NONE ? COLOR_YELLOW : COLOR_GREEN; setStatusColor(cmd, "#OrbisGuardApiStatus", ogLabel, ogColor); } else { - setStatusColor(cmd, "#OrbisGuardApiStatus", "Not Detected", COLOR_GRAY); + setStatusColor(cmd, "#OrbisGuardApiStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_DETECTED), COLOR_GRAY); } String mixinStatus = ProtectionMixinBridge.getStatusSummary(); @@ -135,16 +153,16 @@ public void build(Ref ref, UICommandBuilder cmd, GravestoneIntegration gs = plugin.getProtectionChecker().getGravestoneIntegration(); boolean gsAvailable = gs != null && gs.isAvailable(); boolean gsEnabled = ConfigManager.get().gravestones().isEnabled(); - String gsStatus = !gsAvailable ? "Not Found" : (gsEnabled ? "Active" : "Disabled"); + String gsStatus = !gsAvailable ? HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND) : (gsEnabled ? HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE) : HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_VER_DISABLED)); String gsColor = gsAvailable && gsEnabled ? COLOR_GREEN : (gsAvailable ? COLOR_YELLOW : COLOR_GRAY); setStatusColor(cmd, "#GravestonesStatus", gsStatus, gsColor); KyuubiSoftIntegration ks = plugin.getKyuubiSoftIntegration(); boolean ksAvailable = ks != null && ks.isAvailable(); - setStatus(cmd, "#KyuubiSoftStatus", ksAvailable, "Active", "Not Found"); + setStatus(cmd, "#KyuubiSoftStatus", ksAvailable, HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND)); // --- Placeholders --- - setStatus(cmd, "#PlaceholderAPIStatus", PlaceholderAPIIntegration.isAvailable(), "Active", "Not Found"); + setStatus(cmd, "#PlaceholderAPIStatus", PlaceholderAPIIntegration.isAvailable(), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND)); boolean wiflowAvailable; try { @@ -152,7 +170,7 @@ public void build(Ref ref, UICommandBuilder cmd, } catch (NoClassDefFoundError e) { wiflowAvailable = false; } - setStatus(cmd, "#WiFlowPAPIStatus", wiflowAvailable, "Active", "Not Found"); + setStatus(cmd, "#WiFlowPAPIStatus", wiflowAvailable, HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE), HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND)); // --- Economy --- if (plugin.isTreasuryEnabled()) { @@ -161,10 +179,10 @@ public void build(Ref ref, UICommandBuilder cmd, if (econMgr != null) { econName = econMgr.getVaultProvider().getEconomyName(); } - String treasuryLabel = econName != null ? "Active (" + econName + ")" : "Active"; + String treasuryLabel = econName != null ? HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE) + " (" + econName + ")" : HFMessages.get(playerRef, MessageKeys.AdminGui.VER_ACTIVE); setStatusColor(cmd, "#TreasuryStatus", treasuryLabel, COLOR_GREEN); } else { - setStatusColor(cmd, "#TreasuryStatus", "Not Found", COLOR_GRAY); + setStatusColor(cmd, "#TreasuryStatus", HFMessages.get(playerRef, MessageKeys.AdminGui.VER_NOT_FOUND), COLOR_GRAY); } } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneIntegrationFlagsPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneIntegrationFlagsPage.java index 3acca831..120321e5 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneIntegrationFlagsPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneIntegrationFlagsPage.java @@ -10,6 +10,8 @@ import com.hyperfactions.integration.protection.GravestoneIntegration; import com.hyperfactions.manager.ZoneManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -66,10 +68,21 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "zones", cmd, events); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ZONE_SETTINGS)); + cmd.set("#CatGravestones.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_CAT_GRAVESTONES)); + cmd.set("#GravestonesDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_GRAVESTONES_DESC)); + cmd.set("#CatWorldMap.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_CAT_WORLD_MAP)); + cmd.set("#WorldMapDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_WORLD_MAP_DESC)); + cmd.set("#MapVisibilityLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_VISIBILITY_LABEL)); + cmd.set("#CatEssentials.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_CAT_ESSENTIALS)); + cmd.set("#ResetBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_RESET_DEFAULTS)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZINT_BACK_TO_FLAGS)); + // Get the zone Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - cmd.set("#ZoneName.Text", "Zone Not Found"); + cmd.set("#ZoneName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_ZONE_NOT_FOUND)); cmd.set("#FlagsContainer.Visible", false); return; } @@ -130,9 +143,8 @@ private void buildFlagToggle(UICommandBuilder cmd, UIEventBuilder events, // Check if the integration for this flag is available boolean integrationUnavailable = !isIntegrationAvailable(flagName); - // Flag name (display name from ZoneFlags) - String displayName = ZoneFlags.getDisplayName(flagName); - cmd.set(idx + "Name.Text", displayName); + // Flag name (localized display name) + cmd.set(idx + "Name.Text", HFMessages.get(playerRef, ZoneFlags.getDisplayNameKey(flagName))); // Set checkbox value via child selector // When integration is unavailable, show as unchecked @@ -142,13 +154,13 @@ private void buildFlagToggle(UICommandBuilder cmd, UIEventBuilder events, // Default indicator (shows "(default)", "(custom)", or "(no plugin)") if (integrationUnavailable) { - cmd.set(idx + "Default.Text", "(no plugin)"); + cmd.set(idx + "Default.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_NO_PLUGIN)); cmd.set(idx + "Default.Style.TextColor", "#FF5555"); } else if (isDefault) { - cmd.set(idx + "Default.Text", "(default)"); + cmd.set(idx + "Default.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_DEFAULT)); cmd.set(idx + "Default.Style.TextColor", "#555555"); } else { - cmd.set(idx + "Default.Text", "(custom)"); + cmd.set(idx + "Default.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_CUSTOM)); cmd.set(idx + "Default.Style.TextColor", "#FFAA00"); } @@ -172,16 +184,21 @@ private void buildMapVisibilityControl(UICommandBuilder cmd, UIEventBuilder even cmd.set("#MapVisibilityRow.Visible", showOnMapEnabled); if (showOnMapEnabled) { - // Set button text to current selection - String displayText = ZoneFlags.getSettingValueDisplay(ZoneFlags.MAP_VISIBILITY, visibility); - cmd.set("#MapVisibilityBtn.Text", displayText); + // Set button text to current selection (localized) + String visKey = switch (visibility) { + case ZoneFlags.MAP_VISIBILITY_FACTION -> MessageKeys.AdminGui.GUI_ZINT_MAP_VIS_FACTION; + case ZoneFlags.MAP_VISIBILITY_ALLY -> MessageKeys.AdminGui.GUI_ZINT_MAP_VIS_ALLY; + case ZoneFlags.MAP_VISIBILITY_ALL -> MessageKeys.AdminGui.GUI_ZINT_MAP_VIS_ALL; + default -> MessageKeys.AdminGui.GUI_ZINT_MAP_VIS_FACTION; + }; + cmd.set("#MapVisibilityBtn.Text", HFMessages.get(playerRef, visKey)); // Default indicator if (isDefault) { - cmd.set("#MapVisibilityDefault.Text", "(default)"); + cmd.set("#MapVisibilityDefault.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_DEFAULT)); cmd.set("#MapVisibilityDefault.Style.TextColor", "#555555"); } else { - cmd.set("#MapVisibilityDefault.Text", "(custom)"); + cmd.set("#MapVisibilityDefault.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_CUSTOM)); cmd.set("#MapVisibilityDefault.Style.TextColor", "#FFAA00"); } @@ -259,14 +276,14 @@ public void handleDataEvent(Ref ref, Store store, private void handleToggleFlag(Player player, AdminZoneSettingsData data) { String flagName = data.flag; if (flagName == null || !ZoneFlags.isValidFlag(flagName)) { - player.sendMessage(MessageUtil.adminError("Invalid flag.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZFLAGS_INVALID_FLAG)); sendUpdate(); return; } Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - player.sendMessage(MessageUtil.adminError("Zone not found.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZFLAGS_ZONE_NOT_FOUND)); sendUpdate(); return; } @@ -290,7 +307,7 @@ private void handleToggleFlag(Player player, AdminZoneSettingsData data) { private void handleCycleMapVisibility(Player player) { Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - player.sendMessage(MessageUtil.adminError("Zone not found.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZFLAGS_ZONE_NOT_FOUND)); sendUpdate(); return; } @@ -322,7 +339,7 @@ private void handleResetDefaults(Player player) { // Clear only integration flags and settings, not all zone flags Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - player.sendMessage(MessageUtil.adminError("Zone not found.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZFLAGS_ZONE_NOT_FOUND)); sendUpdate(); return; } @@ -338,7 +355,7 @@ private void handleResetDefaults(Player player) { } } - player.sendMessage(MessageUtil.adminSuccess("Reset integration flags to defaults.")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ZFLAGS_RESET_INT)); rebuildPage(); } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneMapPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneMapPage.java index 99a220ad..40d520bb 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneMapPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneMapPage.java @@ -14,6 +14,8 @@ import com.hyperfactions.util.ChunkUtil; import com.hyperfactions.util.Logger; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -119,7 +121,7 @@ public void build(Ref ref, UICommandBuilder cmd, Player player = store.getComponent(ref, Player.getComponentType()); TransformComponent transform = store.getComponent(ref, TransformComponent.getComponentType()); World world = player != null ? player.getWorld() : null; - String worldName = world != null ? world.getName() : "world"; + String worldName = world != null ? world.getName() : HFMessages.get(playerRef, MessageKeys.Common.WORLD_FALLBACK); // Check if player is in the same world as the zone boolean sameWorld = zone.world().equals(worldName); @@ -140,31 +142,44 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.append(UIPaths.ADMIN_ZONE_MAP); } + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ZONE_MAP)); + cmd.set("#ActionHint.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_ACTION_HINT)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_DONE)); + cmd.set("#LegendZoneSafe.Text", " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_LEGEND_ZONE_SAFE)); + cmd.set("#LegendZoneWar.Text", " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_LEGEND_ZONE_WAR)); + cmd.set("#LegendOtherSafe.Text", " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_LEGEND_OTHER_SAFE)); + cmd.set("#LegendOtherWar.Text", " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_LEGEND_OTHER_WAR)); + cmd.set("#LegendFactionClaim.Text", " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_LEGEND_FACTION)); + cmd.set("#LegendUnclaimed.Text", " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_LEGEND_UNCLAIMED)); + cmd.set("#LegendYouAreHere.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_LEGEND_YOU_HERE)); + // Zone header info cmd.set("#ZoneTitle.Text", zone.name() + " (" + zone.type().getDisplayName() + ")"); cmd.set("#ZoneStats.Text", zone.getChunkCount() + " chunks in " + zone.world()); // Show world mismatch warning if player is in different world if (!sameWorld) { - cmd.set("#PositionInfo.Text", "WARNING: You are in '" + worldName + "' - zone is in '" + zone.world() + "'"); + cmd.set("#PositionInfo.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.MAP_WORLD_WARNING, worldName, zone.world())); } else { - cmd.set("#PositionInfo.Text", "Your Position: Chunk (" + playerChunkX + ", " + playerChunkZ + ")"); + cmd.set("#PositionInfo.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.MAP_POSITION, playerChunkX, playerChunkZ)); } // Dynamic legend: add OrbisGuard protected region entry when OG is available + String protectedLabel = " " + HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_MAP_PROTECTED); if (OrbisGuardIntegration.isAvailable()) { if (terrainEnabled) { // Terrain mode: append to row 2 (#LegendContainer[1]) cmd.appendInline("#LegendContainer[1]", "Group { LayoutMode: Left; Anchor: (Width: 110); " + "Group { Anchor: (Width: 10, Height: 10); Background: (Color: " + COLOR_OG_PROTECTED + "); } " - + "Label { Text: \" Protected\"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } }"); + + "Label { Text: \"" + protectedLabel + "\"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } }"); } else { // Flat mode: append to column 3 (#LegendContainer[2]) cmd.appendInline("#LegendContainer[2]", "Group { LayoutMode: Left; Anchor: (Height: 16); " + "Group { Anchor: (Width: 12, Height: 12); Background: (Color: " + COLOR_OG_PROTECTED + "); } " - + "Label { Text: \" Protected\"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } }"); + + "Label { Text: \"" + protectedLabel + "\"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } }"); } } @@ -434,7 +449,7 @@ public void handleDataEvent(Ref ref, Store store, // Get fresh zone data Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - player.sendMessage(MessageUtil.errorText("Zone no longer exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.MAP_ZONE_GONE)); guiManager.openAdminZone(player, ref, store, playerRef); return; } @@ -455,9 +470,9 @@ public void handleDataEvent(Ref ref, Store store, case "Claim" -> { ZoneManager.ZoneResult result = zoneManager.claimChunk(zoneId, zoneWorld, data.chunkX, data.chunkZ); if (result == ZoneManager.ZoneResult.SUCCESS) { - player.sendMessage(MessageUtil.text("Claimed chunk (" + data.chunkX + ", " + data.chunkZ + ") for " + zone.name(), "#44cc44")); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MAP_CLAIMED, "#44cc44", data.chunkX, data.chunkZ, zone.name())); } else { - player.sendMessage(MessageUtil.errorText("Failed to claim chunk: " + result)); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.MAP_CLAIM_FAILED, result)); } // Refresh by opening new page with fresh zone data, preserving openFlagsAfter @@ -470,9 +485,9 @@ public void handleDataEvent(Ref ref, Store store, case "Unclaim" -> { ZoneManager.ZoneResult result = zoneManager.unclaimChunk(zoneId, zoneWorld, data.chunkX, data.chunkZ); if (result == ZoneManager.ZoneResult.SUCCESS) { - player.sendMessage(MessageUtil.text("Unclaimed chunk (" + data.chunkX + ", " + data.chunkZ + ") from " + zone.name(), "#44cc44")); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MAP_UNCLAIMED, "#44cc44", data.chunkX, data.chunkZ, zone.name())); } else { - player.sendMessage(MessageUtil.errorText("Failed to unclaim chunk: " + result)); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.MAP_UNCLAIM_FAILED, result)); } // Refresh by opening new page with fresh zone data, preserving openFlagsAfter @@ -484,16 +499,16 @@ public void handleDataEvent(Ref ref, Store store, case "OtherZone" -> { Zone otherZone = zoneManager.getZone(zoneWorld, data.chunkX, data.chunkZ); - String zoneName = otherZone != null ? otherZone.name() : "another zone"; - player.sendMessage(MessageUtil.text("This chunk belongs to " + zoneName + ".", MessageUtil.COLOR_GOLD)); + String zoneName = otherZone != null ? otherZone.name() : HFMessages.get(playerRef, MessageKeys.AdminGui.MAP_ANOTHER_ZONE); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MAP_CHUNK_BELONGS, MessageUtil.COLOR_GOLD, zoneName)); } case "Faction" -> { - player.sendMessage(MessageUtil.text("This chunk is claimed by a faction.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MAP_CHUNK_FACTION, MessageUtil.COLOR_GOLD)); } case "Protected" -> { - player.sendMessage(MessageUtil.text("This chunk is in a protected region.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.MAP_CHUNK_PROTECTED, MessageUtil.COLOR_GOLD)); } default -> {} diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePage.java index 223263d5..6f3caf46 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePage.java @@ -7,6 +7,8 @@ import com.hyperfactions.gui.admin.data.AdminZoneData; import com.hyperfactions.manager.ZoneManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -90,6 +92,16 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "zones", cmd, events); + // Localize page title and common labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ZONES)); + cmd.set("#TabAll.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ALL)); + cmd.set("#TabSafe.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SAFE)); + cmd.set("#TabWar.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_WAR)); + cmd.set("#CreateZoneBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CREATE_ZONE)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SORT)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_NEXT)); + // Build zone list buildZoneList(cmd, events); } @@ -124,10 +136,10 @@ private void buildZoneList(UICommandBuilder cmd, UIEventBuilder events) { // Sort dropdown cmd.set("#SortDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Name"), "NAME"), - new DropdownEntryInfo(LocalizableString.fromString("Type"), "TYPE"), - new DropdownEntryInfo(LocalizableString.fromString("Chunks"), "CHUNKS"), - new DropdownEntryInfo(LocalizableString.fromString("World"), "WORLD") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_SORT_NAME)), "NAME"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_SORT_TYPE)), "TYPE"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_SORT_CHUNKS)), "CHUNKS"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_SORT_WORLD)), "WORLD") )); cmd.set("#SortDropdown.Value", zoneSortMode.name()); events.addEventBinding( @@ -155,7 +167,7 @@ private void buildZoneList(UICommandBuilder cmd, UIEventBuilder events) { // Zone count (with total chunks) int totalChunks = zones.stream().mapToInt(Zone::getChunkCount).sum(); String tabLabel = currentTab.equals("all") ? "" : currentTab + " "; - cmd.set("#ZoneCount.Text", zones.size() + " " + tabLabel + "zones (" + totalChunks + " chunks)"); + cmd.set("#ZoneCount.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_COUNT_FORMAT, zones.size(), tabLabel, totalChunks)); // Create zone button events.addEventBinding( @@ -184,7 +196,7 @@ private void buildZoneList(UICommandBuilder cmd, UIEventBuilder events) { } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -228,6 +240,10 @@ private void buildZoneEntry(UICommandBuilder cmd, UIEventBuilder events, int ind // Inline stats (visible in collapsed row) cmd.set(idx + " #InlineChunks.Text", String.valueOf(zone.getChunkCount())); + // Localize header labels + cmd.set(idx + " #WorldLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_WORLD)); + cmd.set(idx + " #InlineChunksLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_CHUNKS)); + // Expansion state cmd.set(idx + " #ExpandIcon.Visible", !isExpanded); cmd.set(idx + " #CollapseIcon.Visible", isExpanded); @@ -244,6 +260,17 @@ private void buildZoneEntry(UICommandBuilder cmd, UIEventBuilder events, int ind // Extended info (only bind events if expanded) if (isExpanded) { + // Localize expanded labels + cmd.set(idx + " #ChunksLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_CHUNKS)); + cmd.set(idx + " #BoundsLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_BOUNDS)); + cmd.set(idx + " #CreatedLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_CREATED)); + + // Localize button texts + cmd.set(idx + " #EditMapBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_EDIT_MAP)); + cmd.set(idx + " #SettingsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_FLAGS)); + cmd.set(idx + " #SettingsBtn2.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_SETTINGS)); + cmd.set(idx + " #DeleteBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZONE_ENTRY_DELETE)); + // Chunk count cmd.set(idx + " #ChunkCount.Text", String.valueOf(zone.getChunkCount())); @@ -260,7 +287,7 @@ private void buildZoneEntry(UICommandBuilder cmd, UIEventBuilder events, int ind cmd.set(idx + " #Bounds.Text", String.format("(%d,%d) to (%d,%d)", minX, minZ, maxX, maxZ)); } else { - cmd.set(idx + " #Bounds.Text", "No chunks"); + cmd.set(idx + " #Bounds.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZONE_NO_CHUNKS)); } // Created date @@ -384,14 +411,14 @@ public void handleDataEvent(Ref ref, Store store, if (data.zoneId != null) { UUID zoneId = UuidUtil.parseOrNull(data.zoneId); if (zoneId == null) { - player.sendMessage(MessageUtil.errorText("Invalid zone ID.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZONE_INVALID_ID)); return; } Zone zone = zoneManager.getZoneById(zoneId); if (zone != null) { guiManager.openAdminZoneMap(player, ref, store, playerRef, zone); } else { - player.sendMessage(MessageUtil.errorText("Zone not found.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZONE_NOT_FOUND)); rebuildList(); } } @@ -401,7 +428,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.zoneId != null) { UUID zoneId = UuidUtil.parseOrNull(data.zoneId); if (zoneId == null) { - player.sendMessage(MessageUtil.errorText("Invalid zone ID.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZONE_INVALID_ID)); return; } guiManager.openAdminZoneSettings(player, ref, store, playerRef, zoneId); @@ -412,7 +439,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.zoneId != null) { UUID zoneId = UuidUtil.parseOrNull(data.zoneId); if (zoneId == null) { - player.sendMessage(MessageUtil.errorText("Invalid zone ID.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZONE_INVALID_ID)); return; } guiManager.openAdminZoneProperties(player, ref, store, playerRef, @@ -424,15 +451,15 @@ public void handleDataEvent(Ref ref, Store store, if (data.zoneId != null) { UUID zoneId = UuidUtil.parseOrNull(data.zoneId); if (zoneId == null) { - player.sendMessage(MessageUtil.errorText("Invalid zone ID.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZONE_INVALID_ID)); return; } ZoneManager.ZoneResult result = zoneManager.removeZone(zoneId); if (result == ZoneManager.ZoneResult.SUCCESS) { - player.sendMessage(MessageUtil.errorText("Zone " + data.zoneName + " deleted.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZONE_DELETED, data.zoneName)); expandedZones.remove(zoneId); } else { - player.sendMessage(MessageUtil.errorText("Failed to delete zone: " + result)); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZONE_DELETE_FAILED, result)); } rebuildList(); } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePropertiesPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePropertiesPage.java index 99bb6894..20581392 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePropertiesPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminZonePropertiesPage.java @@ -7,6 +7,8 @@ import com.hyperfactions.gui.admin.data.AdminZonePropertiesData; import com.hyperfactions.manager.ZoneManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -72,10 +74,29 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "zones", cmd, events); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ZONE_PROPERTIES)); + cmd.set("#GeneralHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_GENERAL)); + cmd.set("#ZoneNameLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_ZONE_NAME)); + cmd.set("#ZoneTypeLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_ZONE_TYPE)); + cmd.set("#ChangeTypeBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_CHANGE_TYPE)); + cmd.set("#NotificationsHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_NOTIFICATIONS)); + cmd.set("#UpperTitleLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_UPPER_DESC)); + cmd.set("#LowerTitleLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_LOWER_DESC)); + String saveText = HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SAVE); + cmd.set("#SaveNameBtn.Text", saveText); + cmd.set("#SaveUpperBtn.Text", saveText); + cmd.set("#SaveLowerBtn.Text", saveText); + String clearText = HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CLEAR); + cmd.set("#ClearUpperBtn.Text", clearText); + cmd.set("#ClearLowerBtn.Text", clearText); + cmd.set("#FlagsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_EDIT_FLAGS)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZPROP_BACK_TO_ZONES)); + // Get the zone Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - cmd.set("#ZoneName.Text", "Zone Not Found"); + cmd.set("#ZoneName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_ZONE_NOT_FOUND)); cmd.set("#GeneralBox.Visible", false); cmd.set("#NotificationsBox.Visible", false); return; @@ -151,11 +172,11 @@ private void buildNotifications(UICommandBuilder cmd, UIEventBuilder events, Zon // Upper title String upperCustom = zone.notifyTitleUpper(); if (upperCustom != null && !upperCustom.isEmpty()) { - cmd.set("#UpperCurrent.Text", "Current: \"" + upperCustom + "\" (custom)"); + cmd.set("#UpperCurrent.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_CURRENT_CUSTOM, upperCustom)); cmd.set("#UpperTitleInput.Value", upperCustom); } else { - String defaultUpper = zone.isSafeZone() ? "PvP Disabled" : "PvP Enabled"; - cmd.set("#UpperCurrent.Text", "Current: \"" + defaultUpper + "\" (default)"); + String defaultUpper = zone.isSafeZone() ? HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_PVP_DISABLED) : HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_PVP_ENABLED); + cmd.set("#UpperCurrent.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_CURRENT_DEFAULT, defaultUpper)); } events.addEventBinding( @@ -178,10 +199,10 @@ private void buildNotifications(UICommandBuilder cmd, UIEventBuilder events, Zon // Lower title String lowerCustom = zone.notifyTitleLower(); if (lowerCustom != null && !lowerCustom.isEmpty()) { - cmd.set("#LowerCurrent.Text", "Current: \"" + lowerCustom + "\" (custom)"); + cmd.set("#LowerCurrent.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_CURRENT_CUSTOM, lowerCustom)); cmd.set("#LowerTitleInput.Value", lowerCustom); } else { - cmd.set("#LowerCurrent.Text", "Current: \"" + zone.name() + "\" (default)"); + cmd.set("#LowerCurrent.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_CURRENT_DEFAULT, zone.name())); } events.addEventBinding( @@ -267,7 +288,7 @@ public void handleDataEvent(Ref ref, Store store, private void handleSaveName(Player player, AdminZonePropertiesData data) { String newName = data.name; if (newName == null || newName.isBlank()) { - nameError = "Name cannot be empty."; + nameError = HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_NAME_EMPTY); rebuildPage(); return; } @@ -278,11 +299,11 @@ private void handleSaveName(Player player, AdminZonePropertiesData data) { switch (result) { case SUCCESS -> { nameError = null; - player.sendMessage(MessageUtil.adminSuccess("Zone renamed to \"" + newName + "\".")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ZPROP_RENAMED, newName)); } - case NAME_TAKEN -> nameError = "A zone with that name already exists."; - case INVALID_NAME -> nameError = "Invalid name (max 32 characters)."; - default -> nameError = "Failed to rename: " + result; + case NAME_TAKEN -> nameError = HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_NAME_TAKEN); + case INVALID_NAME -> nameError = HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_NAME_INVALID); + default -> nameError = HFMessages.get(playerRef, MessageKeys.AdminGui.ZPROP_RENAME_FAILED, result); } rebuildPage(); @@ -306,38 +327,38 @@ private void handleToggleNotify(Player player) { private void handleSaveUpper(Player player, AdminZonePropertiesData data) { String upper = data.upperTitle; if (upper == null || upper.isBlank()) { - player.sendMessage(MessageUtil.adminError("Upper title cannot be empty. Use Clear to reset.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZPROP_UPPER_EMPTY)); sendUpdate(); return; } zoneManager.setZoneNotifyTitle(zoneId, upper.trim(), null); - player.sendMessage(MessageUtil.adminSuccess("Upper title set.")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ZPROP_UPPER_SET)); rebuildPage(); } private void handleClearUpper(Player player) { zoneManager.setZoneNotifyTitle(zoneId, "clear", null); - player.sendMessage(MessageUtil.adminSuccess("Upper title reset to default.")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ZPROP_UPPER_RESET)); rebuildPage(); } private void handleSaveLower(Player player, AdminZonePropertiesData data) { String lower = data.lowerTitle; if (lower == null || lower.isBlank()) { - player.sendMessage(MessageUtil.adminError("Lower title cannot be empty. Use Clear to reset.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZPROP_LOWER_EMPTY)); sendUpdate(); return; } zoneManager.setZoneNotifyTitle(zoneId, null, lower.trim()); - player.sendMessage(MessageUtil.adminSuccess("Lower title set.")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ZPROP_LOWER_SET)); rebuildPage(); } private void handleClearLower(Player player) { zoneManager.setZoneNotifyTitle(zoneId, null, "clear"); - player.sendMessage(MessageUtil.adminSuccess("Lower title reset to default.")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ZPROP_LOWER_RESET)); rebuildPage(); } diff --git a/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneSettingsPage.java b/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneSettingsPage.java index 07f1dbe1..ac7d7d63 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneSettingsPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/AdminZoneSettingsPage.java @@ -9,6 +9,8 @@ import com.hyperfactions.integration.protection.ProtectionMixinBridge; import com.hyperfactions.manager.ZoneManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -97,10 +99,31 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup admin nav bar AdminNavBarHelper.setupBar(playerRef, "zones", cmd, events); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_TITLE_ZONE_SETTINGS)); + cmd.set("#CatCombat.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_COMBAT)); + cmd.set("#CatDamage.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_DAMAGE)); + cmd.set("#CatDeath.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_DEATH)); + cmd.set("#CatBuilding.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_BUILDING)); + cmd.set("#CatInteraction.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_INTERACTION)); + cmd.set("#CatTransport.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_TRANSPORT)); + cmd.set("#CatItems.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_ITEMS)); + cmd.set("#CatSpawning.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_SPAWNING)); + cmd.set("#CatMobClear.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CAT_MOB_CLEAR)); + String childrenHint = HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CHILDREN_HINT); + cmd.set("#CatCombatSub.Text", childrenHint); + cmd.set("#CatBuildingSub.Text", childrenHint); + cmd.set("#CatInteractionSub.Text", childrenHint); + cmd.set("#CatSpawningSub.Text", childrenHint); + cmd.set("#CatMobClearSub.Text", childrenHint); + cmd.set("#ResetBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_RESET_DEFAULTS)); + cmd.set("#IntegrationFlagsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_INTEGRATION_FLAGS)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_BACK_TO_ZONES)); + // Get the zone Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - cmd.set("#ZoneName.Text", "Zone Not Found"); + cmd.set("#ZoneName.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_ZONE_NOT_FOUND)); cmd.set("#FlagsContainer.Visible", false); return; } @@ -108,7 +131,7 @@ public void build(Ref ref, UICommandBuilder cmd, // Zone info header cmd.set("#ZoneName.Text", zone.name()); cmd.set("#ZoneType.Text", zone.type().name()); - cmd.set("#ZoneChunks.Text", zone.getChunkCount() + " chunks"); + cmd.set("#ZoneChunks.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZSET_CHUNKS, zone.getChunkCount())); // Type indicator color String typeColor = zone.isSafeZone() ? "#55FF55" : "#FF5555"; @@ -153,7 +176,7 @@ public void build(Ref ref, UICommandBuilder cmd, // Back button - text depends on back target if ("settings".equals(backTarget)) { - cmd.set("#BackBtn.Text", "Back to Settings"); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZFLAGS_BACK_TO_SETTINGS)); } events.addEventBinding( CustomUIEventBindingType.Activating, @@ -205,9 +228,8 @@ private void buildFlagToggle(UICommandBuilder cmd, UIEventBuilder events, spawnConflict = true; } - // Flag name (display name from ZoneFlags) - String displayName = ZoneFlags.getDisplayName(flagName); - cmd.set(idx + "Name.Text", displayName); + // Flag name (localized display name via i18n) + cmd.set(idx + "Name.Text", HFMessages.get(playerRef, ZoneFlags.getDisplayNameKey(flagName))); // Set checkbox value via child selector // When parent is off, show children as unchecked for clearer visual state @@ -218,16 +240,16 @@ private void buildFlagToggle(UICommandBuilder cmd, UIEventBuilder events, // Default indicator (shows "(default)" or "(custom)" or "(mixin)" or "(conflict)") if (spawnConflict) { - cmd.set(idx + "Default.Text", "(conflict)"); + cmd.set(idx + "Default.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZFLAGS_CONFLICT)); cmd.set(idx + "Default.Style.TextColor", "#FF5555"); } else if (mixinUnavailable) { - cmd.set(idx + "Default.Text", "(mixin)"); + cmd.set(idx + "Default.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZFLAGS_MIXIN)); cmd.set(idx + "Default.Style.TextColor", "#FF5555"); } else if (isDefault) { - cmd.set(idx + "Default.Text", "(default)"); + cmd.set(idx + "Default.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_DEFAULT)); cmd.set(idx + "Default.Style.TextColor", "#555555"); } else { - cmd.set(idx + "Default.Text", "(custom)"); + cmd.set(idx + "Default.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.ZINT_CUSTOM)); cmd.set(idx + "Default.Style.TextColor", "#FFAA00"); } @@ -311,14 +333,14 @@ public void handleDataEvent(Ref ref, Store store, private void handleToggleFlag(Player player, AdminZoneSettingsData data) { String flagName = data.flag; if (flagName == null || !ZoneFlags.isValidFlag(flagName)) { - player.sendMessage(MessageUtil.adminError("Invalid flag.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZFLAGS_INVALID_FLAG)); sendUpdate(); return; } Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - player.sendMessage(MessageUtil.adminError("Zone not found.")); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZFLAGS_ZONE_NOT_FOUND)); sendUpdate(); return; } @@ -346,9 +368,9 @@ private void handleResetDefaults(Player player, AdminZoneSettingsData data) { ZoneManager.ZoneResult result = zoneManager.clearAllZoneFlags(zoneId); if (result == ZoneManager.ZoneResult.SUCCESS) { - player.sendMessage(MessageUtil.adminSuccess("Reset all flags to defaults.")); + player.sendMessage(MessageUtil.adminSuccess(playerRef, MessageKeys.AdminGui.ZFLAGS_RESET_ALL)); } else { - player.sendMessage(MessageUtil.adminError("Failed to reset flags: " + result)); + player.sendMessage(MessageUtil.adminError(playerRef, MessageKeys.AdminGui.ZFLAGS_RESET_FAILED, result)); } rebuildPage(); diff --git a/src/main/java/com/hyperfactions/gui/admin/page/CreateZoneWizardPage.java b/src/main/java/com/hyperfactions/gui/admin/page/CreateZoneWizardPage.java index 2ececfe9..927c2219 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/CreateZoneWizardPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/CreateZoneWizardPage.java @@ -9,6 +9,8 @@ import com.hyperfactions.util.ChunkUtil; import com.hyperfactions.util.Logger; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -131,6 +133,35 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the template cmd.append(UIPaths.CREATE_ZONE_WIZARD); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_TITLE)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_BACK)); + cmd.set("#CreateBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_CREATE)); + cmd.set("#ZoneTypeHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_ZONE_TYPE)); + cmd.set("#SafeZoneDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_SAFE_DESC)); + cmd.set("#WarZoneDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_WAR_DESC)); + cmd.set("#ZoneNameHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_ZONE_NAME)); + cmd.set("#ZoneNameDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_NAME_DESC)); + cmd.set("#ClaimMethodHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_CLAIM_METHOD)); + cmd.set("#MethodNoneDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_NONE_DESC)); + cmd.set("#MethodNone.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_NONE)); + cmd.set("#MethodSingleDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_SINGLE_DESC)); + cmd.set("#MethodSingle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_SINGLE)); + cmd.set("#MethodCircleDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_CIRCLE_DESC)); + cmd.set("#MethodCircle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_CIRCLE)); + cmd.set("#MethodSquareDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_SQUARE_DESC)); + cmd.set("#MethodSquare.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_SQUARE)); + cmd.set("#MethodMapDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_MAP_DESC)); + cmd.set("#MethodMap.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_METHOD_MAP)); + cmd.set("#RadiusHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_RADIUS)); + cmd.set("#CustomRadiusLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_CUSTOM_RADIUS)); + cmd.set("#ApplyCustomRadius.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_APPLY)); + cmd.set("#FlagsHeader.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_FLAGS)); + cmd.set("#FlagsDefaultsDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_FLAGS_DEFAULTS_DESC)); + cmd.set("#FlagsDefaults.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_FLAGS_DEFAULTS)); + cmd.set("#FlagsCustomizeDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_FLAGS_CUSTOMIZE_DESC)); + cmd.set("#FlagsCustomize.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CZW_FLAGS_CUSTOMIZE)); + // Restore preserved input value if (!preservedName.isEmpty()) { cmd.set("#NameInput.Value", preservedName); @@ -239,7 +270,7 @@ private void buildRadiusSection(UICommandBuilder cmd, UIEventBuilder events) { // Calculate and show preview int previewChunks = calculateChunkCount(selectedRadius, claimMethod == ClaimMethod.RADIUS_CIRCLE); - cmd.set("#RadiusPreview.Text", "~" + previewChunks + " chunks"); + cmd.set("#RadiusPreview.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.WIZ_CHUNKS_PREVIEW, previewChunks)); // Highlight selected preset for (int preset : RADIUS_PRESETS) { @@ -327,7 +358,7 @@ public void handleDataEvent(Ref ref, Store store, Player player = store.getComponent(ref, Player.getComponentType()); PlayerRef playerRef = store.getComponent(ref, PlayerRef.getComponentType()); World world = player != null ? player.getWorld() : null; - String worldName = world != null ? world.getName() : "world"; + String worldName = world != null ? world.getName() : HFMessages.get(playerRef, MessageKeys.Common.WORLD_FALLBACK); if (player == null || playerRef == null || data.button == null) { sendUpdate(); @@ -361,7 +392,7 @@ public void handleDataEvent(Ref ref, Store store, case "ApplyCustomRadius" -> { int newRadius = parseRadius(data.customRadius); if (newRadius < 1 || newRadius > MAX_RADIUS) { - player.sendMessage(MessageUtil.errorText("Radius must be between 1 and " + MAX_RADIUS + ".")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.WIZ_RADIUS_RANGE, MAX_RADIUS)); sendUpdate(); return; } @@ -413,26 +444,26 @@ private void handleCreate(Player player, Ref ref, Store MAX_NAME_LENGTH) { - player.sendMessage(MessageUtil.errorText("Zone name cannot exceed " + MAX_NAME_LENGTH + " characters.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.WIZ_NAME_TOO_LONG, MAX_NAME_LENGTH)); sendUpdate(); return; } // Check if name is already taken if (zoneManager.getZoneByName(name) != null) { - player.sendMessage(MessageUtil.errorText("A zone with this name already exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.WIZ_NAME_TAKEN)); sendUpdate(); return; } @@ -449,25 +480,21 @@ private void handleCreate(Player player, Ref ref, Store ref, Store ref, Store 0) { - player.sendMessage(MessageUtil.text("Claimed " + claimed + " chunks in a " - + (circle ? "circular" : "square") + " radius of " + radius + ".", "#44cc44")); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.WIZ_RADIUS_CLAIMED, "#44cc44", claimed, HFMessages.get(playerRef, circle ? MessageKeys.AdminGui.SHAPE_CIRCULAR : MessageKeys.AdminGui.SHAPE_SQUARE), radius)); newZone = zoneManager.getZoneById(newZone.id()); } else { - player.sendMessage(MessageUtil.text("No chunks could be claimed (area may be occupied).", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.WIZ_RADIUS_NO_CLAIMS, MessageUtil.COLOR_GOLD)); } } } @@ -513,7 +539,7 @@ private void handleCreate(Player player, Ref ref, Store { // No chunks to claim now if (method == ClaimMethod.NO_CLAIMS) { - player.sendMessage(MessageUtil.text("Zone created with no claims.", "#888888")); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.WIZ_NO_CLAIMS, "#888888")); } } default -> throw new IllegalStateException("Unexpected value"); diff --git a/src/main/java/com/hyperfactions/gui/admin/page/ZoneChangeTypeModalPage.java b/src/main/java/com/hyperfactions/gui/admin/page/ZoneChangeTypeModalPage.java index 6ed47ada..e24c79bb 100644 --- a/src/main/java/com/hyperfactions/gui/admin/page/ZoneChangeTypeModalPage.java +++ b/src/main/java/com/hyperfactions/gui/admin/page/ZoneChangeTypeModalPage.java @@ -7,6 +7,8 @@ import com.hyperfactions.gui.admin.data.ZoneChangeTypeModalData; import com.hyperfactions.manager.ZoneManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -82,6 +84,20 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the modal template cmd.append(UIPaths.ZONE_CHANGE_TYPE_MODAL); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_TITLE)); + cmd.set("#ZoneLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_ZONE_LABEL)); + cmd.set("#CurrentLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_CURRENT)); + cmd.set("#WillBecomeLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_WILL_BECOME)); + cmd.set("#NewLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_NEW)); + cmd.set("#WarningLine1.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_WARNING1)); + cmd.set("#WarningLine2.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_WARNING2)); + cmd.set("#KeepFlagsDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_KEEP_DESC)); + cmd.set("#KeepFlagsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_KEEP_FLAGS)); + cmd.set("#ResetFlagsDesc.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_RESET_DESC)); + cmd.set("#ResetFlagsBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZTYPE_RESET_FLAGS)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CANCEL)); + // Zone name cmd.set("#ZoneName.Text", zone.name()); @@ -137,7 +153,7 @@ public void handleDataEvent(Ref ref, Store store, Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - player.sendMessage(MessageUtil.errorText("Zone no longer exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZTYPE_ZONE_GONE)); navigateBack(player, ref, store, playerRef); return; } @@ -170,17 +186,11 @@ private void handleTypeChange(Player player, Ref ref, Store ref, UICommandBuilder cmd, // Load the modal template cmd.append(UIPaths.ZONE_RENAME_MODAL); + // Localize labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZREN_TITLE)); + cmd.set("#CurrentLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZREN_CURRENT)); + cmd.set("#NewNameLabel.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_ZREN_NEW_NAME)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_CANCEL)); + cmd.set("#SaveBtn.Text", HFMessages.get(playerRef, MessageKeys.AdminGui.GUI_SAVE)); + // Show current name cmd.set("#CurrentName.Text", zone.name()); @@ -106,7 +115,7 @@ public void handleDataEvent(Ref ref, Store store, Zone zone = zoneManager.getZoneById(zoneId); if (zone == null) { - player.sendMessage(MessageUtil.errorText("Zone no longer exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_ZONE_GONE)); guiManager.openAdminZone(player, ref, store, playerRef, currentTab, currentPage); return; } @@ -121,7 +130,7 @@ public void handleDataEvent(Ref ref, Store store, // Validation if (newName == null || newName.trim().isEmpty()) { - player.sendMessage(MessageUtil.errorText("Please enter a zone name.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_ENTER_NAME)); sendUpdate(); return; } @@ -129,20 +138,20 @@ public void handleDataEvent(Ref ref, Store store, newName = newName.trim(); if (newName.length() < MIN_NAME_LENGTH) { - player.sendMessage(MessageUtil.errorText("Zone name must be at least " + MIN_NAME_LENGTH + " character.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_TOO_SHORT, MIN_NAME_LENGTH)); sendUpdate(); return; } if (newName.length() > MAX_NAME_LENGTH) { - player.sendMessage(MessageUtil.errorText("Zone name cannot exceed " + MAX_NAME_LENGTH + " characters.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_TOO_LONG, MAX_NAME_LENGTH)); sendUpdate(); return; } // Check if name is the same if (newName.equalsIgnoreCase(zone.name())) { - player.sendMessage(MessageUtil.text("That's already this zone's name.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.ZREN_SAME_NAME, MessageUtil.COLOR_GOLD)); sendUpdate(); return; } @@ -153,29 +162,23 @@ public void handleDataEvent(Ref ref, Store store, switch (result) { case SUCCESS -> { - player.sendMessage( - Message.raw("[Admin] Zone renamed from ").color("#AAAAAA") - .insert(Message.raw(oldName).color("#888888")) - .insert(Message.raw(" to ").color("#AAAAAA")) - .insert(Message.raw(newName).color("#00FFFF")) - .insert(Message.raw("!").color("#AAAAAA")) - ); + player.sendMessage(MessageUtil.text(playerRef, MessageKeys.AdminGui.ZREN_RENAMED, "#AAAAAA", oldName, newName)); guiManager.openAdminZone(player, ref, store, playerRef, currentTab, currentPage); } case NAME_TAKEN -> { - player.sendMessage(MessageUtil.errorText("A zone with that name already exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_NAME_TAKEN)); sendUpdate(); } case INVALID_NAME -> { - player.sendMessage(MessageUtil.errorText("Invalid zone name.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_INVALID_NAME)); sendUpdate(); } case NOT_FOUND -> { - player.sendMessage(MessageUtil.errorText("Zone no longer exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_ZONE_GONE)); guiManager.openAdminZone(player, ref, store, playerRef, currentTab, currentPage); } default -> { - player.sendMessage(MessageUtil.errorText("Failed to rename zone: " + result)); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.AdminGui.ZREN_RENAME_FAILED, result)); sendUpdate(); } } diff --git a/src/main/java/com/hyperfactions/gui/faction/NavBarHelper.java b/src/main/java/com/hyperfactions/gui/faction/NavBarHelper.java index da7165a3..73fa9a0c 100644 --- a/src/main/java/com/hyperfactions/gui/faction/NavBarHelper.java +++ b/src/main/java/com/hyperfactions/gui/faction/NavBarHelper.java @@ -6,10 +6,14 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.shared.NavBarUtil; import com.hyperfactions.gui.shared.data.NavAwareData; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; +import com.hypixel.hytale.server.core.ui.builder.EventData; import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder; import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder; import com.hypixel.hytale.server.core.universe.PlayerRef; @@ -60,7 +64,22 @@ public static void setupBar( // Create nav cards container and build buttons using shared utility cmd.appendInline("#HyperFactionsNavBar #NavBarButtons", "Group #NavCards { LayoutMode: Left; }"); NavBarUtil.buildButtons(entries, "#NavCards", UIPaths.NAV_BUTTON, "#NavActionButton", - "Nav", "NavBar", cmd, events); + "Nav", "NavBar", playerRef, cmd, events); + + // Flex spacer pushes "Player" button to far right + cmd.appendInline("#HyperFactionsNavBar #NavBarButtons", + "Group { FlexWeight: 1; }"); + + // "Player" button on far right + cmd.append("#HyperFactionsNavBar #NavBarButtons", UIPaths.NAV_BUTTON); + cmd.set("#HyperFactionsNavBar #NavBarButtons[2] #NavActionButton.Text", + HFMessages.get(playerRef, MessageKeys.Nav.PLAYER_SETTINGS)); + events.addEventBinding( + CustomUIEventBindingType.Activating, + "#HyperFactionsNavBar #NavBarButtons[2] #NavActionButton", + EventData.of("Button", "Nav").append("NavBar", "player_settings"), + false + ); } /** diff --git a/src/main/java/com/hyperfactions/gui/faction/page/ChunkMapPage.java b/src/main/java/com/hyperfactions/gui/faction/page/ChunkMapPage.java index 43da1cf1..c0b70753 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/ChunkMapPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/ChunkMapPage.java @@ -15,6 +15,9 @@ import com.hyperfactions.gui.newplayer.NewPlayerNavBarHelper; import com.hyperfactions.integration.protection.OrbisGuardIntegration; import com.hyperfactions.manager.*; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.ChunkUtil; import com.hyperfactions.util.Logger; import com.hypixel.hytale.component.Ref; @@ -119,7 +122,7 @@ public void build(Ref ref, UICommandBuilder cmd, Player player = store.getComponent(ref, Player.getComponentType()); TransformComponent transform = store.getComponent(ref, TransformComponent.getComponentType()); World world = player != null ? player.getWorld() : null; - String worldName = world != null ? world.getName() : "world"; + String worldName = world != null ? world.getName() : HFMessages.get(playerRef, MessageKeys.Common.WORLD_FALLBACK); int playerChunkX = 0; int playerChunkZ = 0; @@ -138,6 +141,21 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.append(UIPaths.CHUNK_MAP); } + // Localize static labels + cmd.set("#MapTitle.Text", HFMessages.get(playerRef, MessageKeys.MapGui.TITLE)); + cmd.set("#ActionHint.Text", HFMessages.get(playerRef, MessageKeys.MapGui.ACTION_HINT)); + cmd.set("#LegendYourLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_YOUR)); + cmd.set("#LegendAllyLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_ALLY)); + cmd.set("#LegendEnemyLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_ENEMY)); + cmd.set("#LegendOtherLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_OTHER)); + if (!terrainEnabled) { + // Flat mode has additional legend entries + cmd.set("#LegendWildernessLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_WILDERNESS)); + } + cmd.set("#LegendSafeLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_SAFE)); + cmd.set("#LegendWarLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_WAR)); + cmd.set("#LegendYouLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_YOU)); + // Setup navigation bar - use new player nav when no faction if (viewerFaction != null) { NavBarHelper.setupBar(playerRef, viewerFaction, PAGE_ID, cmd, events); @@ -146,7 +164,7 @@ public void build(Ref ref, UICommandBuilder cmd, } // Current position info - cmd.set("#PositionInfo.Text", String.format("Your Position: Chunk (%d, %d)", playerChunkX, playerChunkZ)); + cmd.set("#PositionInfo.Text", HFMessages.get(playerRef, MessageKeys.MapGui.POSITION, playerChunkX, playerChunkZ)); // Dynamic legend: add OrbisGuard protected region entry when OG is available if (OrbisGuardIntegration.isAvailable()) { @@ -155,13 +173,13 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.appendInline("#LegendContainer[1]", "Group { LayoutMode: Left; Anchor: (Width: 110); " + "Group { Anchor: (Width: 10, Height: 10); Background: (Color: " + COLOR_OG_PROTECTED + "); } " - + "Label { Text: \" Protected\"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } }"); + + "Label { Text: \" " + HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_PROTECTED) + "\"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } }"); } else { // Flat mode: append to column 3 (#LegendContainer[2]) cmd.appendInline("#LegendContainer[2]", "Group { LayoutMode: Left; Anchor: (Height: 16); " + "Group { Anchor: (Width: 12, Height: 12); Background: (Color: " + COLOR_OG_PROTECTED + "); } " - + "Label { Text: \" Protected\"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } }"); + + "Label { Text: \" " + HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_PROTECTED) + "\"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } }"); } } @@ -180,7 +198,7 @@ public void build(Ref ref, UICommandBuilder cmd, int available = Math.max(0, maxClaims - currentClaims); // Claim stats: "Claims: 23/78 (55 Available)" - cmd.set("#ClaimStats.Text", String.format("Claims: %d/%d (%d Available)", currentClaims, maxClaims, available)); + cmd.set("#ClaimStats.Text", HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_STATS, currentClaims, maxClaims, available)); // Power status with overclaim warning double currentPower = stats.currentPower(); @@ -190,13 +208,13 @@ public void build(Ref ref, UICommandBuilder cmd, if (isOverclaimed) { // Show overclaim warning in red int overclaimAmount = currentClaims - (int) currentPower; - cmd.set("#PowerStatus.Text", String.format("OVERCLAIMED by %d!", overclaimAmount)); + cmd.set("#PowerStatus.Text", HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIMED, overclaimAmount)); } else { // Normal power display - cmd.set("#PowerStatus.Text", String.format("Power: %.0f/%.0f", currentPower, maxPower)); + cmd.set("#PowerStatus.Text", HFMessages.get(playerRef, MessageKeys.MapGui.POWER_DISPLAY, (int) currentPower, (int) maxPower)); } } else { - cmd.set("#ClaimStats.Text", "Join a faction to claim"); + cmd.set("#ClaimStats.Text", HFMessages.get(playerRef, MessageKeys.MapGui.JOIN_TO_CLAIM)); cmd.set("#PowerStatus.Text", ""); } @@ -527,7 +545,7 @@ public void handleDataEvent(Ref ref, Store store, Faction viewerFaction = factionManager.getPlayerFaction(playerRef.getUuid()); World world = player.getWorld(); - String worldName = world != null ? world.getName() : "world"; + String worldName = world != null ? world.getName() : HFMessages.get(playerRef, MessageKeys.Common.WORLD_FALLBACK); // Handle navigation - use new player nav when no faction if (viewerFaction != null) { @@ -553,16 +571,16 @@ private void handleClaim(Player player, PlayerRef playerRef, String worldName, ClaimManager.ClaimResult result = claimManager.claim(playerRef.getUuid(), worldName, chunkX, chunkZ); Message message = switch (result) { - case SUCCESS -> CommandUtil.prefix().insert(Message.raw("Claimed chunk at (" + chunkX + ", " + chunkZ + ")!").color("#55FF55")); - case NOT_IN_FACTION -> CommandUtil.prefix().insert(Message.raw("You must be in a faction to claim territory.").color("#FF5555")); - case NOT_OFFICER -> CommandUtil.prefix().insert(Message.raw("Only officers and leaders can claim territory.").color("#FF5555")); - case ALREADY_CLAIMED_SELF -> CommandUtil.prefix().insert(Message.raw("You already own this chunk.").color("#FFAA00")); - case ALREADY_CLAIMED_OTHER -> CommandUtil.prefix().insert(Message.raw("This chunk is already claimed by another faction.").color("#FF5555")); - case NOT_ADJACENT -> CommandUtil.prefix().insert(Message.raw("You can only claim chunks adjacent to your territory.").color("#FF5555")); - case MAX_CLAIMS_REACHED -> CommandUtil.prefix().insert(Message.raw("You have reached your maximum claim limit.").color("#FF5555")); - case WORLD_NOT_ALLOWED -> CommandUtil.prefix().insert(Message.raw("Claiming is not allowed in this world.").color("#FF5555")); - case ORBISGUARD_PROTECTED -> CommandUtil.prefix().insert(Message.raw("This area is protected by OrbisGuard.").color("#FF5555")); - default -> CommandUtil.prefix().insert(Message.raw("Failed to claim chunk.").color("#FF5555")); + case SUCCESS -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_SUCCESS, chunkX, chunkZ)).color("#55FF55")); + case NOT_IN_FACTION -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_NOT_IN_FACTION)).color("#FF5555")); + case NOT_OFFICER -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_NOT_OFFICER)).color("#FF5555")); + case ALREADY_CLAIMED_SELF -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_ALREADY_YOURS)).color("#FFAA00")); + case ALREADY_CLAIMED_OTHER -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_ALREADY_CLAIMED)).color("#FF5555")); + case NOT_ADJACENT -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_NOT_ADJACENT)).color("#FF5555")); + case MAX_CLAIMS_REACHED -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_MAX)).color("#FF5555")); + case WORLD_NOT_ALLOWED -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_WORLD_NOT_ALLOWED)).color("#FF5555")); + case ORBISGUARD_PROTECTED -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_ORBISGUARD)).color("#FF5555")); + default -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.CLAIM_FAILED)).color("#FF5555")); }; player.sendMessage(message); @@ -577,13 +595,13 @@ private void handleUnclaim(Player player, PlayerRef playerRef, String worldName, ClaimManager.ClaimResult result = claimManager.unclaim(playerRef.getUuid(), worldName, chunkX, chunkZ); Message message = switch (result) { - case SUCCESS -> CommandUtil.prefix().insert(Message.raw("Unclaimed chunk at (" + chunkX + ", " + chunkZ + ").").color("#55FF55")); - case NOT_IN_FACTION -> CommandUtil.prefix().insert(Message.raw("You must be in a faction.").color("#FF5555")); - case NOT_OFFICER -> CommandUtil.prefix().insert(Message.raw("Only officers and leaders can unclaim territory.").color("#FF5555")); - case CHUNK_NOT_CLAIMED -> CommandUtil.prefix().insert(Message.raw("This chunk is not claimed.").color("#FFAA00")); - case NOT_YOUR_CLAIM -> CommandUtil.prefix().insert(Message.raw("This chunk belongs to another faction.").color("#FF5555")); - case CANNOT_UNCLAIM_HOME -> CommandUtil.prefix().insert(Message.raw("Cannot unclaim the chunk containing your faction home.").color("#FF5555")); - default -> CommandUtil.prefix().insert(Message.raw("Failed to unclaim chunk.").color("#FF5555")); + case SUCCESS -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.UNCLAIM_SUCCESS, chunkX, chunkZ)).color("#55FF55")); + case NOT_IN_FACTION -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.UNCLAIM_NOT_IN_FACTION)).color("#FF5555")); + case NOT_OFFICER -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.UNCLAIM_NOT_OFFICER)).color("#FF5555")); + case CHUNK_NOT_CLAIMED -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.UNCLAIM_NOT_CLAIMED)).color("#FFAA00")); + case NOT_YOUR_CLAIM -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.UNCLAIM_NOT_YOURS)).color("#FF5555")); + case CANNOT_UNCLAIM_HOME -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.UNCLAIM_HOME)).color("#FF5555")); + default -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.UNCLAIM_FAILED)).color("#FF5555")); }; player.sendMessage(message); @@ -598,14 +616,14 @@ private void handleOverclaim(Player player, PlayerRef playerRef, String worldNam ClaimManager.ClaimResult result = claimManager.overclaim(playerRef.getUuid(), worldName, chunkX, chunkZ); Message message = switch (result) { - case SUCCESS -> CommandUtil.prefix().insert(Message.raw("Overclaimed enemy chunk at (" + chunkX + ", " + chunkZ + ")!").color("#55FF55")); - case NOT_IN_FACTION -> CommandUtil.prefix().insert(Message.raw("You must be in a faction.").color("#FF5555")); - case NOT_OFFICER -> CommandUtil.prefix().insert(Message.raw("Only officers and leaders can overclaim territory.").color("#FF5555")); - case ALREADY_CLAIMED_SELF -> CommandUtil.prefix().insert(Message.raw("You already own this chunk.").color("#FFAA00")); - case ALREADY_CLAIMED_ALLY -> CommandUtil.prefix().insert(Message.raw("You cannot overclaim allied territory.").color("#FF5555")); - case TARGET_HAS_POWER -> CommandUtil.prefix().insert(Message.raw("This faction has enough power to defend their territory.").color("#FF5555")); - case MAX_CLAIMS_REACHED -> CommandUtil.prefix().insert(Message.raw("You have reached your maximum claim limit.").color("#FF5555")); - default -> CommandUtil.prefix().insert(Message.raw("Failed to overclaim chunk.").color("#FF5555")); + case SUCCESS -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_SUCCESS, chunkX, chunkZ)).color("#55FF55")); + case NOT_IN_FACTION -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_NOT_IN_FACTION)).color("#FF5555")); + case NOT_OFFICER -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_NOT_OFFICER)).color("#FF5555")); + case ALREADY_CLAIMED_SELF -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_ALREADY_YOURS)).color("#FFAA00")); + case ALREADY_CLAIMED_ALLY -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_ALLY)).color("#FF5555")); + case TARGET_HAS_POWER -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_HAS_POWER)).color("#FF5555")); + case MAX_CLAIMS_REACHED -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_MAX)).color("#FF5555")); + default -> CommandUtil.prefix().insert(Message.raw(HFMessages.get(playerRef, MessageKeys.MapGui.OVERCLAIM_FAILED)).color("#FF5555")); }; player.sendMessage(message); diff --git a/src/main/java/com/hyperfactions/gui/faction/page/DisbandConfirmPage.java b/src/main/java/com/hyperfactions/gui/faction/page/DisbandConfirmPage.java index 829c9e07..76f048bd 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/DisbandConfirmPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/DisbandConfirmPage.java @@ -8,11 +8,12 @@ import com.hyperfactions.gui.shared.data.DisbandConfirmData; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.builder.EventData; @@ -56,6 +57,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the disband confirmation template cmd.append(UIPaths.DISBAND_CONFIRM); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.DISBAND_TITLE)); + cmd.set("#ConfirmText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.DISBAND_PROMPT)); + cmd.set("#WarningText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.DISBAND_WARNING)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.DISBAND)); + // Set faction name in the modal cmd.set("#FactionName.Text", faction.name()); @@ -94,7 +102,7 @@ public void handleDataEvent(Ref ref, Store store, // Verify leader permission if (member == null || member.role() != FactionRole.LEADER) { - player.sendMessage(MessageUtil.errorText("Only the leader can disband the faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.DISBAND_NOT_LEADER)); guiManager.openFactionSettings(player, ref, store, playerRef, factionManager.getFaction(faction.id())); return; @@ -115,13 +123,9 @@ public void handleDataEvent(Ref ref, Store store, FactionManager.FactionResult result = factionManager.disbandFaction(faction.id(), uuid); if (result == FactionManager.FactionResult.SUCCESS) { - player.sendMessage( - Message.raw("Faction '").color("#FF5555") - .insert(Message.raw(factionName).color("#AAAAAA")) - .insert(Message.raw("' has been disbanded.").color("#FF5555")) - ); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.DISBANDED, factionName)); } else { - player.sendMessage(MessageUtil.errorText("Failed to disband faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.DISBAND_FAILED)); } guiManager.openFactionMain(player, ref, store, playerRef); diff --git a/src/main/java/com/hyperfactions/gui/faction/page/FactionBrowserPage.java b/src/main/java/com/hyperfactions/gui/faction/page/FactionBrowserPage.java index 33905033..def7c46d 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/FactionBrowserPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/FactionBrowserPage.java @@ -8,13 +8,14 @@ import com.hyperfactions.gui.newplayer.NewPlayerNavBarHelper; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.DropdownEntryInfo; @@ -88,6 +89,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the main template cmd.append(UIPaths.FACTION_BROWSER); + // Localize static labels + cmd.set("#BrowserTitle.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.TITLE)); + cmd.set("#SearchLabel.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.SEARCH)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.SORT)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.NEXT)); + // Setup navigation bar - use new player nav when no faction if (viewerFaction != null) { NavBarHelper.setupBar(playerRef, viewerFaction, PAGE_ID, cmd, events); @@ -103,13 +111,13 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events, Facti // Get all factions sorted and filtered List entries = buildFactionEntryList(); - cmd.set("#FactionCount.Text", entries.size() + " factions"); + cmd.set("#FactionCount.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.FACTION_COUNT, entries.size())); // Sort dropdown cmd.set("#SortDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Power"), "POWER"), - new DropdownEntryInfo(LocalizableString.fromString("Name"), "NAME"), - new DropdownEntryInfo(LocalizableString.fromString("Members"), "MEMBERS") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.GuiCommon.SORT_POWER)), "POWER"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.BrowserGui.SORT_NAME)), "NAME"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.GuiCommon.SORT_MEMBERS)), "MEMBERS") )); cmd.set("#SortDropdown.Value", sortMode.name()); events.addEventBinding( @@ -149,7 +157,7 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events, Facti } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -198,7 +206,7 @@ private List buildFactionEntryList() { stats.currentPower(), stats.maxPower(), faction.claims().size(), - leader != null ? leader.username() : "None", + leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.NONE), faction.open(), faction.description(), faction.createdAt() @@ -229,16 +237,21 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int // Basic info cmd.set(idx + " #FactionName.Text", entry.name); - cmd.set(idx + " #LeaderName.Text", "Leader: " + entry.leaderName); + cmd.set(idx + " #LeaderName.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.LEADER_LABEL, entry.leaderName)); // Stats cmd.set(idx + " #PowerDisplay.Text", String.format("%.0f/%.0f", entry.power, entry.maxPower)); cmd.set(idx + " #ClaimsDisplay.Text", String.valueOf(entry.claimCount)); cmd.set(idx + " #MemberCount.Text", String.valueOf(entry.memberCount)); + // Localized stat labels + cmd.set(idx + " #PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_POWER)); + cmd.set(idx + " #ClaimsLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_CLAIMS)); + cmd.set(idx + " #MemberLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_MEMBERS)); + // Own faction indicator if (isOwnFaction) { - cmd.set(idx + " #OwnIndicator.Text", "(You)"); + cmd.set(idx + " #OwnIndicator.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.OWN_FACTION)); } // Relation indicator (only for faction members viewing other factions) @@ -267,8 +280,16 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int // Extended info (only set values if expanded) if (isExpanded) { + // Localized extended labels + cmd.set(idx + " #RecruitmentLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_RECRUITMENT)); + cmd.set(idx + " #CreatedLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_CREATED)); + cmd.set(idx + " #DescriptionLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_DESCRIPTION)); + cmd.set(idx + " #ViewInfoBtn.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.VIEW_INFO_BTN)); + // Recruitment status - cmd.set(idx + " #RecruitmentStatus.Text", entry.isOpen ? "Open" : "Invite Only"); + cmd.set(idx + " #RecruitmentStatus.Text", entry.isOpen + ? HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN) + : HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)); cmd.set(idx + " #RecruitmentStatus.Style.TextColor", entry.isOpen ? "#44CC44" : "#FFAA00"); // Created date @@ -281,6 +302,8 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int ? entry.description.substring(0, 57) + "..." : entry.description; cmd.set(idx + " #Description.Text", desc); + } else { + cmd.set(idx + " #Description.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.NO_DESCRIPTION)); } // View Info button @@ -396,7 +419,7 @@ private void handleViewFaction(Player player, Ref ref, Store ref, UICommandBuilder cmd, cmd.append(UIPaths.FACTION_CHAT); + // Localize static labels + cmd.set("#ChatTitle.Text", HFMessages.get(playerRef, MessageKeys.ChatGui.TITLE)); + cmd.set("#TabFactionBtn.Text", HFMessages.get(playerRef, MessageKeys.ChatGui.TAB_FACTION)); + cmd.set("#TabAllyBtn.Text", HFMessages.get(playerRef, MessageKeys.ChatGui.TAB_ALLY)); + cmd.set("#SendBtn.Text", HFMessages.get(playerRef, MessageKeys.ChatGui.SEND_BTN)); + // Setup navigation bar NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); @@ -109,7 +117,7 @@ public void build(Ref ref, UICommandBuilder cmd, buildMessageList(cmd); // Chat input placeholder - cmd.set("#ChatInput.PlaceholderText", "Type a message..."); + cmd.set("#ChatInput.PlaceholderText", HFMessages.get(playerRef, MessageKeys.ChatGui.PLACEHOLDER)); // Build chat input bar events buildChatInputEvents(events); @@ -157,7 +165,7 @@ private void buildMessageList(UICommandBuilder cmd) { if (messages.isEmpty()) { cmd.appendInline("#MessageList", - "Label { Text: \"No messages yet.\"; Style: (FontSize: 12, TextColor: #555555); " + "Label { Text: \"" + HFMessages.get(playerRef, MessageKeys.ChatGui.NO_MESSAGES) + "\"; Style: (FontSize: 12, TextColor: #555555); " + "Anchor: (Height: 30); }"); return; } @@ -229,13 +237,13 @@ private String formatTimestamp(long timestamp) { // Recent: show relative time if (ageMs < 60_000) { - return "now"; + return HFMessages.get(playerRef, MessageKeys.ChatGui.TIME_NOW); } else if (ageMs < 3_600_000) { long minutes = ageMs / 60_000; - return minutes + "m"; + return HFMessages.get(playerRef, MessageKeys.ChatGui.TIME_MINUTES, minutes); } else if (ageMs < 86_400_000) { long hours = ageMs / 3_600_000; - return hours + "h"; + return HFMessages.get(playerRef, MessageKeys.ChatGui.TIME_HOURS, hours); } // Older: show date + time @@ -284,7 +292,7 @@ public void handleDataEvent(Ref ref, Store store, } case "TabAlly" -> { if (!PermissionManager.get().hasPermission(pRef.getUuid(), Permissions.CHAT_ALLY)) { - player.sendMessage(MessageUtil.errorText("You don't have permission for ally chat.")); + player.sendMessage(MessageUtil.errorText(pRef, MessageKeys.ChatGui.NO_ALLY_PERMISSION)); rebuild(); return; } @@ -314,7 +322,7 @@ private void handleSendChat(Player player, PlayerRef pRef, FactionChatData data) String requiredPerm = (channel == ChatMessage.Channel.ALLY) ? Permissions.CHAT_ALLY : Permissions.CHAT_FACTION; if (!PermissionManager.get().hasPermission(uuid, requiredPerm)) { - player.sendMessage(MessageUtil.errorText("No permission.")); + player.sendMessage(MessageUtil.errorText(pRef, MessageKeys.ChatGui.NO_PERMISSION)); rebuild(); return; } @@ -322,7 +330,7 @@ private void handleSendChat(Player player, PlayerRef pRef, FactionChatData data) // Get fresh faction data Faction currentFaction = factionManager.getFaction(faction.id()); if (currentFaction == null) { - player.sendMessage(MessageUtil.errorText("Your faction no longer exists.")); + player.sendMessage(MessageUtil.errorText(pRef, MessageKeys.ChatGui.FACTION_GONE)); rebuild(); return; } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/FactionDashboardPage.java b/src/main/java/com/hyperfactions/gui/faction/page/FactionDashboardPage.java index 5a4bd0d5..cbcdd0dd 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/FactionDashboardPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/FactionDashboardPage.java @@ -26,6 +26,8 @@ import com.hyperfactions.manager.PowerManager; import com.hyperfactions.manager.TeleportManager; import com.hyperfactions.util.ChunkUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -106,7 +108,7 @@ public void build(Ref ref, UICommandBuilder cmd, if (currentFaction == null) { // Faction was deleted - show error cmd.append(UIPaths.ERROR_PAGE); - cmd.set("#ErrorMessage.Text", "Your faction no longer exists."); + cmd.set("#ErrorMessage.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.FACTION_GONE)); return; } @@ -119,6 +121,29 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the main template cmd.append(UIPaths.FACTION_DASHBOARD); + // Localize static labels + cmd.set("#DashboardTitle.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.TITLE)); + cmd.set("#PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.POWER_LABEL)); + cmd.set("#ClaimsLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.LAND_LABEL)); + cmd.set("#MembersLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.MEMBERS_LABEL)); + cmd.set("#RelationsLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.RELATIONS_LABEL)); + cmd.set("#AllyEnemyLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.ALLY_ENEMY_LABEL)); + cmd.set("#StatusLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.STATUS_LABEL)); + cmd.set("#InvitesLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.INVITES_LABEL)); + cmd.set("#SentRequestsLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.SENT_REQUESTS_LABEL)); + cmd.set("#TreasuryLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.TREASURY_LABEL)); + cmd.set("#UpkeepLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.UPKEEP_LABEL)); + cmd.set("#PerCycleLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.PER_CYCLE)); + cmd.set("#YourWalletLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.YOUR_WALLET)); + cmd.set("#PersonalBalanceLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.PERSONAL_BALANCE)); + cmd.set("#QuickActionsLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.QUICK_ACTIONS)); + cmd.set("#TeleportLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.TELEPORT_LABEL)); + cmd.set("#TerritoryLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.TERRITORY_LABEL)); + cmd.set("#ChannelLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.CHANNEL_LABEL)); + cmd.set("#MembershipLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.MEMBERSHIP_LABEL)); + cmd.set("#RecentActivityLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.RECENT_ACTIVITY)); + cmd.set("#ViewLogsBtn.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.VIEW_ALL)); + // Setup navigation bar setupNavBar(cmd, events); @@ -182,14 +207,14 @@ private void buildStatCards(UICommandBuilder cmd, Faction currentFaction) { int maxClaims = stats.maxClaims(); int available = Math.max(0, maxClaims - claimCount); cmd.set("#ClaimsValue.Text", claimCount + " / " + maxClaims); - cmd.set("#ClaimsAvailable.Text", available + " available"); + cmd.set("#ClaimsAvailable.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.AVAILABLE, available)); // Check if faction is raidable (at risk of overclaiming) boolean isRaidable = claimCount > maxClaims; if (isRaidable) { // Show warning - claims exceed power limit cmd.set("#ClaimsValue.Style.TextColor", "#FF5555"); - cmd.set("#ClaimsAvailable.Text", "At Risk!"); + cmd.set("#ClaimsAvailable.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.AT_RISK)); cmd.set("#ClaimsAvailable.Style.TextColor", "#FF5555"); } @@ -197,7 +222,7 @@ private void buildStatCards(UICommandBuilder cmd, Faction currentFaction) { int totalMembers = currentFaction.members().size(); int onlineCount = countOnlineMembers(currentFaction); cmd.set("#MembersValue.Text", String.valueOf(totalMembers)); - cmd.set("#MembersOnline.Text", onlineCount + " online"); + cmd.set("#MembersOnline.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.ONLINE_COUNT, onlineCount)); // Row 2: Relations, Status, Invites @@ -216,10 +241,10 @@ private void buildStatCards(UICommandBuilder cmd, Faction currentFaction) { // Status stat - Open/Invite Only if (currentFaction.open()) { - cmd.set("#StatusValue.Text", "Open"); + cmd.set("#StatusValue.Text", HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN)); cmd.set("#StatusValue.Style.TextColor", "#55FF55"); } else { - cmd.set("#StatusValue.Text", "Invite"); + cmd.set("#StatusValue.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.STATUS_INVITE)); cmd.set("#StatusValue.Style.TextColor", "#FFAA00"); } cmd.set("#StatusDesc.Text", ""); @@ -257,14 +282,14 @@ private void buildStatCards(UICommandBuilder cmd, Faction currentFaction) { FactionEconomy fEcon = econ.getEconomy(currentFaction.id()); if (fEcon != null && fEcon.upkeepGraceStartTimestamp() > 0) { cmd.set("#UpkeepValue.Style.TextColor", "#FF5555"); - cmd.set("#UpkeepSubtext.Text", "IN GRACE"); - cmd.set("#UpkeepSubtext.Style.TextColor", "#FF5555"); + cmd.set("#PerCycleLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.IN_GRACE)); + cmd.set("#PerCycleLabel.Style.TextColor", "#FF5555"); } else if (fEcon != null && fEcon.lastUpkeepTimestamp() > 0) { long intervalMs = ConfigManager.get().getUpkeepIntervalHours() * 3600_000L; long remaining = Math.max(0, (fEcon.lastUpkeepTimestamp() + intervalMs) - System.currentTimeMillis()); - cmd.set("#UpkeepSubtext.Text", "in " + com.hyperfactions.economy.UpkeepProcessor.formatDuration(remaining)); + cmd.set("#PerCycleLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.UPKEEP_IN, com.hyperfactions.economy.UpkeepProcessor.formatDuration(remaining))); } else { - cmd.set("#UpkeepSubtext.Text", billableChunks + " billable chunks"); + cmd.set("#PerCycleLabel.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.BILLABLE_CHUNKS, billableChunks)); } // Color based on affordability @@ -279,7 +304,7 @@ private void buildStatCards(UICommandBuilder cmd, Faction currentFaction) { java.math.BigDecimal walletBalance = econ.getVaultProvider().getBalanceBigDecimal(viewerUuid); cmd.set("#WalletBalance.Text", econ.formatCurrencyCompact(walletBalance)); } catch (Exception e) { - cmd.set("#WalletBalance.Text", "N/A"); + cmd.set("#WalletBalance.Text", HFMessages.get(playerRef, MessageKeys.Common.NA)); } } } @@ -303,7 +328,9 @@ private void buildQuickActions(UICommandBuilder cmd, UIEventBuilder events, if ((faction.hasHome() || isOfficerPlus) && PermissionManager.get().hasPermission(viewerUuid, Permissions.HOME)) { cmd.append("#HomeBtnContainer", UIPaths.DASHBOARD_ACTION_BTN); - cmd.set("#HomeBtnContainer #ActionBtn.Text", faction.hasHome() ? "Home" : "Set Home"); + cmd.set("#HomeBtnContainer #ActionBtn.Text", faction.hasHome() + ? HFMessages.get(playerRef, MessageKeys.DashboardGui.BTN_HOME) + : HFMessages.get(playerRef, MessageKeys.DashboardGui.BTN_SET_HOME)); cmd.set("#HomeBtnContainer #ActionBtn.Style", Value.ref(UIPaths.STYLES, "CyanButtonStyle")); events.addEventBinding( @@ -319,7 +346,7 @@ private void buildQuickActions(UICommandBuilder cmd, UIEventBuilder events, // CLAIM button - only for officers+ with CLAIM permission if (isOfficerPlus && PermissionManager.get().hasPermission(viewerUuid, Permissions.CLAIM)) { cmd.append("#ClaimBtnContainer", UIPaths.DASHBOARD_ACTION_BTN); - cmd.set("#ClaimBtnContainer #ActionBtn.Text", "Claim"); + cmd.set("#ClaimBtnContainer #ActionBtn.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.BTN_CLAIM)); cmd.set("#ClaimBtnContainer #ActionBtn.Style", Value.ref(UIPaths.STYLES, "GreenButtonStyle")); events.addEventBinding( @@ -337,10 +364,11 @@ private void buildQuickActions(UICommandBuilder cmd, UIEventBuilder events, || PermissionManager.get().hasPermission(viewerUuid, Permissions.CHAT_ALLY)) { ChatManager chatManager = plugin.getChatManager(); ChatManager.ChatChannel currentChannel = chatManager.getChannel(viewerUuid); - String display = "Chat: " + ChatManager.getChannelDisplay(currentChannel); + String channelDisplay = ChatManager.getChannelDisplay(currentChannel); cmd.append("#ChatModeBtnContainer", UIPaths.DASHBOARD_ACTION_BTN); - cmd.set("#ChatModeBtnContainer #ActionBtn.Text", display); + cmd.set("#ChatModeBtnContainer #ActionBtn.Text", + HFMessages.get(playerRef, MessageKeys.DashboardGui.CHAT_PREFIX, channelDisplay)); events.addEventBinding( CustomUIEventBindingType.Activating, "#ChatModeBtnContainer #ActionBtn", @@ -354,7 +382,7 @@ private void buildQuickActions(UICommandBuilder cmd, UIEventBuilder events, // LEAVE button - flat red background for danger action if (PermissionManager.get().hasPermission(viewerUuid, Permissions.LEAVE)) { cmd.append("#LeaveBtnContainer", UIPaths.DASHBOARD_ACTION_BTN); - cmd.set("#LeaveBtnContainer #ActionBtn.Text", "Leave"); + cmd.set("#LeaveBtnContainer #ActionBtn.Text", HFMessages.get(playerRef, MessageKeys.DashboardGui.BTN_LEAVE)); cmd.set("#LeaveBtnContainer #ActionBtn.Style", Value.ref(UIPaths.STYLES, "FlatRedButtonStyle")); events.addEventBinding( @@ -382,8 +410,9 @@ private void buildActivityFeed(UICommandBuilder cmd, UIEventBuilder events, Fact int displayCount = Math.min(ACTIVITY_ENTRIES, logs.size()); if (displayCount == 0) { + String noActivityText = HFMessages.get(playerRef, MessageKeys.DashboardGui.NO_ACTIVITY); cmd.appendInline("#ActivityFeed", - "Label { Text: \"No recent activity.\"; Style: (FontSize: 11, TextColor: #555555); " + "Label { Text: \"" + noActivityText + "\"; Style: (FontSize: 11, TextColor: #555555); " + "Anchor: (Height: 26); }"); return; } @@ -393,8 +422,9 @@ private void buildActivityFeed(UICommandBuilder cmd, UIEventBuilder events, Fact String idx = "#ActivityFeed[" + i + "]"; cmd.append("#ActivityFeed", UIPaths.ACTIVITY_ENTRY); - cmd.set(idx + " #ActivityType.Text", log.type().getDisplayName().toUpperCase()); - cmd.set(idx + " #ActivityMessage.Text", log.message()); + cmd.set(idx + " #ActivityType.Text", + HFMessages.get(playerRef, MessageKeys.LogsGui.typeKey(log.type().name())).toUpperCase()); + cmd.set(idx + " #ActivityMessage.Text", HFMessages.resolveLogMessage(playerRef, log)); cmd.set(idx + " #ActivityTime.Text", formatTimeAgo(log.timestamp())); } } @@ -404,16 +434,16 @@ private String formatTimeAgo(long timestamp) { long diff = now - timestamp; if (diff < TimeUnit.MINUTES.toMillis(1)) { - return "now"; + return HFMessages.get(playerRef, MessageKeys.DashboardGui.TIME_NOW); } else if (diff < TimeUnit.HOURS.toMillis(1)) { long minutes = TimeUnit.MILLISECONDS.toMinutes(diff); - return minutes + "m ago"; + return HFMessages.get(playerRef, MessageKeys.DashboardGui.TIME_MINUTES, minutes); } else if (diff < TimeUnit.DAYS.toMillis(1)) { long hours = TimeUnit.MILLISECONDS.toHours(diff); - return hours + "h ago"; + return HFMessages.get(playerRef, MessageKeys.DashboardGui.TIME_HOURS, hours); } else { long days = TimeUnit.MILLISECONDS.toDays(diff); - return days + "d ago"; + return HFMessages.get(playerRef, MessageKeys.DashboardGui.TIME_DAYS, days); } } @@ -441,7 +471,7 @@ public void handleDataEvent(Ref ref, Store store, // Verify still in faction if (currentFaction == null) { - player.sendMessage(MessageUtil.errorText("You are no longer in a faction.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Common.NOT_IN_FACTION)); guiManager.openFactionMain(player, ref, store, playerRef); return; } @@ -462,7 +492,7 @@ public void handleDataEvent(Ref ref, Store store, if (isOfficerPlus) { handleSetHomeAction(player, ref, store, uuid, currentFaction); } else { - player.sendMessage(MessageUtil.errorText("Your faction has no home set. Ask an officer to set one.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.DashboardGui.NO_HOME_HINT)); sendUpdate(); } } else { @@ -472,7 +502,7 @@ public void handleDataEvent(Ref ref, Store store, case "Claim" -> { if (!isOfficerPlus || !PermissionManager.get().hasPermission(uuid, Permissions.CLAIM)) { - player.sendMessage(MessageUtil.errorText("Only officers can claim territory.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.NOT_OFFICER)); sendUpdate(); return; } @@ -484,9 +514,9 @@ public void handleDataEvent(Ref ref, Store store, ChatManager.ToggleResult chatResult = chatManager.cycleChannelChecked(uuid); if (chatResult.isSuccess() && chatResult.channel() != null) { String display = ChatManager.getChannelDisplay(chatResult.channel()); - String color = ChatManager.getChannelColor(chatResult.channel()); - player.sendMessage(Message.raw("Chat mode: ").color("#AAAAAA") - .insert(Message.raw(display).color(color))); + player.sendMessage(Message.raw( + HFMessages.get(playerRef, MessageKeys.DashboardGui.CHAT_MODE_SET, display)) + .color("#AAAAAA")); } rebuild(); } @@ -515,7 +545,7 @@ public void handleDataEvent(Ref ref, Store store, private void handleHomeAction(Player player, Ref ref, Store store, UUID uuid, Faction faction) { if (!faction.hasHome()) { - player.sendMessage(MessageUtil.errorText("Your faction has no home set.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Home.NO_HOME)); sendUpdate(); return; } @@ -523,7 +553,7 @@ private void handleHomeAction(Player player, Ref ref, Store ref, Store store, private void handleTeleportResult(Player player, TeleportManager.TeleportResult result) { switch (result) { - case NOT_IN_FACTION -> player.sendMessage(MessageUtil.errorText("You are not in a faction.")); - case NO_HOME -> player.sendMessage(MessageUtil.errorText("Your faction has no home set.")); - case COMBAT_TAGGED -> player.sendMessage(MessageUtil.errorText("You cannot teleport while in combat!")); - case SUCCESS_INSTANT -> player.sendMessage(MessageUtil.successText("Teleported to faction home!")); + case NOT_IN_FACTION -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Common.NOT_IN_FACTION)); + case NO_HOME -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Home.NO_HOME)); + case COMBAT_TAGGED -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Home.COMBAT_TAGGED)); + case SUCCESS_INSTANT -> player.sendMessage(MessageUtil.success(playerRef, MessageKeys.Home.TELEPORTED)); case ON_COOLDOWN, SUCCESS_WARMUP -> {} // Message sent by TeleportManager default -> {} } @@ -600,14 +630,14 @@ private void handleSetHomeAction(Player player, Ref ref, Store ref, Store ref, Store ref, Store ref, Store { - player.sendMessage( - Message.raw("Claimed chunk at (").color("#55FF55") - .insert(Message.raw(chunkX + ", " + chunkZ).color("#AAAAAA")) - .insert(Message.raw(")").color("#55FF55")) - ); + player.sendMessage(MessageUtil.success(playerRef, + MessageKeys.DashboardGui.CLAIM_SUCCESS, chunkX, chunkZ)); // Refresh dashboard with updated faction data Faction fresh = factionManager.getFaction(faction.id()); if (fresh != null) { guiManager.openFactionDashboard(player, ref, store, playerRef, fresh); } } - case NOT_IN_FACTION -> player.sendMessage(MessageUtil.errorText("You are not in a faction.")); - case NOT_OFFICER -> player.sendMessage(MessageUtil.errorText("Only officers can claim land.")); - case ALREADY_CLAIMED_SELF -> player.sendMessage(MessageUtil.text("This chunk is already claimed by your faction.", MessageUtil.COLOR_GOLD)); - case ALREADY_CLAIMED_OTHER, ALREADY_CLAIMED_ALLY, ALREADY_CLAIMED_ENEMY -> player.sendMessage(MessageUtil.errorText("This chunk is claimed by another faction.")); - case MAX_CLAIMS_REACHED -> player.sendMessage(MessageUtil.errorText("Your faction has reached its claim limit.")); - case WORLD_NOT_ALLOWED -> player.sendMessage(MessageUtil.errorText("Claiming is not allowed in this world.")); - case NOT_ADJACENT -> player.sendMessage(MessageUtil.errorText("You can only claim chunks adjacent to existing claims.")); - case INSUFFICIENT_POWER -> player.sendMessage(MessageUtil.errorText("Your faction doesn't have enough power to claim more land.")); - case ORBISGUARD_PROTECTED -> player.sendMessage(MessageUtil.errorText("This area is protected by OrbisGuard.")); - default -> player.sendMessage(MessageUtil.errorText("Could not claim this chunk.")); + case NOT_IN_FACTION -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Common.NOT_IN_FACTION)); + case NOT_OFFICER -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.NOT_OFFICER)); + case ALREADY_CLAIMED_SELF -> player.sendMessage(MessageUtil.info(playerRef, MessageKeys.Claim.ALREADY_YOURS, MessageUtil.COLOR_GOLD)); + case ALREADY_CLAIMED_OTHER, ALREADY_CLAIMED_ALLY, ALREADY_CLAIMED_ENEMY -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.ALREADY_CLAIMED)); + case MAX_CLAIMS_REACHED -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.MAX_CLAIMS)); + case WORLD_NOT_ALLOWED -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.WORLD_NOT_ALLOWED)); + case NOT_ADJACENT -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.NOT_CONNECTED)); + case INSUFFICIENT_POWER -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.INSUFFICIENT_POWER)); + case ORBISGUARD_PROTECTED -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.ORBISGUARD)); + default -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Claim.FAILED)); } } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/FactionHelpPage.java b/src/main/java/com/hyperfactions/gui/faction/page/FactionHelpPage.java index 9c357fe7..6d6a51c0 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/FactionHelpPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/FactionHelpPage.java @@ -5,6 +5,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.faction.NavBarHelper; import com.hyperfactions.gui.faction.data.FactionPageData; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -48,6 +50,31 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup faction navigation bar NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); + + // Localize all static content + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.GETTING_STARTED_TITLE)); + cmd.set("#WhatTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_TITLE)); + cmd.set("#WhatDesc1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_1)); + cmd.set("#WhatDesc2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_2)); + cmd.set("#WhatBullet1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_BULLET_1)); + cmd.set("#WhatBullet2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_BULLET_2)); + cmd.set("#WhatBullet3.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_BULLET_3)); + cmd.set("#JoinTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_TITLE)); + cmd.set("#JoinDesc.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_DESC)); + cmd.set("#JoinBullet1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_BULLET_1)); + cmd.set("#JoinBullet2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_BULLET_2)); + cmd.set("#JoinBullet3.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_BULLET_3)); + cmd.set("#CreateTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_TITLE)); + cmd.set("#CreateDesc.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_DESC)); + cmd.set("#CreateBullet1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_BULLET_1)); + cmd.set("#CreateBullet2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_BULLET_2)); + cmd.set("#CmdTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.COMMANDS_TITLE)); + cmd.set("#CmdF.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F)); + cmd.set("#CmdFList.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_LIST)); + cmd.set("#CmdFJoin.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_JOIN)); + cmd.set("#CmdFCreate.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_CREATE)); + cmd.set("#CmdFHelp.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_HELP)); + cmd.set("#TipText.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.TIP)); } /** Handles data event. */ diff --git a/src/main/java/com/hyperfactions/gui/faction/page/FactionInvitesPage.java b/src/main/java/com/hyperfactions/gui/faction/page/FactionInvitesPage.java index d5bfdfde..edf5143b 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/FactionInvitesPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/FactionInvitesPage.java @@ -12,6 +12,8 @@ import com.hyperfactions.manager.InviteManager; import com.hyperfactions.manager.JoinRequestManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -90,6 +92,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the main template cmd.append(UIPaths.FACTION_INVITES); + // Localize static labels + cmd.set("#InvitesTitle.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.TITLE)); + cmd.set("#TabOutgoing.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.TAB_OUTGOING)); + cmd.set("#TabRequests.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.TAB_REQUESTS)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.NEXT)); + // Setup navigation bar NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); @@ -131,7 +140,9 @@ private void buildList(UICommandBuilder cmd, UIEventBuilder events) { : getJoinRequests(); // Count - String countText = items.size() + (currentTab == Tab.OUTGOING ? " invites" : " requests"); + String countText = currentTab == Tab.OUTGOING + ? HFMessages.get(playerRef, MessageKeys.InvitesGui.INVITE_COUNT, items.size()) + : HFMessages.get(playerRef, MessageKeys.InvitesGui.REQUEST_COUNT, items.size()); cmd.set("#ItemCount.Text", countText); // Calculate pagination @@ -160,7 +171,7 @@ private void buildList(UICommandBuilder cmd, UIEventBuilder events) { } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -200,7 +211,7 @@ private List getOutgoingInvites() { playerUuid.toString(), playerName, true, - "Invited by: " + inviterName, + HFMessages.get(playerRef, MessageKeys.InvitesGui.INVITED_BY, inviterName), null, invite.getRemainingSeconds() )); @@ -218,7 +229,7 @@ private List getJoinRequests() { for (JoinRequest request : requests) { String message = request.message(); if (message == null || message.isBlank()) { - message = "No message"; + message = HFMessages.get(playerRef, MessageKeys.InvitesGui.NO_MESSAGE); } else if (message.length() > 50) { message = message.substring(0, 47) + "..."; } @@ -246,16 +257,22 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, String idx = "#IndexCards[" + index + "]"; + // Localize entry labels and buttons + cmd.set(idx + " #MessageLabel.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.LABEL_MESSAGE)); + cmd.set(idx + " #CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.BTN_CANCEL)); + cmd.set(idx + " #AcceptBtn.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.BTN_ACCEPT)); + cmd.set(idx + " #DeclineBtn.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.BTN_DECLINE)); + // Basic info cmd.set(idx + " #PlayerName.Text", item.playerName); - cmd.set(idx + " #StatusInfo.Text", "Expires: " + formatTime(item.remainingSeconds)); + cmd.set(idx + " #StatusInfo.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.EXPIRES, formatTime(item.remainingSeconds))); // Type badge if (item.isOutgoing) { - cmd.set(idx + " #TypeLabel.Text", "Outgoing"); + cmd.set(idx + " #TypeLabel.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.TYPE_OUTGOING)); cmd.set(idx + " #TypeLabel.Style.TextColor", "#55FFFF"); } else { - cmd.set(idx + " #TypeLabel.Text", "Request"); + cmd.set(idx + " #TypeLabel.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.TYPE_REQUEST)); cmd.set(idx + " #TypeLabel.Style.TextColor", "#FFAA00"); } @@ -277,7 +294,7 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, if (isExpanded) { if (item.isOutgoing) { // Outgoing invite - show inviter info - cmd.set(idx + " #InfoLabel.Text", "Invited by:"); + cmd.set(idx + " #InfoLabel.Text", HFMessages.get(playerRef, MessageKeys.InvitesGui.INVITED_BY_LABEL)); cmd.set(idx + " #InfoValue.Text", item.inviterInfo); cmd.set(idx + " #MessageRow.Visible", false); @@ -324,9 +341,9 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, private String getEmptyMessage() { if (currentTab == Tab.OUTGOING) { - return "No outgoing invites. Use /f invite to invite someone."; + return HFMessages.get(playerRef, MessageKeys.InvitesGui.EMPTY_OUTGOING); } else { - return "No join requests. Players can request to join with /f request."; + return HFMessages.get(playerRef, MessageKeys.InvitesGui.EMPTY_REQUESTS); } } @@ -338,16 +355,16 @@ private String getPlayerName(UUID playerUuid) { return member.username(); } } - return "Unknown"; + return HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); } private String formatTime(int seconds) { if (seconds < 60) { - return seconds + "s"; + return HFMessages.get(playerRef, MessageKeys.InvitesGui.TIME_SECONDS, seconds); } else if (seconds < 3600) { - return (seconds / 60) + "m"; + return HFMessages.get(playerRef, MessageKeys.InvitesGui.TIME_MINUTES, seconds / 60); } else { - return (seconds / 3600) + "h"; + return HFMessages.get(playerRef, MessageKeys.InvitesGui.TIME_HOURS, seconds / 3600); } } @@ -426,7 +443,7 @@ private void handleCancelInvite(Player player, FactionPageData data) { UUID targetUuid = UuidUtil.parseOrNull(data.playerUuid); if (targetUuid == null) { - player.sendMessage(MessageUtil.errorText("Invalid player.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.InvitesGui.INVALID_PLAYER)); sendUpdate(); return; } @@ -434,7 +451,7 @@ private void handleCancelInvite(Player player, FactionPageData data) { inviteManager.removeInvite(faction.id(), targetUuid); String playerName = getPlayerName(targetUuid); - player.sendMessage(Message.raw("Cancelled invite to " + playerName + ".").color("#AAAAAA")); + player.sendMessage(Message.raw(HFMessages.get(playerRef, MessageKeys.InvitesGui.CANCELLED_INVITE, playerName)).color("#AAAAAA")); expandedItems.remove(data.playerUuid); rebuildList(); @@ -449,7 +466,7 @@ private void handleAcceptRequest(Player player, Ref ref, Store ref, Store ref, UICommandBuilder cmd, cmd.append(UIPaths.FACTION_LEADERBOARD); + // Localize static labels + cmd.set("#LeaderboardTitle.Text", HFMessages.get(playerRef, MessageKeys.LeaderboardGui.TITLE)); + cmd.set("#RankByLabel.Text", HFMessages.get(playerRef, MessageKeys.LeaderboardGui.RANK_BY)); + cmd.set("#ColRankLabel.Text", HFMessages.get(playerRef, MessageKeys.LeaderboardGui.COL_RANK)); + cmd.set("#ColFactionLabel.Text", HFMessages.get(playerRef, MessageKeys.LeaderboardGui.COL_FACTION)); + cmd.set("#ColClaimsLabel.Text", HFMessages.get(playerRef, MessageKeys.LeaderboardGui.COL_CLAIMS)); + cmd.set("#ColMembersLabel.Text", HFMessages.get(playerRef, MessageKeys.LeaderboardGui.COL_MEMBERS)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.NEXT)); + // Setup navigation bar if (viewerFaction != null) { NavBarHelper.setupBar(playerRef, viewerFaction, PAGE_ID, cmd, events); @@ -110,17 +122,17 @@ private void buildLeaderboard(UICommandBuilder cmd, UIEventBuilder events, @Nullable Faction viewerFaction) { List entries = buildEntryList(); - cmd.set("#FactionCount.Text", entries.size() + " factions"); + cmd.set("#FactionCount.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.FACTION_COUNT, entries.size())); // Sort dropdown List sortOptions = new ArrayList<>(); - sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString("K/D"), "KD")); - sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString("Power"), "POWER")); - sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString("Territory"), "TERRITORY")); + sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.LeaderboardGui.SORT_KD)), "KD")); + sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.GuiCommon.SORT_POWER)), "POWER")); + sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.LeaderboardGui.SORT_TERRITORY)), "TERRITORY")); if (economyManager != null) { - sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString("Balance"), "BALANCE")); + sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.LeaderboardGui.SORT_BALANCE)), "BALANCE")); } - sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString("Members"), "MEMBERS")); + sortOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.GuiCommon.SORT_MEMBERS)), "MEMBERS")); cmd.set("#SortDropdown.Entries", sortOptions); cmd.set("#SortDropdown.Value", sortMode.name()); @@ -133,7 +145,7 @@ private void buildLeaderboard(UICommandBuilder cmd, UIEventBuilder events, ); // Update column header based on sort mode - cmd.set("#StatHeader.Text", sortMode.displayName); + cmd.set("#StatHeader.Text", HFMessages.get(playerRef, sortMode.displayKey)); // Calculate pagination int totalPages = Math.max(1, (int) Math.ceil((double) entries.size() / ENTRIES_PER_PAGE)); @@ -154,7 +166,7 @@ private void buildLeaderboard(UICommandBuilder cmd, UIEventBuilder events, } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -203,7 +215,7 @@ private List buildEntryList() { faction.name(), faction.tag(), faction.color() != null ? faction.color() : "#00FFFF", - leader != null ? leader.username() : "None", + leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.NONE), stats.currentPower(), stats.maxPower(), faction.getClaimCount(), @@ -250,7 +262,7 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, } // Leader - cmd.set(idx + " #LeaderName.Text", "Leader: " + entry.leaderName); + cmd.set(idx + " #LeaderName.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.LEADER_LABEL, entry.leaderName)); // Primary stat value based on sort mode String statValue = switch (sortMode) { @@ -259,7 +271,7 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, case TERRITORY -> String.valueOf(entry.claimCount); case BALANCE -> economyManager != null ? economyManager.formatCurrency(entry.balance) - : "N/A"; + : HFMessages.get(playerRef, MessageKeys.Common.NA); case MEMBERS -> String.valueOf(entry.memberCount); }; cmd.set(idx + " #StatValue.Text", statValue); diff --git a/src/main/java/com/hyperfactions/gui/faction/page/FactionMainPage.java b/src/main/java/com/hyperfactions/gui/faction/page/FactionMainPage.java index 49c4379f..465072fb 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/FactionMainPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/FactionMainPage.java @@ -7,6 +7,8 @@ import com.hyperfactions.gui.faction.data.FactionPageData; import com.hyperfactions.gui.newplayer.NewPlayerNavBarHelper; import com.hyperfactions.manager.*; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; @@ -15,7 +17,6 @@ import com.hypixel.hytale.math.vector.Vector3f; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport; @@ -130,7 +131,7 @@ private void buildInviteNotification(UICommandBuilder cmd, UIEventBuilder events } private void buildNoFactionView(UICommandBuilder cmd, UIEventBuilder events) { - cmd.set("#FactionName.Text", "No Faction"); + cmd.set("#FactionName.Text", HFMessages.get(playerRef, MessageKeys.FactionMainGui.NO_FACTION)); // Show create/browse buttons cmd.append("#ActionArea", UIPaths.NO_FACTION_ACTIONS); @@ -277,7 +278,7 @@ private void handleAcceptInvite(Player player, Ref ref, Store ref, Store ref, Store ref, Store ref, Store ref, Store ref, Store store, @@ -372,10 +373,10 @@ private void handleLeave(Player player, Ref ref, Store FactionManager.FactionResult result = factionManager.removeMember(faction.id(), uuid, uuid, false); if (result == FactionManager.FactionResult.SUCCESS) { - player.sendMessage(MessageUtil.text("You left the faction.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.success(playerRef, MessageKeys.Leave.SUCCESS)); guiManager.openFactionMain(player, ref, store, playerRef); } else { - player.sendMessage(Message.raw("Failed to leave: " + result).color("#FF5555")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.FactionMainGui.LEAVE_FAILED, result)); } } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/FactionMembersPage.java b/src/main/java/com/hyperfactions/gui/faction/page/FactionMembersPage.java index 3d34d3d3..b1e202fa 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/FactionMembersPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/FactionMembersPage.java @@ -13,6 +13,8 @@ import com.hyperfactions.integration.PermissionManager; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.TimeUtil; import com.hyperfactions.util.UuidUtil; @@ -100,6 +102,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the main template cmd.append(UIPaths.FACTION_MEMBERS); + // Localize static labels + cmd.set("#MembersTitle.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.TITLE)); + cmd.set("#SearchLabel.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.SEARCH)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.SORT)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.NEXT)); + // Setup navigation bar NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); @@ -139,12 +148,12 @@ private void buildMemberList(UICommandBuilder cmd, UIEventBuilder events) { int endIdx = Math.min(startIdx + ITEMS_PER_PAGE, totalMembers); List pageMembers = allMembers.subList(startIdx, endIdx); - cmd.set("#MemberCount.Text", totalMembers + " members"); + cmd.set("#MemberCount.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.MEMBER_COUNT, totalMembers)); // Sort dropdown cmd.set("#SortDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Role"), "ROLE"), - new DropdownEntryInfo(LocalizableString.fromString("Last Online"), "LAST_ONLINE") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.MembersGui.SORT_ROLE)), "ROLE"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.MembersGui.SORT_LAST_ONLINE)), "LAST_ONLINE") )); cmd.set("#SortDropdown.Value", sortMode.name()); events.addEventBinding( @@ -217,6 +226,17 @@ private void buildMemberEntry(UICommandBuilder cmd, UIEventBuilder events, int i // Use indexed selector like NavBarHelper does String idx = "#IndexCards[" + index + "]"; + // Localize entry labels + cmd.set(idx + " #PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.LABEL_POWER)); + cmd.set(idx + " #JoinedLabel.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.LABEL_JOINED)); + cmd.set(idx + " #LastDeathLabel.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.LABEL_LAST_DEATH)); + cmd.set(idx + " #PromoteBtn.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.BTN_PROMOTE)); + cmd.set(idx + " #DemoteBtn.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.BTN_DEMOTE)); + cmd.set(idx + " #KickBtn.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.BTN_KICK)); + cmd.set(idx + " #TransferBtn.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.BTN_MAKE_LEADER)); + cmd.set(idx + " #ProfileBtn.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.BTN_PROFILE)); + cmd.set(idx + " #SelfLabel.Text", HFMessages.get(playerRef, MessageKeys.MembersGui.SELF_LABEL)); + // Basic info cmd.set(idx + " #MemberName.Text", member.username()); cmd.set(idx + " #MemberRole.Text", formatRole(member.role())); @@ -225,7 +245,9 @@ private void buildMemberEntry(UICommandBuilder cmd, UIEventBuilder events, int i cmd.set(idx + " #RoleIndicator.Background.Color", GuiColors.forRole(member.role())); // Online status - cmd.set(idx + " #OnlineStatus.Text", memberIsOnline ? "Online" : "Offline"); + cmd.set(idx + " #OnlineStatus.Text", memberIsOnline + ? HFMessages.get(playerRef, MessageKeys.Common.ONLINE) + : HFMessages.get(playerRef, MessageKeys.Common.OFFLINE)); cmd.set(idx + " #OnlineStatus.Style.TextColor", GuiColors.forOnlineStatus(memberIsOnline)); if (!memberIsOnline) { cmd.set(idx + " #LastOnline.Text", formatLastOnline(member.lastOnline())); @@ -261,13 +283,14 @@ private void buildMemberEntry(UICommandBuilder cmd, UIEventBuilder events, int i // Joined date String joinedDate = member.joinedAt() > 0 ? DATE_FORMAT.format(Instant.ofEpochMilli(member.joinedAt())) - : "Unknown"; + : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); cmd.set(idx + " #JoinedDate.Text", joinedDate); // Last death (relative format) String lastDeathText = power.lastDeath() > 0 - ? TimeUtil.formatDuration(System.currentTimeMillis() - power.lastDeath()) + " ago" - : "Never"; + ? HFMessages.get(playerRef, MessageKeys.MembersGui.AGO, + TimeUtil.formatDuration(System.currentTimeMillis() - power.lastDeath())) + : HFMessages.get(playerRef, MessageKeys.MembersGui.NEVER); cmd.set(idx + " #LastDeath.Text", lastDeathText); // Determine what actions the viewer can take on this member @@ -391,9 +414,10 @@ private String formatLastOnline(long lastOnlineMs) { } long diffMs = System.currentTimeMillis() - lastOnlineMs; if (diffMs < 60000) { - return "just now"; + return HFMessages.get(playerRef, MessageKeys.MembersGui.JUST_NOW); } - return TimeUtil.formatDuration(diffMs) + " ago"; + return HFMessages.get(playerRef, MessageKeys.MembersGui.AGO, + TimeUtil.formatDuration(diffMs)); } /** Handles data event. */ @@ -472,7 +496,7 @@ public void handleDataEvent(Ref ref, Store store, sendUpdate(); return; } - String targetName = data.target != null ? data.target : "Unknown"; + String targetName = data.target != null ? data.target : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); guiManager.openPlayerInfo(player, ref, store, playerRef, uuid, targetName, "members"); } } @@ -499,16 +523,17 @@ private void handlePromote(Player player, Ref ref, Store ref, Store ref, Store } FactionMember target = faction.members().get(targetUuid); if (target == null) { - player.sendMessage(MessageUtil.errorText("Member not found.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.MembersGui.MEMBER_NOT_FOUND)); sendUpdate(); return; } var result = factionManager.removeMember(faction.id(), targetUuid, playerRef.getUuid(), true); if (result == FactionManager.FactionResult.SUCCESS) { - player.sendMessage(Message.raw("Kicked " + target.username() + " from the faction.").color("#55FF55")); + player.sendMessage(MessageUtil.success(playerRef, MessageKeys.MembersGui.KICKED, target.username())); } else { - player.sendMessage(MessageUtil.errorText("Failed to kick: " + result.name())); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.MembersGui.KICK_FAILED, result.name())); } rebuildList(ref, store); } @@ -580,7 +606,7 @@ private void handleTransfer(Player player, Ref ref, Store MODULES = List.of( - new ModuleInfo("treasury", "Treasury", "Faction bank & economy system", "#fbbf24"), - new ModuleInfo("raids", "Raids", "Scheduled faction battles", "#ef4444"), - new ModuleInfo("levels", "Levels", "Faction progression & XP", "#22c55e"), - new ModuleInfo("war", "War", "Formal war declarations", "#a855f7") + new ModuleInfo("treasury", MessageKeys.ModulesGui.TREASURY_NAME, MessageKeys.ModulesGui.TREASURY_DESC, "#fbbf24"), + new ModuleInfo("raids", MessageKeys.ModulesGui.RAIDS_NAME, MessageKeys.ModulesGui.RAIDS_DESC, "#ef4444"), + new ModuleInfo("levels", MessageKeys.ModulesGui.LEVELS_NAME, MessageKeys.ModulesGui.LEVELS_DESC, "#22c55e"), + new ModuleInfo("war", MessageKeys.ModulesGui.WAR_NAME, MessageKeys.ModulesGui.WAR_DESC, "#a855f7") ); private final PlayerRef playerRef; @@ -69,6 +71,11 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the modules template cmd.append(UIPaths.FACTION_MODULES); + // Localize static labels + cmd.set("#ModulesTitle.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.TITLE)); + cmd.set("#ModulesDescription.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.DESCRIPTION)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.BACK_BTN)); + // Setup navigation bar NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); @@ -78,8 +85,8 @@ public void build(Ref ref, UICommandBuilder cmd, String cardSelector = "#ModuleCard" + i; // Set module info - cmd.set(cardSelector + " #ModuleName.Text", module.name); - cmd.set(cardSelector + " #ModuleDesc.Text", module.description); + cmd.set(cardSelector + " #ModuleName.Text", HFMessages.get(playerRef, module.nameKey)); + cmd.set(cardSelector + " #ModuleDesc.Text", HFMessages.get(playerRef, module.descKey)); // Set color indicator cmd.set(cardSelector + " #ColorBar.Background.Color", module.color); @@ -89,7 +96,7 @@ public void build(Ref ref, UICommandBuilder cmd, buildTreasuryCard(cmd, events, cardSelector); } else { // Other modules: coming soon - cmd.set(cardSelector + " #StatusBadge.Text", "Coming Soon"); + cmd.set(cardSelector + " #StatusBadge.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.COMING_SOON)); cmd.set(cardSelector + " #StatusBadge.Style.TextColor", "#888888"); } } @@ -161,10 +168,10 @@ public void handleDataEvent(Ref ref, Store store, private void buildTreasuryCard(UICommandBuilder cmd, UIEventBuilder events, String cardSelector) { if (hyperFactions.isTreasuryEnabled()) { // State 1: Active - cmd.set(cardSelector + " #StatusBadge.Text", "Active"); + cmd.set(cardSelector + " #StatusBadge.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.ACTIVE)); cmd.set(cardSelector + " #StatusBadge.Style.TextColor", "#22c55e"); cmd.set(cardSelector + " #ModuleBtn.Visible", true); - cmd.set(cardSelector + " #ModuleBtn.Text", "View Treasury"); + cmd.set(cardSelector + " #ModuleBtn.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.VIEW_TREASURY)); events.addEventBinding( CustomUIEventBindingType.Activating, cardSelector + " #ModuleBtn", @@ -175,17 +182,17 @@ private void buildTreasuryCard(UICommandBuilder cmd, UIEventBuilder events, Stri String reason = hyperFactions.getTreasuryDisabledReason(); if (reason != null && reason.contains("economy plugin")) { // State 3: Config enabled but no economy plugin - cmd.set(cardSelector + " #StatusBadge.Text", "Unavailable"); + cmd.set(cardSelector + " #StatusBadge.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.UNAVAILABLE)); cmd.set(cardSelector + " #StatusBadge.Style.TextColor", "#fbbf24"); - cmd.set(cardSelector + " #ModuleDesc.Text", "No economy plugin detected"); + cmd.set(cardSelector + " #ModuleDesc.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.NO_ECONOMY)); } else { // State 2: Disabled by server config - cmd.set(cardSelector + " #StatusBadge.Text", "Disabled"); + cmd.set(cardSelector + " #StatusBadge.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.DISABLED)); cmd.set(cardSelector + " #StatusBadge.Style.TextColor", "#888888"); - cmd.set(cardSelector + " #ModuleDesc.Text", "Economy features are not available on this server"); + cmd.set(cardSelector + " #ModuleDesc.Text", HFMessages.get(playerRef, MessageKeys.ModulesGui.ECONOMY_NOT_AVAILABLE)); } } } - private record ModuleInfo(String id, String name, String description, String color) {} + private record ModuleInfo(String id, String nameKey, String descKey, String color) {} } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/FactionRelationsPage.java b/src/main/java/com/hyperfactions/gui/faction/page/FactionRelationsPage.java index 58dbfc2e..ab8f2b99 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/FactionRelationsPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/FactionRelationsPage.java @@ -13,13 +13,14 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.manager.RelationManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.Value; @@ -102,6 +103,14 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the main template cmd.append(UIPaths.FACTION_RELATIONS); + // Localize static labels + cmd.set("#RelationsTitle.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.TITLE)); + cmd.set("#TabRelations.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.TAB_RELATIONS)); + cmd.set("#TabPending.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.TAB_PENDING)); + cmd.set("#SetRelationBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.SET_RELATION_BTN)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.NEXT)); + // Setup navigation bar NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); @@ -168,9 +177,9 @@ private void buildList(UICommandBuilder cmd, UIEventBuilder events, boolean canM }; // Count - String countText = items.size() + " " + switch (currentTab) { - case RELATIONS -> items.size() == 1 ? "relation" : "relations"; - case PENDING -> items.size() == 1 ? "request" : "requests"; + String countText = switch (currentTab) { + case RELATIONS -> HFMessages.get(playerRef, MessageKeys.RelationsGui.RELATION_COUNT, items.size()); + case PENDING -> HFMessages.get(playerRef, MessageKeys.RelationsGui.REQUEST_COUNT, items.size()); }; cmd.set("#ItemCount.Text", countText); @@ -201,7 +210,7 @@ private void buildList(UICommandBuilder cmd, UIEventBuilder events, boolean canM } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -236,7 +245,7 @@ private List getAllRelations() { Faction other = factionManager.getFaction(relation.targetFactionId()); if (other != null) { FactionMember leader = other.getLeader(); - String leaderName = leader != null ? leader.username() : "Unknown"; + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); String typeText = relation.type() == RelationType.ALLY ? "Ally" : "Enemy"; PowerManager.FactionPowerStats stats = powerManager.getFactionPowerStats(other.id()); items.add(new RelationItem( @@ -272,7 +281,7 @@ private List getPendingRequests() { Faction requester = factionManager.getFaction(requesterId); if (requester != null) { FactionMember leader = requester.getLeader(); - String leaderName = leader != null ? leader.username() : "Unknown"; + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); PowerManager.FactionPowerStats stats = powerManager.getFactionPowerStats(requester.id()); items.add(new RelationItem( requester.id(), @@ -296,7 +305,7 @@ private List getPendingRequests() { Faction target = factionManager.getFaction(targetId); if (target != null) { FactionMember leader = target.getLeader(); - String leaderName = leader != null ? leader.username() : "Unknown"; + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); PowerManager.FactionPowerStats stats = powerManager.getFactionPowerStats(target.id()); items.add(new RelationItem( target.id(), @@ -330,12 +339,26 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, String idx = "#IndexCards[" + index + "]"; + // Localize entry labels and buttons + cmd.set(idx + " #MemberLabel.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.LABEL_MEMBERS)); + cmd.set(idx + " #PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.LABEL_POWER)); + cmd.set(idx + " #SinceLabel.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.LABEL_SINCE)); + cmd.set(idx + " #ClaimsLabel.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.LABEL_CLAIMS)); + cmd.set(idx + " #DirectionLabel.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.LABEL_DIRECTION)); + cmd.set(idx + " #ViewBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.BTN_VIEW)); + cmd.set(idx + " #NeutralBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.BTN_NEUTRAL)); + cmd.set(idx + " #EnemyBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.BTN_ENEMY)); + cmd.set(idx + " #AllyBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.BTN_ALLY)); + cmd.set(idx + " #AcceptBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.BTN_ACCEPT)); + cmd.set(idx + " #DeclineBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.BTN_DECLINE)); + cmd.set(idx + " #CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.BTN_CANCEL)); + // === Header info === cmd.set(idx + " #FactionName.Text", item.factionName); - cmd.set(idx + " #LeaderName.Text", "Leader: " + item.leaderName); + cmd.set(idx + " #LeaderName.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.LEADER_LABEL, item.leaderName)); // Relation type badge with appropriate color - cmd.set(idx + " #RelationType.Text", item.type); + cmd.set(idx + " #RelationType.Text", localizeType(item.type)); String typeColor = switch (item.type) { case "Ally" -> "#00AAFF"; case "Enemy" -> "#FF5555"; @@ -387,7 +410,9 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, cmd.set(idx + " #PendingRow.Visible", isPending); if (isPending) { - String direction = item.isIncoming ? "Incoming request" : "Outgoing request"; + String direction = item.isIncoming + ? HFMessages.get(playerRef, MessageKeys.RelationsGui.INCOMING_REQUEST) + : HFMessages.get(playerRef, MessageKeys.RelationsGui.OUTGOING_REQUEST); cmd.set(idx + " #DirectionValue.Text", direction); cmd.set(idx + " #DirectionValue.Style.TextColor", item.isIncoming ? "#FFAA00" : "#88AAFF"); @@ -519,9 +544,9 @@ private void buildEntry(UICommandBuilder cmd, UIEventBuilder events, int index, private String getEmptyMessage(boolean canManage) { return switch (currentTab) { case RELATIONS -> canManage - ? "No relations yet. Click + SET RELATION to add allies or enemies." - : "No relations yet."; - case PENDING -> "No pending ally requests."; + ? HFMessages.get(playerRef, MessageKeys.RelationsGui.EMPTY_RELATIONS_HINT) + : HFMessages.get(playerRef, MessageKeys.RelationsGui.EMPTY_RELATIONS); + case PENDING -> HFMessages.get(playerRef, MessageKeys.RelationsGui.EMPTY_PENDING); }; } @@ -531,14 +556,24 @@ private String formatDate(long sinceMillis) { Instant.now() ); if (daysSince == 0) { - return "Today"; + return HFMessages.get(playerRef, MessageKeys.RelationsGui.TODAY); } else if (daysSince == 1) { - return "1 day ago"; + return HFMessages.get(playerRef, MessageKeys.RelationsGui.ONE_DAY_AGO); } else { - return daysSince + " days ago"; + return HFMessages.get(playerRef, MessageKeys.RelationsGui.DAYS_AGO, daysSince); } } + private String localizeType(String type) { + return switch (type) { + case "Ally" -> HFMessages.get(playerRef, MessageKeys.RelationsGui.TYPE_ALLY); + case "Enemy" -> HFMessages.get(playerRef, MessageKeys.RelationsGui.TYPE_ENEMY); + case "Incoming" -> HFMessages.get(playerRef, MessageKeys.RelationsGui.TYPE_INCOMING); + case "Outgoing" -> HFMessages.get(playerRef, MessageKeys.RelationsGui.TYPE_OUTGOING); + default -> type; + }; + } + private record RelationItem(UUID factionId, String factionName, String leaderName, String type, long sinceMillis, int memberCount, double power, double maxPower, int claims, @@ -635,7 +670,7 @@ private void handleViewFaction(Player player, Ref ref, Store ref, Store ref, UICommandBuilder cmd, // Permission check - officer or leader only if (member == null || member.role().getLevel() < FactionRole.OFFICER.getLevel()) { cmd.append(UIPaths.ERROR_PAGE); - cmd.set("#ErrorMessage.Text", "Only officers and leaders can change faction settings."); + cmd.set("#ErrorMessage.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.OFFICERS_ONLY)); events.addEventBinding( CustomUIEventBindingType.Activating, "#CloseBtn", @@ -104,6 +105,63 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the unified settings template cmd.append(UIPaths.FACTION_SETTINGS); + // Localize static labels + cmd.set("#SettingsTitle.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.TITLE)); + cmd.set("#GeneralHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.GENERAL)); + cmd.set("#NameLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.NAME_LABEL)); + cmd.set("#TagLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.TAG_LABEL)); + cmd.set("#DescLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.DESC_LABEL)); + cmd.set("#NameEditBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.EDIT_BTN)); + cmd.set("#TagEditBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.EDIT_BTN)); + cmd.set("#DescEditBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.EDIT_BTN)); + cmd.set("#RecruitmentHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.RECRUITMENT)); + cmd.set("#StatusLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.STATUS_LABEL)); + cmd.set("#HomeLocationHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.HOME_LOCATION)); + cmd.set("#LocationLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.LOCATION_LABEL)); + cmd.set("#SetHomeBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.SET_HOME_BTN)); + cmd.set("#TeleportHomeBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.TELEPORT_BTN)); + cmd.set("#DeleteHomeBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.DELETE_BTN)); + cmd.set("#OptionalFeaturesHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.OPTIONAL_FEATURES)); + cmd.set("#ModulesDescLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.CONFIGURE_MODULES)); + cmd.set("#ModulesBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.MODULES_BTN)); + cmd.set("#DangerZoneHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.DANGER_ZONE)); + cmd.set("#IrreversibleLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.IRREVERSIBLE)); + cmd.set("#DisbandBtn.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.DISBAND_BTN)); + cmd.set("#LockHintLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.LOCK_HINT)); + cmd.set("#TerritoryPermissionsHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.TERRITORY_PERMISSIONS)); + cmd.set("#ColOutLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_OUT)); + cmd.set("#ColAllyLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_ALLY)); + cmd.set("#ColMemLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_MEM)); + cmd.set("#ColOffLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_OFF)); + cmd.set("#BuildingCatLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.CAT_BUILDING)); + cmd.set("#BreakPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_BREAK)); + cmd.set("#PlacePermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_PLACE)); + cmd.set("#InteractionCatLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.CAT_INTERACTION)); + cmd.set("#InteractionHintLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.INTERACTION_HINT)); + cmd.set("#AllPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_ALL)); + cmd.set("#DoorPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_DOOR)); + cmd.set("#ChestPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_CHEST)); + cmd.set("#BenchPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_BENCH)); + cmd.set("#ProcessingPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_PROCESSING)); + cmd.set("#SeatPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_SEAT)); + cmd.set("#TransportPermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_TRANSPORT)); + cmd.set("#OtherCatLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.CAT_OTHER)); + cmd.set("#CrateUsePermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_CRATE)); + cmd.set("#NpcTamePermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_NPC_TAME)); + cmd.set("#PveDamagePermLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_PVE)); + cmd.set("#AppearanceHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.APPEARANCE)); + cmd.set("#ColorLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COLOR_LABEL)); + cmd.set("#MobSpawningHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.MOB_SPAWNING)); + cmd.set("#MobSpawningHintLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.MOB_SPAWNING_HINT)); + cmd.set("#MobSpawningMasterLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.MOB_SPAWNING_LABEL)); + cmd.set("#HostileMobsLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.HOSTILE_MOBS)); + cmd.set("#PassiveMobsLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PASSIVE_MOBS)); + cmd.set("#NeutralMobsLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.NEUTRAL_MOBS)); + cmd.set("#FactionSettingsHeader.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.FACTION_SETTINGS)); + cmd.set("#PvpLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_IN_TERRITORY)); + cmd.set("#OfficersCanEditLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.OFFICERS_CAN_EDIT)); + cmd.set("#LeaderOnlyLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.LEADER_ONLY)); + // Setup navigation bar NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); @@ -141,7 +199,7 @@ private void buildGeneralSettings(UICommandBuilder cmd, UIEventBuilder events) { // Tag String tagDisplay = faction.tag() != null && !faction.tag().isEmpty() ? "[" + faction.tag().toUpperCase() + "]" - : "(None)"; + : HFMessages.get(playerRef, MessageKeys.SettingsGui.DISPLAY_NONE); cmd.set("#TagValue.Text", tagDisplay); events.addEventBinding(CustomUIEventBindingType.Activating, "#TagEditBtn", EventData.of("Button", "OpenTagModal"), false); @@ -149,15 +207,15 @@ private void buildGeneralSettings(UICommandBuilder cmd, UIEventBuilder events) { // Description String desc = faction.description() != null && !faction.description().isEmpty() ? faction.description() - : "(None)"; + : HFMessages.get(playerRef, MessageKeys.SettingsGui.DISPLAY_NONE); cmd.set("#DescValue.Text", desc); events.addEventBinding(CustomUIEventBindingType.Activating, "#DescEditBtn", EventData.of("Button", "OpenDescriptionModal"), false); // Recruitment dropdown cmd.set("#RecruitmentDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Open"), "OPEN"), - new DropdownEntryInfo(LocalizableString.fromString("Invite Only"), "INVITE_ONLY") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN)), "OPEN"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)), "INVITE_ONLY") )); cmd.set("#RecruitmentDropdown.Value", faction.open() ? "OPEN" : "INVITE_ONLY"); events.addEventBinding(CustomUIEventBindingType.ValueChanged, "#RecruitmentDropdown", @@ -223,7 +281,9 @@ private void buildPermissions(UICommandBuilder cmd, UIEventBuilder events, boole // PvP toggle buildToggle(cmd, events, "PvPToggle", "pvpEnabled", perms.pvpEnabled(), canEdit, config, false); - cmd.set("#PvPStatus.Text", perms.pvpEnabled() ? "Enabled" : "Disabled"); + cmd.set("#PvPStatus.Text", perms.pvpEnabled() + ? HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_ENABLED) + : HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_DISABLED)); cmd.set("#PvPStatus.Style.TextColor", perms.pvpEnabled() ? "#55FF55" : "#FF5555"); // Officers can edit - only leader can change this @@ -300,7 +360,7 @@ private void buildHomeSection(UICommandBuilder cmd, UIEventBuilder events) { worldName, home.x(), home.y(), home.z()); cmd.set("#HomeLocation.Text", homeText); } else { - cmd.set("#HomeLocation.Text", "Not set"); + cmd.set("#HomeLocation.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.HOME_NOT_SET)); cmd.set("#TeleportHomeBtn.Disabled", true); cmd.set("#DeleteHomeBtn.Disabled", true); } @@ -366,7 +426,7 @@ public void handleDataEvent(Ref ref, Store store, // Verify permissions if (member == null || member.role().getLevel() < FactionRole.OFFICER.getLevel()) { - player.sendMessage(MessageUtil.errorText("You don't have permission to change settings.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.SettingsGui.NO_PERMISSION)); sendUpdate(); return; } @@ -386,7 +446,7 @@ public void handleDataEvent(Ref ref, Store store, case "OpenModules" -> guiManager.openFactionModules(player, ref, store, playerRef, faction); case "Disband" -> { if (!isLeader) { - player.sendMessage(MessageUtil.errorText("Only the leader can disband the faction.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.SettingsGui.ONLY_LEADER_DISBAND)); sendUpdate(); return; } @@ -407,19 +467,19 @@ private void handleTogglePerm(Player player, Ref ref, Store ref, Store Faction updatedFaction = faction.withOpen(isOpen); factionManager.updateFaction(updatedFaction); - player.sendMessage(Message.raw("Recruitment set to " + (isOpen ? "Open" : "Invite Only") + ".").color("#55FF55")); + String status = isOpen + ? HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN) + : HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY); + player.sendMessage(MessageUtil.success(playerRef, MessageKeys.SettingsGui.RECRUITMENT_SET, status)); Faction freshFaction = factionManager.getFaction(faction.id()); guiManager.openFactionSettings(player, ref, store, playerRef, freshFaction); @@ -492,7 +555,7 @@ private void handleSetHome(Player player, Ref ref, Store ref, Store ref, Store store, UUID uuid) { if (faction.home() == null) { - player.sendMessage(MessageUtil.errorText("No faction home set.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Home.NO_HOME)); sendUpdate(); return; } @@ -526,14 +589,14 @@ private void handleTeleportHome(Player player, Ref ref, Store store, private void handleTeleportResult(Player player, TeleportManager.TeleportResult result) { switch (result) { - case NOT_IN_FACTION -> player.sendMessage(MessageUtil.errorText("You are not in a faction.")); - case NO_HOME -> player.sendMessage(MessageUtil.errorText("Your faction has no home set.")); - case COMBAT_TAGGED -> player.sendMessage(MessageUtil.errorText("You cannot teleport while in combat!")); - case SUCCESS_INSTANT -> player.sendMessage(MessageUtil.successText("Teleported to faction home!")); + case NOT_IN_FACTION -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Common.NOT_IN_FACTION)); + case NO_HOME -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Home.NO_HOME)); + case COMBAT_TAGGED -> player.sendMessage(MessageUtil.error(playerRef, MessageKeys.Home.COMBAT_TAGGED)); + case SUCCESS_INSTANT -> player.sendMessage(MessageUtil.success(playerRef, MessageKeys.Home.TELEPORTED)); case ON_COOLDOWN, SUCCESS_WARMUP -> {} // Message sent by TeleportManager default -> {} } @@ -592,7 +655,7 @@ private void handleTeleportResult(Player player, TeleportManager.TeleportResult private void handleDeleteHome(Player player, Ref ref, Store store, UUID uuid) { if (faction.home() == null) { - player.sendMessage(MessageUtil.text("Your faction does not have a home set.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.info(playerRef, MessageKeys.SettingsGui.HOME_NO_SET, MessageUtil.COLOR_GOLD)); sendUpdate(); return; } @@ -600,7 +663,7 @@ private void handleDeleteHome(Player player, Ref ref, Store ref, UICommandBuilder cmd, // Load the leader leave confirmation template cmd.append(UIPaths.LEADER_LEAVE_CONFIRM); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.LEADER_LEAVE_TITLE)); + cmd.set("#ConfirmText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.LEADER_LEAVE_PROMPT)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#LeaveBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.LEAVE)); + cmd.set("#DisbandBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.DISBAND)); + // Set faction name cmd.set("#FactionName.Text", faction.name()); // Show succession information if (successor != null) { - cmd.set("#SuccessionTitle.Text", "Leadership will transfer to:"); + cmd.set("#SuccessionTitle.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.SUCCESSION_TITLE)); cmd.set("#SuccessorName.Text", successor.username()); cmd.set("#SuccessorRole.Text", successor.role().getDisplayName()); cmd.set("#WarningText.Text", ""); @@ -84,10 +92,10 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.set("#DisbandBtn.Visible", false); } else { // No successor - faction will disband - cmd.set("#SuccessionTitle.Text", "WARNING: No other members!"); + cmd.set("#SuccessionTitle.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.NO_MEMBERS_WARNING)); cmd.set("#SuccessorName.Text", ""); cmd.set("#SuccessorRole.Text", ""); - cmd.set("#WarningText.Text", "Leaving will disband the faction permanently."); + cmd.set("#WarningText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.WILL_DISBAND)); // Hide Leave button, show Disband button cmd.set("#LeaveBtn.Visible", false); @@ -127,13 +135,13 @@ public void handleDataEvent(Ref ref, Store store, // Verify still in faction and still leader if (member == null) { - player.sendMessage(MessageUtil.errorText("You are not in this faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.NOT_IN_FACTION)); guiManager.openFactionMain(player, ref, store, playerRef); return; } if (member.role() != FactionRole.LEADER) { - player.sendMessage(MessageUtil.errorText("You are no longer the leader.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.NOT_LEADER_ANYMORE)); Faction fresh = factionManager.getFaction(faction.id()); if (fresh != null) { guiManager.openFactionDashboard(player, ref, store, playerRef, fresh); @@ -157,7 +165,7 @@ public void handleDataEvent(Ref ref, Store store, case "Leave" -> { // Transfer leadership to successor and leave if (successor == null) { - player.sendMessage(MessageUtil.errorText("No successor available. Use disband instead.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.NO_SUCCESSOR)); return; } @@ -168,7 +176,7 @@ public void handleDataEvent(Ref ref, Store store, faction.id(), successor.uuid(), uuid); if (transferResult != FactionManager.FactionResult.SUCCESS) { - player.sendMessage(Message.raw("Failed to transfer leadership: " + transferResult).color("#FF5555")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.TRANSFER_FAILED, transferResult)); return; } @@ -177,16 +185,10 @@ public void handleDataEvent(Ref ref, Store store, faction.id(), uuid, uuid, false); if (leaveResult == FactionManager.FactionResult.SUCCESS) { - player.sendMessage( - Message.raw("Leadership transferred to ").color("#55FF55") - .insert(Message.raw(successor.username()).color("#00FFFF")) - .insert(Message.raw(". You have left ").color("#55FF55")) - .insert(Message.raw(factionName).color("#00FFFF")) - .insert(Message.raw(".").color("#55FF55")) - ); + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.ConfirmGui.LEADER_LEFT, successor.username(), factionName)); guiManager.openFactionMain(player, ref, store, playerRef); } else { - player.sendMessage(Message.raw("Failed to leave faction: " + leaveResult).color("#FF5555")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.LEAVE_FAILED, leaveResult)); Faction fresh = factionManager.getFaction(faction.id()); if (fresh != null) { guiManager.openFactionDashboard(player, ref, store, playerRef, fresh); diff --git a/src/main/java/com/hyperfactions/gui/faction/page/LeaveConfirmPage.java b/src/main/java/com/hyperfactions/gui/faction/page/LeaveConfirmPage.java index 82c24f9b..b1893a82 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/LeaveConfirmPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/LeaveConfirmPage.java @@ -8,11 +8,12 @@ import com.hyperfactions.gui.faction.data.LeaveConfirmData; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.builder.EventData; @@ -56,6 +57,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the leave confirmation template cmd.append(UIPaths.LEAVE_CONFIRM); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.LEAVE_TITLE)); + cmd.set("#ConfirmText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.LEAVE_PROMPT)); + cmd.set("#WarningText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.LEAVE_WARNING)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.LEAVE)); + // Set faction name in the modal cmd.set("#FactionName.Text", faction.name()); @@ -94,14 +102,14 @@ public void handleDataEvent(Ref ref, Store store, // Verify still in faction if (member == null) { - player.sendMessage(MessageUtil.errorText("You are not in this faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.NOT_IN_FACTION)); guiManager.openFactionMain(player, ref, store, playerRef); return; } // Leaders cannot leave via this modal (they must disband or transfer leadership) if (member.role() == FactionRole.LEADER) { - player.sendMessage(MessageUtil.errorText("Leaders cannot leave. Transfer leadership or disband the faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.LEADER_CANNOT_LEAVE)); guiManager.openFactionDashboard(player, ref, store, playerRef, factionManager.getFaction(faction.id())); return; @@ -125,14 +133,10 @@ public void handleDataEvent(Ref ref, Store store, faction.id(), uuid, uuid, false); if (result == FactionManager.FactionResult.SUCCESS) { - player.sendMessage( - Message.raw("You have left ").color("#FFAA00") - .insert(Message.raw(factionName).color("#00FFFF")) - .insert(Message.raw(".").color("#FFAA00")) - ); + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.ConfirmGui.LEFT_FACTION, factionName)); guiManager.openFactionMain(player, ref, store, playerRef); } else { - player.sendMessage(Message.raw("Failed to leave faction: " + result).color("#FF5555")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.LEAVE_FAILED, result)); guiManager.openFactionMain(player, ref, store, playerRef); } } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/LogsViewerPage.java b/src/main/java/com/hyperfactions/gui/faction/page/LogsViewerPage.java index c6083b0c..13ebd458 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/LogsViewerPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/LogsViewerPage.java @@ -10,6 +10,8 @@ import com.hyperfactions.gui.newplayer.NewPlayerNavBarHelper; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.util.TimeUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -26,6 +28,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.jetbrains.annotations.Nullable; @@ -39,6 +42,7 @@ public class LogsViewerPage extends InteractiveCustomUIPage { private static final int LOGS_PER_PAGE = 10; + private final PlayerRef playerRef; private final FactionManager factionManager; @@ -79,7 +83,15 @@ public void build(Ref ref, UICommandBuilder cmd, } // Set title with faction name - cmd.set("#LogsTitle.Text", faction.name() + " - Activity Logs"); + cmd.set("#LogsTitle.Text", HFMessages.get(playerRef, MessageKeys.LogsGui.TITLE, faction.name())); + + // Localize static labels + cmd.set("#FilterLabel.Text", HFMessages.get(playerRef, MessageKeys.LogsGui.FILTER_LABEL)); + cmd.set("#ColTimeLabel.Text", HFMessages.get(playerRef, MessageKeys.LogsGui.COL_TIME)); + cmd.set("#ColTypeLabel.Text", HFMessages.get(playerRef, MessageKeys.LogsGui.COL_TYPE)); + cmd.set("#ColMessageLabel.Text", HFMessages.get(playerRef, MessageKeys.LogsGui.COL_MESSAGE)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PREV)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.NEXT)); buildLogList(cmd, events); } @@ -114,13 +126,13 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { int endIndex = Math.min(startIndex + LOGS_PER_PAGE, totalLogs); // Log count - cmd.set("#LogCount.Text", totalLogs + " entries"); + cmd.set("#LogCount.Text", HFMessages.get(playerRef, MessageKeys.LogsGui.ENTRY_COUNT, totalLogs)); // Filter dropdown List filterOptions = new ArrayList<>(); - filterOptions.add(new DropdownEntryInfo(LocalizableString.fromString("All Types"), "ALL")); + filterOptions.add(new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.LogsGui.ALL_TYPES)), "ALL")); for (FactionLog.LogType type : FactionLog.LogType.values()) { - filterOptions.add(new DropdownEntryInfo(LocalizableString.fromString(type.getDisplayName()), type.name())); + filterOptions.add(new DropdownEntryInfo(LocalizableString.fromString(getLocalizedTypeName(type)), type.name())); } cmd.set("#FilterDropdown.Entries", filterOptions); cmd.set("#FilterDropdown.Value", filterType != null ? filterType.name() : "ALL"); @@ -137,9 +149,11 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { cmd.clear("#LogsList"); if (totalLogs == 0) { + String emptyText = filterType != null + ? HFMessages.get(playerRef, MessageKeys.LogsGui.NO_LOGS_TYPE) + : HFMessages.get(playerRef, MessageKeys.LogsGui.NO_LOGS); cmd.appendInline("#LogsList", - "Label { Text: \"" - + (filterType != null ? "No logs of this type." : "No activity logs yet.") + + "Label { Text: \"" + emptyText + "\"; Style: (FontSize: 11, TextColor: #555555); Anchor: (Height: 30); }"); } else { for (int i = startIndex; i < endIndex; i++) { @@ -148,20 +162,20 @@ private void buildLogList(UICommandBuilder cmd, UIEventBuilder events) { cmd.append("#LogsList", UIPaths.LOG_ENTRY); - // Time - cmd.set(sel + " #LogTime.Text", TimeUtil.formatRelative(log.timestamp())); + // Time (localized) + cmd.set(sel + " #LogTime.Text", formatRelativeTime(log.timestamp())); - // Type badge with color - cmd.set(sel + " #LogType.Text", log.type().getDisplayName()); + // Type badge with color (localized) + cmd.set(sel + " #LogType.Text", getLocalizedTypeName(log.type())); cmd.set(sel + " #LogType.Style.TextColor", GuiColors.forLogType(log.type())); - // Message - cmd.set(sel + " #LogMessage.Text", log.message()); + // Message (localized if key available, else English fallback) + cmd.set(sel + " #LogMessage.Text", HFMessages.resolveLogMessage(playerRef, log)); } } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -242,6 +256,33 @@ public void handleDataEvent(Ref ref, Store store, } } + /** Returns a localized relative time string for the given timestamp. */ + private String formatRelativeTime(long timestamp) { + long diff = System.currentTimeMillis() - timestamp; + if (diff < 60_000) { + return HFMessages.get(playerRef, MessageKeys.LogsGui.TIME_JUST_NOW); + } else if (diff < 3600_000) { + long m = TimeUnit.MILLISECONDS.toMinutes(diff); + return HFMessages.get(playerRef, m == 1 ? MessageKeys.LogsGui.TIME_MINUTE : MessageKeys.LogsGui.TIME_MINUTES, m); + } else if (diff < 86400_000) { + long h = TimeUnit.MILLISECONDS.toHours(diff); + return HFMessages.get(playerRef, h == 1 ? MessageKeys.LogsGui.TIME_HOUR : MessageKeys.LogsGui.TIME_HOURS, h); + } else if (diff < 604800_000) { + long d = TimeUnit.MILLISECONDS.toDays(diff); + return HFMessages.get(playerRef, d == 1 ? MessageKeys.LogsGui.TIME_DAY : MessageKeys.LogsGui.TIME_DAYS, d); + } else if (diff < 2592000_000L) { + long w = TimeUnit.MILLISECONDS.toDays(diff) / 7; + return HFMessages.get(playerRef, w == 1 ? MessageKeys.LogsGui.TIME_WEEK : MessageKeys.LogsGui.TIME_WEEKS, w); + } else { + return TimeUtil.formatDate(timestamp); + } + } + + /** Returns the localized display name for a log type. */ + private String getLocalizedTypeName(FactionLog.LogType type) { + return HFMessages.get(playerRef, MessageKeys.LogsGui.typeKey(type.name())); + } + private void rebuildList() { UICommandBuilder cmd = new UICommandBuilder(); UIEventBuilder events = new UIEventBuilder(); diff --git a/src/main/java/com/hyperfactions/gui/faction/page/PlayerInfoPage.java b/src/main/java/com/hyperfactions/gui/faction/page/PlayerInfoPage.java index 02bccd4b..deb7c9b3 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/PlayerInfoPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/PlayerInfoPage.java @@ -9,7 +9,9 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.storage.PlayerStorage; +import com.hyperfactions.util.HFMessages; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.TimeUtil; import com.hyperfactions.util.UuidUtil; @@ -17,7 +19,6 @@ import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.builder.EventData; @@ -103,13 +104,32 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the player info template cmd.append(UIPaths.PLAYER_INFO); + // === Static labels === + cmd.set("#PageTitle.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.TITLE)); + cmd.set("#FirstJoinedLabel.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.FIRST_JOINED_LABEL)); + cmd.set("#LastOnlineLabel.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.LAST_ONLINE_LABEL)); + cmd.set("#FactionLabel.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.FACTION_LABEL)); + cmd.set("#RoleLabel.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.ROLE_LABEL)); + cmd.set("#JoinedLabel.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.JOINED_LABEL_STATIC)); + cmd.set("#NoFactionLabel.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.NOT_IN_FACTION)); + cmd.set("#PowerHeader.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.POWER_HEADER)); + cmd.set("#PowerSubtitle.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.CURRENT_MAX)); + cmd.set("#CombatHeader.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.COMBAT_HEADER)); + cmd.set("#CombatSubtitle.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.KILLS_DEATHS)); + cmd.set("#KDRHeader.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.KDR_HEADER)); + cmd.set("#MembershipHistoryLabel.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.MEMBERSHIP_HISTORY)); + cmd.set("#ViewFactionBtn.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.VIEW_FACTION_BTN)); + cmd.set("#BackBtn.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.BACK_BTN)); + // === Header === cmd.set("#PlayerName.Text", targetPlayerName); // Check if target is online PlayerRef targetRef = Universe.get().getPlayer(targetPlayerUuid); boolean isOnline = targetRef != null && targetRef.isValid(); - cmd.set("#OnlineIndicator.Text", isOnline ? "Online" : "Offline"); + cmd.set("#OnlineIndicator.Text", isOnline + ? HFMessages.get(viewerRef, MessageKeys.Common.ONLINE) + : HFMessages.get(viewerRef, MessageKeys.Common.OFFLINE)); cmd.set("#OnlineIndicator.Style.TextColor", GuiColors.forOnlineStatus(isOnline)); // === First Joined / Last Online === @@ -117,15 +137,15 @@ public void build(Ref ref, UICommandBuilder cmd, if (cachedPlayerData != null && cachedPlayerData.getFirstJoined() > 0) { cmd.set("#FirstJoinedValue.Text", TimeUtil.formatDate(cachedPlayerData.getFirstJoined())); } else { - cmd.set("#FirstJoinedValue.Text", "Unknown"); + cmd.set("#FirstJoinedValue.Text", HFMessages.get(viewerRef, MessageKeys.Common.UNKNOWN)); } if (isOnline) { - cmd.set("#LastOnlineValue.Text", "Now"); + cmd.set("#LastOnlineValue.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.NOW)); cmd.set("#LastOnlineValue.Style.TextColor", "#55FF55"); } else if (cachedPlayerData != null && cachedPlayerData.getLastOnline() > 0) { cmd.set("#LastOnlineValue.Text", TimeUtil.formatRelative(cachedPlayerData.getLastOnline())); } else { - cmd.set("#LastOnlineValue.Text", "Unknown"); + cmd.set("#LastOnlineValue.Text", HFMessages.get(viewerRef, MessageKeys.Common.UNKNOWN)); } // === Faction Section === @@ -200,7 +220,7 @@ public void build(Ref ref, UICommandBuilder cmd, List history = new java.util.ArrayList<>(cachedPlayerData.getMembershipHistory()); Collections.reverse(history); - cmd.set("#HistoryCount.Text", history.size() + " records"); + cmd.set("#HistoryCount.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.HISTORY_COUNT, history.size())); cmd.appendInline("#HistoryList", "Group #HistoryCards { LayoutMode: Top; }"); for (int i = 0; i < history.size(); i++) { @@ -210,8 +230,10 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.set(idx + " #HFactionName.Text", rec.factionName()); cmd.set(idx + " #HRole.Text", ConfigManager.get().getRoleDisplayName(rec.highestRole())); - cmd.set(idx + " #HJoined.Text", "Joined: " + TimeUtil.formatDate(rec.joinedAt())); - cmd.set(idx + " #HLeft.Text", rec.isActive() ? "Current" : "Left: " + TimeUtil.formatDate(rec.leftAt())); + cmd.set(idx + " #HJoined.Text", HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.JOINED_LABEL, TimeUtil.formatDate(rec.joinedAt()))); + cmd.set(idx + " #HLeft.Text", rec.isActive() + ? HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.CURRENT) + : HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.LEFT_LABEL, TimeUtil.formatDate(rec.leftAt()))); cmd.set(idx + " #HReason.Text", formatReason(rec.reason())); cmd.set(idx + " #HReason.Style.TextColor", GuiColors.forLeaveReason(rec.reason())); cmd.set(idx + " #RoleBar.Background.Color", GuiColors.forRole(rec.highestRole())); @@ -219,7 +241,7 @@ public void build(Ref ref, UICommandBuilder cmd, } else { cmd.set("#HistoryCount.Text", ""); cmd.appendInline("#HistoryList", - "Label { Text: \"No membership history\"; Style: (FontSize: 11, TextColor: #555555); }"); + "Label { Text: \"" + HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.NO_HISTORY) + "\"; Style: (FontSize: 11, TextColor: #555555); }"); } // Back button @@ -249,7 +271,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.playerUuid != null) { UUID factionId = UuidUtil.parseOrNull(data.playerUuid); if (factionId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction ID.")); + player.sendMessage(MessageUtil.error(viewerRef, MessageKeys.Common.INVALID_ID)); return; } @@ -258,7 +280,7 @@ public void handleDataEvent(Ref ref, Store store, guiManager.openFactionInfoFromPlayerInfo(player, ref, store, playerRef, faction, targetPlayerUuid, targetPlayerName, sourcePage); } else { - player.sendMessage(MessageUtil.errorText("Faction no longer exists.")); + player.sendMessage(MessageUtil.error(viewerRef, MessageKeys.PlayerInfoGui.FACTION_GONE)); } } } @@ -300,10 +322,10 @@ private void loadPlayerDataSync() { private String formatReason(MembershipRecord.LeaveReason reason) { return switch (reason) { - case ACTIVE -> "ACTIVE"; - case LEFT -> "LEFT"; - case KICKED -> "KICKED"; - case DISBANDED -> "DISBANDED"; + case ACTIVE -> HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.REASON_ACTIVE); + case LEFT -> HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.REASON_LEFT); + case KICKED -> HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.REASON_KICKED); + case DISBANDED -> HFMessages.get(viewerRef, MessageKeys.PlayerInfoGui.REASON_DISBANDED); }; } } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/SetRelationModalPage.java b/src/main/java/com/hyperfactions/gui/faction/page/SetRelationModalPage.java index 747fa9f4..c7fe9f92 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/SetRelationModalPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/SetRelationModalPage.java @@ -9,13 +9,14 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.manager.RelationManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.builder.EventData; @@ -124,11 +125,11 @@ private void buildResultsContent(UICommandBuilder cmd, UIEventBuilder events) { if (results.isEmpty()) { // Show empty state if (searchQuery.isEmpty()) { - cmd.set("#EmptyText.Text", "Search for a faction to set relation"); + cmd.set("#EmptyText.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.SEARCH_HINT)); } else { - cmd.set("#EmptyText.Text", "No factions found matching '" + searchQuery + "'"); + cmd.set("#EmptyText.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.NO_RESULTS, searchQuery)); } - cmd.set("#PageInfo.Text", "0/0"); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, 0, 0)); } else { // Hide empty state by setting text to empty cmd.set("#EmptyText.Text", ""); @@ -142,7 +143,7 @@ private void buildResultsContent(UICommandBuilder cmd, UIEventBuilder events) { buildFactionCards(cmd, events, results, startIdx); // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -186,7 +187,7 @@ private List getSearchResults() { PowerManager.FactionPowerStats stats = powerManager.getFactionPowerStats(f.id()); FactionMember leader = f.getLeader(); - String leaderName = leader != null ? leader.username() : "Unknown"; + String leaderName = leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.UNKNOWN); entries.add(new FactionEntry( f.id(), @@ -217,9 +218,9 @@ private void buildFactionCards(UICommandBuilder cmd, UIEventBuilder events, // Faction info cmd.set(prefix + "#FactionName.Text", entry.name); - cmd.set(prefix + "#LeaderName.Text", "Leader: " + entry.leaderName); - cmd.set(prefix + "#PowerCount.Text", String.format("%.0f power", entry.power)); - cmd.set(prefix + "#MemberCount.Text", entry.memberCount + " members"); + cmd.set(prefix + "#LeaderName.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.LEADER_LABEL, entry.leaderName)); + cmd.set(prefix + "#PowerCount.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.POWER_DISPLAY, String.format("%.0f", entry.power))); + cmd.set(prefix + "#MemberCount.Text", HFMessages.get(playerRef, MessageKeys.RelationsGui.MEMBER_COUNT_DISPLAY, entry.memberCount)); // Ally button events.addEventBinding( @@ -294,7 +295,7 @@ public void handleDataEvent(Ref ref, Store store, case "RequestAlly" -> { if (!canManage) { - player.sendMessage(MessageUtil.errorText("You don't have permission to manage relations.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.SettingsGui.NO_PERMISSION)); sendUpdate(); return; } @@ -302,7 +303,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID targetId = UuidUtil.parseOrNull(data.factionId); if (targetId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.BrowserGui.INVALID_FACTION)); sendUpdate(); return; } @@ -310,17 +311,17 @@ public void handleDataEvent(Ref ref, Store store, RelationManager.RelationResult result = relationManager.requestAlly(uuid, targetId); if (result == RelationManager.RelationResult.REQUEST_SENT) { - player.sendMessage(Message.raw("Alliance request sent to " + data.factionName + ".").color("#00AAFF")); + player.sendMessage(MessageUtil.info(playerRef, MessageKeys.RelationsGui.REQUEST_SENT, "#00AAFF", data.factionName)); // Navigate to pending tab since a request was sent guiManager.openFactionRelations(player, ref, store, playerRef, factionManager.getFaction(faction.id()), "pending"); } else if (result == RelationManager.RelationResult.REQUEST_ACCEPTED) { - player.sendMessage(Message.raw("Now allied with " + data.factionName + "!").color("#00AAFF")); + player.sendMessage(MessageUtil.info(playerRef, MessageKeys.RelationsGui.NOW_ALLIED, "#00AAFF", data.factionName)); // Navigate to relations tab since alliance is now active guiManager.openFactionRelations(player, ref, store, playerRef, factionManager.getFaction(faction.id()), "relations"); } else { - player.sendMessage(Message.raw("Failed: " + result).color("#FF5555")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RelationsGui.FAILED, result)); guiManager.openFactionRelations(player, ref, store, playerRef, factionManager.getFaction(faction.id())); } @@ -329,7 +330,7 @@ public void handleDataEvent(Ref ref, Store store, case "SetEnemy" -> { if (!canManage) { - player.sendMessage(MessageUtil.errorText("You don't have permission to manage relations.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.SettingsGui.NO_PERMISSION)); sendUpdate(); return; } @@ -337,7 +338,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID targetId = UuidUtil.parseOrNull(data.factionId); if (targetId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.BrowserGui.INVALID_FACTION)); sendUpdate(); return; } @@ -345,9 +346,9 @@ public void handleDataEvent(Ref ref, Store store, RelationManager.RelationResult result = relationManager.setEnemy(uuid, targetId); if (result == RelationManager.RelationResult.SUCCESS) { - player.sendMessage(Message.raw("Now enemies with " + data.factionName + "!").color("#FF5555")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RelationsGui.NOW_ENEMIES, data.factionName)); } else { - player.sendMessage(Message.raw("Failed: " + result).color("#FF5555")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RelationsGui.FAILED, result)); } guiManager.openFactionRelations(player, ref, store, playerRef, @@ -359,7 +360,7 @@ public void handleDataEvent(Ref ref, Store store, if (data.factionId != null) { UUID targetId = UuidUtil.parseOrNull(data.factionId); if (targetId == null) { - player.sendMessage(MessageUtil.errorText("Invalid faction.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.BrowserGui.INVALID_FACTION)); sendUpdate(); return; } @@ -369,7 +370,7 @@ public void handleDataEvent(Ref ref, Store store, if (targetFaction != null) { guiManager.openFactionInfo(player, ref, store, playerRef, targetFaction, "relations"); } else { - player.sendMessage(MessageUtil.errorText("Faction no longer exists.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.PlayerInfoGui.FACTION_GONE)); sendUpdate(); } } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/TransferConfirmPage.java b/src/main/java/com/hyperfactions/gui/faction/page/TransferConfirmPage.java index 21b91026..778d1921 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/TransferConfirmPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/TransferConfirmPage.java @@ -8,11 +8,12 @@ import com.hyperfactions.gui.faction.data.TransferConfirmData; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.builder.EventData; @@ -64,6 +65,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the transfer confirmation template cmd.append(UIPaths.TRANSFER_CONFIRM); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.TRANSFER_TITLE)); + cmd.set("#ConfirmText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.TRANSFER_PROMPT)); + cmd.set("#WarningText.Text", HFMessages.get(playerRef, MessageKeys.ConfirmGui.TRANSFER_WARNING)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#ConfirmBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.TRANSFER)); + // Set dynamic values cmd.set("#TargetName.Text", targetName); @@ -102,7 +110,7 @@ public void handleDataEvent(Ref ref, Store store, // Re-fetch faction to ensure fresh state Faction currentFaction = factionManager.getFaction(faction.id()); if (currentFaction == null) { - player.sendMessage(MessageUtil.errorText("Faction no longer exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.FACTION_GONE)); guiManager.openFactionMain(player, ref, store, playerRef); return; } @@ -111,7 +119,7 @@ public void handleDataEvent(Ref ref, Store store, // Verify leader permission if (member == null || member.role() != FactionRole.LEADER) { - player.sendMessage(MessageUtil.errorText("Only the leader can transfer leadership.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.NOT_LEADER_TRANSFER)); guiManager.openFactionMembers(player, ref, store, playerRef, currentFaction); return; } @@ -128,11 +136,7 @@ public void handleDataEvent(Ref ref, Store store, faction.id(), targetUuid, uuid); if (result == FactionManager.FactionResult.SUCCESS) { - player.sendMessage( - Message.raw("Leadership transferred to ").color("#55FF55") - .insert(Message.raw(targetName).color("#00FFFF")) - .insert(Message.raw(".").color("#55FF55")) - ); + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.ConfirmGui.LEADERSHIP_TRANSFERRED, targetName)); // Refresh to show updated roles Faction refreshedFaction = factionManager.getFaction(faction.id()); if (refreshedFaction != null) { @@ -141,7 +145,7 @@ public void handleDataEvent(Ref ref, Store store, guiManager.openFactionMain(player, ref, store, playerRef); } } else { - player.sendMessage(Message.raw("Failed to transfer leadership: " + result).color("#FF5555")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.ConfirmGui.TRANSFER_FAILED, result)); guiManager.openFactionMembers(player, ref, store, playerRef, currentFaction); } } diff --git a/src/main/java/com/hyperfactions/gui/faction/page/TreasuryDepositModalPage.java b/src/main/java/com/hyperfactions/gui/faction/page/TreasuryDepositModalPage.java index 0e8b860d..a617809d 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/TreasuryDepositModalPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/TreasuryDepositModalPage.java @@ -16,6 +16,8 @@ import com.hyperfactions.integration.economy.VaultEconomyProvider; import com.hyperfactions.manager.EconomyManager; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.UiUtil; import com.hypixel.hytale.component.Ref; @@ -81,23 +83,29 @@ public void build(Ref ref, UICommandBuilder cmd, UUID uuid = playerRef.getUuid(); // Set mode subtitle - cmd.set("#ModeLabel.Text", isDeposit ? "Deposit to Treasury" : "Withdraw from Treasury"); + cmd.set("#ModeLabel.Text", isDeposit + ? HFMessages.get(playerRef, MessageKeys.TreasuryGui.DEPOSIT_TITLE) + : HFMessages.get(playerRef, MessageKeys.TreasuryGui.WITHDRAW_TITLE)); // Set balances VaultEconomyProvider vault = economyManager.getVaultProvider(); - cmd.set("#WalletLabel.Text", "Your wallet: " + economyManager.formatCurrency(vault.getBalanceBigDecimal(uuid))); + cmd.set("#WalletLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.WALLET_LABEL, + economyManager.formatCurrency(vault.getBalanceBigDecimal(uuid)))); FactionEconomy economy = economyManager.getEconomy(faction.id()); BigDecimal treasuryBalance = economy != null ? economy.balance() : BigDecimal.ZERO; - cmd.set("#TreasuryLabel.Text", "Treasury balance: " + economyManager.formatCurrency(treasuryBalance)); + cmd.set("#TreasuryLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.TREASURY_LABEL, + economyManager.formatCurrency(treasuryBalance))); // Fee label EconomyAPI.TransactionType txType = isDeposit ? EconomyAPI.TransactionType.DEPOSIT : EconomyAPI.TransactionType.WITHDRAW; BigDecimal feePercent = isDeposit ? ConfigManager.get().getDepositFeePercent() : ConfigManager.get().getWithdrawFeePercent(); - cmd.set("#FeeLabel.Text", "Fee (" + feePercent.toPlainString() + "%):"); + cmd.set("#FeeLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.FEE_LABEL, feePercent.toPlainString())); // Confirm button text - cmd.set("#ConfirmBtn.Text", isDeposit ? "Confirm Deposit" : "Confirm Withdrawal"); + cmd.set("#ConfirmBtn.Text", isDeposit + ? HFMessages.get(playerRef, MessageKeys.TreasuryGui.CONFIRM_DEPOSIT) + : HFMessages.get(playerRef, MessageKeys.TreasuryGui.CONFIRM_WITHDRAWAL)); // Check withdraw permission if (!isDeposit) { @@ -177,10 +185,12 @@ private void handlePreview(DepositModalData data) { cmd.set("#FeeAmount.Text", economyManager.formatCurrency(amount)); cmd.set("#FeeValue.Text", fee.compareTo(BigDecimal.ZERO) > 0 ? "-" + economyManager.formatCurrency(fee) : economyManager.formatCurrency(BigDecimal.ZERO)); if (isDeposit) { - cmd.set("#FeeTotal.Text", economyManager.formatCurrency(total) + " from wallet"); + cmd.set("#FeeTotal.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.FROM_WALLET, + economyManager.formatCurrency(total))); } else { BigDecimal net = amount.subtract(fee); - cmd.set("#FeeTotal.Text", economyManager.formatCurrency(net) + " to wallet"); + cmd.set("#FeeTotal.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.TO_WALLET, + economyManager.formatCurrency(net))); } } @@ -200,7 +210,7 @@ private void handleConfirm(Player player, Ref ref, Store ref, Store ref, Store 0) { - msg += " (fee: " + economyManager.formatCurrency(fee) + ")"; + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.TreasuryGui.DEPOSITED_FEE, + economyManager.formatCurrency(amount), economyManager.formatCurrency(fee))); + } else { + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.TreasuryGui.DEPOSITED, + economyManager.formatCurrency(amount))); } - player.sendMessage(MessageUtil.successText(msg)); Faction fresh = factionManager.getFaction(faction.id()); if (fresh != null) { @@ -261,7 +273,7 @@ private void handleWithdrawConfirm(Player player, Ref ref, Store ref, Store ref, Store - player.sendMessage(MessageUtil.errorText("Insufficient funds in treasury.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.TreasuryGui.INSUFFICIENT_TREASURY)); case LIMIT_EXCEEDED -> - player.sendMessage(MessageUtil.errorText("Withdrawal limit exceeded.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.TreasuryGui.WITHDRAW_LIMIT)); default -> - player.sendMessage(MessageUtil.errorText("Withdrawal failed: " + result)); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.TreasuryGui.WITHDRAW_FAILED, result)); } sendUpdate(); return; @@ -293,18 +305,19 @@ private void handleWithdrawConfirm(Player player, Ref ref, Store 0) { - msg += " (fee: " + economyManager.formatCurrency(fee) + ", received: " - + economyManager.formatCurrency(netToWallet) + ")"; + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.TreasuryGui.WITHDREW_FEE, + economyManager.formatCurrency(amount), economyManager.formatCurrency(fee), + economyManager.formatCurrency(netToWallet))); + } else { + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.TreasuryGui.WITHDREW, + economyManager.formatCurrency(amount))); } - player.sendMessage(MessageUtil.successText(msg)); Faction fresh = factionManager.getFaction(faction.id()); if (fresh != null) { diff --git a/src/main/java/com/hyperfactions/gui/faction/page/TreasuryPage.java b/src/main/java/com/hyperfactions/gui/faction/page/TreasuryPage.java index 66844e78..e99d095b 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/TreasuryPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/TreasuryPage.java @@ -16,6 +16,8 @@ import com.hyperfactions.gui.faction.data.TreasuryData; import com.hyperfactions.manager.EconomyManager; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.UiUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -84,6 +86,32 @@ public void build(Ref ref, UICommandBuilder cmd, UIEventBuilder events, Store store) { cmd.append(UIPaths.FACTION_TREASURY); + + // Localize static labels + cmd.set("#TreasuryTitle.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.TITLE)); + cmd.set("#BalanceLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.BALANCE_LABEL)); + cmd.set("#IncomeLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.INCOME_24H)); + cmd.set("#IncomeDescLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.DEPOSITS_TRANSFERS_IN)); + cmd.set("#ExpensesLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.EXPENSES_24H)); + cmd.set("#ExpensesDescLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.WITHDRAWALS_TRANSFERS_OUT)); + cmd.set("#MaintenanceLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.MAINTENANCE)); + cmd.set("#RunwayLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.RUNWAY_LABEL)); + cmd.set("#AddFundsLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.ADD_FUNDS)); + cmd.set("#DepositBtn.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.DEPOSIT_BTN)); + cmd.set("#TakeFundsLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.TAKE_FUNDS)); + cmd.set("#WithdrawBtn.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.WITHDRAW_BTN)); + cmd.set("#SendToFactionLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.SEND_TO_FACTION)); + cmd.set("#TransferBtn.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.TRANSFER_BTN)); + cmd.set("#TreasuryConfigLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.TREASURY_CONFIG)); + cmd.set("#SettingsBtn.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.SETTINGS_BTN)); + cmd.set("#RecentTransactionsLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.RECENT_TRANSACTIONS)); + cmd.set("#ColDateLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.COL_DATE)); + cmd.set("#ColTypeLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.COL_TYPE)); + cmd.set("#ColByLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.COL_BY)); + cmd.set("#ColAmountLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.COL_AMOUNT)); + cmd.set("#ColDetailsLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.COL_DETAILS)); + cmd.set("#PayNowBtn.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.PAY_NOW_BTN)); + NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); UUID uuid = playerRef.getUuid(); @@ -114,7 +142,8 @@ private void buildStatCards(UICommandBuilder cmd, FactionEconomy economy, UUID u // Wallet balance BigDecimal walletBalance = economyManager.getVaultProvider().getBalanceBigDecimal(uuid); - cmd.set("#WalletBalance.Text", "Your wallet: " + economyManager.formatCurrencyCompact(walletBalance)); + cmd.set("#WalletBalance.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.WALLET_LABEL, + economyManager.formatCurrencyCompact(walletBalance))); // 24h P&L PnlResult pnl = calculatePnl(economy); @@ -160,11 +189,10 @@ private void buildUpkeepSection(UICommandBuilder cmd, UIEventBuilder events, } // Show chunk breakdown - String chunkDetail = freeChunks > 0 - ? String.format("%d free + %d billable chunks", Math.min(freeChunks, claimCount), billableChunks) - : billableChunks + " billable chunks"; - cmd.set("#UpkeepCost.Text", "Cost: " + economyManager.formatCurrency(costPerCycle) - + " every " + intervalHours + "h"); + String chunkDetail = HFMessages.get(playerRef, MessageKeys.TreasuryGui.CHUNKS_DETAIL, + Math.min(freeChunks, claimCount), billableChunks); + String costString = HFMessages.get(playerRef, MessageKeys.TreasuryGui.UPKEEP_COST_FORMAT, economyManager.formatCurrency(costPerCycle), intervalHours); + cmd.set("#UpkeepCost.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.COST_LABEL, costString)); cmd.set("#UpkeepDetail.Text", chunkDetail); // Color-code the progress bar based on status @@ -180,10 +208,14 @@ private void buildUpkeepSection(UICommandBuilder cmd, UIEventBuilder events, } cmd.set("#UpkeepBar.Value", progress); cmd.set("#UpkeepBar.Bar.Color", barColor); - cmd.set("#UpkeepTimer.Text", remaining < 0 ? "Pending" : formatDuration(remaining) + " left"); + cmd.set("#UpkeepTimer.Text", remaining < 0 + ? HFMessages.get(playerRef, MessageKeys.TreasuryGui.PENDING) + : HFMessages.get(playerRef, MessageKeys.TreasuryGui.UPKEEP_TIME_LEFT, formatDuration(remaining))); boolean autoPay = economy != null && economy.upkeepAutoPay(); - cmd.set("#AutoPayStatus.Text", "Auto-pay: " + (autoPay ? "ON" : "OFF")); + cmd.set("#AutoPayStatus.Text", autoPay + ? HFMessages.get(playerRef, MessageKeys.TreasuryGui.AUTO_PAY_ON) + : HFMessages.get(playerRef, MessageKeys.TreasuryGui.AUTO_PAY_OFF)); cmd.set("#AutoPayStatus.Style.TextColor", autoPay ? "#55FF55" : "#FF5555"); // Cost projections row @@ -206,19 +238,23 @@ private void buildUpkeepSection(UICommandBuilder cmd, UIEventBuilder events, String runwayText; String runwayColor; if (runwayDays > 90) { - runwayText = "90+ days"; + runwayText = HFMessages.get(playerRef, MessageKeys.TreasuryGui.RUNWAY_90_PLUS); runwayColor = "#55FF55"; } else if (runwayDays > 0) { - runwayText = runwayDays + " day" + (runwayDays != 1 ? "s" : ""); + runwayText = runwayDays != 1 + ? HFMessages.get(playerRef, MessageKeys.TreasuryGui.RUNWAY_DAYS, runwayDays) + : HFMessages.get(playerRef, MessageKeys.TreasuryGui.RUNWAY_DAY, runwayDays); runwayColor = runwayDays <= 3 ? "#FF5555" : runwayDays <= 7 ? "#FFAA00" : "#55FF55"; } else { - runwayText = "< 1 day"; + runwayText = HFMessages.get(playerRef, MessageKeys.TreasuryGui.RUNWAY_LESS_THAN_DAY); runwayColor = "#FF5555"; } cmd.set("#RunwayValue.Text", runwayText); cmd.set("#RunwayValue.Style.TextColor", runwayColor); } else { - cmd.set("#RunwayValue.Text", balance.compareTo(BigDecimal.ZERO) == 0 ? "No funds" : "N/A"); + cmd.set("#RunwayValue.Text", balance.compareTo(BigDecimal.ZERO) == 0 + ? HFMessages.get(playerRef, MessageKeys.TreasuryGui.RUNWAY_NO_FUNDS) + : HFMessages.get(playerRef, MessageKeys.Common.NA)); cmd.set("#RunwayValue.Style.TextColor", "#FF5555"); } } @@ -229,13 +265,16 @@ private void buildUpkeepSection(UICommandBuilder cmd, UIEventBuilder events, long graceMs = config.getUpkeepGracePeriodHours() * 3600_000L; long graceElapsed = System.currentTimeMillis() - economy.upkeepGraceStartTimestamp(); long graceRemaining = Math.max(0, graceMs - graceElapsed); - cmd.set("#GraceTimer.Text", "Grace expires in: " + formatDuration(graceRemaining)); - cmd.set("#MissedCount.Text", "Missed payments: " + economy.consecutiveMissedPayments()); + cmd.set("#GraceTimer.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.GRACE_EXPIRES, + formatDuration(graceRemaining))); + cmd.set("#MissedCount.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.MISSED_PAYMENTS, + economy.consecutiveMissedPayments())); // Show Pay Now button if faction can afford the upkeep cost if (canAfford && billableChunks > 0) { cmd.set("#PayNowRow.Visible", true); - cmd.set("#PayNowCost.Text", "Pay " + economyManager.formatCurrency(costPerCycle) + " to clear grace"); + cmd.set("#PayNowCost.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.PAY_TO_CLEAR, + economyManager.formatCurrency(costPerCycle))); events.addEventBinding(CustomUIEventBindingType.Activating, "#PayNowBtn", EventData.of("Button", "PayNow"), false); } @@ -308,10 +347,10 @@ private void buildTransactionLog(UICommandBuilder cmd, FactionEconomy economy) { cmd.appendInline("#TransactionList", "Group { LayoutMode: Left; Anchor: (Height: 22); Background: (Color: " + bgColor + "); Padding: (Left: 6, Right: 6); " - + "Label { Text: \"" + time + "\"; Style: (FontSize: 10, TextColor: #666666); Anchor: (Width: 100); } " - + "Label { Text: \"" + typeName + "\"; Style: (FontSize: 10, TextColor: " + typeColor + "); Anchor: (Width: 100); } " - + "Label { Text: \"" + actorName + "\"; Style: (FontSize: 10, TextColor: #AAAAAA); Anchor: (Width: 90); } " - + "Label { Text: \"" + amountStr + "\"; Style: (FontSize: 10, TextColor: #FFFFFF); Anchor: (Width: 100); } " + + "Label { Text: \"" + time + "\"; Style: (FontSize: 10, TextColor: #666666); Anchor: (Width: 80); } " + + "Label { Text: \"" + typeName + "\"; Style: (FontSize: 10, TextColor: " + typeColor + "); Anchor: (Width: 155); } " + + "Label { Text: \"" + actorName + "\"; Style: (FontSize: 10, TextColor: #AAAAAA); Anchor: (Width: 75); } " + + "Label { Text: \"" + amountStr + "\"; Style: (FontSize: 10, TextColor: #FFFFFF); Anchor: (Width: 80); } " + "Label { Text: \"" + desc + "\"; Style: (FontSize: 10, TextColor: #555555); FlexWeight: 1; } " + "}"); } @@ -417,7 +456,8 @@ private void handlePayNow(Player player, Ref ref, Faction logged = factionNow.withLog(FactionLog.create(FactionLog.LogType.ECONOMY, String.format("Upkeep paid manually: %s (%d billable chunks, grace cleared)", economyManager.formatCurrency(cost), billableChunks), - playerRef.getUuid())); + playerRef.getUuid(), + MessageKeys.LogsGui.MSG_UPKEEP_MANUAL, economyManager.formatCurrency(cost), String.valueOf(billableChunks))); factionManager.updateFaction(logged); } } @@ -477,19 +517,19 @@ private static String formatDuration(long millis) { return minutes + "m"; } - private static String getHumanTypeName(EconomyAPI.TransactionType type) { + private String getHumanTypeName(EconomyAPI.TransactionType type) { return switch (type) { - case DEPOSIT -> "Deposit"; - case WITHDRAW -> "Withdrawal"; - case TRANSFER_IN -> "Transfer In"; - case TRANSFER_OUT -> "Transfer Out"; - case PLAYER_TRANSFER_OUT -> "Player Transfer"; - case UPKEEP -> "Upkeep"; - case TAX_COLLECTION -> "Tax Collection"; - case WAR_COST -> "War Cost"; - case RAID_COST -> "Raid Cost"; - case SPOILS -> "Spoils"; - case ADMIN_ADJUSTMENT -> "Admin Adjustment"; + case DEPOSIT -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_DEPOSIT); + case WITHDRAW -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_WITHDRAWAL); + case TRANSFER_IN -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_TRANSFER_IN); + case TRANSFER_OUT -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_TRANSFER_OUT); + case PLAYER_TRANSFER_OUT -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_PLAYER_TRANSFER); + case UPKEEP -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_UPKEEP); + case TAX_COLLECTION -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_TAX); + case WAR_COST -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_WAR_COST); + case RAID_COST -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_RAID_COST); + case SPOILS -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_SPOILS); + case ADMIN_ADJUSTMENT -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.TYPE_ADMIN); }; } @@ -511,7 +551,7 @@ private static String getTypeSign(EconomyAPI.TransactionType type) { private String resolveActorName(UUID actorId) { if (actorId == null) { - return "System"; + return HFMessages.get(playerRef, MessageKeys.TreasuryGui.SYSTEM); } FactionMember member = faction.getMember(actorId); if (member != null) { diff --git a/src/main/java/com/hyperfactions/gui/faction/page/TreasurySettingsPage.java b/src/main/java/com/hyperfactions/gui/faction/page/TreasurySettingsPage.java index 7264dd94..006853f1 100644 --- a/src/main/java/com/hyperfactions/gui/faction/page/TreasurySettingsPage.java +++ b/src/main/java/com/hyperfactions/gui/faction/page/TreasurySettingsPage.java @@ -12,6 +12,9 @@ import com.hyperfactions.gui.faction.data.TreasurySettingsData; import com.hyperfactions.manager.EconomyManager; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -64,6 +67,19 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.append(UIPaths.TREASURY_SETTINGS); + // Localize static labels + cmd.set("#TreasurySettingsTitle.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.SETTINGS_TITLE)); + cmd.set("#OfficerPermissionsHeader.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.OFFICER_PERMISSIONS)); + cmd.set("#LimitsHeader.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.LIMITS_SECTION)); + cmd.set("#MaxWithdrawLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.MAX_PER_WITHDRAWAL)); + cmd.set("#MaxWithdrawPeriodLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.MAX_WITHDRAWALS_PER)); + cmd.set("#MaxTransferLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.MAX_PER_TRANSFER)); + cmd.set("#MaxTransferPeriodLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.MAX_TRANSFERS_PER)); + cmd.set("#PeriodHoursLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.LIMIT_PERIOD)); + cmd.set("#NoLimitHintLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.NO_LIMIT_HINT)); + cmd.set("#UpkeepSettingsHeader.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.UPKEEP_SETTINGS)); + cmd.set("#BackBtn.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.BACK_BTN)); + FactionPermissions perms = faction.getEffectivePermissions(); FactionEconomy economy = economyManager.getEconomy(faction.id()); @@ -150,7 +166,7 @@ private void handleTogglePerm(Player player, Ref ref, Store ref, Store ref, UICommandBuilder cmd, // Target info cmd.set("#TargetName.Text", targetName); - String typeTag = "player".equals(targetType) ? "[Player]" : "[Faction]"; + String typeTag = "player".equals(targetType) + ? HFMessages.get(playerRef, MessageKeys.TreasuryGui.TAG_PLAYER) + : HFMessages.get(playerRef, MessageKeys.TreasuryGui.TAG_FACTION); cmd.set("#TargetType.Text", typeTag); // Set tag color dynamically (Labels support .Style.TextColor) if ("faction".equals(targetType)) { @@ -93,11 +97,11 @@ public void build(Ref ref, UICommandBuilder cmd, // Treasury balance FactionEconomy economy = economyManager.getEconomy(faction.id()); BigDecimal treasuryBalance = economy != null ? economy.balance() : BigDecimal.ZERO; - cmd.set("#TreasuryLabel.Text", "Treasury: " + economyManager.formatCurrency(treasuryBalance)); + cmd.set("#TreasuryLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.TREASURY_LABEL, economyManager.formatCurrency(treasuryBalance))); // Fee label BigDecimal feePercent = ConfigManager.get().getTransferFeePercent(); - cmd.set("#FeeLabel.Text", "Fee (" + feePercent.toPlainString() + "%):"); + cmd.set("#FeeLabel.Text", HFMessages.get(playerRef, MessageKeys.TreasuryGui.FEE_LABEL, feePercent.toPlainString())); // Event bindings events.addEventBinding(CustomUIEventBindingType.Activating, "#CancelBtn", @@ -168,14 +172,14 @@ private void handleConfirm(Player player, Ref ref, Store ref, Store ref, Store ref, Store ref, Store ref, Store ref, Store ref, Store 0) { events.addEventBinding(CustomUIEventBindingType.Activating, "#PrevBtn", @@ -163,9 +167,11 @@ private List getSearchResults() { List players = PlayerResolver.search(plugin, searchQuery, selfUuid); for (PlayerResolver.ResolvedPlayer p : players) { String subtitle = switch (p.source()) { - case ONLINE -> "Online" + (p.factionName() != null ? " - " + p.factionName() : ""); - case FACTION_MEMBER -> "Offline - " + p.factionName(); - case PLAYER_DB -> "Hytale player"; + case ONLINE -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.SOURCE_ONLINE) + + (p.factionName() != null ? " - " + p.factionName() : ""); + case FACTION_MEMBER -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.SOURCE_OFFLINE) + + " - " + p.factionName(); + case PLAYER_DB -> HFMessages.get(playerRef, MessageKeys.TreasuryGui.SOURCE_PLAYER_DB); }; results.add(new SearchResult(p.uuid().toString(), p.username(), "player", subtitle)); } diff --git a/src/main/java/com/hyperfactions/gui/help/HelpCategory.java b/src/main/java/com/hyperfactions/gui/help/HelpCategory.java index d8458761..db24bf27 100644 --- a/src/main/java/com/hyperfactions/gui/help/HelpCategory.java +++ b/src/main/java/com/hyperfactions/gui/help/HelpCategory.java @@ -1,5 +1,7 @@ package com.hyperfactions.gui.help; +import com.hyperfactions.util.HFMessages; +import com.hypixel.hytale.server.core.universe.PlayerRef; import org.jetbrains.annotations.NotNull; /** @@ -7,26 +9,36 @@ * Each category represents a conceptual area with an accent color for UI rendering. */ public enum HelpCategory { - WELCOME("welcome", "Welcome", "#00FFFF", 0), - YOUR_FACTION("your_faction", "Your Faction", "#44CC44", 1), - POWER_AND_LAND("power_land", "Power & Land", "#FFD700", 2), - DIPLOMACY("diplomacy", "Diplomacy", "#55AAFF", 3), - COMBAT("combat", "Combat & Safety", "#FF5555", 4), - ECONOMY("economy", "Economy", "#FFAA00", 5), - QUICK_REFERENCE("quick_ref", "Quick Reference", "#888888", 6); + WELCOME("welcome", "hyperfactions_gui.help.category.welcome", "#00FFFF", 0), + YOUR_FACTION("your_faction", "hyperfactions_gui.help.category.your_faction", "#44CC44", 1), + POWER_AND_LAND("power_land", "hyperfactions_gui.help.category.power_land", "#FFD700", 2), + DIPLOMACY("diplomacy", "hyperfactions_gui.help.category.diplomacy", "#55AAFF", 3), + COMBAT("combat", "hyperfactions_gui.help.category.combat", "#FF5555", 4), + ECONOMY("economy", "hyperfactions_gui.help.category.economy", "#FFAA00", 5), + QUICK_REFERENCE("quick_ref", "hyperfactions_gui.help.category.quick_ref", "#888888", 6), + + // Admin categories (order 100+, filtered from player help) + ADMIN_OVERVIEW("admin_overview", "hyperfactions_gui.help.category.admin_overview", "#00FFFF", 100), + ADMIN_FACTIONS("admin_factions", "hyperfactions_gui.help.category.admin_factions", "#44CC44", 101), + ADMIN_ZONES("admin_zones", "hyperfactions_gui.help.category.admin_zones", "#FFAA00", 102), + ADMIN_POWER("admin_power", "hyperfactions_gui.help.category.admin_power", "#FFD700", 103), + ADMIN_ECONOMY("admin_economy", "hyperfactions_gui.help.category.admin_economy", "#55FF55", 104), + ADMIN_CONFIG("admin_config", "hyperfactions_gui.help.category.admin_config", "#55AAFF", 105), + ADMIN_MAINTENANCE("admin_maintenance", "hyperfactions_gui.help.category.admin_maintenance", "#FF5555", 106), + ADMIN_REFERENCE("admin_reference", "hyperfactions_gui.help.category.admin_reference", "#888888", 107); private final String id; - private final String displayName; + private final String displayNameKey; private final String color; private final int order; - HelpCategory(@NotNull String id, @NotNull String displayName, + HelpCategory(@NotNull String id, @NotNull String displayNameKey, @NotNull String color, int order) { this.id = id; - this.displayName = displayName; + this.displayNameKey = displayNameKey; this.color = color; this.order = order; } @@ -40,11 +52,19 @@ public String id() { } /** - * Gets the display name shown in the UI. + * Gets the display name shown in the UI, resolved via i18n (default locale). */ @NotNull public String displayName() { - return displayName; + return HFMessages.get((PlayerRef) null, displayNameKey); + } + + /** + * Gets the display name shown in the UI, resolved via i18n for a specific player. + */ + @NotNull + public String displayName(PlayerRef playerRef) { + return HFMessages.get(playerRef, displayNameKey); } /** @@ -62,6 +82,13 @@ public int order() { return order; } + /** + * Returns true if this is an admin-only category (order >= 100). + */ + public boolean isAdmin() { + return order >= 100; + } + /** * Finds a category by its ID. * diff --git a/src/main/java/com/hyperfactions/gui/help/HelpEntry.java b/src/main/java/com/hyperfactions/gui/help/HelpEntry.java index 86a215fc..2af582a9 100644 --- a/src/main/java/com/hyperfactions/gui/help/HelpEntry.java +++ b/src/main/java/com/hyperfactions/gui/help/HelpEntry.java @@ -1,6 +1,8 @@ package com.hyperfactions.gui.help; +import com.hypixel.hytale.server.core.universe.PlayerRef; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * A typed content entry within a help topic. @@ -8,9 +10,10 @@ * doesn't rely on fragile string-prefix detection. * * @param type The visual type of this entry - * @param messageKey The HelpMessages key for this entry's text (ignored for SPACER) + * @param messageKey The HelpMessages key for this entry's text (ignored for SPACER/SEPARATOR) + * @param color Optional color override (hex string like "#FF5555"), null for default */ -public record HelpEntry(@NotNull EntryType type, @NotNull String messageKey) { +public record HelpEntry(@NotNull EntryType type, @NotNull String messageKey, @Nullable String color) { /** * Visual types for help content lines. @@ -20,46 +23,117 @@ public enum EntryType { TEXT, /** Command callout (#FFFF55, bold). */ COMMAND, - /** Green tip/advice text (#55FF55). */ - TIP, /** Bold sub-heading within a card (#00AAAA). */ HEADING, /** Visual separator (no text). */ - SPACER + SPACER, + /** Bold text (#CCCCCC, bold). */ + BOLD, + /** Italic text (#CCCCCC, italic). */ + ITALIC, + /** List item with indent (#CCCCCC). */ + LIST, + /** Horizontal rule separator (no text). */ + SEPARATOR, + /** Boxed callout with colored accent bar. */ + CALLOUT, + /** Table header row (bold column labels). Column keys pipe-separated in messageKey. */ + TABLE_HEADER, + /** Table data row. Column keys pipe-separated in messageKey. */ + TABLE_ROW } /** - * Gets the resolved display text for this entry. + * Gets the resolved display text for this entry (server default language). * - * @return The localized text, or empty string for spacers + * @return The localized text, or empty string for spacers/separators/tables */ @NotNull public String text() { - return type == EntryType.SPACER ? "" : HelpMessages.get(messageKey); + return switch (type) { + case SPACER, SEPARATOR, TABLE_HEADER, TABLE_ROW -> ""; + default -> HelpMessages.get(messageKey); + }; + } + + /** + * Gets the resolved display text for a specific player's language. + */ + @NotNull + public String text(@Nullable PlayerRef playerRef) { + return switch (type) { + case SPACER, SEPARATOR, TABLE_HEADER, TABLE_ROW -> ""; + default -> HelpMessages.get(playerRef, messageKey); + }; + } + + /** + * Gets the individual column keys for table entries. + * For non-table entries, returns an empty array. + */ + @NotNull + public String[] columnKeys() { + return type == EntryType.TABLE_HEADER || type == EntryType.TABLE_ROW + ? messageKey.split("\\|") : new String[0]; } /** Creates a TEXT entry. */ public static HelpEntry text(@NotNull String messageKey) { - return new HelpEntry(EntryType.TEXT, messageKey); + return new HelpEntry(EntryType.TEXT, messageKey, null); } /** Creates a COMMAND entry. */ public static HelpEntry command(@NotNull String messageKey) { - return new HelpEntry(EntryType.COMMAND, messageKey); - } - - /** Creates a TIP entry. */ - public static HelpEntry tip(@NotNull String messageKey) { - return new HelpEntry(EntryType.TIP, messageKey); + return new HelpEntry(EntryType.COMMAND, messageKey, null); } /** Creates a HEADING entry. */ public static HelpEntry heading(@NotNull String messageKey) { - return new HelpEntry(EntryType.HEADING, messageKey); + return new HelpEntry(EntryType.HEADING, messageKey, null); } /** Creates a SPACER entry. */ public static HelpEntry spacer() { - return new HelpEntry(EntryType.SPACER, ""); + return new HelpEntry(EntryType.SPACER, "", null); + } + + /** Creates a BOLD entry. */ + public static HelpEntry bold(@NotNull String messageKey) { + return new HelpEntry(EntryType.BOLD, messageKey, null); + } + + /** Creates an ITALIC entry. */ + public static HelpEntry italic(@NotNull String messageKey) { + return new HelpEntry(EntryType.ITALIC, messageKey, null); + } + + /** Creates a LIST entry. */ + public static HelpEntry list(@NotNull String messageKey) { + return new HelpEntry(EntryType.LIST, messageKey, null); + } + + /** Creates a SEPARATOR entry. */ + public static HelpEntry separator() { + return new HelpEntry(EntryType.SEPARATOR, "", null); + } + + /** Creates a CALLOUT entry with a color. */ + public static HelpEntry callout(@NotNull String messageKey, @Nullable String color) { + return new HelpEntry(EntryType.CALLOUT, messageKey, color); + } + + /** Creates a TEXT entry with a custom color. */ + public static HelpEntry colored(@NotNull String messageKey, @NotNull String color) { + return new HelpEntry(EntryType.TEXT, messageKey, color); + } + + /** Creates a TABLE_HEADER entry with pipe-separated column keys. */ + public static HelpEntry tableHeader(@NotNull String columnKeys) { + return new HelpEntry(EntryType.TABLE_HEADER, columnKeys, null); + } + + /** Creates a TABLE_ROW entry with pipe-separated column keys. */ + public static HelpEntry tableRow(@NotNull String columnKeys) { + return new HelpEntry(EntryType.TABLE_ROW, columnKeys, null); } } diff --git a/src/main/java/com/hyperfactions/gui/help/HelpMessages.java b/src/main/java/com/hyperfactions/gui/help/HelpMessages.java index b838025a..f985f5a5 100644 --- a/src/main/java/com/hyperfactions/gui/help/HelpMessages.java +++ b/src/main/java/com/hyperfactions/gui/help/HelpMessages.java @@ -1,510 +1,44 @@ package com.hyperfactions.gui.help; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import com.hyperfactions.util.HFMessages; +import com.hypixel.hytale.server.core.universe.PlayerRef; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Key-based string store for all help content. - * Separates content from rendering code so future locale loading - * only needs to swap this class's backing map. + * Delegates to {@link HFMessages} for i18n resolution via Hytale's I18nModule. * - *

i18n future path: Replace {@link #loadDefaults()} body with a - * JSON/properties file loader keyed by locale. The {@link #get(String)} - * API stays the same.

+ *

Help content keys are prefixed {@code hyperfactions_help.} (auto-prefixed by + * I18nModule from the {@code hyperfactions_help.lang} filename). + * + *

The .lang file is build-generated from markdown sources in {@code src/main/help/}. */ public final class HelpMessages { - private static final Map MESSAGES = new LinkedHashMap<>(); - - static { - loadDefaults(); - } - private HelpMessages() {} /** - * Gets the localized string for a message key. + * Gets the localized string for a help message key. + * Uses server default language. * - * @param key The message key + * @param key The full message key (e.g. "hyperfactions_help.welcome.getting_started.title") * @return The localized string, or the key itself if not found */ @NotNull public static String get(@NotNull String key) { - return MESSAGES.getOrDefault(key, key); + return HFMessages.get((PlayerRef) null, key); } /** - * Collects ordered lines for a topic. - * Looks for keys matching {@code .line.1}, {@code .line.2}, etc. + * Gets the localized string for a help message key, resolved for a specific player's language. * - * @param topicKey The topic key prefix (e.g. "help.welcome.what_are_factions") - * @return Ordered list of line values + * @param player The player (null for server default) + * @param key The full message key + * @return The localized string, or the key itself if not found */ @NotNull - public static List getLines(@NotNull String topicKey) { - List lines = new ArrayList<>(); - for (int i = 1; ; i++) { - String key = topicKey + ".line." + i; - String value = MESSAGES.get(key); - if (value == null) { - break; - } - lines.add(value); - } - return lines; - } - - private static void put(@NotNull String key, @NotNull String value) { - MESSAGES.put(key, value); - } - - private static void loadDefaults() { - // ================================================================= - // Category names - // ================================================================= - put("help.category.welcome", "Welcome"); - put("help.category.your_faction", "Your Faction"); - put("help.category.power_land", "Power & Land"); - put("help.category.diplomacy", "Diplomacy"); - put("help.category.combat", "Combat & Safety"); - put("help.category.economy", "Economy"); - put("help.category.quick_ref", "Quick Reference"); - - // ================================================================= - // WELCOME - // ================================================================= - - // --- What Are Factions? --- - put("help.welcome.what_are_factions.title", "What Are Factions?"); - put("help.welcome.what_are_factions.line.1", - "Factions are player teams that claim territory,"); - put("help.welcome.what_are_factions.line.2", - "build bases, and grow stronger together."); - put("help.welcome.what_are_factions.line.3", - "As a member you get protected land, a faction"); - put("help.welcome.what_are_factions.line.4", - "home, private chat, and diplomatic relations."); - put("help.welcome.what_are_factions.line.5", - "Strength is measured by power. Active members"); - put("help.welcome.what_are_factions.line.6", - "generate power; dying costs it. If power drops"); - put("help.welcome.what_are_factions.line.7", - "below your claim count, enemies can steal land."); - - // --- Getting Started --- - put("help.welcome.getting_started.title", "Getting Started"); - put("help.welcome.getting_started.line.1", - "Ready to dive in? Here's how:"); - put("help.welcome.getting_started.line.2", "/f"); - put("help.welcome.getting_started.line.3", - "Opens the faction menu. Browse factions, create"); - put("help.welcome.getting_started.line.4", - "your own, or check invitations."); - put("help.welcome.getting_started.line.5", - "If invited, check the Invites tab and accept."); - put("help.welcome.getting_started.line.6", - "Otherwise, browse open factions or start fresh."); - put("help.welcome.getting_started.line.7", - "Once in, explore territory and start claiming!"); - - // --- Quick Tips --- - put("help.welcome.quick_tips.title", "Quick Tips"); - put("help.welcome.quick_tips.line.1", "Claiming Land"); - put("help.welcome.quick_tips.line.2", "/f claim"); - put("help.welcome.quick_tips.line.3", - "Protects the chunk you're standing in."); - put("help.welcome.quick_tips.line.4", "Faction Home"); - put("help.welcome.quick_tips.line.5", "/f home"); - put("help.welcome.quick_tips.line.6", - "Teleports to your faction home. Set with /f sethome."); - put("help.welcome.quick_tips.line.7", "Faction Chat"); - put("help.welcome.quick_tips.line.8", "/f c"); - put("help.welcome.quick_tips.line.9", - "Cycles chat mode: Normal > Faction > Ally."); - put("help.welcome.quick_tips.line.10", - "Dying costs power, weakening your territory hold!"); - - // ================================================================= - // YOUR FACTION - // ================================================================= - - // --- Creating a Faction --- - put("help.your_faction.creating.title", "Creating a Faction"); - put("help.your_faction.creating.line.1", - "Starting a faction makes you the Leader with"); - put("help.your_faction.creating.line.2", - "full control over settings, members, and land."); - put("help.your_faction.creating.line.3", "/f create "); - put("help.your_faction.creating.line.4", - "Creates a faction and opens your dashboard."); - put("help.your_faction.creating.line.5", - "Invite friends, claim land, and start building!"); - - // --- Joining a Faction --- - put("help.your_faction.joining.title", "Joining a Faction"); - put("help.your_faction.joining.line.1", - "Three ways to join an existing faction:"); - put("help.your_faction.joining.line.2", "Browse Open Factions"); - put("help.your_faction.joining.line.3", - "Open /f and click Browse. Click Join on any open faction."); - put("help.your_faction.joining.line.4", "Accept an Invitation"); - put("help.your_faction.joining.line.5", - "Check the Invites tab and click Accept."); - put("help.your_faction.joining.line.6", "Request to Join"); - put("help.your_faction.joining.line.7", "/f request "); - put("help.your_faction.joining.line.8", - "Send a request to an invite-only faction."); - - // --- Roles & Ranks --- - put("help.your_faction.roles.title", "Roles & Ranks"); - put("help.your_faction.roles.line.1", - "Three ranks with different capabilities:"); - put("help.your_faction.roles.line.2", "Leader (1 per faction)"); - put("help.your_faction.roles.line.3", - "Full control: disband, transfer ownership,"); - put("help.your_faction.roles.line.4", - "promote/demote, plus all Officer permissions."); - put("help.your_faction.roles.line.5", "Officer"); - put("help.your_faction.roles.line.6", - "Invite/kick, claim/unclaim, set home, relations."); - put("help.your_faction.roles.line.7", "Member"); - put("help.your_faction.roles.line.8", - "Use faction home, chat, build in territory."); - - // --- Managing Members --- - put("help.your_faction.managing.title", "Managing Members"); - put("help.your_faction.managing.line.1", - "Officers and Leaders manage the roster:"); - put("help.your_faction.managing.line.2", "/f invite "); - put("help.your_faction.managing.line.3", - "Sends an invitation. (Officer+)"); - put("help.your_faction.managing.line.4", "/f kick "); - put("help.your_faction.managing.line.5", - "Removes a member. Officers kick Members; Leaders all."); - put("help.your_faction.managing.line.6", "/f promote "); - put("help.your_faction.managing.line.7", - "Promotes a Member to Officer. (Leader only)"); - put("help.your_faction.managing.line.8", "/f demote "); - put("help.your_faction.managing.line.9", - "Demotes an Officer to Member. (Leader only)"); - put("help.your_faction.managing.line.10", "/f transfer "); - put("help.your_faction.managing.line.11", - "Transfers leadership. You become Officer. Cannot undo!"); - - // ================================================================= - // POWER & LAND - // ================================================================= - - // --- Understanding Power --- - put("help.power_land.understanding_power.title", "Understanding Power"); - put("help.power_land.understanding_power.line.1", - "Power lets your faction hold territory. Every"); - put("help.power_land.understanding_power.line.2", - "player has personal power that adds to the total."); - put("help.power_land.understanding_power.line.3", "/f power"); - put("help.power_land.understanding_power.line.4", - "Check your power and your faction's total."); - put("help.power_land.understanding_power.line.5", - "Power regenerates online, decreases on death."); - put("help.power_land.understanding_power.line.6", - "If claims exceed power, you're vulnerable!"); - - // --- Claiming Territory --- - put("help.power_land.claiming.title", "Claiming Territory"); - put("help.power_land.claiming.line.1", - "Claiming a chunk protects it. Only members can"); - put("help.power_land.claiming.line.2", - "build, break, or access containers inside."); - put("help.power_land.claiming.line.3", "/f claim"); - put("help.power_land.claiming.line.4", - "Claims the chunk you're standing in. (Officer+)"); - put("help.power_land.claiming.line.5", "/f unclaim"); - put("help.power_land.claiming.line.6", - "Releases a claim back to wilderness. (Officer+)"); - put("help.power_land.claiming.line.7", - "Each claim costs one power. Don't over-expand!"); - - // --- The Territory Map --- - put("help.power_land.territory_map.title", "The Territory Map"); - put("help.power_land.territory_map.line.1", - "A bird's-eye view of claimed chunks near you."); - put("help.power_land.territory_map.line.2", "/f map"); - put("help.power_land.territory_map.line.3", - "Opens the territory map. Click chunks to claim."); - put("help.power_land.territory_map.line.4", - "Your faction shows in your color. Allies in blue,"); - put("help.power_land.territory_map.line.5", - "enemies in red, neutrals in gray, wilderness dark."); - - // --- Losing Territory --- - put("help.power_land.losing_territory.title", "Losing Territory"); - put("help.power_land.losing_territory.line.1", - "If total power drops below claim count, you're"); - put("help.power_land.losing_territory.line.2", - "raidable. Enemies can overclaim your chunks."); - put("help.power_land.losing_territory.line.3", "/f overclaim"); - put("help.power_land.losing_territory.line.4", - "Takes a chunk from a weakened faction. (Officer+)"); - put("help.power_land.losing_territory.line.5", - "Stay safe: stay active, avoid deaths, don't"); - put("help.power_land.losing_territory.line.6", - "over-expand beyond what your power supports."); - - // ================================================================= - // DIPLOMACY - // ================================================================= - - // --- Faction Relations --- - put("help.diplomacy.relations.title", "Faction Relations"); - put("help.diplomacy.relations.line.1", - "Every faction pair has a diplomatic relation:"); - put("help.diplomacy.relations.line.2", - "Ally \u2014 No friendly fire, protected from each"); - put("help.diplomacy.relations.line.3", - "other's claims. Requires mutual agreement."); - put("help.diplomacy.relations.line.4", - "Enemy \u2014 PvP enabled in each other's territory."); - put("help.diplomacy.relations.line.5", - "Overclaiming possible if target is weakened."); - put("help.diplomacy.relations.line.6", - "Neutral \u2014 Default state. Standard rules apply."); - put("help.diplomacy.relations.line.7", "/f relations"); - put("help.diplomacy.relations.line.8", - "View all alliances, enemies, and pending requests."); - - // --- Forming Alliances --- - put("help.diplomacy.alliances.title", "Forming Alliances"); - put("help.diplomacy.alliances.line.1", - "Alliances protect both factions from friendly"); - put("help.diplomacy.alliances.line.2", - "fire and territorial disputes."); - put("help.diplomacy.alliances.line.3", "/f ally "); - put("help.diplomacy.alliances.line.4", - "Sends an alliance request. Both sides must agree."); - put("help.diplomacy.alliances.line.5", - "Benefits: no friendly fire, shared map visibility."); - put("help.diplomacy.alliances.line.6", - "There may be a limit on alliance count."); - - // --- Enemy Factions --- - put("help.diplomacy.enemies.title", "Enemy Factions"); - put("help.diplomacy.enemies.line.1", - "Declaring an enemy enables PvP and territorial"); - put("help.diplomacy.enemies.line.2", - "aggression against them. One-way action."); - put("help.diplomacy.enemies.line.3", "/f enemy "); - put("help.diplomacy.enemies.line.4", - "Declares enemy immediately. No agreement needed."); - put("help.diplomacy.enemies.line.5", - "PvP enabled in each other's territory. Overclaim"); - put("help.diplomacy.enemies.line.6", - "possible if they become weakened."); - put("help.diplomacy.enemies.line.7", "/f neutral "); - put("help.diplomacy.enemies.line.8", - "Resets relation to neutral, ending enemy status."); - - // ================================================================= - // COMBAT & SAFETY - // ================================================================= - - // --- Combat Tagging --- - put("help.combat.tagging.title", "Combat Tagging"); - put("help.combat.tagging.line.1", - "Attacking or being attacked combat tags you."); - put("help.combat.tagging.line.2", - "A timer shows the remaining tag duration."); - put("help.combat.tagging.line.3", - "While tagged: no /f home, /f stuck, or teleports."); - put("help.combat.tagging.line.4", - "The tag resets with each new combat action."); - put("help.combat.tagging.line.5", - "Logging out while tagged is risky. Stay and fight!"); - - // --- Territory Protection --- - put("help.combat.protection.title", "Territory Protection"); - put("help.combat.protection.line.1", - "Claimed territory has several protections:"); - put("help.combat.protection.line.2", "Block Protection"); - put("help.combat.protection.line.3", - "Only members can place or break blocks."); - put("help.combat.protection.line.4", "Container Protection"); - put("help.combat.protection.line.5", - "Chests, barrels, etc. are secured to members."); - put("help.combat.protection.line.6", "Entry Alerts"); - put("help.combat.protection.line.7", - "You're notified when non-members enter claims."); - put("help.combat.protection.line.8", - "Territory protects blocks, not players!"); - - // --- Special Zones --- - put("help.combat.zones.title", "Special Zones"); - put("help.combat.zones.line.1", - "Admins can create zones with special rules:"); - put("help.combat.zones.line.2", "SafeZone"); - put("help.combat.zones.line.3", - "No PvP, no block breaking. For spawn/trading."); - put("help.combat.zones.line.4", "WarZone"); - put("help.combat.zones.line.5", - "PvP always enabled, no protection. Battle areas."); - put("help.combat.zones.line.6", - "Zone rules always override faction territory."); - - // --- Death & Recovery --- - put("help.combat.death.title", "Death & Recovery"); - put("help.combat.death.line.1", - "Death has real consequences:"); - put("help.combat.death.line.2", - "You lose personal power, lowering faction total."); - put("help.combat.death.line.3", - "If claims exceed power, enemies can overclaim."); - put("help.combat.death.line.4", - "Power regenerates while online. Multiple deaths"); - put("help.combat.death.line.5", - "can leave your faction dangerously vulnerable."); - put("help.combat.death.line.6", - "Pick your battles carefully!"); - - // ================================================================= - // ECONOMY - // ================================================================= - - // --- Faction Treasury --- - put("help.economy.treasury.title", "Faction Treasury"); - put("help.economy.treasury.line.1", - "Every faction has a shared treasury. Managed"); - put("help.economy.treasury.line.2", - "by Officers and the Leader."); - put("help.economy.treasury.line.3", "/f balance"); - put("help.economy.treasury.line.4", - "Check your faction's treasury balance. (Alias: bal)"); - put("help.economy.treasury.line.5", - "Contribute regularly to keep your faction funded!"); - - // --- Managing Funds --- - put("help.economy.funds.title", "Managing Funds"); - put("help.economy.funds.line.1", - "Members deposit; Officers can withdraw/transfer."); - put("help.economy.funds.line.2", "/f deposit "); - put("help.economy.funds.line.3", - "Deposit from your balance into the treasury."); - put("help.economy.funds.line.4", "/f withdraw "); - put("help.economy.funds.line.5", - "Withdraw from treasury. (Officer+)"); - put("help.economy.funds.line.6", "/f money transfer "); - put("help.economy.funds.line.7", - "Transfer funds to another faction's treasury."); - put("help.economy.funds.line.8", - "All transactions are logged for review."); - - // --- Economy Commands --- - put("help.economy.commands.title", "Economy Commands"); - put("help.economy.commands.line.1", - "Quick reference for economy commands:"); - put("help.economy.commands.line.2", "/f balance"); - put("help.economy.commands.line.3", "View treasury balance."); - put("help.economy.commands.line.4", "/f deposit "); - put("help.economy.commands.line.5", "Deposit funds."); - put("help.economy.commands.line.6", "/f withdraw "); - put("help.economy.commands.line.7", "Withdraw funds. (Officer+)"); - put("help.economy.commands.line.8", "/f money transfer "); - put("help.economy.commands.line.9", "Transfer to another faction."); - put("help.economy.commands.line.10", "/f money log [page]"); - put("help.economy.commands.line.11", "View transaction history."); - - // ================================================================= - // QUICK REFERENCE - // ================================================================= - - // --- All Commands --- - put("help.quick_ref.all_commands.title", "All Commands"); - - // Core - put("help.quick_ref.all_commands.line.1", "Core"); - put("help.quick_ref.all_commands.line.2", "/f \u2014 Open faction menu (alias: gui, menu)"); - put("help.quick_ref.all_commands.line.3", "/f help \u2014 Open this help center"); - put("help.quick_ref.all_commands.line.4", "/f create \u2014 Create a faction"); - put("help.quick_ref.all_commands.line.5", "/f disband \u2014 Delete your faction (Leader)"); - put("help.quick_ref.all_commands.line.6", "/f leave \u2014 Leave your faction"); - - // Membership - put("help.quick_ref.all_commands.line.7", "Membership"); - put("help.quick_ref.all_commands.line.8", "/f invite \u2014 Invite player (Officer+)"); - put("help.quick_ref.all_commands.line.9", "/f accept [faction] \u2014 Accept invite (alias: join)"); - put("help.quick_ref.all_commands.line.10", "/f request \u2014 Request to join"); - put("help.quick_ref.all_commands.line.11", "/f kick \u2014 Remove member (Officer+)"); - put("help.quick_ref.all_commands.line.12", "/f promote \u2014 Promote to Officer (Leader)"); - put("help.quick_ref.all_commands.line.13", "/f demote \u2014 Demote to Member (Leader)"); - put("help.quick_ref.all_commands.line.14", "/f transfer \u2014 Transfer leadership"); - - // Territory - put("help.quick_ref.all_commands.line.15", "Territory"); - put("help.quick_ref.all_commands.line.16", "/f claim \u2014 Claim current chunk (Officer+)"); - put("help.quick_ref.all_commands.line.17", "/f unclaim \u2014 Release current chunk (Officer+)"); - put("help.quick_ref.all_commands.line.18", "/f overclaim \u2014 Take weakened faction's chunk"); - put("help.quick_ref.all_commands.line.19", "/f map \u2014 Open territory map"); - - // Teleport - put("help.quick_ref.all_commands.line.20", "Teleport"); - put("help.quick_ref.all_commands.line.21", "/f home \u2014 Teleport to faction home"); - put("help.quick_ref.all_commands.line.22", "/f sethome \u2014 Set faction home (Officer+)"); - put("help.quick_ref.all_commands.line.23", "/f delhome \u2014 Delete faction home (Officer+)"); - put("help.quick_ref.all_commands.line.24", "/f stuck \u2014 Escape enemy territory"); - - // Information - put("help.quick_ref.all_commands.line.25", "Information"); - put("help.quick_ref.all_commands.line.26", "/f info [faction] \u2014 View faction details"); - put("help.quick_ref.all_commands.line.27", "/f list \u2014 Browse all factions"); - put("help.quick_ref.all_commands.line.28", "/f members \u2014 View roster"); - put("help.quick_ref.all_commands.line.29", "/f who [player] \u2014 View player info"); - put("help.quick_ref.all_commands.line.30", "/f power [player] \u2014 Check power levels"); - put("help.quick_ref.all_commands.line.31", "/f invites \u2014 Manage invites/requests"); - put("help.quick_ref.all_commands.line.32", "/f relations \u2014 View diplomatic relations"); - - // Diplomacy - put("help.quick_ref.all_commands.line.33", "Diplomacy"); - put("help.quick_ref.all_commands.line.34", "/f ally \u2014 Request alliance (Officer+)"); - put("help.quick_ref.all_commands.line.35", "/f enemy \u2014 Declare enemy (Officer+)"); - put("help.quick_ref.all_commands.line.36", "/f neutral \u2014 Reset to neutral"); - - // Settings - put("help.quick_ref.all_commands.line.37", "Settings"); - put("help.quick_ref.all_commands.line.38", "/f settings \u2014 Open settings GUI (Officer+)"); - put("help.quick_ref.all_commands.line.39", "/f rename \u2014 Rename faction (Leader)"); - put("help.quick_ref.all_commands.line.40", "/f desc [text] \u2014 Set description (Officer+)"); - put("help.quick_ref.all_commands.line.41", "/f color \u2014 Set faction color (Officer+)"); - put("help.quick_ref.all_commands.line.42", "/f open \u2014 Allow anyone to join (Leader)"); - put("help.quick_ref.all_commands.line.43", "/f close \u2014 Require invitation (Leader)"); - - // Economy - put("help.quick_ref.all_commands.line.44", "Economy"); - put("help.quick_ref.all_commands.line.45", "/f balance \u2014 View treasury"); - put("help.quick_ref.all_commands.line.46", "/f deposit \u2014 Deposit funds"); - put("help.quick_ref.all_commands.line.47", "/f withdraw \u2014 Withdraw (Officer+)"); - put("help.quick_ref.all_commands.line.48", "/f money transfer \u2014 Transfer"); - put("help.quick_ref.all_commands.line.49", "/f money log [page] \u2014 Transaction history"); - - // Chat - put("help.quick_ref.all_commands.line.50", "Chat"); - put("help.quick_ref.all_commands.line.51", "/f c \u2014 Cycle: Normal > Faction > Ally"); - put("help.quick_ref.all_commands.line.52", "/f c f \u2014 Set faction chat"); - put("help.quick_ref.all_commands.line.53", "/f c a \u2014 Set ally chat"); - put("help.quick_ref.all_commands.line.54", "/f c off \u2014 Set public chat"); - - // Admin - put("help.quick_ref.all_commands.line.55", "Admin (requires hyperfactions.admin)"); - put("help.quick_ref.all_commands.line.56", "/f admin \u2014 Open admin dashboard"); - put("help.quick_ref.all_commands.line.57", "/f admin reload \u2014 Reload configuration"); - put("help.quick_ref.all_commands.line.58", "/f admin sync \u2014 Sync faction data"); - put("help.quick_ref.all_commands.line.59", "/f admin factions \u2014 Faction management"); - put("help.quick_ref.all_commands.line.60", "/f admin config \u2014 Configuration editor"); - put("help.quick_ref.all_commands.line.61", "/f admin zones \u2014 Zone management"); - put("help.quick_ref.all_commands.line.62", "/f admin backup create \u2014 Create backup"); - put("help.quick_ref.all_commands.line.63", "/f admin backup restore \u2014 Restore backup"); - put("help.quick_ref.all_commands.line.64", "/f admin safezone \u2014 Create SafeZone"); - put("help.quick_ref.all_commands.line.65", "/f admin warzone \u2014 Create WarZone"); - put("help.quick_ref.all_commands.line.66", "/f admin debug toggle \u2014 Debug logging"); + public static String get(@Nullable PlayerRef player, @NotNull String key) { + return HFMessages.get(player, key); } } diff --git a/src/main/java/com/hyperfactions/gui/help/HelpRegistry.java b/src/main/java/com/hyperfactions/gui/help/HelpRegistry.java index e5ffdf5e..d8697468 100644 --- a/src/main/java/com/hyperfactions/gui/help/HelpRegistry.java +++ b/src/main/java/com/hyperfactions/gui/help/HelpRegistry.java @@ -1,14 +1,22 @@ package com.hyperfactions.gui.help; -import static com.hyperfactions.gui.help.HelpEntry.*; - +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.hyperfactions.util.Logger; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.StringJoiner; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Central registry of all help content. - * Provides lookup by category, topic ID, or command name. + * Loads topic structure from a build-generated {@code help-manifest.json} + * and provides lookup by category, topic ID, or command name. */ public final class HelpRegistry { @@ -21,7 +29,8 @@ public final class HelpRegistry { private final Map categoryByCommand = new HashMap<>(); private HelpRegistry() { - initializeContent(); + loadFromManifest(); + registerAdditionalCommandMappings(); } /** Returns the instance. */ @@ -59,395 +68,123 @@ private void registerCommandMapping(@NotNull String command, @NotNull HelpCatego categoryByCommand.put(command.toLowerCase(), category); } - private static String k(String category, String topic, int line) { - return "help." + category + "." + topic + ".line." + line; - } - - private void initializeContent() { - // ===================================================================== - // WELCOME - // ===================================================================== - - register(HelpTopic.of("welcome_what", "help.welcome.what_are_factions.title", List.of( - text(k("welcome", "what_are_factions", 1)), - text(k("welcome", "what_are_factions", 2)), - spacer(), - text(k("welcome", "what_are_factions", 3)), - text(k("welcome", "what_are_factions", 4)), - spacer(), - text(k("welcome", "what_are_factions", 5)), - text(k("welcome", "what_are_factions", 6)), - text(k("welcome", "what_are_factions", 7)) - ), HelpCategory.WELCOME)); - - register(HelpTopic.withCommands("welcome_started", "help.welcome.getting_started.title", List.of( - text(k("welcome", "getting_started", 1)), - spacer(), - command(k("welcome", "getting_started", 2)), - text(k("welcome", "getting_started", 3)), - text(k("welcome", "getting_started", 4)), - spacer(), - text(k("welcome", "getting_started", 5)), - text(k("welcome", "getting_started", 6)), - spacer(), - tip(k("welcome", "getting_started", 7)) - ), List.of("gui", "menu"), HelpCategory.WELCOME)); - - register(HelpTopic.of("welcome_tips", "help.welcome.quick_tips.title", List.of( - heading(k("welcome", "quick_tips", 1)), - command(k("welcome", "quick_tips", 2)), - text(k("welcome", "quick_tips", 3)), - spacer(), - heading(k("welcome", "quick_tips", 4)), - command(k("welcome", "quick_tips", 5)), - text(k("welcome", "quick_tips", 6)), - spacer(), - heading(k("welcome", "quick_tips", 7)), - command(k("welcome", "quick_tips", 8)), - text(k("welcome", "quick_tips", 9)), - spacer(), - tip(k("welcome", "quick_tips", 10)) - ), HelpCategory.WELCOME)); - - // ===================================================================== - // YOUR FACTION - // ===================================================================== - - register(HelpTopic.withCommands("faction_creating", "help.your_faction.creating.title", List.of( - text(k("your_faction", "creating", 1)), - text(k("your_faction", "creating", 2)), - spacer(), - command(k("your_faction", "creating", 3)), - text(k("your_faction", "creating", 4)), - spacer(), - tip(k("your_faction", "creating", 5)) - ), List.of("create"), HelpCategory.YOUR_FACTION)); - - register(HelpTopic.withCommands("faction_joining", "help.your_faction.joining.title", List.of( - text(k("your_faction", "joining", 1)), - spacer(), - heading(k("your_faction", "joining", 2)), - text(k("your_faction", "joining", 3)), - spacer(), - heading(k("your_faction", "joining", 4)), - text(k("your_faction", "joining", 5)), - spacer(), - heading(k("your_faction", "joining", 6)), - command(k("your_faction", "joining", 7)), - text(k("your_faction", "joining", 8)) - ), List.of("accept", "join", "request"), HelpCategory.YOUR_FACTION)); - - register(HelpTopic.of("faction_roles", "help.your_faction.roles.title", List.of( - text(k("your_faction", "roles", 1)), - spacer(), - heading(k("your_faction", "roles", 2)), - text(k("your_faction", "roles", 3)), - text(k("your_faction", "roles", 4)), - spacer(), - heading(k("your_faction", "roles", 5)), - text(k("your_faction", "roles", 6)), - spacer(), - heading(k("your_faction", "roles", 7)), - text(k("your_faction", "roles", 8)) - ), HelpCategory.YOUR_FACTION)); - - register(HelpTopic.withCommands("faction_managing", "help.your_faction.managing.title", List.of( - text(k("your_faction", "managing", 1)), - spacer(), - command(k("your_faction", "managing", 2)), - text(k("your_faction", "managing", 3)), - spacer(), - command(k("your_faction", "managing", 4)), - text(k("your_faction", "managing", 5)), - spacer(), - command(k("your_faction", "managing", 6)), - text(k("your_faction", "managing", 7)), - spacer(), - command(k("your_faction", "managing", 8)), - text(k("your_faction", "managing", 9)), - spacer(), - command(k("your_faction", "managing", 10)), - tip(k("your_faction", "managing", 11)) - ), List.of("invite", "kick", "promote", "demote", "transfer"), - HelpCategory.YOUR_FACTION)); - - // ===================================================================== - // POWER & LAND - // ===================================================================== - - register(HelpTopic.withCommands("power_understanding", "help.power_land.understanding_power.title", List.of( - text(k("power_land", "understanding_power", 1)), - text(k("power_land", "understanding_power", 2)), - spacer(), - command(k("power_land", "understanding_power", 3)), - text(k("power_land", "understanding_power", 4)), - spacer(), - text(k("power_land", "understanding_power", 5)), - tip(k("power_land", "understanding_power", 6)) - ), List.of("power"), HelpCategory.POWER_AND_LAND)); - - register(HelpTopic.withCommands("power_claiming", "help.power_land.claiming.title", List.of( - text(k("power_land", "claiming", 1)), - text(k("power_land", "claiming", 2)), - spacer(), - command(k("power_land", "claiming", 3)), - text(k("power_land", "claiming", 4)), - spacer(), - command(k("power_land", "claiming", 5)), - text(k("power_land", "claiming", 6)), - spacer(), - tip(k("power_land", "claiming", 7)) - ), List.of("claim", "unclaim"), HelpCategory.POWER_AND_LAND)); - - register(HelpTopic.withCommands("power_map", "help.power_land.territory_map.title", List.of( - text(k("power_land", "territory_map", 1)), - spacer(), - command(k("power_land", "territory_map", 2)), - text(k("power_land", "territory_map", 3)), - spacer(), - text(k("power_land", "territory_map", 4)), - text(k("power_land", "territory_map", 5)) - ), List.of("map"), HelpCategory.POWER_AND_LAND)); - - register(HelpTopic.withCommands("power_losing", "help.power_land.losing_territory.title", List.of( - text(k("power_land", "losing_territory", 1)), - text(k("power_land", "losing_territory", 2)), - spacer(), - command(k("power_land", "losing_territory", 3)), - text(k("power_land", "losing_territory", 4)), - spacer(), - text(k("power_land", "losing_territory", 5)), - text(k("power_land", "losing_territory", 6)) - ), List.of("overclaim"), HelpCategory.POWER_AND_LAND)); - - // ===================================================================== - // DIPLOMACY - // ===================================================================== - - register(HelpTopic.withCommands("diplomacy_relations", "help.diplomacy.relations.title", List.of( - text(k("diplomacy", "relations", 1)), - spacer(), - text(k("diplomacy", "relations", 2)), - text(k("diplomacy", "relations", 3)), - spacer(), - text(k("diplomacy", "relations", 4)), - text(k("diplomacy", "relations", 5)), - spacer(), - text(k("diplomacy", "relations", 6)), - spacer(), - command(k("diplomacy", "relations", 7)), - text(k("diplomacy", "relations", 8)) - ), List.of("relations"), HelpCategory.DIPLOMACY)); - - register(HelpTopic.withCommands("diplomacy_alliances", "help.diplomacy.alliances.title", List.of( - text(k("diplomacy", "alliances", 1)), - text(k("diplomacy", "alliances", 2)), - spacer(), - command(k("diplomacy", "alliances", 3)), - text(k("diplomacy", "alliances", 4)), - spacer(), - text(k("diplomacy", "alliances", 5)), - tip(k("diplomacy", "alliances", 6)) - ), List.of("ally"), HelpCategory.DIPLOMACY)); - - register(HelpTopic.withCommands("diplomacy_enemies", "help.diplomacy.enemies.title", List.of( - text(k("diplomacy", "enemies", 1)), - text(k("diplomacy", "enemies", 2)), - spacer(), - command(k("diplomacy", "enemies", 3)), - text(k("diplomacy", "enemies", 4)), - spacer(), - text(k("diplomacy", "enemies", 5)), - text(k("diplomacy", "enemies", 6)), - spacer(), - command(k("diplomacy", "enemies", 7)), - text(k("diplomacy", "enemies", 8)) - ), List.of("enemy", "neutral"), HelpCategory.DIPLOMACY)); - - // ===================================================================== - // COMBAT & SAFETY - // ===================================================================== - - register(HelpTopic.of("combat_tagging", "help.combat.tagging.title", List.of( - text(k("combat", "tagging", 1)), - text(k("combat", "tagging", 2)), - spacer(), - text(k("combat", "tagging", 3)), - text(k("combat", "tagging", 4)), - spacer(), - tip(k("combat", "tagging", 5)) - ), HelpCategory.COMBAT)); - - register(HelpTopic.of("combat_protection", "help.combat.protection.title", List.of( - text(k("combat", "protection", 1)), - spacer(), - heading(k("combat", "protection", 2)), - text(k("combat", "protection", 3)), - spacer(), - heading(k("combat", "protection", 4)), - text(k("combat", "protection", 5)), - spacer(), - heading(k("combat", "protection", 6)), - text(k("combat", "protection", 7)), - spacer(), - tip(k("combat", "protection", 8)) - ), HelpCategory.COMBAT)); - - register(HelpTopic.of("combat_zones", "help.combat.zones.title", List.of( - text(k("combat", "zones", 1)), - spacer(), - heading(k("combat", "zones", 2)), - text(k("combat", "zones", 3)), - spacer(), - heading(k("combat", "zones", 4)), - text(k("combat", "zones", 5)), - spacer(), - tip(k("combat", "zones", 6)) - ), HelpCategory.COMBAT)); - - register(HelpTopic.withCommands("combat_death", "help.combat.death.title", List.of( - text(k("combat", "death", 1)), - spacer(), - text(k("combat", "death", 2)), - text(k("combat", "death", 3)), - spacer(), - text(k("combat", "death", 4)), - text(k("combat", "death", 5)), - spacer(), - tip(k("combat", "death", 6)) - ), List.of("home", "sethome", "stuck"), HelpCategory.COMBAT)); - - // ===================================================================== - // ECONOMY - // ===================================================================== - - register(HelpTopic.withCommands("economy_treasury", "help.economy.treasury.title", List.of( - text(k("economy", "treasury", 1)), - text(k("economy", "treasury", 2)), - spacer(), - command(k("economy", "treasury", 3)), - text(k("economy", "treasury", 4)), - spacer(), - tip(k("economy", "treasury", 5)) - ), List.of("balance"), HelpCategory.ECONOMY)); - - register(HelpTopic.withCommands("economy_funds", "help.economy.funds.title", List.of( - text(k("economy", "funds", 1)), - spacer(), - command(k("economy", "funds", 2)), - text(k("economy", "funds", 3)), - spacer(), - command(k("economy", "funds", 4)), - text(k("economy", "funds", 5)), - spacer(), - command(k("economy", "funds", 6)), - text(k("economy", "funds", 7)), - spacer(), - tip(k("economy", "funds", 8)) - ), List.of("deposit", "withdraw"), HelpCategory.ECONOMY)); - - register(HelpTopic.of("economy_commands", "help.economy.commands.title", List.of( - text(k("economy", "commands", 1)), - spacer(), - command(k("economy", "commands", 2)), - text(k("economy", "commands", 3)), - spacer(), - command(k("economy", "commands", 4)), - text(k("economy", "commands", 5)), - spacer(), - command(k("economy", "commands", 6)), - text(k("economy", "commands", 7)), - spacer(), - command(k("economy", "commands", 8)), - text(k("economy", "commands", 9)), - spacer(), - command(k("economy", "commands", 10)), - text(k("economy", "commands", 11)) - ), HelpCategory.ECONOMY)); - - // ===================================================================== - // QUICK REFERENCE — All Commands - // ===================================================================== - - List cmdEntries = new ArrayList<>(); - String prefix = "help.quick_ref.all_commands.line."; - - // Core (lines 1-6) - cmdEntries.add(heading(prefix + "1")); - for (int i = 2; i <= 6; i++) { - cmdEntries.add(command(prefix + i)); - } - cmdEntries.add(spacer()); - - // Membership (lines 7-14) - cmdEntries.add(heading(prefix + "7")); - for (int i = 8; i <= 14; i++) { - cmdEntries.add(command(prefix + i)); - } - cmdEntries.add(spacer()); - - // Territory (lines 15-19) - cmdEntries.add(heading(prefix + "15")); - for (int i = 16; i <= 19; i++) { - cmdEntries.add(command(prefix + i)); - } - cmdEntries.add(spacer()); - - // Teleport (lines 20-24) - cmdEntries.add(heading(prefix + "20")); - for (int i = 21; i <= 24; i++) { - cmdEntries.add(command(prefix + i)); - } - cmdEntries.add(spacer()); - - // Information (lines 25-32) - cmdEntries.add(heading(prefix + "25")); - for (int i = 26; i <= 32; i++) { - cmdEntries.add(command(prefix + i)); - } - cmdEntries.add(spacer()); - - // Diplomacy (lines 33-36) - cmdEntries.add(heading(prefix + "33")); - for (int i = 34; i <= 36; i++) { - cmdEntries.add(command(prefix + i)); - } - cmdEntries.add(spacer()); - - // Settings (lines 37-43) - cmdEntries.add(heading(prefix + "37")); - for (int i = 38; i <= 43; i++) { - cmdEntries.add(command(prefix + i)); + /** + * Loads help content structure from the build-generated help-manifest.json. + */ + private void loadFromManifest() { + try (InputStream is = getClass().getClassLoader().getResourceAsStream("help-manifest.json")) { + if (is == null) { + Logger.warn("help-manifest.json not found in classpath — help system will be empty"); + return; + } + + Gson gson = new Gson(); + JsonObject manifest = gson.fromJson(new InputStreamReader(is, StandardCharsets.UTF_8), JsonObject.class); + + // Load topics + JsonArray topics = manifest.getAsJsonArray("topics"); + if (topics != null) { + for (JsonElement topicElement : topics) { + JsonObject topicObj = topicElement.getAsJsonObject(); + HelpTopic topic = parseTopic(topicObj); + if (topic != null) { + register(topic); + } + } + } + + // Load additional command mappings from manifest + JsonObject cmdMappings = manifest.getAsJsonObject("commandMappings"); + if (cmdMappings != null) { + for (Map.Entry entry : cmdMappings.entrySet()) { + String cmd = entry.getKey(); + String categoryId = entry.getValue().getAsString(); + HelpCategory category = HelpCategory.fromId(categoryId); + // Only add if not already mapped by a topic's commands + categoryByCommand.putIfAbsent(cmd.toLowerCase(), category); + } + } + + Logger.info("Loaded %d help topics from manifest", topicsById.size()); + } catch (Exception e) { + Logger.warn("Failed to load help manifest: %s", e.getMessage()); } - cmdEntries.add(spacer()); + } - // Economy (lines 44-49) - cmdEntries.add(heading(prefix + "44")); - for (int i = 45; i <= 49; i++) { - cmdEntries.add(command(prefix + i)); + /** + * Parses a single topic from the manifest JSON. + */ + @Nullable + private HelpTopic parseTopic(@NotNull JsonObject topicObj) { + String id = topicObj.get("id").getAsString(); + String categoryId = topicObj.get("category").getAsString(); + String titleKey = topicObj.get("titleKey").getAsString(); + + HelpCategory category = HelpCategory.fromId(categoryId); + + // Parse commands + List commands = new ArrayList<>(); + JsonArray cmds = topicObj.getAsJsonArray("commands"); + if (cmds != null) { + for (JsonElement cmd : cmds) { + commands.add(cmd.getAsString()); + } } - cmdEntries.add(spacer()); - // Chat (lines 50-54) - cmdEntries.add(heading(prefix + "50")); - for (int i = 51; i <= 54; i++) { - cmdEntries.add(command(prefix + i)); + // Parse entries + List entries = new ArrayList<>(); + JsonArray entriesArray = topicObj.getAsJsonArray("entries"); + if (entriesArray != null) { + for (JsonElement entryElement : entriesArray) { + JsonObject entryObj = entryElement.getAsJsonObject(); + String type = entryObj.get("type").getAsString(); + String key = entryObj.has("key") ? entryObj.get("key").getAsString() : ""; + String color = entryObj.has("color") ? entryObj.get("color").getAsString() : null; + + HelpEntry entry = switch (type) { + case "TEXT" -> color != null ? HelpEntry.colored(key, color) : HelpEntry.text(key); + case "COMMAND" -> HelpEntry.command(key); + case "TIP" -> HelpEntry.callout(key, "#55FF55"); // backward compat + case "HEADING" -> HelpEntry.heading(key); + case "SPACER" -> HelpEntry.spacer(); + case "BOLD" -> HelpEntry.bold(key); + case "ITALIC" -> HelpEntry.italic(key); + case "LIST" -> HelpEntry.list(key); + case "SEPARATOR" -> HelpEntry.separator(); + case "CALLOUT" -> HelpEntry.callout(key, color); + case "TABLE_HEADER", "TABLE_ROW" -> { + // Table entries store column keys as a JSON array + JsonArray cols = entryObj.has("columns") ? entryObj.getAsJsonArray("columns") : null; + if (cols != null && !cols.isEmpty()) { + StringJoiner joiner = new StringJoiner("|"); + for (JsonElement col : cols) { + joiner.add(col.getAsString()); + } + yield "TABLE_HEADER".equals(type) + ? HelpEntry.tableHeader(joiner.toString()) + : HelpEntry.tableRow(joiner.toString()); + } + yield null; + } + default -> null; + }; + if (entry != null) { + entries.add(entry); + } + } } - cmdEntries.add(spacer()); - // Admin (lines 55-66) - cmdEntries.add(heading(prefix + "55")); - for (int i = 56; i <= 66; i++) { - cmdEntries.add(command(prefix + i)); + if (commands.isEmpty()) { + return HelpTopic.of(id, titleKey, entries, category); } + return HelpTopic.withCommands(id, titleKey, entries, commands, category); + } - register(HelpTopic.of("quickref_commands", "help.quick_ref.all_commands.title", - cmdEntries, HelpCategory.QUICK_REFERENCE)); - - // ===================================================================== - // Additional command → category mappings for deep-linking - // ===================================================================== - + /** + * Registers additional command → category mappings that aren't tied to specific topics. + * These provide general navigation from any command to its relevant help category. + */ + private void registerAdditionalCommandMappings() { registerCommandMapping("help", HelpCategory.WELCOME); registerCommandMapping("info", HelpCategory.YOUR_FACTION); diff --git a/src/main/java/com/hyperfactions/gui/help/HelpRichText.java b/src/main/java/com/hyperfactions/gui/help/HelpRichText.java new file mode 100644 index 00000000..6d3b9fde --- /dev/null +++ b/src/main/java/com/hyperfactions/gui/help/HelpRichText.java @@ -0,0 +1,114 @@ +package com.hyperfactions.gui.help; + +import com.hypixel.hytale.server.core.Message; +import java.awt.Color; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Parses inline markdown markers within help text and builds a {@link Message} + * with proper formatting (bold, italic, colored command references). + * + *

Supported inline markers: + *

    + *
  • {@code **bold text**} → bold
  • + *
  • {@code `command`} → yellow bold (command style)
  • + *
  • {@code *italic text*} → italic
  • + *
  • {@code --} → em-dash (—)
  • + *
+ * + *

Used by both {@code HelpMainPage} and {@code AdminHelpPage} to render + * rich text within Labels via the {@code TextSpans} property. + */ +public final class HelpRichText { + + /** Command color: yellow (#FFFF55) matching the COMMAND entry style. */ + private static final Color CMD_COLOR = new Color(0xFF, 0xFF, 0x55); + + /** + * Tokenizer pattern that matches inline markers in order of priority: + *

    + *
  1. {@code **...** } bold (non-greedy)
  2. + *
  3. {@code `...`} code/command (non-greedy)
  4. + *
  5. {@code *...*} italic (not preceded/followed by *)
  6. + *
+ */ + private static final Pattern INLINE_PATTERN = Pattern.compile( + "\\*\\*(.+?)\\*\\*" // Group 1: bold + + "|`(.+?)`" // Group 2: code + + "|(? parts = new ArrayList<>(); + int lastEnd = 0; + + while (matcher.find()) { + // Add any plain text before this match + if (matcher.start() > lastEnd) { + String plain = text.substring(lastEnd, matcher.start()); + Message plainMsg = Message.raw(plain); + if (baseColor != null) plainMsg = plainMsg.color(baseColor); + parts.add(plainMsg); + } + + if (matcher.group(1) != null) { + // Bold: **text** + Message boldMsg = Message.raw(matcher.group(1)).bold(true); + if (baseColor != null) boldMsg = boldMsg.color(baseColor); + parts.add(boldMsg); + } else if (matcher.group(2) != null) { + // Code/Command: `text` → yellow bold + parts.add(Message.raw(matcher.group(2)).color(CMD_COLOR).bold(true)); + } else if (matcher.group(3) != null) { + // Italic: *text* + Message italicMsg = Message.raw(matcher.group(3)).italic(true); + if (baseColor != null) italicMsg = italicMsg.color(baseColor); + parts.add(italicMsg); + } + + lastEnd = matcher.end(); + } + + // Add remaining plain text after last match + if (lastEnd < text.length()) { + String remaining = text.substring(lastEnd); + Message remainMsg = Message.raw(remaining); + if (baseColor != null) remainMsg = remainMsg.color(baseColor); + parts.add(remainMsg); + } + + // If no matches found, return plain text + if (parts.isEmpty()) { + Message plainMsg = Message.raw(text); + if (baseColor != null) plainMsg = plainMsg.color(baseColor); + return plainMsg; + } + + return Message.join(parts.toArray(new Message[0])); + } + + /** + * Convenience overload using default label color. + */ + public static @NotNull Message parse(@NotNull String text) { + return parse(text, null); + } +} diff --git a/src/main/java/com/hyperfactions/gui/help/HelpTopic.java b/src/main/java/com/hyperfactions/gui/help/HelpTopic.java index de257a8b..7227bafb 100644 --- a/src/main/java/com/hyperfactions/gui/help/HelpTopic.java +++ b/src/main/java/com/hyperfactions/gui/help/HelpTopic.java @@ -1,7 +1,9 @@ package com.hyperfactions.gui.help; +import com.hypixel.hytale.server.core.universe.PlayerRef; import java.util.List; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Represents an individual help topic within a category. @@ -20,13 +22,21 @@ public record HelpTopic( @NotNull HelpCategory category ) { /** - * Gets the resolved display title. + * Gets the resolved display title (server default language). */ @NotNull public String title() { return HelpMessages.get(titleKey); } + /** + * Gets the resolved display title for a specific player's language. + */ + @NotNull + public String title(@Nullable PlayerRef playerRef) { + return HelpMessages.get(playerRef, titleKey); + } + /** * Creates a topic with entries but no associated commands. */ diff --git a/src/main/java/com/hyperfactions/gui/help/page/HelpMainPage.java b/src/main/java/com/hyperfactions/gui/help/page/HelpMainPage.java index 32439ded..5958e520 100644 --- a/src/main/java/com/hyperfactions/gui/help/page/HelpMainPage.java +++ b/src/main/java/com/hyperfactions/gui/help/page/HelpMainPage.java @@ -8,6 +8,8 @@ import com.hyperfactions.gui.help.data.HelpPageData; import com.hyperfactions.gui.newplayer.NewPlayerNavBarHelper; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -20,7 +22,10 @@ import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Main Help page with colored sidebar navigation and card-based content area. @@ -37,12 +42,20 @@ public class HelpMainPage extends InteractiveCustomUIPage { private static final String TPL_LINE_COMMAND = UIPaths.HELP_LINE_COMMAND; - private static final String TPL_LINE_TIP = UIPaths.HELP_LINE_TIP; - private static final String TPL_LINE_HEADING = UIPaths.HELP_LINE_HEADING; private static final String TPL_SPACER = UIPaths.HELP_SPACER; + private static final String TPL_LINE_BOLD = UIPaths.HELP_LINE_BOLD; + + private static final String TPL_LINE_ITALIC = UIPaths.HELP_LINE_ITALIC; + + private static final String TPL_LINE_LIST = UIPaths.HELP_LINE_LIST; + + private static final String TPL_SEPARATOR = UIPaths.HELP_SEPARATOR; + + private static final String TPL_LINE_CALLOUT = UIPaths.HELP_LINE_CALLOUT; + private final PlayerRef playerRef; private final GuiManager guiManager; @@ -93,11 +106,22 @@ public void build(Ref ref, UICommandBuilder cmd, NewPlayerNavBarHelper.setupBar(playerRef, PAGE_ID, cmd, events); } + // Page title + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.HELP_CENTER_TITLE)); + + // Set localized sidebar button labels (player categories only) + int catIdx = 0; + for (HelpCategory category : HelpCategory.values()) { + if (category.isAdmin()) continue; + cmd.set("#Cat" + catIdx + ".Text", " " + category.displayName(playerRef)); + catIdx++; + } + // Setup category buttons (disable selected, bind events to others) setupCategoryButtons(cmd, events); // Set the category title header text and color - cmd.set("#CategoryTitle.Text", selectedCategory.displayName().toUpperCase()); + cmd.set("#CategoryTitle.Text", selectedCategory.displayName(playerRef).toUpperCase()); cmd.set("#CategoryTitle.Style.TextColor", selectedCategory.color()); // Build topic cards for selected category @@ -109,8 +133,9 @@ public void build(Ref ref, UICommandBuilder cmd, * and binding click events to the others. */ private void setupCategoryButtons(UICommandBuilder cmd, UIEventBuilder events) { + int idx = 0; for (HelpCategory category : HelpCategory.values()) { - int idx = category.ordinal(); + if (category.isAdmin()) continue; String buttonId = "#Cat" + idx; boolean isSelected = category == selectedCategory; @@ -126,9 +151,12 @@ private void setupCategoryButtons(UICommandBuilder cmd, UIEventBuilder events) { .append("Category", category.id()) ); } + idx++; } } + private static final Pattern CELL_HEX_COLOR = Pattern.compile("^\\[#([0-9A-Fa-f]{6})]\\s*(.+)$"); + /** * Builds topic cards in the content area for the selected category. */ @@ -137,27 +165,55 @@ private void buildTopicCards(UICommandBuilder cmd) { int cardIndex = 0; for (HelpTopic topic : topics) { - // Append card template cmd.append("#ContentList", TPL_TOPIC_CARD); String cardPrefix = "#ContentList[" + cardIndex + "]"; + cmd.set(cardPrefix + " #Title.Text", topic.title(playerRef)); - // Set card title - cmd.set(cardPrefix + " #Title.Text", topic.title()); - - // Append lines into card's #Lines container int lineIndex = 0; for (HelpEntry entry : topic.entries()) { String linesContainer = cardPrefix + " #Lines"; + + // Table entries: inline rows with calculated height and variable columns + if (entry.type() == HelpEntry.EntryType.TABLE_HEADER || entry.type() == HelpEntry.EntryType.TABLE_ROW) { + boolean isHeader = entry.type() == HelpEntry.EntryType.TABLE_HEADER; + String[] columnKeys = entry.columnKeys(); + int numCols = columnKeys.length; + + // Resolve all cell texts for height estimation + String[] cellTexts = new String[numCols]; + for (int col = 0; col < numCols; col++) { + cellTexts[col] = HelpMessages.get(playerRef, columnKeys[col]); + } + int rowHeight = estimateTableRowHeight(cellTexts, numCols); + + cmd.appendInline(linesContainer, buildTableRowInline(rowHeight, numCols, isHeader)); + String rowSelector = linesContainer + "[" + lineIndex + "]"; + + for (int col = 0; col < numCols; col++) { + applyCellText(cmd, rowSelector, col, cellTexts[col], entry.color()); + } + lineIndex++; + continue; + } + String template = getTemplateForType(entry.type()); cmd.append(linesContainer, template); + String selector = linesContainer + "[" + lineIndex + "]"; + + if (entry.type() != HelpEntry.EntryType.SPACER && entry.type() != HelpEntry.EntryType.SEPARATOR) { + String text = entry.text(playerRef); + + if (entry.type() == HelpEntry.EntryType.LIST && !text.matches("^\\d+\\.\\s.*")) { + text = "\u2022 " + text; + } + + java.awt.Color baseColor = entry.color() != null + ? java.awt.Color.decode(entry.color()) : null; + cmd.set(selector + " #Text.TextSpans", HelpRichText.parse(text, baseColor)); - if (entry.type() != HelpEntry.EntryType.SPACER) { - String text = entry.text(); - // Prefix tips with >> for visual distinction - if (entry.type() == HelpEntry.EntryType.TIP) { - text = ">> " + text; + if (entry.color() != null && entry.type() == HelpEntry.EntryType.CALLOUT) { + cmd.set(selector + " #AccentBar.Background.Color", entry.color()); } - cmd.set(linesContainer + "[" + lineIndex + "] #Text.Text", text); } lineIndex++; } @@ -166,15 +222,106 @@ private void buildTopicCards(UICommandBuilder cmd) { } /** - * Returns the appropriate template path for an entry type. + * Sets text on a table cell Label (#Col0 or #Col1), handling [#RRGGBB] color prefix. */ + private void applyCellText(UICommandBuilder cmd, String rowSelector, + int col, String text, @Nullable String rowColor) { + String displayText = text; + java.awt.Color cellColor = rowColor != null ? java.awt.Color.decode(rowColor) : null; + + Matcher hexMatcher = CELL_HEX_COLOR.matcher(displayText); + if (hexMatcher.matches()) { + cellColor = java.awt.Color.decode("#" + hexMatcher.group(1)); + displayText = hexMatcher.group(2); + } + + cmd.set(rowSelector + " #Col" + col + ".TextSpans", HelpRichText.parse(displayText, cellColor)); + } + + /** Column pixel widths for height estimation (includes last column). */ + private static int[] getColumnPixelWidths(int numCols) { + return switch (numCols) { + case 3 -> new int[]{170, 170, 280}; + case 4 -> new int[]{140, 140, 140, 190}; + default -> new int[]{217, 400}; + }; + } + + /** Fixed widths for non-last columns (last column uses Right anchor). */ + private static int[] getColumnFixedWidths(int numCols) { + return switch (numCols) { + case 3 -> new int[]{170, 170}; + case 4 -> new int[]{140, 140, 140}; + default -> new int[]{217}; + }; + } + + private static int estimateTableRowHeight(String[] cellTexts, int numCols) { + int[] pixelWidths = getColumnPixelWidths(numCols); + int maxLines = 1; + for (int col = 0; col < Math.min(cellTexts.length, numCols); col++) { + int charsPerLine = Math.max(6, pixelWidths[col] / 6); + int lines = Math.max(1, (int) Math.ceil((double) cellTexts[col].length() / charsPerLine)); + maxLines = Math.max(maxLines, lines); + } + return Math.max(20, 4 + (maxLines * 13)); + } + + private static String buildTableRowInline(int height, int numCols, boolean isHeader) { + String bg = isHeader ? "#141a28" : "#0f1520"; + String tc = isHeader ? "#DDDDDD" : "#CCCCCC"; + String bd = isHeader ? ", RenderBold: true" : ""; + String bh = "2"; + int[] widths = getColumnFixedWidths(numCols); + + StringBuilder sb = new StringBuilder(); + sb.append("Group { Anchor: (Height: ").append(height).append("); Background: (Color: ").append(bg).append("); "); + + int pos = 2; + for (int col = 0; col < numCols; col++) { + boolean last = (col == numCols - 1); + String style = "Style: (FontSize: 10, TextColor: " + tc + bd + ", Wrap: true, VerticalAlignment: Center)"; + + if (last) { + sb.append("Label #Col").append(col).append(" { Text: \"\"; ").append(style).append("; "); + sb.append("Padding: (Left: 10, Right: 8); "); + sb.append("Anchor: (Left: ").append(pos).append(", Right: 2, Top: 0, Bottom: 0); } "); + } else { + sb.append("Group { Anchor: (Left: ").append(pos).append(", Width: ").append(widths[col]); + sb.append(", Top: 0, Bottom: 0); "); + sb.append("Label #Col").append(col).append(" { Text: \"\"; ").append(style).append("; "); + sb.append("Padding: (Left: 10, Right: 6); "); + sb.append("Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); } } "); + + int sepPos = pos + widths[col] + 1; + sb.append("Group { Anchor: (Width: 1, Left: ").append(sepPos); + sb.append(", Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } "); + pos = sepPos + 2; + } + } + + if (isHeader) { + sb.append("Group { Anchor: (Height: 1, Top: 0, Left: 0, Right: 0); Background: (Color: #2a3a4a); } "); + } + sb.append("Group { Anchor: (Height: ").append(bh).append(", Bottom: 0, Left: 0, Right: 0); Background: (Color: #2a3a4a); } "); + sb.append("Group { Anchor: (Width: 1, Left: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } "); + sb.append("Group { Anchor: (Width: 1, Right: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } "); + sb.append("}"); + return sb.toString(); + } + private String getTemplateForType(HelpEntry.EntryType type) { return switch (type) { case TEXT -> TPL_LINE_TEXT; case COMMAND -> TPL_LINE_COMMAND; - case TIP -> TPL_LINE_TIP; case HEADING -> TPL_LINE_HEADING; case SPACER -> TPL_SPACER; + case BOLD -> TPL_LINE_BOLD; + case ITALIC -> TPL_LINE_ITALIC; + case LIST -> TPL_LINE_LIST; + case SEPARATOR -> TPL_SEPARATOR; + case CALLOUT -> TPL_LINE_CALLOUT; + case TABLE_HEADER, TABLE_ROW -> TPL_LINE_TEXT; // fallback, not reached }; } diff --git a/src/main/java/com/hyperfactions/gui/newplayer/NewPlayerNavBarHelper.java b/src/main/java/com/hyperfactions/gui/newplayer/NewPlayerNavBarHelper.java index 1a2d9533..20f913df 100644 --- a/src/main/java/com/hyperfactions/gui/newplayer/NewPlayerNavBarHelper.java +++ b/src/main/java/com/hyperfactions/gui/newplayer/NewPlayerNavBarHelper.java @@ -5,10 +5,14 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.shared.NavBarUtil; import com.hyperfactions.gui.shared.data.NavAwareData; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; +import com.hypixel.hytale.server.core.ui.builder.EventData; import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder; import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder; import com.hypixel.hytale.server.core.universe.PlayerRef; @@ -56,7 +60,22 @@ public static void setupBar( // Create nav cards container and build buttons using shared utility cmd.appendInline("#HyperFactionsNavBar #NavBarButtons", "Group #NavCards { LayoutMode: Left; }"); NavBarUtil.buildButtons(entries, "#NavCards", UIPaths.NAV_BUTTON, "#NavActionButton", - "Nav", "NavBar", cmd, events); + "Nav", "NavBar", playerRef, cmd, events); + + // Flex spacer pushes "Player" button to far right + cmd.appendInline("#HyperFactionsNavBar #NavBarButtons", + "Group { FlexWeight: 1; }"); + + // "Player" button on far right + cmd.append("#HyperFactionsNavBar #NavBarButtons", UIPaths.NAV_BUTTON); + cmd.set("#HyperFactionsNavBar #NavBarButtons[2] #NavActionButton.Text", + HFMessages.get(playerRef, MessageKeys.Nav.PLAYER_SETTINGS)); + events.addEventBinding( + CustomUIEventBindingType.Activating, + "#HyperFactionsNavBar #NavBarButtons[2] #NavActionButton", + EventData.of("Button", "Nav").append("NavBar", "player_settings"), + false + ); } /** diff --git a/src/main/java/com/hyperfactions/gui/newplayer/page/CreateFactionPage.java b/src/main/java/com/hyperfactions/gui/newplayer/page/CreateFactionPage.java index 360d07c5..1009acbb 100644 --- a/src/main/java/com/hyperfactions/gui/newplayer/page/CreateFactionPage.java +++ b/src/main/java/com/hyperfactions/gui/newplayer/page/CreateFactionPage.java @@ -9,6 +9,8 @@ import com.hyperfactions.gui.newplayer.data.NewPlayerPageData; import com.hyperfactions.manager.FactionManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -78,17 +80,64 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup navigation bar NewPlayerNavBarHelper.setupBar(playerRef, PAGE_ID, cmd, events); + // Localize static labels — page title and section headers + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.TITLE)); + cmd.set("#SectionPreview.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.SECTION_PREVIEW)); + cmd.set("#NamePrefix.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.NAME_PREFIX)); + cmd.set("#SectionBasicInfo.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.SECTION_BASIC_INFO)); + cmd.set("#FactionNameLabel.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.FACTION_NAME_LABEL)); + cmd.set("#TagLabel.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.TAG_LABEL)); + cmd.set("#SectionDetails.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.SECTION_DETAILS)); + cmd.set("#DescLabel.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.DESC_LABEL)); + cmd.set("#RecruitmentLabel.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.RECRUITMENT_LABEL)); + + // Localize middle column — territory permissions (reuse SettingsGui keys) + cmd.set("#LockHint.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.LOCK_HINT)); + cmd.set("#TerritoryPermissionsLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.TERRITORY_PERMISSIONS)); + cmd.set("#ColOut.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_OUT)); + cmd.set("#ColAlly.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_ALLY)); + cmd.set("#ColMem.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_MEM)); + cmd.set("#ColOff.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.COL_OFF)); + cmd.set("#CatBuilding.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.CAT_BUILDING)); + cmd.set("#PermBreak.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_BREAK)); + cmd.set("#PermPlace.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_PLACE)); + cmd.set("#CatInteraction.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.CAT_INTERACTION)); + cmd.set("#InteractionHint.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.INTERACTION_HINT)); + cmd.set("#PermAll.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_ALL)); + cmd.set("#PermDoor.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_DOOR)); + cmd.set("#PermChest.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_CHEST)); + cmd.set("#PermBench.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_BENCH)); + cmd.set("#PermProcessing.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_PROCESSING)); + cmd.set("#PermSeat.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_SEAT)); + cmd.set("#PermTransport.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_TRANSPORT)); + cmd.set("#CatOther.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.CAT_OTHER)); + cmd.set("#PermCrate.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_CRATE)); + cmd.set("#PermNpcTame.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_NPC_TAME)); + cmd.set("#PermPve.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PERM_PVE)); + + // Localize right column — faction color, mob spawning, combat + cmd.set("#SectionFactionColor.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.SECTION_FACTION_COLOR)); + cmd.set("#SectionMobSpawning.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.MOB_SPAWNING)); + cmd.set("#MobSpawningHint.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.MOB_SPAWNING_HINT)); + cmd.set("#MobSpawningLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.MOB_SPAWNING_LABEL)); + cmd.set("#HostileMobsLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.HOSTILE_MOBS)); + cmd.set("#PassiveMobsLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PASSIVE_MOBS)); + cmd.set("#NeutralMobsLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.NEUTRAL_MOBS)); + cmd.set("#SectionCombat.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.SECTION_COMBAT)); + cmd.set("#PvPLabel.Text", HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_IN_TERRITORY)); + cmd.set("#CreateBtn.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.CREATE_BTN)); + // Set default ColorPicker value (cyan) cmd.set("#FactionColorPicker.Value", DEFAULT_COLOR); // Set preview defaults - cmd.set("#PreviewName.TextSpans", Message.raw("Your Faction Name").color(DEFAULT_COLOR)); - cmd.set("#PreviewLeader.Text", "Leader: " + playerRef.getUsername()); + cmd.set("#PreviewName.TextSpans", Message.raw(HFMessages.get(playerRef, MessageKeys.CreateGui.PREVIEW_NAME)).color(DEFAULT_COLOR)); + cmd.set("#PreviewLeader.Text", HFMessages.get(playerRef, MessageKeys.CreateGui.LEADER_PREFIX, playerRef.getUsername())); // Recruitment dropdown cmd.set("#RecruitmentDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Invite Only"), "INVITE_ONLY"), - new DropdownEntryInfo(LocalizableString.fromString("Open"), "OPEN") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)), "INVITE_ONLY"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN)), "OPEN") )); cmd.set("#RecruitmentDropdown.Value", openRecruitment ? "OPEN" : "INVITE_ONLY"); @@ -166,7 +215,7 @@ private void buildPermissionToggles(UICommandBuilder cmd, UIEventBuilder events) // PvP toggle buildPermissionToggle(cmd, events, "PvPToggle", "pvpEnabled", perms.pvpEnabled(), config, false); - cmd.set("#PvPStatus.Text", perms.pvpEnabled() ? "Enabled" : "Disabled"); + cmd.set("#PvPStatus.Text", perms.pvpEnabled() ? HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_ENABLED) : HFMessages.get(playerRef, MessageKeys.SettingsGui.PVP_DISABLED)); cmd.set("#PvPStatus.Style.TextColor", perms.pvpEnabled() ? "#55FF55" : "#FF5555"); } @@ -233,7 +282,7 @@ private void handleColorChanged(NewPlayerPageData data) { String hex = extractHex(data.inputColor); String name = data.inputName != null ? data.inputName : ""; String tag = data.inputTag != null ? data.inputTag : ""; - String previewText = !name.isEmpty() ? name : "Your Faction Name"; + String previewText = !name.isEmpty() ? name : HFMessages.get(playerRef, MessageKeys.CreateGui.PREVIEW_NAME); if (!tag.isEmpty()) { previewText += " [" + tag + "]"; } @@ -287,26 +336,26 @@ private void handleCreate(Player player, Ref ref, Store MAX_NAME_LENGTH) { - player.sendMessage(MessageUtil.errorText("Faction name cannot exceed " + MAX_NAME_LENGTH + " characters.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.NAME_TOO_LONG, MAX_NAME_LENGTH)); sendUpdate(); return; } // Check if name is already taken if (factionManager.getFactionByName(name) != null) { - player.sendMessage(MessageUtil.errorText("A faction with this name already exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.NAME_TAKEN)); sendUpdate(); return; } @@ -314,13 +363,13 @@ private void handleCreate(Player player, Ref ref, Store MAX_TAG_LENGTH) { - player.sendMessage(MessageUtil.errorText("Faction tag must be " + MIN_TAG_LENGTH + "-" + MAX_TAG_LENGTH + " characters.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.TAG_LENGTH, MIN_TAG_LENGTH, MAX_TAG_LENGTH)); sendUpdate(); return; } if (!tag.matches("^[a-zA-Z0-9]+$")) { - player.sendMessage(MessageUtil.errorText("Faction tag can only contain letters and numbers.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.TAG_FORMAT)); sendUpdate(); return; } @@ -333,14 +382,14 @@ private void handleCreate(Player player, Ref ref, Store MAX_DESCRIPTION_LENGTH) { - player.sendMessage(MessageUtil.errorText("Description cannot exceed " + MAX_DESCRIPTION_LENGTH + " characters.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.DESC_TOO_LONG, MAX_DESCRIPTION_LENGTH)); sendUpdate(); return; } // Check if player is already in a faction if (factionManager.isInFaction(playerRef.getUuid())) { - player.sendMessage(MessageUtil.errorText("You are already in a faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.Common.ALREADY_IN_FACTION)); sendUpdate(); return; } @@ -376,11 +425,7 @@ private void handleCreate(Player player, Ref ref, Store ref, Store { - player.sendMessage(MessageUtil.errorText("You are already in a faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.Common.ALREADY_IN_FACTION)); sendUpdate(); } case NAME_TAKEN -> { - player.sendMessage(MessageUtil.errorText("A faction with this name already exists.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.NAME_TAKEN)); sendUpdate(); } case NAME_TOO_SHORT, NAME_TOO_LONG -> { - player.sendMessage(MessageUtil.errorText("Invalid faction name.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.INVALID_NAME)); sendUpdate(); } default -> { - player.sendMessage(MessageUtil.errorText("Could not create faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.CreateGui.CREATE_FAILED)); sendUpdate(); } } diff --git a/src/main/java/com/hyperfactions/gui/newplayer/page/HelpPage.java b/src/main/java/com/hyperfactions/gui/newplayer/page/HelpPage.java index 844baec4..a9b6c237 100644 --- a/src/main/java/com/hyperfactions/gui/newplayer/page/HelpPage.java +++ b/src/main/java/com/hyperfactions/gui/newplayer/page/HelpPage.java @@ -4,6 +4,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.newplayer.NewPlayerNavBarHelper; import com.hyperfactions.gui.newplayer.data.NewPlayerPageData; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -44,7 +46,30 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup navigation bar for new players NewPlayerNavBarHelper.setupBar(playerRef, PAGE_ID, cmd, events); - // Content is defined in the template - this is a static page + // Localize all static content + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.GETTING_STARTED_TITLE)); + cmd.set("#WhatTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_TITLE)); + cmd.set("#WhatDesc1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_1)); + cmd.set("#WhatDesc2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_2)); + cmd.set("#WhatBullet1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_BULLET_1)); + cmd.set("#WhatBullet2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_BULLET_2)); + cmd.set("#WhatBullet3.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.WHAT_ARE_FACTIONS_BULLET_3)); + cmd.set("#JoinTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_TITLE)); + cmd.set("#JoinDesc.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_DESC)); + cmd.set("#JoinBullet1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_BULLET_1)); + cmd.set("#JoinBullet2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_BULLET_2)); + cmd.set("#JoinBullet3.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.JOINING_BULLET_3)); + cmd.set("#CreateTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_TITLE)); + cmd.set("#CreateDesc.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_DESC)); + cmd.set("#CreateBullet1.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_BULLET_1)); + cmd.set("#CreateBullet2.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CREATING_BULLET_2)); + cmd.set("#CmdTitle.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.COMMANDS_TITLE)); + cmd.set("#CmdF.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F)); + cmd.set("#CmdFList.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_LIST)); + cmd.set("#CmdFJoin.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_JOIN)); + cmd.set("#CmdFCreate.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_CREATE)); + cmd.set("#CmdFHelp.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.CMD_F_HELP)); + cmd.set("#TipText.Text", HFMessages.get(playerRef, MessageKeys.HelpGui.TIP)); } /** Handles data event. */ diff --git a/src/main/java/com/hyperfactions/gui/newplayer/page/InvitesPage.java b/src/main/java/com/hyperfactions/gui/newplayer/page/InvitesPage.java index 7d55aa5c..486fdf6a 100644 --- a/src/main/java/com/hyperfactions/gui/newplayer/page/InvitesPage.java +++ b/src/main/java/com/hyperfactions/gui/newplayer/page/InvitesPage.java @@ -14,12 +14,13 @@ import com.hyperfactions.manager.JoinRequestManager; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.util.MessageUtil; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.UuidUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; import com.hypixel.hytale.server.core.ui.builder.EventData; @@ -88,6 +89,9 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the main template cmd.append(UIPaths.NEWPLAYER_INVITES); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.INVITES_TITLE)); + // Setup navigation bar for new players NewPlayerNavBarHelper.setupBar(playerRef, PAGE_ID, cmd, events); @@ -103,22 +107,22 @@ public void build(Ref ref, UICommandBuilder cmd, // Set header with counts int totalCount = invites.size() + requests.size(); - cmd.set("#InviteCount.Text", totalCount + " pending"); + cmd.set("#InviteCount.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.PENDING_COUNT, totalCount)); // === RECEIVED INVITES SECTION === - cmd.set("#InvitesHeader.Text", "RECEIVED INVITES (" + invites.size() + ")"); + cmd.set("#InvitesHeader.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.RECEIVED_HEADER, invites.size())); if (invites.isEmpty()) { cmd.append("#InviteListContainer", UIPaths.RELATION_EMPTY); - cmd.set("#InviteListContainer[0] #EmptyText.Text", "No invites. Browse factions to find one!"); + cmd.set("#InviteListContainer[0] #EmptyText.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.NO_INVITES)); } else { buildInviteCards(cmd, events, invites); } // === YOUR REQUESTS SECTION === - cmd.set("#RequestsHeader.Text", "YOUR REQUESTS (" + requests.size() + ")"); + cmd.set("#RequestsHeader.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.REQUESTS_HEADER, requests.size())); if (requests.isEmpty()) { cmd.append("#RequestListContainer", UIPaths.RELATION_EMPTY); - cmd.set("#RequestListContainer[0] #EmptyText.Text", "No pending requests."); + cmd.set("#RequestListContainer[0] #EmptyText.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.NO_REQUESTS)); } else { buildRequestCards(cmd, events, requests); } @@ -145,13 +149,13 @@ private void buildInviteCards(UICommandBuilder cmd, UIEventBuilder events, // Invited by String inviterName = getPlayerName(invite.invitedBy()); - cmd.set(prefix + "#InvitedBy.Text", "Invited by: " + inviterName); + cmd.set(prefix + "#InvitedBy.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.INVITED_BY, inviterName)); // Stats PowerManager.FactionPowerStats stats = powerManager.getFactionPowerStats(faction.id()); - cmd.set(prefix + "#MemberCount.Text", faction.members().size() + " members"); - cmd.set(prefix + "#PowerCount.Text", String.format("%.0f power", stats.currentPower())); - cmd.set(prefix + "#ClaimCount.Text", faction.claims().size() + " claims"); + cmd.set(prefix + "#MemberCount.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.MEMBER_COUNT, faction.members().size())); + cmd.set(prefix + "#PowerCount.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.POWER_COUNT, String.format("%.0f", stats.currentPower()))); + cmd.set(prefix + "#ClaimCount.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.CLAIM_COUNT, faction.claims().size())); // Time ago cmd.set(prefix + "#TimeAgo.Text", formatTimeAgo(invite.createdAt())); @@ -197,16 +201,16 @@ private void buildRequestCards(UICommandBuilder cmd, UIEventBuilder events, cmd.set(prefix + "#FactionName.Text", faction.name()); // Status - cmd.set(prefix + "#StatusText.Text", "Awaiting review"); + cmd.set(prefix + "#StatusText.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.AWAITING_REVIEW)); // Stats PowerManager.FactionPowerStats stats = powerManager.getFactionPowerStats(faction.id()); - cmd.set(prefix + "#MemberCount.Text", faction.members().size() + " members"); - cmd.set(prefix + "#PowerCount.Text", String.format("%.0f power", stats.currentPower())); + cmd.set(prefix + "#MemberCount.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.MEMBER_COUNT, faction.members().size())); + cmd.set(prefix + "#PowerCount.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.POWER_COUNT, String.format("%.0f", stats.currentPower()))); // Time remaining int hoursRemaining = request.getRemainingHours(); - cmd.set(prefix + "#TimeRemaining.Text", "Expires in " + hoursRemaining + "h"); + cmd.set(prefix + "#TimeRemaining.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.EXPIRES_IN, hoursRemaining)); // Cancel button events.addEventBinding( @@ -234,16 +238,16 @@ private String formatTimeAgo(long timestamp) { long diff = now - timestamp; if (diff < TimeUnit.MINUTES.toMillis(1)) { - return "just now"; + return HFMessages.get(playerRef, MessageKeys.NewPlayerGui.TIME_JUST_NOW); } else if (diff < TimeUnit.HOURS.toMillis(1)) { long minutes = TimeUnit.MILLISECONDS.toMinutes(diff); - return minutes + " min ago"; + return HFMessages.get(playerRef, MessageKeys.NewPlayerGui.TIME_MINUTES, minutes); } else if (diff < TimeUnit.DAYS.toMillis(1)) { long hours = TimeUnit.MILLISECONDS.toHours(diff); - return hours + "h ago"; + return HFMessages.get(playerRef, MessageKeys.NewPlayerGui.TIME_HOURS, hours); } else { long days = TimeUnit.MILLISECONDS.toDays(diff); - return days + "d ago"; + return HFMessages.get(playerRef, MessageKeys.NewPlayerGui.TIME_DAYS, days); } } @@ -309,7 +313,7 @@ private void handleAccept(Player player, Ref ref, Store ref, Store ref, Store { - player.sendMessage( - Message.raw("You joined ").color("#55FF55") - .insert(Message.raw(faction.name()).color("#00FFFF")) - .insert(Message.raw("!").color("#55FF55")) - ); + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.NewPlayerGui.JOINED, faction.name())); // Clear all invites and requests inviteManager.clearPlayerInvites(playerUuid); joinRequestManager.clearPlayerRequests(playerUuid); @@ -353,15 +353,15 @@ private void handleAccept(Player player, Ref ref, Store { - player.sendMessage(MessageUtil.errorText("You are already in a faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.Common.ALREADY_IN_FACTION)); sendUpdate(); } case FACTION_FULL -> { - player.sendMessage(MessageUtil.errorText("This faction is full.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.NewPlayerGui.FACTION_FULL)); sendUpdate(); } default -> { - player.sendMessage(MessageUtil.errorText("Could not join faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.NewPlayerGui.JOIN_FAILED)); sendUpdate(); } } @@ -382,7 +382,7 @@ private void handleDecline(Player player, Ref ref, Store ref, Store ref, UICommandBuilder cmd, // Load the main template cmd.append(UIPaths.NEWPLAYER_BROWSE); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.BROWSE_TITLE)); + cmd.set("#SearchLabel.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.SEARCH_LABEL)); + cmd.set("#SortLabel.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.SORT_LABEL)); + cmd.set("#PrevBtn.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.PREV_BTN)); + cmd.set("#NextBtn.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.NEXT_BTN)); + // Setup navigation bar for new players NewPlayerNavBarHelper.setupBar(playerRef, PAGE_ID, cmd, events); @@ -132,14 +140,14 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { // Get all factions sorted and filtered List entries = buildFactionEntryList(); - cmd.set("#FactionCount.Text", entries.size() + " factions"); - cmd.set("#Subtitle.Text", "Find your new home!"); + cmd.set("#FactionCount.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.FACTION_COUNT, entries.size())); + cmd.set("#Subtitle.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.BROWSE_SUBTITLE)); // Sort dropdown cmd.set("#SortDropdown.Entries", List.of( - new DropdownEntryInfo(LocalizableString.fromString("Power"), "POWER"), - new DropdownEntryInfo(LocalizableString.fromString("Name"), "NAME"), - new DropdownEntryInfo(LocalizableString.fromString("Members"), "MEMBERS") + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.NewPlayerGui.SORT_POWER)), "POWER"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.NewPlayerGui.SORT_NAME)), "NAME"), + new DropdownEntryInfo(LocalizableString.fromString(HFMessages.get(playerRef, MessageKeys.NewPlayerGui.SORT_MEMBERS)), "MEMBERS") )); cmd.set("#SortDropdown.Value", sortMode.name()); events.addEventBinding( @@ -179,7 +187,7 @@ private void buildFactionList(UICommandBuilder cmd, UIEventBuilder events) { } // Pagination - cmd.set("#PageInfo.Text", (currentPage + 1) + "/" + totalPages); + cmd.set("#PageInfo.Text", HFMessages.get(playerRef, MessageKeys.GuiCommon.PAGE_FORMAT, currentPage + 1, totalPages)); if (currentPage > 0) { events.addEventBinding( @@ -228,7 +236,7 @@ private List buildFactionEntryList() { stats.currentPower(), stats.maxPower(), faction.claims().size(), - leader != null ? leader.username() : "None", + leader != null ? leader.username() : HFMessages.get(playerRef, MessageKeys.Common.NONE), faction.open(), faction.description() )); @@ -264,10 +272,10 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int // Recruitment badge if (entry.isOpen) { - cmd.set(idx + " #RecruitmentBadge.Text", "Open"); + cmd.set(idx + " #RecruitmentBadge.Text", HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_OPEN)); cmd.set(idx + " #RecruitmentBadge.Style.TextColor", "#44CC44"); } else { - cmd.set(idx + " #RecruitmentBadge.Text", "Invite Only"); + cmd.set(idx + " #RecruitmentBadge.Text", HFMessages.get(playerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)); cmd.set(idx + " #RecruitmentBadge.Style.TextColor", "#FFAA00"); } @@ -275,6 +283,10 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int cmd.set(idx + " #PowerDisplay.Text", String.format("%.0f/%.0f", entry.power, entry.maxPower)); cmd.set(idx + " #MemberCount.Text", String.valueOf(entry.memberCount)); + // Localized stat labels + cmd.set(idx + " #PowerLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_POWER)); + cmd.set(idx + " #MemberLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_MEMBERS)); + // Expansion state cmd.set(idx + " #ExpandIcon.Visible", !isExpanded); cmd.set(idx + " #CollapseIcon.Visible", isExpanded); @@ -291,6 +303,12 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int // Extended info (only set values if expanded) if (isExpanded) { + // Localized extended labels + cmd.set(idx + " #LeaderLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_LEADER)); + cmd.set(idx + " #ClaimsLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_CLAIMS)); + cmd.set(idx + " #DescriptionLabel.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.LABEL_DESCRIPTION)); + cmd.set(idx + " #ViewInfoBtn.Text", HFMessages.get(playerRef, MessageKeys.BrowserGui.VIEW_INFO_BTN)); + // Leader and claims cmd.set(idx + " #LeaderName.Text", entry.leaderName); cmd.set(idx + " #ClaimsDisplay.Text", String.valueOf(entry.claimCount)); @@ -307,7 +325,7 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int // Note: TextButtons can't have Style.TextColor changed dynamically - use button text to convey state if (hasInvite) { // Player has pending invite - show ACCEPT button - cmd.set(idx + " #ActionBtn.Text", "Accept"); + cmd.set(idx + " #ActionBtn.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.BTN_ACCEPT)); events.addEventBinding( CustomUIEventBindingType.Activating, idx + " #ActionBtn", @@ -318,7 +336,7 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int ); } else if (hasRequest) { // Player already requested - show PENDING button (goes to invites page) - cmd.set(idx + " #ActionBtn.Text", "Pending"); + cmd.set(idx + " #ActionBtn.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.BTN_PENDING)); events.addEventBinding( CustomUIEventBindingType.Activating, idx + " #ActionBtn", @@ -327,7 +345,7 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int ); } else if (entry.isOpen) { // Open faction - JOIN button - cmd.set(idx + " #ActionBtn.Text", "Join"); + cmd.set(idx + " #ActionBtn.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.BTN_JOIN)); events.addEventBinding( CustomUIEventBindingType.Activating, idx + " #ActionBtn", @@ -338,7 +356,7 @@ private void buildFactionEntry(UICommandBuilder cmd, UIEventBuilder events, int ); } else { // Invite-only faction - REQUEST button - cmd.set(idx + " #ActionBtn.Text", "Request"); + cmd.set(idx + " #ActionBtn.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.BTN_REQUEST)); events.addEventBinding( CustomUIEventBindingType.Activating, idx + " #ActionBtn", @@ -461,7 +479,7 @@ private void handleViewFaction(Player player, Ref ref, Store ref, Store ref, Store ref, Store { - player.sendMessage( - Message.raw("You joined ").color("#55FF55") - .insert(Message.raw(faction.name()).color("#00FFFF")) - .insert(Message.raw("!").color("#55FF55")) - ); + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.NewPlayerGui.JOINED, faction.name())); // Clear any pending invites inviteManager.clearPlayerInvites(playerRef.getUuid()); // Open faction dashboard - use fresh faction data @@ -526,25 +540,25 @@ private void handleJoinFaction(Player player, Ref ref, Store { - player.sendMessage(MessageUtil.errorText("You are already in a faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.Common.ALREADY_IN_FACTION)); sendUpdate(); } case FACTION_NOT_FOUND -> { - player.sendMessage(MessageUtil.errorText("Faction not found.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.Common.FACTION_NOT_FOUND)); sendUpdate(); } case FACTION_FULL -> { - player.sendMessage(MessageUtil.errorText("This faction is full.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.NewPlayerGui.FACTION_FULL)); sendUpdate(); } default -> { - player.sendMessage(MessageUtil.errorText("Could not join faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.NewPlayerGui.JOIN_FAILED)); sendUpdate(); } } @@ -559,7 +573,7 @@ private void handleAcceptInvite(Player player, Ref ref, Store ref, Store ref, Store { - player.sendMessage( - Message.raw("You joined ").color("#55FF55") - .insert(Message.raw(faction.name()).color("#00FFFF")) - .insert(Message.raw("!").color("#55FF55")) - ); + player.sendMessage(MessageUtil.successText(playerRef, MessageKeys.NewPlayerGui.JOINED, faction.name())); // Clear invite and other pending invites inviteManager.clearPlayerInvites(playerUuid); // Open faction dashboard @@ -604,15 +614,15 @@ private void handleAcceptInvite(Player player, Ref ref, Store { - player.sendMessage(MessageUtil.errorText("You are already in a faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.Common.ALREADY_IN_FACTION)); sendUpdate(); } case FACTION_FULL -> { - player.sendMessage(MessageUtil.errorText("This faction is full.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.NewPlayerGui.FACTION_FULL)); sendUpdate(); } default -> { - player.sendMessage(MessageUtil.errorText("Could not join faction.")); + player.sendMessage(MessageUtil.errorText(playerRef, MessageKeys.NewPlayerGui.JOIN_FAILED)); sendUpdate(); } } @@ -627,7 +637,7 @@ private void handleRequestJoin(Player player, Ref ref, Store ref, Store ref, Store ref, Store ref, UICommandBuilder cmd, Player player = store.getComponent(ref, Player.getComponentType()); TransformComponent transform = store.getComponent(ref, TransformComponent.getComponentType()); World world = player != null ? player.getWorld() : null; - String worldName = world != null ? world.getName() : "world"; + String worldName = world != null ? world.getName() : HFMessages.get(playerRef, MessageKeys.Common.WORLD_FALLBACK); int playerChunkX = 0; int playerChunkZ = 0; @@ -134,11 +136,20 @@ public void build(Ref ref, UICommandBuilder cmd, // Setup navigation bar for new players (instead of faction nav bar) NewPlayerNavBarHelper.setupBar(playerRef, PAGE_ID, cmd, events); - // Update position info - cmd.set("#PositionInfo.Text", "Your Position: Chunk (" + playerChunkX + ", " + playerChunkZ + ")"); - - // Update hint text for read-only mode - cmd.set("#ActionHint.Text", "View Only - Join a faction to claim territory!"); + // Localize static labels (title, position, legend) + cmd.set("#MapTitle.Text", HFMessages.get(playerRef, MessageKeys.MapGui.TITLE)); + cmd.set("#PositionInfo.Text", HFMessages.get(playerRef, MessageKeys.MapGui.POSITION, playerChunkX, playerChunkZ)); + cmd.set("#ActionHint.Text", HFMessages.get(playerRef, MessageKeys.NewPlayerGui.MAP_HINT)); + cmd.set("#LegendYourLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_YOUR)); + cmd.set("#LegendAllyLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_ALLY)); + cmd.set("#LegendEnemyLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_ENEMY)); + cmd.set("#LegendOtherLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_OTHER)); + if (!terrainEnabled) { + cmd.set("#LegendWildernessLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_WILDERNESS)); + } + cmd.set("#LegendSafeLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_SAFE)); + cmd.set("#LegendWarLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_WAR)); + cmd.set("#LegendYouLabel.Text", HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_YOU)); // Hide claim/power stats (not relevant for new players) cmd.set("#ClaimStats.Text", ""); @@ -155,12 +166,12 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.appendInline("#LegendContainer[1]", "Group { LayoutMode: Left; Anchor: (Width: 110); " + "Group { Anchor: (Width: 10, Height: 10); Background: (Color: " + COLOR_OG_PROTECTED + "); } " - + "Label { Text: \" Protected\"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } }"); + + "Label { Text: \" " + HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_PROTECTED) + "\"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } }"); } else { cmd.appendInline("#LegendContainer[2]", "Group { LayoutMode: Left; Anchor: (Height: 16); " + "Group { Anchor: (Width: 12, Height: 12); Background: (Color: " + COLOR_OG_PROTECTED + "); } " - + "Label { Text: \" Protected\"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } }"); + + "Label { Text: \" " + HFMessages.get(playerRef, MessageKeys.MapGui.LEGEND_PROTECTED) + "\"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } }"); } } diff --git a/src/main/java/com/hyperfactions/gui/shared/NavBarUtil.java b/src/main/java/com/hyperfactions/gui/shared/NavBarUtil.java index 8bf44a82..ca3ee688 100644 --- a/src/main/java/com/hyperfactions/gui/shared/NavBarUtil.java +++ b/src/main/java/com/hyperfactions/gui/shared/NavBarUtil.java @@ -1,10 +1,12 @@ package com.hyperfactions.gui.shared; import com.hyperfactions.integration.PermissionManager; +import com.hyperfactions.util.HFMessages; import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; import com.hypixel.hytale.server.core.ui.builder.EventData; import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder; import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder; +import com.hypixel.hytale.server.core.universe.PlayerRef; import java.util.List; import java.util.UUID; import org.jetbrains.annotations.NotNull; @@ -20,6 +22,8 @@ private NavBarUtil() {} /** * Builds navigation buttons inside a cards container. + * The entry's {@code displayName()} is treated as an i18n key and resolved + * via {@link HFMessages} for the given player. * * @param entries The nav entries to render * @param cardsId The cards container selector (e.g., "#NavCards") @@ -27,6 +31,7 @@ private NavBarUtil() {} * @param buttonId The button element ID within the template (e.g., "#NavActionButton") * @param eventType The event type value (e.g., "Nav" or "AdminNav") * @param eventKey The event data key (e.g., "NavBar" or "AdminNavBar") + * @param playerRef The player viewing the page (for i18n resolution) * @param cmd The UI command builder * @param events The UI event builder */ @@ -37,13 +42,15 @@ public static void buildButtons( @NotNull String buttonId, @NotNull String eventType, @NotNull String eventKey, + @NotNull PlayerRef playerRef, @NotNull UICommandBuilder cmd, @NotNull UIEventBuilder events ) { int index = 0; for (NavEntry entry : entries) { cmd.append(cardsId, templatePath); - cmd.set(cardsId + "[" + index + "] " + buttonId + ".Text", entry.displayName()); + cmd.set(cardsId + "[" + index + "] " + buttonId + ".Text", + HFMessages.get(playerRef, entry.displayName())); events.addEventBinding( CustomUIEventBindingType.Activating, cardsId + "[" + index + "] " + buttonId, diff --git a/src/main/java/com/hyperfactions/gui/shared/data/PlayerSettingsData.java b/src/main/java/com/hyperfactions/gui/shared/data/PlayerSettingsData.java new file mode 100644 index 00000000..b395bc31 --- /dev/null +++ b/src/main/java/com/hyperfactions/gui/shared/data/PlayerSettingsData.java @@ -0,0 +1,51 @@ +package com.hyperfactions.gui.shared.data; + +import com.hypixel.hytale.codec.Codec; +import com.hypixel.hytale.codec.KeyedCodec; +import com.hypixel.hytale.codec.builder.BuilderCodec; + +/** + * Data for the Player Settings page. + * Handles notification toggles, language selection, and navigation. + */ +public class PlayerSettingsData implements NavAwareData { + + /** The button/action that triggered the event. */ + public String button; + + /** Navigation target from NavBar button. */ + public String navBar; + + /** Language selected from dropdown (dynamic @-prefixed value). */ + public String language; + + /** Codec for serialization/deserialization. */ + public static final BuilderCodec CODEC = BuilderCodec + .builder(PlayerSettingsData.class, PlayerSettingsData::new) + .addField( + new KeyedCodec<>("Button", Codec.STRING), + (data, value) -> data.button = value, + data -> data.button + ) + .addField( + new KeyedCodec<>("NavBar", Codec.STRING), + (data, value) -> data.navBar = value, + data -> data.navBar + ) + .addField( + new KeyedCodec<>("@Language", Codec.STRING), + (data, value) -> data.language = value, + data -> data.language + ) + .build(); + + /** Creates a new PlayerSettingsData. */ + public PlayerSettingsData() { + } + + /** Returns the nav bar. */ + @Override + public String getNavBar() { + return navBar; + } +} diff --git a/src/main/java/com/hyperfactions/gui/shared/page/DescriptionModalPage.java b/src/main/java/com/hyperfactions/gui/shared/page/DescriptionModalPage.java index faeef87c..01f5efaf 100644 --- a/src/main/java/com/hyperfactions/gui/shared/page/DescriptionModalPage.java +++ b/src/main/java/com/hyperfactions/gui/shared/page/DescriptionModalPage.java @@ -7,6 +7,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.shared.data.DescriptionModalData; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -70,10 +72,18 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the modal template cmd.append(UIPaths.DESCRIPTION_MODAL); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.DescGui.TITLE)); + cmd.set("#CurrentLabel.Text", HFMessages.get(playerRef, MessageKeys.DescGui.CURRENT_LABEL)); + cmd.set("#NewDescLabel.Text", HFMessages.get(playerRef, MessageKeys.DescGui.NEW_DESC_LABEL)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#ClearBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CLEAR)); + cmd.set("#SaveBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.SAVE)); + // Show current description String currentDesc = faction.description(); if (currentDesc == null || currentDesc.isEmpty()) { - cmd.set("#CurrentDesc.Text", "(None)"); + cmd.set("#CurrentDesc.Text", HFMessages.get(playerRef, MessageKeys.DescGui.DISPLAY_NONE)); } else { // Truncate display if too long String display = currentDesc.length() > 100 @@ -125,7 +135,7 @@ public void handleDataEvent(Ref ref, Store store, // Verify officer permission (skip in admin mode) if (!adminMode && (member == null || member.role().getLevel() < FactionRole.OFFICER.getLevel())) { - player.sendMessage(MessageUtil.errorText("You don't have permission to edit the description.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.DescGui.NO_PERMISSION)); guiManager.openFactionSettings(player, ref, store, playerRef, factionManager.getFaction(faction.id())); return; @@ -146,8 +156,11 @@ public void handleDataEvent(Ref ref, Store store, Faction updatedFaction = faction.withDescription(null); factionManager.updateFaction(updatedFaction); - String prefix = adminMode ? "[Admin] " : ""; - player.sendMessage(Message.raw(prefix + "Faction description cleared.").color("#AAAAAA")); + String msg = HFMessages.get(playerRef, MessageKeys.DescGui.CLEARED); + if (adminMode) { + msg = HFMessages.get(playerRef, MessageKeys.Common.ADMIN_PREFIX) + " " + msg; + } + player.sendMessage(Message.raw(msg).color("#AAAAAA")); if (adminMode) { guiManager.openAdminFactionSettings(player, ref, store, playerRef, faction.id()); @@ -159,13 +172,16 @@ public void handleDataEvent(Ref ref, Store store, case "Save" -> { String newDesc = data.description; - String prefix = adminMode ? "[Admin] " : ""; // Empty is allowed (clears description) if (newDesc == null || newDesc.trim().isEmpty()) { Faction updatedFaction = faction.withDescription(null); factionManager.updateFaction(updatedFaction); - player.sendMessage(Message.raw(prefix + "Faction description cleared.").color("#AAAAAA")); + String clearMsg = HFMessages.get(playerRef, MessageKeys.DescGui.CLEARED); + if (adminMode) { + clearMsg = HFMessages.get(playerRef, MessageKeys.Common.ADMIN_PREFIX) + " " + clearMsg; + } + player.sendMessage(Message.raw(clearMsg).color("#AAAAAA")); } else { newDesc = newDesc.trim(); @@ -176,7 +192,11 @@ public void handleDataEvent(Ref ref, Store store, Faction updatedFaction = faction.withDescription(newDesc); factionManager.updateFaction(updatedFaction); - player.sendMessage(Message.raw(prefix + "Faction description updated!").color("#55FF55")); + String updateMsg = HFMessages.get(playerRef, MessageKeys.DescGui.UPDATED); + if (adminMode) { + updateMsg = HFMessages.get(playerRef, MessageKeys.Common.ADMIN_PREFIX) + " " + updateMsg; + } + player.sendMessage(Message.raw(updateMsg).color("#55FF55")); } if (adminMode) { diff --git a/src/main/java/com/hyperfactions/gui/shared/page/FactionInfoPage.java b/src/main/java/com/hyperfactions/gui/shared/page/FactionInfoPage.java index 40b25576..20bc9ed1 100644 --- a/src/main/java/com/hyperfactions/gui/shared/page/FactionInfoPage.java +++ b/src/main/java/com/hyperfactions/gui/shared/page/FactionInfoPage.java @@ -11,6 +11,8 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.PowerManager; import com.hyperfactions.manager.RelationManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.TimeUtil; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; @@ -134,6 +136,9 @@ public void build(Ref ref, UICommandBuilder cmd, Faction viewerFaction = factionManager.getPlayerFaction(viewerRef.getUuid()); boolean isOwnFaction = viewerFaction != null && viewerFaction.id().equals(targetFaction.id()); + // === Page Title === + cmd.set("#PageTitle.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.TITLE)); + // === Header Section === // Faction name cmd.set("#FactionName.Text", targetFaction.name()); @@ -150,13 +155,37 @@ public void build(Ref ref, UICommandBuilder cmd, // Description String description = targetFaction.description(); cmd.set("#FactionDescription.Text", - description != null && !description.isEmpty() ? description : "No description set."); + description != null && !description.isEmpty() ? description + : HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.NO_DESCRIPTION)); // Open/Closed status indicator - cmd.set("#StatusIndicator.Text", targetFaction.open() ? "Open" : "Invite Only"); + cmd.set("#StatusIndicator.Text", targetFaction.open() + ? HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.STATUS_OPEN) + : HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)); // Note: Cannot dynamically set text color via cmd.set() // === Stats Section === + // Set stat card headers and subtitles + cmd.set("#PowerHeader.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.POWER_HEADER)); + cmd.set("#PowerSubtitle.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.CURRENT_MAX)); + cmd.set("#ClaimsHeader.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.CLAIMS_HEADER)); + cmd.set("#ClaimsSubtitle.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.CLAIMED_MAX)); + cmd.set("#MembersHeader.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.MEMBERS_HEADER)); + cmd.set("#RelationsHeader.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.RELATIONS_HEADER)); + cmd.set("#RelationsSubtitle.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.ALLY_ENEMY)); + cmd.set("#StatusHeader.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.STATUS_HEADER)); + cmd.set("#TreasuryHeader.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.TREASURY_HEADER)); + cmd.set("#TreasurySubtitle.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.FACTION_BALANCE)); + + // Leadership labels + cmd.set("#LeaderLabel.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.LEADER_LABEL)); + cmd.set("#OfficersLabel.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.OFFICERS_LABEL)); + + // Button text + cmd.set("#ViewMembersBtn.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.VIEW_MEMBERS_BTN)); + cmd.set("#ViewRelationsBtn.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.RELATIONS_BTN)); + cmd.set("#BackBtn.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.BACK_BTN)); + PowerManager.FactionPowerStats powerStats = powerManager.getFactionPowerStats(targetFaction.id()); // Power @@ -171,7 +200,9 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.set("#MembersValue.Text", String.format("%d / %d", memberCount, maxMembers)); // Recruitment status - cmd.set("#RecruitmentValue.Text", targetFaction.open() ? "Open" : "Invite Only"); + cmd.set("#RecruitmentValue.Text", targetFaction.open() + ? HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.STATUS_OPEN) + : HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.STATUS_INVITE_ONLY)); // Note: Cannot dynamically set text color via cmd.set() // Founded date @@ -185,11 +216,9 @@ public void build(Ref ref, UICommandBuilder cmd, // Raidable status if (powerStats.isRaidable()) { - cmd.set("#RaidableValue.Text", "Raidable"); - // Note: Cannot dynamically set text color via cmd.set() + cmd.set("#RaidableValue.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.STATUS_RAIDABLE)); } else { - cmd.set("#RaidableValue.Text", "Protected"); - // Note: Cannot dynamically set text color via cmd.set() + cmd.set("#RaidableValue.Text", HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.STATUS_PROTECTED)); } // Treasury balance (visible when economy enabled) @@ -202,21 +231,23 @@ public void build(Ref ref, UICommandBuilder cmd, // === Leadership Section === // Leader FactionMember leader = targetFaction.getLeader(); - cmd.set("#LeaderName.Text", leader != null ? leader.username() : "Unknown"); + cmd.set("#LeaderName.Text", leader != null ? leader.username() + : HFMessages.get(viewerRef, MessageKeys.Common.UNKNOWN)); // Officers List officers = targetFaction.getMembersSorted().stream() .filter(m -> m.role() == FactionRole.OFFICER) .toList(); if (officers.isEmpty()) { - cmd.set("#OfficersValue.Text", "None"); + cmd.set("#OfficersValue.Text", HFMessages.get(viewerRef, MessageKeys.Common.NONE)); } else { String officerNames = officers.stream() .map(FactionMember::username) .limit(3) // Show max 3 names .collect(Collectors.joining(", ")); if (officers.size() > 3) { - officerNames += " +" + (officers.size() - 3) + " more"; + officerNames += " " + HFMessages.get(viewerRef, MessageKeys.FactionInfoGui.OFFICERS_MORE, + officers.size() - 3); } cmd.set("#OfficersValue.Text", officerNames); } diff --git a/src/main/java/com/hyperfactions/gui/shared/page/MainMenuPage.java b/src/main/java/com/hyperfactions/gui/shared/page/MainMenuPage.java index 8084d3ba..77270444 100644 --- a/src/main/java/com/hyperfactions/gui/shared/page/MainMenuPage.java +++ b/src/main/java/com/hyperfactions/gui/shared/page/MainMenuPage.java @@ -6,6 +6,8 @@ import com.hyperfactions.gui.shared.data.MainMenuData; import com.hyperfactions.integration.PermissionManager; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; @@ -54,12 +56,12 @@ public void build(Ref ref, UICommandBuilder cmd, cmd.append(UIPaths.MAIN_MENU); // Set title - cmd.set("#MenuTitle.Text", "HyperFactions"); + cmd.set("#MenuTitle.Text", HFMessages.get(playerRef, MessageKeys.MainMenu.TITLE)); // Section: My Faction if (faction != null) { cmd.append("#MyFactionSection", UIPaths.MENU_SECTION); - cmd.set("#MyFactionSection #SectionTitle.Text", "My Faction"); + cmd.set("#MyFactionSection #SectionTitle.Text", HFMessages.get(playerRef, MessageKeys.MainMenu.SECTION_MY_FACTION)); cmd.append("#MyFactionSection #SectionContent", UIPaths.MAIN_MENU_FACTION); cmd.set("#MyFactionSection #FactionNameLabel.Text", faction.name()); @@ -85,7 +87,7 @@ public void build(Ref ref, UICommandBuilder cmd, ); } else { cmd.append("#MyFactionSection", UIPaths.MENU_SECTION); - cmd.set("#MyFactionSection #SectionTitle.Text", "Get Started"); + cmd.set("#MyFactionSection #SectionTitle.Text", HFMessages.get(playerRef, MessageKeys.MainMenu.SECTION_GET_STARTED)); cmd.append("#MyFactionSection #SectionContent", UIPaths.MAIN_MENU_NO_FACTION); events.addEventBinding( @@ -98,7 +100,7 @@ public void build(Ref ref, UICommandBuilder cmd, // Section: Territory cmd.append("#TerritorySection", UIPaths.MENU_SECTION); - cmd.set("#TerritorySection #SectionTitle.Text", "Territory"); + cmd.set("#TerritorySection #SectionTitle.Text", HFMessages.get(playerRef, MessageKeys.MainMenu.SECTION_TERRITORY)); cmd.append("#TerritorySection #SectionContent", UIPaths.MAIN_MENU_TERRITORY); events.addEventBinding( @@ -119,7 +121,7 @@ public void build(Ref ref, UICommandBuilder cmd, // Section: Browse cmd.append("#BrowseSection", UIPaths.MENU_SECTION); - cmd.set("#BrowseSection #SectionTitle.Text", "Browse"); + cmd.set("#BrowseSection #SectionTitle.Text", HFMessages.get(playerRef, MessageKeys.MainMenu.SECTION_BROWSE)); cmd.append("#BrowseSection #SectionContent", UIPaths.MAIN_MENU_BROWSE); events.addEventBinding( @@ -132,7 +134,7 @@ public void build(Ref ref, UICommandBuilder cmd, // Section: Admin (if permission) if (hasAdmin) { cmd.append("#AdminSection", UIPaths.MENU_SECTION); - cmd.set("#AdminSection #SectionTitle.Text", "Admin"); + cmd.set("#AdminSection #SectionTitle.Text", HFMessages.get(playerRef, MessageKeys.MainMenu.SECTION_ADMIN)); cmd.append("#AdminSection #SectionContent", UIPaths.MAIN_MENU_ADMIN); events.addEventBinding( @@ -194,10 +196,8 @@ public void handleDataEvent(Ref ref, Store store, if (faction != null) { guiManager.closePage(player, ref, store); player.sendMessage( - com.hypixel.hytale.server.core.Message.raw("Use ") - .color("#AAAAAA") - .insert(com.hypixel.hytale.server.core.Message.raw("/f claim").color("#55FF55")) - .insert(com.hypixel.hytale.server.core.Message.raw(" to claim territory.").color("#AAAAAA")) + com.hypixel.hytale.server.core.Message.raw( + HFMessages.get(playerRef, MessageKeys.MainMenu.CLAIM_HINT)).color("#AAAAAA") ); } } diff --git a/src/main/java/com/hyperfactions/gui/shared/page/PlayerSettingsPage.java b/src/main/java/com/hyperfactions/gui/shared/page/PlayerSettingsPage.java new file mode 100644 index 00000000..93720adb --- /dev/null +++ b/src/main/java/com/hyperfactions/gui/shared/page/PlayerSettingsPage.java @@ -0,0 +1,336 @@ +package com.hyperfactions.gui.shared.page; + +import com.hyperfactions.data.Faction; +import com.hyperfactions.gui.GuiManager; +import com.hyperfactions.gui.UIPaths; +import com.hyperfactions.gui.faction.NavBarHelper; +import com.hyperfactions.gui.newplayer.NewPlayerNavBarHelper; +import com.hyperfactions.gui.shared.data.PlayerSettingsData; +import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.storage.PlayerStorage; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; +import com.hyperfactions.util.MessageUtil; +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; +import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType; +import com.hypixel.hytale.server.core.entity.entities.Player; +import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; +import com.hypixel.hytale.server.core.ui.builder.EventData; +import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder; +import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder; +import com.hypixel.hytale.server.core.universe.PlayerRef; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import com.hypixel.hytale.server.core.ui.DropdownEntryInfo; +import com.hypixel.hytale.server.core.ui.LocalizableString; +import java.util.List; +import java.util.Locale; +import java.util.UUID; +import org.jetbrains.annotations.NotNull; + +/** + * Player Settings page for personal preferences. + * Allows players to configure language and notification preferences. + * Works for both faction members and players without a faction. + */ +public class PlayerSettingsPage extends InteractiveCustomUIPage { + + private static final String PAGE_ID = "player_settings"; + + /** Available locale codes. New locales are added here as translations are completed. */ + private static final List AVAILABLE_LOCALES = List.of( + "en-US", + "es-ES", + "de-DE", + "fr-FR", + "pt-BR", + "ru-RU", + "pl-PL", + "it-IT", + "nl-NL", + "tl-PH" + ); + + /** + * Returns a compact native display name for a locale code (e.g. "es-ES" → "Español (ES)"). + * Language name is shown in its own language; country uses the short ISO code. + */ + private static String nativeDisplayName(String localeCode) { + Locale locale = Locale.forLanguageTag(localeCode); + String lang = locale.getDisplayLanguage(locale); + // Capitalize first letter (Java returns lowercase for some locales) + if (!lang.isEmpty()) { + lang = Character.toUpperCase(lang.charAt(0)) + lang.substring(1); + } + String country = locale.getCountry(); + return country.isEmpty() ? lang : lang + " (" + country + ")"; + } + + private final PlayerRef playerRef; + + private final FactionManager factionManager; + + private final PlayerStorage playerStorage; + + private final GuiManager guiManager; + + private final Faction faction; + + // Cached preferences (loaded from player data) + private boolean territoryAlerts = true; + + private boolean deathAnnouncements = true; + + private boolean powerNotifications = true; + + private String languagePreference; // null = auto-detect + + /** Creates a new PlayerSettingsPage. */ + public PlayerSettingsPage(@NotNull PlayerRef playerRef, + @NotNull FactionManager factionManager, + @NotNull PlayerStorage playerStorage, + @NotNull GuiManager guiManager) { + super(playerRef, CustomPageLifetime.CanDismiss, PlayerSettingsData.CODEC); + this.playerRef = playerRef; + this.factionManager = factionManager; + this.playerStorage = playerStorage; + this.guiManager = guiManager; + this.faction = factionManager.getPlayerFaction(playerRef.getUuid()); + + // Load current preferences + loadPreferences(); + } + + private void loadPreferences() { + playerStorage.loadPlayerData(playerRef.getUuid()).thenAccept(opt -> { + opt.ifPresent(data -> { + this.territoryAlerts = data.isTerritoryAlertsEnabled(); + this.deathAnnouncements = data.isDeathAnnouncementsEnabled(); + this.powerNotifications = data.isPowerNotificationsEnabled(); + this.languagePreference = data.getLanguagePreference(); + }); + }); + } + + /** Builds the page. */ + @Override + public void build(Ref ref, UICommandBuilder cmd, + UIEventBuilder events, Store store) { + + // Load the template + cmd.append(UIPaths.PLAYER_SETTINGS); + + // Page title + cmd.set("#PageTitle.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.TITLE)); + + // Setup nav bar based on faction status + if (faction != null) { + NavBarHelper.setupBar(playerRef, faction, PAGE_ID, cmd, events); + } else { + NewPlayerNavBarHelper.setupBar(playerRef, PAGE_ID, cmd, events); + } + + // === Language Section === + cmd.set("#LanguageSectionTitle.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.LANGUAGE_SECTION)); + cmd.set("#AutoDetectDesc.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.AUTO_DETECT_DESC)); + cmd.set("#LanguageLabel.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.LANGUAGE_LABEL)); + + // Auto-detect checkbox + cmd.set("#AutoDetectLabel.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.AUTO_DETECT)); + boolean autoDetect = (languagePreference == null); + cmd.set("#AutoDetectCB #CheckBox.Value", autoDetect); + + // Auto-detect checkbox event + events.addEventBinding( + CustomUIEventBindingType.ValueChanged, + "#AutoDetectCB #CheckBox", + EventData.of("Button", "ToggleAutoDetect"), + false + ); + + // Language dropdown — display names in native language + List localeEntries = new java.util.ArrayList<>(); + for (String code : AVAILABLE_LOCALES) { + localeEntries.add(new DropdownEntryInfo( + LocalizableString.fromString(nativeDisplayName(code)), + code)); + } + cmd.set("#LanguageDropdown.Entries", localeEntries); + String selectedLocale = (languagePreference != null && AVAILABLE_LOCALES.contains(languagePreference)) + ? languagePreference : AVAILABLE_LOCALES.get(0); + cmd.set("#LanguageDropdown.Value", selectedLocale); + + // Disable dropdown when auto-detect is on + if (autoDetect) { + cmd.set("#LanguageDropdown.Disabled", true); + } + + // Language dropdown change event + events.addEventBinding( + CustomUIEventBindingType.ValueChanged, + "#LanguageDropdown", + EventData.of("Button", "LanguageChanged") + .append("@Language", "#LanguageDropdown.Value"), + false + ); + + // === Notifications Section === + cmd.set("#NotifSectionTitle.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.NOTIFICATIONS_SECTION)); + + // Territory Alerts + cmd.set("#TerritoryAlertsLabel.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.TERRITORY_ALERTS)); + buildNotificationToggle(cmd, events, "#TerritoryAlertsCB", + MessageKeys.PlayerSettings.TERRITORY_ALERTS, + MessageKeys.PlayerSettings.TERRITORY_ALERTS_DESC, + "#TerritoryAlertsDesc", territoryAlerts, "ToggleTerritoryAlerts"); + + // Death Announcements + cmd.set("#DeathAnnounceLabel.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.DEATH_ANNOUNCEMENTS)); + buildNotificationToggle(cmd, events, "#DeathAnnounceCB", + MessageKeys.PlayerSettings.DEATH_ANNOUNCEMENTS, + MessageKeys.PlayerSettings.DEATH_ANNOUNCEMENTS_DESC, + "#DeathAnnounceDesc", deathAnnouncements, "ToggleDeathAnnouncements"); + + // TODO: Wire up power change notifications in PowerManager, then enable this toggle + // Power Notifications (not yet wired up — disable toggle) + cmd.set("#PowerNotifLabel.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.POWER_NOTIFICATIONS)); + cmd.set("#PowerNotifDesc.Text", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.POWER_NOTIFICATIONS_DESC)); + cmd.set("#PowerNotifCB #CheckBox.Value", powerNotifications); + cmd.set("#PowerNotifCB #CheckBox.Disabled", true); + } + + private void buildNotificationToggle(UICommandBuilder cmd, UIEventBuilder events, + String checkboxId, String labelKey, String descKey, + String descId, boolean value, String action) { + cmd.set(checkboxId + " #CheckBox.Value", value); + + // Set localized label text + // Note: @Text param is set in .ui, but we override via child label + // CheckBoxWithLabel template has a Label child we can target + + // Description text + cmd.set(descId + ".Text", HFMessages.get(playerRef, descKey)); + + // ValueChanged event + events.addEventBinding( + CustomUIEventBindingType.ValueChanged, + checkboxId + " #CheckBox", + EventData.of("Button", action), + false + ); + } + + /** Handles data event. */ + @Override + public void handleDataEvent(Ref ref, Store store, + PlayerSettingsData data) { + super.handleDataEvent(ref, store, data); + + Player player = store.getComponent(ref, Player.getComponentType()); + PlayerRef playerRef = store.getComponent(ref, PlayerRef.getComponentType()); + + if (player == null || playerRef == null) { + return; + } + + // Handle nav bar events + if (data.navBar != null && !data.navBar.isEmpty()) { + if (faction != null) { + if (NavBarHelper.handleNavEvent(data, player, ref, store, playerRef, faction, guiManager)) { + return; + } + } else { + if (NewPlayerNavBarHelper.handleNavEvent(data, player, ref, store, playerRef, guiManager)) { + return; + } + } + } + + if (data.button == null) { + return; + } + + UUID uuid = playerRef.getUuid(); + + switch (data.button) { + case "ToggleAutoDetect" -> { + // Toggle auto-detect: if currently auto (null), set to current client language + // If currently manual, set to null (auto) + if (languagePreference == null) { + // Switching to manual - use current client language + languagePreference = playerRef.getLanguage(); + } else { + // Switching to auto-detect + languagePreference = null; + } + savePreference(uuid, d -> d.setLanguagePreference(languagePreference)); + HFMessages.setLanguageOverride(uuid, languagePreference); + rebuild(); + } + + case "LanguageChanged" -> { + // Dropdown value is the locale code string (e.g. "en-US") + if (data.language != null && AVAILABLE_LOCALES.contains(data.language)) { + languagePreference = data.language; + savePreference(uuid, d -> d.setLanguagePreference(languagePreference)); + HFMessages.setLanguageOverride(uuid, languagePreference); + player.sendMessage(MessageUtil.successText(playerRef, + MessageKeys.PlayerSettings.LANGUAGE_CHANGED, + nativeDisplayName(data.language))); + } + rebuild(); + } + + case "ToggleTerritoryAlerts" -> { + territoryAlerts = !territoryAlerts; + savePreference(uuid, d -> d.setTerritoryAlertsEnabled(territoryAlerts)); + player.sendMessage(territoryAlerts + ? MessageUtil.successText(playerRef, MessageKeys.PlayerSettings.PREF_ENABLED, + HFMessages.get(playerRef, MessageKeys.PlayerSettings.TERRITORY_ALERTS)) + : MessageUtil.text(playerRef, MessageKeys.PlayerSettings.PREF_DISABLED, "#FFAA00", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.TERRITORY_ALERTS))); + rebuild(); + } + + case "ToggleDeathAnnouncements" -> { + deathAnnouncements = !deathAnnouncements; + savePreference(uuid, d -> d.setDeathAnnouncementsEnabled(deathAnnouncements)); + player.sendMessage(deathAnnouncements + ? MessageUtil.successText(playerRef, MessageKeys.PlayerSettings.PREF_ENABLED, + HFMessages.get(playerRef, MessageKeys.PlayerSettings.DEATH_ANNOUNCEMENTS)) + : MessageUtil.text(playerRef, MessageKeys.PlayerSettings.PREF_DISABLED, "#FFAA00", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.DEATH_ANNOUNCEMENTS))); + rebuild(); + } + + case "TogglePowerNotifications" -> { + powerNotifications = !powerNotifications; + savePreference(uuid, d -> d.setPowerNotificationsEnabled(powerNotifications)); + player.sendMessage(powerNotifications + ? MessageUtil.successText(playerRef, MessageKeys.PlayerSettings.PREF_ENABLED, + HFMessages.get(playerRef, MessageKeys.PlayerSettings.POWER_NOTIFICATIONS)) + : MessageUtil.text(playerRef, MessageKeys.PlayerSettings.PREF_DISABLED, "#FFAA00", + HFMessages.get(playerRef, MessageKeys.PlayerSettings.POWER_NOTIFICATIONS))); + rebuild(); + } + + default -> sendUpdate(); + } + } + + private void savePreference(UUID uuid, + java.util.function.Consumer updater) { + playerStorage.updatePlayerData(uuid, updater); + } +} diff --git a/src/main/java/com/hyperfactions/gui/shared/page/RenameModalPage.java b/src/main/java/com/hyperfactions/gui/shared/page/RenameModalPage.java index a2f496b3..e0ba2076 100644 --- a/src/main/java/com/hyperfactions/gui/shared/page/RenameModalPage.java +++ b/src/main/java/com/hyperfactions/gui/shared/page/RenameModalPage.java @@ -7,6 +7,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.shared.data.RenameModalData; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.worldmap.WorldMapService; import com.hypixel.hytale.component.Ref; @@ -80,6 +82,13 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the modal template cmd.append(UIPaths.RENAME_MODAL); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.RenameGui.TITLE)); + cmd.set("#CurrentLabel.Text", HFMessages.get(playerRef, MessageKeys.RenameGui.CURRENT_LABEL)); + cmd.set("#NewNameLabel.Text", HFMessages.get(playerRef, MessageKeys.RenameGui.NEW_NAME_LABEL)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#SaveBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.SAVE)); + // Show current name cmd.set("#CurrentName.Text", faction.name()); @@ -118,7 +127,7 @@ public void handleDataEvent(Ref ref, Store store, // Verify officer permission (skip in admin mode) if (!adminMode && (member == null || member.role().getLevel() < FactionRole.OFFICER.getLevel())) { - player.sendMessage(MessageUtil.errorText("You don't have permission to rename the faction.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RenameGui.NO_PERMISSION)); guiManager.openFactionSettings(player, ref, store, playerRef, factionManager.getFaction(faction.id())); return; @@ -139,7 +148,7 @@ public void handleDataEvent(Ref ref, Store store, // Validation if (newName == null || newName.trim().isEmpty()) { - player.sendMessage(MessageUtil.errorText("Please enter a faction name.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RenameGui.ENTER_NAME)); sendUpdate(); return; } @@ -147,20 +156,20 @@ public void handleDataEvent(Ref ref, Store store, newName = newName.trim(); if (newName.length() < MIN_NAME_LENGTH) { - player.sendMessage(MessageUtil.errorText("Faction name must be at least " + MIN_NAME_LENGTH + " characters.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RenameGui.TOO_SHORT, MIN_NAME_LENGTH)); sendUpdate(); return; } if (newName.length() > MAX_NAME_LENGTH) { - player.sendMessage(MessageUtil.errorText("Faction name cannot exceed " + MAX_NAME_LENGTH + " characters.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RenameGui.TOO_LONG, MAX_NAME_LENGTH)); sendUpdate(); return; } // Check if name is the same if (newName.equalsIgnoreCase(faction.name())) { - player.sendMessage(MessageUtil.text("That's already your faction's name.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.info(playerRef, MessageKeys.RenameGui.SAME_NAME, "#FFD700")); sendUpdate(); return; } @@ -168,7 +177,7 @@ public void handleDataEvent(Ref ref, Store store, // Check uniqueness Faction existing = factionManager.getFactionByName(newName); if (existing != null) { - player.sendMessage(MessageUtil.errorText("A faction with that name already exists.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.RenameGui.NAME_TAKEN)); sendUpdate(); return; } @@ -183,14 +192,11 @@ public void handleDataEvent(Ref ref, Store store, worldMapService.triggerFactionWideRefresh(faction.id()); } - String prefix = adminMode ? "[Admin] " : ""; - player.sendMessage( - Message.raw(prefix + "Faction renamed from ").color("#AAAAAA") - .insert(Message.raw(oldName).color("#888888")) - .insert(Message.raw(" to ").color("#AAAAAA")) - .insert(Message.raw(newName).color("#00FFFF")) - .insert(Message.raw("!").color("#AAAAAA")) - ); + String msg = HFMessages.get(playerRef, MessageKeys.RenameGui.SUCCESS, oldName, newName); + if (adminMode) { + msg = HFMessages.get(playerRef, MessageKeys.Common.ADMIN_PREFIX) + " " + msg; + } + player.sendMessage(Message.raw(msg).color("#55FF55")); if (adminMode) { guiManager.openAdminFactionSettings(player, ref, store, playerRef, faction.id()); diff --git a/src/main/java/com/hyperfactions/gui/shared/page/TagModalPage.java b/src/main/java/com/hyperfactions/gui/shared/page/TagModalPage.java index 1369ae3d..067d8ccb 100644 --- a/src/main/java/com/hyperfactions/gui/shared/page/TagModalPage.java +++ b/src/main/java/com/hyperfactions/gui/shared/page/TagModalPage.java @@ -7,6 +7,8 @@ import com.hyperfactions.gui.UIPaths; import com.hyperfactions.gui.shared.data.TagModalData; import com.hyperfactions.manager.FactionManager; +import com.hyperfactions.util.HFMessages; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.worldmap.WorldMapService; import com.hypixel.hytale.component.Ref; @@ -83,10 +85,18 @@ public void build(Ref ref, UICommandBuilder cmd, // Load the modal template cmd.append(UIPaths.TAG_MODAL); + // Static labels + cmd.set("#PageTitle.Text", HFMessages.get(playerRef, MessageKeys.TagGui.TITLE)); + cmd.set("#CurrentLabel.Text", HFMessages.get(playerRef, MessageKeys.TagGui.CURRENT_LABEL)); + cmd.set("#TagInstructions.Text", HFMessages.get(playerRef, MessageKeys.TagGui.INSTRUCTIONS)); + cmd.set("#TagHelpText.Text", HFMessages.get(playerRef, MessageKeys.TagGui.HELP_TEXT)); + cmd.set("#CancelBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.CANCEL)); + cmd.set("#SaveBtn.Text", HFMessages.get(playerRef, MessageKeys.Common.SAVE)); + // Show current tag String currentTag = faction.tag(); if (currentTag == null || currentTag.isEmpty()) { - cmd.set("#CurrentTag.Text", "(None)"); + cmd.set("#CurrentTag.Text", HFMessages.get(playerRef, MessageKeys.TagGui.DISPLAY_NONE)); } else { cmd.set("#CurrentTag.Text", "[" + currentTag.toUpperCase() + "]"); } @@ -126,7 +136,7 @@ public void handleDataEvent(Ref ref, Store store, // Verify officer permission (skip in admin mode) if (!adminMode && (member == null || member.role().getLevel() < FactionRole.OFFICER.getLevel())) { - player.sendMessage(MessageUtil.errorText("You don't have permission to edit the tag.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.TagGui.NO_PERMISSION)); guiManager.openFactionSettings(player, ref, store, playerRef, factionManager.getFaction(faction.id())); return; @@ -155,8 +165,11 @@ public void handleDataEvent(Ref ref, Store store, worldMapService.triggerFactionWideRefresh(faction.id()); } - String prefix = adminMode ? "[Admin] " : ""; - player.sendMessage(Message.raw(prefix + "Faction tag cleared.").color("#AAAAAA")); + String clearMsg = HFMessages.get(playerRef, MessageKeys.TagGui.CLEARED); + if (adminMode) { + clearMsg = HFMessages.get(playerRef, MessageKeys.Common.ADMIN_PREFIX) + " " + clearMsg; + } + player.sendMessage(Message.raw(clearMsg).color("#AAAAAA")); if (adminMode) { guiManager.openAdminFactionSettings(player, ref, store, playerRef, faction.id()); } else { @@ -170,27 +183,27 @@ public void handleDataEvent(Ref ref, Store store, // Validate length if (newTag.length() < MIN_TAG_LENGTH) { - player.sendMessage(MessageUtil.errorText("Tag must be at least " + MIN_TAG_LENGTH + " character.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.TagGui.TOO_SHORT, MIN_TAG_LENGTH)); sendUpdate(); return; } if (newTag.length() > MAX_TAG_LENGTH) { - player.sendMessage(MessageUtil.errorText("Tag cannot exceed " + MAX_TAG_LENGTH + " characters.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.TagGui.TOO_LONG, MAX_TAG_LENGTH)); sendUpdate(); return; } // Validate format (alphanumeric only) if (!TAG_PATTERN.matcher(newTag).matches()) { - player.sendMessage(MessageUtil.errorText("Tag can only contain letters and numbers.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.TagGui.INVALID_FORMAT)); sendUpdate(); return; } // Check if same as current if (newTag.equalsIgnoreCase(faction.tag())) { - player.sendMessage(MessageUtil.text("That's already your faction's tag.", MessageUtil.COLOR_GOLD)); + player.sendMessage(MessageUtil.info(playerRef, MessageKeys.TagGui.SAME_TAG, "#FFD700")); sendUpdate(); return; } @@ -198,7 +211,7 @@ public void handleDataEvent(Ref ref, Store store, // Check uniqueness Faction existing = factionManager.getFactionByTag(newTag); if (existing != null && !existing.id().equals(faction.id())) { - player.sendMessage(MessageUtil.errorText("A faction with that tag already exists.")); + player.sendMessage(MessageUtil.error(playerRef, MessageKeys.TagGui.TAG_TAKEN)); sendUpdate(); return; } @@ -212,12 +225,11 @@ public void handleDataEvent(Ref ref, Store store, worldMapService.triggerFactionWideRefresh(faction.id()); } - String prefix = adminMode ? "[Admin] " : ""; - player.sendMessage( - Message.raw(prefix + "Faction tag set to ").color("#AAAAAA") - .insert(Message.raw("[" + newTag + "]").color("#FFAA00")) - .insert(Message.raw("!").color("#AAAAAA")) - ); + String successMsg = HFMessages.get(playerRef, MessageKeys.TagGui.SUCCESS, newTag); + if (adminMode) { + successMsg = HFMessages.get(playerRef, MessageKeys.Common.ADMIN_PREFIX) + " " + successMsg; + } + player.sendMessage(Message.raw(successMsg).color("#55FF55")); if (adminMode) { guiManager.openAdminFactionSettings(player, ref, store, playerRef, faction.id()); diff --git a/src/main/java/com/hyperfactions/gui/test/MarkdownTestPage.java b/src/main/java/com/hyperfactions/gui/test/MarkdownTestPage.java new file mode 100644 index 00000000..aa4d1416 --- /dev/null +++ b/src/main/java/com/hyperfactions/gui/test/MarkdownTestPage.java @@ -0,0 +1,443 @@ +package com.hyperfactions.gui.test; + +import com.hyperfactions.gui.UIPaths; +import com.hyperfactions.gui.help.HelpEntry; +import com.hyperfactions.gui.help.HelpEntry.EntryType; +import com.hyperfactions.gui.shared.data.PlaceholderData; +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime; +import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage; +import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder; +import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder; +import com.hypixel.hytale.server.core.universe.PlayerRef; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Visual test page that renders every supported markdown entry type + * using the real help templates. Serves as both a verification tool + * and documentation for markdown authors. + * + *

Open via: /f admin test md + */ +public class MarkdownTestPage extends InteractiveCustomUIPage { + + // Template paths + private static final String TPL_LINE_TEXT = UIPaths.HELP_LINE_TEXT; + private static final String TPL_LINE_COMMAND = UIPaths.HELP_LINE_COMMAND; + private static final String TPL_LINE_HEADING = UIPaths.HELP_LINE_HEADING; + private static final String TPL_SPACER = UIPaths.HELP_SPACER; + private static final String TPL_LINE_BOLD = UIPaths.HELP_LINE_BOLD; + private static final String TPL_LINE_ITALIC = UIPaths.HELP_LINE_ITALIC; + private static final String TPL_LINE_LIST = UIPaths.HELP_LINE_LIST; + private static final String TPL_SEPARATOR = UIPaths.HELP_SEPARATOR; + private static final String TPL_LINE_CALLOUT = UIPaths.HELP_LINE_CALLOUT; + private static final String TPL_TABLE_HEADER = UIPaths.HELP_TABLE_HEADER; + private static final String TPL_TABLE_ROW = UIPaths.HELP_TABLE_ROW; + private static final String TPL_TABLE_HEADER_CELL = UIPaths.HELP_TABLE_HEADER_CELL; + private static final String TPL_TABLE_CELL = UIPaths.HELP_TABLE_CELL; + + /** Creates a new MarkdownTestPage. */ + public MarkdownTestPage(PlayerRef playerRef) { + super(playerRef, CustomPageLifetime.CanDismiss, PlaceholderData.CODEC); + } + + @Override + public void build(Ref ref, UICommandBuilder cmd, + UIEventBuilder events, Store store) { + cmd.append(UIPaths.MARKDOWN_TEST); + + List entries = buildTestEntries(); + int index = 0; + + for (TestEntry entry : entries) { + if (entry.isSyntaxLabel) { + // Syntax label — rendered as muted gray text + cmd.append("#ContentList", TPL_LINE_TEXT); + String selector = "#ContentList[" + index + "]"; + cmd.set(selector + " #Text.Text", entry.text); + cmd.set(selector + " #Text.Style.TextColor", "#666666"); + cmd.set(selector + " #Text.Style.FontSize", 10); + index++; + continue; + } + + // Table entries need special rendering + if (entry.type == EntryType.TABLE_HEADER || entry.type == EntryType.TABLE_ROW) { + boolean isHeader = entry.type == EntryType.TABLE_HEADER; + String rowTemplate = isHeader ? TPL_TABLE_HEADER : TPL_TABLE_ROW; + String cellTemplate = isHeader ? TPL_TABLE_HEADER_CELL : TPL_TABLE_CELL; + + cmd.append("#ContentList", rowTemplate); + String rowSelector = "#ContentList[" + index + "]"; + String colsContainer = rowSelector + " #Cols"; + + // Table text stores pipe-separated column values + String[] columns = entry.text.split("\\|"); + for (int col = 0; col < columns.length; col++) { + cmd.append(colsContainer, cellTemplate); + String cellSelector = colsContainer + "[" + col + "]"; + applyCellFormatting(cmd, cellSelector, columns[col].trim(), entry.color); + } + + index++; + continue; + } + + // Real rendered entry using the appropriate template + String template = getTemplateForType(entry.type); + cmd.append("#ContentList", template); + String selector = "#ContentList[" + index + "]"; + + if (entry.type != EntryType.SPACER && entry.type != EntryType.SEPARATOR) { + String text = entry.text; + + // Add bullet prefix for unordered list items + if (entry.type == EntryType.LIST && !text.matches("^\\d+\\.\\s.*")) { + text = "\u2022 " + text; + } + + cmd.set(selector + " #Text.Text", text); + + // Apply color override + if (entry.color != null) { + cmd.set(selector + " #Text.Style.TextColor", entry.color); + + if (entry.type == EntryType.CALLOUT) { + cmd.set(selector + " #AccentBar.Background.Color", entry.color); + } + } + } + index++; + } + } + + @Override + public void handleDataEvent(Ref ref, Store store, + PlaceholderData data) { + sendUpdate(); + } + + private String getTemplateForType(EntryType type) { + return switch (type) { + case TEXT -> TPL_LINE_TEXT; + case COMMAND -> TPL_LINE_COMMAND; + case HEADING -> TPL_LINE_HEADING; + case SPACER -> TPL_SPACER; + case BOLD -> TPL_LINE_BOLD; + case ITALIC -> TPL_LINE_ITALIC; + case LIST -> TPL_LINE_LIST; + case SEPARATOR -> TPL_SEPARATOR; + case CALLOUT -> TPL_LINE_CALLOUT; + case TABLE_HEADER -> TPL_TABLE_HEADER; + case TABLE_ROW -> TPL_TABLE_ROW; + }; + } + + /** + * Builds the comprehensive list of test entries. + * Each section: gray syntax label, then the rendered result. + */ + private List buildTestEntries() { + List entries = new ArrayList<>(); + + // ── Section: Basic Entry Types ── + section(entries, "BASIC ENTRY TYPES"); + + syntax(entries, "Plain text"); + entry(entries, EntryType.TEXT, "This is a plain text line."); + + syntax(entries, "Plain text (second line)"); + entry(entries, EntryType.TEXT, "Another text line to verify stacking."); + + syntax(entries, "(blank line)"); + entry(entries, EntryType.SPACER, ""); + + syntax(entries, "## Sub-Heading"); + entry(entries, EntryType.HEADING, "Sub-Heading"); + + syntax(entries, "`/f create `"); + entry(entries, EntryType.COMMAND, "/f create "); + + syntax(entries, "`/f claim`"); + entry(entries, EntryType.COMMAND, "/f claim"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Text Formatting ── + section(entries, "TEXT FORMATTING"); + + syntax(entries, "**This text is bold**"); + entry(entries, EntryType.BOLD, "This text is bold"); + + syntax(entries, "*This text is italicized*"); + entry(entries, EntryType.ITALIC, "This text is italicized"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Lists ── + section(entries, "LISTS"); + + syntax(entries, "- First bullet item"); + entry(entries, EntryType.LIST, "First bullet item"); + + syntax(entries, "- Second bullet item"); + entry(entries, EntryType.LIST, "Second bullet item"); + + syntax(entries, "- Third bullet item"); + entry(entries, EntryType.LIST, "Third bullet item"); + + entry(entries, EntryType.SPACER, ""); + + syntax(entries, "1. First numbered item"); + entry(entries, EntryType.LIST, "1. First numbered item"); + + syntax(entries, "2. Second numbered item"); + entry(entries, EntryType.LIST, "2. Second numbered item"); + + syntax(entries, "3. Third numbered item"); + entry(entries, EntryType.LIST, "3. Third numbered item"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Separators ── + section(entries, "SEPARATORS"); + + syntax(entries, "---"); + entry(entries, EntryType.SEPARATOR, ""); + + syntax(entries, "Text after separator"); + entry(entries, EntryType.TEXT, "Content continues after the horizontal rule."); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Inline Hex Colors ── + section(entries, "INLINE HEX COLORS"); + + syntax(entries, "[#FF5555] Red text"); + colored(entries, "Red colored text", "#FF5555"); + + syntax(entries, "[#55AAFF] Blue text"); + colored(entries, "Blue colored text", "#55AAFF"); + + syntax(entries, "[#FFAA55] Orange text"); + colored(entries, "Orange colored text", "#FFAA55"); + + syntax(entries, "[#AA55FF] Purple text"); + colored(entries, "Purple colored text", "#AA55FF"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Named Color Shortcuts ── + section(entries, "NAMED COLOR SHORTCUTS"); + + syntax(entries, "!warning This is a warning"); + colored(entries, "This is a warning", "#FF5555"); + + syntax(entries, "!success This is a success message"); + colored(entries, "This is a success message", "#55FF55"); + + syntax(entries, "!note This is a note"); + colored(entries, "This is a note", "#55AAFF"); + + syntax(entries, "!muted This is muted/dimmed text"); + colored(entries, "This is muted/dimmed text", "#888888"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Callout Boxes ── + section(entries, "CALLOUT BOXES"); + + syntax(entries, "> This is a tip (shorthand)"); + callout(entries, "This is a tip", "#55FF55"); + + syntax(entries, ">[!TIP] This is an explicit tip"); + callout(entries, "This is an explicit tip", "#55FF55"); + + syntax(entries, ">[!WARNING] Don't log out while combat tagged!"); + callout(entries, "Don't log out while combat tagged!", "#FF5555"); + + syntax(entries, ">[!INFO] Allies can access your chests"); + callout(entries, "Allies can access your chests", "#55AAFF"); + + syntax(entries, ">[!NOTE] Officers can invite new members"); + callout(entries, "Officers can invite new members", "#FFAA55"); + + syntax(entries, ">[!SUCCESS] Territory claimed successfully"); + callout(entries, "Territory claimed successfully", "#55FF55"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Tables ── + section(entries, "TABLES"); + + syntax(entries, "| Level | Members | Daily Upkeep |"); + syntax(entries, "|-------|---------|--------------|"); + syntax(entries, "| 1 | 1-5 | 0 |"); + syntax(entries, "| 2 | 6-10 | 5 |"); + syntax(entries, "| 3 | 11-20 | 15 |"); + + // Render the actual table + table(entries, true, "Level", "Members", "Daily Upkeep"); + table(entries, false, "1", "1-5", "0"); + table(entries, false, "2", "6-10", "5"); + table(entries, false, "3", "11-20", "15"); + + entry(entries, EntryType.SPACER, ""); + + syntax(entries, "Two-column table:"); + table(entries, true, "Command", "Description"); + table(entries, false, "/f create ", "Create a new faction"); + table(entries, false, "/f claim", "Claim the chunk you're in"); + table(entries, false, "/f invite ", "Invite a player to your faction"); + table(entries, false, "/f home", "Teleport to faction home"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Formatted Tables ── + section(entries, "FORMATTED TABLE CELLS"); + + syntax(entries, "Cells with inline formatting:"); + table(entries, true, "Syntax", "Result", "Description"); + table(entries, false, "**bold cell**", "Normal", "Bold via ** markers"); + table(entries, false, "*italic cell*", "Normal", "Italic via * markers"); + table(entries, false, "`command`", "Normal", "Command style (yellow bold)"); + table(entries, false, "[#FF5555] red text", "Normal", "Hex color prefix"); + table(entries, false, "[#55FF55] green text", "[#55AAFF] blue text", "Per-cell colors"); + + entry(entries, EntryType.SPACER, ""); + + syntax(entries, "Row-level color override (all cells colored):"); + table(entries, true, "Status", "Zone", "Note"); + table(entries, false, "Active", "Spawn", "Normal row"); + tableColored(entries, "#FF5555", "Danger", "Warzone", "Red row"); + tableColored(entries, "#55FF55", "Safe", "Safezone", "Green row"); + tableColored(entries, "#55AAFF", "Info", "Claimed", "Blue row"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Edge Cases ── + section(entries, "EDGE CASES"); + + syntax(entries, "Long text line (wrapping test)"); + entry(entries, EntryType.TEXT, + "This is a very long text line intended to test whether the help system properly handles text that extends beyond the visible width of the content container, requiring wrapping or truncation."); + + syntax(entries, "Long command (wrapping test)"); + entry(entries, EntryType.COMMAND, + "/f admin economy set --confirm --force --reason \"testing\""); + + syntax(entries, "Long list item (wrapping test)"); + entry(entries, EntryType.LIST, + "This is a long bullet point that tests how list items with significant amounts of text wrap within the indented list template."); + + syntax(entries, "Long callout (wrapping test)"); + callout(entries, "This is a very long callout box to verify that the text inside properly wraps within the callout container with its accent bar and padding.", "#55AAFF"); + + entry(entries, EntryType.SPACER, ""); + + // ── Section: Mixed Content Flow ── + section(entries, "MIXED CONTENT FLOW"); + + entry(entries, EntryType.TEXT, "Create a faction to get started with territory control."); + entry(entries, EntryType.COMMAND, "/f create "); + entry(entries, EntryType.TEXT, "Then claim your first chunk of land:"); + callout(entries, "Stand in the chunk you want to claim before running the command.", "#55FF55"); + + entry(entries, EntryType.SPACER, ""); + entry(entries, EntryType.SPACER, ""); + + syntax(entries, "Double spacer above, then heading after separator:"); + entry(entries, EntryType.SEPARATOR, ""); + entry(entries, EntryType.HEADING, "New Section After Rule"); + entry(entries, EntryType.TEXT, "Content in the new section."); + + return entries; + } + + // ── Helper methods ── + + private void section(List entries, String title) { + entries.add(new TestEntry(EntryType.HEADING, title, null, false)); + entries.add(new TestEntry(EntryType.SEPARATOR, "", null, false)); + } + + private void syntax(List entries, String markdown) { + entries.add(new TestEntry(null, markdown, null, true)); + } + + private void entry(List entries, EntryType type, String text) { + entries.add(new TestEntry(type, text, null, false)); + } + + private void colored(List entries, String text, String color) { + entries.add(new TestEntry(EntryType.TEXT, text, color, false)); + } + + private void callout(List entries, String text, String color) { + entries.add(new TestEntry(EntryType.CALLOUT, text, color, false)); + } + + private void table(List entries, boolean header, String... columns) { + EntryType type = header ? EntryType.TABLE_HEADER : EntryType.TABLE_ROW; + entries.add(new TestEntry(type, String.join("|", columns), null, false)); + } + + private void tableColored(List entries, String color, String... columns) { + entries.add(new TestEntry(EntryType.TABLE_ROW, String.join("|", columns), color, false)); + } + + private static final Pattern CELL_HEX_COLOR = Pattern.compile("^\\[#([0-9A-Fa-f]{6})]\\s*(.+)$"); + + /** + * Applies inline formatting to a table cell. + * Supports: **bold**, *italic*, `command`, [#RRGGBB] color prefix. + */ + private void applyCellFormatting(UICommandBuilder cmd, String cellSelector, + String text, String rowColor) { + String displayText = text; + String cellColor = rowColor; + boolean bold = false; + boolean italic = false; + + Matcher hexMatcher = CELL_HEX_COLOR.matcher(displayText); + if (hexMatcher.matches()) { + cellColor = "#" + hexMatcher.group(1); + displayText = hexMatcher.group(2); + } + + if (displayText.startsWith("**") && displayText.endsWith("**") && displayText.length() > 4) { + displayText = displayText.substring(2, displayText.length() - 2); + bold = true; + } else if (displayText.startsWith("`") && displayText.endsWith("`") && displayText.length() > 2) { + displayText = displayText.substring(1, displayText.length() - 1); + bold = true; + if (cellColor == null) { + cellColor = "#FFFF55"; + } + } else if (displayText.startsWith("*") && displayText.endsWith("*") && displayText.length() > 2) { + displayText = displayText.substring(1, displayText.length() - 1); + italic = true; + } + + cmd.set(cellSelector + " #CellText.Text", displayText); + if (bold) { + cmd.set(cellSelector + " #CellText.Style.RenderBold", true); + } + if (italic) { + cmd.set(cellSelector + " #CellText.Style.RenderItalics", true); + } + if (cellColor != null) { + cmd.set(cellSelector + " #CellText.Style.TextColor", cellColor); + } + } + + /** + * A test entry that can either be a syntax label or a real rendered entry. + */ + private record TestEntry(EntryType type, String text, String color, boolean isSyntaxLabel) {} +} diff --git a/src/main/java/com/hyperfactions/importer/ElbaphFactionsImporter.java b/src/main/java/com/hyperfactions/importer/ElbaphFactionsImporter.java index 076b1625..13c1377a 100644 --- a/src/main/java/com/hyperfactions/importer/ElbaphFactionsImporter.java +++ b/src/main/java/com/hyperfactions/importer/ElbaphFactionsImporter.java @@ -13,6 +13,7 @@ import com.hyperfactions.manager.PowerManager; import com.hyperfactions.manager.ZoneManager; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.io.File; import java.io.FileReader; import java.lang.reflect.Type; @@ -736,7 +737,8 @@ private int handleExistingMemberships(Faction importedFaction, ImportResult.Buil .withLog(FactionLog.create( FactionLog.LogType.MEMBER_LEAVE, playerName + " left (imported to another faction)", - null + null, + MessageKeys.LogsGui.MSG_LEFT_IMPORT, playerName )); factionManager.removePlayerFromIndex(memberUuid); @@ -754,7 +756,8 @@ private int handleExistingMemberships(Faction importedFaction, ImportResult.Buil .withLog(FactionLog.create( FactionLog.LogType.LEADER_TRANSFER, promoted.username() + " became leader (previous leader imported to another faction)", - null + null, + MessageKeys.LogsGui.MSG_LEADER_IMPORT_TRANSFER, promoted.username() )); progress(" - %s promoted to leader of '%s'", promoted.username(), existingFaction.name()); @@ -871,7 +874,8 @@ private Faction convertFaction(ElbaphFaction elbaphFaction, Map logs = new ArrayList<>(); logs.add(FactionLog.system(FactionLog.LogType.MEMBER_JOIN, - "Faction imported from ElbaphFactions")); + "Faction imported from ElbaphFactions", + MessageKeys.LogsGui.MSG_IMPORTED_FROM, "ElbaphFactions")); // Warn about faction points if (elbaphFaction.factionPoints() > 0) { diff --git a/src/main/java/com/hyperfactions/importer/HyFactionsImporter.java b/src/main/java/com/hyperfactions/importer/HyFactionsImporter.java index aa02cca4..d71b869c 100644 --- a/src/main/java/com/hyperfactions/importer/HyFactionsImporter.java +++ b/src/main/java/com/hyperfactions/importer/HyFactionsImporter.java @@ -12,6 +12,7 @@ import com.hyperfactions.manager.PowerManager; import com.hyperfactions.manager.ZoneManager; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.io.File; import java.io.FileReader; import java.io.IOException; @@ -901,7 +902,8 @@ private int handleExistingMemberships(Faction importedFaction, ImportResult.Buil .withLog(FactionLog.create( FactionLog.LogType.MEMBER_LEAVE, playerName + " left (imported to another faction)", - null // System action + null, // System action + MessageKeys.LogsGui.MSG_LEFT_IMPORT, playerName )); // CRITICAL: Remove player from the player-to-faction index @@ -924,7 +926,8 @@ private int handleExistingMemberships(Faction importedFaction, ImportResult.Buil .withLog(FactionLog.create( FactionLog.LogType.LEADER_TRANSFER, promoted.username() + " became leader (previous leader imported to another faction)", - null + null, + MessageKeys.LogsGui.MSG_LEADER_IMPORT_TRANSFER, promoted.username() )); progress(" - %s promoted to leader of '%s'", promoted.username(), existingFaction.name()); diff --git a/src/main/java/com/hyperfactions/manager/AnnouncementManager.java b/src/main/java/com/hyperfactions/manager/AnnouncementManager.java index 25f86a85..5b3213fd 100644 --- a/src/main/java/com/hyperfactions/manager/AnnouncementManager.java +++ b/src/main/java/com/hyperfactions/manager/AnnouncementManager.java @@ -3,13 +3,12 @@ import com.hyperfactions.config.ConfigManager; import com.hyperfactions.config.modules.AnnouncementConfig; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; -import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.universe.PlayerRef; import java.util.Collection; import java.util.function.Supplier; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * Broadcasts server-wide announcements for significant faction events. @@ -40,7 +39,7 @@ public void announceFactionCreated(@NotNull String factionName, @NotNull String return; } - broadcast(MessageUtil.info(leaderName + " has founded the faction " + factionName + "!", MessageUtil.COLOR_GREEN)); + broadcastSuccess(MessageKeys.ServerAnnounce.FACTION_CREATED, leaderName, factionName); } /** @@ -54,7 +53,7 @@ public void announceFactionDisbanded(@NotNull String factionName) { return; } - broadcast(MessageUtil.error("The faction " + factionName + " has been disbanded!")); + broadcastError(MessageKeys.ServerAnnounce.FACTION_DISBANDED, factionName); } /** @@ -71,7 +70,7 @@ public void announceLeadershipTransfer(@NotNull String factionName, return; } - broadcast(MessageUtil.info(newLeader + " is now the leader of " + factionName + "!", MessageUtil.COLOR_GOLD)); + broadcastInfo(MessageKeys.ServerAnnounce.LEADERSHIP_TRANSFER, MessageUtil.COLOR_GOLD, newLeader, factionName); } /** @@ -86,7 +85,7 @@ public void announceOverclaim(@NotNull String attackerFaction, @NotNull String d return; } - broadcast(MessageUtil.error(attackerFaction + " has overclaimed territory from " + defenderFaction + "!")); + broadcastError(MessageKeys.ServerAnnounce.OVERCLAIM, attackerFaction, defenderFaction); } /** @@ -101,7 +100,7 @@ public void announceWarDeclared(@NotNull String declaringFaction, @NotNull Strin return; } - broadcast(MessageUtil.error(declaringFaction + " has declared war on " + targetFaction + "!")); + broadcastError(MessageKeys.ServerAnnounce.WAR_DECLARED, declaringFaction, targetFaction); } /** @@ -116,7 +115,7 @@ public void announceAllianceFormed(@NotNull String faction1, @NotNull String fac return; } - broadcast(MessageUtil.info(faction1 + " and " + faction2 + " are now allies!", MessageUtil.COLOR_GREEN)); + broadcastSuccess(MessageKeys.ServerAnnounce.ALLIANCE_FORMED, faction1, faction2); } /** @@ -131,20 +130,34 @@ public void announceAllianceBroken(@NotNull String faction1, @NotNull String fac return; } - broadcast(MessageUtil.info(faction1 + " and " + faction2 + " are no longer allies!", MessageUtil.COLOR_GOLD)); + broadcastInfo(MessageKeys.ServerAnnounce.ALLIANCE_BROKEN, MessageUtil.COLOR_GOLD, faction1, faction2); } /** - * Builds a formatted announcement message using the configured prefix from config.json. + * Broadcasts a success-styled message to all online players, resolving i18n per-player. */ - private Message buildMessage(@NotNull String text, @NotNull String color) { - return MessageUtil.info(text, color); + private void broadcastSuccess(@NotNull String key, Object... args) { + broadcast(player -> MessageUtil.success(player, key, args)); } /** - * Broadcasts a message to all online players. + * Broadcasts an error-styled message to all online players, resolving i18n per-player. */ - private void broadcast(@NotNull Message message) { + private void broadcastError(@NotNull String key, Object... args) { + broadcast(player -> MessageUtil.error(player, key, args)); + } + + /** + * Broadcasts an info-styled message to all online players, resolving i18n per-player. + */ + private void broadcastInfo(@NotNull String key, @NotNull String color, Object... args) { + broadcast(player -> MessageUtil.info(player, key, color, args)); + } + + /** + * Broadcasts a per-player resolved message to all online players. + */ + private void broadcast(@NotNull java.util.function.Function messageFactory) { try { Collection players = onlinePlayersSupplier.get(); if (players == null) { @@ -152,7 +165,7 @@ private void broadcast(@NotNull Message message) { } for (PlayerRef player : players) { - player.sendMessage(message); + player.sendMessage(messageFactory.apply(player)); } } catch (Exception e) { Logger.warn("Failed to broadcast announcement: %s", e.getMessage()); diff --git a/src/main/java/com/hyperfactions/manager/ChatManager.java b/src/main/java/com/hyperfactions/manager/ChatManager.java index 9e38481a..96e1a6a3 100644 --- a/src/main/java/com/hyperfactions/manager/ChatManager.java +++ b/src/main/java/com/hyperfactions/manager/ChatManager.java @@ -8,7 +8,9 @@ import com.hyperfactions.gui.ActivePageTracker; import com.hyperfactions.gui.GuiUpdateService; import com.hyperfactions.integration.PermissionManager; +import com.hyperfactions.util.HFMessages; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.universe.PlayerRef; import java.util.List; @@ -507,9 +509,9 @@ private void notifyListeners(@NotNull ChatMessage message, @NotNull UUID faction @NotNull public static String getChannelDisplay(@NotNull ChatChannel channel) { return switch (channel) { - case NORMAL -> "Public"; - case FACTION -> "Faction"; - case ALLY -> "Ally"; + case NORMAL -> HFMessages.get((PlayerRef) null, MessageKeys.ChatDisplay.PUBLIC); + case FACTION -> HFMessages.get((PlayerRef) null, MessageKeys.ChatDisplay.FACTION); + case ALLY -> HFMessages.get((PlayerRef) null, MessageKeys.ChatDisplay.ALLY); }; } diff --git a/src/main/java/com/hyperfactions/manager/ClaimManager.java b/src/main/java/com/hyperfactions/manager/ClaimManager.java index 25b9be13..c9ebac75 100644 --- a/src/main/java/com/hyperfactions/manager/ClaimManager.java +++ b/src/main/java/com/hyperfactions/manager/ClaimManager.java @@ -11,6 +11,7 @@ import com.hyperfactions.integration.protection.OrbisGuardIntegration; import com.hyperfactions.util.ChunkUtil; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; @@ -415,7 +416,8 @@ public ClaimResult claim(@NotNull UUID playerUuid, @NotNull String world, int ch FactionClaim claim = FactionClaim.create(world, chunkX, chunkZ, playerUuid); Faction updated = faction.withClaim(claim) .withLog(FactionLog.create(FactionLog.LogType.CLAIM, - String.format("Claimed chunk at %d, %d in %s", chunkX, chunkZ, world), playerUuid)); + String.format("Claimed chunk at %d, %d in %s", chunkX, chunkZ, world), playerUuid, + MessageKeys.LogsGui.MSG_CLAIMED, String.valueOf(chunkX), String.valueOf(chunkZ), world)); // Update indices and faction claimIndex.put(key, faction.id()); @@ -493,7 +495,8 @@ public ClaimResult unclaim(@NotNull UUID playerUuid, @NotNull String world, int // Remove claim Faction updated = faction.withoutClaimAt(world, chunkX, chunkZ) .withLog(FactionLog.create(FactionLog.LogType.UNCLAIM, - String.format("Unclaimed chunk at %d, %d in %s", chunkX, chunkZ, world), playerUuid)); + String.format("Unclaimed chunk at %d, %d in %s", chunkX, chunkZ, world), playerUuid, + MessageKeys.LogsGui.MSG_UNCLAIMED, String.valueOf(chunkX), String.valueOf(chunkZ), world)); claimIndex.remove(key); Set factionClaims = factionClaimsIndex.get(faction.id()); @@ -576,13 +579,15 @@ public ClaimResult overclaim(@NotNull UUID playerUuid, @NotNull String world, in // Remove from defender Faction updatedDefender = defenderFaction.withoutClaimAt(world, chunkX, chunkZ) .withLog(FactionLog.create(FactionLog.LogType.OVERCLAIM, - String.format("Lost chunk at %d, %d to %s", chunkX, chunkZ, attackerFaction.name()), null)); + String.format("Lost chunk at %d, %d to %s", chunkX, chunkZ, attackerFaction.name()), null, + MessageKeys.LogsGui.MSG_OVERCLAIM_LOST, String.valueOf(chunkX), String.valueOf(chunkZ), attackerFaction.name())); // Add to attacker FactionClaim claim = FactionClaim.create(world, chunkX, chunkZ, playerUuid); Faction updatedAttacker = attackerFaction.withClaim(claim) .withLog(FactionLog.create(FactionLog.LogType.OVERCLAIM, - String.format("Overclaimed chunk at %d, %d from %s", chunkX, chunkZ, defenderFaction.name()), playerUuid)); + String.format("Overclaimed chunk at %d, %d from %s", chunkX, chunkZ, defenderFaction.name()), playerUuid, + MessageKeys.LogsGui.MSG_OVERCLAIM_TAKEN, String.valueOf(chunkX), String.valueOf(chunkZ), defenderFaction.name())); // Update indices - remove from defender Set defenderClaims = factionClaimsIndex.get(defenderId); @@ -640,7 +645,8 @@ public void unclaimAll(@NotNull UUID factionId) { if (faction != null && faction.getClaimCount() > 0) { Faction updated = faction.withoutAllClaims() .withLog(FactionLog.create(FactionLog.LogType.UNCLAIM, - "All territory unclaimed", null)); + "All territory unclaimed", null, + MessageKeys.LogsGui.MSG_ALL_UNCLAIMED)); factionManager.updateFaction(updated); Logger.debugClaim("Unclaim all: faction=%s, claims removed=%d", faction.name(), faction.getClaimCount()); } @@ -678,7 +684,8 @@ public int cleanupDisallowedWorldClaims() { if (faction != null) { Faction updated = faction.withoutClaimAt(key.world(), key.chunkX(), key.chunkZ()) .withLog(FactionLog.create(FactionLog.LogType.UNCLAIM, - "Claim in '" + key.world() + "' removed (world disallows claiming)", null)); + "Claim in '" + key.world() + "' removed (world disallows claiming)", null, + MessageKeys.LogsGui.MSG_CLAIM_REMOVED_WORLD, key.world())); factionManager.updateFaction(updated); } removed++; @@ -761,7 +768,8 @@ private ClaimResult forceClaimChunk(Faction faction, UUID playerUuid, String wor Faction updated = faction.withClaim(claim) .withLog(FactionLog.create(FactionLog.LogType.CLAIM, - String.format("Claimed chunk at %d, %d in %s", chunkX, chunkZ, world), playerUuid)); + String.format("Claimed chunk at %d, %d in %s", chunkX, chunkZ, world), playerUuid, + MessageKeys.LogsGui.MSG_CLAIMED, String.valueOf(chunkX), String.valueOf(chunkZ), world)); // Update both indices claimIndex.put(key, faction.id()); @@ -931,7 +939,8 @@ public void tickClaimDecay() { Faction current = factionManager.getFaction(factionId); if (current != null) { Faction logged = current.withLog(FactionLog.create(FactionLog.LogType.UNCLAIM, - String.format("%d claims removed due to inactivity (%d days)", removed, daysSinceActive), null)); + String.format("%d claims removed due to inactivity (%d days)", removed, daysSinceActive), null, + MessageKeys.LogsGui.MSG_CLAIMS_REMOVED_INACTIVE, String.valueOf(removed), String.valueOf(daysSinceActive))); factionManager.updateFaction(logged); } diff --git a/src/main/java/com/hyperfactions/manager/EconomyManager.java b/src/main/java/com/hyperfactions/manager/EconomyManager.java index fe8838c1..fceedbd0 100644 --- a/src/main/java/com/hyperfactions/manager/EconomyManager.java +++ b/src/main/java/com/hyperfactions/manager/EconomyManager.java @@ -9,6 +9,7 @@ import com.hyperfactions.integration.economy.VaultEconomyProvider; import com.hyperfactions.storage.JsonEconomyStorage; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; @@ -340,7 +341,8 @@ public CompletableFuture deposit( String logMessage = String.format("Deposit: %s (+%s)", formatCurrency(newBalance), formatCurrency(amount)); Faction updatedFaction = faction.withLog( - FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, actorId) + FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, actorId, + MessageKeys.LogsGui.MSG_DEPOSIT, formatCurrency(newBalance), formatCurrency(amount)) ); factionManager.updateFaction(updatedFaction); @@ -417,7 +419,8 @@ public CompletableFuture withdraw( String logMessage = String.format("Withdrawal: %s (-%s)", formatCurrency(newBalance), formatCurrency(amount)); Faction updatedFaction = faction.withLog( - FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, actorId) + FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, actorId, + MessageKeys.LogsGui.MSG_WITHDRAWAL, formatCurrency(newBalance), formatCurrency(amount)) ); factionManager.updateFaction(updatedFaction); @@ -636,8 +639,11 @@ public CompletableFuture adminAdjust( String logMessage = String.format("Admin %s: %s (balance: %s)", amount.compareTo(BigDecimal.ZERO) >= 0 ? "added" : "deducted", formatCurrency(amount.abs()), formatCurrency(newBalance)); + String msgKey = amount.compareTo(BigDecimal.ZERO) >= 0 + ? MessageKeys.LogsGui.MSG_ADMIN_ECON_ADDED : MessageKeys.LogsGui.MSG_ADMIN_ECON_DEDUCTED; Faction updatedFaction = faction.withLog( - FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, adminId) + FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, adminId, + msgKey, formatCurrency(amount.abs()), formatCurrency(newBalance)) ); factionManager.updateFaction(updatedFaction); @@ -692,7 +698,8 @@ public CompletableFuture setBalance( String logMessage = String.format("Admin set balance to %s (was %s)", formatCurrency(newBalance), formatCurrency(oldBalance)); Faction updatedFaction = faction.withLog( - FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, adminId) + FactionLog.create(FactionLog.LogType.ECONOMY, logMessage, adminId, + MessageKeys.LogsGui.MSG_ADMIN_ECON_SET, formatCurrency(newBalance), formatCurrency(oldBalance)) ); factionManager.updateFaction(updatedFaction); diff --git a/src/main/java/com/hyperfactions/manager/FactionManager.java b/src/main/java/com/hyperfactions/manager/FactionManager.java index f102c0b9..a25c9402 100644 --- a/src/main/java/com/hyperfactions/manager/FactionManager.java +++ b/src/main/java/com/hyperfactions/manager/FactionManager.java @@ -10,6 +10,7 @@ import com.hyperfactions.storage.FactionStorage; import com.hyperfactions.util.ErrorHandler; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; @@ -581,7 +582,8 @@ public FactionResult addMember(@NotNull UUID factionId, @NotNull UUID playerUuid // Add member FactionMember member = FactionMember.create(playerUuid, playerName); Faction updated = faction.withMember(member) - .withLog(FactionLog.create(FactionLog.LogType.MEMBER_JOIN, playerName + " joined the faction", playerUuid)); + .withLog(FactionLog.create(FactionLog.LogType.MEMBER_JOIN, playerName + " joined the faction", playerUuid, + MessageKeys.LogsGui.MSG_MEMBER_JOINED, playerName)); // Update caches factions.put(factionId, updated); @@ -635,7 +637,8 @@ public FactionResult removeMember(@NotNull UUID factionId, @NotNull UUID playerU .withoutMember(playerUuid) .withMember(promoted) .withLog(FactionLog.create(FactionLog.LogType.LEADER_TRANSFER, - target.username() + " left, " + promoted.username() + " is now leader", playerUuid)); + target.username() + " left, " + promoted.username() + " is now leader", playerUuid, + MessageKeys.LogsGui.MSG_LEADER_LEFT_TRANSFER, target.username(), promoted.username())); factions.put(factionId, updated); playerToFaction.remove(playerUuid); @@ -669,9 +672,10 @@ public FactionResult removeMember(@NotNull UUID factionId, @NotNull UUID playerU // Remove member FactionLog.LogType logType = isKick ? FactionLog.LogType.MEMBER_KICK : FactionLog.LogType.MEMBER_LEAVE; String message = isKick ? target.username() + " was kicked" : target.username() + " left the faction"; + String msgKey = isKick ? MessageKeys.LogsGui.MSG_MEMBER_KICKED : MessageKeys.LogsGui.MSG_MEMBER_LEFT; Faction updated = faction.withoutMember(playerUuid) - .withLog(FactionLog.create(logType, message, actorUuid)); + .withLog(FactionLog.create(logType, message, actorUuid, msgKey, target.username())); // Update caches factions.put(factionId, updated); @@ -773,7 +777,8 @@ public FactionResult promoteMember(@NotNull UUID factionId, @NotNull UUID player Faction updated = faction.withMember(promoted) .withLog(FactionLog.create(FactionLog.LogType.MEMBER_PROMOTE, - target.username() + " promoted to " + ConfigManager.get().getRoleDisplayName(newRole), actorUuid)); + target.username() + " promoted to " + ConfigManager.get().getRoleDisplayName(newRole), actorUuid, + MessageKeys.LogsGui.MSG_MEMBER_PROMOTED, target.username(), ConfigManager.get().getRoleDisplayName(newRole))); factions.put(factionId, updated); storage.saveFaction(updated); @@ -823,7 +828,8 @@ public FactionResult demoteMember(@NotNull UUID factionId, @NotNull UUID playerU Faction updated = faction.withMember(demoted) .withLog(FactionLog.create(FactionLog.LogType.MEMBER_DEMOTE, - target.username() + " demoted to " + ConfigManager.get().getRoleDisplayName(FactionRole.MEMBER), actorUuid)); + target.username() + " demoted to " + ConfigManager.get().getRoleDisplayName(FactionRole.MEMBER), actorUuid, + MessageKeys.LogsGui.MSG_MEMBER_DEMOTED, target.username(), ConfigManager.get().getRoleDisplayName(FactionRole.MEMBER))); factions.put(factionId, updated); storage.saveFaction(updated); @@ -871,7 +877,8 @@ public FactionResult transferLeadership(@NotNull UUID factionId, @NotNull UUID n .withMember(oldLeader) .withMember(promoted) .withLog(FactionLog.create(FactionLog.LogType.LEADER_TRANSFER, - "Leadership transferred to " + target.username(), actorUuid)); + "Leadership transferred to " + target.username(), actorUuid, + MessageKeys.LogsGui.MSG_LEADER_TRANSFERRED, target.username())); factions.put(factionId, updated); storage.saveFaction(updated); @@ -923,7 +930,8 @@ public FactionResult adminSetMemberRole(@NotNull UUID factionId, @NotNull UUID p FactionMember updatedMember = target.withRole(newRole); updated = updated.withMember(updatedMember) .withLog(FactionLog.create(FactionLog.LogType.MEMBER_PROMOTE, - "[Admin] " + target.username() + " role set to " + ConfigManager.get().getRoleDisplayName(newRole), null)); + "[Admin] " + target.username() + " role set to " + ConfigManager.get().getRoleDisplayName(newRole), null, + MessageKeys.LogsGui.MSG_ADMIN_ROLE_SET, target.username(), ConfigManager.get().getRoleDisplayName(newRole))); factions.put(factionId, updated); storage.saveFaction(updated); @@ -960,7 +968,8 @@ public FactionResult adminRemoveMember(@NotNull UUID factionId, @NotNull UUID pl // Remove member Faction updated = faction.withoutMember(playerUuid) .withLog(FactionLog.create(FactionLog.LogType.MEMBER_KICK, - "[Admin] " + target.username() + " was kicked", null)); + "[Admin] " + target.username() + " was kicked", null, + MessageKeys.LogsGui.MSG_ADMIN_KICKED, target.username())); factions.put(factionId, updated); playerToFaction.remove(playerUuid); @@ -999,7 +1008,8 @@ public FactionResult setHome(@NotNull UUID factionId, @Nullable Faction.FactionH Faction updated = faction.withHome(home) .withLog(FactionLog.create(FactionLog.LogType.HOME_SET, - home != null ? "Home set" : "Home cleared", actorUuid)); + home != null ? "Home set" : "Home cleared", actorUuid, + home != null ? MessageKeys.LogsGui.MSG_HOME_SET : MessageKeys.LogsGui.MSG_HOME_CLEARED)); factions.put(factionId, updated); storage.saveFaction(updated); @@ -1021,7 +1031,8 @@ public int cleanupDisallowedWorldHomes() { if (home != null && !ConfigManager.get().isWorldAllowed(home.world())) { Faction updated = faction.withHome(null) .withLog(FactionLog.create(FactionLog.LogType.HOME_SET, - "Home in '" + home.world() + "' cleared (world disallows claiming)", null)); + "Home in '" + home.world() + "' cleared (world disallows claiming)", null, + MessageKeys.LogsGui.MSG_HOME_CLEARED_WORLD, home.world())); factions.put(faction.id(), updated); storage.saveFaction(updated); cleared++; diff --git a/src/main/java/com/hyperfactions/manager/RelationManager.java b/src/main/java/com/hyperfactions/manager/RelationManager.java index 9976b833..c0116ad1 100644 --- a/src/main/java/com/hyperfactions/manager/RelationManager.java +++ b/src/main/java/com/hyperfactions/manager/RelationManager.java @@ -5,6 +5,7 @@ import com.hyperfactions.data.*; import com.hyperfactions.integration.PermissionManager; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; @@ -638,7 +639,8 @@ private void setRelation(@NotNull UUID factionId, @NotNull UUID targetId, }; Faction updated = faction.withRelation(relation) - .withLog(FactionLog.create(logType, "Set " + targetName + " as " + type.getDisplayName(), actorUuid)); + .withLog(FactionLog.create(logType, "Set " + targetName + " as " + type.getDisplayName(), actorUuid, + MessageKeys.LogsGui.MSG_RELATION_SET, targetName, type.getDisplayName())); factionManager.updateFaction(updated); diff --git a/src/main/java/com/hyperfactions/manager/TeleportManager.java b/src/main/java/com/hyperfactions/manager/TeleportManager.java index 7f76bf55..874d4bfe 100644 --- a/src/main/java/com/hyperfactions/manager/TeleportManager.java +++ b/src/main/java/com/hyperfactions/manager/TeleportManager.java @@ -4,10 +4,13 @@ import com.hyperfactions.config.ConfigManager; import com.hyperfactions.data.Faction; import com.hyperfactions.integration.PermissionManager; +import com.hyperfactions.util.HFMessages; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import com.hyperfactions.util.MessageUtil; import com.hyperfactions.util.TimeUtil; import com.hypixel.hytale.server.core.Message; +import com.hypixel.hytale.server.core.universe.PlayerRef; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -301,8 +304,8 @@ public TeleportResult teleportToHome( if (!PermissionManager.get().hasPermission(playerUuid, Permissions.BYPASS_COOLDOWN)) { if (isOnCooldown(playerUuid)) { int remaining = getCooldownRemaining(playerUuid); - sendMessage.accept(MessageUtil.error("You must wait " - + TimeUtil.formatDurationSeconds(remaining) + " before teleporting again.")); + sendMessage.accept(MessageUtil.error( + HFMessages.get((PlayerRef) null, MessageKeys.Teleport.COOLDOWN_WAIT, TimeUtil.formatDurationSeconds(remaining)))); return TeleportResult.ON_COOLDOWN; } } @@ -334,7 +337,8 @@ public TeleportResult teleportToHome( pendingTeleports.put(playerUuid, pending); // Send warmup message - sendMessage.accept(MessageUtil.info("Teleporting to faction home in " + warmup + " seconds...", MessageUtil.COLOR_YELLOW)); + sendMessage.accept(MessageUtil.info( + HFMessages.get((PlayerRef) null, MessageKeys.Teleport.WARMUP_START, warmup), MessageUtil.COLOR_YELLOW)); Logger.debug("Scheduled teleport for %s, will execute at %d", playerUuid, executeAt); return TeleportResult.SUCCESS_WARMUP; @@ -411,7 +415,7 @@ public PendingTeleport checkReady(@NotNull UUID playerUuid, @NotNull Consumer sendMessage) { applyCooldown(playerUuid); - String msg = customMessage != null ? customMessage : "Teleported to faction home!"; + String msg = customMessage != null ? customMessage : HFMessages.get((PlayerRef) null, MessageKeys.Teleport.SUCCESS_DEFAULT); sendMessage.accept(MessageUtil.success(msg)); } @@ -438,9 +442,9 @@ public void onTeleportSuccess(@NotNull UUID playerUuid, @Nullable String customM */ public void onTeleportFailed(@NotNull TeleportResult result, @NotNull Consumer sendMessage) { switch (result) { - case NO_HOME -> sendMessage.accept(MessageUtil.error("Your faction has no home set.")); - case WORLD_NOT_FOUND -> sendMessage.accept(MessageUtil.error("World not found.")); - default -> sendMessage.accept(MessageUtil.error("Teleportation failed.")); + case NO_HOME -> sendMessage.accept(MessageUtil.error(HFMessages.get((PlayerRef) null, MessageKeys.Teleport.NO_HOME))); + case WORLD_NOT_FOUND -> sendMessage.accept(MessageUtil.error(HFMessages.get((PlayerRef) null, MessageKeys.Teleport.WORLD_NOT_FOUND))); + default -> sendMessage.accept(MessageUtil.error(HFMessages.get((PlayerRef) null, MessageKeys.Teleport.FAILED))); } } @@ -453,8 +457,10 @@ public void onTeleportFailed(@NotNull TeleportResult result, @NotNull Consumer sendMessage) { int secondsToAnnounce = pending.checkCountdown(); if (secondsToAnnounce > 0) { - String timeText = secondsToAnnounce == 1 ? "1 second" : secondsToAnnounce + " seconds"; - sendMessage.accept(MessageUtil.info("Teleporting in " + timeText + "...", MessageUtil.COLOR_YELLOW)); + String timeText = secondsToAnnounce == 1 + ? HFMessages.get((PlayerRef) null, MessageKeys.Teleport.COUNTDOWN_ONE) + : HFMessages.get((PlayerRef) null, MessageKeys.Teleport.COUNTDOWN, secondsToAnnounce); + sendMessage.accept(MessageUtil.info(timeText, MessageUtil.COLOR_YELLOW)); } } @@ -490,7 +496,7 @@ public boolean checkMovement( if (distSq > 0.25) { // 0.5 blocks removePending(playerUuid); - sendMessage.accept(MessageUtil.error("Teleportation cancelled - you moved!")); + sendMessage.accept(MessageUtil.error(HFMessages.get((PlayerRef) null, MessageKeys.Teleport.MOVED_CANCELLED))); return true; } @@ -514,7 +520,7 @@ public boolean cancelOnDamage( if (pendingTeleports.containsKey(playerUuid)) { removePending(playerUuid); - sendMessage.accept(MessageUtil.error("Teleportation cancelled - you took damage!")); + sendMessage.accept(MessageUtil.error(HFMessages.get((PlayerRef) null, MessageKeys.Teleport.DAMAGE_CANCELLED))); return true; } diff --git a/src/main/java/com/hyperfactions/platform/PlayerConnectionHandler.java b/src/main/java/com/hyperfactions/platform/PlayerConnectionHandler.java index 19292354..0a156445 100644 --- a/src/main/java/com/hyperfactions/platform/PlayerConnectionHandler.java +++ b/src/main/java/com/hyperfactions/platform/PlayerConnectionHandler.java @@ -4,6 +4,7 @@ import com.hyperfactions.Permissions; import com.hyperfactions.integration.PermissionManager; import com.hyperfactions.util.ErrorHandler; +import com.hyperfactions.util.HFMessages; import com.hyperfactions.util.Logger; import com.hypixel.hytale.server.core.event.events.player.PlayerChatEvent; import com.hypixel.hytale.server.core.event.events.player.PlayerConnectEvent; @@ -44,7 +45,7 @@ public void onPlayerConnect(PlayerConnectEvent event) { Logger.debug("Tracked players after connect: %d (contains %s=%s)", trackedPlayers.size(), uuid, trackedPlayers.containsKey(uuid)); - // Cache username, track first join and last online + // Cache username, track first join and last online, load preferences ErrorHandler.guard("Player connect: load/save player data for " + username, hyperFactions.getPlayerStorage().loadPlayerData(uuid).thenAccept(opt -> { com.hyperfactions.data.PlayerData data = opt.orElseGet(() -> new com.hyperfactions.data.PlayerData(uuid)); @@ -55,6 +56,11 @@ public void onPlayerConnect(PlayerConnectEvent event) { } data.setLastOnline(now); hyperFactions.getPlayerStorage().savePlayerData(data); + + // Cache language preference for i18n resolution + if (data.getLanguagePreference() != null) { + HFMessages.setLanguageOverride(uuid, data.getLanguagePreference()); + } })); // Load player power @@ -163,6 +169,9 @@ public void onPlayerDisconnect(PlayerDisconnectEvent event) { // Clean up territory tracking hyperFactions.getTerritoryNotifier().onPlayerDisconnect(uuid); + // Clear cached language preference + HFMessages.clearLanguageOverride(uuid); + // Unregister from active page tracker (GUI real-time updates) if (hyperFactions.getActivePageTracker() != null) { hyperFactions.getActivePageTracker().unregister(uuid); diff --git a/src/main/java/com/hyperfactions/protection/ProtectionChecker.java b/src/main/java/com/hyperfactions/protection/ProtectionChecker.java index bcd382d9..5f0d5c6e 100644 --- a/src/main/java/com/hyperfactions/protection/ProtectionChecker.java +++ b/src/main/java/com/hyperfactions/protection/ProtectionChecker.java @@ -15,7 +15,9 @@ import com.hyperfactions.manager.*; import com.hyperfactions.util.ChunkUtil; import com.hyperfactions.util.ErrorHandler; +import com.hyperfactions.util.HFMessages; import com.hyperfactions.util.Logger; +import com.hyperfactions.util.MessageKeys; import java.util.UUID; import java.util.function.Supplier; import org.jetbrains.annotations.NotNull; @@ -704,12 +706,12 @@ public String getDenialMessage(@NotNull ProtectionResult result) { public String getDenialMessage(@NotNull ProtectionResult result, @Nullable InteractionType type) { String action = getActionPhrase(type); return switch (result) { - case DENIED_SAFEZONE -> action + " in a SafeZone."; - case DENIED_WARZONE -> action + " in a WarZone."; - case DENIED_ENEMY_CLAIM -> action + " in enemy territory."; - case DENIED_NEUTRAL_CLAIM -> action + " in claimed territory."; - case DENIED_NO_PERMISSION -> action + " here."; - default -> action + " here."; + case DENIED_SAFEZONE -> HFMessages.get(MessageKeys.Protection.DENIED_SAFEZONE, action); + case DENIED_WARZONE -> HFMessages.get(MessageKeys.Protection.DENIED_WARZONE, action); + case DENIED_ENEMY_CLAIM -> HFMessages.get(MessageKeys.Protection.DENIED_ENEMY_CLAIM, action); + case DENIED_NEUTRAL_CLAIM -> HFMessages.get(MessageKeys.Protection.DENIED_CLAIMED, action); + case DENIED_NO_PERMISSION -> HFMessages.get(MessageKeys.Protection.DENIED_HERE, action); + default -> HFMessages.get(MessageKeys.Protection.DENIED_HERE, action); }; } @@ -722,26 +724,26 @@ public String getDenialMessage(@NotNull ProtectionResult result, @Nullable Inter @NotNull private String getActionPhrase(@Nullable InteractionType type) { if (type == null) { - return "You can't do that"; + return HFMessages.get(MessageKeys.Protection.ACTION_GENERIC); } return switch (type) { - case BUILD -> "You can't build or break blocks"; - case INTERACT, USE -> "You can't interact with that"; - case DOOR -> "You can't use doors"; - case CONTAINER -> "You can't open containers"; - case BENCH -> "You can't use crafting stations"; - case PROCESSING -> "You can't use processing stations"; - case SEAT -> "You can't use seats"; - case LIGHT -> "You can't toggle lights"; - case TELEPORTER, PORTAL -> "You can't use teleporters"; - case CRATE_PICKUP, CRATE_PLACE -> "You can't use crates"; - case NPC_TAME -> "You can't tame creatures"; - case NPC_INTERACT -> "You can't interact with NPCs"; - case MOUNT -> "You can't mount creatures"; - case PVE_DAMAGE -> "You can't damage creatures"; - case DAMAGE -> "You can't do that"; - case ITEM_DROP -> "You can't drop items"; - case ITEM_PICKUP -> "You can't pick up items"; + case BUILD -> HFMessages.get(MessageKeys.Protection.ACTION_BUILD); + case INTERACT, USE -> HFMessages.get(MessageKeys.Protection.ACTION_INTERACT); + case DOOR -> HFMessages.get(MessageKeys.Protection.ACTION_DOOR); + case CONTAINER -> HFMessages.get(MessageKeys.Protection.ACTION_CONTAINER); + case BENCH -> HFMessages.get(MessageKeys.Protection.ACTION_BENCH); + case PROCESSING -> HFMessages.get(MessageKeys.Protection.ACTION_PROCESSING); + case SEAT -> HFMessages.get(MessageKeys.Protection.ACTION_SEAT); + case LIGHT -> HFMessages.get(MessageKeys.Protection.ACTION_LIGHT); + case TELEPORTER, PORTAL -> HFMessages.get(MessageKeys.Protection.ACTION_TELEPORTER); + case CRATE_PICKUP, CRATE_PLACE -> HFMessages.get(MessageKeys.Protection.ACTION_CRATE); + case NPC_TAME -> HFMessages.get(MessageKeys.Protection.ACTION_TAME); + case NPC_INTERACT -> HFMessages.get(MessageKeys.Protection.ACTION_NPC); + case MOUNT -> HFMessages.get(MessageKeys.Protection.ACTION_MOUNT); + case PVE_DAMAGE -> HFMessages.get(MessageKeys.Protection.ACTION_PVE); + case DAMAGE -> HFMessages.get(MessageKeys.Protection.ACTION_GENERIC); + case ITEM_DROP -> HFMessages.get(MessageKeys.Protection.ACTION_ITEM_DROP); + case ITEM_PICKUP -> HFMessages.get(MessageKeys.Protection.ACTION_ITEM_PICKUP); }; } @@ -754,13 +756,13 @@ private String getActionPhrase(@Nullable InteractionType type) { @NotNull public String getDenialMessage(@NotNull PvPResult result) { return switch (result) { - case DENIED_SAFEZONE -> "PvP is disabled in SafeZones."; - case DENIED_SAME_FACTION -> "You cannot attack faction members."; - case DENIED_ALLY -> "You cannot attack allies."; - case DENIED_ATTACKER_SAFEZONE, DENIED_DEFENDER_SAFEZONE -> "PvP is disabled in SafeZones."; - case DENIED_SPAWN_PROTECTED -> "That player has spawn protection."; - case DENIED_TERRITORY_NO_PVP -> "PvP is disabled in this territory."; - default -> "You cannot attack this player."; + case DENIED_SAFEZONE -> HFMessages.get(MessageKeys.Protection.PVP_SAFEZONE); + case DENIED_SAME_FACTION -> HFMessages.get(MessageKeys.Protection.PVP_SAME_FACTION); + case DENIED_ALLY -> HFMessages.get(MessageKeys.Protection.PVP_ALLY); + case DENIED_ATTACKER_SAFEZONE, DENIED_DEFENDER_SAFEZONE -> HFMessages.get(MessageKeys.Protection.PVP_SAFEZONE); + case DENIED_SPAWN_PROTECTED -> HFMessages.get(MessageKeys.Protection.PVP_SPAWN_PROTECTED); + case DENIED_TERRITORY_NO_PVP -> HFMessages.get(MessageKeys.Protection.PVP_TERRITORY_DISABLED); + default -> HFMessages.get(MessageKeys.Protection.PVP_GENERIC); }; } @@ -824,12 +826,12 @@ private String checkMixinProtection(@NotNull UUID playerUuid, @NotNull String wo if (!zone.getEffectiveFlag(zoneFlag)) { String action = getActionPhrase(factionType); if (zone.isSafeZone()) { - return action + " in a SafeZone."; + return HFMessages.get(MessageKeys.Protection.DENIED_SAFEZONE, action); } if (zone.isWarZone()) { - return action + " in a WarZone."; + return HFMessages.get(MessageKeys.Protection.DENIED_WARZONE, action); } - return action + " in this zone."; + return HFMessages.get(MessageKeys.Protection.DENIED_ZONE, action); } if (zone.isWarZone()) { return null; @@ -856,7 +858,7 @@ private String checkMixinProtection(@NotNull UUID playerUuid, @NotNull String wo && member.role().getLevel() >= FactionRole.OFFICER.getLevel(); String level = isOfficerOrLeader ? "officer" : "member"; if (perms != null && !checkPermission(perms, level, factionType)) { - return getActionPhrase(factionType) + " here. (Faction permission: " + level + ")"; + return HFMessages.get(MessageKeys.Protection.DENIED_FACTION_PERM, getActionPhrase(factionType), level); } return null; } @@ -868,7 +870,7 @@ private String checkMixinProtection(@NotNull UUID playerUuid, @NotNull String wo if (perms != null && checkPermission(perms, "ally", factionType)) { return null; } - return getActionPhrase(factionType) + " here. (Ally territory)"; + return HFMessages.get(MessageKeys.Protection.DENIED_ALLY_TERRITORY, getActionPhrase(factionType)); } } @@ -881,15 +883,15 @@ private String checkMixinProtection(@NotNull UUID playerUuid, @NotNull String wo if (playerFactionId != null) { RelationType relation = relationManager.getRelation(playerFactionId, claimOwner); if (relation == RelationType.ENEMY) { - return getActionPhrase(factionType) + " in enemy territory."; + return HFMessages.get(MessageKeys.Protection.DENIED_ENEMY_CLAIM, getActionPhrase(factionType)); } } - return getActionPhrase(factionType) + " in claimed territory."; + return HFMessages.get(MessageKeys.Protection.DENIED_CLAIMED, getActionPhrase(factionType)); } catch (Exception e) { // Fail-closed: deny on any exception to prevent unauthorized actions ErrorHandler.report(String.format("Protection check error (fail-closed) for player %s at %s/%d/%d/%d type=%s", playerUuid, worldName, x, y, z, factionType), e); - return "Protection error — action blocked for safety."; + return HFMessages.get(MessageKeys.Protection.DENIED_ERROR); } } @@ -1067,7 +1069,7 @@ public String checkEntityDamage(@Nullable UUID attackerUuid, @Nullable UUID targ if (attackerUuid == null && targetUuid != null) { Zone zone = zoneManager.getZone(worldName, chunkX, chunkZ); if (zone != null && !zone.getEffectiveFlag(ZoneFlags.MOB_DAMAGE)) { - return "Mob damage is disabled in this zone."; + return HFMessages.get(MessageKeys.Protection.MOB_DAMAGE_DISABLED); } return null; } @@ -1076,7 +1078,7 @@ public String checkEntityDamage(@Nullable UUID attackerUuid, @Nullable UUID targ if (attackerUuid != null && targetUuid == null) { Zone zone = zoneManager.getZone(worldName, chunkX, chunkZ); if (zone != null && !zone.getEffectiveFlag(ZoneFlags.PVE_DAMAGE)) { - return "PvE damage is disabled in this zone."; + return HFMessages.get(MessageKeys.Protection.PVE_DAMAGE_DISABLED); } // Check territory claim permissions return checkPveInTerritory(attackerUuid, worldName, chunkX, chunkZ); @@ -1146,7 +1148,7 @@ private String checkPveInTerritory(@NotNull UUID attackerUuid, @NotNull String w } if (!checkPermission(perms, level, InteractionType.PVE_DAMAGE)) { - return "You cannot damage mobs in this territory."; + return HFMessages.get(MessageKeys.Protection.PVE_TERRITORY_DENIED); } return null; } @@ -1342,7 +1344,7 @@ public OrbisMixinsIntegration.CommandCheckResult checkCommandBlock( || lowerCmd.startsWith("/home") || lowerCmd.startsWith("/spawn") || lowerCmd.startsWith("/tp") || lowerCmd.startsWith("/tpa")) { return OrbisMixinsIntegration.CommandCheckResult.deny( - "You cannot use that command while combat tagged."); + HFMessages.get(MessageKeys.Protection.COMBAT_TAG_COMMAND)); } } diff --git a/src/main/java/com/hyperfactions/protection/ecs/PlayerDeathSystem.java b/src/main/java/com/hyperfactions/protection/ecs/PlayerDeathSystem.java index 80909b04..e22cca2a 100644 --- a/src/main/java/com/hyperfactions/protection/ecs/PlayerDeathSystem.java +++ b/src/main/java/com/hyperfactions/protection/ecs/PlayerDeathSystem.java @@ -303,7 +303,15 @@ private void announceDeathLocation(UUID victimUuid, PlayerRef playerRef, } PlayerRef member = hyperFactions.lookupPlayer(memberUuid); if (member != null) { - member.sendMessage(deathMsg); + // Check member's death announcement preference + final PlayerRef finalMember = member; + final Message finalMsg = deathMsg; + hyperFactions.getPlayerStorage().loadPlayerData(memberUuid).thenAccept(opt -> { + boolean enabled = opt.map(PlayerData::isDeathAnnouncementsEnabled).orElse(true); + if (enabled) { + finalMember.sendMessage(finalMsg); + } + }); } } diff --git a/src/main/java/com/hyperfactions/storage/json/JsonFactionStorage.java b/src/main/java/com/hyperfactions/storage/json/JsonFactionStorage.java index 23041acb..a4aa66ac 100644 --- a/src/main/java/com/hyperfactions/storage/json/JsonFactionStorage.java +++ b/src/main/java/com/hyperfactions/storage/json/JsonFactionStorage.java @@ -310,6 +310,16 @@ private JsonObject serializeLog(FactionLog log) { if (log.actorUuid() != null) { obj.addProperty("actorUuid", log.actorUuid().toString()); } + if (log.messageKey() != null) { + obj.addProperty("messageKey", log.messageKey()); + } + if (log.messageArgs() != null && !log.messageArgs().isEmpty()) { + JsonArray argsArray = new JsonArray(); + for (String arg : log.messageArgs()) { + argsArray.add(arg); + } + obj.add("messageArgs", argsArray); + } return obj; } @@ -490,11 +500,21 @@ private FactionRelation deserializeRelation(JsonObject obj) { private FactionLog deserializeLog(JsonObject obj) { UUID actorUuid = obj.has("actorUuid") ? UUID.fromString(obj.get("actorUuid").getAsString()) : null; + String messageKey = obj.has("messageKey") ? obj.get("messageKey").getAsString() : null; + List messageArgs = null; + if (obj.has("messageArgs") && obj.get("messageArgs").isJsonArray()) { + messageArgs = new ArrayList<>(); + for (JsonElement el : obj.getAsJsonArray("messageArgs")) { + messageArgs.add(el.getAsString()); + } + } return new FactionLog( FactionLog.LogType.valueOf(obj.get("type").getAsString()), obj.get("message").getAsString(), obj.get("timestamp").getAsLong(), - actorUuid + actorUuid, + messageKey, + messageArgs ); } } diff --git a/src/main/java/com/hyperfactions/storage/json/JsonPlayerStorage.java b/src/main/java/com/hyperfactions/storage/json/JsonPlayerStorage.java index 74c585ab..846fd65a 100644 --- a/src/main/java/com/hyperfactions/storage/json/JsonPlayerStorage.java +++ b/src/main/java/com/hyperfactions/storage/json/JsonPlayerStorage.java @@ -323,6 +323,20 @@ private JsonObject serializePlayerData(PlayerData data) { obj.addProperty("adminBypassEnabled", true); } + // Player preferences (i18n + notifications) + if (data.getLanguagePreference() != null) { + obj.addProperty("languagePreference", data.getLanguagePreference()); + } + if (!data.isTerritoryAlertsEnabled()) { + obj.addProperty("territoryAlertsEnabled", false); + } + if (!data.isDeathAnnouncementsEnabled()) { + obj.addProperty("deathAnnouncementsEnabled", false); + } + if (!data.isPowerNotificationsEnabled()) { + obj.addProperty("powerNotificationsEnabled", false); + } + // Membership history if (!data.getMembershipHistory().isEmpty()) { JsonArray historyArr = new JsonArray(); @@ -385,6 +399,20 @@ private PlayerData deserializePlayerData(JsonObject obj) { data.setAdminBypassEnabled(obj.get("adminBypassEnabled").getAsBoolean()); } + // Player preferences (i18n + notifications) + if (obj.has("languagePreference") && !obj.get("languagePreference").isJsonNull()) { + data.setLanguagePreference(obj.get("languagePreference").getAsString()); + } + if (obj.has("territoryAlertsEnabled")) { + data.setTerritoryAlertsEnabled(obj.get("territoryAlertsEnabled").getAsBoolean()); + } + if (obj.has("deathAnnouncementsEnabled")) { + data.setDeathAnnouncementsEnabled(obj.get("deathAnnouncementsEnabled").getAsBoolean()); + } + if (obj.has("powerNotificationsEnabled")) { + data.setPowerNotificationsEnabled(obj.get("powerNotificationsEnabled").getAsBoolean()); + } + // Membership history if (obj.has("membershipHistory") && obj.get("membershipHistory").isJsonArray()) { JsonArray historyArr = obj.getAsJsonArray("membershipHistory"); diff --git a/src/main/java/com/hyperfactions/territory/TerritoryNotifier.java b/src/main/java/com/hyperfactions/territory/TerritoryNotifier.java index 357b7445..0eb5050a 100644 --- a/src/main/java/com/hyperfactions/territory/TerritoryNotifier.java +++ b/src/main/java/com/hyperfactions/territory/TerritoryNotifier.java @@ -9,6 +9,7 @@ import com.hyperfactions.manager.FactionManager; import com.hyperfactions.manager.RelationManager; import com.hyperfactions.manager.ZoneManager; +import com.hyperfactions.storage.PlayerStorage; import com.hyperfactions.territory.TerritoryInfo.TerritoryType; import com.hyperfactions.util.ChunkUtil; import com.hyperfactions.util.Logger; @@ -16,6 +17,7 @@ import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.util.EventTitleUtil; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import org.jetbrains.annotations.NotNull; @@ -35,22 +37,29 @@ public class TerritoryNotifier { private final RelationManager relationManager; + private final PlayerStorage playerStorage; + // Tracks the previous territory for each player private final Map previousTerritories = new ConcurrentHashMap<>(); // Tracks the last chunk for each player (to detect chunk changes) private final Map lastChunks = new ConcurrentHashMap<>(); + // Players who have disabled territory alerts (opt-out set) + private final Set alertsDisabledPlayers = ConcurrentHashMap.newKeySet(); + /** Creates a new TerritoryNotifier. */ public TerritoryNotifier( @NotNull FactionManager factionManager, @NotNull ClaimManager claimManager, @NotNull ZoneManager zoneManager, - @NotNull RelationManager relationManager) { + @NotNull RelationManager relationManager, + @NotNull PlayerStorage playerStorage) { this.factionManager = factionManager; this.claimManager = claimManager; this.zoneManager = zoneManager; this.relationManager = relationManager; + this.playerStorage = playerStorage; } /** @@ -135,6 +144,13 @@ private TerritoryInfo buildWildernessFromConfig(@NotNull TerritoryInfo previousT * @param territory the territory info */ private void sendTerritoryNotification(@NotNull PlayerRef playerRef, @NotNull TerritoryInfo territory) { + // Check player preference — respect opt-out + if (alertsDisabledPlayers.contains(playerRef.getUuid())) { + Logger.debugTerritory("Territory notification suppressed for %s: player disabled alerts", + playerRef.getUsername()); + return; + } + if (!territory.isNotificationEnabled()) { Logger.debugTerritory("Notification suppressed for %s: %s", playerRef.getUsername(), territory.getPrimaryText()); @@ -270,6 +286,16 @@ public void onPlayerConnect(@NotNull PlayerRef playerRef, @NotNull String world, } UUID playerUuid = playerRef.getUuid(); + + // Load territory alert preference + playerStorage.loadPlayerData(playerUuid).thenAccept(opt -> { + opt.ifPresent(data -> { + if (!data.isTerritoryAlertsEnabled()) { + alertsDisabledPlayers.add(playerUuid); + } + }); + }); + int chunkX = ChunkUtil.toChunkCoord(x); int chunkZ = ChunkUtil.toChunkCoord(z); @@ -293,6 +319,7 @@ public void onPlayerConnect(@NotNull PlayerRef playerRef, @NotNull String world, public void onPlayerDisconnect(@NotNull UUID playerUuid) { previousTerritories.remove(playerUuid); lastChunks.remove(playerUuid); + alertsDisabledPlayers.remove(playerUuid); } /** @@ -317,6 +344,21 @@ public ChunkKey getLastChunk(@NotNull UUID playerUuid) { return lastChunks.get(playerUuid); } + /** + * Updates the cached territory alerts preference for a player. + * Called from PlayerSettingsPage when the preference is toggled. + * + * @param playerUuid the player's UUID + * @param enabled whether territory alerts are enabled + */ + public void setTerritoryAlertsEnabled(@NotNull UUID playerUuid, boolean enabled) { + if (enabled) { + alertsDisabledPlayers.remove(playerUuid); + } else { + alertsDisabledPlayers.add(playerUuid); + } + } + /** * Clears all tracking data. * Called on plugin shutdown. @@ -324,5 +366,6 @@ public ChunkKey getLastChunk(@NotNull UUID playerUuid) { public void shutdown() { previousTerritories.clear(); lastChunks.clear(); + alertsDisabledPlayers.clear(); } } diff --git a/src/main/java/com/hyperfactions/territory/TerritoryTickingSystem.java b/src/main/java/com/hyperfactions/territory/TerritoryTickingSystem.java index a93112cf..3eff31ba 100644 --- a/src/main/java/com/hyperfactions/territory/TerritoryTickingSystem.java +++ b/src/main/java/com/hyperfactions/territory/TerritoryTickingSystem.java @@ -133,7 +133,7 @@ public void tick(float dt, int index, @NotNull ArchetypeChunk arche TeleportManager.TeleportDestination dest = ready.destination(); if (!isMountEntryAllowed(dest.world(), dest.x(), dest.z())) { playerRef.sendMessage(com.hyperfactions.util.MessageUtil.error( - "You can't teleport into that zone while mounted.")); + playerRef, com.hyperfactions.util.MessageKeys.Teleport.MOUNT_TELEPORT_BLOCKED)); Logger.debugTerritory("Teleport blocked for mounted player %s to zone at (%.1f, %.1f)", playerUuid, dest.x(), dest.z()); mountBlocked = true; @@ -172,7 +172,7 @@ public void tick(float dt, int index, @NotNull ArchetypeChunk arche } }); ProtectionMessageDebounce.sendDenial(playerRef, "mount_entry", - "You can't enter this zone while mounted."); + com.hyperfactions.util.HFMessages.get(playerRef, com.hyperfactions.util.MessageKeys.Teleport.MOUNT_ENTRY_BLOCKED)); Logger.debugTerritory("Mount entry blocked for %s at zone '%s' (%s), safe=(%.1f, %.1f, %.1f)", playerUuid, zone.name(), zone.type().name(), safePos[0], safeY, safePos[1]); } diff --git a/src/main/java/com/hyperfactions/util/HFMessages.java b/src/main/java/com/hyperfactions/util/HFMessages.java new file mode 100644 index 00000000..8b76fd34 --- /dev/null +++ b/src/main/java/com/hyperfactions/util/HFMessages.java @@ -0,0 +1,211 @@ +package com.hyperfactions.util; + +import com.hyperfactions.config.ConfigManager; +import com.hyperfactions.data.FactionLog; +import com.hypixel.hytale.server.core.modules.i18n.I18nModule; +import com.hypixel.hytale.server.core.universe.PlayerRef; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Centralized i18n message resolution for HyperFactions. + * + *

+ * Uses Hytale's native {@link I18nModule} for translations. + * Supports server-wide language and per-player client language. + * + *

+ * Language resolution order: + *

    + *
  1. Player's client language via {@link PlayerRef#getLanguage()} (if {@code usePlayerLanguage=true})
  2. + *
  3. Server default language from config
  4. + *
+ * + *

+ * Per-player saved language preferences are cached via + * {@link #setLanguageOverride(UUID, String)} when loaded from PlayerData. + * + *

Usage: + *

+ *   HFMessages.get(playerRef, MessageKeys.Common.NO_PERMISSION);
+ *   HFMessages.get(playerRef, MessageKeys.Create.SUCCESS, factionName);
+ *   HFMessages.get(MessageKeys.Common.LOADING); // server language
+ * 
+ */ +public final class HFMessages { + + /** Per-player language overrides from PlayerData preferences. */ + private static final Map languageOverrides = new ConcurrentHashMap<>(); + + private HFMessages() {} + + /** + * Sets a language override for a player. + * Called when preferences are loaded from PlayerData on connect, + * or when the player changes their language in settings. + * + * @param uuid The player's UUID + * @param language The language code, or null to clear the override (auto-detect) + */ + public static void setLanguageOverride(@NotNull UUID uuid, @Nullable String language) { + if (language == null) { + languageOverrides.remove(uuid); + } else { + languageOverrides.put(uuid, language); + } + } + + /** + * Clears the language override for a player. + * Called on player disconnect. + * + * @param uuid The player's UUID + */ + public static void clearLanguageOverride(@NotNull UUID uuid) { + languageOverrides.remove(uuid); + } + + /** + * Gets a translated message for a specific player. + * Uses the player's resolved language (preference → client → server default). + * + * @param player The player (null falls back to server language) + * @param key The full message key (e.g. "hyperfactions.common.no_permission") + * @param args Replacement arguments for {0}, {1}, etc. + * @return Translated and formatted message, or the key itself if not found + */ + @NotNull + public static String get(@Nullable PlayerRef player, @NotNull String key, Object... args) { + String lang = getLanguageFor(player); + return getForLanguage(lang, key, args); + } + + /** + * Gets a translated message using the server default language. + * + * @param key The full message key + * @param args Replacement arguments for {0}, {1}, etc. + * @return Translated and formatted message + */ + @NotNull + public static String get(@NotNull String key, Object... args) { + return get((PlayerRef) null, key, args); + } + + /** + * Gets a translated message for a specific language code. + * + * @param language The language code (e.g. "en-US", "es-ES") + * @param key The full message key + * @param args Replacement arguments + * @return Translated and formatted message + */ + @NotNull + public static String getForLanguage(@NotNull String language, @NotNull String key, Object... args) { + I18nModule i18n = I18nModule.get(); + if (i18n == null) { + return formatFallback(key, args); + } + + String message = i18n.getMessage(language, key); + if (message == null) { + // Try fallback to en-US + message = i18n.getMessage("en-US", key); + } + if (message == null) { + // Key not found — return key itself for debugging + return key; + } + + return format(message, args); + } + + /** + * Determines the language to use for a player. + * + *

Resolution order: + *

    + *
  1. Player's saved language preference (from PlayerData, cached in memory)
  2. + *
  3. Player's client language (if {@code usePlayerLanguage} enabled in config)
  4. + *
  5. Server default language
  6. + *
+ * + * @param player The player (null returns server default) + * @return The resolved language code + */ + @NotNull + public static String getLanguageFor(@Nullable PlayerRef player) { + ConfigManager config = ConfigManager.get(); + String serverDefault = config.getDefaultLanguage(); + + if (player == null) { + return serverDefault; + } + + // Check saved language preference first + String override = languageOverrides.get(player.getUuid()); + if (override != null) { + return override; + } + + // Use client language if enabled + if (config.isUsePlayerLanguage()) { + return player.getLanguage(); + } + + return serverDefault; + } + + /** + * Resolves a FactionLog's message for display, using the i18n key if available. + * Falls back to the English message for legacy logs without a messageKey. + * + * @param player the player viewing the log (determines locale) + * @param log the faction log entry + * @return the localized message, or the English fallback + */ + @NotNull + public static String resolveLogMessage(@Nullable PlayerRef player, @NotNull FactionLog log) { + if (log.messageKey() != null) { + Object[] args = log.messageArgs() != null ? log.messageArgs().toArray() : new Object[0]; + return get(player, log.messageKey(), args); + } + return log.message(); + } + + /** + * Formats a message by replacing {0}, {1}, etc. with provided arguments. + */ + @NotNull + private static String format(@NotNull String message, Object... args) { + if (args == null || args.length == 0) { + return message; + } + + String result = message; + for (int i = 0; i < args.length; i++) { + String placeholder = "{" + i + "}"; + String replacement = args[i] != null ? args[i].toString() : ""; + result = result.replace(placeholder, replacement); + } + return result; + } + + /** + * Fallback formatting when I18nModule is not available. + */ + @NotNull + private static String formatFallback(@NotNull String key, Object... args) { + StringBuilder sb = new StringBuilder(key); + if (args != null && args.length > 0) { + sb.append(": "); + for (Object arg : args) { + sb.append(arg).append(" "); + } + } + return sb.toString().trim(); + } +} diff --git a/src/main/java/com/hyperfactions/util/MessageKeys.java b/src/main/java/com/hyperfactions/util/MessageKeys.java new file mode 100644 index 00000000..df0116a3 --- /dev/null +++ b/src/main/java/com/hyperfactions/util/MessageKeys.java @@ -0,0 +1,2413 @@ +package com.hyperfactions.util; + +/** + * Static constants for all HyperFactions i18n message keys. + * + *

+ * Organized by nested inner classes — one per feature domain. + * Key format: {@code {file_prefix}.{domain}.{action}} + * + *

+ * File prefixes map to .lang file names: + *

    + *
  • {@code hyperfactions.*} → {@code hyperfactions.lang} (commands, errors, common)
  • + *
  • {@code hyperfactions_gui.*} → {@code hyperfactions_gui.lang} (GUI labels, buttons)
  • + *
  • {@code hyperfactions_help.*} → {@code hyperfactions_help.lang} (help content, build-generated)
  • + *
  • {@code hyperfactions_admin.*} → {@code hyperfactions_admin.lang} (admin GUI)
  • + *
+ */ +public final class MessageKeys { + + private MessageKeys() {} + + // ===================================================================== + // Common — shared messages used across multiple features + // ===================================================================== + + /** Shared messages used across multiple features (commands, GUI, protection). */ + public static final class Common { + public static final String NO_PERMISSION = "hyperfactions.common.no_permission"; + public static final String NOT_IN_FACTION = "hyperfactions.common.not_in_faction"; + public static final String ALREADY_IN_FACTION = "hyperfactions.common.already_in_faction"; + public static final String PLAYER_NOT_FOUND = "hyperfactions.common.player_not_found"; + public static final String FACTION_NOT_FOUND = "hyperfactions.common.faction_not_found"; + public static final String PLAYER_NOT_ONLINE = "hyperfactions.common.player_not_online"; + public static final String MUST_BE_LEADER = "hyperfactions.common.must_be_leader"; + public static final String MUST_BE_OFFICER = "hyperfactions.common.must_be_officer"; + public static final String COMBAT_TAGGED = "hyperfactions.common.combat_tagged"; + public static final String CANCEL = "hyperfactions.common.cancel"; + public static final String CONFIRM = "hyperfactions.common.confirm"; + public static final String SAVE = "hyperfactions.common.save"; + public static final String CLOSE = "hyperfactions.common.close"; + public static final String YES = "hyperfactions.common.yes"; + public static final String NO = "hyperfactions.common.no"; + public static final String LOADING = "hyperfactions.common.loading"; + public static final String ONLINE = "hyperfactions.common.online"; + public static final String OFFLINE = "hyperfactions.common.offline"; + public static final String ENABLED = "hyperfactions.common.enabled"; + public static final String DISABLED = "hyperfactions.common.disabled"; + public static final String NONE = "hyperfactions.common.none"; + public static final String PAGE = "hyperfactions.common.page"; + public static final String UNKNOWN = "hyperfactions.common.unknown"; + public static final String ERROR_GENERIC = "hyperfactions.common.error_generic"; + public static final String GUI_FALLBACK = "hyperfactions.common.gui_fallback"; + public static final String ADMIN_PREFIX = "hyperfactions.common.admin_prefix"; + public static final String LOCATION_ERROR = "hyperfactions.common.location_error"; + public static final String WORLD_ERROR = "hyperfactions.common.world_error"; + public static final String INVALID_ID = "hyperfactions.common.invalid_id"; + public static final String NA = "hyperfactions.common.na"; + public static final String CLEAR = "hyperfactions.common.clear"; + public static final String BACK = "hyperfactions.common.back"; + public static final String LEAVE = "hyperfactions.common.leave"; + public static final String TRANSFER = "hyperfactions.common.transfer"; + public static final String DISBAND = "hyperfactions.common.disband"; + public static final String WORLD_FALLBACK = "hyperfactions.common.world_fallback"; + + private Common() {} + } + + // ===================================================================== + // Commands — organized by command group + // ===================================================================== + + /** /f create command messages. */ + public static final class Create { + public static final String NO_PERMISSION = "hyperfactions.cmd.create.no_permission"; + public static final String USAGE = "hyperfactions.cmd.create.usage"; + public static final String SUCCESS = "hyperfactions.cmd.create.success"; + public static final String ALREADY_IN_NAMED = "hyperfactions.cmd.create.already_in_named"; + public static final String USE_LEAVE_FIRST = "hyperfactions.cmd.create.use_leave_first"; + public static final String NAME_TAKEN = "hyperfactions.cmd.create.name_taken"; + public static final String NAME_TOO_SHORT = "hyperfactions.cmd.create.name_too_short"; + public static final String NAME_TOO_LONG = "hyperfactions.cmd.create.name_too_long"; + public static final String FAILED = "hyperfactions.cmd.create.failed"; + + private Create() {} + } + + /** /f disband command messages. */ + public static final class Disband { + public static final String NO_PERMISSION = "hyperfactions.cmd.disband.no_permission"; + public static final String NOT_LEADER = "hyperfactions.cmd.disband.not_leader"; + public static final String CONFIRM_PROMPT = "hyperfactions.cmd.disband.confirm_prompt"; + public static final String CONFIRM_INSTRUCTION = "hyperfactions.cmd.disband.confirm_instruction"; + public static final String SUCCESS = "hyperfactions.cmd.disband.success"; + public static final String FAILED = "hyperfactions.cmd.disband.failed"; + public static final String CANCELLED = "hyperfactions.cmd.disband.cancelled"; + + private Disband() {} + } + + /** /f rename command messages. */ + public static final class Rename { + public static final String NO_PERMISSION = "hyperfactions.cmd.rename.no_permission"; + public static final String NOT_LEADER = "hyperfactions.cmd.rename.not_leader"; + public static final String USAGE = "hyperfactions.cmd.rename.usage"; + public static final String TOO_SHORT = "hyperfactions.cmd.rename.too_short"; + public static final String TOO_LONG = "hyperfactions.cmd.rename.too_long"; + public static final String NAME_TAKEN = "hyperfactions.cmd.rename.name_taken"; + public static final String SUCCESS = "hyperfactions.cmd.rename.success"; + public static final String BROADCAST = "hyperfactions.cmd.rename.broadcast"; + + private Rename() {} + } + + /** /f desc command messages. */ + public static final class Desc { + public static final String NO_PERMISSION = "hyperfactions.cmd.desc.no_permission"; + public static final String NOT_OFFICER = "hyperfactions.cmd.desc.not_officer"; + public static final String SET = "hyperfactions.cmd.desc.set"; + public static final String CLEARED = "hyperfactions.cmd.desc.cleared"; + + private Desc() {} + } + + /** /f open command messages. */ + public static final class Open { + public static final String NO_PERMISSION = "hyperfactions.cmd.open.no_permission"; + public static final String NOT_LEADER = "hyperfactions.cmd.open.not_leader"; + public static final String ALREADY_OPEN = "hyperfactions.cmd.open.already_open"; + public static final String SUCCESS = "hyperfactions.cmd.open.success"; + public static final String BROADCAST = "hyperfactions.cmd.open.broadcast"; + + private Open() {} + } + + /** /f close command messages. */ + public static final class Close { + public static final String NO_PERMISSION = "hyperfactions.cmd.close.no_permission"; + public static final String NOT_LEADER = "hyperfactions.cmd.close.not_leader"; + public static final String ALREADY_CLOSED = "hyperfactions.cmd.close.already_closed"; + public static final String SUCCESS = "hyperfactions.cmd.close.success"; + public static final String BROADCAST = "hyperfactions.cmd.close.broadcast"; + + private Close() {} + } + + /** /f color command messages. */ + public static final class Color { + public static final String NO_PERMISSION = "hyperfactions.cmd.color.no_permission"; + public static final String NOT_OFFICER = "hyperfactions.cmd.color.not_officer"; + public static final String COLORS_DISABLED = "hyperfactions.cmd.color.colors_disabled"; + public static final String USAGE = "hyperfactions.cmd.color.usage"; + public static final String USAGE_HINT = "hyperfactions.cmd.color.usage_hint"; + public static final String INVALID = "hyperfactions.cmd.color.invalid"; + public static final String SUCCESS = "hyperfactions.cmd.color.success"; + + private Color() {} + } + + /** /f invite command messages. */ + public static final class Invite { + public static final String NO_PERMISSION = "hyperfactions.cmd.invite.no_permission"; + public static final String NOT_OFFICER = "hyperfactions.cmd.invite.not_officer"; + public static final String USAGE = "hyperfactions.cmd.invite.usage"; + public static final String PLAYER_NOT_FOUND = "hyperfactions.cmd.invite.player_not_found"; + public static final String TARGET_IN_FACTION = "hyperfactions.cmd.invite.target_in_faction"; + public static final String SENT = "hyperfactions.cmd.invite.sent"; + public static final String RECEIVED = "hyperfactions.cmd.invite.received"; + public static final String ACCEPT_HINT = "hyperfactions.cmd.invite.accept_hint"; + + private Invite() {} + } + + /** /f join, /f accept, /f request command messages. */ + public static final class Join { + public static final String NO_PERMISSION = "hyperfactions.cmd.join.no_permission"; + public static final String ALREADY_IN_NAMED = "hyperfactions.cmd.join.already_in_named"; + public static final String USE_LEAVE_HINT = "hyperfactions.cmd.join.use_leave_hint"; + public static final String NO_INVITES = "hyperfactions.cmd.join.no_invites"; + public static final String FACTION_NOT_FOUND = "hyperfactions.cmd.join.faction_not_found"; + public static final String NOT_INVITED = "hyperfactions.cmd.join.not_invited"; + public static final String FACTION_GONE = "hyperfactions.cmd.join.faction_gone"; + public static final String SUCCESS = "hyperfactions.cmd.join.success"; + public static final String BROADCAST = "hyperfactions.cmd.join.broadcast"; + public static final String FACTION_FULL = "hyperfactions.cmd.join.faction_full"; + public static final String FAILED = "hyperfactions.cmd.join.failed"; + + private Join() {} + } + + /** /f leave command messages. */ + public static final class Leave { + public static final String NO_PERMISSION = "hyperfactions.cmd.leave.no_permission"; + public static final String CONFIRM_PROMPT = "hyperfactions.cmd.leave.confirm_prompt"; + public static final String CONFIRM_INSTRUCTION = "hyperfactions.cmd.leave.confirm_instruction"; + public static final String SUCCESS = "hyperfactions.cmd.leave.success"; + public static final String BROADCAST = "hyperfactions.cmd.leave.broadcast"; + public static final String FAILED = "hyperfactions.cmd.leave.failed"; + public static final String CANCELLED = "hyperfactions.cmd.leave.cancelled"; + + private Leave() {} + } + + /** /f kick command messages. */ + public static final class Kick { + public static final String NO_PERMISSION = "hyperfactions.cmd.kick.no_permission"; + public static final String USAGE = "hyperfactions.cmd.kick.usage"; + public static final String NOT_IN_YOUR_FACTION = "hyperfactions.cmd.kick.not_in_your_faction"; + public static final String SUCCESS = "hyperfactions.cmd.kick.success"; + public static final String BROADCAST = "hyperfactions.cmd.kick.broadcast"; + public static final String KICKED = "hyperfactions.cmd.kick.kicked"; + public static final String CANNOT_KICK_HIGHER = "hyperfactions.cmd.kick.cannot_kick_higher"; + public static final String CANNOT_KICK_LEADER = "hyperfactions.cmd.kick.cannot_kick_leader"; + public static final String FAILED = "hyperfactions.cmd.kick.failed"; + + private Kick() {} + } + + /** /f promote, /f demote, /f transfer command messages. */ + public static final class Rank { + // Promote + public static final String PROMOTE_NO_PERMISSION = "hyperfactions.cmd.rank.promote_no_permission"; + public static final String PROMOTE_USAGE = "hyperfactions.cmd.rank.promote_usage"; + public static final String PROMOTED = "hyperfactions.cmd.rank.promoted"; + public static final String PROMOTE_BROADCAST = "hyperfactions.cmd.rank.promote_broadcast"; + public static final String ALREADY_HIGHEST = "hyperfactions.cmd.rank.already_highest"; + public static final String PROMOTE_FAILED = "hyperfactions.cmd.rank.promote_failed"; + // Demote + public static final String DEMOTE_NO_PERMISSION = "hyperfactions.cmd.rank.demote_no_permission"; + public static final String DEMOTE_USAGE = "hyperfactions.cmd.rank.demote_usage"; + public static final String DEMOTED = "hyperfactions.cmd.rank.demoted"; + public static final String DEMOTE_BROADCAST = "hyperfactions.cmd.rank.demote_broadcast"; + public static final String ALREADY_LOWEST = "hyperfactions.cmd.rank.already_lowest"; + public static final String DEMOTE_FAILED = "hyperfactions.cmd.rank.demote_failed"; + // Transfer + public static final String TRANSFER_NO_PERMISSION = "hyperfactions.cmd.rank.transfer_no_permission"; + public static final String TRANSFER_USAGE = "hyperfactions.cmd.rank.transfer_usage"; + public static final String PLAYER_NOT_IN_FACTION = "hyperfactions.cmd.rank.player_not_in_faction"; + public static final String TRANSFER_CONFIRM = "hyperfactions.cmd.rank.transfer_confirm"; + public static final String TRANSFER_CONFIRM_INSTRUCTION = "hyperfactions.cmd.rank.transfer_confirm_instruction"; + public static final String TRANSFERRED = "hyperfactions.cmd.rank.transferred"; + public static final String TRANSFER_BROADCAST = "hyperfactions.cmd.rank.transfer_broadcast"; + public static final String TRANSFER_FAILED = "hyperfactions.cmd.rank.transfer_failed"; + public static final String TRANSFER_CANCELLED = "hyperfactions.cmd.rank.transfer_cancelled"; + + private Rank() {} + } + + /** /f claim, /f unclaim, /f overclaim command messages. */ + public static final class Claim { + // Claim + public static final String NO_PERMISSION = "hyperfactions.cmd.claim.no_permission"; + public static final String SUCCESS = "hyperfactions.cmd.claim.success"; + public static final String ALREADY_CLAIMED = "hyperfactions.cmd.claim.already_claimed"; + public static final String ALREADY_YOURS = "hyperfactions.cmd.claim.already_yours"; + public static final String CANNOT_CLAIM_ALLY = "hyperfactions.cmd.claim.cannot_claim_ally"; + public static final String ALREADY_CLAIMED_HINT = "hyperfactions.cmd.claim.already_claimed_hint"; + public static final String NOT_OFFICER = "hyperfactions.cmd.claim.not_officer"; + public static final String NOT_CONNECTED = "hyperfactions.cmd.claim.not_adjacent"; + public static final String MAX_CLAIMS = "hyperfactions.cmd.claim.max_claims"; + public static final String WORLD_NOT_ALLOWED = "hyperfactions.cmd.claim.world_not_allowed"; + public static final String ORBISGUARD = "hyperfactions.cmd.claim.orbisguard"; + public static final String ZONE_PROTECTED = "hyperfactions.cmd.claim.zone_protected"; + public static final String FAILED = "hyperfactions.cmd.claim.failed"; + // Unclaim + public static final String UNCLAIM_NO_PERMISSION = "hyperfactions.cmd.unclaim.no_permission"; + public static final String UNCLAIMED = "hyperfactions.cmd.unclaim.success"; + public static final String UNCLAIM_NOT_OFFICER = "hyperfactions.cmd.unclaim.not_officer"; + public static final String CHUNK_NOT_CLAIMED = "hyperfactions.cmd.unclaim.chunk_not_claimed"; + public static final String NOT_YOUR_CLAIM = "hyperfactions.cmd.unclaim.not_your_claim"; + public static final String CANNOT_UNCLAIM_HOME = "hyperfactions.cmd.unclaim.cannot_unclaim_home"; + public static final String WOULD_DISCONNECT = "hyperfactions.cmd.unclaim.would_disconnect"; + public static final String UNCLAIM_FAILED = "hyperfactions.cmd.unclaim.failed"; + // Overclaim + public static final String OVERCLAIM_NO_PERMISSION = "hyperfactions.cmd.overclaim.no_permission"; + public static final String OVERCLAIMED = "hyperfactions.cmd.overclaim.success"; + public static final String OVERCLAIM_NOT_OFFICER = "hyperfactions.cmd.overclaim.not_officer"; + public static final String OVERCLAIM_NOT_CLAIMED = "hyperfactions.cmd.overclaim.not_claimed"; + public static final String OVERCLAIM_OWN = "hyperfactions.cmd.overclaim.own_chunk"; + public static final String OVERCLAIM_ALLY = "hyperfactions.cmd.overclaim.ally"; + public static final String TARGET_HAS_POWER = "hyperfactions.cmd.overclaim.target_has_power"; + public static final String OVERCLAIM_FAILED = "hyperfactions.cmd.overclaim.failed"; + public static final String INSUFFICIENT_POWER = "hyperfactions.cmd.claim.insufficient_power"; + + private Claim() {} + } + + /** /f home, /f sethome, /f delhome, /f stuck command messages. */ + public static final class Home { + // Home + public static final String NO_PERMISSION = "hyperfactions.cmd.home.no_permission"; + public static final String NO_HOME = "hyperfactions.cmd.home.no_home"; + public static final String COMBAT_TAGGED = "hyperfactions.cmd.home.combat_tagged"; + public static final String TELEPORTED = "hyperfactions.cmd.home.teleported"; + public static final String WARMUP = "hyperfactions.cmd.home.warmup"; + public static final String WARMUP_CANCELLED = "hyperfactions.cmd.home.warmup_cancelled"; + public static final String COOLDOWN = "hyperfactions.cmd.home.cooldown"; + // SetHome + public static final String SETHOME_NO_PERMISSION = "hyperfactions.cmd.sethome.no_permission"; + public static final String SETHOME_WORLD_NOT_ALLOWED = "hyperfactions.cmd.sethome.world_not_allowed"; + public static final String NOT_IN_TERRITORY = "hyperfactions.cmd.sethome.not_in_territory"; + public static final String SET = "hyperfactions.cmd.sethome.set"; + public static final String SETHOME_BROADCAST = "hyperfactions.cmd.sethome.broadcast"; + public static final String SETHOME_NOT_OFFICER = "hyperfactions.cmd.sethome.not_officer"; + public static final String SETHOME_FAILED = "hyperfactions.cmd.sethome.failed"; + // DelHome + public static final String DELHOME_NO_PERMISSION = "hyperfactions.cmd.delhome.no_permission"; + public static final String DELHOME_NO_HOME = "hyperfactions.cmd.delhome.no_home"; + public static final String DELETED = "hyperfactions.cmd.delhome.deleted"; + public static final String DELHOME_BROADCAST = "hyperfactions.cmd.delhome.broadcast"; + public static final String DELHOME_NOT_OFFICER = "hyperfactions.cmd.delhome.not_officer"; + public static final String DELHOME_FAILED = "hyperfactions.cmd.delhome.failed"; + // Stuck + public static final String STUCK_NO_PERMISSION = "hyperfactions.cmd.stuck.no_permission"; + public static final String STUCK_NOT_STUCK = "hyperfactions.cmd.stuck.not_stuck"; + public static final String STUCK_COMBAT_TAGGED = "hyperfactions.cmd.stuck.combat_tagged"; + public static final String STUCK_NO_SAFE = "hyperfactions.cmd.stuck.no_safe"; + public static final String STUCK_TELEPORTING = "hyperfactions.cmd.stuck.teleporting"; + + private Home() {} + } + + /** /f power command messages. */ + public static final class Power { + public static final String PERSONAL = "hyperfactions.cmd.power.personal"; + public static final String FACTION = "hyperfactions.cmd.power.faction"; + public static final String DEATH_LOSS = "hyperfactions.cmd.power.death_loss"; + public static final String REGEN = "hyperfactions.cmd.power.regen"; + public static final String NO_PERMISSION = "hyperfactions.cmd.power.no_permission"; + public static final String HEADER = "hyperfactions.cmd.power.header"; + public static final String CURRENT = "hyperfactions.cmd.power.current"; + + private Power() {} + } + + /** /f ally, /f enemy, /f neutral, /f relations command messages. */ + public static final class Relation { + public static final String ALLY_SENT = "hyperfactions.cmd.relation.ally_sent"; + public static final String ALLY_RECEIVED = "hyperfactions.cmd.relation.ally_received"; + public static final String ALLY_FORMED = "hyperfactions.cmd.relation.ally_formed"; + public static final String ENEMY_DECLARED = "hyperfactions.cmd.relation.enemy_declared"; + public static final String ENEMY_RECEIVED = "hyperfactions.cmd.relation.enemy_received"; + public static final String NEUTRAL_SET = "hyperfactions.cmd.relation.neutral_set"; + public static final String ALREADY_RELATION = "hyperfactions.cmd.relation.already_relation"; + public static final String CANNOT_SELF = "hyperfactions.cmd.relation.cannot_self"; + public static final String MAX_ALLIES = "hyperfactions.cmd.relation.max_allies"; + // Ally + public static final String ALLY_NO_PERMISSION = "hyperfactions.cmd.relation.ally_no_permission"; + public static final String ALLY_USAGE = "hyperfactions.cmd.relation.ally_usage"; + public static final String ALREADY_ALLY = "hyperfactions.cmd.relation.already_ally"; + public static final String ALLY_FAILED = "hyperfactions.cmd.relation.ally_failed"; + // Enemy + public static final String ENEMY_NO_PERMISSION = "hyperfactions.cmd.relation.enemy_no_permission"; + public static final String ENEMY_USAGE = "hyperfactions.cmd.relation.enemy_usage"; + public static final String ALREADY_ENEMY = "hyperfactions.cmd.relation.already_enemy"; + public static final String MAX_ENEMIES = "hyperfactions.cmd.relation.max_enemies"; + public static final String ENEMY_FAILED = "hyperfactions.cmd.relation.enemy_failed"; + // Neutral + public static final String NEUTRAL_NO_PERMISSION = "hyperfactions.cmd.relation.neutral_no_permission"; + public static final String NEUTRAL_USAGE = "hyperfactions.cmd.relation.neutral_usage"; + public static final String ALREADY_NEUTRAL = "hyperfactions.cmd.relation.already_neutral"; + public static final String NEUTRAL_FAILED = "hyperfactions.cmd.relation.neutral_failed"; + // Relations list + public static final String VIEW_NO_PERMISSION = "hyperfactions.cmd.relation.view_no_permission"; + public static final String HEADER = "hyperfactions.cmd.relation.header"; + public static final String ALLIES_COUNT = "hyperfactions.cmd.relation.allies_count"; + public static final String ENEMIES_COUNT = "hyperfactions.cmd.relation.enemies_count"; + public static final String LIST_ENTRY = "hyperfactions.cmd.relation.list_entry"; + + private Relation() {} + } + + /** /f c (chat) command messages. */ + public static final class Chat { + public static final String MODE_FACTION = "hyperfactions.cmd.chat.mode_faction"; + public static final String MODE_ALLY = "hyperfactions.cmd.chat.mode_ally"; + public static final String MODE_PUBLIC = "hyperfactions.cmd.chat.mode_public"; + public static final String USAGE = "hyperfactions.cmd.chat.usage"; + public static final String NO_PERMISSION = "hyperfactions.cmd.chat.no_permission"; + public static final String MODE_SET = "hyperfactions.cmd.chat.mode_set"; + + private Chat() {} + } + + /** /f invites command messages. */ + public static final class Invites { + public static final String NOT_OFFICER = "hyperfactions.cmd.invites.not_officer"; + public static final String HEADER = "hyperfactions.cmd.invites.header"; + public static final String NO_PENDING = "hyperfactions.cmd.invites.no_pending"; + public static final String OUTGOING = "hyperfactions.cmd.invites.outgoing"; + public static final String OUTGOING_ENTRY = "hyperfactions.cmd.invites.outgoing_entry"; + public static final String REQUESTS = "hyperfactions.cmd.invites.requests"; + public static final String REQUEST_ENTRY = "hyperfactions.cmd.invites.request_entry"; + public static final String YOUR_INVITES_HEADER = "hyperfactions.cmd.invites.your_invites_header"; + public static final String NO_INVITES = "hyperfactions.cmd.invites.no_invites"; + public static final String INVITE_ENTRY = "hyperfactions.cmd.invites.invite_entry"; + + private Invites() {} + } + + /** /f request command messages. */ + public static final class Request { + public static final String NO_PERMISSION = "hyperfactions.cmd.request.no_permission"; + public static final String ALREADY_IN_NAMED = "hyperfactions.cmd.request.already_in_named"; + public static final String USE_LEAVE_HINT = "hyperfactions.cmd.request.use_leave_hint"; + public static final String USAGE = "hyperfactions.cmd.request.usage"; + public static final String FACTION_OPEN = "hyperfactions.cmd.request.faction_open"; + public static final String ALREADY_REQUESTED = "hyperfactions.cmd.request.already_requested"; + public static final String HAS_INVITE = "hyperfactions.cmd.request.has_invite"; + public static final String SENT = "hyperfactions.cmd.request.sent"; + public static final String YOUR_MESSAGE = "hyperfactions.cmd.request.your_message"; + public static final String OFFICER_REVIEW = "hyperfactions.cmd.request.officer_review"; + public static final String OFFICER_NOTIFY = "hyperfactions.cmd.request.officer_notify"; + public static final String OFFICER_REVIEW_HINT = "hyperfactions.cmd.request.officer_review_hint"; + + private Request() {} + } + + /** /f rename, /f desc, /f color, /f open, /f close, /f settings command messages. */ + public static final class Settings { + public static final String RENAMED = "hyperfactions.cmd.settings.renamed"; + public static final String DESCRIPTION_SET = "hyperfactions.cmd.settings.description_set"; + public static final String COLOR_SET = "hyperfactions.cmd.settings.color_set"; + public static final String OPENED = "hyperfactions.cmd.settings.opened"; + public static final String CLOSED = "hyperfactions.cmd.settings.closed"; + + private Settings() {} + } + + /** /f balance, /f deposit, /f withdraw, /f money command messages. */ + public static final class Economy { + public static final String BALANCE = "hyperfactions.cmd.economy.balance"; + public static final String DEPOSITED = "hyperfactions.cmd.economy.deposited"; + public static final String WITHDRAWN = "hyperfactions.cmd.economy.withdrawn"; + public static final String TRANSFERRED = "hyperfactions.cmd.economy.transferred"; + public static final String INSUFFICIENT = "hyperfactions.cmd.economy.insufficient"; + public static final String INVALID_AMOUNT = "hyperfactions.cmd.economy.invalid_amount"; + public static final String ECONOMY_DISABLED = "hyperfactions.cmd.economy.economy_disabled"; + // Balance + public static final String BALANCE_NO_PERMISSION = "hyperfactions.cmd.economy.balance_no_permission"; + public static final String TREASURY_UNAVAILABLE = "hyperfactions.cmd.economy.treasury_unavailable"; + public static final String BALANCE_DISPLAY = "hyperfactions.cmd.economy.balance_display"; + // Deposit + public static final String DEPOSIT_NO_PERMISSION = "hyperfactions.cmd.economy.deposit_no_permission"; + public static final String DEPOSIT_FACTION_DENIED = "hyperfactions.cmd.economy.deposit_faction_denied"; + public static final String DEPOSIT_USAGE = "hyperfactions.cmd.economy.deposit_usage"; + public static final String AMOUNT_POSITIVE = "hyperfactions.cmd.economy.amount_positive"; + public static final String WALLET_INSUFFICIENT = "hyperfactions.cmd.economy.wallet_insufficient"; + public static final String WALLET_WITHDRAW_FAILED = "hyperfactions.cmd.economy.wallet_withdraw_failed"; + public static final String DEPOSIT_FAILED = "hyperfactions.cmd.economy.deposit_failed"; + // Withdraw + public static final String WITHDRAW_NO_PERMISSION = "hyperfactions.cmd.economy.withdraw_no_permission"; + public static final String WITHDRAW_FACTION_DENIED = "hyperfactions.cmd.economy.withdraw_faction_denied"; + public static final String WITHDRAW_USAGE = "hyperfactions.cmd.economy.withdraw_usage"; + public static final String WITHDRAW_LIMIT_DENIED = "hyperfactions.cmd.economy.withdraw_limit_denied"; + public static final String WALLET_DEPOSIT_FAILED = "hyperfactions.cmd.economy.wallet_deposit_failed"; + public static final String WITHDRAW_LIMIT_EXCEEDED = "hyperfactions.cmd.economy.withdraw_limit_exceeded"; + public static final String WITHDRAW_FAILED = "hyperfactions.cmd.economy.withdraw_failed"; + // Transfer + public static final String TRANSFER_NO_PERMISSION = "hyperfactions.cmd.economy.transfer_no_permission"; + public static final String TRANSFER_FACTION_DENIED = "hyperfactions.cmd.economy.transfer_faction_denied"; + public static final String TRANSFER_USAGE = "hyperfactions.cmd.economy.transfer_usage"; + public static final String TRANSFER_SELF = "hyperfactions.cmd.economy.transfer_self"; + public static final String TRANSFER_LIMIT_DENIED = "hyperfactions.cmd.economy.transfer_limit_denied"; + public static final String TRANSFER_LIMIT_EXCEEDED = "hyperfactions.cmd.economy.transfer_limit_exceeded"; + public static final String TRANSFER_FAILED = "hyperfactions.cmd.economy.transfer_failed"; + // Log + public static final String LOG_NO_PERMISSION = "hyperfactions.cmd.economy.log_no_permission"; + public static final String LOG_HEADER = "hyperfactions.cmd.economy.log_header"; + public static final String LOG_EMPTY = "hyperfactions.cmd.economy.log_empty"; + // Money help + public static final String MONEY_HELP_HEADER = "hyperfactions.cmd.economy.money_help_header"; + public static final String MONEY_HELP_BALANCE = "hyperfactions.cmd.economy.money_help_balance"; + public static final String MONEY_HELP_DEPOSIT = "hyperfactions.cmd.economy.money_help_deposit"; + public static final String MONEY_HELP_WITHDRAW = "hyperfactions.cmd.economy.money_help_withdraw"; + public static final String MONEY_HELP_TRANSFER = "hyperfactions.cmd.economy.money_help_transfer"; + public static final String MONEY_HELP_LOG = "hyperfactions.cmd.economy.money_help_log"; + + private Economy() {} + } + + /** /f info, /f who, /f list, /f members, /f map, /f help command messages. */ + public static final class Info { + public static final String FACTION_HEADER = "hyperfactions.cmd.info.faction_header"; + public static final String PLAYER_HEADER = "hyperfactions.cmd.info.player_header"; + // Info command + public static final String NO_PERMISSION = "hyperfactions.cmd.info.no_permission"; + public static final String FACTION_NOT_FOUND = "hyperfactions.cmd.info.faction_not_found"; + public static final String NOT_IN_FACTION_HINT = "hyperfactions.cmd.info.not_in_faction_hint"; + public static final String LEADER = "hyperfactions.cmd.info.leader"; + public static final String MEMBERS = "hyperfactions.cmd.info.members"; + public static final String POWER = "hyperfactions.cmd.info.power"; + public static final String CLAIMS = "hyperfactions.cmd.info.claims"; + public static final String RAIDABLE = "hyperfactions.cmd.info.raidable"; + public static final String ALLIES = "hyperfactions.cmd.info.allies"; + public static final String ENEMIES = "hyperfactions.cmd.info.enemies"; + public static final String THEY_CONSIDER = "hyperfactions.cmd.info.they_consider"; + public static final String YOU_CONSIDER = "hyperfactions.cmd.info.you_consider"; + // Members command + public static final String MEMBERS_NO_PERMISSION = "hyperfactions.cmd.info.members_no_permission"; + public static final String MEMBERS_HEADER = "hyperfactions.cmd.info.members_header"; + public static final String MEMBER_ONLINE = "hyperfactions.cmd.info.member_online"; + // List command + public static final String LIST_NO_PERMISSION = "hyperfactions.cmd.info.list_no_permission"; + public static final String LIST_EMPTY = "hyperfactions.cmd.info.list_empty"; + public static final String LIST_HEADER = "hyperfactions.cmd.info.list_header"; + public static final String LIST_ENTRY = "hyperfactions.cmd.info.list_entry"; + public static final String LIST_ENTRY_RAIDABLE = "hyperfactions.cmd.info.list_entry_raidable"; + // Help command + public static final String HELP_NO_PERMISSION = "hyperfactions.cmd.info.help_no_permission"; + // Who command + public static final String WHO_NO_PERMISSION = "hyperfactions.cmd.info.who_no_permission"; + public static final String WHO_FACTION = "hyperfactions.cmd.info.who_faction"; + public static final String WHO_ROLE = "hyperfactions.cmd.info.who_role"; + public static final String WHO_JOINED = "hyperfactions.cmd.info.who_joined"; + public static final String WHO_FACTION_NONE = "hyperfactions.cmd.info.who_faction_none"; + public static final String WHO_POWER = "hyperfactions.cmd.info.who_power"; + public static final String WHO_STATUS = "hyperfactions.cmd.info.who_status"; + public static final String WHO_LAST_SEEN = "hyperfactions.cmd.info.who_last_seen"; + // Map command + public static final String MAP_NO_PERMISSION = "hyperfactions.cmd.info.map_no_permission"; + public static final String MAP_HEADER = "hyperfactions.cmd.info.map_header"; + public static final String MAP_LEGEND = "hyperfactions.cmd.info.map_legend"; + public static final String MAP_GUI_HINT = "hyperfactions.cmd.info.map_gui_hint"; + + private Info() {} + } + + /** /f admin command messages. */ + public static final class Admin { + public static final String RELOAD_SUCCESS = "hyperfactions.cmd.admin.reload_success"; + public static final String SYNC_SUCCESS = "hyperfactions.cmd.admin.sync_success"; + public static final String BYPASS_ON = "hyperfactions.cmd.admin.bypass_on"; + public static final String BYPASS_OFF = "hyperfactions.cmd.admin.bypass_off"; + public static final String NOT_ADMIN = "hyperfactions.cmd.admin.not_admin"; + + private Admin() {} + } + + // ===================================================================== + // Protection — denial messages + // ===================================================================== + + /** Protection denial messages shown when actions are blocked. */ + public static final class Protection { + // Action phrases (what the player tried to do) + public static final String ACTION_GENERIC = "hyperfactions.protection.action.generic"; + public static final String ACTION_BUILD = "hyperfactions.protection.action.build"; + public static final String ACTION_INTERACT = "hyperfactions.protection.action.interact"; + public static final String ACTION_DOOR = "hyperfactions.protection.action.door"; + public static final String ACTION_CONTAINER = "hyperfactions.protection.action.container"; + public static final String ACTION_BENCH = "hyperfactions.protection.action.bench"; + public static final String ACTION_PROCESSING = "hyperfactions.protection.action.processing"; + public static final String ACTION_SEAT = "hyperfactions.protection.action.seat"; + public static final String ACTION_LIGHT = "hyperfactions.protection.action.light"; + public static final String ACTION_TELEPORTER = "hyperfactions.protection.action.teleporter"; + public static final String ACTION_CRATE = "hyperfactions.protection.action.crate"; + public static final String ACTION_TAME = "hyperfactions.protection.action.tame"; + public static final String ACTION_NPC = "hyperfactions.protection.action.npc"; + public static final String ACTION_MOUNT = "hyperfactions.protection.action.mount"; + public static final String ACTION_PVE = "hyperfactions.protection.action.pve"; + public static final String ACTION_ITEM_DROP = "hyperfactions.protection.action.item_drop"; + public static final String ACTION_ITEM_PICKUP = "hyperfactions.protection.action.item_pickup"; + + // Denial reasons (with {0} placeholder for action phrase) + public static final String DENIED_SAFEZONE = "hyperfactions.protection.denied.safezone"; + public static final String DENIED_WARZONE = "hyperfactions.protection.denied.warzone"; + public static final String DENIED_ENEMY_CLAIM = "hyperfactions.protection.denied.enemy_claim"; + public static final String DENIED_CLAIMED = "hyperfactions.protection.denied.claimed"; + public static final String DENIED_HERE = "hyperfactions.protection.denied.here"; + public static final String DENIED_ZONE = "hyperfactions.protection.denied.zone"; + public static final String DENIED_FACTION_PERM = "hyperfactions.protection.denied.faction_perm"; + public static final String DENIED_ALLY_TERRITORY = "hyperfactions.protection.denied.ally_territory"; + public static final String DENIED_ERROR = "hyperfactions.protection.denied.error"; + + // PvP denial messages + public static final String PVP_SAFEZONE = "hyperfactions.protection.pvp.safezone"; + public static final String PVP_SAME_FACTION = "hyperfactions.protection.pvp.same_faction"; + public static final String PVP_ALLY = "hyperfactions.protection.pvp.ally"; + public static final String PVP_SPAWN_PROTECTED = "hyperfactions.protection.pvp.spawn_protected"; + public static final String PVP_TERRITORY_DISABLED = "hyperfactions.protection.pvp.territory_disabled"; + public static final String PVP_GENERIC = "hyperfactions.protection.pvp.generic"; + + // Entity damage (zone-level) + public static final String MOB_DAMAGE_DISABLED = "hyperfactions.protection.mob_damage_disabled"; + public static final String PVE_DAMAGE_DISABLED = "hyperfactions.protection.pve_damage_disabled"; + public static final String PVE_TERRITORY_DENIED = "hyperfactions.protection.pve_territory_denied"; + + // Combat tag + public static final String COMBAT_TAG_COMMAND = "hyperfactions.protection.combat_tag_command"; + + private Protection() {} + } + + // ===================================================================== + // Territory — entry/exit notifications, announcements + // ===================================================================== + + /** Territory entry/exit and announcement messages. */ + public static final class Territory { + public static final String ENTER_OWN = "hyperfactions.territory.enter_own"; + public static final String ENTER_ALLY = "hyperfactions.territory.enter_ally"; + public static final String ENTER_ENEMY = "hyperfactions.territory.enter_enemy"; + public static final String ENTER_NEUTRAL = "hyperfactions.territory.enter_neutral"; + public static final String ENTER_WILDERNESS = "hyperfactions.territory.enter_wilderness"; + public static final String ENTER_SAFEZONE = "hyperfactions.territory.enter_safezone"; + public static final String ENTER_WARZONE = "hyperfactions.territory.enter_warzone"; + public static final String INTRUDER_ALERT = "hyperfactions.territory.intruder_alert"; + + private Territory() {} + } + + // ===================================================================== + // Announcements — faction-wide broadcasts + // ===================================================================== + + /** Server-wide broadcast messages (AnnouncementManager). */ + public static final class ServerAnnounce { + public static final String FACTION_CREATED = "hyperfactions.server_announce.faction_created"; + public static final String FACTION_DISBANDED = "hyperfactions.server_announce.faction_disbanded"; + public static final String LEADERSHIP_TRANSFER = "hyperfactions.server_announce.leadership_transfer"; + public static final String OVERCLAIM = "hyperfactions.server_announce.overclaim"; + public static final String WAR_DECLARED = "hyperfactions.server_announce.war_declared"; + public static final String ALLIANCE_FORMED = "hyperfactions.server_announce.alliance_formed"; + public static final String ALLIANCE_BROKEN = "hyperfactions.server_announce.alliance_broken"; + + private ServerAnnounce() {} + } + + /** Faction-wide broadcast messages. */ + public static final class Announce { + public static final String MEMBER_JOIN = "hyperfactions.announce.member_join"; + public static final String MEMBER_LEAVE = "hyperfactions.announce.member_leave"; + public static final String MEMBER_KICK = "hyperfactions.announce.member_kick"; + public static final String MEMBER_PROMOTED = "hyperfactions.announce.member_promoted"; + public static final String MEMBER_DEMOTED = "hyperfactions.announce.member_demoted"; + public static final String MEMBER_DEATH = "hyperfactions.announce.member_death"; + public static final String TERRITORY_CLAIMED = "hyperfactions.announce.territory_claimed"; + public static final String TERRITORY_LOST = "hyperfactions.announce.territory_lost"; + public static final String POWER_LOW = "hyperfactions.announce.power_low"; + public static final String RAIDABLE = "hyperfactions.announce.raidable"; + + private Announce() {} + } + + // ===================================================================== + // GUI — Navigation and shared GUI elements + // ===================================================================== + + /** Navigation bar labels. */ + public static final class Nav { + public static final String DASHBOARD = "hyperfactions_gui.nav.dashboard"; + public static final String CHAT = "hyperfactions_gui.nav.chat"; + public static final String MEMBERS = "hyperfactions_gui.nav.members"; + public static final String INVITES = "hyperfactions_gui.nav.invites"; + public static final String BROWSER = "hyperfactions_gui.nav.browser"; + public static final String MAP = "hyperfactions_gui.nav.map"; + public static final String LEADERBOARD = "hyperfactions_gui.nav.leaderboard"; + public static final String RELATIONS = "hyperfactions_gui.nav.relations"; + public static final String TREASURY = "hyperfactions_gui.nav.treasury"; + public static final String SETTINGS = "hyperfactions_gui.nav.settings"; + public static final String LOGS = "hyperfactions_gui.nav.logs"; + public static final String HELP = "hyperfactions_gui.nav.help"; + public static final String ADMIN = "hyperfactions_gui.nav.admin"; + public static final String CREATE = "hyperfactions_gui.nav.create"; + public static final String PLAYER_SETTINGS = "hyperfactions_gui.nav.player_settings"; + + private Nav() {} + } + + /** Admin navigation bar labels. */ + public static final class AdminNav { + public static final String DASHBOARD = "hyperfactions_admin.nav.dashboard"; + public static final String ACTIONS = "hyperfactions_admin.nav.actions"; + public static final String FACTIONS = "hyperfactions_admin.nav.factions"; + public static final String PLAYERS = "hyperfactions_admin.nav.players"; + public static final String ECONOMY = "hyperfactions_admin.nav.economy"; + public static final String ZONES = "hyperfactions_admin.nav.zones"; + public static final String CONFIG = "hyperfactions_admin.nav.config"; + public static final String BACKUPS = "hyperfactions_admin.nav.backups"; + public static final String LOG = "hyperfactions_admin.nav.log"; + public static final String UPDATES = "hyperfactions_admin.nav.updates"; + public static final String HELP = "hyperfactions_admin.nav.help"; + public static final String VERSION = "hyperfactions_admin.nav.version"; + + private AdminNav() {} + } + + /** Main menu page labels. */ + public static final class MainMenu { + public static final String TITLE = "hyperfactions_gui.main_menu.title"; + public static final String SECTION_MY_FACTION = "hyperfactions_gui.main_menu.section_my_faction"; + public static final String SECTION_GET_STARTED = "hyperfactions_gui.main_menu.section_get_started"; + public static final String SECTION_TERRITORY = "hyperfactions_gui.main_menu.section_territory"; + public static final String SECTION_BROWSE = "hyperfactions_gui.main_menu.section_browse"; + public static final String SECTION_ADMIN = "hyperfactions_gui.main_menu.section_admin"; + public static final String CLAIM_HINT = "hyperfactions_gui.main_menu.claim_hint"; + + private MainMenu() {} + } + + /** Faction info page labels. */ + public static final class FactionInfoGui { + public static final String TITLE = "hyperfactions_gui.faction_info.title"; + public static final String NO_DESCRIPTION = "hyperfactions_gui.faction_info.no_description"; + public static final String STATUS_OPEN = "hyperfactions_gui.faction_info.status_open"; + public static final String STATUS_INVITE_ONLY = "hyperfactions_gui.faction_info.status_invite_only"; + public static final String STATUS_RAIDABLE = "hyperfactions_gui.faction_info.status_raidable"; + public static final String STATUS_PROTECTED = "hyperfactions_gui.faction_info.status_protected"; + public static final String OFFICERS_MORE = "hyperfactions_gui.faction_info.officers_more"; + // Stat card headers + public static final String POWER_HEADER = "hyperfactions_gui.faction_info.power_header"; + public static final String CLAIMS_HEADER = "hyperfactions_gui.faction_info.claims_header"; + public static final String MEMBERS_HEADER = "hyperfactions_gui.faction_info.members_header"; + public static final String RELATIONS_HEADER = "hyperfactions_gui.faction_info.relations_header"; + public static final String STATUS_HEADER = "hyperfactions_gui.faction_info.status_header"; + public static final String TREASURY_HEADER = "hyperfactions_gui.faction_info.treasury_header"; + // Stat card subtitles + public static final String CURRENT_MAX = "hyperfactions_gui.faction_info.current_max"; + public static final String CLAIMED_MAX = "hyperfactions_gui.faction_info.claimed_max"; + public static final String ALLY_ENEMY = "hyperfactions_gui.faction_info.ally_enemy"; + public static final String FACTION_BALANCE = "hyperfactions_gui.faction_info.faction_balance"; + // Leadership labels + public static final String LEADER_LABEL = "hyperfactions_gui.faction_info.leader_label"; + public static final String OFFICERS_LABEL = "hyperfactions_gui.faction_info.officers_label"; + // Button text + public static final String VIEW_MEMBERS_BTN = "hyperfactions_gui.faction_info.view_members_btn"; + public static final String RELATIONS_BTN = "hyperfactions_gui.faction_info.relations_btn"; + public static final String BACK_BTN = "hyperfactions_gui.faction_info.back_btn"; + + private FactionInfoGui() {} + } + + /** Rename modal page messages. */ + public static final class RenameGui { + public static final String TITLE = "hyperfactions_gui.rename.title"; + public static final String CURRENT_LABEL = "hyperfactions_gui.rename.current_label"; + public static final String NEW_NAME_LABEL = "hyperfactions_gui.rename.new_name_label"; + public static final String NO_PERMISSION = "hyperfactions_gui.rename.no_permission"; + public static final String ENTER_NAME = "hyperfactions_gui.rename.enter_name"; + public static final String TOO_SHORT = "hyperfactions_gui.rename.too_short"; + public static final String TOO_LONG = "hyperfactions_gui.rename.too_long"; + public static final String SAME_NAME = "hyperfactions_gui.rename.same_name"; + public static final String NAME_TAKEN = "hyperfactions_gui.rename.name_taken"; + public static final String SUCCESS = "hyperfactions_gui.rename.success"; + + private RenameGui() {} + } + + /** Description modal page messages. */ + public static final class DescGui { + public static final String TITLE = "hyperfactions_gui.desc.title"; + public static final String CURRENT_LABEL = "hyperfactions_gui.desc.current_label"; + public static final String NEW_DESC_LABEL = "hyperfactions_gui.desc.new_desc_label"; + public static final String NO_PERMISSION = "hyperfactions_gui.desc.no_permission"; + public static final String DISPLAY_NONE = "hyperfactions_gui.desc.display_none"; + public static final String CLEARED = "hyperfactions_gui.desc.cleared"; + public static final String UPDATED = "hyperfactions_gui.desc.updated"; + + private DescGui() {} + } + + /** Tag modal page messages. */ + public static final class TagGui { + public static final String TITLE = "hyperfactions_gui.tag.title"; + public static final String CURRENT_LABEL = "hyperfactions_gui.tag.current_label"; + public static final String INSTRUCTIONS = "hyperfactions_gui.tag.instructions"; + public static final String HELP_TEXT = "hyperfactions_gui.tag.help_text"; + public static final String NO_PERMISSION = "hyperfactions_gui.tag.no_permission"; + public static final String DISPLAY_NONE = "hyperfactions_gui.tag.display_none"; + public static final String CLEARED = "hyperfactions_gui.tag.cleared"; + public static final String TOO_SHORT = "hyperfactions_gui.tag.too_short"; + public static final String TOO_LONG = "hyperfactions_gui.tag.too_long"; + public static final String INVALID_FORMAT = "hyperfactions_gui.tag.invalid_format"; + public static final String SAME_TAG = "hyperfactions_gui.tag.same_tag"; + public static final String TAG_TAKEN = "hyperfactions_gui.tag.tag_taken"; + public static final String SUCCESS = "hyperfactions_gui.tag.success"; + + private TagGui() {} + } + + /** Dashboard page labels and messages. */ + public static final class DashboardGui { + public static final String TITLE = "hyperfactions_gui.dashboard.title"; + public static final String POWER_LABEL = "hyperfactions_gui.dashboard.power_label"; + public static final String LAND_LABEL = "hyperfactions_gui.dashboard.land_label"; + public static final String MEMBERS_LABEL = "hyperfactions_gui.dashboard.members_label"; + public static final String ONLINE_LABEL = "hyperfactions_gui.dashboard.online_label"; + public static final String ALLIES_LABEL = "hyperfactions_gui.dashboard.allies_label"; + public static final String ENEMIES_LABEL = "hyperfactions_gui.dashboard.enemies_label"; + public static final String RELATIONS_LABEL = "hyperfactions_gui.dashboard.relations_label"; + public static final String ALLY_ENEMY_LABEL = "hyperfactions_gui.dashboard.ally_enemy_label"; + public static final String STATUS_LABEL = "hyperfactions_gui.dashboard.status_label"; + public static final String INVITES_LABEL = "hyperfactions_gui.dashboard.invites_label"; + public static final String SENT_REQUESTS_LABEL = "hyperfactions_gui.dashboard.sent_requests_label"; + public static final String TREASURY_LABEL = "hyperfactions_gui.dashboard.treasury_label"; + public static final String UPKEEP_LABEL = "hyperfactions_gui.dashboard.upkeep_label"; + public static final String PER_CYCLE = "hyperfactions_gui.dashboard.per_cycle"; + public static final String YOUR_WALLET = "hyperfactions_gui.dashboard.your_wallet"; + public static final String PERSONAL_BALANCE = "hyperfactions_gui.dashboard.personal_balance"; + public static final String QUICK_ACTIONS = "hyperfactions_gui.dashboard.quick_actions"; + public static final String TELEPORT_LABEL = "hyperfactions_gui.dashboard.teleport_label"; + public static final String TERRITORY_LABEL = "hyperfactions_gui.dashboard.territory_label"; + public static final String CHANNEL_LABEL = "hyperfactions_gui.dashboard.channel_label"; + public static final String MEMBERSHIP_LABEL = "hyperfactions_gui.dashboard.membership_label"; + public static final String RECENT_ACTIVITY = "hyperfactions_gui.dashboard.recent_activity"; + public static final String VIEW_ALL = "hyperfactions_gui.dashboard.view_all"; + public static final String INCOME_24H = "hyperfactions_gui.dashboard.income_24h"; + public static final String DEPOSITS_TRANSFERS_IN = "hyperfactions_gui.dashboard.deposits_transfers_in"; + public static final String EXPENSES_24H = "hyperfactions_gui.dashboard.expenses_24h"; + public static final String WITHDRAWALS_TRANSFERS_OUT = "hyperfactions_gui.dashboard.withdrawals_transfers_out"; + public static final String FACTION_GONE = "hyperfactions_gui.dashboard.faction_gone"; + public static final String AVAILABLE = "hyperfactions_gui.dashboard.available"; + public static final String AT_RISK = "hyperfactions_gui.dashboard.at_risk"; + public static final String ONLINE_COUNT = "hyperfactions_gui.dashboard.online_count"; + public static final String STATUS_INVITE = "hyperfactions_gui.dashboard.status_invite"; + public static final String IN_GRACE = "hyperfactions_gui.dashboard.in_grace"; + public static final String BILLABLE_CHUNKS = "hyperfactions_gui.dashboard.billable_chunks"; + public static final String BTN_HOME = "hyperfactions_gui.dashboard.btn_home"; + public static final String BTN_SET_HOME = "hyperfactions_gui.dashboard.btn_set_home"; + public static final String BTN_CLAIM = "hyperfactions_gui.dashboard.btn_claim"; + public static final String CHAT_PREFIX = "hyperfactions_gui.dashboard.chat_prefix"; + public static final String BTN_LEAVE = "hyperfactions_gui.dashboard.btn_leave"; + public static final String NO_ACTIVITY = "hyperfactions_gui.dashboard.no_activity"; + public static final String TIME_NOW = "hyperfactions_gui.dashboard.time_now"; + public static final String TIME_MINUTES = "hyperfactions_gui.dashboard.time_minutes"; + public static final String TIME_HOURS = "hyperfactions_gui.dashboard.time_hours"; + public static final String TIME_DAYS = "hyperfactions_gui.dashboard.time_days"; + public static final String NO_HOME_HINT = "hyperfactions_gui.dashboard.no_home_hint"; + public static final String CHAT_MODE_SET = "hyperfactions_gui.dashboard.chat_mode_set"; + public static final String CLAIM_SUCCESS = "hyperfactions_gui.dashboard.claim_success"; + public static final String UPKEEP_IN = "hyperfactions_gui.dashboard.upkeep_in"; + + private DashboardGui() {} + } + + /** Shared GUI labels used across multiple pages. */ + public static final class GuiCommon { + public static final String FACTION_COUNT = "hyperfactions_gui.common.faction_count"; + public static final String LEADER_LABEL = "hyperfactions_gui.common.leader_label"; + public static final String SORT_POWER = "hyperfactions_gui.common.sort_power"; + public static final String SORT_MEMBERS = "hyperfactions_gui.common.sort_members"; + public static final String PAGE_FORMAT = "hyperfactions_gui.common.page_format"; + public static final String OWN_FACTION = "hyperfactions_gui.common.own_faction"; + public static final String SEARCH = "hyperfactions_gui.common.search"; + public static final String SORT = "hyperfactions_gui.common.sort"; + public static final String PREV = "hyperfactions_gui.common.prev"; + public static final String NEXT = "hyperfactions_gui.common.next"; + + public static final String TREASURY_NOT_AVAILABLE = "hyperfactions_gui.common.treasury_not_available"; + + private GuiCommon() {} + } + + /** Members page labels and messages. */ + public static final class MembersGui { + public static final String TITLE = "hyperfactions_gui.members.title"; + public static final String SEARCH_LABEL = "hyperfactions_gui.members.search_label"; + public static final String SORT_LABEL = "hyperfactions_gui.members.sort_label"; + public static final String PREV_BTN = "hyperfactions_gui.members.prev_btn"; + public static final String NEXT_BTN = "hyperfactions_gui.members.next_btn"; + public static final String MEMBER_COUNT = "hyperfactions_gui.members.count"; + public static final String SORT_ROLE = "hyperfactions_gui.members.sort_role"; + public static final String SORT_LAST_ONLINE = "hyperfactions_gui.members.sort_last_online"; + public static final String JUST_NOW = "hyperfactions_gui.members.just_now"; + public static final String AGO = "hyperfactions_gui.members.ago"; + public static final String NEVER = "hyperfactions_gui.members.never"; + public static final String MEMBER_NOT_FOUND = "hyperfactions_gui.members.member_not_found"; + public static final String PROMOTED = "hyperfactions_gui.members.promoted"; + public static final String PROMOTE_FAILED = "hyperfactions_gui.members.promote_failed"; + public static final String DEMOTED = "hyperfactions_gui.members.demoted"; + public static final String DEMOTE_FAILED = "hyperfactions_gui.members.demote_failed"; + public static final String KICKED = "hyperfactions_gui.members.kicked"; + public static final String KICK_FAILED = "hyperfactions_gui.members.kick_failed"; + public static final String LABEL_POWER = "hyperfactions_gui.members.label_power"; + public static final String LABEL_JOINED = "hyperfactions_gui.members.label_joined"; + public static final String LABEL_LAST_DEATH = "hyperfactions_gui.members.label_last_death"; + public static final String BTN_PROMOTE = "hyperfactions_gui.members.btn_promote"; + public static final String BTN_DEMOTE = "hyperfactions_gui.members.btn_demote"; + public static final String BTN_KICK = "hyperfactions_gui.members.btn_kick"; + public static final String BTN_MAKE_LEADER = "hyperfactions_gui.members.btn_make_leader"; + public static final String BTN_PROFILE = "hyperfactions_gui.members.btn_profile"; + public static final String SELF_LABEL = "hyperfactions_gui.members.self_label"; + + private MembersGui() {} + } + + /** Browser page labels. */ + public static final class BrowserGui { + public static final String TITLE = "hyperfactions_gui.browser.title"; + public static final String SEARCH_LABEL = "hyperfactions_gui.browser.search_label"; + public static final String SORT_LABEL = "hyperfactions_gui.browser.sort_label"; + public static final String PREV_BTN = "hyperfactions_gui.browser.prev_btn"; + public static final String NEXT_BTN = "hyperfactions_gui.browser.next_btn"; + public static final String SORT_NAME = "hyperfactions_gui.browser.sort_name"; + public static final String INVALID_FACTION = "hyperfactions_gui.browser.invalid_faction"; + public static final String LABEL_POWER = "hyperfactions_gui.browser.label_power"; + public static final String LABEL_CLAIMS = "hyperfactions_gui.browser.label_claims"; + public static final String LABEL_MEMBERS = "hyperfactions_gui.browser.label_members"; + public static final String LABEL_RECRUITMENT = "hyperfactions_gui.browser.label_recruitment"; + public static final String LABEL_CREATED = "hyperfactions_gui.browser.label_created"; + public static final String LABEL_DESCRIPTION = "hyperfactions_gui.browser.label_description"; + public static final String VIEW_INFO_BTN = "hyperfactions_gui.browser.view_info_btn"; + public static final String LABEL_LEADER = "hyperfactions_gui.browser.label_leader"; + public static final String NO_DESCRIPTION = "hyperfactions_gui.browser.no_description"; + + private BrowserGui() {} + } + + /** Leaderboard page labels. */ + public static final class LeaderboardGui { + public static final String TITLE = "hyperfactions_gui.leaderboard.title"; + public static final String RANK_BY = "hyperfactions_gui.leaderboard.rank_by"; + public static final String COL_RANK = "hyperfactions_gui.leaderboard.col_rank"; + public static final String COL_FACTION = "hyperfactions_gui.leaderboard.col_faction"; + public static final String COL_CLAIMS = "hyperfactions_gui.leaderboard.col_claims"; + public static final String COL_MEMBERS = "hyperfactions_gui.leaderboard.col_members"; + public static final String PREV_BTN = "hyperfactions_gui.leaderboard.prev_btn"; + public static final String NEXT_BTN = "hyperfactions_gui.leaderboard.next_btn"; + public static final String SORT_KD = "hyperfactions_gui.leaderboard.sort_kd"; + public static final String SORT_TERRITORY = "hyperfactions_gui.leaderboard.sort_territory"; + public static final String SORT_BALANCE = "hyperfactions_gui.leaderboard.sort_balance"; + + private LeaderboardGui() {} + } + + /** Player info page labels and messages. */ + public static final class PlayerInfoGui { + public static final String TITLE = "hyperfactions_gui.playerinfo.title"; + public static final String FIRST_JOINED_LABEL = "hyperfactions_gui.playerinfo.first_joined_label"; + public static final String LAST_ONLINE_LABEL = "hyperfactions_gui.playerinfo.last_online_label"; + public static final String FACTION_LABEL = "hyperfactions_gui.playerinfo.faction_label"; + public static final String ROLE_LABEL = "hyperfactions_gui.playerinfo.role_label"; + public static final String JOINED_LABEL_STATIC = "hyperfactions_gui.playerinfo.joined_label_static"; + public static final String NOT_IN_FACTION = "hyperfactions_gui.playerinfo.not_in_faction"; + public static final String POWER_HEADER = "hyperfactions_gui.playerinfo.power_header"; + public static final String CURRENT_MAX = "hyperfactions_gui.playerinfo.current_max"; + public static final String COMBAT_HEADER = "hyperfactions_gui.playerinfo.combat_header"; + public static final String KILLS_DEATHS = "hyperfactions_gui.playerinfo.kills_deaths"; + public static final String KDR_HEADER = "hyperfactions_gui.playerinfo.kdr_header"; + public static final String MEMBERSHIP_HISTORY = "hyperfactions_gui.playerinfo.membership_history"; + public static final String VIEW_FACTION_BTN = "hyperfactions_gui.playerinfo.view_faction_btn"; + public static final String BACK_BTN = "hyperfactions_gui.playerinfo.back_btn"; + public static final String NOW = "hyperfactions_gui.playerinfo.now"; + public static final String HISTORY_COUNT = "hyperfactions_gui.playerinfo.history_count"; + public static final String JOINED_LABEL = "hyperfactions_gui.playerinfo.joined_label"; + public static final String CURRENT = "hyperfactions_gui.playerinfo.current"; + public static final String LEFT_LABEL = "hyperfactions_gui.playerinfo.left_label"; + public static final String NO_HISTORY = "hyperfactions_gui.playerinfo.no_history"; + public static final String FACTION_GONE = "hyperfactions_gui.playerinfo.faction_gone"; + public static final String REASON_ACTIVE = "hyperfactions_gui.playerinfo.reason_active"; + public static final String REASON_LEFT = "hyperfactions_gui.playerinfo.reason_left"; + public static final String REASON_KICKED = "hyperfactions_gui.playerinfo.reason_kicked"; + public static final String REASON_DISBANDED = "hyperfactions_gui.playerinfo.reason_disbanded"; + + private PlayerInfoGui() {} + } + + /** Faction main page (no-faction view) labels and messages. */ + public static final class FactionMainGui { + public static final String NO_FACTION = "hyperfactions_gui.main.no_faction"; + public static final String JOINED = "hyperfactions_gui.main.joined"; + public static final String JOIN_FAILED = "hyperfactions_gui.main.join_failed"; + public static final String INVITE_DECLINED = "hyperfactions_gui.main.invite_declined"; + public static final String COOLDOWN = "hyperfactions_gui.main.cooldown"; + public static final String WORLD_NOT_FOUND = "hyperfactions_gui.main.world_not_found"; + public static final String LEAVE_FAILED = "hyperfactions_gui.main.leave_failed"; + + private FactionMainGui() {} + } + + /** Help GUI category display names and new player help page content. */ + public static final class HelpGui { + public static final String WELCOME = "hyperfactions_gui.help.category.welcome"; + public static final String YOUR_FACTION = "hyperfactions_gui.help.category.your_faction"; + public static final String POWER_LAND = "hyperfactions_gui.help.category.power_land"; + public static final String DIPLOMACY = "hyperfactions_gui.help.category.diplomacy"; + public static final String COMBAT = "hyperfactions_gui.help.category.combat"; + public static final String ECONOMY = "hyperfactions_gui.help.category.economy"; + public static final String QUICK_REF = "hyperfactions_gui.help.category.quick_ref"; + // Admin help categories + public static final String ADMIN_OVERVIEW = "hyperfactions_gui.help.category.admin_overview"; + public static final String ADMIN_FACTIONS = "hyperfactions_gui.help.category.admin_factions"; + public static final String ADMIN_ZONES = "hyperfactions_gui.help.category.admin_zones"; + public static final String ADMIN_POWER = "hyperfactions_gui.help.category.admin_power"; + public static final String ADMIN_ECONOMY = "hyperfactions_gui.help.category.admin_economy"; + public static final String ADMIN_CONFIG = "hyperfactions_gui.help.category.admin_config"; + public static final String ADMIN_MAINTENANCE = "hyperfactions_gui.help.category.admin_maintenance"; + public static final String ADMIN_REFERENCE = "hyperfactions_gui.help.category.admin_reference"; + // Help Center page title + public static final String HELP_CENTER_TITLE = "hyperfactions_gui.help.center_title"; + // New player help page + public static final String GETTING_STARTED_TITLE = "hyperfactions_gui.help.getting_started_title"; + public static final String WHAT_ARE_FACTIONS_TITLE = "hyperfactions_gui.help.what_are_factions_title"; + public static final String WHAT_ARE_FACTIONS_1 = "hyperfactions_gui.help.what_are_factions_1"; + public static final String WHAT_ARE_FACTIONS_2 = "hyperfactions_gui.help.what_are_factions_2"; + public static final String WHAT_ARE_FACTIONS_BULLET_1 = "hyperfactions_gui.help.what_are_factions_bullet_1"; + public static final String WHAT_ARE_FACTIONS_BULLET_2 = "hyperfactions_gui.help.what_are_factions_bullet_2"; + public static final String WHAT_ARE_FACTIONS_BULLET_3 = "hyperfactions_gui.help.what_are_factions_bullet_3"; + public static final String JOINING_TITLE = "hyperfactions_gui.help.joining_title"; + public static final String JOINING_DESC = "hyperfactions_gui.help.joining_desc"; + public static final String JOINING_BULLET_1 = "hyperfactions_gui.help.joining_bullet_1"; + public static final String JOINING_BULLET_2 = "hyperfactions_gui.help.joining_bullet_2"; + public static final String JOINING_BULLET_3 = "hyperfactions_gui.help.joining_bullet_3"; + public static final String CREATING_TITLE = "hyperfactions_gui.help.creating_title"; + public static final String CREATING_DESC = "hyperfactions_gui.help.creating_desc"; + public static final String CREATING_BULLET_1 = "hyperfactions_gui.help.creating_bullet_1"; + public static final String CREATING_BULLET_2 = "hyperfactions_gui.help.creating_bullet_2"; + public static final String COMMANDS_TITLE = "hyperfactions_gui.help.commands_title"; + public static final String CMD_F = "hyperfactions_gui.help.cmd_f"; + public static final String CMD_F_LIST = "hyperfactions_gui.help.cmd_f_list"; + public static final String CMD_F_JOIN = "hyperfactions_gui.help.cmd_f_join"; + public static final String CMD_F_CREATE = "hyperfactions_gui.help.cmd_f_create"; + public static final String CMD_F_HELP = "hyperfactions_gui.help.cmd_f_help"; + public static final String TIP = "hyperfactions_gui.help.tip"; + + private HelpGui() {} + } + + /** Teleport system messages (TeleportManager). */ + public static final class Teleport { + public static final String COOLDOWN_WAIT = "hyperfactions.teleport.cooldown_wait"; + public static final String WARMUP_START = "hyperfactions.teleport.warmup_start"; + public static final String COMBAT_CANCELLED = "hyperfactions.teleport.combat_cancelled"; + public static final String SUCCESS_DEFAULT = "hyperfactions.teleport.success_default"; + public static final String NO_HOME = "hyperfactions.teleport.no_home"; + public static final String WORLD_NOT_FOUND = "hyperfactions.teleport.world_not_found"; + public static final String FAILED = "hyperfactions.teleport.failed"; + public static final String COUNTDOWN = "hyperfactions.teleport.countdown"; + public static final String COUNTDOWN_ONE = "hyperfactions.teleport.countdown_one"; + public static final String MOVED_CANCELLED = "hyperfactions.teleport.moved_cancelled"; + public static final String DAMAGE_CANCELLED = "hyperfactions.teleport.damage_cancelled"; + public static final String MOUNT_TELEPORT_BLOCKED = "hyperfactions.teleport.mount_teleport_blocked"; + public static final String MOUNT_ENTRY_BLOCKED = "hyperfactions.teleport.mount_entry_blocked"; + + private Teleport() {} + } + + /** Chat channel display names (ChatManager). */ + public static final class ChatDisplay { + public static final String PUBLIC = "hyperfactions.chat.display.public"; + public static final String FACTION = "hyperfactions.chat.display.faction"; + public static final String ALLY = "hyperfactions.chat.display.ally"; + + private ChatDisplay() {} + } + + /** Relations page labels and messages. */ + public static final class RelationsGui { + public static final String TITLE = "hyperfactions_gui.relations.title"; + public static final String TAB_RELATIONS = "hyperfactions_gui.relations.tab_relations"; + public static final String TAB_PENDING = "hyperfactions_gui.relations.tab_pending"; + public static final String SET_RELATION_BTN = "hyperfactions_gui.relations.set_relation_btn"; + public static final String PREV_BTN = "hyperfactions_gui.relations.prev_btn"; + public static final String NEXT_BTN = "hyperfactions_gui.relations.next_btn"; + public static final String RELATION_COUNT = "hyperfactions_gui.relations.relation_count"; + public static final String REQUEST_COUNT = "hyperfactions_gui.relations.request_count"; + public static final String TYPE_ALLY = "hyperfactions_gui.relations.type_ally"; + public static final String TYPE_ENEMY = "hyperfactions_gui.relations.type_enemy"; + public static final String TYPE_INCOMING = "hyperfactions_gui.relations.type_incoming"; + public static final String TYPE_OUTGOING = "hyperfactions_gui.relations.type_outgoing"; + public static final String INCOMING_REQUEST = "hyperfactions_gui.relations.incoming_request"; + public static final String OUTGOING_REQUEST = "hyperfactions_gui.relations.outgoing_request"; + public static final String EMPTY_RELATIONS = "hyperfactions_gui.relations.empty_relations"; + public static final String EMPTY_RELATIONS_HINT = "hyperfactions_gui.relations.empty_relations_hint"; + public static final String EMPTY_PENDING = "hyperfactions_gui.relations.empty_pending"; + public static final String TODAY = "hyperfactions_gui.relations.today"; + public static final String ONE_DAY_AGO = "hyperfactions_gui.relations.one_day_ago"; + public static final String DAYS_AGO = "hyperfactions_gui.relations.days_ago"; + public static final String NOW_NEUTRAL = "hyperfactions_gui.relations.now_neutral"; + public static final String NOW_ENEMIES = "hyperfactions_gui.relations.now_enemies"; + public static final String REQUEST_SENT = "hyperfactions_gui.relations.request_sent"; + public static final String NOW_ALLIED = "hyperfactions_gui.relations.now_allied"; + public static final String REQUEST_DECLINED = "hyperfactions_gui.relations.request_declined"; + public static final String REQUEST_CANCELLED = "hyperfactions_gui.relations.request_cancelled"; + public static final String FAILED = "hyperfactions_gui.relations.failed"; + public static final String SEARCH_HINT = "hyperfactions_gui.relations.search_hint"; + public static final String NO_RESULTS = "hyperfactions_gui.relations.no_results"; + public static final String POWER_DISPLAY = "hyperfactions_gui.relations.power_display"; + public static final String MEMBER_COUNT_DISPLAY = "hyperfactions_gui.relations.member_count"; + public static final String LABEL_MEMBERS = "hyperfactions_gui.relations.label_members"; + public static final String LABEL_POWER = "hyperfactions_gui.relations.label_power"; + public static final String LABEL_SINCE = "hyperfactions_gui.relations.label_since"; + public static final String LABEL_CLAIMS = "hyperfactions_gui.relations.label_claims"; + public static final String LABEL_DIRECTION = "hyperfactions_gui.relations.label_direction"; + public static final String BTN_VIEW = "hyperfactions_gui.relations.btn_view"; + public static final String BTN_NEUTRAL = "hyperfactions_gui.relations.btn_neutral"; + public static final String BTN_ENEMY = "hyperfactions_gui.relations.btn_enemy"; + public static final String BTN_ALLY = "hyperfactions_gui.relations.btn_ally"; + public static final String BTN_ACCEPT = "hyperfactions_gui.relations.btn_accept"; + public static final String BTN_DECLINE = "hyperfactions_gui.relations.btn_decline"; + public static final String BTN_CANCEL = "hyperfactions_gui.relations.btn_cancel"; + + private RelationsGui() {} + } + + /** Settings page labels and messages. */ + public static final class SettingsGui { + public static final String TITLE = "hyperfactions_gui.settings.title"; + public static final String GENERAL = "hyperfactions_gui.settings.general"; + public static final String NAME_LABEL = "hyperfactions_gui.settings.name_label"; + public static final String TAG_LABEL = "hyperfactions_gui.settings.tag_label"; + public static final String DESC_LABEL = "hyperfactions_gui.settings.desc_label"; + public static final String EDIT_BTN = "hyperfactions_gui.settings.edit_btn"; + public static final String RECRUITMENT = "hyperfactions_gui.settings.recruitment"; + public static final String STATUS_LABEL = "hyperfactions_gui.settings.status_label"; + public static final String HOME_LOCATION = "hyperfactions_gui.settings.home_location"; + public static final String LOCATION_LABEL = "hyperfactions_gui.settings.location_label"; + public static final String SET_HOME_BTN = "hyperfactions_gui.settings.set_home_btn"; + public static final String TELEPORT_BTN = "hyperfactions_gui.settings.teleport_btn"; + public static final String DELETE_BTN = "hyperfactions_gui.settings.delete_btn"; + public static final String OPTIONAL_FEATURES = "hyperfactions_gui.settings.optional_features"; + public static final String CONFIGURE_MODULES = "hyperfactions_gui.settings.configure_modules"; + public static final String MODULES_BTN = "hyperfactions_gui.settings.modules_btn"; + public static final String DANGER_ZONE = "hyperfactions_gui.settings.danger_zone"; + public static final String IRREVERSIBLE = "hyperfactions_gui.settings.irreversible"; + public static final String DISBAND_BTN = "hyperfactions_gui.settings.disband_btn"; + public static final String LOCK_HINT = "hyperfactions_gui.settings.lock_hint"; + public static final String TERRITORY_PERMISSIONS = "hyperfactions_gui.settings.territory_permissions"; + public static final String COL_OUT = "hyperfactions_gui.settings.col_out"; + public static final String COL_ALLY = "hyperfactions_gui.settings.col_ally"; + public static final String COL_MEM = "hyperfactions_gui.settings.col_mem"; + public static final String COL_OFF = "hyperfactions_gui.settings.col_off"; + public static final String CAT_BUILDING = "hyperfactions_gui.settings.cat_building"; + public static final String PERM_BREAK = "hyperfactions_gui.settings.perm_break"; + public static final String PERM_PLACE = "hyperfactions_gui.settings.perm_place"; + public static final String CAT_INTERACTION = "hyperfactions_gui.settings.cat_interaction"; + public static final String INTERACTION_HINT = "hyperfactions_gui.settings.interaction_hint"; + public static final String PERM_ALL = "hyperfactions_gui.settings.perm_all"; + public static final String PERM_DOOR = "hyperfactions_gui.settings.perm_door"; + public static final String PERM_CHEST = "hyperfactions_gui.settings.perm_chest"; + public static final String PERM_BENCH = "hyperfactions_gui.settings.perm_bench"; + public static final String PERM_PROCESSING = "hyperfactions_gui.settings.perm_processing"; + public static final String PERM_SEAT = "hyperfactions_gui.settings.perm_seat"; + public static final String PERM_TRANSPORT = "hyperfactions_gui.settings.perm_transport"; + public static final String CAT_OTHER = "hyperfactions_gui.settings.cat_other"; + public static final String PERM_CRATE = "hyperfactions_gui.settings.perm_crate"; + public static final String PERM_NPC_TAME = "hyperfactions_gui.settings.perm_npc_tame"; + public static final String PERM_PVE = "hyperfactions_gui.settings.perm_pve"; + public static final String APPEARANCE = "hyperfactions_gui.settings.appearance"; + public static final String COLOR_LABEL = "hyperfactions_gui.settings.color_label"; + public static final String MOB_SPAWNING = "hyperfactions_gui.settings.mob_spawning"; + public static final String MOB_SPAWNING_HINT = "hyperfactions_gui.settings.mob_spawning_hint"; + public static final String MOB_SPAWNING_LABEL = "hyperfactions_gui.settings.mob_spawning_label"; + public static final String HOSTILE_MOBS = "hyperfactions_gui.settings.hostile_mobs"; + public static final String PASSIVE_MOBS = "hyperfactions_gui.settings.passive_mobs"; + public static final String NEUTRAL_MOBS = "hyperfactions_gui.settings.neutral_mobs"; + public static final String FACTION_SETTINGS = "hyperfactions_gui.settings.faction_settings"; + public static final String PVP_IN_TERRITORY = "hyperfactions_gui.settings.pvp_in_territory"; + public static final String OFFICERS_CAN_EDIT = "hyperfactions_gui.settings.officers_can_edit"; + public static final String LEADER_ONLY = "hyperfactions_gui.settings.leader_only"; + public static final String OFFICERS_ONLY = "hyperfactions_gui.settings.officers_only"; + public static final String DISPLAY_NONE = "hyperfactions_gui.settings.display_none"; + public static final String HOME_NOT_SET = "hyperfactions_gui.settings.home_not_set"; + public static final String NO_PERMISSION = "hyperfactions_gui.settings.no_permission"; + public static final String ONLY_LEADER_DISBAND = "hyperfactions_gui.settings.only_leader_disband"; + public static final String PERM_LOCKED = "hyperfactions_gui.settings.perm_locked"; + public static final String NO_PERM_EDIT = "hyperfactions_gui.settings.no_perm_edit"; + public static final String ONLY_LEADER_OFFICERS = "hyperfactions_gui.settings.only_leader_officers"; + public static final String PVP_ENABLED = "hyperfactions_gui.settings.pvp_enabled"; + public static final String PVP_DISABLED = "hyperfactions_gui.settings.pvp_disabled"; + public static final String NOT_IN_TERRITORY = "hyperfactions_gui.settings.not_in_territory"; + public static final String HOME_SET = "hyperfactions_gui.settings.home_set"; + public static final String RECRUITMENT_SET = "hyperfactions_gui.settings.recruitment_set"; + public static final String HOME_NO_SET = "hyperfactions_gui.settings.home_no_set"; + public static final String HOME_DELETED = "hyperfactions_gui.settings.home_deleted"; + + private SettingsGui() {} + } + + /** Modules page labels. */ + public static final class ModulesGui { + public static final String TITLE = "hyperfactions_gui.modules.title"; + public static final String DESCRIPTION = "hyperfactions_gui.modules.description"; + public static final String CONFIGURE_BTN = "hyperfactions_gui.modules.configure_btn"; + public static final String BACK_BTN = "hyperfactions_gui.modules.back_btn"; + public static final String TREASURY_NAME = "hyperfactions_gui.modules.treasury_name"; + public static final String TREASURY_DESC = "hyperfactions_gui.modules.treasury_desc"; + public static final String RAIDS_NAME = "hyperfactions_gui.modules.raids_name"; + public static final String RAIDS_DESC = "hyperfactions_gui.modules.raids_desc"; + public static final String LEVELS_NAME = "hyperfactions_gui.modules.levels_name"; + public static final String LEVELS_DESC = "hyperfactions_gui.modules.levels_desc"; + public static final String WAR_NAME = "hyperfactions_gui.modules.war_name"; + public static final String WAR_DESC = "hyperfactions_gui.modules.war_desc"; + public static final String COMING_SOON = "hyperfactions_gui.modules.coming_soon"; + public static final String ACTIVE = "hyperfactions_gui.modules.active"; + public static final String VIEW_TREASURY = "hyperfactions_gui.modules.view_treasury"; + public static final String UNAVAILABLE = "hyperfactions_gui.modules.unavailable"; + public static final String NO_ECONOMY = "hyperfactions_gui.modules.no_economy"; + public static final String DISABLED = "hyperfactions_gui.modules.disabled"; + public static final String ECONOMY_NOT_AVAILABLE = "hyperfactions_gui.modules.economy_not_available"; + + private ModulesGui() {} + } + + /** Treasury page labels and messages. */ + public static final class TreasuryGui { + // Page labels + public static final String TITLE = "hyperfactions_gui.treasury.title"; + public static final String BALANCE_LABEL = "hyperfactions_gui.treasury.balance_label"; + public static final String INCOME_24H = "hyperfactions_gui.treasury.income_24h"; + public static final String DEPOSITS_TRANSFERS_IN = "hyperfactions_gui.treasury.deposits_transfers_in"; + public static final String EXPENSES_24H = "hyperfactions_gui.treasury.expenses_24h"; + public static final String WITHDRAWALS_TRANSFERS_OUT = "hyperfactions_gui.treasury.withdrawals_transfers_out"; + public static final String MAINTENANCE = "hyperfactions_gui.treasury.maintenance"; + public static final String RUNWAY_LABEL = "hyperfactions_gui.treasury.runway_label"; + public static final String ADD_FUNDS = "hyperfactions_gui.treasury.add_funds"; + public static final String DEPOSIT_BTN = "hyperfactions_gui.treasury.deposit_btn"; + public static final String TAKE_FUNDS = "hyperfactions_gui.treasury.take_funds"; + public static final String WITHDRAW_BTN = "hyperfactions_gui.treasury.withdraw_btn"; + public static final String SEND_TO_FACTION = "hyperfactions_gui.treasury.send_to_faction"; + public static final String TRANSFER_BTN = "hyperfactions_gui.treasury.transfer_btn"; + public static final String TREASURY_CONFIG = "hyperfactions_gui.treasury.treasury_config"; + public static final String SETTINGS_BTN = "hyperfactions_gui.treasury.settings_btn"; + public static final String RECENT_TRANSACTIONS = "hyperfactions_gui.treasury.recent_transactions"; + public static final String NO_TRANSACTIONS = "hyperfactions_gui.treasury.no_transactions"; + public static final String COL_DATE = "hyperfactions_gui.treasury.col_date"; + public static final String COL_TYPE = "hyperfactions_gui.treasury.col_type"; + public static final String COL_BY = "hyperfactions_gui.treasury.col_by"; + public static final String COL_AMOUNT = "hyperfactions_gui.treasury.col_amount"; + public static final String COL_DETAILS = "hyperfactions_gui.treasury.col_details"; + public static final String PAY_NOW_BTN = "hyperfactions_gui.treasury.pay_now_btn"; + public static final String COST_7D = "hyperfactions_gui.treasury.cost_7d"; + public static final String COST_14D = "hyperfactions_gui.treasury.cost_14d"; + public static final String COST_30D = "hyperfactions_gui.treasury.cost_30d"; + // Dashboard labels + public static final String WALLET_LABEL = "hyperfactions_gui.treasury.wallet_label"; + public static final String TREASURY_LABEL = "hyperfactions_gui.treasury.treasury_label"; + public static final String CHUNKS_DETAIL = "hyperfactions_gui.treasury.chunks_detail"; + public static final String COST_LABEL = "hyperfactions_gui.treasury.cost_label"; + public static final String PENDING = "hyperfactions_gui.treasury.pending"; + public static final String AUTO_PAY_ON = "hyperfactions_gui.treasury.auto_pay_on"; + public static final String AUTO_PAY_OFF = "hyperfactions_gui.treasury.auto_pay_off"; + public static final String RUNWAY_90_PLUS = "hyperfactions_gui.treasury.runway_90_plus"; + public static final String RUNWAY_DAYS = "hyperfactions_gui.treasury.runway_days"; + public static final String RUNWAY_DAY = "hyperfactions_gui.treasury.runway_day"; + public static final String RUNWAY_LESS_THAN_DAY = "hyperfactions_gui.treasury.runway_less_day"; + public static final String RUNWAY_NO_FUNDS = "hyperfactions_gui.treasury.runway_no_funds"; + public static final String GRACE_EXPIRES = "hyperfactions_gui.treasury.grace_expires"; + public static final String MISSED_PAYMENTS = "hyperfactions_gui.treasury.missed_payments"; + public static final String PAY_TO_CLEAR = "hyperfactions_gui.treasury.pay_to_clear"; + public static final String SYSTEM = "hyperfactions_gui.treasury.system"; + // Transaction types + public static final String TYPE_DEPOSIT = "hyperfactions_gui.treasury.type_deposit"; + public static final String TYPE_WITHDRAWAL = "hyperfactions_gui.treasury.type_withdrawal"; + public static final String TYPE_TRANSFER_IN = "hyperfactions_gui.treasury.type_transfer_in"; + public static final String TYPE_TRANSFER_OUT = "hyperfactions_gui.treasury.type_transfer_out"; + public static final String TYPE_PLAYER_TRANSFER = "hyperfactions_gui.treasury.type_player_transfer"; + public static final String TYPE_UPKEEP = "hyperfactions_gui.treasury.type_upkeep"; + public static final String TYPE_TAX = "hyperfactions_gui.treasury.type_tax"; + public static final String TYPE_WAR_COST = "hyperfactions_gui.treasury.type_war_cost"; + public static final String TYPE_RAID_COST = "hyperfactions_gui.treasury.type_raid_cost"; + public static final String TYPE_SPOILS = "hyperfactions_gui.treasury.type_spoils"; + public static final String TYPE_ADMIN = "hyperfactions_gui.treasury.type_admin"; + // Deposit/Withdraw modal + public static final String DEPOSIT_TITLE = "hyperfactions_gui.treasury.deposit_title"; + public static final String WITHDRAW_TITLE = "hyperfactions_gui.treasury.withdraw_title"; + public static final String FEE_LABEL = "hyperfactions_gui.treasury.fee_label"; + public static final String CONFIRM_DEPOSIT = "hyperfactions_gui.treasury.confirm_deposit"; + public static final String CONFIRM_WITHDRAWAL = "hyperfactions_gui.treasury.confirm_withdrawal"; + public static final String FROM_WALLET = "hyperfactions_gui.treasury.from_wallet"; + public static final String TO_WALLET = "hyperfactions_gui.treasury.to_wallet"; + public static final String ENTER_VALID_AMOUNT = "hyperfactions_gui.treasury.enter_valid_amount"; + public static final String INSUFFICIENT_WALLET = "hyperfactions_gui.treasury.insufficient_wallet"; + public static final String WALLET_WITHDRAW_FAILED = "hyperfactions_gui.treasury.wallet_withdraw_failed"; + public static final String DEPOSIT_FAILED_RETURNED = "hyperfactions_gui.treasury.deposit_failed_returned"; + public static final String DEPOSITED = "hyperfactions_gui.treasury.deposited"; + public static final String DEPOSITED_FEE = "hyperfactions_gui.treasury.deposited_fee"; + public static final String NO_WITHDRAW_PERMISSION = "hyperfactions_gui.treasury.no_withdraw_permission"; + public static final String WITHDRAW_DENIED = "hyperfactions_gui.treasury.withdraw_denied"; + public static final String INSUFFICIENT_TREASURY = "hyperfactions_gui.treasury.insufficient_treasury"; + public static final String WITHDRAW_LIMIT = "hyperfactions_gui.treasury.withdraw_limit"; + public static final String WITHDRAW_FAILED = "hyperfactions_gui.treasury.withdraw_failed"; + public static final String WALLET_DEPOSIT_WARN = "hyperfactions_gui.treasury.wallet_deposit_warn"; + public static final String WITHDREW = "hyperfactions_gui.treasury.withdrew"; + public static final String WITHDREW_FEE = "hyperfactions_gui.treasury.withdrew_fee"; + // Transfer search + public static final String SEARCH_HINT = "hyperfactions_gui.treasury.search_hint"; + public static final String NO_RESULTS = "hyperfactions_gui.treasury.no_results"; + public static final String TAG_PLAYER = "hyperfactions_gui.treasury.tag_player"; + public static final String TAG_FACTION = "hyperfactions_gui.treasury.tag_faction"; + public static final String SOURCE_ONLINE = "hyperfactions_gui.treasury.source_online"; + public static final String SOURCE_OFFLINE = "hyperfactions_gui.treasury.source_offline"; + public static final String SOURCE_PLAYER_DB = "hyperfactions_gui.treasury.source_player_db"; + // Transfer confirm + public static final String NO_TRANSFER_PERMISSION = "hyperfactions_gui.treasury.no_transfer_permission"; + public static final String TRANSFER_DENIED = "hyperfactions_gui.treasury.transfer_denied"; + public static final String INVALID_TARGET_FACTION = "hyperfactions_gui.treasury.invalid_target_faction"; + public static final String TARGET_FACTION_GONE = "hyperfactions_gui.treasury.target_faction_gone"; + public static final String TRANSFER_FAILED = "hyperfactions_gui.treasury.transfer_failed"; + public static final String TRANSFER_FAILED_RETURNED = "hyperfactions_gui.treasury.transfer_failed_returned"; + public static final String TRANSFERRED = "hyperfactions_gui.treasury.transferred"; + public static final String INVALID_TARGET_PLAYER = "hyperfactions_gui.treasury.invalid_target_player"; + public static final String PLAYER_TRANSFER_FAILED = "hyperfactions_gui.treasury.player_transfer_failed"; + // Treasury settings + public static final String LEADER_ONLY_PERMS = "hyperfactions_gui.treasury.leader_only_perms"; + public static final String LEADER_ONLY_UPKEEP = "hyperfactions_gui.treasury.leader_only_upkeep"; + public static final String INVALID_LIMIT = "hyperfactions_gui.treasury.invalid_limit"; + // Treasury settings page + public static final String SETTINGS_TITLE = "hyperfactions_gui.treasury.settings_title"; + public static final String OFFICER_PERMISSIONS = "hyperfactions_gui.treasury.officer_permissions"; + public static final String ALLOW_WITHDRAW = "hyperfactions_gui.treasury.allow_withdraw"; + public static final String ALLOW_TRANSFER = "hyperfactions_gui.treasury.allow_transfer"; + public static final String LIMITS_SECTION = "hyperfactions_gui.treasury.limits_section"; + public static final String MAX_PER_WITHDRAWAL = "hyperfactions_gui.treasury.max_per_withdrawal"; + public static final String MAX_WITHDRAWALS_PER = "hyperfactions_gui.treasury.max_withdrawals_per"; + public static final String MAX_PER_TRANSFER = "hyperfactions_gui.treasury.max_per_transfer"; + public static final String MAX_TRANSFERS_PER = "hyperfactions_gui.treasury.max_transfers_per"; + public static final String LIMIT_PERIOD = "hyperfactions_gui.treasury.limit_period"; + public static final String NO_LIMIT_HINT = "hyperfactions_gui.treasury.no_limit_hint"; + public static final String UPKEEP_SETTINGS = "hyperfactions_gui.treasury.upkeep_settings"; + public static final String AUTO_PAY_UPKEEP = "hyperfactions_gui.treasury.auto_pay_upkeep"; + public static final String BACK_BTN = "hyperfactions_gui.treasury.back_btn"; + // Upkeep format strings + public static final String UPKEEP_COST_FORMAT = "hyperfactions_gui.treasury.upkeep_cost_format"; + public static final String UPKEEP_TIME_LEFT = "hyperfactions_gui.treasury.upkeep_time_left"; + + private TreasuryGui() {} + } + + /** Confirmation page messages (disband, leave, transfer). */ + public static final class ConfirmGui { + // Static UI labels + public static final String DISBAND_TITLE = "hyperfactions_gui.confirm.disband_title"; + public static final String DISBAND_PROMPT = "hyperfactions_gui.confirm.disband_prompt"; + public static final String DISBAND_WARNING = "hyperfactions_gui.confirm.disband_warning"; + public static final String LEAVE_TITLE = "hyperfactions_gui.confirm.leave_title"; + public static final String LEAVE_PROMPT = "hyperfactions_gui.confirm.leave_prompt"; + public static final String LEAVE_WARNING = "hyperfactions_gui.confirm.leave_warning"; + public static final String LEADER_LEAVE_TITLE = "hyperfactions_gui.confirm.leader_leave_title"; + public static final String LEADER_LEAVE_PROMPT = "hyperfactions_gui.confirm.leader_leave_prompt"; + public static final String TRANSFER_TITLE = "hyperfactions_gui.confirm.transfer_title"; + public static final String TRANSFER_PROMPT = "hyperfactions_gui.confirm.transfer_prompt"; + public static final String TRANSFER_WARNING = "hyperfactions_gui.confirm.transfer_warning"; + public static final String ERROR_TITLE = "hyperfactions_gui.confirm.error_title"; + public static final String ERROR_DEFAULT = "hyperfactions_gui.confirm.error_default"; + // DisbandConfirm + public static final String DISBAND_NOT_LEADER = "hyperfactions_gui.confirm.disband_not_leader"; + public static final String DISBANDED = "hyperfactions_gui.confirm.disbanded"; + public static final String DISBAND_FAILED = "hyperfactions_gui.confirm.disband_failed"; + // LeaderLeaveConfirm + public static final String SUCCESSION_TITLE = "hyperfactions_gui.confirm.succession_title"; + public static final String NO_MEMBERS_WARNING = "hyperfactions_gui.confirm.no_members_warning"; + public static final String WILL_DISBAND = "hyperfactions_gui.confirm.will_disband"; + public static final String NOT_IN_FACTION = "hyperfactions_gui.confirm.not_in_faction"; + public static final String NOT_LEADER_ANYMORE = "hyperfactions_gui.confirm.not_leader_anymore"; + public static final String NO_SUCCESSOR = "hyperfactions_gui.confirm.no_successor"; + public static final String TRANSFER_FAILED = "hyperfactions_gui.confirm.transfer_failed"; + public static final String LEADER_LEFT = "hyperfactions_gui.confirm.leader_left"; + public static final String LEAVE_FAILED = "hyperfactions_gui.confirm.leave_failed"; + // LeaveConfirm + public static final String LEADER_CANNOT_LEAVE = "hyperfactions_gui.confirm.leader_cannot_leave"; + public static final String LEFT_FACTION = "hyperfactions_gui.confirm.left_faction"; + // TransferConfirm + public static final String FACTION_GONE = "hyperfactions_gui.confirm.faction_gone"; + public static final String NOT_LEADER_TRANSFER = "hyperfactions_gui.confirm.not_leader_transfer"; + public static final String LEADERSHIP_TRANSFERRED = "hyperfactions_gui.confirm.leadership_transferred"; + + private ConfirmGui() {} + } + + /** Logs viewer page labels and messages. */ + public static final class LogsGui { + public static final String TITLE = "hyperfactions_gui.logs.title"; + public static final String ENTRY_COUNT = "hyperfactions_gui.logs.entry_count"; + public static final String FILTER_LABEL = "hyperfactions_gui.logs.filter_label"; + public static final String COL_TIME = "hyperfactions_gui.logs.col_time"; + public static final String COL_TYPE = "hyperfactions_gui.logs.col_type"; + public static final String COL_MESSAGE = "hyperfactions_gui.logs.col_message"; + public static final String PREV_BTN = "hyperfactions_gui.logs.prev_btn"; + public static final String NEXT_BTN = "hyperfactions_gui.logs.next_btn"; + public static final String ALL_TYPES = "hyperfactions_gui.logs.all_types"; + public static final String NO_LOGS_TYPE = "hyperfactions_gui.logs.no_logs_type"; + public static final String NO_LOGS = "hyperfactions_gui.logs.no_logs"; + public static final String TIME_JUST_NOW = "hyperfactions_gui.logs.time_just_now"; + public static final String TIME_MINUTE = "hyperfactions_gui.logs.time_minute"; + public static final String TIME_MINUTES = "hyperfactions_gui.logs.time_minutes"; + public static final String TIME_HOUR = "hyperfactions_gui.logs.time_hour"; + public static final String TIME_HOURS = "hyperfactions_gui.logs.time_hours"; + public static final String TIME_DAY = "hyperfactions_gui.logs.time_day"; + public static final String TIME_DAYS = "hyperfactions_gui.logs.time_days"; + public static final String TIME_WEEK = "hyperfactions_gui.logs.time_week"; + public static final String TIME_WEEKS = "hyperfactions_gui.logs.time_weeks"; + public static final String TYPE_MEMBER_JOIN = "hyperfactions_gui.logs.type_member_join"; + public static final String TYPE_MEMBER_LEAVE = "hyperfactions_gui.logs.type_member_leave"; + public static final String TYPE_MEMBER_KICK = "hyperfactions_gui.logs.type_member_kick"; + public static final String TYPE_MEMBER_PROMOTE = "hyperfactions_gui.logs.type_member_promote"; + public static final String TYPE_MEMBER_DEMOTE = "hyperfactions_gui.logs.type_member_demote"; + public static final String TYPE_CLAIM = "hyperfactions_gui.logs.type_claim"; + public static final String TYPE_UNCLAIM = "hyperfactions_gui.logs.type_unclaim"; + public static final String TYPE_OVERCLAIM = "hyperfactions_gui.logs.type_overclaim"; + public static final String TYPE_HOME_SET = "hyperfactions_gui.logs.type_home_set"; + public static final String TYPE_RELATION_ALLY = "hyperfactions_gui.logs.type_relation_ally"; + public static final String TYPE_RELATION_ENEMY = "hyperfactions_gui.logs.type_relation_enemy"; + public static final String TYPE_RELATION_NEUTRAL = "hyperfactions_gui.logs.type_relation_neutral"; + public static final String TYPE_LEADER_TRANSFER = "hyperfactions_gui.logs.type_leader_transfer"; + public static final String TYPE_SETTINGS_CHANGE = "hyperfactions_gui.logs.type_settings_change"; + public static final String TYPE_POWER_CHANGE = "hyperfactions_gui.logs.type_power_change"; + public static final String TYPE_ECONOMY = "hyperfactions_gui.logs.type_economy"; + public static final String TYPE_ADMIN_POWER = "hyperfactions_gui.logs.type_admin_power"; + + /** Derives the lang key for a FactionLog.LogType enum by name. */ + public static String typeKey(String logTypeName) { + return "hyperfactions_gui.logs.type_" + logTypeName.toLowerCase(); + } + + // === Log message templates (i18n for FactionLog.message content) === + + // Player actions + public static final String MSG_FACTION_CREATED = "hyperfactions_gui.logs.msg_faction_created"; + public static final String MSG_MEMBER_JOINED = "hyperfactions_gui.logs.msg_member_joined"; + public static final String MSG_MEMBER_LEFT = "hyperfactions_gui.logs.msg_member_left"; + public static final String MSG_MEMBER_KICKED = "hyperfactions_gui.logs.msg_member_kicked"; + public static final String MSG_MEMBER_PROMOTED = "hyperfactions_gui.logs.msg_member_promoted"; + public static final String MSG_MEMBER_DEMOTED = "hyperfactions_gui.logs.msg_member_demoted"; + public static final String MSG_LEADER_TRANSFERRED = "hyperfactions_gui.logs.msg_leader_transferred"; + public static final String MSG_LEADER_LEFT_TRANSFER = "hyperfactions_gui.logs.msg_leader_left_transfer"; + public static final String MSG_RELATION_SET = "hyperfactions_gui.logs.msg_relation_set"; + + // Territory + public static final String MSG_CLAIMED = "hyperfactions_gui.logs.msg_claimed"; + public static final String MSG_UNCLAIMED = "hyperfactions_gui.logs.msg_unclaimed"; + public static final String MSG_OVERCLAIM_LOST = "hyperfactions_gui.logs.msg_overclaim_lost"; + public static final String MSG_OVERCLAIM_TAKEN = "hyperfactions_gui.logs.msg_overclaim_taken"; + public static final String MSG_ALL_UNCLAIMED = "hyperfactions_gui.logs.msg_all_unclaimed"; + public static final String MSG_CLAIM_REMOVED_WORLD = "hyperfactions_gui.logs.msg_claim_removed_world"; + public static final String MSG_CLAIMS_LOST_UPKEEP = "hyperfactions_gui.logs.msg_claims_lost_upkeep"; + public static final String MSG_CLAIMS_REMOVED_INACTIVE = "hyperfactions_gui.logs.msg_claims_removed_inactive"; + + // Home + public static final String MSG_HOME_SET = "hyperfactions_gui.logs.msg_home_set"; + public static final String MSG_HOME_CLEARED = "hyperfactions_gui.logs.msg_home_cleared"; + public static final String MSG_HOME_CLEARED_WORLD = "hyperfactions_gui.logs.msg_home_cleared_world"; + + // Settings + public static final String MSG_RENAMED = "hyperfactions_gui.logs.msg_renamed"; + public static final String MSG_SET_OPEN = "hyperfactions_gui.logs.msg_set_open"; + public static final String MSG_SET_CLOSED = "hyperfactions_gui.logs.msg_set_closed"; + public static final String MSG_DESC_SET = "hyperfactions_gui.logs.msg_desc_set"; + public static final String MSG_DESC_CLEARED = "hyperfactions_gui.logs.msg_desc_cleared"; + public static final String MSG_COLOR_CHANGED = "hyperfactions_gui.logs.msg_color_changed"; + + // Economy + public static final String MSG_DEPOSIT = "hyperfactions_gui.logs.msg_deposit"; + public static final String MSG_WITHDRAWAL = "hyperfactions_gui.logs.msg_withdrawal"; + public static final String MSG_UPKEEP_PAID = "hyperfactions_gui.logs.msg_upkeep_paid"; + public static final String MSG_UPKEEP_GRACE_STARTED = "hyperfactions_gui.logs.msg_upkeep_grace_started"; + public static final String MSG_UPKEEP_MISSED = "hyperfactions_gui.logs.msg_upkeep_missed"; + public static final String MSG_UPKEEP_MANUAL = "hyperfactions_gui.logs.msg_upkeep_manual"; + + // Admin power + public static final String MSG_ADMIN_POWER_SET = "hyperfactions_gui.logs.msg_admin_power_set"; + public static final String MSG_ADMIN_POWER_ADD = "hyperfactions_gui.logs.msg_admin_power_add"; + public static final String MSG_ADMIN_POWER_REMOVE = "hyperfactions_gui.logs.msg_admin_power_remove"; + public static final String MSG_ADMIN_POWER_RESET = "hyperfactions_gui.logs.msg_admin_power_reset"; + public static final String MSG_ADMIN_POWER_ADJUSTED = "hyperfactions_gui.logs.msg_admin_power_adjusted"; + public static final String MSG_ADMIN_MAXPOWER_SET = "hyperfactions_gui.logs.msg_admin_maxpower_set"; + public static final String MSG_ADMIN_MAXPOWER_RESET = "hyperfactions_gui.logs.msg_admin_maxpower_reset"; + public static final String MSG_ADMIN_POWERLOSS_ENABLED = "hyperfactions_gui.logs.msg_admin_powerloss_enabled"; + public static final String MSG_ADMIN_POWERLOSS_DISABLED = "hyperfactions_gui.logs.msg_admin_powerloss_disabled"; + public static final String MSG_ADMIN_DECAY_ENABLED = "hyperfactions_gui.logs.msg_admin_decay_enabled"; + public static final String MSG_ADMIN_DECAY_DISABLED = "hyperfactions_gui.logs.msg_admin_decay_disabled"; + public static final String MSG_ADMIN_KD_RESET = "hyperfactions_gui.logs.msg_admin_kd_reset"; + public static final String MSG_ADMIN_POWER_SET_ALL = "hyperfactions_gui.logs.msg_admin_power_set_all"; + public static final String MSG_ADMIN_POWER_ADD_ALL = "hyperfactions_gui.logs.msg_admin_power_add_all"; + public static final String MSG_ADMIN_POWER_REMOVE_ALL = "hyperfactions_gui.logs.msg_admin_power_remove_all"; + public static final String MSG_ADMIN_POWER_RESET_ALL = "hyperfactions_gui.logs.msg_admin_power_reset_all"; + public static final String MSG_ADMIN_POWER_ADJUSTED_ALL = "hyperfactions_gui.logs.msg_admin_power_adjusted_all"; + + // Admin faction + public static final String MSG_ADMIN_KICKED = "hyperfactions_gui.logs.msg_admin_kicked"; + public static final String MSG_ADMIN_ROLE_SET = "hyperfactions_gui.logs.msg_admin_role_set"; + public static final String MSG_ADMIN_LEADER_KICK = "hyperfactions_gui.logs.msg_admin_leader_kick"; + public static final String MSG_ADMIN_ECON_ADDED = "hyperfactions_gui.logs.msg_admin_econ_added"; + public static final String MSG_ADMIN_ECON_DEDUCTED = "hyperfactions_gui.logs.msg_admin_econ_deducted"; + public static final String MSG_ADMIN_ECON_SET = "hyperfactions_gui.logs.msg_admin_econ_set"; + + // Import + public static final String MSG_LEFT_IMPORT = "hyperfactions_gui.logs.msg_left_import"; + public static final String MSG_LEADER_IMPORT_TRANSFER = "hyperfactions_gui.logs.msg_leader_import_transfer"; + public static final String MSG_IMPORTED_FROM = "hyperfactions_gui.logs.msg_imported_from"; + + private LogsGui() {} + } + + /** Faction chat page labels and messages. */ + public static final class ChatGui { + public static final String TITLE = "hyperfactions_gui.chat.title"; + public static final String TAB_FACTION = "hyperfactions_gui.chat.tab_faction"; + public static final String TAB_ALLY = "hyperfactions_gui.chat.tab_ally"; + public static final String SEND_BTN = "hyperfactions_gui.chat.send_btn"; + public static final String PLACEHOLDER = "hyperfactions_gui.chat.placeholder"; + public static final String NO_MESSAGES = "hyperfactions_gui.chat.no_messages"; + public static final String NO_ALLY_PERMISSION = "hyperfactions_gui.chat.no_ally_permission"; + public static final String NO_PERMISSION = "hyperfactions_gui.chat.no_permission"; + public static final String FACTION_GONE = "hyperfactions_gui.chat.faction_gone"; + public static final String TIME_NOW = "hyperfactions_gui.chat.time_now"; + public static final String TIME_MINUTES = "hyperfactions_gui.chat.time_minutes"; + public static final String TIME_HOURS = "hyperfactions_gui.chat.time_hours"; + + private ChatGui() {} + } + + /** Faction invites page labels and messages. */ + public static final class InvitesGui { + public static final String TITLE = "hyperfactions_gui.invites.title"; + public static final String TAB_OUTGOING = "hyperfactions_gui.invites.tab_outgoing"; + public static final String TAB_REQUESTS = "hyperfactions_gui.invites.tab_requests"; + public static final String PREV_BTN = "hyperfactions_gui.invites.prev_btn"; + public static final String NEXT_BTN = "hyperfactions_gui.invites.next_btn"; + public static final String INVITE_COUNT = "hyperfactions_gui.invites.invite_count"; + public static final String REQUEST_COUNT = "hyperfactions_gui.invites.request_count"; + public static final String INVITED_BY = "hyperfactions_gui.invites.invited_by"; + public static final String NO_MESSAGE = "hyperfactions_gui.invites.no_message"; + public static final String EXPIRES = "hyperfactions_gui.invites.expires"; + public static final String TYPE_OUTGOING = "hyperfactions_gui.invites.type_outgoing"; + public static final String TYPE_REQUEST = "hyperfactions_gui.invites.type_request"; + public static final String INVITED_BY_LABEL = "hyperfactions_gui.invites.invited_by_label"; + public static final String EMPTY_OUTGOING = "hyperfactions_gui.invites.empty_outgoing"; + public static final String EMPTY_REQUESTS = "hyperfactions_gui.invites.empty_requests"; + public static final String INVALID_PLAYER = "hyperfactions_gui.invites.invalid_player"; + public static final String CANCELLED_INVITE = "hyperfactions_gui.invites.cancelled_invite"; + public static final String PLAYER_JOINED = "hyperfactions_gui.invites.player_joined"; + public static final String FACTION_FULL = "hyperfactions_gui.invites.faction_full"; + public static final String ADD_FAILED = "hyperfactions_gui.invites.add_failed"; + public static final String REQUEST_EXPIRED = "hyperfactions_gui.invites.request_expired"; + public static final String REQUEST_DECLINED = "hyperfactions_gui.invites.request_declined"; + public static final String TIME_SECONDS = "hyperfactions_gui.invites.time_seconds"; + public static final String TIME_MINUTES = "hyperfactions_gui.invites.time_minutes"; + public static final String TIME_HOURS = "hyperfactions_gui.invites.time_hours"; + public static final String LABEL_MESSAGE = "hyperfactions_gui.invites.label_message"; + public static final String BTN_CANCEL = "hyperfactions_gui.invites.btn_cancel"; + public static final String BTN_ACCEPT = "hyperfactions_gui.invites.btn_accept"; + public static final String BTN_DECLINE = "hyperfactions_gui.invites.btn_decline"; + + private InvitesGui() {} + } + + /** Chunk map page labels and messages. */ + public static final class MapGui { + public static final String TITLE = "hyperfactions_gui.map.title"; + public static final String ACTION_HINT = "hyperfactions_gui.map.action_hint"; + public static final String LEGEND_YOUR = "hyperfactions_gui.map.legend_your"; + public static final String LEGEND_ALLY = "hyperfactions_gui.map.legend_ally"; + public static final String LEGEND_ENEMY = "hyperfactions_gui.map.legend_enemy"; + public static final String LEGEND_OTHER = "hyperfactions_gui.map.legend_other"; + public static final String LEGEND_WILDERNESS = "hyperfactions_gui.map.legend_wilderness"; + public static final String LEGEND_SAFE = "hyperfactions_gui.map.legend_safe"; + public static final String LEGEND_WAR = "hyperfactions_gui.map.legend_war"; + public static final String LEGEND_YOU = "hyperfactions_gui.map.legend_you"; + public static final String POSITION = "hyperfactions_gui.map.position"; + public static final String LEGEND_PROTECTED = "hyperfactions_gui.map.legend_protected"; + public static final String CLAIM_STATS = "hyperfactions_gui.map.claim_stats"; + public static final String OVERCLAIMED = "hyperfactions_gui.map.overclaimed"; + public static final String POWER_DISPLAY = "hyperfactions_gui.map.power_display"; + public static final String JOIN_TO_CLAIM = "hyperfactions_gui.map.join_to_claim"; + // Claim results + public static final String CLAIM_SUCCESS = "hyperfactions_gui.map.claim_success"; + public static final String CLAIM_NOT_IN_FACTION = "hyperfactions_gui.map.claim_not_in_faction"; + public static final String CLAIM_NOT_OFFICER = "hyperfactions_gui.map.claim_not_officer"; + public static final String CLAIM_ALREADY_YOURS = "hyperfactions_gui.map.claim_already_yours"; + public static final String CLAIM_ALREADY_CLAIMED = "hyperfactions_gui.map.claim_already_claimed"; + public static final String CLAIM_NOT_ADJACENT = "hyperfactions_gui.map.claim_not_adjacent"; + public static final String CLAIM_MAX = "hyperfactions_gui.map.claim_max"; + public static final String CLAIM_WORLD_NOT_ALLOWED = "hyperfactions_gui.map.claim_world_not_allowed"; + public static final String CLAIM_ORBISGUARD = "hyperfactions_gui.map.claim_orbisguard"; + public static final String CLAIM_FAILED = "hyperfactions_gui.map.claim_failed"; + // Unclaim results + public static final String UNCLAIM_SUCCESS = "hyperfactions_gui.map.unclaim_success"; + public static final String UNCLAIM_NOT_IN_FACTION = "hyperfactions_gui.map.unclaim_not_in_faction"; + public static final String UNCLAIM_NOT_OFFICER = "hyperfactions_gui.map.unclaim_not_officer"; + public static final String UNCLAIM_NOT_CLAIMED = "hyperfactions_gui.map.unclaim_not_claimed"; + public static final String UNCLAIM_NOT_YOURS = "hyperfactions_gui.map.unclaim_not_yours"; + public static final String UNCLAIM_HOME = "hyperfactions_gui.map.unclaim_home"; + public static final String UNCLAIM_FAILED = "hyperfactions_gui.map.unclaim_failed"; + // Overclaim results + public static final String OVERCLAIM_SUCCESS = "hyperfactions_gui.map.overclaim_success"; + public static final String OVERCLAIM_NOT_IN_FACTION = "hyperfactions_gui.map.overclaim_not_in_faction"; + public static final String OVERCLAIM_NOT_OFFICER = "hyperfactions_gui.map.overclaim_not_officer"; + public static final String OVERCLAIM_ALREADY_YOURS = "hyperfactions_gui.map.overclaim_already_yours"; + public static final String OVERCLAIM_ALLY = "hyperfactions_gui.map.overclaim_ally"; + public static final String OVERCLAIM_HAS_POWER = "hyperfactions_gui.map.overclaim_has_power"; + public static final String OVERCLAIM_MAX = "hyperfactions_gui.map.overclaim_max"; + public static final String OVERCLAIM_FAILED = "hyperfactions_gui.map.overclaim_failed"; + + private MapGui() {} + } + + + /** Create faction page labels and messages. */ + public static final class CreateGui { + public static final String PREVIEW_NAME = "hyperfactions_gui.create.preview_name"; + public static final String LEADER_PREFIX = "hyperfactions_gui.create.leader_prefix"; + public static final String ENTER_NAME = "hyperfactions_gui.create.enter_name"; + public static final String NAME_TOO_SHORT = "hyperfactions_gui.create.name_too_short"; + public static final String NAME_TOO_LONG = "hyperfactions_gui.create.name_too_long"; + public static final String NAME_TAKEN = "hyperfactions_gui.create.name_taken"; + public static final String TAG_LENGTH = "hyperfactions_gui.create.tag_length"; + public static final String TAG_FORMAT = "hyperfactions_gui.create.tag_format"; + public static final String DESC_TOO_LONG = "hyperfactions_gui.create.desc_too_long"; + public static final String CREATED = "hyperfactions_gui.create.created"; + public static final String CREATED_NO_DASHBOARD = "hyperfactions_gui.create.created_no_dashboard"; + public static final String INVALID_NAME = "hyperfactions_gui.create.invalid_name"; + public static final String CREATE_FAILED = "hyperfactions_gui.create.create_failed"; + // Static UI labels + public static final String TITLE = "hyperfactions_gui.create.title"; + public static final String SECTION_PREVIEW = "hyperfactions_gui.create.section_preview"; + public static final String SECTION_BASIC_INFO = "hyperfactions_gui.create.section_basic_info"; + public static final String SECTION_DETAILS = "hyperfactions_gui.create.section_details"; + public static final String NAME_PREFIX = "hyperfactions_gui.create.name_prefix"; + public static final String FACTION_NAME_LABEL = "hyperfactions_gui.create.faction_name_label"; + public static final String TAG_LABEL = "hyperfactions_gui.create.tag_label"; + public static final String DESC_LABEL = "hyperfactions_gui.create.desc_label"; + public static final String RECRUITMENT_LABEL = "hyperfactions_gui.create.recruitment_label"; + public static final String SECTION_FACTION_COLOR = "hyperfactions_gui.create.section_faction_color"; + public static final String SECTION_COMBAT = "hyperfactions_gui.create.section_combat"; + public static final String CREATE_BTN = "hyperfactions_gui.create.create_btn"; + + private CreateGui() {} + } + + /** New player page labels and messages (invites, browse, map). */ + public static final class NewPlayerGui { + // Page titles and static labels + public static final String BROWSE_TITLE = "hyperfactions_gui.newplayer.browse_title"; + public static final String INVITES_TITLE = "hyperfactions_gui.newplayer.invites_title"; + public static final String MAP_TITLE = "hyperfactions_gui.newplayer.map_title"; + public static final String VIEW_ONLY_BADGE = "hyperfactions_gui.newplayer.view_only_badge"; + public static final String LEGEND_LABEL = "hyperfactions_gui.newplayer.legend_label"; + public static final String LEGEND_SAFEZONE = "hyperfactions_gui.newplayer.legend_safezone"; + public static final String LEGEND_WARZONE = "hyperfactions_gui.newplayer.legend_warzone"; + public static final String LEGEND_FACTION = "hyperfactions_gui.newplayer.legend_faction"; + public static final String LEGEND_WILDERNESS = "hyperfactions_gui.newplayer.legend_wilderness"; + public static final String SEARCH_LABEL = "hyperfactions_gui.newplayer.search_label"; + public static final String SORT_LABEL = "hyperfactions_gui.newplayer.sort_label"; + public static final String PREV_BTN = "hyperfactions_gui.newplayer.prev_btn"; + public static final String NEXT_BTN = "hyperfactions_gui.newplayer.next_btn"; + // Invites page + public static final String PENDING_COUNT = "hyperfactions_gui.newplayer.pending_count"; + public static final String RECEIVED_HEADER = "hyperfactions_gui.newplayer.received_header"; + public static final String REQUESTS_HEADER = "hyperfactions_gui.newplayer.requests_header"; + public static final String NO_INVITES = "hyperfactions_gui.newplayer.no_invites"; + public static final String NO_REQUESTS = "hyperfactions_gui.newplayer.no_requests"; + public static final String INVITED_BY = "hyperfactions_gui.newplayer.invited_by"; + public static final String MEMBER_COUNT = "hyperfactions_gui.newplayer.member_count"; + public static final String POWER_COUNT = "hyperfactions_gui.newplayer.power_count"; + public static final String CLAIM_COUNT = "hyperfactions_gui.newplayer.claim_count"; + public static final String AWAITING_REVIEW = "hyperfactions_gui.newplayer.awaiting_review"; + public static final String EXPIRES_IN = "hyperfactions_gui.newplayer.expires_in"; + public static final String TIME_JUST_NOW = "hyperfactions_gui.newplayer.time_just_now"; + public static final String TIME_MINUTES = "hyperfactions_gui.newplayer.time_minutes"; + public static final String TIME_HOURS = "hyperfactions_gui.newplayer.time_hours"; + public static final String TIME_DAYS = "hyperfactions_gui.newplayer.time_days"; + // Shared join result messages + public static final String INVALID_FACTION = "hyperfactions_gui.newplayer.invalid_faction"; + public static final String INVITE_EXPIRED = "hyperfactions_gui.newplayer.invite_expired"; + public static final String FACTION_GONE = "hyperfactions_gui.newplayer.faction_gone"; + public static final String JOINED = "hyperfactions_gui.newplayer.joined"; + public static final String FACTION_FULL = "hyperfactions_gui.newplayer.faction_full"; + public static final String JOIN_FAILED = "hyperfactions_gui.newplayer.join_failed"; + public static final String INVITE_DECLINED = "hyperfactions_gui.newplayer.invite_declined"; + public static final String REQUEST_CANCELLED = "hyperfactions_gui.newplayer.request_cancelled"; + // Browse page + public static final String FACTION_COUNT = "hyperfactions_gui.newplayer.faction_count"; + public static final String BROWSE_SUBTITLE = "hyperfactions_gui.newplayer.browse_subtitle"; + public static final String SORT_POWER = "hyperfactions_gui.newplayer.sort_power"; + public static final String SORT_NAME = "hyperfactions_gui.newplayer.sort_name"; + public static final String SORT_MEMBERS = "hyperfactions_gui.newplayer.sort_members"; + public static final String BTN_ACCEPT = "hyperfactions_gui.newplayer.btn_accept"; + public static final String BTN_PENDING = "hyperfactions_gui.newplayer.btn_pending"; + public static final String BTN_JOIN = "hyperfactions_gui.newplayer.btn_join"; + public static final String BTN_REQUEST = "hyperfactions_gui.newplayer.btn_request"; + public static final String INVITE_ONLY_MSG = "hyperfactions_gui.newplayer.invite_only_msg"; + public static final String WELCOME_HINT = "hyperfactions_gui.newplayer.welcome_hint"; + public static final String FACTION_OPEN_HINT = "hyperfactions_gui.newplayer.faction_open_hint"; + public static final String ALREADY_REQUESTED = "hyperfactions_gui.newplayer.already_requested"; + public static final String HAS_INVITE_HINT = "hyperfactions_gui.newplayer.has_invite_hint"; + public static final String REQUEST_SENT = "hyperfactions_gui.newplayer.request_sent"; + public static final String OFFICER_REVIEW = "hyperfactions_gui.newplayer.officer_review"; + // Map page + public static final String MAP_HINT = "hyperfactions_gui.newplayer.map_hint"; + + private NewPlayerGui() {} + } + /** Admin GUI page labels and messages. */ + public static final class AdminGui { + // Common admin labels + public static final String FACTION_NOT_FOUND_LABEL = "hyperfactions_admin.common.faction_not_found"; + public static final String NO_FACTION = "hyperfactions_admin.common.no_faction"; + public static final String NOT_SET = "hyperfactions_admin.common.not_set"; + public static final String ON = "hyperfactions_admin.common.on"; + public static final String OFF = "hyperfactions_admin.common.off"; + public static final String ENABLE_BTN = "hyperfactions_admin.common.enable"; + public static final String DISABLE_BTN = "hyperfactions_admin.common.disable"; + public static final String NONE_PAREN = "hyperfactions_admin.common.none_paren"; + public static final String INVALID_FACTION = "hyperfactions_admin.common.invalid_faction"; + public static final String LEADER_PREFIX = "hyperfactions_admin.common.leader_prefix"; + public static final String MEMBERS_SUFFIX = "hyperfactions_admin.common.members_suffix"; + public static final String CLAIMS_SUFFIX = "hyperfactions_admin.common.claims_suffix"; + public static final String FACTIONS_SUFFIX = "hyperfactions_admin.common.factions_suffix"; + public static final String NAV_TITLE = "hyperfactions_admin.gui.nav_title"; + public static final String GUI_ECON_BTN_ADJUST = "hyperfactions_admin.gui.econ_btn_adjust"; + public static final String GUI_ECON_BTN_INFO = "hyperfactions_admin.gui.econ_btn_info"; + public static final String PLAYERS_SUFFIX = "hyperfactions_admin.common.players_suffix"; + public static final String CHUNKS_SUFFIX = "hyperfactions_admin.common.chunks_suffix"; + public static final String ENTRIES_SUFFIX = "hyperfactions_admin.common.entries_suffix"; + public static final String FOUND_SUFFIX = "hyperfactions_admin.common.found_suffix"; + public static final String POWER_FORMAT = "hyperfactions_admin.common.power_format"; + public static final String RAIDABLE = "hyperfactions_admin.common.raidable"; + public static final String PROTECTED = "hyperfactions_admin.common.protected"; + public static final String NO_DESCRIPTION = "hyperfactions_admin.common.no_description"; + public static final String OFFICERS_MORE = "hyperfactions_admin.common.officers_more"; + public static final String CUSTOM_MAX = "hyperfactions_admin.common.custom_max"; + public static final String DEFAULT_MAX = "hyperfactions_admin.common.default_max"; + public static final String NOW = "hyperfactions_admin.common.now"; + public static final String AGO_SUFFIX = "hyperfactions_admin.common.ago_suffix"; + public static final String JUST_NOW = "hyperfactions_admin.common.just_now"; + public static final String NO_MEMBERSHIP_HISTORY = "hyperfactions_admin.common.no_membership_history"; + // Dashboard + public static final String DASH_FACTIONS_PREFIX = "hyperfactions_admin.dashboard.factions_prefix"; + public static final String DASH_MEMBERS_PREFIX = "hyperfactions_admin.dashboard.members_prefix"; + public static final String DASH_CLAIMS_PREFIX = "hyperfactions_admin.dashboard.claims_prefix"; + // Actions + public static final String ACT_CONFIRM_RESET = "hyperfactions_admin.actions.confirm_reset"; + public static final String ACT_CONFIRM_TRIGGER = "hyperfactions_admin.actions.confirm_trigger"; + public static final String ACT_KD_RESET = "hyperfactions_admin.actions.kd_reset"; + public static final String ACT_KD_RESET_FAILED = "hyperfactions_admin.actions.kd_reset_failed"; + public static final String ACT_UPKEEP_UNAVAILABLE = "hyperfactions_admin.actions.upkeep_unavailable"; + public static final String ACT_UPKEEP_TRIGGERED = "hyperfactions_admin.actions.upkeep_triggered"; + public static final String ACT_UPKEEP_FAILED = "hyperfactions_admin.actions.upkeep_failed"; + // Disband confirm + public static final String DISBAND_FACTION_GONE = "hyperfactions_admin.disband.faction_gone"; + public static final String DISBAND_SUCCESS = "hyperfactions_admin.disband.success"; + public static final String DISBAND_FAILED = "hyperfactions_admin.disband.failed"; + public static final String DISBAND_NO_LEADER = "hyperfactions_admin.disband.no_leader"; + // Unclaim all confirm + public static final String UNCLAIM_REMOVED = "hyperfactions_admin.unclaim.removed"; + public static final String UNCLAIM_NO_CLAIMS = "hyperfactions_admin.unclaim.no_claims"; + // Factions list + public static final String FAC_HOME_NOT_SET = "hyperfactions_admin.factions.home_not_set"; + public static final String FAC_TELEPORTED = "hyperfactions_admin.factions.teleported"; + public static final String FAC_NO_HOME = "hyperfactions_admin.factions.no_home"; + public static final String FAC_WORLD_NOT_FOUND = "hyperfactions_admin.factions.world_not_found"; + // Faction info + public static final String INFO_FACTION_GONE = "hyperfactions_admin.info.faction_gone"; + // Faction members + public static final String MEM_SORT_ROLE = "hyperfactions_admin.members.sort_role"; + public static final String MEM_SORT_ONLINE = "hyperfactions_admin.members.sort_online"; + public static final String MEM_SORT_NAME = "hyperfactions_admin.members.sort_name"; + public static final String MEM_SORT_POWER = "hyperfactions_admin.members.sort_power"; + public static final String MEM_PROMOTED = "hyperfactions_admin.members.promoted"; + public static final String MEM_DEMOTED = "hyperfactions_admin.members.demoted"; + public static final String MEM_KICKED = "hyperfactions_admin.members.kicked"; + // Faction relations + public static final String REL_ALLIES_HEADER = "hyperfactions_admin.relations.allies_header"; + public static final String REL_ENEMIES_HEADER = "hyperfactions_admin.relations.enemies_header"; + public static final String REL_NO_ALLIES = "hyperfactions_admin.relations.no_allies"; + public static final String REL_NO_ENEMIES = "hyperfactions_admin.relations.no_enemies"; + public static final String REL_NEUTRAL_COUNT = "hyperfactions_admin.relations.neutral_count"; + public static final String REL_SINCE_TODAY = "hyperfactions_admin.relations.since_today"; + public static final String REL_SINCE_ONE_DAY = "hyperfactions_admin.relations.since_one_day"; + public static final String REL_SINCE_DAYS = "hyperfactions_admin.relations.since_days"; + public static final String REL_SET_ALLY = "hyperfactions_admin.relations.set_ally"; + public static final String REL_SET_ENEMY = "hyperfactions_admin.relations.set_enemy"; + public static final String REL_SET_NEUTRAL = "hyperfactions_admin.relations.set_neutral"; + // Faction settings + public static final String SET_LOCKED = "hyperfactions_admin.settings.locked"; + public static final String SET_PERM_TOGGLED = "hyperfactions_admin.settings.perm_toggled"; + public static final String SET_COLOR_CHANGED = "hyperfactions_admin.settings.color_changed"; + public static final String SET_RECRUITMENT_SET = "hyperfactions_admin.settings.recruitment_set"; + public static final String SET_NO_HOME = "hyperfactions_admin.settings.no_home"; + public static final String SET_HOME_CLEARED = "hyperfactions_admin.settings.home_cleared"; + // Sort dropdown labels (shared) + public static final String SORT_POWER = "hyperfactions_admin.sort.power"; + public static final String SORT_NAME = "hyperfactions_admin.sort.name"; + public static final String SORT_MEMBERS = "hyperfactions_admin.sort.members"; + public static final String SORT_BALANCE = "hyperfactions_admin.sort.balance"; + // Players + public static final String PLR_SORT_LAST_ONLINE = "hyperfactions_admin.players.sort_last_online"; + public static final String PLR_SORT_FACTION = "hyperfactions_admin.players.sort_faction"; + public static final String PLR_SORT_ONLINE = "hyperfactions_admin.players.sort_online"; + public static final String PLR_NOT_ONLINE = "hyperfactions_admin.players.not_online"; + public static final String PLR_WORLD_NOT_FOUND = "hyperfactions_admin.players.world_not_found"; + public static final String PLR_TELEPORTED = "hyperfactions_admin.players.teleported"; + // Player info + public static final String PLR_DISBAND_FACTION = "hyperfactions_admin.playerinfo.disband_faction"; + public static final String PLR_KICK_LEADER = "hyperfactions_admin.playerinfo.kick_leader"; + public static final String PLR_ENTER_VALID_NUMBER = "hyperfactions_admin.playerinfo.enter_valid_number"; + public static final String PLR_ENTER_VALID_POSITIVE = "hyperfactions_admin.playerinfo.enter_valid_positive"; + public static final String PLR_FACTION_GONE = "hyperfactions_admin.playerinfo.faction_gone"; + public static final String PLR_KD_RESET = "hyperfactions_admin.playerinfo.kd_reset"; + public static final String PLR_KICKED_SUCCESS = "hyperfactions_admin.playerinfo.kicked_success"; + public static final String PLR_KICKED_LEADER = "hyperfactions_admin.playerinfo.kicked_leader"; + public static final String PLR_DISBANDED_KICK = "hyperfactions_admin.playerinfo.disbanded_kick"; + public static final String ECON_NOT_ENABLED = "hyperfactions_admin.gui.econ_not_enabled"; + public static final String GUI_INFO_MORE = "hyperfactions_admin.gui.info_more"; + public static final String LOG_TIME_1H = "hyperfactions_admin.gui.log_time_1h"; + public static final String LOG_TIME_24H = "hyperfactions_admin.gui.log_time_24h"; + public static final String LOG_TIME_7D = "hyperfactions_admin.gui.log_time_7d"; + public static final String LOG_TIME_ALL = "hyperfactions_admin.gui.log_time_all"; + public static final String SHAPE_CIRCULAR = "hyperfactions_admin.gui.shape_circular"; + public static final String SHAPE_SQUARE = "hyperfactions_admin.gui.shape_square"; + // Economy + public static final String ECON_NO_DATA = "hyperfactions_admin.economy.no_data"; + public static final String ECON_AMOUNT_ZERO = "hyperfactions_admin.economy.amount_zero"; + public static final String ECON_ENTER_AMOUNT = "hyperfactions_admin.economy.enter_amount"; + public static final String ECON_INVALID_NUMBER = "hyperfactions_admin.economy.invalid_number"; + public static final String ECON_ERROR = "hyperfactions_admin.economy.error"; + public static final String ECON_BALANCE_NEGATIVE = "hyperfactions_admin.economy.balance_negative"; + public static final String ECON_FAILED = "hyperfactions_admin.economy.failed"; + public static final String ECON_BULK_COMPLETE = "hyperfactions_admin.economy.bulk_complete"; + public static final String ECON_BULK_FAILURES = "hyperfactions_admin.economy.bulk_failures"; + // Zones + public static final String ZONE_NOT_FOUND = "hyperfactions_admin.zones.not_found"; + public static final String ZONE_INVALID_ID = "hyperfactions_admin.zones.invalid_id"; + public static final String ZONE_DELETED = "hyperfactions_admin.zones.deleted"; + public static final String ZONE_DELETE_FAILED = "hyperfactions_admin.zones.delete_failed"; + public static final String ZONE_NO_CHUNKS = "hyperfactions_admin.zones.no_chunks"; + public static final String ZONE_CHUNKS_SUFFIX = "hyperfactions_admin.zones.chunks_suffix"; + // Zone create wizard + public static final String WIZ_ENTER_NAME = "hyperfactions_admin.wizard.enter_name"; + public static final String WIZ_NAME_TOO_SHORT = "hyperfactions_admin.wizard.name_too_short"; + public static final String WIZ_NAME_TOO_LONG = "hyperfactions_admin.wizard.name_too_long"; + public static final String WIZ_NAME_TAKEN = "hyperfactions_admin.wizard.name_taken"; + public static final String WIZ_RADIUS_RANGE = "hyperfactions_admin.wizard.radius_range"; + public static final String WIZ_CREATE_FAILED = "hyperfactions_admin.wizard.create_failed"; + public static final String WIZ_CREATED_NOT_FOUND = "hyperfactions_admin.wizard.created_not_found"; + public static final String WIZ_CREATED = "hyperfactions_admin.wizard.created"; + public static final String WIZ_CHUNK_CLAIMED = "hyperfactions_admin.wizard.chunk_claimed"; + public static final String WIZ_CHUNK_FAILED = "hyperfactions_admin.wizard.chunk_failed"; + public static final String WIZ_RADIUS_CLAIMED = "hyperfactions_admin.wizard.radius_claimed"; + public static final String WIZ_RADIUS_NO_CLAIMS = "hyperfactions_admin.wizard.radius_no_claims"; + public static final String WIZ_NO_CLAIMS = "hyperfactions_admin.wizard.no_claims"; + public static final String WIZ_CHUNKS_PREVIEW = "hyperfactions_admin.wizard.chunks_preview"; + // Zone rename + public static final String ZREN_ZONE_GONE = "hyperfactions_admin.zone_rename.zone_gone"; + public static final String ZREN_ENTER_NAME = "hyperfactions_admin.zone_rename.enter_name"; + public static final String ZREN_TOO_SHORT = "hyperfactions_admin.zone_rename.too_short"; + public static final String ZREN_TOO_LONG = "hyperfactions_admin.zone_rename.too_long"; + public static final String ZREN_SAME_NAME = "hyperfactions_admin.zone_rename.same_name"; + public static final String ZREN_RENAMED = "hyperfactions_admin.zone_rename.renamed"; + public static final String ZREN_NAME_TAKEN = "hyperfactions_admin.zone_rename.name_taken"; + public static final String ZREN_INVALID_NAME = "hyperfactions_admin.zone_rename.invalid_name"; + public static final String ZREN_RENAME_FAILED = "hyperfactions_admin.zone_rename.rename_failed"; + // Zone change type + public static final String ZTYPE_ZONE_GONE = "hyperfactions_admin.zone_type.zone_gone"; + public static final String ZTYPE_CHANGED = "hyperfactions_admin.zone_type.changed"; + public static final String ZTYPE_FAILED = "hyperfactions_admin.zone_type.failed"; + public static final String ZTYPE_FLAGS_RESET = "hyperfactions_admin.zone_type.flags_reset"; + public static final String ZTYPE_FLAGS_KEPT = "hyperfactions_admin.zone_type.flags_kept"; + // Zone integration flags + public static final String ZINT_ZONE_NOT_FOUND = "hyperfactions_admin.zone_int.zone_not_found"; + public static final String ZINT_NO_PLUGIN = "hyperfactions_admin.zone_int.no_plugin"; + public static final String ZINT_DEFAULT = "hyperfactions_admin.zone_int.default"; + public static final String ZINT_CUSTOM = "hyperfactions_admin.zone_int.custom"; + + // Integration flags UI labels + public static final String GUI_ZINT_CAT_GRAVESTONES = "hyperfactions_admin.gui.zint_cat_gravestones"; + public static final String GUI_ZINT_GRAVESTONES_DESC = "hyperfactions_admin.gui.zint_gravestones_desc"; + public static final String GUI_ZINT_CAT_WORLD_MAP = "hyperfactions_admin.gui.zint_cat_world_map"; + public static final String GUI_ZINT_WORLD_MAP_DESC = "hyperfactions_admin.gui.zint_world_map_desc"; + public static final String GUI_ZINT_VISIBILITY_LABEL = "hyperfactions_admin.gui.zint_visibility_label"; + public static final String GUI_ZINT_CAT_ESSENTIALS = "hyperfactions_admin.gui.zint_cat_essentials"; + public static final String GUI_ZINT_RESET_DEFAULTS = "hyperfactions_admin.gui.zint_reset_defaults"; + public static final String GUI_ZINT_BACK_TO_FLAGS = "hyperfactions_admin.gui.zint_back_to_flags"; + public static final String GUI_ZINT_MAP_VIS_FACTION = "hyperfactions_admin.gui.zint_map_vis_faction"; + public static final String GUI_ZINT_MAP_VIS_ALLY = "hyperfactions_admin.gui.zint_map_vis_ally"; + public static final String GUI_ZINT_MAP_VIS_ALL = "hyperfactions_admin.gui.zint_map_vis_all"; + + // Activity log + public static final String LOG_ALL_TYPES = "hyperfactions_admin.log.all_types"; + public static final String LOG_NO_LOGS = "hyperfactions_admin.log.no_logs"; + // Version page + public static final String VER_ACTIVE = "hyperfactions_admin.version.active"; + public static final String VER_NOT_FOUND = "hyperfactions_admin.version.not_found"; + public static final String VER_NOT_DETECTED = "hyperfactions_admin.version.not_detected"; + public static final String VER_NOT_INSTALLED = "hyperfactions_admin.version.not_installed"; + public static final String VER_ACTIVE_VERSION = "hyperfactions_admin.version.active_version"; + public static final String VER_ACTIVE_COMPATIBLE = "hyperfactions_admin.version.active_compatible"; + public static final String VER_ACTIVE_CLAIMS_ONLY = "hyperfactions_admin.version.active_claims_only"; + public static final String VER_INSTALLED_NO_PERM = "hyperfactions_admin.version.installed_no_perm"; + public static final String VER_ACTIVE_PROVIDER = "hyperfactions_admin.version.active_provider"; + // Admin main page + public static final String MAIN_RELOAD_HINT = "hyperfactions_admin.main.reload_hint"; + public static final String MAIN_UNCLAIM_HINT = "hyperfactions_admin.main.unclaim_hint"; + + // Zone flags/settings (shared) + public static final String ZFLAGS_INVALID_FLAG = "hyperfactions_admin.zflags.invalid_flag"; + public static final String ZFLAGS_ZONE_NOT_FOUND = "hyperfactions_admin.zflags.zone_not_found"; + public static final String ZFLAGS_CONFLICT = "hyperfactions_admin.zflags.conflict"; + public static final String ZFLAGS_MIXIN = "hyperfactions_admin.zflags.mixin"; + public static final String ZFLAGS_RESET_INT = "hyperfactions_admin.zflags.reset_int"; + public static final String ZFLAGS_RESET_ALL = "hyperfactions_admin.zflags.reset_all"; + public static final String ZFLAGS_RESET_FAILED = "hyperfactions_admin.zflags.reset_failed"; + public static final String ZFLAGS_BACK_TO_SETTINGS = "hyperfactions_admin.zflags.back_to_settings"; + + // Zone settings UI labels + public static final String GUI_ZSET_CAT_COMBAT = "hyperfactions_admin.gui.zset_cat_combat"; + public static final String GUI_ZSET_CAT_DAMAGE = "hyperfactions_admin.gui.zset_cat_damage"; + public static final String GUI_ZSET_CAT_DEATH = "hyperfactions_admin.gui.zset_cat_death"; + public static final String GUI_ZSET_CAT_BUILDING = "hyperfactions_admin.gui.zset_cat_building"; + public static final String GUI_ZSET_CAT_INTERACTION = "hyperfactions_admin.gui.zset_cat_interaction"; + public static final String GUI_ZSET_CAT_TRANSPORT = "hyperfactions_admin.gui.zset_cat_transport"; + public static final String GUI_ZSET_CAT_ITEMS = "hyperfactions_admin.gui.zset_cat_items"; + public static final String GUI_ZSET_CAT_SPAWNING = "hyperfactions_admin.gui.zset_cat_spawning"; + public static final String GUI_ZSET_CAT_MOB_CLEAR = "hyperfactions_admin.gui.zset_cat_mob_clear"; + public static final String GUI_ZSET_CHILDREN_HINT = "hyperfactions_admin.gui.zset_children_hint"; + public static final String GUI_ZSET_RESET_DEFAULTS = "hyperfactions_admin.gui.zset_reset_defaults"; + public static final String GUI_ZSET_INTEGRATION_FLAGS = "hyperfactions_admin.gui.zset_integration_flags"; + public static final String GUI_ZSET_BACK_TO_ZONES = "hyperfactions_admin.gui.zset_back_to_zones"; + public static final String GUI_ZSET_CHUNKS = "hyperfactions_admin.gui.zset_chunks"; + + // Zone properties + public static final String ZPROP_CURRENT_CUSTOM = "hyperfactions_admin.zprop.current_custom"; + public static final String ZPROP_CURRENT_DEFAULT = "hyperfactions_admin.zprop.current_default"; + public static final String ZPROP_PVP_DISABLED = "hyperfactions_admin.zprop.pvp_disabled"; + public static final String ZPROP_PVP_ENABLED = "hyperfactions_admin.zprop.pvp_enabled"; + public static final String ZPROP_NAME_EMPTY = "hyperfactions_admin.zprop.name_empty"; + public static final String ZPROP_RENAMED = "hyperfactions_admin.zprop.renamed"; + public static final String ZPROP_NAME_TAKEN = "hyperfactions_admin.zprop.name_taken"; + public static final String ZPROP_NAME_INVALID = "hyperfactions_admin.zprop.name_invalid"; + public static final String ZPROP_RENAME_FAILED = "hyperfactions_admin.zprop.rename_failed"; + public static final String ZPROP_UPPER_EMPTY = "hyperfactions_admin.zprop.upper_empty"; + public static final String ZPROP_UPPER_SET = "hyperfactions_admin.zprop.upper_set"; + public static final String ZPROP_UPPER_RESET = "hyperfactions_admin.zprop.upper_reset"; + public static final String ZPROP_LOWER_EMPTY = "hyperfactions_admin.zprop.lower_empty"; + public static final String ZPROP_LOWER_SET = "hyperfactions_admin.zprop.lower_set"; + public static final String ZPROP_LOWER_RESET = "hyperfactions_admin.zprop.lower_reset"; + // Relations additional + public static final String REL_FAILED = "hyperfactions_admin.relations.failed"; + // Members additional + public static final String MEM_NEVER = "hyperfactions_admin.members.never"; + public static final String MEM_TELEPORTED = "hyperfactions_admin.members.teleported"; + // Member entry labels + public static final String GUI_MEM_LABEL_POWER = "hyperfactions_admin.gui.mem_label_power"; + public static final String GUI_MEM_LABEL_JOINED = "hyperfactions_admin.gui.mem_label_joined"; + public static final String GUI_MEM_LABEL_LAST_DEATH = "hyperfactions_admin.gui.mem_label_last_death"; + public static final String GUI_MEM_LABEL_UUID = "hyperfactions_admin.gui.mem_label_uuid"; + public static final String GUI_MEM_BTN_INFO = "hyperfactions_admin.gui.mem_btn_info"; + public static final String GUI_MEM_BTN_TELEPORT = "hyperfactions_admin.gui.mem_btn_teleport"; + public static final String GUI_MEM_BTN_PROMOTE = "hyperfactions_admin.gui.mem_btn_promote"; + public static final String GUI_MEM_BTN_DEMOTE = "hyperfactions_admin.gui.mem_btn_demote"; + public static final String GUI_MEM_BTN_KICK = "hyperfactions_admin.gui.mem_btn_kick"; + // Player info additional + public static final String PLR_RECORDS = "hyperfactions_admin.playerinfo.records"; + public static final String PLR_JOINED_DATE = "hyperfactions_admin.playerinfo.joined_date"; + public static final String PLR_CURRENT = "hyperfactions_admin.playerinfo.current"; + public static final String PLR_LEFT_DATE = "hyperfactions_admin.playerinfo.left_date"; + // Zone map + public static final String MAP_WORLD_WARNING = "hyperfactions_admin.map.world_warning"; + public static final String MAP_POSITION = "hyperfactions_admin.map.position"; + public static final String MAP_ZONE_GONE = "hyperfactions_admin.map.zone_gone"; + public static final String MAP_CLAIMED = "hyperfactions_admin.map.claimed"; + public static final String MAP_CLAIM_FAILED = "hyperfactions_admin.map.claim_failed"; + public static final String MAP_UNCLAIMED = "hyperfactions_admin.map.unclaimed"; + public static final String MAP_UNCLAIM_FAILED = "hyperfactions_admin.map.unclaim_failed"; + public static final String MAP_CHUNK_BELONGS = "hyperfactions_admin.map.chunk_belongs"; + public static final String MAP_CHUNK_FACTION = "hyperfactions_admin.map.chunk_faction"; + public static final String MAP_CHUNK_PROTECTED = "hyperfactions_admin.map.chunk_protected"; + public static final String MAP_ANOTHER_ZONE = "hyperfactions_admin.map.another_zone"; + + // ========== GUI Label Keys (for .ui hardcoded text localization) ========== + + // Page Titles + public static final String GUI_TITLE_DASHBOARD = "hyperfactions_admin.gui.title_dashboard"; + public static final String GUI_TITLE_MAIN = "hyperfactions_admin.gui.title_main"; + public static final String GUI_TITLE_ACTIONS = "hyperfactions_admin.gui.title_actions"; + public static final String GUI_TITLE_FACTIONS = "hyperfactions_admin.gui.title_factions"; + public static final String GUI_TITLE_PLAYERS = "hyperfactions_admin.gui.title_players"; + public static final String GUI_TITLE_ECONOMY = "hyperfactions_admin.gui.title_economy"; + public static final String GUI_TITLE_ZONES = "hyperfactions_admin.gui.title_zones"; + public static final String GUI_TITLE_BACKUPS = "hyperfactions_admin.gui.title_backups"; + public static final String GUI_TITLE_CONFIG = "hyperfactions_admin.gui.title_config"; + public static final String GUI_TITLE_HELP = "hyperfactions_admin.gui.title_help"; + public static final String GUI_TITLE_UPDATES = "hyperfactions_admin.gui.title_updates"; + public static final String GUI_TITLE_VERSION = "hyperfactions_admin.gui.title_version"; + public static final String GUI_TITLE_ACTIVITY_LOG = "hyperfactions_admin.gui.title_activity_log"; + public static final String GUI_TITLE_PLAYER_INFO = "hyperfactions_admin.gui.title_player_info"; + public static final String GUI_TITLE_FACTION_INFO = "hyperfactions_admin.gui.title_faction_info"; + public static final String GUI_TITLE_FACTION_SETTINGS = "hyperfactions_admin.gui.title_faction_settings"; + public static final String GUI_TITLE_FACTION_MEMBERS = "hyperfactions_admin.gui.title_faction_members"; + public static final String GUI_TITLE_FACTION_RELATIONS = "hyperfactions_admin.gui.title_faction_relations"; + public static final String GUI_TITLE_ZONE_MAP = "hyperfactions_admin.gui.title_zone_map"; + public static final String GUI_TITLE_ZONE_SETTINGS = "hyperfactions_admin.gui.title_zone_settings"; + public static final String GUI_TITLE_ZONE_PROPERTIES = "hyperfactions_admin.gui.title_zone_properties"; + public static final String GUI_TITLE_BULK_ECONOMY = "hyperfactions_admin.gui.title_bulk_economy"; + public static final String GUI_TITLE_ECONOMY_ADJUST = "hyperfactions_admin.gui.title_economy_adjust"; + + // Dashboard labels + public static final String GUI_DASH_SERVER_STATS = "hyperfactions_admin.gui.dash_server_stats"; + public static final String GUI_DASH_FACTIONS = "hyperfactions_admin.gui.dash_factions"; + public static final String GUI_DASH_TOTAL_MEMBERS = "hyperfactions_admin.gui.dash_total_members"; + public static final String GUI_DASH_TOTAL_CLAIMS = "hyperfactions_admin.gui.dash_total_claims"; + public static final String GUI_DASH_ZONES = "hyperfactions_admin.gui.dash_zones"; + public static final String GUI_DASH_SAFE_WAR = "hyperfactions_admin.gui.dash_safe_war"; + public static final String GUI_DASH_TOTAL_POWER = "hyperfactions_admin.gui.dash_total_power"; + public static final String GUI_DASH_AVG_POWER = "hyperfactions_admin.gui.dash_avg_power"; + public static final String GUI_DASH_TOTAL_ECONOMY = "hyperfactions_admin.gui.dash_total_economy"; + public static final String GUI_DASH_WEALTHIEST = "hyperfactions_admin.gui.dash_wealthiest"; + public static final String GUI_DASH_AVG_BALANCE = "hyperfactions_admin.gui.dash_avg_balance"; + public static final String GUI_DASH_PROTECTION_BYPASS = "hyperfactions_admin.gui.dash_protection_bypass"; + + // Common buttons and labels + public static final String GUI_SEARCH = "hyperfactions_admin.gui.search"; + public static final String GUI_SORT = "hyperfactions_admin.gui.sort"; + public static final String GUI_PREV = "hyperfactions_admin.gui.prev"; + public static final String GUI_NEXT = "hyperfactions_admin.gui.next"; + public static final String GUI_BACK = "hyperfactions_admin.gui.back"; + public static final String GUI_DONE = "hyperfactions_admin.gui.done"; + public static final String GUI_CANCEL = "hyperfactions_admin.gui.cancel"; + public static final String GUI_APPLY = "hyperfactions_admin.gui.apply"; + public static final String GUI_SET = "hyperfactions_admin.gui.set"; + public static final String GUI_RESET = "hyperfactions_admin.gui.reset"; + public static final String GUI_COMING_SOON = "hyperfactions_admin.gui.coming_soon"; + public static final String GUI_ZONES_BTN = "hyperfactions_admin.gui.zones_btn"; + public static final String GUI_RELOAD_BTN = "hyperfactions_admin.gui.reload_btn"; + public static final String GUI_ALL = "hyperfactions_admin.gui.all"; + public static final String GUI_SAFE = "hyperfactions_admin.gui.safe"; + public static final String GUI_WAR = "hyperfactions_admin.gui.war"; + public static final String GUI_CREATE_ZONE = "hyperfactions_admin.gui.create_zone"; + + // Actions page labels + public static final String GUI_ACT_COMBAT_STATS = "hyperfactions_admin.gui.act_combat_stats"; + public static final String GUI_ACT_COMBAT_DESC = "hyperfactions_admin.gui.act_combat_desc"; + public static final String GUI_ACT_RESET_KD = "hyperfactions_admin.gui.act_reset_kd"; + public static final String GUI_ACT_ECONOMY = "hyperfactions_admin.gui.act_economy"; + public static final String GUI_ACT_ECONOMY_DESC = "hyperfactions_admin.gui.act_economy_desc"; + public static final String GUI_ACT_BULK_ADJUST = "hyperfactions_admin.gui.act_bulk_adjust"; + public static final String GUI_ACT_UPKEEP_COLLECTION = "hyperfactions_admin.gui.act_upkeep_collection"; + public static final String GUI_ACT_UPKEEP_DESC = "hyperfactions_admin.gui.act_upkeep_desc"; + public static final String GUI_ACT_TRIGGER_UPKEEP = "hyperfactions_admin.gui.act_trigger_upkeep"; + + // Placeholder page labels + public static final String GUI_BACKUP_HEADING = "hyperfactions_admin.gui.backup_heading"; + public static final String GUI_BACKUP_DESC1 = "hyperfactions_admin.gui.backup_desc1"; + public static final String GUI_BACKUP_DESC2 = "hyperfactions_admin.gui.backup_desc2"; + public static final String GUI_CONFIG_HEADING = "hyperfactions_admin.gui.config_heading"; + public static final String GUI_CONFIG_DESC1 = "hyperfactions_admin.gui.config_desc1"; + public static final String GUI_CONFIG_DESC2 = "hyperfactions_admin.gui.config_desc2"; + public static final String GUI_HELP_HEADING = "hyperfactions_admin.gui.help_heading"; + public static final String GUI_HELP_DESC1 = "hyperfactions_admin.gui.help_desc1"; + public static final String GUI_HELP_DESC2 = "hyperfactions_admin.gui.help_desc2"; + public static final String GUI_UPDATES_HEADING = "hyperfactions_admin.gui.updates_heading"; + public static final String GUI_UPDATES_DESC1 = "hyperfactions_admin.gui.updates_desc1"; + public static final String GUI_UPDATES_DESC2 = "hyperfactions_admin.gui.updates_desc2"; + + // Version page labels + public static final String GUI_VER_HYPERFACTIONS = "hyperfactions_admin.gui.ver_hyperfactions"; + public static final String GUI_VER_HYTALE_SERVER = "hyperfactions_admin.gui.ver_hytale_server"; + public static final String GUI_VER_JAVA = "hyperfactions_admin.gui.ver_java"; + public static final String GUI_VER_PERMISSIONS = "hyperfactions_admin.gui.ver_permissions"; + public static final String GUI_VER_PLACEHOLDERS = "hyperfactions_admin.gui.ver_placeholders"; + public static final String GUI_VER_ECONOMY_SECTION = "hyperfactions_admin.gui.ver_economy_section"; + public static final String GUI_VER_PROTECTION = "hyperfactions_admin.gui.ver_protection"; + public static final String GUI_VER_DISABLED = "hyperfactions_admin.gui.ver_disabled"; + + // Column headers (shared across pages) + public static final String GUI_COL_FACTION = "hyperfactions_admin.gui.col_faction"; + public static final String GUI_COL_BALANCE = "hyperfactions_admin.gui.col_balance"; + public static final String GUI_COL_MEMBERS = "hyperfactions_admin.gui.col_members"; + public static final String GUI_COL_ACTIONS = "hyperfactions_admin.gui.col_actions"; + public static final String GUI_COL_TIME = "hyperfactions_admin.gui.col_time"; + public static final String GUI_COL_TYPE = "hyperfactions_admin.gui.col_type"; + public static final String GUI_COL_MESSAGE = "hyperfactions_admin.gui.col_message"; + + // Economy page labels + public static final String GUI_ECON_TOTAL_BALANCE = "hyperfactions_admin.gui.econ_total_balance"; + public static final String GUI_ECON_FACTIONS = "hyperfactions_admin.gui.econ_factions"; + public static final String GUI_ECON_AVG_BALANCE = "hyperfactions_admin.gui.econ_avg_balance"; + public static final String GUI_ECON_IN_GRACE = "hyperfactions_admin.gui.econ_in_grace"; + public static final String GUI_ECON_COLLECTED = "hyperfactions_admin.gui.econ_collected"; + public static final String GUI_ECON_NEXT_COLLECTION = "hyperfactions_admin.gui.econ_next_collection"; + public static final String GUI_ECON_NO_DATA = "hyperfactions_admin.gui.econ_no_data"; + + // Activity log labels + public static final String GUI_LOG_TYPE = "hyperfactions_admin.gui.log_type"; + public static final String GUI_LOG_TIME = "hyperfactions_admin.gui.log_time"; + public static final String GUI_LOG_PLAYER = "hyperfactions_admin.gui.log_player"; + public static final String GUI_LOG_NO_LOGS = "hyperfactions_admin.gui.log_no_logs"; + + // Player info labels + public static final String GUI_PLR_FIRST_JOINED = "hyperfactions_admin.gui.plr_first_joined"; + public static final String GUI_PLR_LAST_ONLINE = "hyperfactions_admin.gui.plr_last_online"; + public static final String GUI_PLR_UUID = "hyperfactions_admin.gui.plr_uuid"; + public static final String GUI_PLR_FACTION = "hyperfactions_admin.gui.plr_faction"; + public static final String GUI_PLR_ROLE = "hyperfactions_admin.gui.plr_role"; + public static final String GUI_PLR_VIEW_FACTION = "hyperfactions_admin.gui.plr_view_faction"; + public static final String GUI_PLR_POWER = "hyperfactions_admin.gui.plr_power"; + public static final String GUI_PLR_MAX_POWER = "hyperfactions_admin.gui.plr_max_power"; + public static final String GUI_PLR_SET_POWER = "hyperfactions_admin.gui.plr_set_power"; + public static final String GUI_PLR_RESET_POWER = "hyperfactions_admin.gui.plr_reset_power"; + public static final String GUI_PLR_SET_MAX = "hyperfactions_admin.gui.plr_set_max"; + public static final String GUI_PLR_RESET_MAX = "hyperfactions_admin.gui.plr_reset_max"; + public static final String GUI_PLR_NO_POWER_LOSS = "hyperfactions_admin.gui.plr_no_power_loss"; + public static final String GUI_PLR_NO_CLAIM_DECAY = "hyperfactions_admin.gui.plr_no_claim_decay"; + public static final String GUI_PLR_KILLS = "hyperfactions_admin.gui.plr_kills"; + public static final String GUI_PLR_DEATHS = "hyperfactions_admin.gui.plr_deaths"; + public static final String GUI_PLR_KDR = "hyperfactions_admin.gui.plr_kdr"; + public static final String GUI_PLR_RESET_KD = "hyperfactions_admin.gui.plr_reset_kd"; + public static final String GUI_PLR_KICK = "hyperfactions_admin.gui.plr_kick"; + public static final String GUI_PLR_MEMBERSHIP_HISTORY = "hyperfactions_admin.gui.plr_membership_history"; + public static final String GUI_PLR_NO_FACTION = "hyperfactions_admin.gui.plr_no_faction_label"; + public static final String GUI_PLR_POWER_MANAGEMENT = "hyperfactions_admin.gui.plr_power_management"; + public static final String GUI_PLR_COMBAT_STATS = "hyperfactions_admin.gui.plr_combat_stats"; + public static final String GUI_PLR_BYPASS_FLAGS = "hyperfactions_admin.gui.plr_bypass_flags"; + public static final String GUI_PLR_ADMIN_CONTROLS = "hyperfactions_admin.gui.plr_admin_controls"; + public static final String GUI_PLR_KD_SUBTITLE = "hyperfactions_admin.gui.plr_kd_subtitle"; + public static final String GUI_PLR_MAX_PREFIX = "hyperfactions_admin.gui.plr_max_prefix"; + public static final String GUI_PLR_VIEW = "hyperfactions_admin.gui.plr_view"; + public static final String GUI_PLR_KICK_FROM_FACTION = "hyperfactions_admin.gui.plr_kick_from_faction"; + public static final String GUI_PLR_SET_MAX_BTN = "hyperfactions_admin.gui.plr_set_max_btn"; + public static final String GUI_PLR_COMBAT = "hyperfactions_admin.gui.plr_combat"; + // Player info history reason labels + public static final String GUI_PLR_REASON_ACTIVE = "hyperfactions_admin.gui.plr_reason_active"; + public static final String GUI_PLR_REASON_LEFT = "hyperfactions_admin.gui.plr_reason_left"; + public static final String GUI_PLR_REASON_KICKED = "hyperfactions_admin.gui.plr_reason_kicked"; + public static final String GUI_PLR_REASON_DISBANDED = "hyperfactions_admin.gui.plr_reason_disbanded"; + + // Faction info labels + public static final String GUI_FAC_DESCRIPTION = "hyperfactions_admin.gui.fac_description"; + public static final String GUI_FAC_POWER = "hyperfactions_admin.gui.fac_power"; + public static final String GUI_FAC_CLAIMS = "hyperfactions_admin.gui.fac_claims"; + public static final String GUI_FAC_MEMBERS = "hyperfactions_admin.gui.fac_members"; + public static final String GUI_FAC_RECRUITMENT = "hyperfactions_admin.gui.fac_recruitment"; + public static final String GUI_FAC_FOUNDED = "hyperfactions_admin.gui.fac_founded"; + public static final String GUI_FAC_ALLIES = "hyperfactions_admin.gui.fac_allies"; + public static final String GUI_FAC_ENEMIES = "hyperfactions_admin.gui.fac_enemies"; + public static final String GUI_FAC_RAIDABLE = "hyperfactions_admin.gui.fac_raidable"; + public static final String GUI_FAC_TREASURY = "hyperfactions_admin.gui.fac_treasury"; + public static final String GUI_FAC_LEADER = "hyperfactions_admin.gui.fac_leader"; + public static final String GUI_FAC_OFFICERS = "hyperfactions_admin.gui.fac_officers"; + public static final String GUI_FAC_VIEW_MEMBERS = "hyperfactions_admin.gui.fac_view_members"; + public static final String GUI_FAC_VIEW_RELATIONS = "hyperfactions_admin.gui.fac_view_relations"; + public static final String GUI_FAC_VIEW_SETTINGS = "hyperfactions_admin.gui.fac_view_settings"; + public static final String GUI_FAC_DISBAND = "hyperfactions_admin.gui.fac_disband"; + public static final String GUI_FAC_POWER_MANAGEMENT = "hyperfactions_admin.gui.fac_power_management"; + public static final String GUI_FAC_RESET_ALL_POWER = "hyperfactions_admin.gui.fac_reset_all_power"; + public static final String GUI_FAC_ECON_ADJUST = "hyperfactions_admin.gui.fac_econ_adjust"; + public static final String GUI_FAC_ECON_VIEW_LOG = "hyperfactions_admin.gui.fac_econ_view_log"; + public static final String GUI_FAC_CURRENT_MAX = "hyperfactions_admin.gui.fac_current_max"; + public static final String GUI_FAC_CLAIMED_MAX = "hyperfactions_admin.gui.fac_claimed_max"; + public static final String GUI_FAC_RELATIONS = "hyperfactions_admin.gui.fac_relations"; + public static final String GUI_FAC_ALLY_ENEMY = "hyperfactions_admin.gui.fac_ally_enemy"; + public static final String GUI_FAC_STATUS = "hyperfactions_admin.gui.fac_status"; + public static final String GUI_FAC_INFO = "hyperfactions_admin.gui.fac_info"; + public static final String GUI_FAC_TREASURY_BALANCE = "hyperfactions_admin.gui.fac_treasury_balance"; + public static final String GUI_FAC_LEADERSHIP = "hyperfactions_admin.gui.fac_leadership"; + public static final String GUI_FAC_LEADER_LABEL = "hyperfactions_admin.gui.fac_leader_label"; + public static final String GUI_FAC_OFFICERS_LABEL = "hyperfactions_admin.gui.fac_officers_label"; + public static final String GUI_FAC_ECON_MGMT = "hyperfactions_admin.gui.fac_econ_mgmt"; + public static final String GUI_FAC_DANGER_ZONE = "hyperfactions_admin.gui.fac_danger_zone"; + public static final String GUI_FAC_VIEW_TREASURY = "hyperfactions_admin.gui.fac_view_treasury"; + + // Faction settings labels + public static final String GUI_SET_EDITING = "hyperfactions_admin.gui.set_editing"; + public static final String GUI_SET_GENERAL = "hyperfactions_admin.gui.set_general"; + public static final String GUI_SET_NAME = "hyperfactions_admin.gui.set_name"; + public static final String GUI_SET_TAG = "hyperfactions_admin.gui.set_tag"; + public static final String GUI_SET_DESCRIPTION = "hyperfactions_admin.gui.set_description"; + public static final String GUI_SET_RECRUITMENT = "hyperfactions_admin.gui.set_recruitment"; + public static final String GUI_SET_HOME = "hyperfactions_admin.gui.set_home"; + public static final String GUI_SET_CLEAR_HOME = "hyperfactions_admin.gui.set_clear_home"; + public static final String GUI_SET_DISBAND_FACTION = "hyperfactions_admin.gui.set_disband_faction"; + public static final String GUI_SET_FACTION_COLOR = "hyperfactions_admin.gui.set_faction_color"; + public static final String GUI_SET_ADMIN_OVERRIDE = "hyperfactions_admin.gui.set_admin_override"; + public static final String GUI_SET_TERRITORY_PERMS = "hyperfactions_admin.gui.set_territory_perms"; + public static final String GUI_SET_MOB_SPAWNING = "hyperfactions_admin.gui.set_mob_spawning"; + public static final String GUI_SET_FACTION_SETTINGS = "hyperfactions_admin.gui.set_faction_settings"; + public static final String GUI_SET_NAME_LABEL = "hyperfactions_admin.gui.set_name_label"; + public static final String GUI_SET_TAG_LABEL = "hyperfactions_admin.gui.set_tag_label"; + public static final String GUI_SET_DESC_LABEL = "hyperfactions_admin.gui.set_desc_label"; + public static final String GUI_SET_EDIT = "hyperfactions_admin.gui.set_edit"; + public static final String GUI_SET_STATUS_LABEL = "hyperfactions_admin.gui.set_status_label"; + public static final String GUI_SET_LOCATION_LABEL = "hyperfactions_admin.gui.set_location_label"; + public static final String GUI_SET_DANGER_ZONE = "hyperfactions_admin.gui.set_danger_zone"; + public static final String GUI_SET_IRREVERSIBLE = "hyperfactions_admin.gui.set_irreversible"; + public static final String GUI_SET_LOCK_HINT = "hyperfactions_admin.gui.set_lock_hint"; + public static final String GUI_SET_APPEARANCE = "hyperfactions_admin.gui.set_appearance"; + public static final String GUI_SET_COLOR_LABEL = "hyperfactions_admin.gui.set_color_label"; + public static final String GUI_SET_MOB_SUB = "hyperfactions_admin.gui.set_mob_sub"; + public static final String GUI_SET_BACK_TO_INFO = "hyperfactions_admin.gui.set_back_to_info"; + public static final String GUI_SET_COL_OUT = "hyperfactions_admin.gui.set_col_out"; + public static final String GUI_SET_COL_ALLY = "hyperfactions_admin.gui.set_col_ally"; + public static final String GUI_SET_COL_MEM = "hyperfactions_admin.gui.set_col_mem"; + public static final String GUI_SET_COL_OFF = "hyperfactions_admin.gui.set_col_off"; + public static final String GUI_SET_CAT_BUILDING = "hyperfactions_admin.gui.set_cat_building"; + public static final String GUI_SET_CAT_INTERACTION = "hyperfactions_admin.gui.set_cat_interaction"; + public static final String GUI_SET_CAT_INTERACT_SUB = "hyperfactions_admin.gui.set_cat_interact_sub"; + public static final String GUI_SET_CAT_OTHER = "hyperfactions_admin.gui.set_cat_other"; + public static final String GUI_SET_PERM_BREAK = "hyperfactions_admin.gui.set_perm_break"; + public static final String GUI_SET_PERM_PLACE = "hyperfactions_admin.gui.set_perm_place"; + public static final String GUI_SET_PERM_ALL = "hyperfactions_admin.gui.set_perm_all"; + public static final String GUI_SET_PERM_DOOR = "hyperfactions_admin.gui.set_perm_door"; + public static final String GUI_SET_PERM_CHEST = "hyperfactions_admin.gui.set_perm_chest"; + public static final String GUI_SET_PERM_BENCH = "hyperfactions_admin.gui.set_perm_bench"; + public static final String GUI_SET_PERM_PROCESSING = "hyperfactions_admin.gui.set_perm_processing"; + public static final String GUI_SET_PERM_SEAT = "hyperfactions_admin.gui.set_perm_seat"; + public static final String GUI_SET_PERM_TRANSPORT = "hyperfactions_admin.gui.set_perm_transport"; + public static final String GUI_SET_PERM_CRATE_USE = "hyperfactions_admin.gui.set_perm_crate_use"; + public static final String GUI_SET_PERM_NPC_TAME = "hyperfactions_admin.gui.set_perm_npc_tame"; + public static final String GUI_SET_PERM_PVE_DAMAGE = "hyperfactions_admin.gui.set_perm_pve_damage"; + public static final String GUI_SET_PERM_MOB_SPAWNING = "hyperfactions_admin.gui.set_perm_mob_spawning"; + public static final String GUI_SET_PERM_HOSTILE = "hyperfactions_admin.gui.set_perm_hostile"; + public static final String GUI_SET_PERM_PASSIVE = "hyperfactions_admin.gui.set_perm_passive"; + public static final String GUI_SET_PERM_NEUTRAL = "hyperfactions_admin.gui.set_perm_neutral"; + public static final String GUI_SET_PERM_PVP = "hyperfactions_admin.gui.set_perm_pvp"; + public static final String GUI_SET_PERM_OFFICERS_EDIT = "hyperfactions_admin.gui.set_perm_officers_edit"; + + // Faction relations labels + public static final String GUI_REL_SUBTITLE = "hyperfactions_admin.gui.rel_subtitle"; + public static final String GUI_REL_SET_NEW = "hyperfactions_admin.gui.rel_set_new"; + public static final String GUI_REL_BTN_ALLY = "hyperfactions_admin.gui.rel_btn_ally"; + public static final String GUI_REL_BTN_NEUTRAL = "hyperfactions_admin.gui.rel_btn_neutral"; + public static final String GUI_REL_BTN_ENEMY = "hyperfactions_admin.gui.rel_btn_enemy"; + + // Zone page labels + public static final String GUI_ZONE_SORT_NAME = "hyperfactions_admin.gui.zone_sort_name"; + public static final String GUI_ZONE_SORT_TYPE = "hyperfactions_admin.gui.zone_sort_type"; + public static final String GUI_ZONE_SORT_CHUNKS = "hyperfactions_admin.gui.zone_sort_chunks"; + public static final String GUI_ZONE_SORT_WORLD = "hyperfactions_admin.gui.zone_sort_world"; + public static final String GUI_ZONE_COUNT_FORMAT = "hyperfactions_admin.gui.zone_count_format"; + + // Zone map labels + public static final String GUI_MAP_ZONE_CHUNK = "hyperfactions_admin.gui.map_zone_chunk"; + public static final String GUI_MAP_EMPTY = "hyperfactions_admin.gui.map_empty"; + public static final String GUI_MAP_OTHER_ZONE = "hyperfactions_admin.gui.map_other_zone"; + public static final String GUI_MAP_FACTION_CLAIM = "hyperfactions_admin.gui.map_faction_claim"; + public static final String GUI_MAP_PROTECTED = "hyperfactions_admin.gui.map_protected"; + public static final String GUI_MAP_YOUR_POS = "hyperfactions_admin.gui.map_your_pos"; + public static final String GUI_MAP_CLICK_HINT = "hyperfactions_admin.gui.map_click_hint"; + public static final String GUI_MAP_LEGEND_ZONE_SAFE = "hyperfactions_admin.gui.map_legend_zone_safe"; + public static final String GUI_MAP_LEGEND_ZONE_WAR = "hyperfactions_admin.gui.map_legend_zone_war"; + public static final String GUI_MAP_LEGEND_OTHER_SAFE = "hyperfactions_admin.gui.map_legend_other_safe"; + public static final String GUI_MAP_LEGEND_OTHER_WAR = "hyperfactions_admin.gui.map_legend_other_war"; + public static final String GUI_MAP_LEGEND_FACTION = "hyperfactions_admin.gui.map_legend_faction"; + public static final String GUI_MAP_LEGEND_UNCLAIMED = "hyperfactions_admin.gui.map_legend_unclaimed"; + public static final String GUI_MAP_LEGEND_YOU_HERE = "hyperfactions_admin.gui.map_legend_you_here"; + public static final String GUI_MAP_ACTION_HINT = "hyperfactions_admin.gui.map_action_hint"; + public static final String GUI_MAP_DONE = "hyperfactions_admin.gui.map_done"; + + // Zone properties labels + public static final String GUI_ZPROP_GENERAL = "hyperfactions_admin.gui.zprop_general"; + public static final String GUI_ZPROP_ZONE_NAME = "hyperfactions_admin.gui.zprop_zone_name"; + public static final String GUI_ZPROP_ZONE_TYPE = "hyperfactions_admin.gui.zprop_zone_type"; + public static final String GUI_ZPROP_CHANGE_TYPE = "hyperfactions_admin.gui.zprop_change_type"; + public static final String GUI_ZPROP_NOTIFICATIONS = "hyperfactions_admin.gui.zprop_notifications"; + public static final String GUI_ZPROP_SHOW_ENTRY = "hyperfactions_admin.gui.zprop_show_entry"; + public static final String GUI_ZPROP_UPPER_TITLE = "hyperfactions_admin.gui.zprop_upper_title"; + public static final String GUI_ZPROP_UPPER_DESC = "hyperfactions_admin.gui.zprop_upper_desc"; + public static final String GUI_ZPROP_LOWER_TITLE = "hyperfactions_admin.gui.zprop_lower_title"; + public static final String GUI_ZPROP_LOWER_DESC = "hyperfactions_admin.gui.zprop_lower_desc"; + public static final String GUI_ZPROP_EDIT_FLAGS = "hyperfactions_admin.gui.zprop_edit_flags"; + public static final String GUI_ZPROP_BACK_TO_ZONES = "hyperfactions_admin.gui.zprop_back_to_zones"; + public static final String GUI_SAVE = "hyperfactions_admin.gui.save"; + public static final String GUI_CLEAR = "hyperfactions_admin.gui.clear"; + + // Bulk economy labels + public static final String GUI_BULK_HEADER = "hyperfactions_admin.gui.bulk_header"; + public static final String GUI_BULK_FACTIONS_LABEL = "hyperfactions_admin.gui.bulk_factions_label"; + public static final String GUI_BULK_TOTAL_LABEL = "hyperfactions_admin.gui.bulk_total_label"; + public static final String GUI_BULK_AMOUNT_HINT = "hyperfactions_admin.gui.bulk_amount_hint"; + public static final String GUI_BULK_HINT = "hyperfactions_admin.gui.bulk_hint"; + public static final String GUI_BULK_WARNING_MSG = "hyperfactions_admin.gui.bulk_warning_msg"; + public static final String GUI_BULK_APPLY_ALL = "hyperfactions_admin.gui.bulk_apply_all"; + public static final String GUI_BULK_OPERATION = "hyperfactions_admin.gui.bulk_operation"; + public static final String GUI_BULK_ADD = "hyperfactions_admin.gui.bulk_add"; + public static final String GUI_BULK_REMOVE = "hyperfactions_admin.gui.bulk_remove"; + public static final String GUI_BULK_AMOUNT = "hyperfactions_admin.gui.bulk_amount"; + public static final String GUI_BULK_WARNING = "hyperfactions_admin.gui.bulk_warning"; + public static final String GUI_BULK_PREVIEW = "hyperfactions_admin.gui.bulk_preview"; + + // Economy adjust labels + public static final String GUI_ECADJ_HEADER = "hyperfactions_admin.gui.ecadj_header"; + public static final String GUI_ECADJ_FACTION_LABEL = "hyperfactions_admin.gui.ecadj_faction_label"; + public static final String GUI_ECADJ_CURRENT_BALANCE = "hyperfactions_admin.gui.ecadj_current_balance"; + public static final String GUI_ECADJ_AMOUNT_HINT = "hyperfactions_admin.gui.ecadj_amount_hint"; + public static final String GUI_ECADJ_PREVIEW_HINT = "hyperfactions_admin.gui.ecadj_preview_hint"; + public static final String GUI_ECADJ_ADJUSTMENT = "hyperfactions_admin.gui.ecadj_adjustment"; + public static final String GUI_ECADJ_SET_BALANCE = "hyperfactions_admin.gui.ecadj_set_balance"; + public static final String GUI_ECADJ_CONFIRM = "hyperfactions_admin.gui.ecadj_confirm"; + public static final String GUI_ECADJ_OPERATION = "hyperfactions_admin.gui.ecadj_operation"; + public static final String GUI_ECADJ_ADD = "hyperfactions_admin.gui.ecadj_add"; + public static final String GUI_ECADJ_REMOVE = "hyperfactions_admin.gui.ecadj_remove"; + public static final String GUI_ECADJ_SET_TO = "hyperfactions_admin.gui.ecadj_set_to"; + public static final String GUI_ECADJ_AMOUNT = "hyperfactions_admin.gui.ecadj_amount"; + public static final String GUI_ECADJ_NEW_BALANCE = "hyperfactions_admin.gui.ecadj_new_balance"; + + // Version page integration labels + public static final String GUI_VER_HYPERPERMS = "hyperfactions_admin.gui.ver_hyperperms"; + public static final String GUI_VER_LUCKPERMS = "hyperfactions_admin.gui.ver_luckperms"; + public static final String GUI_VER_VAULT = "hyperfactions_admin.gui.ver_vault"; + public static final String GUI_VER_NATIVE = "hyperfactions_admin.gui.ver_native"; + public static final String GUI_VER_HYPERPROTECT = "hyperfactions_admin.gui.ver_hyperprotect"; + public static final String GUI_VER_ORBISGUARD_MIXINS = "hyperfactions_admin.gui.ver_orbisguard_mixins"; + public static final String GUI_VER_ORBISGUARD_API = "hyperfactions_admin.gui.ver_orbisguard_api"; + public static final String GUI_VER_MIXIN_HOOKS = "hyperfactions_admin.gui.ver_mixin_hooks"; + public static final String GUI_VER_GRAVESTONES = "hyperfactions_admin.gui.ver_gravestones"; + public static final String GUI_VER_KYUUBISOFT = "hyperfactions_admin.gui.ver_kyuubisoft"; + public static final String GUI_VER_PLACEHOLDER_API = "hyperfactions_admin.gui.ver_placeholder_api"; + public static final String GUI_VER_WIFLOW_PAPI = "hyperfactions_admin.gui.ver_wiflow_papi"; + public static final String GUI_VER_TREASURY = "hyperfactions_admin.gui.ver_treasury"; + + // Unclaim all confirm modal labels + public static final String GUI_UNCLAIM_TITLE = "hyperfactions_admin.gui.unclaim_title"; + public static final String GUI_UNCLAIM_CONFIRM_MSG1 = "hyperfactions_admin.gui.unclaim_confirm_msg1"; + public static final String GUI_UNCLAIM_CONFIRM_MSG2 = "hyperfactions_admin.gui.unclaim_confirm_msg2"; + public static final String GUI_UNCLAIM_WARNING = "hyperfactions_admin.gui.unclaim_warning"; + public static final String GUI_UNCLAIM_ALL = "hyperfactions_admin.gui.unclaim_all"; + + // Zone rename modal labels + public static final String GUI_ZREN_TITLE = "hyperfactions_admin.gui.zren_title"; + public static final String GUI_ZREN_CURRENT = "hyperfactions_admin.gui.zren_current"; + public static final String GUI_ZREN_NEW_NAME = "hyperfactions_admin.gui.zren_new_name"; + + // Zone change type modal labels + public static final String GUI_ZTYPE_TITLE = "hyperfactions_admin.gui.ztype_title"; + public static final String GUI_ZTYPE_ZONE_LABEL = "hyperfactions_admin.gui.ztype_zone_label"; + public static final String GUI_ZTYPE_CURRENT = "hyperfactions_admin.gui.ztype_current"; + public static final String GUI_ZTYPE_WILL_BECOME = "hyperfactions_admin.gui.ztype_will_become"; + public static final String GUI_ZTYPE_NEW = "hyperfactions_admin.gui.ztype_new"; + public static final String GUI_ZTYPE_WARNING1 = "hyperfactions_admin.gui.ztype_warning1"; + public static final String GUI_ZTYPE_WARNING2 = "hyperfactions_admin.gui.ztype_warning2"; + public static final String GUI_ZTYPE_KEEP_DESC = "hyperfactions_admin.gui.ztype_keep_desc"; + public static final String GUI_ZTYPE_KEEP_FLAGS = "hyperfactions_admin.gui.ztype_keep_flags"; + public static final String GUI_ZTYPE_RESET_DESC = "hyperfactions_admin.gui.ztype_reset_desc"; + public static final String GUI_ZTYPE_RESET_FLAGS = "hyperfactions_admin.gui.ztype_reset_flags"; + + // Create zone wizard labels + public static final String GUI_CZW_TITLE = "hyperfactions_admin.gui.czw_title"; + public static final String GUI_CZW_BACK = "hyperfactions_admin.gui.czw_back"; + public static final String GUI_CZW_CREATE = "hyperfactions_admin.gui.czw_create"; + public static final String GUI_CZW_ZONE_TYPE = "hyperfactions_admin.gui.czw_zone_type"; + public static final String GUI_CZW_SAFE_DESC = "hyperfactions_admin.gui.czw_safe_desc"; + public static final String GUI_CZW_WAR_DESC = "hyperfactions_admin.gui.czw_war_desc"; + public static final String GUI_CZW_ZONE_NAME = "hyperfactions_admin.gui.czw_zone_name"; + public static final String GUI_CZW_NAME_DESC = "hyperfactions_admin.gui.czw_name_desc"; + public static final String GUI_CZW_CLAIM_METHOD = "hyperfactions_admin.gui.czw_claim_method"; + public static final String GUI_CZW_METHOD_NONE_DESC = "hyperfactions_admin.gui.czw_method_none_desc"; + public static final String GUI_CZW_METHOD_NONE = "hyperfactions_admin.gui.czw_method_none"; + public static final String GUI_CZW_METHOD_SINGLE_DESC = "hyperfactions_admin.gui.czw_method_single_desc"; + public static final String GUI_CZW_METHOD_SINGLE = "hyperfactions_admin.gui.czw_method_single"; + public static final String GUI_CZW_METHOD_CIRCLE_DESC = "hyperfactions_admin.gui.czw_method_circle_desc"; + public static final String GUI_CZW_METHOD_CIRCLE = "hyperfactions_admin.gui.czw_method_circle"; + public static final String GUI_CZW_METHOD_SQUARE_DESC = "hyperfactions_admin.gui.czw_method_square_desc"; + public static final String GUI_CZW_METHOD_SQUARE = "hyperfactions_admin.gui.czw_method_square"; + public static final String GUI_CZW_METHOD_MAP_DESC = "hyperfactions_admin.gui.czw_method_map_desc"; + public static final String GUI_CZW_METHOD_MAP = "hyperfactions_admin.gui.czw_method_map"; + public static final String GUI_CZW_RADIUS = "hyperfactions_admin.gui.czw_radius"; + public static final String GUI_CZW_CUSTOM_RADIUS = "hyperfactions_admin.gui.czw_custom_radius"; + public static final String GUI_CZW_FLAGS = "hyperfactions_admin.gui.czw_flags"; + public static final String GUI_CZW_FLAGS_DEFAULTS_DESC = "hyperfactions_admin.gui.czw_flags_defaults_desc"; + public static final String GUI_CZW_FLAGS_DEFAULTS = "hyperfactions_admin.gui.czw_flags_defaults"; + public static final String GUI_CZW_FLAGS_CUSTOMIZE_DESC = "hyperfactions_admin.gui.czw_flags_customize_desc"; + public static final String GUI_CZW_FLAGS_CUSTOMIZE = "hyperfactions_admin.gui.czw_flags_customize"; + + // Faction entry labels + public static final String GUI_FAC_ENTRY_POWER = "hyperfactions_admin.gui.fac_entry_power"; + public static final String GUI_FAC_ENTRY_CLAIMS = "hyperfactions_admin.gui.fac_entry_claims"; + public static final String GUI_FAC_ENTRY_MEMBERS = "hyperfactions_admin.gui.fac_entry_members"; + public static final String GUI_FAC_ENTRY_CREATED = "hyperfactions_admin.gui.fac_entry_created"; + public static final String GUI_FAC_ENTRY_HOME = "hyperfactions_admin.gui.fac_entry_home"; + public static final String GUI_FAC_ENTRY_TP_HOME = "hyperfactions_admin.gui.fac_entry_tp_home"; + public static final String GUI_FAC_ENTRY_VIEW_INFO = "hyperfactions_admin.gui.fac_entry_view_info"; + public static final String GUI_FAC_ENTRY_MEMBERS_BTN = "hyperfactions_admin.gui.fac_entry_members_btn"; + public static final String GUI_FAC_ENTRY_SETTINGS = "hyperfactions_admin.gui.fac_entry_settings"; + public static final String GUI_FAC_ENTRY_UNCLAIM_ALL = "hyperfactions_admin.gui.fac_entry_unclaim_all"; + public static final String GUI_FAC_ENTRY_DISBAND = "hyperfactions_admin.gui.fac_entry_disband"; + // Player entry labels + public static final String GUI_PLR_ENTRY_ROLE = "hyperfactions_admin.gui.plr_entry_role"; + public static final String GUI_PLR_ENTRY_JOINED = "hyperfactions_admin.gui.plr_entry_joined"; + public static final String GUI_PLR_ENTRY_LAST_ONLINE = "hyperfactions_admin.gui.plr_entry_last_online"; + public static final String GUI_PLR_ENTRY_KDR = "hyperfactions_admin.gui.plr_entry_kdr"; + public static final String GUI_PLR_ENTRY_POWER = "hyperfactions_admin.gui.plr_entry_power"; + public static final String GUI_PLR_ENTRY_UUID = "hyperfactions_admin.gui.plr_entry_uuid"; + public static final String GUI_PLR_ENTRY_INFO = "hyperfactions_admin.gui.plr_entry_info"; + public static final String GUI_PLR_ENTRY_TELEPORT = "hyperfactions_admin.gui.plr_entry_teleport"; + public static final String GUI_PLR_ENTRY_NA = "hyperfactions_admin.gui.plr_entry_na"; + public static final String GUI_PLR_ENTRY_UNKNOWN = "hyperfactions_admin.gui.plr_entry_unknown"; + public static final String GUI_PLR_ENTRY_AGO = "hyperfactions_admin.gui.plr_entry_ago"; + // Zone entry labels + public static final String GUI_ZONE_ENTRY_WORLD = "hyperfactions_admin.gui.zone_entry_world"; + public static final String GUI_ZONE_ENTRY_CHUNKS = "hyperfactions_admin.gui.zone_entry_chunks"; + public static final String GUI_ZONE_ENTRY_BOUNDS = "hyperfactions_admin.gui.zone_entry_bounds"; + public static final String GUI_ZONE_ENTRY_CREATED = "hyperfactions_admin.gui.zone_entry_created"; + public static final String GUI_ZONE_ENTRY_EDIT_MAP = "hyperfactions_admin.gui.zone_entry_edit_map"; + public static final String GUI_ZONE_ENTRY_FLAGS = "hyperfactions_admin.gui.zone_entry_flags"; + public static final String GUI_ZONE_ENTRY_SETTINGS = "hyperfactions_admin.gui.zone_entry_settings"; + public static final String GUI_ZONE_ENTRY_DELETE = "hyperfactions_admin.gui.zone_entry_delete"; + + private AdminGui() {} + } + + /** Player settings page labels and messages. */ + public static final class PlayerSettings { + public static final String TITLE = "hyperfactions_gui.player_settings.title"; + public static final String LANGUAGE_SECTION = "hyperfactions_gui.player_settings.language_section"; + public static final String AUTO_DETECT = "hyperfactions_gui.player_settings.auto_detect"; + public static final String AUTO_DETECT_DESC = "hyperfactions_gui.player_settings.auto_detect_desc"; + public static final String LANGUAGE_LABEL = "hyperfactions_gui.player_settings.language_label"; + public static final String NOTIFICATIONS_SECTION = "hyperfactions_gui.player_settings.notifications_section"; + public static final String TERRITORY_ALERTS = "hyperfactions_gui.player_settings.territory_alerts"; + public static final String TERRITORY_ALERTS_DESC = "hyperfactions_gui.player_settings.territory_alerts_desc"; + public static final String DEATH_ANNOUNCEMENTS = "hyperfactions_gui.player_settings.death_announcements"; + public static final String DEATH_ANNOUNCEMENTS_DESC = "hyperfactions_gui.player_settings.death_announcements_desc"; + public static final String POWER_NOTIFICATIONS = "hyperfactions_gui.player_settings.power_notifications"; + public static final String POWER_NOTIFICATIONS_DESC = "hyperfactions_gui.player_settings.power_notifications_desc"; + public static final String LANGUAGE_CHANGED = "hyperfactions_gui.player_settings.language_changed"; + public static final String PREF_ENABLED = "hyperfactions_gui.player_settings.pref_enabled"; + public static final String PREF_DISABLED = "hyperfactions_gui.player_settings.pref_disabled"; + + private PlayerSettings() {} + } +} diff --git a/src/main/java/com/hyperfactions/util/MessageUtil.java b/src/main/java/com/hyperfactions/util/MessageUtil.java index 92c5b4f4..0791481a 100644 --- a/src/main/java/com/hyperfactions/util/MessageUtil.java +++ b/src/main/java/com/hyperfactions/util/MessageUtil.java @@ -2,6 +2,7 @@ import com.hyperfactions.config.ConfigManager; import com.hypixel.hytale.server.core.Message; +import com.hypixel.hytale.server.core.universe.PlayerRef; import org.jetbrains.annotations.NotNull; /** @@ -68,6 +69,84 @@ public static Message adminPrefix() { .insert(Message.raw("] ").color(bracketColor)); } + // ==================== i18n-aware (PlayerRef + key) ==================== + + /** + * Creates a prefixed red error message using i18n key resolution. + * + * @param player The player (for language resolution) + * @param key The message key + * @param args Replacement arguments for {0}, {1}, etc. + */ + @NotNull + public static Message error(@NotNull PlayerRef player, @NotNull String key, Object... args) { + return prefix().insert(Message.raw(HFMessages.get(player, key, args)).color(COLOR_RED)); + } + + /** + * Creates a prefixed green success message using i18n key resolution. + */ + @NotNull + public static Message success(@NotNull PlayerRef player, @NotNull String key, Object... args) { + return prefix().insert(Message.raw(HFMessages.get(player, key, args)).color(COLOR_GREEN)); + } + + /** + * Creates a prefixed info message with custom color using i18n key resolution. + */ + @NotNull + public static Message info(@NotNull PlayerRef player, @NotNull String key, @NotNull String color, Object... args) { + return prefix().insert(Message.raw(HFMessages.get(player, key, args)).color(color)); + } + + /** + * Creates a red error message (no prefix) using i18n key resolution. + */ + @NotNull + public static Message errorText(@NotNull PlayerRef player, @NotNull String key, Object... args) { + return Message.raw(HFMessages.get(player, key, args)).color(COLOR_RED); + } + + /** + * Creates a green success message (no prefix) using i18n key resolution. + */ + @NotNull + public static Message successText(@NotNull PlayerRef player, @NotNull String key, Object... args) { + return Message.raw(HFMessages.get(player, key, args)).color(COLOR_GREEN); + } + + /** + * Creates an admin-prefixed red error message using i18n key resolution. + */ + @NotNull + public static Message adminError(@NotNull PlayerRef player, @NotNull String key, Object... args) { + return adminPrefix().insert(Message.raw(HFMessages.get(player, key, args)).color(COLOR_RED)); + } + + /** + * Creates an admin-prefixed green success message using i18n key resolution. + */ + @NotNull + public static Message adminSuccess(@NotNull PlayerRef player, @NotNull String key, Object... args) { + return adminPrefix().insert(Message.raw(HFMessages.get(player, key, args)).color(COLOR_GREEN)); + } + + /** + * Creates an admin-prefixed gray info message using i18n key resolution. + */ + @NotNull + public static Message adminInfo(@NotNull PlayerRef player, @NotNull String key, Object... args) { + return adminPrefix().insert(Message.raw(HFMessages.get(player, key, args)).color(COLOR_GRAY)); + } + + /** + * Creates a colored message with no prefix using i18n key resolution. + */ + @NotNull + public static Message text(@NotNull PlayerRef player, @NotNull String key, @NotNull String color, Object... args) { + return Message.raw(HFMessages.get(player, key, args)).color(color); + } + // ==================== Unprefixed (GUI pages) ==================== /** diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_actions.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_actions.ui index 1bce59eb..4243a6a9 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_actions.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_actions.ui @@ -12,7 +12,7 @@ $C.@PageOverlay { Anchor: (Width: 500, Height: 520); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Server Actions"; } } @@ -28,13 +28,13 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 12); - Label { + Label #CombatStatsLabel { Text: "Combat Statistics"; Style: (FontSize: 14, TextColor: #FFFFFF, RenderBold: true); Anchor: (Height: 22, Bottom: 8); } - Label { + Label #CombatDescLabel { Text: "Reset kills and deaths for ALL players on the server. This action cannot be undone."; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 32, Bottom: 10); @@ -55,13 +55,13 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 12); - Label { + Label #EconomyLabel { Text: "Economy"; Style: (FontSize: 14, TextColor: #FFFFFF, RenderBold: true); Anchor: (Height: 22, Bottom: 8); } - Label { + Label #EconomyDescLabel { Text: "Add or remove money from ALL faction treasuries at once."; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 18, Bottom: 10); @@ -82,13 +82,13 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 12); - Label { + Label #UpkeepLabel { Text: "Upkeep Collection"; Style: (FontSize: 14, TextColor: #FFFFFF, RenderBold: true); Anchor: (Height: 22, Bottom: 8); } - Label { + Label #UpkeepDescLabel { Text: "Manually trigger upkeep collection for all factions right now, regardless of the scheduled timer."; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 32, Bottom: 10); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_activity_log.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_activity_log.ui index 1751cc65..1b65162b 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_activity_log.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_activity_log.ui @@ -12,7 +12,7 @@ $C.@PageOverlay { Anchor: (Width: 750, Height: 560); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Activity Log"; } } @@ -26,7 +26,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #TypeLabel { Text: "Type:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 35); @@ -38,7 +38,7 @@ $C.@PageOverlay { Label { Anchor: (Width: 12); } - Label { + Label #TimeLabel { Text: "Time:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 35); @@ -50,7 +50,7 @@ $C.@PageOverlay { Label { Anchor: (Width: 12); } - Label { + Label #PlayerLabel { Text: "Player:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 45); @@ -79,22 +79,22 @@ $C.@PageOverlay { LayoutMode: Left; Padding: (Left: 12, Right: 12); - Label { + Label #ColTime { Text: "Time"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 80); } - Label { + Label #ColType { Text: "Type"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 65); } - Label { + Label #ColFaction { Text: "Faction"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 120); } - Label { + Label #ColMessage { Text: "Message"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); FlexWeight: 1; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_backups.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_backups.ui index 315b05cd..5c17f6cf 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_backups.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_backups.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 600, Height: 470); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Backups"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_bulk_economy.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_bulk_economy.ui index ca73500d..c77a2f3d 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_bulk_economy.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_bulk_economy.ui @@ -12,7 +12,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Bulk Treasury Adjust"; } } @@ -23,7 +23,7 @@ $C.@PageOverlay { Padding: (Left: 25, Right: 25, Top: 12, Bottom: 12); // Section header - Label { + Label #SectionHeader { Text: "Adjust All Faction Treasuries"; Style: (FontSize: 14, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 28, Bottom: 8); @@ -40,7 +40,7 @@ $C.@PageOverlay { Anchor: (Height: 20); LayoutMode: Left; - Label { + Label #FactionsInfoLabel { Text: "Factions:"; Style: (FontSize: 12, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 120); @@ -55,7 +55,7 @@ $C.@PageOverlay { Anchor: (Height: 20); LayoutMode: Left; - Label { + Label #TotalBalanceInfoLabel { Text: "Total Balance:"; Style: (FontSize: 12, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 120); @@ -70,7 +70,7 @@ $C.@PageOverlay { // Amount input Group { Anchor: (Height: 20, Bottom: 4); - Label { + Label #AmountLabel { Text: "Amount (positive to add, negative to remove):"; Style: (FontSize: 11, TextColor: #AAAAAA); } @@ -82,7 +82,7 @@ $C.@PageOverlay { } // Hint text - Label { + Label #HintLabel { Text: "This will apply to every faction with a treasury"; Style: (FontSize: 10, TextColor: #555555); Anchor: (Height: 16, Bottom: 10); @@ -94,7 +94,7 @@ $C.@PageOverlay { Background: (Color: #3a2a1a); Padding: (Left: 10, Right: 10, Top: 6, Bottom: 6); - Label { + Label #WarningLabel { Text: "Warning: This action affects ALL factions and cannot be undone."; Style: (FontSize: 10, TextColor: #FFAA00); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_config.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_config.ui index bca940cd..0600fc63 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_config.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_config.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 600, Height: 470); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Configuration"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_dashboard.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_dashboard.ui index c46d4f42..3b1a60d1 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_dashboard.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_dashboard.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 520, Height: 480); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin Dashboard"; } } @@ -23,7 +23,7 @@ $C.@PageOverlay { Anchor: (Height: 25, Bottom: 15); LayoutMode: Left; - Label { + Label #ServerStatsLabel { Text: "Server Statistics"; Style: (FontSize: 14, TextColor: #00FFFF, RenderBold: true, VerticalAlignment: Center); } @@ -42,7 +42,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #FactionsLabel { Text: "Factions"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -62,7 +62,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5, Right: 5); - Label { + Label #TotalMembersLabel { Text: "Total Members"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -82,7 +82,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #TotalClaimsLabel { Text: "Total Claims"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -108,7 +108,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #ZonesLabel { Text: "Zones"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -133,7 +133,7 @@ $C.@PageOverlay { FlexWeight: 1; } } - Label { + Label #SafeWarLabel { Text: "safe / war"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -148,7 +148,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5, Right: 5); - Label { + Label #TotalPowerLabel { Text: "Total Power"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -168,7 +168,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #AvgPowerLabel { Text: "Avg Power/Faction"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -195,7 +195,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #TotalEconomyLabel { Text: "Total Economy"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -215,7 +215,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5, Right: 5); - Label { + Label #WealthiestLabel { Text: "Wealthiest"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -235,7 +235,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #AvgBalanceLabel { Text: "Avg Balance"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -255,17 +255,16 @@ $C.@PageOverlay { Padding: (Left: 20, Right: 20, Top: 10, Bottom: 10); LayoutMode: Left; - Label { + Label #BypassLabel { Text: "Protection Bypass:"; Style: (FontSize: 13, TextColor: #AAAAAA, VerticalAlignment: Center); - Anchor: (Width: 130); + FlexWeight: 1; } Label #BypassState { Text: "Off"; Style: (FontSize: 14, TextColor: #FF5555, RenderBold: true, VerticalAlignment: Center); - Anchor: (Width: 50); + Anchor: (Width: 105); } - Label { FlexWeight: 1; } TextButton #ToggleBypassBtn { Text: "Enable"; Anchor: (Height: 30, Width: 100); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy.ui index f84853c4..1f18e5cb 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy.ui @@ -12,7 +12,7 @@ $C.@PageOverlay { Anchor: (Width: 700, Height: 560); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Server Economy"; } } @@ -34,7 +34,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #TotalBalanceLabel { Text: "Total Balance"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -54,7 +54,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #FactionsLabel { Text: "Factions"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -74,7 +74,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4); - Label { + Label #AvgBalanceLabel { Text: "Avg Balance"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -105,7 +105,7 @@ $C.@PageOverlay { Style: (FontSize: 18, TextColor: #55FF55, RenderBold: true); Anchor: (Height: 22); } - Label { + Label #InGraceLabel { Text: "In Grace"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 12); @@ -126,7 +126,7 @@ $C.@PageOverlay { Style: (FontSize: 18, TextColor: #FFD700, RenderBold: true); Anchor: (Height: 22); } - Label { + Label #CollectedLabel { Text: "Collected (24h)"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 12); @@ -147,7 +147,7 @@ $C.@PageOverlay { Style: (FontSize: 18, TextColor: #AAAAAA, RenderBold: true); Anchor: (Height: 22); } - Label { + Label #NextCollectionLabel { Text: "Next Collection"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 12); @@ -160,7 +160,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #SearchLabel { Text: "Search:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -184,10 +184,10 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); - Anchor: (Width: 35); + Anchor: (Width: 65); } DropdownBox #SortDropdown { Style: $C.@DefaultDropdownBoxStyle; @@ -207,23 +207,23 @@ $C.@PageOverlay { LayoutMode: Left; Padding: (Left: 12, Right: 12); - Label { + Label #ColFaction { Text: "Faction"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 160); } - Label { + Label #ColBalance { Text: "Balance"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 120); } - Label { + Label #ColMembers { Text: "Members"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 80); } Label { FlexWeight: 1; } - Label { + Label #ColActions { Text: "Actions"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 135); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy_adjust.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy_adjust.ui index 56ce09c1..1cc47184 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy_adjust.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_economy_adjust.ui @@ -12,7 +12,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Economy"; } } @@ -23,7 +23,7 @@ $C.@PageOverlay { Padding: (Left: 25, Right: 25, Top: 12, Bottom: 12); // Section header - Label { + Label #SectionHeader { Text: "Adjust Treasury Balance"; Style: (FontSize: 14, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 28, Bottom: 8); @@ -40,7 +40,7 @@ $C.@PageOverlay { Anchor: (Height: 20); LayoutMode: Left; - Label { + Label #FactionLabel { Text: "Faction:"; Style: (FontSize: 12, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 100); @@ -55,7 +55,7 @@ $C.@PageOverlay { Anchor: (Height: 20); LayoutMode: Left; - Label { + Label #CurrentBalanceLabel { Text: "Current Balance:"; Style: (FontSize: 12, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 100); @@ -70,7 +70,7 @@ $C.@PageOverlay { // Amount input Group { Anchor: (Height: 20, Bottom: 4); - Label { + Label #AmountLabel { Text: "Amount (positive to add, negative to deduct):"; Style: (FontSize: 11, TextColor: #AAAAAA); } @@ -100,7 +100,7 @@ $C.@PageOverlay { Anchor: (Height: 20); LayoutMode: Left; - Label { + Label #AdjustmentLabel { Text: "Adjustment:"; Style: (FontSize: 12, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 100); @@ -115,7 +115,7 @@ $C.@PageOverlay { Anchor: (Height: 20); LayoutMode: Left; - Label { + Label #NewBalanceLabel { Text: "New Balance:"; Style: (FontSize: 12, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 100); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_entry.ui index 31821709..3b8bd30e 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_entry.ui @@ -44,7 +44,7 @@ Group { Style: (FontSize: 12, TextColor: #44CC44, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #PowerLabel { Text: "power"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -61,7 +61,7 @@ Group { Style: (FontSize: 12, TextColor: #FFAA00, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #ClaimsLabel { Text: "claims"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -78,7 +78,7 @@ Group { Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #MembersLabel { Text: "members"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -119,7 +119,7 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #CreatedLabel { Text: "Created:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 50); @@ -130,7 +130,7 @@ Group { Anchor: (Width: 90); } - Label { + Label #HomeLabel { Text: "Home:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 40); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_info.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_info.ui index 40f7002b..14e01f9d 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_info.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_info.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { Anchor: (Width: 640, Height: 600); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Faction Info"; } } @@ -72,7 +72,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #PowerCardLabel { Text: "Power"; Style: (FontSize: 9, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -82,7 +82,7 @@ $C.@PageOverlay { Style: (FontSize: 18, TextColor: #44CC44, RenderBold: true, HorizontalAlignment: Center, VerticalAlignment: Center); FlexWeight: 1; } - Label { + Label #PowerSubLabel { Text: "current / max"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -97,7 +97,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #ClaimsCardLabel { Text: "Claims"; Style: (FontSize: 9, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -107,7 +107,7 @@ $C.@PageOverlay { Style: (FontSize: 18, TextColor: #FFAA00, RenderBold: true, HorizontalAlignment: Center, VerticalAlignment: Center); FlexWeight: 1; } - Label { + Label #ClaimsSubLabel { Text: "claimed / max"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -122,7 +122,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4); - Label { + Label #MembersCardLabel { Text: "Members"; Style: (FontSize: 9, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -153,7 +153,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #RelationsCardLabel { Text: "Relations"; Style: (FontSize: 9, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -178,7 +178,7 @@ $C.@PageOverlay { FlexWeight: 1; } } - Label { + Label #RelationsSubLabel { Text: "ally / enemy"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -193,7 +193,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #StatusCardLabel { Text: "Status"; Style: (FontSize: 9, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -218,7 +218,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4); - Label { + Label #InfoCardLabel { Text: "Info"; Style: (FontSize: 9, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -235,7 +235,7 @@ $C.@PageOverlay { Style: (FontSize: 18, TextColor: #FFD700, RenderBold: true, HorizontalAlignment: Center, VerticalAlignment: Center); FlexWeight: 1; } - Label { + Label #TreasurySubLabel { Text: "treasury balance"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -268,7 +268,7 @@ $C.@PageOverlay { Padding: (Left: 12, Right: 12, Top: 10, Bottom: 10); LayoutMode: Top; - Label { + Label #LeadershipHeader { Text: "Leadership"; Style: (FontSize: 11, TextColor: #666666, RenderBold: true); Anchor: (Height: 16, Bottom: 6); @@ -278,7 +278,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 22, Bottom: 4); - Label { + Label #LeaderLabel { Text: "Leader:"; Style: (FontSize: 12, TextColor: #FFD700, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 60); @@ -293,7 +293,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 22); - Label { + Label #OfficersLabel { Text: "Officers:"; Style: (FontSize: 12, TextColor: #87CEEB, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 60); @@ -319,7 +319,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 6); - Label { + Label #PowerMgmtHeader { Text: "Power Management"; Style: (FontSize: 11, TextColor: #666666, RenderBold: true); Anchor: (Height: 16, Bottom: 6); @@ -360,7 +360,7 @@ $C.@PageOverlay { TextButton #PowerResetAll { Text: "Reset All Power"; - Anchor: (Height: 26, Width: 130); + Anchor: (Height: 26, Width: 170); Style: $S.@CyanButtonStyle; } } @@ -374,7 +374,7 @@ $C.@PageOverlay { Visible: false; Anchor: (Bottom: 6); - Label { + Label #EconMgmtHeader { Text: "Economy Management"; Style: (FontSize: 11, TextColor: #666666, RenderBold: true); Anchor: (Height: 16, Bottom: 6); @@ -404,7 +404,7 @@ $C.@PageOverlay { Padding: (Left: 12, Right: 12, Top: 10, Bottom: 10); LayoutMode: Top; - Label { + Label #DangerZoneHeader { Text: "Danger Zone"; Style: (FontSize: 11, TextColor: #FF5555, RenderBold: true); Anchor: (Height: 16, Bottom: 6); @@ -426,7 +426,7 @@ $C.@PageOverlay { TextButton #ViewMembersBtn { Text: "Members"; - Anchor: (Height: 30, Width: 85); + Anchor: (Height: 30, Width: 110); Style: $S.@ButtonStyle; } @@ -434,7 +434,7 @@ $C.@PageOverlay { TextButton #ViewRelationsBtn { Text: "Relations"; - Anchor: (Height: 30, Width: 85); + Anchor: (Height: 30, Width: 110); Style: $S.@ButtonStyle; } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members.ui index 91fa550a..76be0d7d 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members.ui @@ -17,7 +17,7 @@ $C.@PageOverlay { LayoutMode: Left; Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Members"; } } @@ -41,7 +41,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #SearchLabel { Text: "Search:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -66,10 +66,10 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); - Anchor: (Width: 35); + Anchor: (Width: 65); } DropdownBox #SortDropdown { Style: $C.@DefaultDropdownBoxStyle; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members_entry.ui index ff83490e..0fb91319 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_members_entry.ui @@ -94,7 +94,7 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #PowerLabel { Text: "Power:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 45); @@ -105,10 +105,10 @@ Group { Anchor: (Width: 60); } - Label { + Label #JoinedLabel { Text: "Joined:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 45); + Anchor: (Width: 50); } Label #JoinedDate { Text: "Unknown"; @@ -116,10 +116,10 @@ Group { Anchor: (Width: 80); } - Label { + Label #LastDeathLabel { Text: "Last Death:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 65); + Anchor: (Width: 75); } Label #LastDeath { Text: "Never"; @@ -133,7 +133,7 @@ Group { LayoutMode: Left; Anchor: (Height: 18, Bottom: 8); - Label { + Label #UuidLabel { Text: "UUID:"; Style: (FontSize: 9, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 40); @@ -157,7 +157,7 @@ Group { } TextButton #TeleportBtn { Text: "Teleport"; - Anchor: (Height: 24, Width: 80, Right: 6); + Anchor: (Height: 24, Width: 95, Right: 6); Style: $S.@ButtonStyle; } TextButton #PromoteBtn { diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_relations.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_relations.ui index daafdab1..070b18f2 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_relations.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_relations.ui @@ -16,7 +16,7 @@ $C.@PageOverlay { LayoutMode: Left; Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Relations"; } } @@ -40,7 +40,7 @@ $C.@PageOverlay { Anchor: (Height: 30, Bottom: 8); LayoutMode: Left; - Label { + Label #SubtitleLabel { Text: "Manage faction relations (bypasses approval)"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); } @@ -107,7 +107,7 @@ $C.@PageOverlay { Anchor: (Height: 22, Bottom: 6); LayoutMode: Left; - Label { + Label #SetNewRelationLabel { Text: "Set New Relation"; Style: (FontSize: 12, TextColor: #888888, RenderBold: true, VerticalAlignment: Center); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_settings.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_settings.ui index fbb0330a..8e9aa31d 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_settings.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_faction_settings.ui @@ -15,7 +15,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Faction Settings"; } } @@ -30,7 +30,7 @@ $C.@PageOverlay { Anchor: (Height: 32, Bottom: 8); LayoutMode: Left; - Label { + Label #EditingLabel { Text: "Editing:"; Style: (FontSize: 13, TextColor: #AAAAAA, VerticalAlignment: Center); } @@ -44,7 +44,7 @@ $C.@PageOverlay { Label { FlexWeight: 1; } - Label { + Label #AdminOverrideLabel { Text: "[Admin Override]"; Style: (FontSize: 10, TextColor: #FFAA00, VerticalAlignment: Center); } @@ -69,7 +69,7 @@ $C.@PageOverlay { Padding: (Left: 0, Right: 8, Top: 0, Bottom: 0); // --- General --- - Label { + Label #SectionGeneral { Text: "General"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -90,7 +90,7 @@ $C.@PageOverlay { Anchor: (Height: 32, Bottom: 4); LayoutMode: Left; - Label { + Label #NameLabel { Text: "Name:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -112,7 +112,7 @@ $C.@PageOverlay { Anchor: (Height: 32, Bottom: 4); LayoutMode: Left; - Label { + Label #TagLabel { Text: "Tag:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -134,7 +134,7 @@ $C.@PageOverlay { Anchor: (Height: 32); LayoutMode: Left; - Label { + Label #DescLabel { Text: "Desc:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -153,7 +153,7 @@ $C.@PageOverlay { } // --- Recruitment --- - Label { + Label #SectionRecruitment { Text: "Recruitment"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -173,7 +173,7 @@ $C.@PageOverlay { Anchor: (Height: 32); LayoutMode: Left; - Label { + Label #StatusLabel { Text: "Status:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -187,7 +187,7 @@ $C.@PageOverlay { } // --- Home Location --- - Label { + Label #SectionHome { Text: "Home Location"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -207,7 +207,7 @@ $C.@PageOverlay { Anchor: (Height: 28, Bottom: 4); LayoutMode: Left; - Label { + Label #LocationLabel { Text: "Location:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -236,7 +236,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 8); - Label { + Label #SectionDangerZone { Text: "Danger Zone"; Style: (FontSize: 11, TextColor: #FF5555, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -251,7 +251,7 @@ $C.@PageOverlay { Padding: (Left: 12, Right: 12, Top: 8, Bottom: 8); LayoutMode: Top; - Label { + Label #IrreversibleWarning { Text: "This action is irreversible."; Style: (FontSize: 10, TextColor: #AA5555); Anchor: (Height: 18, Bottom: 4); @@ -281,20 +281,20 @@ $C.@PageOverlay { // Lock hint Group { - Anchor: (Height: 22, Bottom: 6); + Anchor: (Height: 32, Bottom: 6); Background: (Color: #1a1a2a); - Padding: (Left: 8, Right: 8, Top: 0, Bottom: 0); + Padding: (Left: 8, Right: 8, Top: 4, Bottom: 4); LayoutMode: Left; - Label { + Label #LockHint { Text: "Some options may be locked by the server and won't accept changes."; - Style: (FontSize: 9, TextColor: #555577, VerticalAlignment: Center); + Style: (FontSize: 9, TextColor: #555577, VerticalAlignment: Center, Wrap: true); FlexWeight: 1; } } // ---- TERRITORY PERMISSIONS ---- - Label { + Label #SectionTerritoryPerms { Text: "Territory Permissions"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -317,22 +317,22 @@ $C.@PageOverlay { Padding: (Left: 6, Right: 6); Label { Anchor: (Width: 122); } - Label { + Label #ColOutsider { Text: "Out"; Style: (FontSize: 9, TextColor: #AAAAAA, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColAlly { Text: "Ally"; Style: (FontSize: 9, TextColor: #55FF55, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColMember { Text: "Mem"; Style: (FontSize: 9, TextColor: #00FFFF, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColOfficer { Text: "Off"; Style: (FontSize: 9, TextColor: #FFD700, RenderBold: true); Anchor: (Width: 52); @@ -340,7 +340,7 @@ $C.@PageOverlay { } // ---- BUILDING category ---- - Label { + Label #CatBuilding { Text: "BUILDING"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2); @@ -353,7 +353,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermBreak { Text: "Break"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -371,7 +371,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #PermPlace { Text: "Place"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -383,12 +383,12 @@ $C.@PageOverlay { } // ---- INTERACTION category ---- - Label { + Label #CatInteraction { Text: "INTERACTION"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2); } - Label { + Label #CatInteractionSub { Text: "(children disabled when All is off)"; Style: (FontSize: 8, TextColor: #555566); Anchor: (Height: 12, Bottom: 2); @@ -401,7 +401,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermAll { Text: "All"; Style: (FontSize: 11, TextColor: #CCCCCC, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 114); @@ -419,7 +419,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermDoor { Text: "Door"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -437,7 +437,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermChest { Text: "Chest"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -455,7 +455,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermBench { Text: "Bench"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -473,7 +473,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermProcessing { Text: "Processing"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -491,7 +491,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermSeat { Text: "Seat"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -509,7 +509,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermTransport { Text: "Transport"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -521,7 +521,7 @@ $C.@PageOverlay { } // ---- OTHER PERMISSIONS category ---- - Label { + Label #CatOther { Text: "OTHER"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2, Top: 6); @@ -534,7 +534,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermCrateUse { Text: "Crate Use"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -552,7 +552,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #PermNpcTame { Text: "NPC Tame"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -570,7 +570,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermPveDamage { Text: "PvE Damage"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -596,7 +596,7 @@ $C.@PageOverlay { Padding: (Left: 8, Right: 0, Top: 0, Bottom: 0); // --- Appearance --- - Label { + Label #SectionAppearance { Text: "Appearance"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -617,7 +617,7 @@ $C.@PageOverlay { Anchor: (Height: 28, Bottom: 4); LayoutMode: Left; - Label { + Label #ColorLabel { Text: "Color:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 42); @@ -650,12 +650,12 @@ $C.@PageOverlay { } // --- Mob Spawning --- - Label { + Label #SectionMobSpawning { Text: "Mob Spawning"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 2); } - Label { + Label #SectionMobSpawningSub { Text: "(children disabled when master is off)"; Style: (FontSize: 8, TextColor: #666666); Anchor: (Height: 12, Bottom: 4); @@ -678,7 +678,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermMobSpawning { Text: "Mob Spawning"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 120); @@ -697,7 +697,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermHostile { Text: "Hostile Mobs"; Style: (FontSize: 10, TextColor: #FF5555, VerticalAlignment: Center); Anchor: (Width: 108); @@ -716,7 +716,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermPassive { Text: "Passive Mobs"; Style: (FontSize: 10, TextColor: #55FF55, VerticalAlignment: Center); Anchor: (Width: 108); @@ -735,7 +735,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermNeutral { Text: "Neutral Mobs"; Style: (FontSize: 10, TextColor: #FFFF55, VerticalAlignment: Center); Anchor: (Width: 108); @@ -749,7 +749,7 @@ $C.@PageOverlay { } // --- Faction Settings --- - Label { + Label #SectionFactionSettings { Text: "Faction Settings"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -772,7 +772,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermPvP { Text: "PvP in Territory"; Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 120); @@ -796,7 +796,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #PermOfficersEdit { Text: "Officers can edit"; Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 120); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_factions.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_factions.ui index 60b8ecf9..5e3c3ccd 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_factions.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_factions.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 700, Height: 500); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Faction Management"; } } @@ -23,7 +23,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #SearchLabel { Text: "Search:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -47,10 +47,10 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); - Anchor: (Width: 35); + Anchor: (Width: 60); } DropdownBox #SortDropdown { Style: $C.@DefaultDropdownBoxStyle; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_help.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_help.ui index cf44f393..3aaffbc0 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_help.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_help.ui @@ -1,57 +1,214 @@ +// Admin Help - Sidebar layout with 8 admin categories +// Mirrors help_main.ui but for admin documentation $C = "../../Common.ui"; $S = "../shared/styles.ui"; $Nav = "admin_nav_bar.ui"; +// === Sidebar button styles per admin category === + +@SidebarLabel = LabelStyle( + FontSize: 11, + TextColor: #bfcdd5, + RenderBold: true +); + +// Admin Overview (#00FFFF) +@SidebarLabelCyan = LabelStyle(FontSize: 11, TextColor: #00FFFF, RenderBold: true); +@CatStyleCyan = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelCyan), + Sounds: $C.@ButtonSounds +); + +// Admin Factions (#44CC44) +@SidebarLabelGreen = LabelStyle(FontSize: 11, TextColor: #44CC44, RenderBold: true); +@CatStyleGreen = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelGreen), + Sounds: $C.@ButtonSounds +); + +// Admin Zones (#FFAA00) +@SidebarLabelOrange = LabelStyle(FontSize: 11, TextColor: #FFAA00, RenderBold: true); +@CatStyleOrange = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelOrange), + Sounds: $C.@ButtonSounds +); + +// Admin Power (#FFD700) +@SidebarLabelGold = LabelStyle(FontSize: 11, TextColor: #FFD700, RenderBold: true); +@CatStyleGold = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelGold), + Sounds: $C.@ButtonSounds +); + +// Admin Economy (#55FF55) +@SidebarLabelBrightGreen = LabelStyle(FontSize: 11, TextColor: #55FF55, RenderBold: true); +@CatStyleBrightGreen = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelBrightGreen), + Sounds: $C.@ButtonSounds +); + +// Admin Config (#55AAFF) +@SidebarLabelBlue = LabelStyle(FontSize: 11, TextColor: #55AAFF, RenderBold: true); +@CatStyleBlue = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelBlue), + Sounds: $C.@ButtonSounds +); + +// Admin Maintenance (#FF5555) +@SidebarLabelRed = LabelStyle(FontSize: 11, TextColor: #FF5555, RenderBold: true); +@CatStyleRed = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelRed), + Sounds: $C.@ButtonSounds +); + +// Admin Reference (#888888) +@SidebarLabelGray = LabelStyle(FontSize: 11, TextColor: #888888, RenderBold: true); +@CatStyleGray = TextButtonStyle( + Default: (Background: $C.@DefaultSquareButtonDefaultBackground, LabelStyle: @SidebarLabel), + Hovered: (Background: $C.@DefaultSquareButtonHoveredBackground, LabelStyle: @SidebarLabel), + Pressed: (Background: $C.@DefaultSquareButtonPressedBackground, LabelStyle: @SidebarLabel), + Disabled: (Background: $C.@DefaultSquareButtonDisabledBackground, LabelStyle: @SidebarLabelGray), + Sounds: $C.@ButtonSounds +); + $C.@PageOverlay { $Nav.@HyperFactionsAdminNavBar #HyperFactionsAdminNavBar {} - $C.@Container { - Anchor: (Width: 600, Height: 470); + $C.@DecoratedContainer { + Anchor: (Width: 863, Height: 748); #Title { - $C.@Title { - @Text = "Admin Help"; + Group { + $C.@Title #PageTitle { + @Text = "Admin Help"; + } } } #Content { - LayoutMode: Top; - Padding: (Left: 15, Right: 15, Top: 10, Bottom: 10); + LayoutMode: Left; + Padding: (Left: 10, Right: 10, Top: 10, Bottom: 10); - Group #PlaceholderContent { - FlexWeight: 1; + // Left column - Admin category sidebar (180px) + Group #CategoryMenu { + Anchor: (Width: 180); LayoutMode: Top; + Padding: (Left: 0, Right: 8, Top: 0, Bottom: 0); + + // Category 0: Admin Overview (cyan) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #00FFFF); } + TextButton #Cat0 { Text: " Overview"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleCyan; } + } - Label { - Anchor: (Height: 100); + // Category 1: Admin Factions (green) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #44CC44); } + TextButton #Cat1 { Text: " Factions"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleGreen; } } - Label #ComingSoon { - Text: "Admin Documentation"; - Style: (FontSize: 24, TextColor: #00FFFF, HorizontalAlignment: Center, VerticalAlignment: Center, RenderBold: true); - Anchor: (Height: 40); + // Category 2: Admin Zones (orange) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #FFAA00); } + TextButton #Cat2 { Text: " Zones"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleOrange; } } - Label #ComingSoonSub { - Text: "Coming Soon"; - Style: (FontSize: 16, TextColor: #888888, HorizontalAlignment: Center, VerticalAlignment: Center); - Anchor: (Height: 30); + // Category 3: Admin Power (gold) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #FFD700); } + TextButton #Cat3 { Text: " Power"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleGold; } } - Label { - Anchor: (Height: 20); + // Category 4: Admin Economy (bright green) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #55FF55); } + TextButton #Cat4 { Text: " Economy"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleBrightGreen; } + } + + // Category 5: Admin Config (blue) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #55AAFF); } + TextButton #Cat5 { Text: " Config"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleBlue; } + } + + // Category 6: Admin Maintenance (red) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #FF5555); } + TextButton #Cat6 { Text: " Maintenance"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleRed; } + } + + // Category 7: Admin Reference (gray) + Group { + Anchor: (Height: 34, Bottom: 2); + LayoutMode: Left; + Group { Anchor: (Width: 3); Background: (Color: #888888); } + TextButton #Cat7 { Text: " Reference"; FlexWeight: 1; Anchor: (Height: 34); Style: @CatStyleGray; } + } + } + + // Divider line + Group { + Anchor: (Width: 1); + Background: (Color: #2a3a4a); + } + + // Right column - Scrollable content area + Group #ContentArea { + FlexWeight: 1; + LayoutMode: TopScrolling; + ScrollbarStyle: $C.@DefaultScrollbarStyle; + Padding: (Left: 15, Right: 10, Top: 0, Bottom: 10); + + // Category title header + Label #CategoryTitle { + Text: ""; + Style: (FontSize: 14, TextColor: #00FFFF, RenderBold: true); + Anchor: (Height: 28, Left: 0, Right: 0); } - Label #Description { - Text: "Admin commands, permissions, and configuration guide."; - Style: (FontSize: 12, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); - Anchor: (Height: 25); + // Spacer after title + Group { + Anchor: (Height: 6); } - Label #Description2 { - Text: "Use /f help admin for command documentation."; - Style: (FontSize: 12, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); - Anchor: (Height: 25); + // Dynamic content container for topic cards + Group #ContentList { + LayoutMode: Top; } } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_main.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_main.ui index ce0c2868..8c96ede5 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_main.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_main.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 600, Height: 470); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Factions Admin"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_entry.ui index a5364b7f..552c6fb8 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_entry.ui @@ -90,7 +90,7 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #RoleLabel { Text: "Role:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 35); @@ -101,7 +101,7 @@ Group { Anchor: (Width: 70); } - Label { + Label #JoinedLabel { Text: "Joined:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 45); @@ -112,10 +112,10 @@ Group { Anchor: (Width: 80); } - Label { + Label #LastOnlineLabel { Text: "Last Online:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 70); + Anchor: (Width: 105); } Label #LastOnline { Text: "Unknown"; @@ -129,7 +129,7 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #KdrLabel { Text: "K/D/R:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 40); @@ -140,7 +140,7 @@ Group { Anchor: (Width: 100); } - Label { + Label #PowerLabel { Text: "Power:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 45); @@ -157,7 +157,7 @@ Group { LayoutMode: Left; Anchor: (Height: 18, Bottom: 8); - Label { + Label #UuidLabel { Text: "UUID:"; Style: (FontSize: 9, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 40); @@ -181,7 +181,7 @@ Group { } TextButton #TeleportBtn { Text: "Teleport"; - Anchor: (Height: 24, Width: 80, Right: 6); + Anchor: (Height: 24, Width: 110, Right: 6); Style: $S.@ButtonStyle; } Group { FlexWeight: 1; } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_info.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_info.ui index 6198cd47..1411f064 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_info.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_player_info.ui @@ -9,10 +9,10 @@ $C.@PageOverlay { $Nav.@HyperFactionsAdminNavBar #HyperFactionsAdminNavBar {} $C.@Container { - Anchor: (Width: 720, Height: 600); + Anchor: (Width: 780, Height: 600); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Player Info"; } } @@ -56,21 +56,21 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 16); - Label { + Label #FirstJoinedLabel { Text: "First joined:"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 68); + Anchor: (Width: 108); } Label #FirstJoinedValue { Text: ""; Style: (FontSize: 9, TextColor: #AAAAAA, VerticalAlignment: Center); - Anchor: (Width: 120); + Anchor: (Width: 100); } - Label { + Label #LastOnlineLabel { Text: "Last online:"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 64); + Anchor: (Width: 104); } Label #LastOnlineValue { Text: ""; @@ -80,7 +80,7 @@ $C.@PageOverlay { Label { FlexWeight: 1; } - Label { + Label #UuidLabel { Text: "UUID:"; Style: (FontSize: 8, TextColor: #444444, VerticalAlignment: Center); Anchor: (Width: 28); @@ -111,7 +111,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 3); - Label { + Label #PowerLabel { Text: "Power"; Style: (FontSize: 8, TextColor: #666666); Anchor: (Height: 12); @@ -137,7 +137,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 3, Right: 3); - Label { + Label #CombatLabel { Text: "Combat"; Style: (FontSize: 8, TextColor: #666666); Anchor: (Height: 12); @@ -160,7 +160,7 @@ $C.@PageOverlay { Style: (FontSize: 13, TextColor: #FF5555, RenderBold: true, VerticalAlignment: Center); } } - Label { + Label #KDLabel { Text: "K / D"; Style: (FontSize: 8, TextColor: #444444); Anchor: (Height: 10); @@ -175,7 +175,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 3, Right: 3); - Label { + Label #KDRLabel { Text: "K/D Ratio"; Style: (FontSize: 8, TextColor: #666666); Anchor: (Height: 12); @@ -200,7 +200,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 3); - Label { + Label #FactionLabel { Text: "Faction"; Style: (FontSize: 8, TextColor: #666666); Anchor: (Height: 12); @@ -258,7 +258,7 @@ $C.@PageOverlay { Anchor: (Height: 16, Bottom: 3); LayoutMode: Left; - Label { + Label #HistoryHeader { Text: "Membership History"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center); } @@ -284,7 +284,7 @@ $C.@PageOverlay { Padding: (Left: 8); // Admin Controls header (aligns with Membership History header) - Label { + Label #AdminControlsHeader { Text: "Admin Controls"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center); Anchor: (Height: 16, Bottom: 3); @@ -302,7 +302,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 18, Bottom: 3); - Label { + Label #PowerMgmtHeader { Text: "Power Management"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center); } @@ -320,36 +320,36 @@ $C.@PageOverlay { TextButton #SubFive { Text: "-5"; - Anchor: (Height: 24, Width: 34, Right: 2); + Anchor: (Height: 24, Width: 30, Right: 2); Style: $S.@RedButtonStyle; } TextButton #SubOne { Text: "-1"; - Anchor: (Height: 24, Width: 34, Right: 3); + Anchor: (Height: 24, Width: 30, Right: 2); Style: $S.@RedButtonStyle; } $C.@TextField #PowerInput { - Anchor: (Height: 24, Width: 52, Right: 3); + Anchor: (Height: 24, Width: 46, Right: 2); Style: (FontSize: 11, TextColor: #FFFFFF); } TextButton #AddOne { Text: "+1"; - Anchor: (Height: 24, Width: 34, Right: 2); + Anchor: (Height: 24, Width: 30, Right: 2); Style: $S.@ButtonStyle; } TextButton #AddFive { Text: "+5"; - Anchor: (Height: 24, Width: 34, Right: 3); + Anchor: (Height: 24, Width: 30, Right: 2); Style: $S.@ButtonStyle; } TextButton #SetPowerBtn { Text: "Set"; - Anchor: (Height: 24, Width: 36, Right: 2); + Anchor: (Height: 24, Width: 78, Right: 2); Style: $S.@CyanButtonStyle; } TextButton #ResetPowerBtn { Text: "Reset"; - Anchor: (Height: 24, Width: 44); + Anchor: (Height: 24, Width: 68); Style: $S.@RedButtonStyle; } } @@ -359,23 +359,23 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 26); - Label { + Label #MaxLabel { Text: "Max:"; Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 33); } $C.@TextField #MaxPowerInput { - Anchor: (Height: 24, Width: 56, Right: 3); + Anchor: (Height: 24, Width: 50, Right: 2); Style: (FontSize: 11, TextColor: #FFFFFF); } TextButton #SetMaxBtn { Text: "Set Max"; - Anchor: (Height: 24, Width: 58, Right: 2); + Anchor: (Height: 24, Width: 104, Right: 2); Style: $S.@CyanButtonStyle; } TextButton #ResetMaxBtn { Text: "Reset"; - Anchor: (Height: 24, Width: 44); + Anchor: (Height: 24, Width: 68); Style: $S.@RedButtonStyle; } } @@ -392,7 +392,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 26); - Label { + Label #CombatSectionHeader { Text: "Combat"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center); } @@ -411,7 +411,7 @@ $C.@PageOverlay { Padding: (Left: 12, Right: 12, Top: 8, Bottom: 8); LayoutMode: Top; - Label { + Label #BypassHeader { Text: "Power Bypass Toggles"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true); Anchor: (Height: 16, Bottom: 3); @@ -422,9 +422,14 @@ $C.@PageOverlay { Anchor: (Height: 26, Bottom: 3); $C.@CheckBoxWithLabel #NoLossCheck { - @Text = "Disable Power Loss"; + @Text = ""; @Checked = false; - Anchor: (Height: 22, Width: 175); + Anchor: (Height: 22, Width: 28); + } + Label #NoLossLabel { + Text: "Disable Power Loss"; + Style: (FontSize: 10, TextColor: #CCCCCC, VerticalAlignment: Center); + FlexWeight: 1; } } @@ -433,9 +438,14 @@ $C.@PageOverlay { Anchor: (Height: 26); $C.@CheckBoxWithLabel #NoDecayCheck { - @Text = "Disable Claim Decay"; + @Text = ""; @Checked = false; - Anchor: (Height: 22, Width: 175); + Anchor: (Height: 22, Width: 28); + } + Label #NoDecayLabel { + Text: "Disable Claim Decay"; + Style: (FontSize: 10, TextColor: #CCCCCC, VerticalAlignment: Center); + FlexWeight: 1; } } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_players.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_players.ui index ade05d69..b8738828 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_players.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_players.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { Anchor: (Width: 700, Height: 500); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Player Management"; } } @@ -27,7 +27,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #SearchLabel { Text: "Search:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -52,10 +52,10 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); - Anchor: (Width: 35); + Anchor: (Width: 65); } DropdownBox #SortDropdown { Style: $C.@DefaultDropdownBoxStyle; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_updates.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_updates.ui index c3ed8cf4..70c75c90 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_updates.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_updates.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 600, Height: 470); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Updates"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_version.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_version.ui index 5484382c..a16624fa 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_version.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_version.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 720, Height: 470); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Version and Integrations"; } } @@ -31,7 +31,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #VersionLabelFactions { Text: "HyperFactions"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -51,7 +51,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5, Right: 5); - Label { + Label #VersionLabelServer { Text: "Hytale Server"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -71,7 +71,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #VersionLabelJava { Text: "Java"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -96,7 +96,7 @@ $C.@PageOverlay { Anchor: (Right: 6); // PERMISSIONS Section - Label { + Label #SectionPermissions { Text: "PERMISSIONS"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22, Bottom: 4); @@ -135,7 +135,7 @@ $C.@PageOverlay { } // PLACEHOLDERS Section - Label { + Label #SectionPlaceholders { Text: "PLACEHOLDERS"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22, Bottom: 4); @@ -158,7 +158,7 @@ $C.@PageOverlay { } // ECONOMY Section - Label { + Label #SectionEconomy { Text: "ECONOMY"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22, Top: 10, Bottom: 4); @@ -180,7 +180,7 @@ $C.@PageOverlay { Anchor: (Left: 6); // PROTECTION Section - Label { + Label #SectionProtection { Text: "PROTECTION"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22, Bottom: 4); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_entry.ui index 13172dda..639386dd 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_entry.ui @@ -47,7 +47,7 @@ Group { Anchor: (Width: 140); LayoutMode: Left; - Label { + Label #WorldLabel { Text: "World:"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 40); @@ -64,7 +64,7 @@ Group { Anchor: (Width: 80); LayoutMode: Left; - Label { + Label #InlineChunksLabel { Text: "Chunks:"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 45); @@ -111,7 +111,7 @@ Group { LayoutMode: Left; Anchor: (Height: 22, Bottom: 6); - Label { + Label #ChunksLabel { Text: "Chunks:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 50); @@ -122,7 +122,7 @@ Group { Anchor: (Width: 50); } - Label { + Label #BoundsLabel { Text: "Bounds:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 50); @@ -133,7 +133,7 @@ Group { Anchor: (Width: 150); } - Label { + Label #CreatedLabel { Text: "Created:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 52); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_integration_flags.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_integration_flags.ui index a8105d2b..7441a198 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_integration_flags.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_integration_flags.ui @@ -14,7 +14,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Integration Flags"; } } @@ -62,7 +62,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 4); - Label { + Label #CatGravestones { Text: "Gravestones"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } @@ -93,7 +93,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 16); Padding: (Left: 4, Right: 0, Top: 0, Bottom: 0); - Label { + Label #GravestonesDesc { Text: "When ON, non-owners can loot graves. Owners always can."; Style: (FontSize: 9, TextColor: #666666); } @@ -109,7 +109,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 4); - Label { + Label #CatWorldMap { Text: "World Map"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } @@ -162,7 +162,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 24); Padding: (Left: 4, Right: 0, Top: 2, Bottom: 0); - Label { + Label #WorldMapDesc { Text: "Override map hiding for players in this zone. When enabled, select who can see players in this zone."; Style: (FontSize: 9, TextColor: #666666); } @@ -178,7 +178,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 4); - Label { + Label #CatEssentials { Text: "HyperEssentials"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map.ui index f23cb663..4c724a4f 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map.ui @@ -11,7 +11,7 @@ $C.@Container { Anchor: (Width: 520, Height: 580); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Zone Map Editor"; } } @@ -55,7 +55,7 @@ $C.@Container { // Action hints Label #ActionHint { - Text: "Left-click: Claim for zone | Right-click: Unclaim from zone"; + Text: "Left-click: Claim for zone | Right-click: Unclaim from zone"; Style: (FontSize: 11, TextColor: #888888, HorizontalAlignment: Center); Anchor: (Height: 18, Top: 8, Bottom: 5); } @@ -80,13 +80,13 @@ $C.@Container { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #14b8a6); } - Label { Text: " This Zone (Safe)"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendZoneSafe { Text: " This Zone (Safe)"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #a855f7); } - Label { Text: " This Zone (War)"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendZoneWar { Text: " This Zone (War)"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -99,13 +99,13 @@ $C.@Container { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #2dd4bf80); } - Label { Text: " Other SafeZone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendOtherSafe { Text: " Other SafeZone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #c084fc80); } - Label { Text: " Other WarZone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendOtherWar { Text: " Other WarZone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -118,13 +118,13 @@ $C.@Container { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #6b7280); } - Label { Text: " Faction Claim"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendFactionClaim { Text: " Faction Claim"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #1e293b); } - Label { Text: " Unclaimed"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendUnclaimed { Text: " Unclaimed"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -137,7 +137,7 @@ $C.@Container { LayoutMode: Left; Anchor: (Height: 16); Label { Text: " + "; Style: (FontSize: 10, TextColor: #ffffff, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 16); } - Label { Text: "You are here"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendYouAreHere { Text: "You are here"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map_terrain.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map_terrain.ui index 3ed4fc3a..0c7d87bb 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map_terrain.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_map_terrain.ui @@ -11,7 +11,7 @@ $C.@Container { Anchor: (Width: 620, Height: 760); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Zone Map Editor"; } } @@ -89,25 +89,25 @@ $C.@Container { LayoutMode: Left; Anchor: (Width: 120); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #14b8a6); } - Label { Text: " This Zone (Safe)"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendZoneSafe { Text: " This Zone (Safe)"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 120); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #c084fc); } - Label { Text: " This Zone (War)"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendZoneWar { Text: " This Zone (War)"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 110); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #2dd4bf80); } - Label { Text: " Other SafeZone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendOtherSafe { Text: " Other SafeZone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 110); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #c084fc80); } - Label { Text: " Other WarZone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendOtherWar { Text: " Other WarZone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -120,19 +120,19 @@ $C.@Container { LayoutMode: Left; Anchor: (Width: 120); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #6b7280); } - Label { Text: " Faction Claim"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendFactionClaim { Text: " Faction Claim"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 120); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #00000000); } - Label { Text: " Unclaimed"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendUnclaimed { Text: " Unclaimed"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 110); Label { Text: " + "; Style: (FontSize: 9, TextColor: #ffffff, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 14); } - Label { Text: "You are here"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendYouAreHere { Text: "You are here"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_properties.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_properties.ui index c804668a..44dce5e1 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_properties.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_properties.ui @@ -14,7 +14,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Zone Settings"; } } @@ -62,14 +62,14 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 12); - Label { + Label #GeneralHeader { Text: "General"; Style: (FontSize: 13, TextColor: #00AAAA, RenderBold: true); Anchor: (Height: 20, Bottom: 4); } // Name subsection - Label { + Label #ZoneNameLabel { Text: "Zone Name"; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 16, Bottom: 2); @@ -102,7 +102,7 @@ $C.@PageOverlay { } // Type subsection - Label { + Label #ZoneTypeLabel { Text: "Zone Type"; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 16, Bottom: 2); @@ -132,7 +132,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 12); - Label { + Label #NotificationsHeader { Text: "Notifications"; Style: (FontSize: 13, TextColor: #00AAAA, RenderBold: true); Anchor: (Height: 20, Bottom: 4); @@ -152,7 +152,7 @@ $C.@PageOverlay { } // Upper title - Label { + Label #UpperTitleLabel { Text: "Upper Title (small text above zone name)"; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 16); @@ -191,7 +191,7 @@ $C.@PageOverlay { } // Lower title - Label { + Label #LowerTitleLabel { Text: "Lower Title (large zone name text)"; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 16); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_settings.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_settings.ui index 7d74117c..928e046c 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_settings.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zone_settings.ui @@ -16,7 +16,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Admin: Zone Settings"; } } @@ -77,14 +77,14 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 0); - Label { + Label #CatCombat { Text: "Combat"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } } Group { Anchor: (Height: 12, Bottom: 4); - Label { + Label #CatCombatSub { Text: "(children only apply when parent ON)"; Style: (FontSize: 8, TextColor: #666666); } @@ -250,7 +250,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 4); - Label { + Label #CatDamage { Text: "Damage"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } @@ -350,7 +350,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 4); - Label { + Label #CatDeath { Text: "Death"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } @@ -415,14 +415,14 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 0); - Label { + Label #CatBuilding { Text: "Building"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } } Group { Anchor: (Height: 12, Bottom: 4); - Label { + Label #CatBuildingSub { Text: "(children only apply when parent ON)"; Style: (FontSize: 8, TextColor: #666666); } @@ -525,14 +525,14 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 0); - Label { + Label #CatInteraction { Text: "Interaction"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } } Group { Anchor: (Height: 12, Bottom: 4); - Label { + Label #CatInteractionSub { Text: "(children only apply when parent ON)"; Style: (FontSize: 8, TextColor: #666666); } @@ -837,7 +837,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 4); - Label { + Label #CatTransport { Text: "Transport"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } @@ -916,7 +916,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 4); - Label { + Label #CatItems { Text: "Items"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } @@ -1016,14 +1016,14 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 0); - Label { + Label #CatSpawning { Text: "Mob Spawning"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } } Group { Anchor: (Height: 12, Bottom: 4); - Label { + Label #CatSpawningSub { Text: "(children only apply when parent ON)"; Style: (FontSize: 8, TextColor: #666666); } @@ -1148,14 +1148,14 @@ $C.@PageOverlay { Group { Anchor: (Height: 18, Bottom: 0); - Label { + Label #CatMobClear { Text: "Mob Clearing"; Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); } } Group { Anchor: (Height: 12, Bottom: 4); - Label { + Label #CatMobClearSub { Text: "(children only apply when parent ON)"; Style: (FontSize: 8, TextColor: #666666); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zones.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zones.ui index bd3323fe..1592afcf 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zones.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/admin_zones.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { Anchor: (Width: 700, Height: 500); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Zone Management"; } } @@ -71,10 +71,10 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); - Anchor: (Width: 35); + Anchor: (Width: 65); } DropdownBox #SortDropdown { Style: $C.@DefaultDropdownBoxStyle; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/create_zone_wizard.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/create_zone_wizard.ui index 8a334a82..855eb0e7 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/create_zone_wizard.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/create_zone_wizard.ui @@ -10,7 +10,7 @@ $C.@Container { Anchor: (Width: 720, Height: 500); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Create Zone"; } } @@ -61,7 +61,7 @@ $C.@Container { Background: (Color: #1a2a3a); Padding: (Left: 12, Right: 12, Top: 10, Bottom: 10); - Label { + Label #ZoneTypeHeader { Text: "Zone Type"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 14, Bottom: 8); @@ -76,7 +76,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #SafeZoneDesc { Text: "Protected, no PvP"; Style: (FontSize: 10, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 16, Bottom: 4); @@ -95,7 +95,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #WarZoneDesc { Text: "Combat, PvP enabled"; Style: (FontSize: 10, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 16, Bottom: 4); @@ -119,13 +119,13 @@ $C.@Container { Background: (Color: #1a2a3a); Padding: (Left: 12, Right: 12, Top: 10, Bottom: 10); - Label { + Label #ZoneNameHeader { Text: "Zone Name"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 14, Bottom: 6); } - Label { + Label #ZoneNameDesc { Text: "Enter a unique name for the zone"; Style: (FontSize: 10, TextColor: #AAAAAA); Anchor: (Height: 16, Bottom: 6); @@ -151,7 +151,7 @@ $C.@Container { Background: (Color: #1a2a3a); Padding: (Left: 12, Right: 12, Top: 10, Bottom: 10); - Label { + Label #ClaimMethodHeader { Text: "Claiming Method"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 14, Bottom: 8); @@ -166,7 +166,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #MethodNoneDesc { Text: "Create empty zone"; Style: (FontSize: 9, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 14, Bottom: 2); @@ -184,7 +184,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #MethodSingleDesc { Text: "Your current chunk"; Style: (FontSize: 9, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 14, Bottom: 2); @@ -206,7 +206,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #MethodCircleDesc { Text: "Circular area"; Style: (FontSize: 9, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 14, Bottom: 2); @@ -224,7 +224,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #MethodSquareDesc { Text: "Square area"; Style: (FontSize: 9, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 14, Bottom: 2); @@ -242,7 +242,7 @@ $C.@Container { LayoutMode: Top; Anchor: (Height: 44); - Label { + Label #MethodMapDesc { Text: "Interactive chunk editor"; Style: (FontSize: 9, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 14, Bottom: 2); @@ -273,7 +273,7 @@ $C.@Container { LayoutMode: Left; Anchor: (Height: 14, Bottom: 8); - Label { + Label #RadiusHeader { Text: "Radius"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); } @@ -325,7 +325,7 @@ $C.@Container { LayoutMode: Left; Anchor: (Height: 28); - Label { + Label #CustomRadiusLabel { Text: "Custom (1-50):"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 85); @@ -349,7 +349,7 @@ $C.@Container { Background: (Color: #1a2a3a); Padding: (Left: 12, Right: 12, Top: 10, Bottom: 10); - Label { + Label #FlagsHeader { Text: "Flags"; Style: (FontSize: 11, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 14, Bottom: 8); @@ -363,7 +363,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #FlagsDefaultsDesc { Text: "Based on zone type"; Style: (FontSize: 9, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 14, Bottom: 2); @@ -381,7 +381,7 @@ $C.@Container { LayoutMode: Top; FlexWeight: 1; - Label { + Label #FlagsCustomizeDesc { Text: "Open settings after"; Style: (FontSize: 9, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 14, Bottom: 2); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/unclaim_all_confirm.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/unclaim_all_confirm.ui index 2f79e2d2..25bee2ad 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/unclaim_all_confirm.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/unclaim_all_confirm.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Unclaim All Territory"; } } @@ -20,7 +20,7 @@ $C.@PageOverlay { LayoutMode: Top; Padding: (Left: 20, Right: 20, Top: 15, Bottom: 15); - Label { + Label #ConfirmMsg1 { Text: "Are you sure you want to unclaim all"; Style: (FontSize: 13, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 22); @@ -32,7 +32,7 @@ $C.@PageOverlay { Anchor: (Height: 22); } - Label { + Label #ConfirmMsg2 { Text: "from"; Style: (FontSize: 13, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 18); @@ -44,7 +44,7 @@ $C.@PageOverlay { Anchor: (Height: 24, Bottom: 8); } - Label { + Label #WarningLabel { Text: "This action cannot be undone!"; Style: (FontSize: 12, TextColor: #AA5555, HorizontalAlignment: Center); Anchor: (Height: 20, Bottom: 15); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_change_type_modal.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_change_type_modal.ui index c6b1bf43..3d621495 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_change_type_modal.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_change_type_modal.ui @@ -11,7 +11,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Change Zone Type"; } } @@ -26,7 +26,7 @@ $C.@PageOverlay { Anchor: (Height: 26, Bottom: 6); LayoutMode: Left; - Label { + Label #ZoneLabel { Text: "Zone:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -44,7 +44,7 @@ $C.@PageOverlay { Anchor: (Height: 26, Bottom: 4); LayoutMode: Left; - Label { + Label #CurrentLabel { Text: "Current:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -63,7 +63,7 @@ $C.@PageOverlay { } // Arrow indicator - Label { + Label #WillBecomeLabel { Text: "will become"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center); Anchor: (Height: 18); @@ -74,7 +74,7 @@ $C.@PageOverlay { Anchor: (Height: 26, Bottom: 8); LayoutMode: Left; - Label { + Label #NewLabel { Text: "New:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -99,12 +99,12 @@ $C.@PageOverlay { Padding: (Left: 10, Right: 10, Top: 6, Bottom: 6); LayoutMode: Top; - Label { + Label #WarningLine1 { Text: "Different zone types have different default flag values."; Style: (FontSize: 10, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 12); } - Label { + Label #WarningLine2 { Text: "Choose how to handle existing flag settings:"; Style: (FontSize: 10, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 12); @@ -123,7 +123,7 @@ $C.@PageOverlay { LayoutMode: Top; FlexWeight: 1; - Label { + Label #KeepFlagsDesc { Text: "Keep custom overrides"; Style: (FontSize: 10, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 16, Bottom: 4); @@ -143,7 +143,7 @@ $C.@PageOverlay { LayoutMode: Top; FlexWeight: 1; - Label { + Label #ResetFlagsDesc { Text: "Use new type defaults"; Style: (FontSize: 10, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 16, Bottom: 4); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_rename_modal.ui b/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_rename_modal.ui index 07b37ef9..fbc7c63e 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_rename_modal.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/admin/zone_rename_modal.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Rename Zone"; } } @@ -25,7 +25,7 @@ $C.@PageOverlay { Anchor: (Height: 24, Bottom: 10); LayoutMode: Left; - Label { + Label #CurrentLabel { Text: "Current:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 70); @@ -39,7 +39,7 @@ $C.@PageOverlay { } // New name input - Label { + Label #NewNameLabel { Text: "New Name:"; Style: (FontSize: 12, TextColor: #888888); Anchor: (Height: 24, Bottom: 4); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/activity_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/activity_entry.ui index 0764a118..719203a2 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/activity_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/activity_entry.ui @@ -1,29 +1,27 @@ // Activity Entry Template +// Matches log_entry.ui style: date first, type, then description Group { - Anchor: (Height: 24); - LayoutMode: Top; + Anchor: (Height: 30, Bottom: 2); + Background: (Color: #0d1520); + Padding: (Left: 10, Right: 10, Top: 4, Bottom: 4); + LayoutMode: Left; - Group { - LayoutMode: Left; - Anchor: (Height: 24); - - Label #ActivityType { - Text: "Type"; - Style: (FontSize: 10, TextColor: #00AAAA, RenderBold: true, VerticalAlignment: Center); - Anchor: (Width: 65); - } + Label #ActivityTime { + Text: "5m ago"; + Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); + Anchor: (Width: 70); + } - Label #ActivityMessage { - Text: "Activity description"; - Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); - Anchor: (Width: 220); - } + Label #ActivityType { + Text: "Type"; + Style: (FontSize: 10, TextColor: #00AAAA, RenderBold: true, VerticalAlignment: Center); + Anchor: (Width: 70); + } - Label #ActivityTime { - Text: "5m ago"; - Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 60); - } + Label #ActivityMessage { + Text: "Activity description"; + Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); + FlexWeight: 1; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map.ui index 2693598f..97fe7baa 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map.ui @@ -14,7 +14,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #MapTitle { @Text = "Territory Map"; } } @@ -66,19 +66,19 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #4ade80); } - Label { Text: " Your Territory"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendYourLabel { Text: " Your Territory"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #60a5fa); } - Label { Text: " Ally Territory"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendAllyLabel { Text: " Ally Territory"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #f87171); } - Label { Text: " Enemy Territory"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendEnemyLabel { Text: " Enemy Territory"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -91,13 +91,13 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #fbbf24); } - Label { Text: " Other Faction"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendOtherLabel { Text: " Other Faction"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #1e293b); } - Label { Text: " Wilderness"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendWildernessLabel { Text: " Wilderness"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -110,13 +110,13 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #2dd4bf); } - Label { Text: " Safe Zone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendSafeLabel { Text: " Safe Zone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Height: 16); Group { Anchor: (Width: 12, Height: 12); Background: (Color: #c084fc); } - Label { Text: " War Zone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendWarLabel { Text: " War Zone"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -129,7 +129,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 16); Label { Text: " + "; Style: (FontSize: 10, TextColor: #ffffff, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 16); } - Label { Text: "You are here"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendYouLabel { Text: "You are here"; Style: (FontSize: 10, TextColor: #cccccc, VerticalAlignment: Center); } } } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map_terrain.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map_terrain.ui index b1f60bae..25b074a9 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map_terrain.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/chunk_map_terrain.ui @@ -14,7 +14,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #MapTitle { @Text = "Territory Map"; } } @@ -75,25 +75,25 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Width: 110); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #4ade80); } - Label { Text: " Your Territory"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendYourLabel { Text: " Your Territory"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 100); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #60a5fa); } - Label { Text: " Ally Territory"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendAllyLabel { Text: " Ally Territory"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 110); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #f87171); } - Label { Text: " Enemy Territory"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendEnemyLabel { Text: " Enemy Territory"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 100); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #fbbf24); } - Label { Text: " Other Faction"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendOtherLabel { Text: " Other Faction"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } } @@ -106,19 +106,19 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Width: 110); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #2dd4bf); } - Label { Text: " Safe Zone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendSafeLabel { Text: " Safe Zone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 100); Group { Anchor: (Width: 10, Height: 10); Background: (Color: #c084fc); } - Label { Text: " War Zone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendWarLabel { Text: " War Zone"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } Group { LayoutMode: Left; Anchor: (Width: 110); Label { Text: " + "; Style: (FontSize: 9, TextColor: #ffffff, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 14); } - Label { Text: "You are here"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } + Label #LegendYouLabel { Text: "You are here"; Style: (FontSize: 9, TextColor: #cccccc, VerticalAlignment: Center); } } } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browse_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browse_entry.ui index e04c92b4..c1b0569f 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browse_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browse_entry.ui @@ -61,7 +61,7 @@ Group { Style: (FontSize: 12, TextColor: #44CC44, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #PowerLabel { Text: "power"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -78,7 +78,7 @@ Group { Style: (FontSize: 12, TextColor: #FFAA00, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #ClaimsLabel { Text: "claims"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -95,7 +95,7 @@ Group { Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #MemberLabel { Text: "members"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -136,18 +136,18 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #RecruitmentLabel { Text: "Recruitment:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 75); + Anchor: (Width: 95); } Label #RecruitmentStatus { Text: "Unknown"; Style: (FontSize: 10, TextColor: #888888, VerticalAlignment: Center); - Anchor: (Width: 100); + Anchor: (Width: 90); } - Label { + Label #CreatedLabel { Text: "Created:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 55); @@ -164,10 +164,10 @@ Group { LayoutMode: Left; Anchor: (Height: 18, Bottom: 6); - Label { + Label #DescriptionLabel { Text: "Description:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 75); + Anchor: (Width: 85); } Label #Description { Text: "No description set"; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browser.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browser.ui index 40f034b9..b4a543d1 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browser.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_browser.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { Anchor: (Width: 700, Height: 500); #Title { - $C.@Title { + $C.@Title #BrowserTitle { @Text = "Browse Factions"; } } @@ -27,7 +27,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #SearchLabel { Text: "Search:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -52,7 +52,7 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 35); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_chat.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_chat.ui index 7133ea54..4324a158 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_chat.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_chat.ui @@ -12,7 +12,7 @@ $C.@PageOverlay { Anchor: (Width: 550, Height: 500); #Title { - $C.@Title { + $C.@Title #ChatTitle { @Text = "Faction Chat"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_dashboard.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_dashboard.ui index 711e76f1..272502b7 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_dashboard.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_dashboard.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #DashboardTitle { @Text = "Faction Dashboard"; } } @@ -64,7 +64,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #PowerLabel { Text: "Power"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -89,7 +89,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5, Right: 5); - Label { + Label #ClaimsLabel { Text: "Claims"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -114,7 +114,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #MembersLabel { Text: "Members"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -145,7 +145,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #RelationsLabel { Text: "Relations"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -170,7 +170,7 @@ $C.@PageOverlay { FlexWeight: 1; } } - Label { + Label #AllyEnemyLabel { Text: "ally / enemy"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -185,7 +185,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5, Right: 5); - Label { + Label #StatusLabel { Text: "Status"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -210,7 +210,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #InvitesLabel { Text: "Invites"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -235,7 +235,7 @@ $C.@PageOverlay { FlexWeight: 1; } } - Label { + Label #SentRequestsLabel { Text: "sent / requests"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -257,7 +257,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #TreasuryLabel { Text: "Treasury"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -283,7 +283,7 @@ $C.@PageOverlay { Anchor: (Left: 5, Right: 5); Visible: false; - Label { + Label #UpkeepLabel { Text: "Upkeep"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -293,7 +293,7 @@ $C.@PageOverlay { Style: (FontSize: 22, TextColor: #FF5555, RenderBold: true, HorizontalAlignment: Center, VerticalAlignment: Center); FlexWeight: 1; } - Label #UpkeepSubtext { + Label #PerCycleLabel { Text: "per cycle"; Style: (FontSize: 9, TextColor: #888888, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -308,7 +308,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #YourWalletLabel { Text: "Your Wallet"; Style: (FontSize: 10, TextColor: #666666, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 16); @@ -318,7 +318,7 @@ $C.@PageOverlay { Style: (FontSize: 22, TextColor: #AAAAAA, RenderBold: true, HorizontalAlignment: Center, VerticalAlignment: Center); FlexWeight: 1; } - Label { + Label #PersonalBalanceLabel { Text: "personal balance"; Style: (FontSize: 9, TextColor: #444444, HorizontalAlignment: Center, VerticalAlignment: Center); Anchor: (Height: 14); @@ -330,7 +330,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 25, Bottom: 8); - Label { + Label #QuickActionsLabel { Text: "Quick Actions"; Style: (FontSize: 11, TextColor: #666666, RenderBold: true); } @@ -347,7 +347,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #TeleportLabel { Text: "Teleport"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -361,7 +361,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #TerritoryLabel { Text: "Territory"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -375,7 +375,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #ChannelLabel { Text: "Channel"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -389,7 +389,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4); - Label { + Label #MembershipLabel { Text: "Membership"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -408,7 +408,7 @@ $C.@PageOverlay { Anchor: (Height: 25, Bottom: 5); LayoutMode: Left; - Label { + Label #RecentActivityLabel { Text: "Recent Activity"; Style: (FontSize: 11, TextColor: #666666, RenderBold: true); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invite_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invite_entry.ui index 8d66b25d..ddad2af2 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invite_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invite_entry.ui @@ -97,7 +97,7 @@ Group { LayoutMode: Left; Anchor: (Height: 18, Bottom: 6); - Label { + Label #MessageLabel { Text: "Message:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 70); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invites.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invites.ui index a1812230..9f94ccf3 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invites.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_invites.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { Anchor: (Width: 550, Height: 450); #Title { - $C.@Title { + $C.@Title #InvitesTitle { @Text = "Invites"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_leaderboard.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_leaderboard.ui index 906c6ad5..54a07763 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_leaderboard.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_leaderboard.ui @@ -12,7 +12,7 @@ $C.@PageOverlay { Anchor: (Width: 700, Height: 500); #Title { - $C.@Title { + $C.@Title #LeaderboardTitle { @Text = "Faction Leaderboard"; } } @@ -34,7 +34,7 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #RankByLabel { Text: "Rank by:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -51,12 +51,12 @@ $C.@PageOverlay { LayoutMode: Left; Padding: (Left: 12, Right: 12); - Label { + Label #ColRankLabel { Text: "#"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Width: 35); } - Label { + Label #ColFactionLabel { Text: "Faction"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 200); @@ -66,12 +66,12 @@ $C.@PageOverlay { Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Width: 100); } - Label { + Label #ColClaimsLabel { Text: "Claims"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Width: 70); } - Label { + Label #ColMembersLabel { Text: "Members"; Style: (FontSize: 10, TextColor: #666666, RenderBold: true, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Width: 70); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_members.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_members.ui index 6dc0e610..f6d0339b 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_members.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_members.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #MembersTitle { @Text = "Members"; } } @@ -28,7 +28,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #SearchLabel { Text: "Search:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -53,7 +53,7 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 35); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_modules.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_modules.ui index 81f677ee..d831121c 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_modules.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_modules.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #ModulesTitle { @Text = "Faction Modules"; } } @@ -27,7 +27,7 @@ $C.@PageOverlay { Group { Anchor: (Height: 35, Bottom: 10); - Label { + Label #ModulesDescription { Text: "Optional features to enhance your faction"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relation_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relation_entry.ui index 37db0a44..a44c8e44 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relation_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relation_entry.ui @@ -64,7 +64,7 @@ Group { Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #MemberLabel { Text: "members"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -81,7 +81,7 @@ Group { Style: (FontSize: 12, TextColor: #44CC44, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #PowerLabel { Text: "power"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -122,7 +122,7 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #SinceLabel { Text: "Since:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 50); @@ -133,10 +133,10 @@ Group { Anchor: (Width: 100); } - Label { + Label #ClaimsLabel { Text: "Claims:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 50); + Anchor: (Width: 55); } Label #ClaimsValue { Text: "0"; @@ -150,10 +150,10 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #DirectionLabel { Text: "Direction:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 65); + Anchor: (Width: 70); } Label #DirectionValue { Text: "Incoming"; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relations.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relations.ui index c864760a..7a793b49 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relations.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_relations.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { Anchor: (Width: 550, Height: 500); #Title { - $C.@Title { + $C.@Title #RelationsTitle { @Text = "Relations"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_settings.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_settings.ui index d5f603d5..c99392c0 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_settings.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_settings.ui @@ -15,7 +15,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #SettingsTitle { @Text = "Faction Settings"; } } @@ -38,7 +38,7 @@ $C.@PageOverlay { Padding: (Left: 0, Right: 8, Top: 0, Bottom: 0); // --- General --- - Label { + Label #GeneralHeader { Text: "General"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -59,7 +59,7 @@ $C.@PageOverlay { Anchor: (Height: 32, Bottom: 4); LayoutMode: Left; - Label { + Label #NameLabel { Text: "Name:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -81,7 +81,7 @@ $C.@PageOverlay { Anchor: (Height: 32, Bottom: 4); LayoutMode: Left; - Label { + Label #TagLabel { Text: "Tag:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -103,7 +103,7 @@ $C.@PageOverlay { Anchor: (Height: 32); LayoutMode: Left; - Label { + Label #DescLabel { Text: "Desc:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -122,7 +122,7 @@ $C.@PageOverlay { } // --- Recruitment --- - Label { + Label #RecruitmentHeader { Text: "Recruitment"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -142,7 +142,7 @@ $C.@PageOverlay { Anchor: (Height: 32); LayoutMode: Left; - Label { + Label #StatusLabel { Text: "Status:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -156,7 +156,7 @@ $C.@PageOverlay { } // --- Home Location --- - Label { + Label #HomeLocationHeader { Text: "Home Location"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -176,7 +176,7 @@ $C.@PageOverlay { Anchor: (Height: 28, Bottom: 4); LayoutMode: Left; - Label { + Label #LocationLabel { Text: "Location:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 60); @@ -217,7 +217,7 @@ $C.@PageOverlay { } // --- Optional Features --- - Label { + Label #OptionalFeaturesHeader { Text: "Optional Features"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -237,7 +237,7 @@ $C.@PageOverlay { Anchor: (Height: 32); LayoutMode: Left; - Label { + Label #ModulesDescLabel { Text: "Configure optional modules."; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); FlexWeight: 1; @@ -257,7 +257,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 8); - Label { + Label #DangerZoneHeader { Text: "Danger Zone"; Style: (FontSize: 11, TextColor: #FF5555, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -272,7 +272,7 @@ $C.@PageOverlay { Padding: (Left: 12, Right: 12, Top: 8, Bottom: 8); LayoutMode: Top; - Label { + Label #IrreversibleLabel { Text: "This action is irreversible."; Style: (FontSize: 10, TextColor: #AA5555); Anchor: (Height: 18, Bottom: 4); @@ -307,7 +307,7 @@ $C.@PageOverlay { Padding: (Left: 8, Right: 8, Top: 0, Bottom: 0); LayoutMode: Left; - Label { + Label #LockHintLabel { Text: "Some options may be locked by the server and won't accept changes."; Style: (FontSize: 9, TextColor: #555577, VerticalAlignment: Center); FlexWeight: 1; @@ -315,7 +315,7 @@ $C.@PageOverlay { } // ---- TERRITORY PERMISSIONS ---- - Label { + Label #TerritoryPermissionsHeader { Text: "Territory Permissions"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -338,22 +338,22 @@ $C.@PageOverlay { Padding: (Left: 6, Right: 6); Label { Anchor: (Width: 122); } - Label { + Label #ColOutLabel { Text: "Out"; Style: (FontSize: 9, TextColor: #AAAAAA, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColAllyLabel { Text: "Ally"; Style: (FontSize: 9, TextColor: #55FF55, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColMemLabel { Text: "Mem"; Style: (FontSize: 9, TextColor: #00FFFF, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColOffLabel { Text: "Off"; Style: (FontSize: 9, TextColor: #FFD700, RenderBold: true); Anchor: (Width: 52); @@ -361,7 +361,7 @@ $C.@PageOverlay { } // ---- BUILDING category ---- - Label { + Label #BuildingCatLabel { Text: "BUILDING"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2); @@ -374,7 +374,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #BreakPermLabel { Text: "Break"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -392,7 +392,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #PlacePermLabel { Text: "Place"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -404,12 +404,12 @@ $C.@PageOverlay { } // ---- INTERACTION category ---- - Label { + Label #InteractionCatLabel { Text: "INTERACTION"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2); } - Label { + Label #InteractionHintLabel { Text: "(children disabled when All is off)"; Style: (FontSize: 8, TextColor: #555566); Anchor: (Height: 12, Bottom: 2); @@ -422,7 +422,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #AllPermLabel { Text: "All"; Style: (FontSize: 11, TextColor: #CCCCCC, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 114); @@ -440,7 +440,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #DoorPermLabel { Text: "Door"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -458,7 +458,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #ChestPermLabel { Text: "Chest"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -476,7 +476,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #BenchPermLabel { Text: "Bench"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -494,7 +494,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #ProcessingPermLabel { Text: "Processing"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -512,7 +512,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #SeatPermLabel { Text: "Seat"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -530,7 +530,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #TransportPermLabel { Text: "Transport"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -542,7 +542,7 @@ $C.@PageOverlay { } // ---- OTHER PERMISSIONS category ---- - Label { + Label #OtherCatLabel { Text: "OTHER"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2, Top: 6); @@ -555,7 +555,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #CrateUsePermLabel { Text: "Crate Use"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -573,7 +573,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #NpcTamePermLabel { Text: "NPC Tame"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -591,7 +591,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PveDamagePermLabel { Text: "PvE Damage"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -617,7 +617,7 @@ $C.@PageOverlay { Padding: (Left: 8, Right: 0, Top: 0, Bottom: 0); // --- Appearance --- - Label { + Label #AppearanceHeader { Text: "Appearance"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -638,7 +638,7 @@ $C.@PageOverlay { Anchor: (Height: 28, Bottom: 4); LayoutMode: Left; - Label { + Label #ColorLabel { Text: "Color:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 42); @@ -671,12 +671,12 @@ $C.@PageOverlay { } // --- Mob Spawning --- - Label { + Label #MobSpawningHeader { Text: "Mob Spawning"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 2); } - Label { + Label #MobSpawningHintLabel { Text: "(children disabled when master is off)"; Style: (FontSize: 8, TextColor: #666666); Anchor: (Height: 12, Bottom: 4); @@ -699,7 +699,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #MobSpawningMasterLabel { Text: "Mob Spawning"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 120); @@ -718,7 +718,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #HostileMobsLabel { Text: "Hostile Mobs"; Style: (FontSize: 10, TextColor: #FF5555, VerticalAlignment: Center); Anchor: (Width: 108); @@ -737,7 +737,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PassiveMobsLabel { Text: "Passive Mobs"; Style: (FontSize: 10, TextColor: #55FF55, VerticalAlignment: Center); Anchor: (Width: 108); @@ -756,7 +756,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #NeutralMobsLabel { Text: "Neutral Mobs"; Style: (FontSize: 10, TextColor: #FFFF55, VerticalAlignment: Center); Anchor: (Width: 108); @@ -770,7 +770,7 @@ $C.@PageOverlay { } // --- Faction Settings --- - Label { + Label #FactionSettingsHeader { Text: "Faction Settings"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -793,7 +793,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PvpLabel { Text: "PvP in Territory"; Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 120); @@ -817,7 +817,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #OfficersCanEditLabel { Text: "Officers can edit"; Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 120); @@ -826,7 +826,7 @@ $C.@PageOverlay { @Text = ""; @Checked = false; Anchor: (Height: 24, Width: 40); } - Label { + Label #LeaderOnlyLabel { Text: "Leader only"; Style: (FontSize: 9, TextColor: #FFD700, VerticalAlignment: Center); FlexWeight: 1; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_treasury.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_treasury.ui index e1bc89ce..bf3338f6 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_treasury.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/faction_treasury.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #TreasuryTitle { @Text = "Faction Treasury"; } } @@ -36,7 +36,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 5); - Label { + Label #BalanceLabel { Text: "Balance"; Style: (FontSize: 10, TextColor: #666666); Anchor: (Height: 16); @@ -61,7 +61,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5, Right: 5); - Label { + Label #IncomeLabel { Text: "Income (24h)"; Style: (FontSize: 10, TextColor: #666666); Anchor: (Height: 16); @@ -71,7 +71,7 @@ $C.@PageOverlay { Style: (FontSize: 22, TextColor: #44CC44, RenderBold: true); FlexWeight: 1; } - Label { + Label #IncomeDescLabel { Text: "deposits, transfers in"; Style: (FontSize: 10, TextColor: #888888); Anchor: (Height: 14); @@ -86,7 +86,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 5); - Label { + Label #ExpensesLabel { Text: "Expenses (24h)"; Style: (FontSize: 10, TextColor: #666666); Anchor: (Height: 16); @@ -96,7 +96,7 @@ $C.@PageOverlay { Style: (FontSize: 22, TextColor: #FF5555, RenderBold: true); FlexWeight: 1; } - Label { + Label #ExpensesDescLabel { Text: "withdrawals, transfers out"; Style: (FontSize: 10, TextColor: #888888); Anchor: (Height: 14); @@ -117,7 +117,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 18); - Label { + Label #MaintenanceLabel { Text: "MAINTENANCE"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); } @@ -177,7 +177,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 16, Bottom: 4); - Label { + Label #RunwayLabel { Text: "Runway:"; Style: (FontSize: 10, TextColor: #888888); Anchor: (Width: 55); @@ -281,7 +281,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #AddFundsLabel { Text: "Add funds"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -300,7 +300,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #TakeFundsLabel { Text: "Take funds"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -319,7 +319,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #SendToFactionLabel { Text: "Send to faction"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -340,7 +340,7 @@ $C.@PageOverlay { Anchor: (Left: 4); Visible: false; - Label { + Label #TreasuryConfigLabel { Text: "Treasury config"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 4); @@ -364,7 +364,7 @@ $C.@PageOverlay { Anchor: (Height: 22); LayoutMode: Left; - Label { + Label #RecentTransactionsLabel { Text: "Recent Transactions"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); FlexWeight: 1; @@ -382,27 +382,27 @@ $C.@PageOverlay { Anchor: (Height: 20); LayoutMode: Left; - Label { + Label #ColDateLabel { Text: "Date"; Style: (FontSize: 10, TextColor: #555555); - Anchor: (Width: 100); + Anchor: (Width: 80); } - Label { + Label #ColTypeLabel { Text: "Type"; Style: (FontSize: 10, TextColor: #555555); - Anchor: (Width: 100); + Anchor: (Width: 155); } - Label { + Label #ColByLabel { Text: "By"; Style: (FontSize: 10, TextColor: #555555); - Anchor: (Width: 90); + Anchor: (Width: 75); } - Label { + Label #ColAmountLabel { Text: "Amount"; Style: (FontSize: 10, TextColor: #555555); - Anchor: (Width: 100); + Anchor: (Width: 80); } - Label { + Label #ColDetailsLabel { Text: "Details"; Style: (FontSize: 10, TextColor: #555555); FlexWeight: 1; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/logs_viewer.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/logs_viewer.ui index a42d7673..57c9c2a5 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/logs_viewer.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/logs_viewer.ui @@ -34,7 +34,7 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #FilterLabel { Text: "Filter:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 40); @@ -51,17 +51,17 @@ $C.@PageOverlay { LayoutMode: Left; Padding: (Left: 12, Right: 12); - Label { + Label #ColTimeLabel { Text: "Time"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 90); } - Label { + Label #ColTypeLabel { Text: "Type"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); Anchor: (Width: 75); } - Label { + Label #ColMessageLabel { Text: "Message"; Style: (FontSize: 10, TextColor: #555555, VerticalAlignment: Center); FlexWeight: 1; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/member_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/member_entry.ui index 8564050e..829c9ae7 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/member_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/member_entry.ui @@ -93,7 +93,7 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #PowerLabel { Text: "Power:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 45); @@ -104,10 +104,10 @@ Group { Anchor: (Width: 60); } - Label { + Label #JoinedLabel { Text: "Joined:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 45); + Anchor: (Width: 50); } Label #JoinedDate { Text: "Unknown"; @@ -115,10 +115,10 @@ Group { Anchor: (Width: 80); } - Label { + Label #LastDeathLabel { Text: "Last Death:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 65); + Anchor: (Width: 75); } Label #LastDeath { Text: "Never"; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/player_info.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/player_info.ui index d099267b..a6b607d0 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/player_info.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/player_info.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { Anchor: (Width: 560, Height: 580); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Player Info"; } } @@ -47,21 +47,21 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 18); - Label { + Label #FirstJoinedLabel { Text: "First joined:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 75); + Anchor: (Width: 110); } Label #FirstJoinedValue { Text: ""; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); - Anchor: (Width: 130); + Anchor: (Width: 110); } - Label { + Label #LastOnlineLabel { Text: "Last online:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 70); + Anchor: (Width: 100); } Label #LastOnlineValue { Text: ""; @@ -82,7 +82,7 @@ $C.@PageOverlay { Anchor: (Height: 22); LayoutMode: Left; - Label { + Label #FactionLabel { Text: "Faction:"; Style: (FontSize: 12, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 60); @@ -99,7 +99,7 @@ $C.@PageOverlay { Anchor: (Height: 22); LayoutMode: Left; - Label { + Label #RoleLabel { Text: "Role:"; Style: (FontSize: 12, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 60); @@ -116,7 +116,7 @@ $C.@PageOverlay { Anchor: (Height: 26); LayoutMode: Left; - Label { + Label #JoinedLabel { Text: "Joined:"; Style: (FontSize: 12, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 60); @@ -158,7 +158,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #PowerHeader { Text: "Power"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -168,7 +168,7 @@ $C.@PageOverlay { Style: (FontSize: 20, TextColor: #FFFFFF, RenderBold: true); FlexWeight: 1; } - Label { + Label #PowerSubtitle { Text: "current / max"; Style: (FontSize: 9, TextColor: #444444); Anchor: (Height: 14); @@ -183,7 +183,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #CombatHeader { Text: "Combat"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -208,7 +208,7 @@ $C.@PageOverlay { FlexWeight: 1; } } - Label { + Label #CombatSubtitle { Text: "kills / deaths"; Style: (FontSize: 9, TextColor: #444444); Anchor: (Height: 14); @@ -223,7 +223,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4); - Label { + Label #KDRHeader { Text: "K/D Ratio"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -259,7 +259,7 @@ $C.@PageOverlay { Anchor: (Height: 20, Bottom: 4); LayoutMode: Left; - Label { + Label #MembershipHistoryLabel { Text: "Membership History"; Style: (FontSize: 11, TextColor: #666666, RenderBold: true); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/transfer_confirm.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/transfer_confirm.ui index 49874f64..e5c3ec18 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/transfer_confirm.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/transfer_confirm.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Transfer Leadership"; } } @@ -20,7 +20,7 @@ $C.@PageOverlay { LayoutMode: Top; Padding: (Left: 20, Right: 20, Top: 15, Bottom: 15); - Label { + Label #ConfirmText { Text: "Are you sure you want to transfer leadership to"; Style: (FontSize: 13, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 22); @@ -32,7 +32,7 @@ $C.@PageOverlay { Anchor: (Height: 24, Bottom: 8); } - Label { + Label #WarningText { Text: "You will become an Officer."; Style: (FontSize: 12, TextColor: #FFAA00, HorizontalAlignment: Center); Anchor: (Height: 20, Bottom: 15); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/faction/treasury_settings.ui b/src/main/resources/Common/UI/Custom/HyperFactions/faction/treasury_settings.ui index 7ea8b772..aafa5b54 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/faction/treasury_settings.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/faction/treasury_settings.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #TreasurySettingsTitle { @Text = "Treasury Settings"; } } @@ -21,7 +21,7 @@ $C.@PageOverlay { Padding: (Left: 20, Right: 20, Top: 10, Bottom: 10); // === Officer Permissions Section === - Label { + Label #OfficerPermissionsHeader { Text: "OFFICER PERMISSIONS"; Style: (FontSize: 10, TextColor: #00AAAA, RenderBold: true, RenderUppercase: true); Anchor: (Height: 18, Bottom: 4); @@ -61,7 +61,7 @@ $C.@PageOverlay { } // === Limits Section === - Label { + Label #LimitsHeader { Text: "WITHDRAWAL AND TRANSFER LIMITS"; Style: (FontSize: 10, TextColor: #00AAAA, RenderBold: true, RenderUppercase: true); Anchor: (Height: 18, Bottom: 4); @@ -76,7 +76,7 @@ $C.@PageOverlay { Group { LayoutMode: Left; Anchor: (Height: 28, Bottom: 4); - Label { + Label #MaxWithdrawLabel { Text: "Max per withdrawal:"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 200); @@ -90,7 +90,7 @@ $C.@PageOverlay { Group { LayoutMode: Left; Anchor: (Height: 28, Bottom: 4); - Label { + Label #MaxWithdrawPeriodLabel { Text: "Max withdrawals per period:"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 200); @@ -104,7 +104,7 @@ $C.@PageOverlay { Group { LayoutMode: Left; Anchor: (Height: 28, Bottom: 4); - Label { + Label #MaxTransferLabel { Text: "Max per transfer:"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 200); @@ -118,7 +118,7 @@ $C.@PageOverlay { Group { LayoutMode: Left; Anchor: (Height: 28, Bottom: 4); - Label { + Label #MaxTransferPeriodLabel { Text: "Max transfers per period:"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 200); @@ -132,7 +132,7 @@ $C.@PageOverlay { Group { LayoutMode: Left; Anchor: (Height: 28); - Label { + Label #PeriodHoursLabel { Text: "Limit period (hours):"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 200); @@ -144,7 +144,7 @@ $C.@PageOverlay { } } - Label { + Label #NoLimitHintLabel { Text: "Set to 0 for no limit"; Style: (FontSize: 9, TextColor: #555555); Anchor: (Height: 14, Bottom: 10); @@ -156,7 +156,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Bottom: 10); - Label { + Label #UpkeepSettingsHeader { Text: "UPKEEP SETTINGS"; Style: (FontSize: 10, TextColor: #00AAAA, RenderBold: true, RenderUppercase: true); Anchor: (Height: 18, Bottom: 4); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_bold.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_bold.ui new file mode 100644 index 00000000..3d36f0f3 --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_bold.ui @@ -0,0 +1,11 @@ +// Help content line - bold text (gray, bold, wrapping) + +Group { + Padding: (Top: 1, Bottom: 1); + + Label #Text { + Text: ""; + Style: (FontSize: 11, TextColor: #CCCCCC, RenderBold: true, Wrap: true, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0); + } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_callout.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_callout.ui new file mode 100644 index 00000000..e55387fa --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_callout.ui @@ -0,0 +1,17 @@ +// Help content line - callout box with colored left accent bar (wrapping) + +Group { + Padding: (Left: 12, Top: 3, Bottom: 3); + Background: (Color: #1a2a1a); + + Group #AccentBar { + Anchor: (Width: 3, Top: 0, Bottom: 0, Left: 0); + Background: (Color: #55FF55); + } + + Label #Text { + Text: ""; + Style: (FontSize: 11, TextColor: #55FF55, Wrap: true, VerticalAlignment: Center); + Anchor: (Left: 10, Right: 4); + } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_command.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_command.ui index 7d3734d5..ba654b4c 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_command.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_command.ui @@ -1,12 +1,11 @@ -// Help content line - command callout (yellow bold, slight indent) +// Help content line - command callout (yellow bold, slight indent, wrapping) Group { - Anchor: (Height: 16); - Padding: (Left: 8); + Padding: (Left: 8, Top: 1, Bottom: 1); Label #Text { Text: ""; - Style: (FontSize: 11, TextColor: #FFFF55, RenderBold: true); - Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); + Style: (FontSize: 11, TextColor: #FFFF55, RenderBold: true, Wrap: true, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0); } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_heading.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_heading.ui index 820b020e..a7014f50 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_heading.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_heading.ui @@ -1,11 +1,11 @@ // Help content line - sub-heading (teal bold, top margin) Group { - Anchor: (Height: 20, Top: 4); + Padding: (Top: 4, Bottom: 1); Label #Text { Text: ""; - Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true); - Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); + Style: (FontSize: 11, TextColor: #00AAAA, RenderBold: true, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0); } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_italic.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_italic.ui new file mode 100644 index 00000000..ce345851 --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_italic.ui @@ -0,0 +1,11 @@ +// Help content line - italic text (gray, italic, wrapping) + +Group { + Padding: (Top: 1, Bottom: 1); + + Label #Text { + Text: ""; + Style: (FontSize: 11, TextColor: #CCCCCC, RenderItalics: true, Wrap: true, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0); + } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_list.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_list.ui new file mode 100644 index 00000000..4ae34e43 --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_list.ui @@ -0,0 +1,11 @@ +// Help content line - list item with left indent (wrapping) + +Group { + Padding: (Left: 12, Top: 1, Bottom: 1); + + Label #Text { + Text: ""; + Style: (FontSize: 11, TextColor: #CCCCCC, Wrap: true, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0); + } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_text.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_text.ui index 8b91353b..2734b68b 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_text.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_text.ui @@ -1,11 +1,11 @@ -// Help content line - body text (gray) +// Help content line - body text (gray, wrapping) Group { - Anchor: (Height: 16); + Padding: (Top: 1, Bottom: 1); Label #Text { Text: ""; - Style: (FontSize: 11, TextColor: #CCCCCC); - Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); + Style: (FontSize: 11, TextColor: #CCCCCC, Wrap: true, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0); } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_tip.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_tip.ui index 6cb40070..3c5a011b 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_tip.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_line_tip.ui @@ -1,11 +1,11 @@ -// Help content line - tip callout (green) +// Help content line - tip callout (green, wrapping) Group { - Anchor: (Height: 16); + Padding: (Top: 1, Bottom: 1); Label #Text { Text: ""; - Style: (FontSize: 11, TextColor: #55FF55); - Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); + Style: (FontSize: 11, TextColor: #55FF55, Wrap: true, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0); } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_main.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_main.ui index ecfc68cf..ec4de588 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_main.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_main.ui @@ -1,4 +1,4 @@ -// Help Center - Wide sidebar layout (750x650) +// Help Center - Wide sidebar layout (863x748) // Left: Colored category sidebar (180px), Right: Scrollable card content $C = "../../Common.ui"; $S = "../shared/styles.ui"; @@ -115,11 +115,11 @@ $C.@PageOverlay { $Nav.@HyperFactionsNavBar #HyperFactionsNavBar {} $C.@DecoratedContainer { - Anchor: (Width: 750, Height: 650); + Anchor: (Width: 863, Height: 748); #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Help Center"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_separator.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_separator.ui new file mode 100644 index 00000000..85f6ca9a --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_separator.ui @@ -0,0 +1,10 @@ +// Help separator - visible horizontal rule + +Group { + Anchor: (Height: 10); + + Group { + Anchor: (Height: 1, Left: 4, Right: 4, Top: 4); + Background: (Color: #2a3a4a); + } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_cell.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_cell.ui new file mode 100644 index 00000000..55be9908 --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_cell.ui @@ -0,0 +1,18 @@ +// Help table cell - column value with left border separator + +Group { + FlexWeight: 1; + + // Left border (acts as column separator + table left border on first cell) + Group { + Anchor: (Width: 1, Left: 0, Top: 0, Bottom: 0); + Background: (Color: #2a3a4a); + } + + Label #CellText { + Text: ""; + Style: (FontSize: 10, TextColor: #CCCCCC, Wrap: true); + Padding: (Left: 10, Right: 8, Top: 4, Bottom: 4); + Anchor: (Left: 1, Right: 0); + } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_header.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_header.ui new file mode 100644 index 00000000..b927ca2d --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_header.ui @@ -0,0 +1,37 @@ +// Help table header row - Col0 in stretching Group, Col1 drives height + +Group { + Padding: (Top: 5, Bottom: 5); + Background: (Color: #141a28); + + // Column 1 wrapper - Group stretches vertically + Group { + Anchor: (Left: 2, Width: 217, Top: 0, Bottom: 0); + + Label #Col0 { + Text: ""; + Style: (FontSize: 10, TextColor: #DDDDDD, RenderBold: true, Wrap: true, VerticalAlignment: Center); + Padding: (Left: 12, Right: 8); + Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); + } + } + + // Column 2 - DRIVES row height through content wrapping + Label #Col1 { + Text: ""; + Style: (FontSize: 10, TextColor: #DDDDDD, RenderBold: true, Wrap: true); + Padding: (Left: 12, Right: 8, Top: 2, Bottom: 2); + Anchor: (Left: 222, Right: 2); + } + + // Top border + Group { Anchor: (Height: 1, Top: 0, Left: 0, Right: 0); Background: (Color: #2a3a4a); } + // Bottom border (thicker) + Group { Anchor: (Height: 2, Bottom: 0, Left: 0, Right: 0); Background: (Color: #2a3a4a); } + // Left border + Group { Anchor: (Width: 1, Left: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } + // Column separator + Group { Anchor: (Width: 1, Left: 220, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } + // Right border + Group { Anchor: (Width: 1, Right: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_header_cell.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_header_cell.ui new file mode 100644 index 00000000..a05d3cfa --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_header_cell.ui @@ -0,0 +1,18 @@ +// Help table header cell - bold label with left border separator + +Group { + FlexWeight: 1; + + // Left border (acts as column separator + table left border on first cell) + Group { + Anchor: (Width: 1, Left: 0, Top: 0, Bottom: 0); + Background: (Color: #2a3a4a); + } + + Label #CellText { + Text: ""; + Style: (FontSize: 10, TextColor: #CCCCCC, RenderBold: true, Wrap: true); + Padding: (Left: 10, Right: 8, Top: 4, Bottom: 4); + Anchor: (Left: 1, Right: 0); + } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_row.ui b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_row.ui new file mode 100644 index 00000000..fb246896 --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/help/help_table_row.ui @@ -0,0 +1,35 @@ +// Help table data row - Col0 in stretching Group (like callout AccentBar), Col1 drives height + +Group { + Padding: (Top: 4, Bottom: 4); + Background: (Color: #0f1520); + + // Column 1 wrapper - Group stretches vertically (like AccentBar in callout) + Group { + Anchor: (Left: 2, Width: 217, Top: 0, Bottom: 0); + + Label #Col0 { + Text: ""; + Style: (FontSize: 10, TextColor: #CCCCCC, Wrap: true, VerticalAlignment: Center); + Padding: (Left: 12, Right: 8); + Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); + } + } + + // Column 2 - DRIVES row height through content wrapping (like Text in callout) + Label #Col1 { + Text: ""; + Style: (FontSize: 10, TextColor: #CCCCCC, Wrap: true); + Padding: (Left: 12, Right: 8, Top: 2, Bottom: 2); + Anchor: (Left: 222, Right: 2); + } + + // Bottom border + Group { Anchor: (Height: 1, Bottom: 0, Left: 0, Right: 0); Background: (Color: #2a3a4a); } + // Left border + Group { Anchor: (Width: 1, Left: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } + // Column separator + Group { Anchor: (Width: 1, Left: 220, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } + // Right border + Group { Anchor: (Width: 1, Right: 0, Top: 0, Bottom: 0); Background: (Color: #2a3a4a); } +} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/nav/nav_bar.ui b/src/main/resources/Common/UI/Custom/HyperFactions/nav/nav_bar.ui index b068e8d4..885487c3 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/nav/nav_bar.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/nav/nav_bar.ui @@ -41,6 +41,7 @@ } Group #NavBarButtons { + FlexWeight: 1; LayoutMode: Left; } }; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/browse.ui b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/browse.ui index c5fc23b1..6ea3632c 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/browse.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/browse.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { Anchor: (Width: 700, Height: 500); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Browse Factions"; } } @@ -47,7 +47,7 @@ $C.@PageOverlay { Anchor: (Height: 38, Bottom: 8); LayoutMode: Left; - Label { + Label #SearchLabel { Text: "Search:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 55); @@ -66,7 +66,7 @@ $C.@PageOverlay { Group { FlexWeight: 1; } - Label { + Label #SortLabel { Text: "Sort:"; Style: (FontSize: 11, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 35); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/create_faction.ui b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/create_faction.ui index 56083a1b..3f9add62 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/create_faction.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/create_faction.ui @@ -14,7 +14,7 @@ $C.@PageOverlay { Anchor: (Width: 1000, Height: 700); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Create Your Faction"; } } @@ -35,7 +35,7 @@ $C.@PageOverlay { Padding: (Left: 0, Right: 8, Top: 0, Bottom: 0); // --- PREVIEW --- - Label { + Label #SectionPreview { Text: "Preview"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -55,7 +55,7 @@ $C.@PageOverlay { LayoutMode: Left; Anchor: (Height: 20); - Label { + Label #NamePrefix { Text: "Name: "; Style: (FontSize: 13, TextColor: #AAAAAA); } @@ -73,7 +73,7 @@ $C.@PageOverlay { } // --- BASIC INFO --- - Label { + Label #SectionBasicInfo { Text: "Basic Info"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -89,7 +89,7 @@ $C.@PageOverlay { Anchor: (Height: 130, Bottom: 12); LayoutMode: Top; - Label { + Label #FactionNameLabel { Text: "Faction Name *"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); @@ -98,7 +98,7 @@ $C.@PageOverlay { Anchor: (Height: 32, Bottom: 6); } - Label { + Label #TagLabel { Text: "TAG (2-4 chars, auto if empty)"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); @@ -114,7 +114,7 @@ $C.@PageOverlay { } // --- DETAILS --- - Label { + Label #SectionDetails { Text: "Details"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -129,7 +129,7 @@ $C.@PageOverlay { Padding: (Left: 12, Right: 12, Top: 10, Bottom: 10); LayoutMode: Top; - Label { + Label #DescLabel { Text: "Description (Optional)"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); @@ -138,7 +138,7 @@ $C.@PageOverlay { Anchor: (Height: 50, Bottom: 6); } - Label { + Label #RecruitmentLabel { Text: "Recruitment"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16, Bottom: 4); @@ -170,20 +170,20 @@ $C.@PageOverlay { // Lock hint Group { - Anchor: (Height: 22, Bottom: 6); + Anchor: (Height: 32, Bottom: 6); Background: (Color: #1a1a2a); - Padding: (Left: 8, Right: 8, Top: 0, Bottom: 0); + Padding: (Left: 8, Right: 8, Top: 4, Bottom: 4); LayoutMode: Left; - Label { + Label #LockHint { Text: "Some options may be locked by the server and won't accept changes."; - Style: (FontSize: 9, TextColor: #555577, VerticalAlignment: Center); + Style: (FontSize: 9, TextColor: #555577, VerticalAlignment: Center, Wrap: true); FlexWeight: 1; } } // ---- TERRITORY PERMISSIONS ---- - Label { + Label #TerritoryPermissionsLabel { Text: "Territory Permissions"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -205,22 +205,22 @@ $C.@PageOverlay { Padding: (Left: 6, Right: 6); Label { Anchor: (Width: 122); } - Label { + Label #ColOut { Text: "Out"; Style: (FontSize: 9, TextColor: #AAAAAA, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColAlly { Text: "Ally"; Style: (FontSize: 9, TextColor: #55FF55, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColMem { Text: "Mem"; Style: (FontSize: 9, TextColor: #00FFFF, RenderBold: true); Anchor: (Width: 52); } - Label { + Label #ColOff { Text: "Off"; Style: (FontSize: 9, TextColor: #FFD700, RenderBold: true); Anchor: (Width: 52); @@ -228,7 +228,7 @@ $C.@PageOverlay { } // ---- BUILDING category ---- - Label { + Label #CatBuilding { Text: "BUILDING"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2); @@ -241,7 +241,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermBreak { Text: "Break"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -259,7 +259,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #PermPlace { Text: "Place"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -271,12 +271,12 @@ $C.@PageOverlay { } // ---- INTERACTION category ---- - Label { + Label #CatInteraction { Text: "INTERACTION"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2); } - Label { + Label #InteractionHint { Text: "(children disabled when All is off)"; Style: (FontSize: 8, TextColor: #555566); Anchor: (Height: 12, Bottom: 2); @@ -289,7 +289,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermAll { Text: "All"; Style: (FontSize: 11, TextColor: #CCCCCC, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 114); @@ -307,7 +307,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermDoor { Text: "Door"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -325,7 +325,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermChest { Text: "Chest"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -343,7 +343,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermBench { Text: "Bench"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -361,7 +361,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermProcessing { Text: "Processing"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -379,7 +379,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermSeat { Text: "Seat"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -397,7 +397,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PermTransport { Text: "Transport"; Style: (FontSize: 10, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 102); @@ -409,7 +409,7 @@ $C.@PageOverlay { } // ---- OTHER PERMISSIONS category ---- - Label { + Label #CatOther { Text: "OTHER"; Style: (FontSize: 9, TextColor: #666688, RenderBold: true); Anchor: (Height: 16, Bottom: 2, Top: 6); @@ -422,7 +422,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermCrate { Text: "Crate Use"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -440,7 +440,7 @@ $C.@PageOverlay { Background: (Color: #111a28); Padding: (Left: 6, Right: 6); - Label { + Label #PermNpcTame { Text: "NPC Tame"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -458,7 +458,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PermPve { Text: "PvE Damage"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 114); @@ -484,7 +484,7 @@ $C.@PageOverlay { Padding: (Left: 8, Right: 0, Top: 0, Bottom: 0); // --- FACTION COLOR --- - Label { + Label #SectionFactionColor { Text: "Faction Color"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -506,12 +506,12 @@ $C.@PageOverlay { } // --- MOB SPAWNING --- - Label { + Label #SectionMobSpawning { Text: "Mob Spawning"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 2); } - Label { + Label #MobSpawningHint { Text: "(children disabled when master is off)"; Style: (FontSize: 8, TextColor: #666666); Anchor: (Height: 12, Bottom: 4); @@ -534,7 +534,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #MobSpawningLabel { Text: "Mob Spawning"; Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); Anchor: (Width: 120); @@ -553,7 +553,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #HostileMobsLabel { Text: "Hostile Mobs"; Style: (FontSize: 10, TextColor: #FF5555, VerticalAlignment: Center); Anchor: (Width: 108); @@ -572,7 +572,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #PassiveMobsLabel { Text: "Passive Mobs"; Style: (FontSize: 10, TextColor: #55FF55, VerticalAlignment: Center); Anchor: (Width: 108); @@ -591,7 +591,7 @@ $C.@PageOverlay { Background: (Color: #0a1018); Padding: (Left: 18, Right: 6); - Label { + Label #NeutralMobsLabel { Text: "Neutral Mobs"; Style: (FontSize: 10, TextColor: #FFFF55, VerticalAlignment: Center); Anchor: (Width: 108); @@ -605,7 +605,7 @@ $C.@PageOverlay { } // --- COMBAT --- - Label { + Label #SectionCombat { Text: "Combat"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); Anchor: (Height: 18, Bottom: 4); @@ -627,7 +627,7 @@ $C.@PageOverlay { Background: (Color: #0d1520); Padding: (Left: 6, Right: 6); - Label { + Label #PvPLabel { Text: "PvP in Territory"; Style: (FontSize: 11, TextColor: #AAAAAA, VerticalAlignment: Center); Anchor: (Width: 120); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/help.ui b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/help.ui index 5c3290ad..76450572 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/help.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/help.ui @@ -13,7 +13,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Getting Started"; } } @@ -29,37 +29,37 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Height: 120, Bottom: 20); - Label { + Label #WhatTitle { Text: "What Are Factions?"; Style: (FontSize: 13, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22); } - Label { + Label #WhatDesc1 { Text: "Factions are player-created groups that work together"; Style: (FontSize: 12, TextColor: #CCCCCC); Anchor: (Height: 18); } - Label { + Label #WhatDesc2 { Text: "to claim territory, build bases, and compete."; Style: (FontSize: 12, TextColor: #CCCCCC); Anchor: (Height: 18); } - Label { + Label #WhatBullet1 { Text: "- Protected territory for building"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); } - Label { + Label #WhatBullet2 { Text: "- Teammates to play with"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); } - Label { + Label #WhatBullet3 { Text: "- Access to faction chat and features"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); @@ -71,31 +71,31 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Height: 95, Bottom: 20); - Label { + Label #JoinTitle { Text: "Joining a Faction"; Style: (FontSize: 13, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22); } - Label { + Label #JoinDesc { Text: "There are several ways to join a faction:"; Style: (FontSize: 12, TextColor: #CCCCCC); Anchor: (Height: 20); } - Label { + Label #JoinBullet1 { Text: "- Browse - Find open factions and click JOIN"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); } - Label { + Label #JoinBullet2 { Text: "- Invites - Accept invitations from officers"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); } - Label { + Label #JoinBullet3 { Text: "- Request - Ask to join invite-only factions"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); @@ -107,25 +107,25 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Height: 80, Bottom: 20); - Label { + Label #CreateTitle { Text: "Creating a Faction"; Style: (FontSize: 13, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22); } - Label { + Label #CreateDesc { Text: "Go to the Create tab to start your own faction."; Style: (FontSize: 12, TextColor: #CCCCCC); Anchor: (Height: 20); } - Label { + Label #CreateBullet1 { Text: "- Invite and manage members"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); } - Label { + Label #CreateBullet2 { Text: "- Claim and protect territory"; Style: (FontSize: 11, TextColor: #AAAAAA); Anchor: (Height: 16); @@ -137,37 +137,37 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Height: 130, Bottom: 10); - Label { + Label #CmdTitle { Text: "Quick Commands"; Style: (FontSize: 13, TextColor: #00FFFF, RenderBold: true); Anchor: (Height: 22); } - Label { + Label #CmdF { Text: "/f - Open faction menu"; Style: (FontSize: 11, TextColor: #FFFF55); Anchor: (Height: 16); } - Label { + Label #CmdFList { Text: "/f list - List all factions"; Style: (FontSize: 11, TextColor: #FFFF55); Anchor: (Height: 16); } - Label { + Label #CmdFJoin { Text: "/f join - Join an open faction"; Style: (FontSize: 11, TextColor: #FFFF55); Anchor: (Height: 16); } - Label { + Label #CmdFCreate { Text: "/f create - Create a new faction"; Style: (FontSize: 11, TextColor: #FFFF55); Anchor: (Height: 16); } - Label { + Label #CmdFHelp { Text: "/f help - Full command list"; Style: (FontSize: 11, TextColor: #FFFF55); Anchor: (Height: 16); @@ -180,7 +180,7 @@ $C.@PageOverlay { Background: (Color: #1a2a3a); Padding: (Left: 10, Right: 10, Top: 10, Bottom: 10); - Label { + Label #TipText { Text: "Tip: Browse factions to find a group that matches you!"; Style: (FontSize: 12, TextColor: #55FF55); } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/invites.ui b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/invites.ui index a5c99b3a..4677a707 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/invites.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/invites.ui @@ -15,7 +15,7 @@ $C.@PageOverlay { Group { LayoutMode: Left; - $C.@Title { + $C.@Title #PageTitle { @Text = "Invites & Requests"; } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/map_readonly.ui b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/map_readonly.ui index 0fe9f2a5..c581c9aa 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/map_readonly.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/map_readonly.ui @@ -15,7 +15,7 @@ $C.@PageOverlay { Group { LayoutMode: Left; - $C.@Title { + $C.@Title #PageTitle { @Text = "Territory Map"; } @@ -58,7 +58,7 @@ $C.@PageOverlay { Anchor: (Height: 60, Top: 10); LayoutMode: Top; - Label { + Label #LegendTitle { Text: "Legend:"; Style: (FontSize: 11, TextColor: #888888); Anchor: (Height: 18); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/newplayer_faction_entry.ui b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/newplayer_faction_entry.ui index b5b0f46c..888e2439 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/newplayer_faction_entry.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/newplayer/newplayer_faction_entry.ui @@ -45,7 +45,7 @@ Group { Style: (FontSize: 12, TextColor: #44CC44, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #PowerLabel { Text: "power"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -62,7 +62,7 @@ Group { Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 18); } - Label { + Label #MemberLabel { Text: "members"; Style: (FontSize: 9, TextColor: #666666, VerticalAlignment: Center, HorizontalAlignment: Center); Anchor: (Height: 14); @@ -103,7 +103,7 @@ Group { LayoutMode: Left; Anchor: (Height: 20, Bottom: 4); - Label { + Label #LeaderLabel { Text: "Leader:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 50); @@ -114,7 +114,7 @@ Group { Anchor: (Width: 120); } - Label { + Label #ClaimsLabel { Text: "Claims:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); Anchor: (Width: 50); @@ -131,10 +131,10 @@ Group { LayoutMode: Left; Anchor: (Height: 18, Bottom: 6); - Label { + Label #DescriptionLabel { Text: "Description:"; Style: (FontSize: 10, TextColor: #666666, VerticalAlignment: Center); - Anchor: (Width: 75); + Anchor: (Width: 85); } Label #Description { Text: "No description set"; diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/description_modal.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/description_modal.ui index 965e6e64..61256f9b 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/description_modal.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/description_modal.ui @@ -9,7 +9,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Edit Description"; } } @@ -24,7 +24,7 @@ $C.@PageOverlay { Anchor: (Height: 36, Bottom: 10); LayoutMode: Left; - Label { + Label #CurrentLabel { Text: "Current:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 70); @@ -38,7 +38,7 @@ $C.@PageOverlay { } // New description input - Label { + Label #NewDescLabel { Text: "New Description:"; Style: (FontSize: 12, TextColor: #888888); Anchor: (Height: 24, Bottom: 4); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/disband_confirm.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/disband_confirm.ui index 4335c62f..8e44cf30 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/disband_confirm.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/disband_confirm.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Disband Faction"; } } @@ -20,7 +20,7 @@ $C.@PageOverlay { LayoutMode: Top; Padding: (Left: 20, Right: 20, Top: 15, Bottom: 15); - Label { + Label #ConfirmText { Text: "Are you sure you want to disband"; Style: (FontSize: 13, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 22); @@ -32,7 +32,7 @@ $C.@PageOverlay { Anchor: (Height: 24, Bottom: 8); } - Label { + Label #WarningText { Text: "This action cannot be undone!"; Style: (FontSize: 12, TextColor: #AA5555, HorizontalAlignment: Center); Anchor: (Height: 20, Bottom: 15); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/error_page.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/error_page.ui index aca968f8..b7946574 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/error_page.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/error_page.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Error"; } } diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/faction_info.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/faction_info.ui index 35386344..6d83227c 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/faction_info.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/faction_info.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { Anchor: (Width: 560, Height: 520); #Title { - $C.@Title { + $C.@Title #PageTitle { @Text = "Faction Info"; } } @@ -69,7 +69,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #PowerHeader { Text: "Power"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -79,7 +79,7 @@ $C.@PageOverlay { Style: (FontSize: 20, TextColor: #44CC44, RenderBold: true); FlexWeight: 1; } - Label { + Label #PowerSubtitle { Text: "current / max"; Style: (FontSize: 9, TextColor: #444444); Anchor: (Height: 14); @@ -94,7 +94,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #ClaimsHeader { Text: "Claims"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -104,7 +104,7 @@ $C.@PageOverlay { Style: (FontSize: 20, TextColor: #FFAA00, RenderBold: true); FlexWeight: 1; } - Label { + Label #ClaimsSubtitle { Text: "claimed / max"; Style: (FontSize: 9, TextColor: #444444); Anchor: (Height: 14); @@ -119,7 +119,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4); - Label { + Label #MembersHeader { Text: "Members"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -150,7 +150,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Right: 4); - Label { + Label #RelationsHeader { Text: "Relations"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -175,7 +175,7 @@ $C.@PageOverlay { FlexWeight: 1; } } - Label { + Label #RelationsSubtitle { Text: "ally / enemy"; Style: (FontSize: 9, TextColor: #444444); Anchor: (Height: 14); @@ -190,7 +190,7 @@ $C.@PageOverlay { LayoutMode: Top; Anchor: (Left: 4, Right: 4); - Label { + Label #StatusHeader { Text: "Status"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -216,7 +216,7 @@ $C.@PageOverlay { Anchor: (Left: 4); Visible: false; - Label { + Label #TreasuryHeader { Text: "Treasury"; Style: (FontSize: 9, TextColor: #666666); Anchor: (Height: 14); @@ -226,7 +226,7 @@ $C.@PageOverlay { Style: (FontSize: 18, TextColor: #FFD700, RenderBold: true); FlexWeight: 1; } - Label { + Label #TreasurySubtitle { Text: "faction balance"; Style: (FontSize: 9, TextColor: #444444); Anchor: (Height: 14); @@ -247,7 +247,7 @@ $C.@PageOverlay { Padding: (Left: 12, Right: 12, Top: 8, Bottom: 8); LayoutMode: Left; - Label { + Label #LeaderLabel { Text: "Leader:"; Style: (FontSize: 12, TextColor: #FFD700, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 65); @@ -260,7 +260,7 @@ $C.@PageOverlay { Label { Anchor: (Width: 30); } - Label { + Label #OfficersLabel { Text: "Officers:"; Style: (FontSize: 12, TextColor: #87CEEB, RenderBold: true, VerticalAlignment: Center); Anchor: (Width: 70); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/leader_leave_confirm.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/leader_leave_confirm.ui index 60958272..65ef7ba1 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/leader_leave_confirm.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/leader_leave_confirm.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Leave as Leader"; } } @@ -20,7 +20,7 @@ $C.@PageOverlay { LayoutMode: Top; Padding: (Left: 20, Right: 20, Top: 15, Bottom: 15); - Label { + Label #ConfirmText { Text: "You are leaving"; Style: (FontSize: 13, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 22); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/leave_confirm.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/leave_confirm.ui index c3581561..ea731b13 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/leave_confirm.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/leave_confirm.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Leave Faction"; } } @@ -20,7 +20,7 @@ $C.@PageOverlay { LayoutMode: Top; Padding: (Left: 20, Right: 20, Top: 15, Bottom: 15); - Label { + Label #ConfirmText { Text: "Are you sure you want to leave"; Style: (FontSize: 13, TextColor: #AAAAAA, HorizontalAlignment: Center); Anchor: (Height: 22); @@ -32,7 +32,7 @@ $C.@PageOverlay { Anchor: (Height: 24, Bottom: 8); } - Label { + Label #WarningText { Text: "You will lose access to faction territory."; Style: (FontSize: 12, TextColor: #888888, HorizontalAlignment: Center); Anchor: (Height: 20, Bottom: 15); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/player_settings.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/player_settings.ui new file mode 100644 index 00000000..d33111e8 --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/player_settings.ui @@ -0,0 +1,176 @@ +// Player Settings Page - Language & Notification Preferences +// Available to all players (faction and non-faction) + +$C = "../../Common.ui"; +$S = "../shared/styles.ui"; +$Nav = "../nav/nav_bar.ui"; + +$C.@PageOverlay { + $Nav.@HyperFactionsNavBar #HyperFactionsNavBar {} + + $C.@Container { + Anchor: (Width: 550, Height: 480); + + #Title { + $C.@Title #PageTitle { + @Text = "Player Settings"; + } + } + + #Content { + LayoutMode: Top; + Padding: (Left: 20, Right: 20, Top: 10, Bottom: 10); + + // === Language Section === + Label #LanguageSectionTitle { + Text: "Language"; + Style: (FontSize: 13, TextColor: #55FFFF, RenderBold: true); + Anchor: (Height: 22, Bottom: 4); + } + Group { + Anchor: (Height: 1, Bottom: 8); + Background: (Color: #334455); + } + + Group { + Background: (Color: #1a2a3a); + Padding: (Left: 12, Right: 12, Top: 8, Bottom: 8); + LayoutMode: Top; + Anchor: (Bottom: 12); + + // Auto-detect checkbox + label + Group { + LayoutMode: Left; + Anchor: (Height: 28, Bottom: 2); + + $C.@CheckBoxWithLabel #AutoDetectCB { + @Text = ""; + @Checked = true; + Anchor: (Height: 28, Width: 30); + } + Label #AutoDetectLabel { + Text: "Auto-detect from client"; + Style: (FontSize: 12, TextColor: #CCCCCC, VerticalAlignment: Center); + } + } + + Label #AutoDetectDesc { + Anchor: (Height: 16, Bottom: 8); + Style: (FontSize: 10, TextColor: #666666); + Text: "Uses your game client's language setting"; + } + + // Language dropdown row + Group #LanguageRow { + Anchor: (Height: 32); + LayoutMode: Left; + + Label #LanguageLabel { + Anchor: (Width: 80, Height: 26); + Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); + Text: "Language"; + } + + DropdownBox #LanguageDropdown { + Style: $C.@DefaultDropdownBoxStyle; + Anchor: (Height: 28, Width: 220); + } + } + } + + // === Notifications Section === + Label #NotifSectionTitle { + Text: "Notifications"; + Style: (FontSize: 13, TextColor: #55FFFF, RenderBold: true); + Anchor: (Height: 22, Bottom: 4); + } + Group { + Anchor: (Height: 1, Bottom: 8); + Background: (Color: #334455); + } + + Group { + Background: (Color: #1a2a3a); + Padding: (Left: 12, Right: 12, Top: 8, Bottom: 8); + LayoutMode: Top; + + // Territory Alerts + Group { + LayoutMode: Left; + Anchor: (Height: 28, Bottom: 1); + Background: (Color: #0d1520); + Padding: (Left: 6, Right: 6); + + Label #TerritoryAlertsLabel { + Text: "Territory Alerts"; + Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); + Anchor: (Width: 160); + } + Label { FlexWeight: 1; } + $C.@CheckBoxWithLabel #TerritoryAlertsCB { + @Text = ""; @Checked = true; + Anchor: (Height: 22, Width: 44); + } + } + + Label #TerritoryAlertsDesc { + Anchor: (Height: 16, Bottom: 6); + Style: (FontSize: 10, TextColor: #555555); + Text: "Show notifications when entering/leaving territories"; + } + + // Death Announcements + Group { + LayoutMode: Left; + Anchor: (Height: 28, Bottom: 1); + Background: (Color: #111a28); + Padding: (Left: 6, Right: 6); + + Label #DeathAnnounceLabel { + Text: "Death Broadcasts"; + Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); + Anchor: (Width: 160); + } + Label { FlexWeight: 1; } + $C.@CheckBoxWithLabel #DeathAnnounceCB { + @Text = ""; @Checked = true; + Anchor: (Height: 22, Width: 44); + } + } + + Label #DeathAnnounceDesc { + Anchor: (Height: 16, Bottom: 6); + Style: (FontSize: 10, TextColor: #555555); + Text: "Receive faction member death location announcements"; + } + + // Power Notifications + Group { + LayoutMode: Left; + Anchor: (Height: 28, Bottom: 1); + Background: (Color: #0d1520); + Padding: (Left: 6, Right: 6); + + Label #PowerNotifLabel { + Text: "Power Changes"; + Style: (FontSize: 11, TextColor: #CCCCCC, VerticalAlignment: Center); + Anchor: (Width: 160); + } + Label { FlexWeight: 1; } + $C.@CheckBoxWithLabel #PowerNotifCB { + @Text = ""; @Checked = true; + Anchor: (Height: 22, Width: 44); + } + } + + Label #PowerNotifDesc { + Anchor: (Height: 16); + Style: (FontSize: 10, TextColor: #555555); + Text: "Show messages when your power changes"; + } + } + } + } +} + +$C.@BackButton {} diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/rename_modal.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/rename_modal.ui index 31923e3e..29cde4e8 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/rename_modal.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/rename_modal.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Rename Faction"; } } @@ -25,7 +25,7 @@ $C.@PageOverlay { Anchor: (Height: 24, Bottom: 10); LayoutMode: Left; - Label { + Label #CurrentLabel { Text: "Current:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 70); @@ -39,7 +39,7 @@ $C.@PageOverlay { } // New name input - Label { + Label #NewNameLabel { Text: "New Name:"; Style: (FontSize: 12, TextColor: #888888); Anchor: (Height: 24, Bottom: 4); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/shared/tag_modal.ui b/src/main/resources/Common/UI/Custom/HyperFactions/shared/tag_modal.ui index 422454b6..3b051562 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/shared/tag_modal.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/shared/tag_modal.ui @@ -10,7 +10,7 @@ $C.@PageOverlay { #Title { Group { - $C.@Title { + $C.@Title #PageTitle { @Text = "Edit Tag"; } } @@ -25,7 +25,7 @@ $C.@PageOverlay { Anchor: (Height: 28, Bottom: 10); LayoutMode: Left; - Label { + Label #CurrentLabel { Text: "Current:"; Style: (FontSize: 12, TextColor: #888888, VerticalAlignment: Center); Anchor: (Width: 70); @@ -39,7 +39,7 @@ $C.@PageOverlay { } // Instructions - Label { + Label #TagInstructions { Text: "Tag (1-5 chars, letters and numbers only):"; Style: (FontSize: 12, TextColor: #888888); Anchor: (Height: 24, Bottom: 4); @@ -51,7 +51,7 @@ $C.@PageOverlay { } // Help text - Label { + Label #TagHelpText { Text: "Tags appear in chat and on the map"; Style: (FontSize: 10, TextColor: #555555, HorizontalAlignment: Center); Anchor: (Height: 16, Bottom: 10); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/test/button_test.ui b/src/main/resources/Common/UI/Custom/HyperFactions/test/button_test.ui index 4f2cd1d2..f57097ae 100644 --- a/src/main/resources/Common/UI/Custom/HyperFactions/test/button_test.ui +++ b/src/main/resources/Common/UI/Custom/HyperFactions/test/button_test.ui @@ -1,5 +1,5 @@ // Element & Style Test Page — Permanent debug/research page -// Open via: /f admin testgui +// Open via: /f admin test gui $C = "../../Common.ui"; $S = "../shared/styles.ui"; @@ -249,7 +249,38 @@ $C.@PageOverlay { ColorPicker #TestColorPicker { DisplayTextField: true; Style: $C.@DefaultColorPickerStyle; - Anchor: (Height: 180, Bottom: 4); + Anchor: (Height: 180, Bottom: 8); + } + + Label { + Text: "TAB NAVIGATION"; + Style: (FontSize: 11, TextColor: #888888, RenderBold: true); + Anchor: (Height: 20, Bottom: 4); + } + + TabNavigation #TestTabNav { + Style: $C.@HeaderTabsStyle; + Anchor: (Height: 34, Bottom: 8); + } + + Label { + Text: "HEADER SEARCH"; + Style: (FontSize: 11, TextColor: #888888, RenderBold: true); + Anchor: (Height: 20, Bottom: 4); + } + + $C.@HeaderSearch #TestHeaderSearch { + Anchor: (Height: 36, Bottom: 8); + } + + Label { + Text: "PROGRESS BAR TEMPLATE"; + Style: (FontSize: 11, TextColor: #888888, RenderBold: true); + Anchor: (Height: 20, Bottom: 4); + } + + $C.@ProgressBar #TestProgressBarTpl { + Anchor: (Height: 16, Bottom: 8); } } @@ -368,6 +399,75 @@ $C.@PageOverlay { } } + Label { + Text: "TOOLTIP DEMO"; + Style: (FontSize: 11, TextColor: #888888, RenderBold: true); + Anchor: (Height: 20, Bottom: 4); + } + + TextButton #TestTooltipBtn { + Text: "HOVER FOR TOOLTIP"; + Anchor: (Height: 36, Bottom: 8); + Style: $C.@DefaultTextButtonStyle; + TooltipText: "This is a tooltip! Tooltips can show contextual information."; + TextTooltipStyle: $C.@DefaultTextTooltipStyle; + } + + Label { + Text: "CONTENT SEPARATOR"; + Style: (FontSize: 11, TextColor: #888888, RenderBold: true); + Anchor: (Height: 20, Bottom: 4); + } + + $C.@ContentSeparator { + Anchor: (Bottom: 4); + } + + $C.@PanelSeparatorFancy { + Anchor: (Bottom: 8); + } + + Label { + Text: "MULTILINE TEXT FIELD"; + Style: (FontSize: 11, TextColor: #888888, RenderBold: true); + Anchor: (Height: 20, Bottom: 4); + } + + $C.@MultilineTextField #TestMultilineField { + Anchor: (Height: 80, Bottom: 8); + } + + Label { + Text: "PANEL / SIMPLE CONTAINER"; + Style: (FontSize: 11, TextColor: #888888, RenderBold: true); + Anchor: (Height: 20, Bottom: 4); + } + + $C.@SimpleContainer #TestSimpleContainer { + Anchor: (Height: 60, Bottom: 4); + Padding: (Full: 10); + LayoutMode: Top; + Label { + Text: "Inside SimpleContainer"; + Style: (FontSize: 11, TextColor: #aaaaaa); + Anchor: (Height: 18); + } + } + + $C.@Panel #TestPanel { + Anchor: (Height: 80, Bottom: 8); + Padding: (Full: 10); + LayoutMode: Top; + $C.@PanelTitle { + @Text = "Panel Title"; + } + Label { + Text: "Content inside Panel template"; + Style: (FontSize: 11, TextColor: #aaaaaa); + Anchor: (Height: 18); + } + } + Label { Text: "JAVA-APPENDED (Value.ref)"; Style: (FontSize: 11, TextColor: #888888, RenderBold: true); diff --git a/src/main/resources/Common/UI/Custom/HyperFactions/test/markdown_test.ui b/src/main/resources/Common/UI/Custom/HyperFactions/test/markdown_test.ui new file mode 100644 index 00000000..3d841044 --- /dev/null +++ b/src/main/resources/Common/UI/Custom/HyperFactions/test/markdown_test.ui @@ -0,0 +1,32 @@ +// Markdown rendering test page — /f admin test md +$C = "../../Common.ui"; + +Group { + Anchor: (Width: 700, Height: 650); + Background: (Color: #0d1117); + + // Title bar + Group { + Anchor: (Height: 40, Top: 0, Left: 0, Right: 0); + Background: (Color: #161b22); + + Label #PageTitle { + Text: "Markdown Test Page"; + Style: (FontSize: 14, TextColor: #00AAAA, RenderBold: true, HorizontalAlignment: Center, VerticalAlignment: Center); + Anchor: (Left: 0, Right: 0, Top: 0, Bottom: 0); + } + } + + // Scrollable content area + Group { + Anchor: (Top: 44, Left: 12, Right: 12, Bottom: 12); + LayoutMode: TopScrolling; + ScrollbarStyle: $C.@DefaultScrollbarStyle; + + // Content entries appended here by Java + Group #ContentList { + LayoutMode: Top; + Anchor: (Left: 0, Right: 0); + } + } +} diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..fe963cc1 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Konfigurationssystem + +HyperFactions verwendet ein modulares JSON-Konfigurationssystem mit 11 Konfigurationsdateien. + +## Admin-Konfigurationsbefehle + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin config` | Visuellen Konfigurationseditor-GUI oeffnen | +| `/f admin reload` | Alle Konfigurationsdateien von der Festplatte neu laden | +| `/f admin sync` | Fraktionsdaten mit dem Speicher synchronisieren | + +## Konfigurationsdateien + +| Datei | Inhalt | +|------|----------| +| `factions.json` | Rollen, Macht, Ansprueche, Kampf, Beziehungen | +| `server.json` | Teleport, Auto-Speichern, Nachrichten, GUI, Berechtigungen | +| `economy.json` | Schatzkammer, Unterhalt, Transaktionseinstellungen | +| `backup.json` | Backup-Rotation und Aufbewahrungseinstellungen | +| `chat.json` | Fraktions- und Verbuendeten-Chat-Formatierung | +| `debug.json` | Debug-Protokollierungskategorien | +| `faction-permissions.json` | Standard-Berechtigungen pro Rolle | +| `announcements.json` | Event-Broadcasts und Gebietsbenachrichtigungen | +| `gravestones.json` | Grabstein-Integrationseinstellungen | +| `worldmap.json` | Weltkarten-Aktualisierungsmodi | +| `worlds.json` | Welt-spezifische Verhaltensaenderungen | + +>[!TIP] Das Konfigurations-GUI bietet einen visuellen Editor mit Beschreibungen fuer jede Einstellung. Aenderungen werden sofort gespeichert, aber einige erfordern `/f admin reload`, um vollstaendig wirksam zu werden. + +## Konfigurationsort + +Alle Dateien sind gespeichert in: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Manuelle JSON-Bearbeitungen erfordern `/f admin reload` zur Anwendung. Ungueltiges JSON fuehrt dazu, dass die Datei mit einer Warnung im Serverlog uebersprungen wird. + +>[!NOTE] Die Konfigurationsversion wird in `server.json` verfolgt. Das Plugin migriert aeltere Konfigurationen beim Start automatisch. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..be031540 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Welt-spezifische Einstellungen + +HyperFactions unterstuetzt welt-spezifische Konfiguration fuer Beanspruchung, PvP und Schutzverhalten. + +## Welt-Befehle + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin world list` | Alle Welt-Ueberschreibungen auflisten | +| `/f admin world info ` | Einstellungen fuer eine Welt anzeigen | +| `/f admin world set ` | Eine Einstellung setzen | +| `/f admin world reset ` | Welt auf Standards zuruecksetzen | + +## Verfuegbare Einstellungen + +| Einstellung | Typ | Beschreibung | +|---------|------|-------------| +| claiming_enabled | boolean | Fraktions-Beanspruchungen in dieser Welt erlauben | +| pvp_enabled | boolean | PvP-Kampf in dieser Welt erlauben | +| power_loss | boolean | Machtverlust bei Tod anwenden | +| build_protection | boolean | Anspruchs-Bauschutz durchsetzen | +| explosion_protection | boolean | Ansprueche vor Explosionen schuetzen | + +## Welt-Whitelist / Blacklist + +Steuere, welche Welten Fraktionsfunktionen erlauben, ueber die `worlds.json` Konfigurationsdatei: + +- **Whitelist-Modus**: Nur gelistete Welten erlauben Beanspruchung +- **Blacklist-Modus**: Alle Welten erlauben Beanspruchung ausser den gelisteten + +>[!INFO] Welt-Einstellungen sind in `worlds.json` gespeichert und ueberschreiben die globalen Standards aus `factions.json`. + +## Beispiele + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- alle Standards wiederherstellen + +>[!TIP] Deaktiviere Beanspruchung in Kreativ- oder Lobby-Welten, um das Fraktionssystem auf das Survival-Gameplay zu konzentrieren. + +>[!NOTE] Welt-spezifische Einstellungen haben Vorrang vor der globalen Konfiguration, werden aber von Zonen-Flags innerhalb dieser Welt ueberschrieben. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..ca9c1f4d --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Schatzkammer-Verwaltung + +Admin-Befehle zur Verwaltung von Fraktions-Schatzkammern. Erfordert die `hyperfactions.admin.economy` Berechtigung. + +## Schatzkammer-Befehle + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin economy balance ` | Schatzkammer-Kontostand der Fraktion anzeigen | +| `/f admin economy set ` | Exakten Kontostand setzen | +| `/f admin economy add ` | Mittel zur Schatzkammer hinzufuegen | +| `/f admin economy take ` | Mittel aus der Schatzkammer entfernen | +| `/f admin economy reset ` | Schatzkammer auf Null zuruecksetzen | + +## Beispiele + +- `/f admin economy balance Vikings` -- Kontostand pruefen +- `/f admin economy set Vikings 5000` -- auf 5000 setzen +- `/f admin economy add Vikings 1000` -- 1000 einzahlen +- `/f admin economy take Vikings 500` -- 500 abheben +- `/f admin economy reset Vikings` -- Kontostand nullen + +>[!TIP] Nutze `/f admin info `, um die vollstaendige Wirtschaftsuebersicht einschliesslich Transaktionsverlauf zusammen mit dem Schatzkammer-Kontostand zu sehen. + +## Anwendungsfaelle + +| Szenario | Befehl | +|----------|---------| +| Event-Preisverteilung | `economy add ` | +| Strafe fuer Regelverstoss | `economy take ` | +| Wirtschaftsreset nach Wipe | `economy reset ` | +| Kompensation fuer Fehler | `economy add ` | + +>[!WARNING] Schatzkammer-Aenderungen werden im Transaktionsverlauf der Fraktion protokolliert. Admin-Aenderungen werden mit dem Namen des Admins fuer die Nachverfolgung aufgezeichnet. + +>[!NOTE] Alle Wirtschafts-Admin-Befehle funktionieren auch dann, wenn das Wirtschaftsmodul in der Konfiguration deaktiviert ist. Die Daten werden unabhaengig vom Modulstatus gespeichert. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..a23fc3c4 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Unterhaltsverwaltung + +Fraktionsunterhalt belastet Fraktionen periodisch basierend auf ihrem Gebiet und ihrer Mitgliederzahl. + +## Admin-Steuerung + +Unterhaltseinstellungen werden ueber die Wirtschafts-Konfigurationsdatei oder das Admin-Konfigurations-GUI verwaltet. + +`/f admin config` +Oeffne den Konfigurationseditor und navigiere zu den Wirtschaftseinstellungen, um Unterhaltswerte anzupassen. + +## Standard-Unterhaltseinstellungen + +| Einstellung | Standard | Beschreibung | +|---------|---------|-------------| +| Unterhalt aktiviert | false | Hauptschalter fuer das System | +| Unterhaltsintervall | 24h | Wie oft Unterhalt berechnet wird | +| Kosten pro Anspruch | 5.0 | Kosten pro beanspruchtem Chunk pro Zyklus | +| Kosten pro Mitglied | 0.0 | Kosten pro Mitglied pro Zyklus | +| Gnadenfrist | 72h | Neue Fraktionen sind befreit | +| Aufloesung bei Bankrott | false | Automatische Aufloesung bei Zahlungsunfaehigkeit | + +## Unterhalt ueberwachen + +Nutze `/f admin info `, um zu sehen: +- Aktueller Schatzkammer-Kontostand +- Geschaetzte Unterhaltskosten pro Zyklus +- Zeit bis zur naechsten Unterhaltsberechnung +- Ob die Fraktion sich den Unterhalt leisten kann + +>[!TIP] Ueberpreufe die Wirtschaftsstatistiken aller Fraktionen vom Admin-Dashboard aus, um Fraktionen zu identifizieren, die vor dem Unterhaltszeitpunkt bankrottgefaehrdet sind. + +>[!INFO] Die Unterhaltskonfiguration ist in `economy.json` gespeichert. Aenderungen ueber das Konfigurations-GUI werden nach dem Neuladen mit `/f admin reload` wirksam. + +## Unterhaltsformel + +**Gesamtunterhalt** = (beanspruchte Chunks x Kosten pro Anspruch) + (Mitgliederzahl x Kosten pro Mitglied) + +>[!WARNING] Das Aktivieren von Unterhalt auf einem Server mit bestehenden Fraktionen kann unerwartete Bankrotte verursachen. Erwaege, eine Gnadenfrist festzulegen oder die Aenderung im Voraus anzukuendigen. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..ee74502e --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Zwangsaufloesung + +Admins koennen jede Fraktion zwangsweise aufloesen, unabhaengig vom Wunsch des Anfuehrers. + +## Befehl + +`/f admin disband ` +Loest die genannte Fraktion zwangsweise auf. Eine Bestaetigungsabfrage erscheint, bevor die Aktion ausgefuehrt wird. + +**Berechtigung**: `hyperfactions.admin.disband` + +>[!WARNING] Das Aufloesen einer Fraktion ist **unwiderruflich**. Alle Ansprueche werden freigegeben, alle Mitglieder werden entfernt und die Fraktion hoert auf zu existieren. Erstelle zuerst ein Backup. + +## Konsequenzen + +Wenn eine Fraktion aufgeloest wird: + +| Auswirkung | Beschreibung | +|--------|-------------| +| **Ansprueche** | Alles Gebiet wird sofort freigegeben | +| **Mitglieder** | Alle Spieler werden aus der Liste entfernt | +| **Beziehungen** | Alle Allianzen und Feindschaften werden geloescht | +| **Schatzkammer** | Wird gemaess Wirtschaftskonfiguration behandelt | +| **Zuhause** | Fraktions-Zuhause wird geloescht | +| **Chat** | Fraktions-Chatverlauf wird entfernt | + +## Empfohlene Vorgehensweise + +1. Fuehre immer `/f admin backup create` vor der Aufloesung aus +2. Benachrichtige die Fraktionsmitglieder wenn moeglich +3. Dokumentiere den Grund fuer die Serveraufzeichnungen +4. Pruefe `/f admin info ` zur Ueberpruefung vor dem Handeln + +>[!TIP] Wenn das Problem bei einem bestimmten Mitglied liegt, erwaege, ueber das Admin-Fraktions-GUI die Fuehrung zu uebertragen, anstatt die gesamte Fraktion aufzuloesen. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..2497a0e6 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Fraktionen verwalten + +Admins koennen jede Fraktion auf dem Server ueber das Dashboard oder Befehle einsehen und aendern. + +## Fraktionen durchsuchen + +`/f admin factions` +Oeffnet den Admin-Fraktionsbrowser. Zeigt alle Fraktionen mit Mitgliederzahlen, Machtwerten und Gebiet an. + +`/f admin info ` +Oeffnet das Admin-Infopanel fuer eine bestimmte Fraktion mit allen Details und Verwaltungsoptionen. + +## Fraktionseinstellungen aendern + +Mit der `hyperfactions.admin.modify` Berechtigung kannst du: + +- Fraktion **umbenennen**, um Konflikte zu loesen +- **Farbe setzen**, um Anzeigeprobleme zu beheben +- **Offen/Geschlossen umschalten**, um die Beitrittspolitik zu ueberschreiben +- **Beschreibung bearbeiten** fuer Moderationszwecke + +>[!TIP] Nutze `/f admin who `, um nachzuschlagen, zu welcher Fraktion ein bestimmter Spieler gehoert, und seine Details einzusehen. + +## Mitglieder und Beziehungen einsehen + +Das Admin-Infopanel zeigt: + +| Bereich | Details | +|---------|---------| +| **Mitglieder** | Vollstaendige Liste mit Rollen und letzter Aktivitaet | +| **Beziehungen** | Alle Verbuendeten-, Feind- und Neutral-Verhaeltnisse | +| **Gebiet** | Beanspruchte Chunks und Machtbilanz | +| **Wirtschaft** | Schatzkammer-Kontostand und Transaktionsprotokoll | + +>[!NOTE] Admin-Einsichtsbefehle benachrichtigen die eingesehene Fraktion nicht. Nur Aenderungen loesen Benachrichtigungen aus. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..f46b6a86 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Backup-System + +HyperFactions beinhaltet automatische und manuelle Backups mit GFS-Rotation (Grossvater-Vater-Sohn). + +## Backup-Befehle + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin backup create` | Jetzt ein manuelles Backup erstellen | +| `/f admin backup list` | Alle verfuegbaren Backups auflisten | +| `/f admin backup restore ` | Aus einem Backup wiederherstellen | +| `/f admin backup delete ` | Ein bestimmtes Backup loeschen | + +**Berechtigung**: `hyperfactions.admin.backup` + +## GFS-Rotationsstandards + +| Typ | Aufbewahrung | Beschreibung | +|------|-----------|-------------| +| Stuendlich | 24 | Letzte 24 stuendliche Schnappschuesse | +| Taeglich | 7 | Letzte 7 taegliche Schnappschuesse | +| Woechentlich | 4 | Letzte 4 woechentliche Schnappschuesse | +| Manuell | 10 | Manuell erstellte Backups | +| Herunterfahren | 5 | Beim Server-Stopp erstellt | + +>[!INFO] Herunterfahren-Backups sind standardmaessig aktiviert (`onShutdown=true`). Sie erfassen den letzten Stand vor dem Server-Stopp. + +## Backup-Inhalte + +Jedes Backup-ZIP-Archiv enthaelt: +- Alle Fraktionsdaten-Dateien +- Spieler-Machtdaten +- Zonendefinitionen +- Chatverlauf und Wirtschaftsdaten +- Einladungs- und Beitrittsanfragedaten +- Konfigurationsdateien + +>[!WARNING] **Das Wiederherstellen eines Backups ist destruktiv.** Es ersetzt alle aktuellen Daten durch den Inhalt des Backups. Alle Aenderungen nach der Backup-Erstellung gehen verloren. Erstelle immer ein frisches Backup vor der Wiederherstellung. + +## Empfohlene Vorgehensweise + +1. Erstelle ein manuelles Backup vor groesseren Admin-Aktionen +2. Ueberpreufe die Backup-Aufbewahrung in `backup.json` +3. Teste die Wiederherstellung zuerst auf einem Testserver +4. Halte Herunterfahren-Backups fuer Absturzwiederherstellung aktiviert diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..143dcb65 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Datenimport + +Importiere Fraktionsdaten von anderen Plugins, um deinen Server zu HyperFactions zu migrieren. + +## Import-Befehl + +`/f admin import [path] [flags]` + +**Berechtigung**: `hyperfactions.admin.use` + +## Unterstuetzte Quellen + +| Quelle | Beschreibung | +|--------|-------------| +| `elbaphfactions` | Import von ElbaphFactions-Daten | +| `hyfactions` | Import von HyFactions v1-Daten | + +## Import-Flags + +| Flag | Beschreibung | +|------|-------------| +| `--dry-run` | Daten validieren, ohne etwas zu importieren | +| `--overwrite` | Bestehende Fraktionen mit gleichem Namen ueberschreiben | +| `--no-zones` | Zonendaten beim Import ueberspringen | +| `--no-power` | Machtdaten beim Import ueberspringen | + +>[!TIP] Fuehre immer zuerst mit `--dry-run` aus, um eine Vorschau dessen zu erhalten, was importiert wird, und Datenprobleme vor der endgueltigen Uebernahme zu erkennen. + +## Importprozess + +1. Ein Vor-Import-Backup wird automatisch erstellt +2. Spielernamens-Zuordnungen werden geladen +3. Fraktionen, Ansprueche und Zonen werden konvertiert +4. Daten werden validiert und gespeichert + +## Beispiele + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Die Verwendung von `--overwrite` wird jede bestehende Fraktion **ersetzen**, die denselben Namen wie eine importierte Fraktion traegt. Mitgliederdaten und Ansprueche werden ueberschrieben. Fuehre zuerst `--dry-run` aus, um Konflikte zu identifizieren. + +>[!NOTE] Einige quellenspezifische Daten (z.B. Arbeitergrundstucke, Farmgrundstucke) haben kein Aequivalent in HyperFactions und werden als Warnungen waehrend des Imports protokolliert. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..dbf8aa19 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Update-Pruefung + +HyperFactions kann nach neuen Versionen suchen und die HyperProtect-Mixin-Abhaengigkeit verwalten. + +## Update-Befehle + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin update` | Nach HyperFactions-Updates suchen | +| `/f admin update mixin` | HyperProtect-Mixin pruefen/herunterladen | +| `/f admin update toggle-mixin-download` | Automatischen Download umschalten | +| `/f admin version` | Aktuelle Version und Build-Info anzeigen | + +## Release-Kanaele + +| Kanal | Beschreibung | +|---------|-------------| +| **Stable** | Empfohlen fuer Produktivserver | +| **Pre-release** | Fruehzeitiger Zugang zu kommenden Funktionen | + +>[!INFO] Die Update-Pruefung benachrichtigt nur ueber neue Versionen. Sie installiert **keine** Updates fuer HyperFactions selbst automatisch. + +## HyperProtect-Mixin + +HyperProtect-Mixin ist das empfohlene Schutz-Mixin, das erweiterte Zonen-Flags aktiviert (Explosionen, Feuerausbreitung, Inventar behalten usw.). + +- `/f admin update mixin` prueft auf die neueste Version +und laedt sie herunter, wenn eine neuere Version verfuegbar ist +- Automatischer Download kann pro Server ein- oder ausgeschaltet werden + +>[!TIP] Nach dem Herunterladen einer neuen Mixin-Version ist ein Serverneustart erforderlich, damit die Aenderungen wirksam werden. + +## Rollback-Verfahren + +Wenn ein Update Probleme verursacht: + +1. Stoppe den Server +2. Ersetze die Plugin-JAR-Datei durch die vorherige Version +3. Starte den Server +4. Ueberpreufe die Funktionalitaet mit `/f admin version` + +>[!WARNING] Ein Downgrade kann ein Zuruecksetzen der Konfigurationsmigration erfordern. Halte immer Backups bereit, bevor du aktualisierst. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..9516be85 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Erste Schritte als Admin + +Willkommen in der HyperFactions-Administration. Dieser Leitfaden behandelt deine ersten Schritte nach der Installation des Plugins. + +## Das Admin-Dashboard oeffnen + +`/f admin` +Oeffnet das Admin-Dashboard-GUI mit Zugang zu allen Verwaltungswerkzeugen, Zonen-Editoren und Servereinstellungen. + +>[!INFO] Du benoetigst die **hyperfactions.admin.use** Berechtigung oder OP-Status, um auf Admin-Befehle zugreifen zu koennen. + +## Voraussetzungen + +- **Mit einem Berechtigungs-Plugin**: Vergib `hyperfactions.admin.use` +- **Ohne Berechtigungs-Plugin**: Der Spieler muss ein +Server-Operator sein (`adminRequiresOp=true` standardmaessig) + +## Erste Schritte nach der Installation + +1. Fuehre `/f admin` aus, um deinen Zugang zu ueberpruefen +2. Oeffne **Config**, um die Standard-Fraktionseinstellungen zu ueberpruefen +3. Erstelle eine **SafeZone** am Spawn mit `/f admin safezone Spawn` +4. Erstelle optional **WarZones** fuer PvP-Arenen +5. Ueberpreufe die **Backup**-Einstellungen, um Datensicherheit zu gewaehrleisten + +## Admin-Faehigkeiten + +| Bereich | Moeglichkeiten | +|------|----------------| +| Fraktionen | Jede Fraktion einsehen, aendern oder zwangsaufloesen | +| Zonen | SafeZones und WarZones mit benutzerdefinierten Flags erstellen | +| Macht | Spieler-/Fraktionsmachtwerte ueberschreiben | +| Wirtschaft | Fraktions-Schatzkammern und Unterhalt verwalten | +| Konfiguration | Einstellungen live ueber GUI bearbeiten oder von der Festplatte neu laden | +| Backups | Datensicherungen erstellen, wiederherstellen und verwalten | +| Importe | Daten von anderen Fraktions-Plugins migrieren | + +>[!TIP] Nutze `/f admin --text`, um Chat-basierte Ausgabe statt des GUIs zu erhalten -- nuetzlich fuer Konsole oder Automatisierung. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..51b8eaf0 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Admin-Berechtigungen + +Alle Admin-Funktionen sind hinter Berechtigungsknoten im `hyperfactions.admin`-Namensraum gesperrt. + +## Berechtigungsknoten + +| Berechtigung | Beschreibung | +|-----------|-------------| +| `hyperfactions.admin.*` | Gewaehrt **alle** Admin-Berechtigungen | +| `hyperfactions.admin.use` | Zugang zum `/f admin` Dashboard | +| `hyperfactions.admin.reload` | Konfigurationsdateien neu laden | +| `hyperfactions.admin.debug` | Debug-Protokollierungskategorien umschalten | +| `hyperfactions.admin.zones` | Zonen erstellen, bearbeiten und loeschen | +| `hyperfactions.admin.disband` | Jede Fraktion zwangsaufloesen | +| `hyperfactions.admin.modify` | Einstellungen jeder Fraktion aendern | +| `hyperfactions.admin.bypass.limits` | Anspruchs- und Machtgrenzen umgehen | +| `hyperfactions.admin.backup` | Backups erstellen und wiederherstellen | +| `hyperfactions.admin.power` | Spieler-Machtwerte ueberschreiben | +| `hyperfactions.admin.economy` | Fraktions-Schatzkammern verwalten | + +## Fallback-Verhalten + +Wenn **kein Berechtigungs-Plugin** installiert ist, fallen Admin-Berechtigungen auf den Server-Operator (OP)-Status zurueck. Dies wird durch `adminRequiresOp` in der Serverkonfiguration gesteuert (Standard: `true`). + +>[!NOTE] Der `hyperfactions.admin.*`-Platzhalter gewaehrt jede Admin-Berechtigung. Nutze individuelle Knoten fuer granulare Kontrolle ueber dein Team. + +## Reihenfolge der Berechtigungsaufloesung + +1. **VaultUnlocked** Anbieter (falls verfuegbar) +2. **HyperPerms** Anbieter (falls verfuegbar) +3. **LuckPerms** Anbieter (falls verfuegbar) +4. **OP-Pruefung** fuer Admin-Knoten (Fallback) + +>[!WARNING] Ohne Berechtigungs-Plugin und mit deaktiviertem `adminRequiresOp` sind Admin-Befehle **fuer alle Spieler offen**. Verwende im Produktivbetrieb immer ein Berechtigungs-Plugin. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..011e5266 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Macht-Admin-Befehle + +Spieler- und Fraktionsmachtwerte ueberschreiben. Alle Befehle erfordern die `hyperfactions.admin.power` Berechtigung. + +## Spieler-Machtbefehle + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin power set ` | Exakten Machtwert setzen | +| `/f admin power add ` | Macht zum Spieler hinzufuegen | +| `/f admin power remove ` | Macht vom Spieler entfernen | +| `/f admin power reset ` | Auf Standard-Startmacht zuruecksetzen | +| `/f admin power info ` | Detaillierte Machtaufschluesselung anzeigen | + +## Wie Macht Fraktionen beeinflusst + +Die Gesamtmacht einer Fraktion ist die Summe der individuellen Macht aller Mitglieder. Gebietsansprueche erfordern ausreichend Gesamtmacht fuer den Unterhalt. + +| Szenario | Auswirkung | +|----------|--------| +| Macht hoeher gesetzt | Fraktion kann mehr Gebiet beanspruchen | +| Macht niedriger gesetzt | Fraktion kann anfaellig fuer Uebernahmen werden | +| Macht zurueckgesetzt | Setzt Spieler auf Standard-Startwert zurueck | + +>[!WARNING] Das Senken der Macht eines Spielers kann dazu fuehren, dass seine Fraktion Gebiet verliert, wenn die Gesamtmacht unter die Anzahl der beanspruchten Chunks faellt. + +## Beispiele + +- `/f admin power set Steve 50` -- auf genau 50 setzen +- `/f admin power add Steve 10` -- um 10 erhoehen +- `/f admin power remove Steve 5` -- um 5 verringern +- `/f admin power reset Steve` -- auf Standard zuruecksetzen +- `/f admin power info Steve` -- vollstaendige Aufschluesselung anzeigen + +>[!TIP] Nutze `/f admin power info `, um aktuelle Macht, maximale Macht und aktive Ueberschreibungen zu sehen, bevor du Aenderungen vornimmst. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..d39ff32b --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Macht-Ueberschreibungen + +Spezielle Machtbefehle, die das Machtverhalten fuer bestimmte Spieler oder Fraktionen aendern. + +## Ueberschreibungsbefehle + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin power setmax ` | Benutzerdefiniertes Macht-Maximum setzen | +| `/f admin power noloss ` | Todes-Machtverlust-Immunitaet umschalten | +| `/f admin power nodecay ` | Offline-Machtverfall-Immunitaet umschalten | +| `/f admin power info ` | Alle Ueberschreibungen und Machtdetails anzeigen | + +## Benutzerdefiniertes Macht-Maximum + +`/f admin power setmax ` +Setzt ein persoenliches maximales Macht-Limit fuer den Spieler, das den Serverstandard ueberschreibt. + +>[!INFO] Das Setzen eines benutzerdefinierten Maximums aendert **nicht** die aktuelle Macht. Es aendert nur die Obergrenze. Der Spieler muss Macht bis zum neuen Limit noch verdienen. + +## Kein-Verlust-Modus + +`/f admin power noloss ` +Schaltet die Todes-Machtverlust-Immunitaet um. Wenn aktiviert, verliert der Spieler beim Tod **keine** Macht. + +Nuetzlich fuer: +- Schutzperioden fuer neue Spieler +- Event-Teilnehmer +- Team-Mitglieder + +## Kein-Verfall-Modus + +`/f admin power nodecay ` +Schaltet die Offline-Machtverfall-Immunitaet um. Wenn aktiviert, wird die Macht des Spielers im Offline-Zustand **nicht** abnehmen. + +Nuetzlich fuer: +- Spieler in laengerer Abwesenheit +- VIP-Mitglieder +- Saisonaler Schutz + +## Macht-Info + +`/f admin power info ` +Zeigt eine vollstaendige Aufschluesselung: + +- Aktuelle Macht und maximale Macht +- Aktive Ueberschreibungen (noloss, nodecay, benutzerdefiniertes Maximum) +- Letzter Todeszeitpunkt und verlorene Macht +- Fraktionsbeitragsprozentsatz + +>[!TIP] Alle Macht-Ueberschreibungen bleiben ueber Serverneustarts bestehen und werden in der Datendatei des Spielers gespeichert. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..5d239eaa --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Admin-Befehlsreferenz + +Vollstaendige Liste aller `/f admin` Unterbefehle mit Syntax und erforderlichen Berechtigungen. + +## Dashboard und Allgemein + +| Befehl | Berechtigung | +|---------|-----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Fraktionsverwaltung + +| Befehl | Berechtigung | +|---------|-----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Zonenverwaltung + +| Befehl | Berechtigung | +|---------|-----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Macht und Wirtschaft + +| Befehl | Berechtigung | +|---------|-----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Wartung + +| Befehl | Berechtigung | +|---------|-----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Alle Berechtigungsknoten haben das Praefix `hyperfactions.` (z.B. `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..b29c5998 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Plugin-Integrationen + +HyperFactions integriert sich mit mehreren externen Plugins ueber weiche Abhaengigkeiten. Alle Integrationen sind optional und funktionieren problemlos auch ohne die externen Plugins. + +## Integrationsstatus pruefen + +`/f admin version` +Zeigt aktuelle Version und erkannte Integrationen an. + +`/f admin integration` +Oeffnet das Integrationsverwaltungs-Panel mit detailliertem Status fuer jedes erkannte Plugin. + +## Integrationstabelle + +| Plugin | Typ | Beschreibung | +|--------|------|-------------| +| **HyperPerms** | Berechtigungen | Vollstaendiges Berechtigungssystem mit Gruppen, Vererbung und Kontext | +| **LuckPerms** | Berechtigungen | Alternativer Berechtigungsanbieter | +| **VaultUnlocked** | Berechtigungen/Wirtschaft | Berechtigungs- und Wirtschaftsbruecke | +| **HyperProtect-Mixin** | Schutz | Aktiviert erweiterte Zonen-Flags (Explosionen, Feuer, Inventar behalten) | +| **OrbisGuard-Mixins** | Schutz | Alternatives Mixin fuer Zonen-Flag-Durchsetzung | +| **PlaceholderAPI** | Platzhalter | 49 Fraktions-Platzhalter fuer andere Plugins | +| **WiFlow PlaceholderAPI** | Platzhalter | Alternativer Platzhalter-Anbieter | +| **GravestonePlugin** | Tod | Grabstein-Zugriffskontrolle in Zonen | +| **HyperEssentials** | Funktionen | Zonen-Flags fuer Zuhause, Warps und Kits | +| **KyuubiSoft Core** | Framework | Kernbibliotheks-Integration | +| **Sentry** | Ueberwachung | Fehlerverfolgung und Diagnose | + +## Prioritaet der Berechtigungsanbieter + +1. **VaultUnlocked** (hoechste Prioritaet) +2. **HyperPerms** +3. **LuckPerms** +4. **OP-Fallback** (wenn kein Anbieter gefunden) + +>[!INFO] Integrationen werden einmalig beim Start per Reflection erkannt. Ergebnisse werden fuer die Sitzung zwischengespeichert. Ein Serverneustart ist erforderlich, nachdem ein integriertes Plugin hinzugefuegt oder entfernt wurde. + +>[!TIP] Nutze `/f admin debug toggle integration`, um detaillierte Integrations-Protokollierung zur Fehlerbehebung zu aktivieren. + +>[!NOTE] HyperProtect-Mixin ist das **empfohlene** Schutz-Mixin. Ohne es haben 15 Zonen-Flags keine Wirkung. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..d2b017af --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Zonen-Grundlagen + +Zonen sind von Admins kontrollierte Gebiete mit benutzerdefinierten Regeln, die den normalen Fraktionsschutz ueberschreiben. + +## Zonentypen + +- **SafeZone** -- Kein PvP, kein Bauen, kein Schaden. +Ideal fuer Spawngebiete und Handelsplaetze. +- **WarZone** -- PvP ist immer aktiviert, kein Bauen. +Ideal fuer Arenen und umkaempfte Kampfgebiete. + +## Zonen erstellen + +`/f admin safezone ` +Erstellt eine SafeZone und beansprucht deinen aktuellen Chunk. + +`/f admin warzone ` +Erstellt eine WarZone und beansprucht deinen aktuellen Chunk. + +Nach der Erstellung stelle dich in weitere Chunks und nutze `/f admin zone claim `, um die Zone zu erweitern. + +## Zonen-Chunks verwalten + +`/f admin zone claim ` +Fuegt den aktuellen Chunk zur benannten Zone hinzu. + +`/f admin zone unclaim ` +Entfernt den aktuellen Chunk aus der benannten Zone. + +`/f admin zone radius ` +Beansprucht ein Quadrat von Chunks um deine Position. + +## Zonen loeschen + +`/f admin removezone ` +Loescht die Zone dauerhaft und gibt alle beanspruchten Chunks frei. + +>[!WARNING] Das Loeschen einer Zone gibt alle Chunks sofort frei. Dies kann ohne Backup-Wiederherstellung nicht rueckgaengig gemacht werden. + +>[!INFO] Zonenregeln **ueberschreiben immer** Fraktions-Gebietsregeln. Eine SafeZone in feindlichem Land ist trotzdem sicher. diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..a213f804 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Zonen-Befehlsreferenz + +Vollstaendige Referenz fuer alle Zonen-Verwaltungsbefehle. Alle erfordern die `hyperfactions.admin.zones` Berechtigung. + +## Schnellerstellung + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin safezone ` | SafeZone am aktuellen Chunk erstellen | +| `/f admin warzone ` | WarZone am aktuellen Chunk erstellen | +| `/f admin removezone ` | Zone loeschen und Chunks freigeben | + +## Zonenverwaltung + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin zone create ` | Zone erstellen (safezone/warzone) | +| `/f admin zone delete ` | Zone loeschen | +| `/f admin zone claim ` | Aktuellen Chunk zur Zone hinzufuegen | +| `/f admin zone unclaim ` | Aktuellen Chunk aus Zone entfernen | +| `/f admin zone radius ` | Quadratischen Radius von Chunks beanspruchen | +| `/f admin zone list` | Alle Zonen mit Chunk-Anzahl auflisten | +| `/f admin zone notify ` | Betreten-/Verlassen-Nachrichten umschalten | +| `/f admin zone title upper/lower ` | Zonen-Titeltext setzen | +| `/f admin zone properties ` | Zonen-Eigenschaften-GUI oeffnen | + +## Flag-Verwaltung + +| Befehl | Beschreibung | +|---------|-------------| +| `/f admin zoneflag ` | Ein bestimmtes Flag setzen | + +>[!TIP] Nutze das Zonen-**Eigenschaften-GUI** fuer einen visuellen Editor mit Schaltern fuer jedes Flag, nach Kategorie geordnet. + +## Beispiele + +- `/f admin safezone Spawn` -- Spawn-Schutz erstellen +- `/f admin zone radius Spawn 3` -- auf 7x7 Chunks erweitern +- `/f admin zoneflag Spawn door_use true` -- Tueren erlauben +- `/f admin zone notify Spawn true` -- Eintrittsnachrichten anzeigen diff --git a/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..155851c9 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Zonen-Flags + +Zonen unterstuetzen **47 boolesche Flags** in 10 Kategorien. Jedes Flag steuert ein bestimmtes Verhalten innerhalb der Zone. + +## Flag-Kategorienuebersicht + +| Kategorie | Anzahl | Wichtige Flags | +|----------|-------|-----------| +| Kampf | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Schaden | 4 | fall_damage, explosion_damage, fire_spread | +| Tod | 2 | keep_inventory, power_loss | +| Bauen | 4 | build_allowed, block_place, hammer_use | +| Interaktion | 13 | door_use, container_use, bench_use, npc_tame | +| Transport | 3 | teleporter_use, portal_use, mount_entry | +| Gegenstaende | 4 | item_drop, item_pickup, invincible_items | +| Mob-Spawning | 5 | mob_spawning, hostile/passive/neutral | +| Mob-Bereinigung | 4 | mob_clear, hostile/passive/neutral clear | +| Integration | 5 | gravestone_access, show_on_map, essentials_homes | + +## Standardwerte (SafeZone vs WarZone) + +| Flag | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Einige Flags erfordern **HyperProtect-Mixin** zur Funktion (z.B. keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Ohne das Mixin haben diese Flags keine Wirkung, selbst wenn sie aktiviert sind. + +## Flags setzen + +`/f admin zoneflag ` + +>[!TIP] Nutze `/f admin zone properties ` fuer einen visuellen Schalter-Editor, nach Kategorie gruppiert. diff --git a/src/main/resources/Server/Languages/de-DE/help/combat/death.md b/src/main/resources/Server/Languages/de-DE/help/combat/death.md new file mode 100644 index 00000000..f10abb35 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Tod und Erholung + +Der Tod hat echte Konsequenzen bei Fraktionen. Jeder Tod kostet dich persoenliche Macht und schwaecht die Faehigkeit deiner Fraktion, Gebiet zu halten. + +## Machtverlust + +Jeder Tod kostet -1.0 Macht von deinem persoenlichen Gesamtwert. Dies senkt die kombinierte Macht der Fraktion. + +| Ereignis | Machtaenderung | +|-------|-------------| +| Tod (jede Ursache) | -1.0 | +| Online-Regeneration | +0.1 pro Minute | +| Kampf-Abmeldung | -1.0 (getoetet) | + +>[!NOTE] Dies sind Standardwerte. Dein Server-Administrator hat moeglicherweise andere Einstellungen konfiguriert. + +## Beispielszenarien + +*5 Mitglieder mit je 10.0 Macht = 50 gesamt, 20 Ansprueche.* +*Ein Mitglied stirbt zweimal: 8.0 Macht, Fraktionsgesamt 48.* +*Drei Mitglieder sterben je einmal: Gesamt faellt auf 47.* + +>[!WARNING] Wenn die Macht deiner Fraktion unter die Anzahl eurer Ansprueche faellt, koennen Feinde euer Gebiet ueberbeanspruchen. + +## Erholung + +Macht regeneriert sich mit 0.1 pro Minute, solange du online bist. Die Erholung von 1.0 verlorener Macht dauert etwa 10 Minuten. Mehrere Tode summieren sich, also vermeide wiederholte Kaempfe. + +--- + +## Alle Todesarten + +Machtverlust gilt fuer alle Tode: PvP, Mob-Kills, Fallschaden, Ertrinken und jede andere Ursache. Es gibt keinen sicheren Weg zu sterben. + +>[!TIP] Setze ein Fraktions-Zuhause mit /f sethome, damit Mitglieder sich nach dem Tod schnell sammeln koennen. diff --git a/src/main/resources/Server/Languages/de-DE/help/combat/protection.md b/src/main/resources/Server/Languages/de-DE/help/combat/protection.md new file mode 100644 index 00000000..22b8d452 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Gebietsschutz + +Beanspruchtes Gebiet bietet mehrere Verteidigungsschichten fuer die Bauten und Ressourcen deiner Fraktion. + +## Blockschutz + +Nur Fraktionsmitglieder koennen in eurem Gebiet Bloecke platzieren oder abbauen. Feinde und Neutrale koennen nichts veraendern. + +## Behaelterschutz + +Truhen, Faesser und andere Behaelter sind gesichert. Nur eure Fraktionsmitglieder koennen Lager in beanspruchten Chunks oeffnen oder damit interagieren. + +## Eindringlingsalarme + +Wenn ein Nicht-Mitglied euer beanspruchtes Gebiet betritt, erhalten online anwesende Fraktionsmitglieder eine Benachrichtigung mit dem Namen und Standort des Eindringlings. + +--- + +## Verbuendeten-Zugang + +Verbuendete koennen standardmaessig keine Bloecke in eurem Gebiet bauen oder abbauen. Verbuendeten-Schaden ist ebenfalls deaktiviert, sodass verbuendete Spieler einander nicht verletzen koennen. + +>[!INFO] Gebietsschutz schuetzt Bloecke, nicht Spieler. PvP in eurem eigenen Gebiet haengt von der Beziehung des Angreifers zu eurer Fraktion ab. + +>[!TIP] Halte deine Ansprueche zusammenhaengend und vermeide isolierte Chunks, die schwerer zu verteidigen sind. diff --git a/src/main/resources/Server/Languages/de-DE/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/de-DE/help/combat/spawn_protection.md new file mode 100644 index 00000000..aabcff51 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Spawn-Schutz + +Nach dem Wiedererscheinen vom Tod erhaeltst du voruebergehenden Schutz, um Spawn-Camping zu verhindern. + +## So funktioniert es + +- Der Schutz dauert 5 Sekunden nach dem Wiedererscheinen +- Du kannst in dieser Zeit keinen Schaden nehmen +- Ein visueller Indikator zeigt deinen Schutzstatus an + +## Schutz endet vorzeitig + +Der Spawn-Schutz endet fruehzeitig, wenn du: + +- Einen anderen Spieler oder eine Entitaet angreifst +- Dich von deiner Spawnposition bewegst + +Dies verhindert Missbrauch. Du kannst andere nicht angreifen, waehrend du unverwundbar bist. Sobald du eine Aktion ausfuehrst, faellt der Schutz weg und normale Kampfregeln gelten. + +--- + +>[!NOTE] Dies sind Standardwerte. Dein Server-Administrator hat moeglicherweise andere Einstellungen konfiguriert. + +>[!TIP] Nutze deine Schutzzeit, um die Lage einzuschaetzen, bevor du dich bewegst. diff --git a/src/main/resources/Server/Languages/de-DE/help/combat/tagging.md b/src/main/resources/Server/Languages/de-DE/help/combat/tagging.md new file mode 100644 index 00000000..41253710 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Kampfmarkierung + +Wenn du einen anderen Spieler angreifst oder von einem angegriffen wirst, wirst du fuer 15 Sekunden kampfmarkiert. + +## Waehrend der Markierung + +- Keine /f home oder /f stuck Teleportationen +- Keine Server-Teleportbefehle +- Die Markierung wird bei jeder neuen Kampfaktion zurueckgesetzt +- Ein Timer zeigt die verbleibende Markierungsdauer an + +--- + +## Abmeldestrafe + +>[!WARNING] Sich abzumelden waehrend einer Kampfmarkierung toetet deinen Charakter und du verlierst 1.0 Macht. + +Deine Gegenstaende fallen dort, wo du dich abgemeldet hast, und Feinde koennen sie pluendern. Warte immer, bis die Markierung abgelaufen ist. + +## So funktioniert der Timer + +Der Kampfmarkierungs-Timer erscheint auf dem Bildschirm, wenn du in den Kampf eintrittst. Jeder neue Treffer setzt ihn auf 15 Sekunden zurueck. Sobald er Null erreicht, werden alle Einschraenkungen aufgehoben. + +>[!NOTE] Dies sind Standardwerte. Dein Server-Administrator hat moeglicherweise andere Einstellungen konfiguriert. + +>[!TIP] Ziehe dich zurueck und warte den Timer ab, wenn du teleportieren musst. diff --git a/src/main/resources/Server/Languages/de-DE/help/combat/zones.md b/src/main/resources/Server/Languages/de-DE/help/combat/zones.md new file mode 100644 index 00000000..7a6f1078 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Spezialzonen + +Admins koennen Gebiete mit speziellen Regeln festlegen, die den normalen Fraktions-Gebietsschutz ueberschreiben. + +## SafeZone + +Kein PvP-Schaden, kein Blockabbauen durch Nicht-Admins. Ideal fuer Spawngebiete, Handelsplaetze und Event-Bereiche. Spieler koennen hier nicht verletzt werden. + +## WarZone + +PvP ist immer aktiviert. Kein Blockschutz gilt. Offene Kampfgebiete, in denen alles erlaubt ist. Du erhaeltst in einer WarZone keine Gebietsschutz-Vorteile. + +--- + +## Zonenvergleich + +| Eigenschaft | SafeZone | WarZone | Fraktionsland | +|---------|----------|---------|--------------| +| PvP | Deaktiviert | Immer An | Beziehungsabhaengig | +| Blockabbau | Deaktiviert | Erlaubt | Nur Mitglieder | +| Behaelter | Geschuetzt | Offen | Nur Mitglieder | +| Geeignet fuer | Spawn/Handel | Arenen | Basen | + +>[!NOTE] Zonenregeln ueberschreiben immer Fraktions-Gebietsregeln. Ein beanspruchter Chunk innerhalb einer WarZone folgt den WarZone-Regeln. + +>[!TIP] Pruefe deine Gebietskarte mit /f map, um Zonengrenzen zu sehen. diff --git a/src/main/resources/Server/Languages/de-DE/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/de-DE/help/diplomacy/alliances.md new file mode 100644 index 00000000..a9fd61a1 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Allianzen bilden + +Allianzen sind gegenseitige Abkommen zwischen zwei Fraktionen, die Schutz- und Kooperationsvorteile bieten. + +--- + +## So bildest du eine Allianz + +`/f ally ` + +Sendet eine Allianzanfrage an die Zielfraktion. Die Allianz tritt erst in Kraft, wenn beide Seiten zustimmen. Ein Offizier oder Anfuehrer der anderen Fraktion muss ebenfalls denselben Befehl auf deine Fraktion ausfuehren, um zu bestaetigen. + +## So beendest du eine Allianz + +`/f neutral ` + +Jede Seite kann eine Allianz einseitig beenden, indem sie die Beziehung auf neutral zuruecksetzt. + +--- + +## Allianzvorteile + +| Vorteil | Details | +|---------|---------| +| Kein Eigenbeschuss | Verbuendete Spieler koennen einander keinen Schaden zufuegen | +| Gemeinsame Kartensichtbarkeit | Verbuendetes Gebiet wird blau auf der Gebietskarte angezeigt | +| Gebietsinteraktion | Verbuendete koennen Tueren, Sitzplaetze und Transportmittel in eurem Gebiet nutzen | +| Verbuendeten-Chat | Wechsle zum Verbuendeten-Chat fuer fraktionsuebergreifende Kommunikation | +| Schutz vor Uebernahme | Verbuendete koennen das Gebiet des anderen nicht ueberbeanspruchen | + +>[!NOTE] Deine Fraktion kann gleichzeitig bis zu 10 Allianzen haben. Waehle deine Verbuendeten weise. + +--- + +## Allianz-Etikette + +>[!TIP] Kommunikation ist entscheidend. Bevor du eine Allianzanfrage sendest, erwaege, den Anfuehrer der anderen Fraktion zu kontaktieren, um Bedingungen zu besprechen. Eine starke Allianz basiert auf gegenseitigem Nutzen, nicht nur auf Bequemlichkeit. + +- Allianzen funktionieren in beide Richtungen -- wenn du vom Schutz profitierst, erwarten deine Verbuendeten dasselbe +- Eine Allianz waehrend eines Krieges zu brechen, kann den Ruf deiner Fraktion schaedigen +- Verbuendete Fraktionen koennen Gebietsansprueche koordinieren, um verteidigungsfaehige Grenzen zu schaffen diff --git a/src/main/resources/Server/Languages/de-DE/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/de-DE/help/diplomacy/enemies.md new file mode 100644 index 00000000..9ee4f60b --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Feindliche Fraktionen + +Einen Feind zu erklaeren ist eine einseitige Aktion, die sofort PvP und territoriale Aggression gegen die Zielfraktion aktiviert. Keine Zustimmung ist erforderlich. + +--- + +## Einen Feind erklaeren + +`/f enemy ` + +Markiert die Zielfraktion sofort als euren Feind. Dies tritt sofort in Kraft -- keine Bestaetigung von der anderen Seite ist noetig. Erfordert den Rang Offizier oder hoeher. + +## Auf Neutral zuruecksetzen + +`/f neutral ` + +Beendet den Feindstatus und setzt die Beziehung auf neutral zurueck. Dies erfordert ebenfalls Offizier+ und tritt sofort in Kraft. + +--- + +## Was der Feindstatus bewirkt + +| Effekt | Details | +|--------|---------| +| PvP im Gebiet | Volles PvP ist in den Gebieten beider Fraktionen aktiviert | +| Ueberbeanspruchung | Du kannst deren Chunks ueberbeanspruchen, wenn sie ein Machtdefizit haben | +| Kartenmarkierung | Feindliches Gebiet wird rot auf der Gebietskarte angezeigt | +| Kein Schutz | Standard-Gebietsschutz verhindert kein feindliches PvP | + +>[!WARNING] Einen Feind zu erklaeren ist eine ernste Entscheidung. Deren Mitglieder koennen euch auch in eurem eigenen Gebiet bekaempfen, sobald ihr es erklaert habt. + +--- + +## Strategische Ueberlegungen + +- Feinderklaerungen sind einseitig -- du kannst ohne deren Zustimmung erklaeren, aber sie sehen dich ebenfalls als feindlich +- Pruefe vor der Erklaerung die Macht des Ziels mit /f info. Wenn sie stark sind, koenntest stattdessen du Gebiet verlieren +- Schwaeche Feinde durch wiederholten Kampf, um ihre Macht zu entziehen, dann ueberbeanspruche ihr Land +- Es gibt kein Limit fuer die Anzahl der Feinde, aber an mehreren Fronten zu kaempfen ist riskant + +>[!TIP] Nutze /f neutral, um Konflikte zu deeskalieren. Manchmal ist ein strategischer Frieden wertvoller als fortgesetzter Krieg. + +>[!NOTE] Wenn du mit einer Fraktion verbuendet bist und sie zum Feind erklaerst, wird zuerst die Allianz aufgeloest. diff --git a/src/main/resources/Server/Languages/de-DE/help/diplomacy/relations.md b/src/main/resources/Server/Languages/de-DE/help/diplomacy/relations.md new file mode 100644 index 00000000..727a70c5 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Fraktionsbeziehungen + +Jedes Fraktionspaar hat eine diplomatische Beziehung, die bestimmt, wie sie miteinander interagieren. Es gibt drei Zustaende: Verbuendet, Feindlich und Neutral. + +--- + +## Beziehungsvergleich + +| Effekt | Verbuendet | Neutral | Feindlich | +|--------|------|---------|-------| +| PvP im Gebiet | Deaktiviert | Standardregeln | Aktiviert | +| Gebietsschutz | Gegenseitiger Schutz | Standardschutz | Kann bei Schwaeche uebernommen werden | +| Eigenbeschuss | Deaktiviert | N/A | Ueberall aktiviert | +| Kartenfarbe | Blau | Grau | Rot | +| Wie zu setzen | Gegenseitiges Abkommen | Standardzustand | Einseitige Erklaerung | +| Chat-Zugang | Verbuendeten-Chat | Keiner | Keiner | + +--- + +## Beziehungen anzeigen + +`/f relations` + +Zeigt alle aktuellen Allianzen, Feindschaften und ausstehenden Allianzanfragen an. + +## Wie Beziehungen funktionieren + +- Neutral ist der Standardzustand zwischen allen Fraktionen. Standardmaessige Serverregeln gelten. +- Allianzen erfordern die Zustimmung beider Fraktionen. Jede Seite kann sie einseitig beenden. +- Feindschaft wird einseitig erklaert. Keine Zustimmung noetig -- die andere Fraktion wird sofort als Feind markiert. + +>[!INFO] Beziehungen werden von Offizieren und Anfuehrern verwaltet. Mitglieder koennen Beziehungen einsehen, aber nicht aendern. + +>[!TIP] Nutze /f relations regelmaessig, um die diplomatische Landschaft im Blick zu behalten. Zu wissen, wer deine Feinde sind, hilft dir, dich auf territoriale Konflikte vorzubereiten. diff --git a/src/main/resources/Server/Languages/de-DE/help/economy/commands.md b/src/main/resources/Server/Languages/de-DE/help/economy/commands.md new file mode 100644 index 00000000..cef5503e --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Wirtschaftsbefehle + +Schnellreferenz fuer alle Fraktions-Wirtschaftsbefehle. + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f balance | Schatzkammer-Kontostand anzeigen | Alle | +| /f deposit (amount) | In die Schatzkammer einzahlen | Alle | +| /f withdraw (amount) | Aus der Schatzkammer abheben | Offizier+ | +| /f money transfer (faction) (amount) | An eine andere Fraktion ueberweisen | Offizier+ | +| /f money log [page] | Transaktionsverlauf anzeigen | Offizier+ | + +--- + +## Befehlsaliase + +- /f balance kann auch als /f bal verwendet werden +- /f deposit und /f withdraw akzeptieren Dezimalbetraege + +## Ranganforderungen + +Abhebe- und Ueberweisungsbefehle sind auf Offiziere und Anfuehrer beschraenkt. Alle anderen Wirtschaftsbefehle stehen jedem Fraktionsmitglied zur Verfuegung. + +>[!TIP] Nutze /f money log, um aktuelle Einzahlungen, Abhebungen und Ueberweisungen mit Zeitstempeln zu pruefen. diff --git a/src/main/resources/Server/Languages/de-DE/help/economy/funds.md b/src/main/resources/Server/Languages/de-DE/help/economy/funds.md new file mode 100644 index 00000000..a9e03129 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Finanzen verwalten + +Fraktionsmitglieder arbeiten zusammen, um die Schatzkammer durch Einzahlungen, Abhebungen und Ueberweisungen finanziert zu halten. + +## Einzahlen + +Jedes Mitglied kann persoenliche Mittel in die Fraktions-Schatzkammer einzahlen. + +`/f deposit ` +Zahle von deinem persoenlichen Kontostand in die Schatzkammer ein. + +## Abheben + +Offiziere und der Anfuehrer koennen Mittel zurueck auf ihr persoenliches Konto abheben. + +`/f withdraw ` +Hebe von der Schatzkammer auf dein Konto ab. (Offizier+) + +## Ueberweisen + +Offiziere koennen Mittel direkt zwischen Fraktions-Schatzkammern fuer Handelsgeschaefte oder Diplomatie ueberweisen. + +`/f money transfer ` +Sende Mittel an die Schatzkammer einer anderen Fraktion. (Offizier+) + +--- + +## Gebuehren + +| Transaktion | Gebuehr | +|------------|-----| +| Einzahlung | 0% | +| Abhebung | 0% | +| Ueberweisung | 0% | + +>[!INFO] Gebuehrensaetze sind vom Server konfigurierbar und koennen von den oben gezeigten Standardwerten abweichen. + +>[!TIP] Alle Transaktionen werden protokolliert. Nutze /f money log, um die letzten Aktivitaeten einzusehen. diff --git a/src/main/resources/Server/Languages/de-DE/help/economy/treasury.md b/src/main/resources/Server/Languages/de-DE/help/economy/treasury.md new file mode 100644 index 00000000..eae010cf --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Fraktions-Schatzkammer + +Jede Fraktion hat eine gemeinsame Schatzkammer, die als Bank der Fraktion dient. Mittel werden fuer Unterhaltskosten, Gebietspflege und Fraktionsoperationen verwendet. + +## Startguthaben + +Neue Fraktionen starten mit 0 in ihrer Schatzkammer. Mitglieder muessen Mittel einzahlen, um Reserven aufzubauen. + +## Wer verwalten darf + +- Jedes Mitglied kann Mittel einzahlen +- Offiziere und Anfuehrer koennen abheben und ueberweisen +- Der Anfuehrer hat volle Kontrolle ueber die Schatzkammer + +--- + +`/f balance` +Pruefe den aktuellen Kontostand der Schatzkammer deiner Fraktion. Auch verfuegbar als /f bal. + +>[!TIP] Zahle regelmaessig ein, um deine Fraktion finanziert zu halten. Gebietsunterhaltskosten koennen eine leere Schatzkammer schnell aufbrauchen. + +>[!INFO] Alle Schatzkammer-Transaktionen werden protokolliert und koennen von Offizieren eingesehen werden. diff --git a/src/main/resources/Server/Languages/de-DE/help/economy/upkeep.md b/src/main/resources/Server/Languages/de-DE/help/economy/upkeep.md new file mode 100644 index 00000000..d2ac08c9 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Gebietsunterhalt + +Fraktionen muessen laufenden Unterhalt zahlen, um ihr beanspruchtes Gebiet zu halten. Dies verhindert Landhamsterei und haelt die Karte dynamisch. + +## Unterhaltskosten + +| Einstellung | Standard | +|---------|---------| +| Kosten pro Chunk | 2.0 pro Zyklus | +| Zahlungsintervall | Alle 24 Stunden | +| Kostenlose Chunks | 3 (keine Kosten) | +| Skalierungsmodus | Pauschale | + +>[!NOTE] Dies sind Standardwerte. Dein Server-Administrator hat moeglicherweise andere Einstellungen konfiguriert. + +Deine ersten 3 Chunks sind kostenlos. Darueber hinaus kostet jeder zusaetzliche beanspruchte Chunk 2.0 pro Zahlungszyklus. + +## Automatische Zahlung + +Automatische Zahlung ist standardmaessig aktiviert. Das System zieht den Unterhalt automatisch bei jedem Intervall von eurer Schatzkammer ab. Kein manuelles Eingreifen noetig. + +--- + +## Gnadenfrist + +Wenn eure Schatzkammer den Unterhalt nicht decken kann, beginnt eine 48-stuendige Gnadenfrist. Eine Warnung wird 6 Stunden vor dem Verlust von Anspruechen gesendet. + +>[!WARNING] Wenn der Unterhalt nach der Gnadenfrist unbezahlt bleibt, verliert eure Fraktion 1 Anspruch pro Zyklus, bis die Kosten gedeckt sind oder alle zusaetzlichen Ansprueche aufgebraucht sind. + +## Beispiel + +*Eine Fraktion mit 8 Anspruechen zahlt fuer 5 Chunks (8 minus 3 kostenlose). Bei 2.0 pro Chunk sind das 10.0 pro Zyklus.* + +>[!TIP] Halte deine Schatzkammer ueber den Unterhaltskosten. Nutze /f balance, um deine Reserven zu pruefen. diff --git a/src/main/resources/Server/Languages/de-DE/help/power_land/claiming.md b/src/main/resources/Server/Languages/de-DE/help/power_land/claiming.md new file mode 100644 index 00000000..612995c8 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Gebiet beanspruchen + +Einen Chunk zu beanspruchen schuetzt ihn unter der Kontrolle deiner Fraktion. Nur Fraktionsmitglieder koennen in beanspruchtem Gebiet bauen, abbauen oder auf Behaelter zugreifen. + +--- + +## So beanspruchst du Gebiet + +`/f claim` + +Stelle dich in den Chunk, den du beanspruchen moechtest, und fuehre diesen Befehl aus. Der Chunk wird sofort geschuetzt. Erfordert den Rang Offizier oder hoeher. + +## So gibst du Gebiet frei + +`/f unclaim` + +Gibt den Chunk, in dem du stehst, als Wildnis frei. Erfordert ebenfalls Offizier+. + +--- + +## Anspruchsregeln + +| Regel | Standard | +|-------|---------| +| Machtkosten pro Anspruch | 2.0 Macht | +| Maximale Ansprueche | 100 pro Fraktion | +| Nur angrenzend | Nein (du kannst ueberall beanspruchen) | + +>[!NOTE] Dies sind Standardwerte. Dein Server-Administrator hat moeglicherweise andere Einstellungen konfiguriert. + +>[!INFO] Jeder Anspruch kostet 2.0 Macht im Unterhalt. Eine Fraktion mit 50 Gesamtmacht kann sicher bis zu 25 Ansprueche halten. + +--- + +## Was der Schutz bietet + +Innerhalb beanspruchten Gebiets gilt standardmaessig Folgendes: + +- Aussenstehende koennen keine Bloecke abbauen, platzieren oder mit ihnen interagieren +- Verbuendete koennen Tueren, Sitzplaetze und Transportmittel nutzen, aber keine Bloecke abbauen oder platzieren +- Mitglieder und Offiziere haben vollen Zugang zum Bauen, Abbauen und Nutzen von allem +- Behaelterzugriff (Truhen, Kisten) ist nur fuer Mitglieder beschraenkt + +>[!TIP] Du kannst auch direkt ueber die Gebietskarte beanspruchen. Oeffne /f map und klicke auf nicht beanspruchte Chunks, um sie zu beanspruchen. + +>[!WARNING] Ueberdehne dich nicht. Wenn deine Fraktion durch Tode Macht verliert, werden Ansprueche ueber eurem Machtbudget anfaellig fuer feindliche Uebernahmen. diff --git a/src/main/resources/Server/Languages/de-DE/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/de-DE/help/power_land/losing_territory.md new file mode 100644 index 00000000..cde1dc24 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Gebiet verlieren + +Wenn die Gesamtmacht einer Fraktion unter die Kosten ihrer Ansprueche faellt, wird sie ueberfallbar. Feinde koennen Chunks direkt unter euch wegbeanspruchen. + +--- + +## So funktioniert das Ueberbeanspruchen + +`/f overclaim` + +Ein Offizier oder Anfuehrer einer feindlichen Fraktion stellt sich in euren beanspruchten Chunk und fuehrt diesen Befehl aus. Wenn eure Fraktion ein Machtdefizit hat, wechselt der Chunk zu deren Fraktion. + +## Die Berechnung + +Jeder Anspruch kostet 2.0 Macht im Unterhalt. Wenn eure Gesamtmacht unter diese Schwelle faellt, sind die Defizit-Chunks verwundbar. + +>[!NOTE] Dies sind Standardwerte. Dein Server-Administrator hat moeglicherweise andere Einstellungen konfiguriert. + +>[!WARNING] Ueberbeanspruchung ist dauerhaft. Sobald ein Feind einen Chunk uebernimmt, musst du ihn zurueckerobern (oder zurueckbeanspruchen, wenn sie geschwaecht sind). + +--- + +## Beispielszenario + +| Faktor | Wert | +|--------|-------| +| Mitglieder | 5 Spieler | +| Macht pro Mitglied | Jeweils 10 (Start) | +| Gesamtmacht | 50 | +| Ansprueche | 30 Chunks | +| Benoetigte Macht (30 x 2.0) | 60 | +| Defizit | 10 Macht zu wenig | + +In diesem Beispiel ist die Fraktion von Anfang an ueberfallbar. Feinde koennten bis zu 5 Chunks ueberbeanspruchen (10 Defizit / 2.0 pro Anspruch), bevor die Fraktion ein Gleichgewicht erreicht. + +--- + +## So verhinderst du Gebietsverlust + +- Ueberdehne dich nicht -- halte die Gesamtmacht immer mit einem Puffer ueber deinen Anspruchskosten +- Bleib aktiv -- Macht regeneriert sich nur im Online-Zustand (+0.1/Min.) +- Vermeide unnoetige Tode -- jeder Tod kostet 1.0 Macht +- Rekrutiere mehr Mitglieder -- mehr Spieler bedeuten mehr Gesamtmacht +- Gib ungenutzte Chunks frei -- setze Macht frei mit /f unclaim + +>[!TIP] Pruefe regelmaessig deinen Machtstatus mit /f power. Wenn deine Gesamtmacht nahe an deinen Anspruchskosten liegt, erwaege, weniger wichtige Chunks vor einem Krieg freizugeben. diff --git a/src/main/resources/Server/Languages/de-DE/help/power_land/territory_map.md b/src/main/resources/Server/Languages/de-DE/help/power_land/territory_map.md new file mode 100644 index 00000000..8c54d19c --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# Die Gebietskarte + +Die Gebietskarte bietet dir eine Vogelperspektive auf beanspruchte Chunks in deiner Umgebung und zeigt, welche Fraktionen das Land um dich herum kontrollieren. + +--- + +## Karte oeffnen + +`/f map` + +Oeffnet das Gebietskarten-GUI, zentriert auf deinen aktuellen Standort. + +--- + +## Farblegende + +| Farbe | Bedeutung | +|-------|---------| +| [#55FF55] Farbe deiner Fraktion | Von deiner Fraktion beanspruchtes Gebiet | +| [#5555FF] Blau | Gebiet verbuendeter Fraktionen | +| [#FF5555] Rot | Gebiet feindlicher Fraktionen | +| [#AAAAAA] Grau | Gebiet neutraler Fraktionen | +| [#333333] Dunkel | Wildnis (nicht beanspruchtes Land) | +| [#FFAA00] Gold | Spezialzonen (SafeZone, WarZone) | + +>[!INFO] Die Farbe deiner Fraktion auf der Karte entspricht der Farbe, die du in den Fraktionseinstellungen festgelegt hast. Verbuendete und Feinde verwenden feste Farben zur einfachen Identifikation. + +--- + +## Klicken zum Beanspruchen + +Die Karte ist nicht nur zum Ansehen -- du kannst direkt damit interagieren. + +- Klicke auf einen nicht beanspruchten Chunk, um ihn zu beanspruchen (erfordert Offizier+ Rang und ausreichend Macht) +- Klicke auf einen beanspruchten Chunk, um zu sehen, welche Fraktion ihn besitzt +- Scrolle oder verschiebe die Ansicht, um die Umgebung zu erkunden + +>[!TIP] Die Karte ist der einfachste Weg, deine Gebietsexpansion zu planen. Suche nach nicht beanspruchten Gebieten in der Naehe deiner Basis und beanspruche strategisch, um eine zusammenhaengende Grenze zu schaffen. + +>[!NOTE] Die Karte zeigt einen festen Bereich um deine Position. Bewege dich an einen anderen Standort und oeffne sie erneut, um andere Teile der Welt zu sehen. diff --git a/src/main/resources/Server/Languages/de-DE/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/de-DE/help/power_land/understanding_power.md new file mode 100644 index 00000000..be7b9290 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Macht verstehen + +Macht ist die zentrale Ressource, die bestimmt, wie viel Gebiet deine Fraktion halten kann. Jeder Spieler hat persoenliche Macht, die zur Fraktionsgesamtmacht beitraegt. + +--- + +## Standard-Machtwerte + +| Einstellung | Wert | +|---------|-------| +| Maximale Macht pro Spieler | 20 | +| Startmacht | 10 | +| Todesstrafe | -1.0 pro Tod | +| Belohnung fuer Kills | 0.0 | +| Regenerationsrate | +0.1 pro Minute (solange online) | +| Machtkosten pro Anspruch | 2.0 | +| Abmeldung waehrend Markierung | -1.0 zusaetzlich | + +>[!NOTE] Dies sind Standardwerte. Dein Server-Administrator hat moeglicherweise andere Einstellungen konfiguriert. + +## So funktioniert es + +Die Gesamtmacht deiner Fraktion ist die Summe der persoenlichen Macht aller Mitglieder. Die benoetigte Macht ist die Anzahl der Ansprueche multipliziert mit 2.0. Solange die Gesamtmacht ueber der benoetigten Macht bleibt, ist euer Gebiet sicher. + +>[!INFO] Macht regeneriert sich passiv mit 0.1 pro Minute, solange du online bist. Mit dieser Rate dauert die Erholung von 1.0 Macht etwa 10 Minuten. + +--- + +## Deine Macht pruefen + +`/f power` + +Zeigt deine persoenliche Macht, die Gesamtmacht deiner Fraktion und wie viel benoetigt wird, um die aktuellen Ansprueche zu halten. + +## Die Gefahrenzone + +Wenn die Gesamtmacht unter den fuer eure Ansprueche benoetigten Betrag faellt, wird eure Fraktion verwundbar. Feinde koennen eure Chunks ueberbeanspruchen. + +>[!WARNING] Mehrere Tode in kurzer Zeit koennen sich schnell aufsummieren. Wenn ihr 5 Mitglieder mit je 10 Macht habt (50 gesamt) und 20 Ansprueche (40 benoetigt), bringen euch 5 Tode im Team auf 45 -- noch sicher. Aber 11 Tode bringen euch auf 39, unter die 40er-Schwelle. + +>[!TIP] Halte einen Machtpuffer. Beanspruche nicht jeden Chunk, den du dir leisten kannst -- lass Spielraum fuer ein paar Tode, ohne ueberfallbar zu werden. diff --git a/src/main/resources/Server/Languages/de-DE/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/de-DE/help/quick_ref/all_commands.md new file mode 100644 index 00000000..6945d482 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Alle Befehle + +## Kern + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f | Fraktions-Menu oeffnen | Alle | +| /f help | Hilfezentrum oeffnen | Alle | +| /f create (name) | Eine Fraktion gruenden | Alle | +| /f disband | Fraktion aufloesen | Anfuehrer | +| /f leave | Fraktion verlassen | Alle | + +## Mitgliedschaft + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f invite (player) | Spieler einladen | Offizier+ | +| /f accept [faction] | Einladung annehmen | Alle | +| /f request (faction) | Beitrittsanfrage stellen | Alle | +| /f kick (player) | Mitglied entfernen | Offizier+ | +| /f promote (player) | Zum Offizier befoerdern | Anfuehrer | +| /f demote (player) | Zum Mitglied degradieren | Anfuehrer | +| /f transfer (player) | Fuehrung uebertragen | Anfuehrer | + +## Gebiet + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f claim | Aktuellen Chunk beanspruchen | Offizier+ | +| /f unclaim | Aktuellen Chunk freigeben | Offizier+ | +| /f overclaim | Geschwaechteh Chunk uebernehmen | Offizier+ | +| /f map | Gebietskarte oeffnen | Alle | + +## Teleport + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f home | Zum Fraktions-Zuhause teleportieren | Alle | +| /f sethome | Fraktions-Zuhause setzen | Offizier+ | +| /f delhome | Fraktions-Zuhause loeschen | Offizier+ | +| /f stuck | Aus feindlichem Gebiet entkommen | Alle | + +## Information + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f info [faction] | Fraktionsdetails anzeigen | Alle | +| /f list | Alle Fraktionen durchsuchen | Alle | +| /f members | Mitgliederliste anzeigen | Alle | +| /f who [player] | Spielerinfo anzeigen | Alle | +| /f power [player] | Machtwerte pruefen | Alle | +| /f invites | Einladungen/Anfragen verwalten | Alle | +| /f relations | Diplomatische Beziehungen anzeigen | Alle | + +## Diplomatie + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f ally (faction) | Allianz anfragen | Offizier+ | +| /f enemy (faction) | Feind erklaeren | Offizier+ | +| /f neutral (faction) | Auf neutral zuruecksetzen | Offizier+ | + +## Einstellungen + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f settings | Einstellungs-GUI oeffnen | Offizier+ | +| /f rename (name) | Fraktion umbenennen | Anfuehrer | +| /f desc [text] | Beschreibung setzen | Offizier+ | +| /f color (code) | Fraktionsfarbe setzen | Offizier+ | +| /f open | Beitritt fuer alle erlauben | Anfuehrer | +| /f close | Einladung erforderlich | Anfuehrer | + +## Wirtschaft + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f balance | Schatzkammer anzeigen | Alle | +| /f deposit (amount) | Mittel einzahlen | Alle | +| /f withdraw (amount) | Mittel abheben | Offizier+ | +| /f money transfer (faction) (amt) | Mittel ueberweisen | Offizier+ | +| /f money log [page] | Transaktionsverlauf | Offizier+ | + +## Chat + +| Befehl | Beschreibung | Rang | +|---------|-------------|------| +| /f c | Chat-Modus wechseln | Alle | +| /f c f | Fraktions-Chat setzen | Alle | +| /f c a | Verbuendeten-Chat setzen | Alle | +| /f c off | Oeffentlichen Chat setzen | Alle | diff --git a/src/main/resources/Server/Languages/de-DE/help/welcome/getting_started.md b/src/main/resources/Server/Languages/de-DE/help/welcome/getting_started.md new file mode 100644 index 00000000..b97141aa --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Erste Schritte + +Willkommen bei HyperFactions! So startest du in wenigen Schritten durch. + +--- + +## Schritt 1: Das Fraktions-Menu oeffnen + +Tippe /f, um das Fraktions-GUI zu oeffnen. Dies ist deine Zentrale fuer alles -- Fraktionen durchsuchen, eigene gruenden und Einladungen verwalten. + +## Schritt 2: Waehle deinen Weg + +| Option | Wie | +|--------|-----| +| Offene Fraktionen durchsuchen | Klicke im Menu auf Durchsuchen und dann auf Beitreten bei einer offenen Fraktion. | +| Einladung annehmen | Pruefe den Einladungs-Tab. Wenn dich jemand eingeladen hat, klicke auf Annehmen. | +| Eigene Fraktion gruenden | Klicke auf Fraktion erstellen, waehle einen Namen und du bist der Anfuehrer. | + +## Schritt 3: Deine Fraktion erkunden + +Sobald du in einer Fraktion bist, siehst du das Fraktions-Dashboard mit der Mitgliederliste, der Gebietskarte, den Beziehungen und den Einstellungen. + +>[!TIP] Wenn du ganz neu bist, tritt zuerst einer bestehenden Fraktion bei. Mit erfahrenen Mitgliedern lernst du schneller die Grundlagen. + +--- + +## Wichtige erste Befehle + +- /f -- Oeffnet das Fraktions-GUI +- /f home -- Teleportiert dich zur Heimatbasis deiner Fraktion +- /f c -- Wechselt den Chat-Modus zwischen Normal, Fraktion und Verbuendete +- /f map -- Zeigt die Gebietskarte um dich herum + +>[!TIP] Du kannst auch jederzeit /f help im Chat eingeben, um eine schnelle Befehlsuebersicht zu erhalten. diff --git a/src/main/resources/Server/Languages/de-DE/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/de-DE/help/welcome/quick_tips.md new file mode 100644 index 00000000..d6f27077 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Schnelle Tipps + +Nuetzliche Ratschlaege nach Kategorie sortiert, die dir zum Erfolg verhelfen. + +--- + +## Gebiet + +- Beanspruche frueh Land um deine Basis mit `/f claim` -- ungeschuetzte Bauten haben **keinen Schutz** +- Jeder Gebietsanspruch kostet **2.0 Macht** im Unterhalt, also dehne dich nicht ueber das hinaus aus, was deine Mitglieder tragen koennen +- Nutze `/f map`, um nahegelegene Gebietsansprueche zu erkunden und sichere Bauplaetze zu finden +- Gib nicht mehr benoetigte Chunks mit `/f unclaim` frei, um Macht freizusetzen + +## Kampf + +- Ein Tod kostet **1.0 Macht** -- vermeide unnoetige Kaempfe, wenn deine Fraktion nahe am Gebietslimit ist +- Du hast **5 Sekunden Spawn-Schutz** nach dem Wiedererscheinen +- Kampfmarkierung dauert **15 Sekunden** -- sich abzumelden waehrend der Markierung kostet zusaetzliche Macht +- Eigenbeschuss ist standardmaessig zwischen Fraktionsmitgliedern und Verbuendeten **deaktiviert** + +>[!WARNING] Sich abzumelden waehrend einer Kampfmarkierung verursacht zusaetzlichen Machtverlust (1.0 pro Abmeldung). Bleib und kaempfe oder fliehe zuerst. + +## Soziales + +- Nutze `/f c`, um zwischen Chat-Modi zu wechseln, damit Fraktions-Gespraeche privat bleiben +- Lade vertrauenswuerdige Spieler mit `/f invite ` ein -- Einladungen laufen nach **5 Minuten** ab +- Schliesse Allianzen mit `/f ally ` fuer gegenseitigen Schutz und gemeinsame Kartensichtbarkeit +- Pruefe `/f relations`, um deinen vollstaendigen diplomatischen Status zu sehen + +## Wirtschaft + +>[!TIP] Wenn der Server die Wirtschaft aktiviert hat, kann deine Fraktion eine Schatzkammer aufbauen. Mitglieder koennen einzahlen, aber nur Offiziere und Anfuehrer koennen abheben oder Geld ueberweisen. + +- Zahle ueber das Schatzkammer-GUI Geld ein, um deine Fraktion zu staerken +- Eine wohlhabendere Fraktion kann sich mehr Gebietsansprueche leisten und sich schneller von Rueckschlaegen erholen + +## Allgemein + +- Tippe jederzeit `/f`, um dein Fraktions-Dashboard zu oeffnen -- alles ist von dort aus erreichbar +- Befoerdere aktive Mitglieder zum Offizier, damit sie beim Beanspruchen und Verwalten von Gebiet helfen koennen +- Halte deine Fraktion aktiv -- Macht regeneriert sich nur, waehrend Spieler **online** sind diff --git a/src/main/resources/Server/Languages/de-DE/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/de-DE/help/welcome/what_are_factions.md new file mode 100644 index 00000000..6c90b968 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Was sind Fraktionen? + +Fraktionen sind von Spielern gefuehrte Teams, die Gebiete beanspruchen, Basen errichten und um die Vorherrschaft kaempfen. Wenn du einer Fraktion beitrittst oder eine gruendest, erhaeltst du Zugang zu geschuetztem Land, einem gemeinsamen Zuhause, privatem Chat und diplomatischen Werkzeugen. + +>[!TIP] Bei Fraktionen dreht sich alles um Teamwork. Je mehr aktive Mitglieder du hast, desto staerker wird deine Fraktion. + +--- + +## Kernmechaniken + +| Mechanik | Beschreibung | +|----------|-------------| +| Macht | Jeder Spieler erzeugt ueber die Zeit Macht (max. 20). Die Gesamtmacht deiner Fraktion bestimmt, wie viel Land ihr halten koennt. | +| Gebietsansprueche | Beanspruchte Chunks sind geschuetzt -- nur Mitglieder koennen darin bauen, abbauen oder Behaelter oeffnen. Jeder Anspruch kostet 2.0 Macht im Unterhalt. | +| Beziehungen | Fraktionen koennen Allianzen fuer gegenseitigen Schutz bilden oder Feindschaften erklaeren, um PvP und territoriale Aggression zu ermoeglichen. | +| Raenge | Drei Raenge -- Anfuehrer, Offizier, Mitglied -- jeweils mit unterschiedlichen Faehigkeiten. | + +--- + +## Wie Staerke funktioniert + +Die Staerke deiner Fraktion kommt von ihren Mitgliedern. Jeder Spieler startet mit 10 Macht und regeneriert bis zu 20, solange er online ist. Sterben kostet Macht. Wenn die Gesamtmacht deiner Fraktion unter die Kosten eurer Ansprueche faellt, koennen Feinde euer Gebiet uebernehmen. + +>[!WARNING] Ein einzelner Tod kostet 1.0 Macht. Mehrere Tode in kurzer Zeit koennen deine Fraktion anfaellig fuer Gebietsverlust machen. + +--- + +## Diplomatie auf einen Blick + +- **Verbuendete** -- Gegenseitige Abkommen, die Eigenbeschuss verhindern und das Gebiet des anderen schuetzen +- **Feinde** -- Einseitige Erklaerungen, die PvP im Gebiet des anderen aktivieren und Gebietsuebernehmen ermoeglichen +- **Neutral** -- Der Standardzustand zwischen allen Fraktionen mit normalen Regeln + +>[!INFO] Du kannst all dies ueber das In-Game-GUI verwalten, indem du `/f` eingibst, oder ueber Chat-Befehle. diff --git a/src/main/resources/Server/Languages/de-DE/help/your_faction/creating.md b/src/main/resources/Server/Languages/de-DE/help/your_faction/creating.md new file mode 100644 index 00000000..3e640080 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Eine Fraktion gruenden + +Deine eigene Fraktion zu gruenden macht dich zum Anfuehrer mit voller Kontrolle ueber Einstellungen, Mitglieder und Gebiet. + +--- + +## So gruendest du eine Fraktion + +`/f create ` + +Dies erstellt deine Fraktion und oeffnet sofort das Fraktions-Dashboard, wo du Mitglieder einladen, Land beanspruchen und Einstellungen konfigurieren kannst. + +## Namensregeln + +| Regel | Anforderung | +|-------|------------| +| Laenge | Zwischen 3 und 24 Zeichen | +| Zeichen | Nur Buchstaben, Zahlen und Leerzeichen | +| Einzigartigkeit | Keine zwei Fraktionen koennen den gleichen Namen haben | + +>[!WARNING] Waehle deinen Namen sorgfaeltig. Eine spaetere Umbenennung erfordert Anfuehrer-Berechtigungen und kann eine Abklingzeit haben. + +--- + +## Was bei der Gruendung passiert + +- Du wirst zum Anfuehrer (hoechster Rang) +- Deine Fraktion startet mit 0 Anspruechen und deiner persoenlichen Macht (standardmaessig 10) +- Das Fraktions-Dashboard oeffnet sich automatisch +- Du kannst sofort Spieler einladen, Gebiet beanspruchen und ein Fraktions-Zuhause setzen + +>[!INFO] Wenn der Server Wirtschaftsintegration aktiviert hat, kann das Gruenden einer Fraktion Geld kosten. Die Gruendungskosten werden vom Server-Administrator festgelegt. + +>[!TIP] Nach der Gruendung sollten deine ersten Prioritaeten sein: Freunde einladen, einen Standort fuer die Basis finden und ihn beanspruchen. diff --git a/src/main/resources/Server/Languages/de-DE/help/your_faction/joining.md b/src/main/resources/Server/Languages/de-DE/help/your_faction/joining.md new file mode 100644 index 00000000..9135efdc --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Einer Fraktion beitreten + +Es gibt drei Wege, einer bestehenden Fraktion beizutreten, abhaengig davon, wie die Fraktion konfiguriert ist. + +--- + +## Methoden im Vergleich + +| Methode | Wie | Voraussetzung | +|---------|-----|----------| +| Durchsuchen und beitreten | Oeffne /f, klicke auf Durchsuchen, klicke auf Beitreten | Fraktion ist offen | +| Einladung annehmen | Pruefe den Einladungs-Tab im /f Menu | Aktive Einladung | +| Beitrittsanfrage stellen | Nutze /f request, warte auf Genehmigung | Offizier oder Anfuehrer genehmigt | + +--- + +## Einladungsdetails + +- Einladungen werden von Offizieren oder Anfuehrern gesendet +- Einladungen laufen nach 5 Minuten ab -- nimm sie rechtzeitig an +- Sieh dir deine ausstehenden Einladungen im Einladungs-Tab des Fraktions-Menus an +- Annehmen ueber das GUI oder mit /f accept + +## Beitrittsanfragen + +- Nutze /f request, um die Mitgliedschaft in einer geschlossenen Fraktion zu beantragen +- Anfragen laufen nach 24 Stunden ab, wenn nicht darauf reagiert wird +- Offiziere und Anfuehrer koennen Anfragen ueber das Fraktions-Dashboard genehmigen oder ablehnen + +>[!TIP] Nicht sicher, welcher Fraktion du beitreten sollst? Nutze den Durchsuchen-Tab in /f, um Fraktionsbeschreibungen, Mitgliederzahlen und ob sie offen oder nur auf Einladung sind, zu sehen. + +>[!NOTE] Jede Fraktion kann standardmaessig bis zu 50 Mitglieder aufnehmen. Wenn eine Fraktion voll ist, musst du warten, bis ein Platz frei wird. diff --git a/src/main/resources/Server/Languages/de-DE/help/your_faction/managing.md b/src/main/resources/Server/Languages/de-DE/help/your_faction/managing.md new file mode 100644 index 00000000..8a633c32 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Mitglieder verwalten + +Offiziere und Anfuehrer teilen sich die Verantwortung fuer die Verwaltung der Fraktions-Mitgliederliste. Hier sind die wichtigsten Befehle und wer sie nutzen kann. + +--- + +## Befehle + +| Befehl | Beschreibung | Benoetigter Rang | +|---------|-------------|---------------| +| `/f invite ` | Sendet eine Beitrittseinladung (laeuft in 5 Min. ab) | Offizier+ | +| `/f kick ` | Entfernt ein Mitglied aus der Fraktion | Offizier+ (siehe Hinweis) | +| `/f promote ` | Befoerdert ein Mitglied zum Offizier | Nur Anfuehrer | +| `/f demote ` | Degradiert einen Offizier zum Mitglied | Nur Anfuehrer | +| `/f transfer ` | Uebertraegt die Fraktionsfuehrung | Nur Anfuehrer | + +>[!NOTE] Offiziere koennen nur Mitglieder entfernen. Um einen anderen Offizier zu entfernen, muss der Anfuehrer ihn entweder zuerst degradieren oder direkt entfernen. + +--- + +## Einladungen + +- Einladungen laufen nach 5 Minuten ab, wenn sie nicht angenommen werden +- Der eingeladene Spieler sieht sie im Einladungs-Tab, wenn er /f oeffnet +- Es gibt kein Limit fuer die Anzahl gleichzeitig versendeter Einladungen +- Deine Fraktion kann insgesamt bis zu 50 Mitglieder haben + +## Befoerderungen und Degradierungen + +- Nur der Anfuehrer kann befoerdern oder degradieren +- /f promote befoerdert ein Mitglied zum Offizier +- /f demote degradiert einen Offizier zurueck zum Mitglied + +## Fuehrung uebertragen + +>[!WARNING] Die Uebertragung der Fuehrung ist unwiderruflich. Du wirst zum Offizier degradiert und der Zielspieler wird der neue Anfuehrer. Stelle sicher, dass du ihm vollstaendig vertraust. + +`/f transfer ` + +Das Ziel muss ein aktuelles Mitglied deiner Fraktion sein. diff --git a/src/main/resources/Server/Languages/de-DE/help/your_faction/roles.md b/src/main/resources/Server/Languages/de-DE/help/your_faction/roles.md new file mode 100644 index 00000000..8293438b --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Rollen und Raenge + +Jede Fraktion hat drei Rollen in einer strikten Hierarchie. Hoehere Rollen erben alle Faehigkeiten der darunterliegenden Rollen. + +--- + +## Berechtigungsuebersicht + +| Aktion | Anfuehrer | Offizier | Mitglied | +|--------|--------|---------|--------| +| Im Gebiet bauen | Ja | Ja | Ja | +| Fraktions-Zuhause nutzen | Ja | Ja | Ja | +| Fraktions- und Verbuendeten-Chat | Ja | Ja | Ja | +| Spieler einladen | Ja | Ja | Nein | +| Mitglieder entfernen | Ja | Ja (nur Mitglieder) | Nein | +| Land beanspruchen / freigeben | Ja | Ja | Nein | +| Feindliches Gebiet uebernehmen | Ja | Ja | Nein | +| Fraktions-Zuhause setzen | Ja | Ja | Nein | +| Fraktions-Zuhause loeschen | Ja | Ja | Nein | +| Beziehungen verwalten (Allianz/Feind) | Ja | Ja | Nein | +| Fraktions-Protokolle einsehen | Ja | Ja | Nein | +| Zum Offizier befoerdern | Ja | Nein | Nein | +| Offizier degradieren | Ja | Nein | Nein | +| Fraktion umbenennen | Ja | Nein | Nein | +| Beschreibung / Tag / Farbe setzen | Ja | Nein | Nein | +| Fraktion oeffnen / schliessen | Ja | Nein | Nein | +| Fraktionseinstellungen oeffnen | Ja | Nein | Nein | +| Fuehrung uebertragen | Ja | Nein | Nein | +| Fraktion aufloesen | Ja | Nein | Nein | + +>[!NOTE] Offiziere koennen Mitglieder entfernen, aber keine anderen Offiziere. Nur der Anfuehrer kann Offiziere entfernen. + +--- + +## Rollendetails + +- Anfuehrer -- Einer pro Fraktion. Hat volle Kontrolle ueber alle Einstellungen, Mitglieder und Gebiete. Kann die Fuehrung an ein anderes Mitglied uebertragen. +- Offizier -- Vertrauenswuerdige Mitglieder, die bei der Fraktionsverwaltung helfen. Koennen einladen, Mitglieder entfernen, Land beanspruchen und Diplomatie betreiben. +- Mitglied -- Die Standardrolle beim Beitritt. Kann im Gebiet bauen, das Fraktions-Zuhause nutzen und am Fraktions-Chat teilnehmen. + +>[!TIP] Befoerdere deine aktivsten und vertrauenswuerdigsten Mitglieder zu Offizieren, damit sie beim Verwalten von Gebiet und beim Rekrutieren neuer Spieler helfen koennen. diff --git a/src/main/resources/Server/Languages/de-DE/hyperfactions.lang b/src/main/resources/Server/Languages/de-DE/hyperfactions.lang new file mode 100644 index 00000000..66d019a8 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Deutsche Übersetzungen +# Format: key = value (oder key = "quoted value") +# Hinweis: Schlüssel werden automatisch mit "hyperfactions." durch Hytales I18nModule vorangestellt +# Platzhalter: {0}, {1}, etc. + +# ========== Allgemein ========== +common.no_permission = Sie haben keine Berechtigung, das zu tun. +common.not_in_faction = Sie sind in keiner Fraktion. +common.already_in_faction = Sie sind bereits in einer Fraktion. +common.player_not_found = Spieler nicht gefunden. +common.faction_not_found = Fraktion nicht gefunden. +common.player_not_online = Dieser Spieler ist nicht online. +common.must_be_leader = Nur der Fraktionsanführer kann das tun. +common.must_be_officer = Sie müssen ein Offizier oder Anführer sein, um das zu tun. +common.combat_tagged = Sie können das nicht tun, während Sie im Kampf markiert sind. +common.cancel = Abbrechen +common.confirm = Bestätigen +common.save = Speichern +common.close = Schließen +common.clear = Leeren +common.back = Zurück +common.leave = Verlassen +common.transfer = Übertragen +common.disband = Auflösen +common.world_fallback = Welt +common.yes = Ja +common.no = Nein +common.loading = Laden... +common.online = Online +common.offline = Offline +common.enabled = Aktiviert +common.disabled = Deaktiviert +common.none = Keine +common.page = Seite {0} von {1} +common.unknown = Unbekannt +common.error_generic = Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut. +common.gui_fallback = GUI konnte nicht geöffnet werden. Verwenden Sie /f help für Befehle. +common.admin_prefix = [Admin] +common.location_error = Ihr Standort konnte nicht ermittelt werden. +common.world_error = Ihre Welt konnte nicht ermittelt werden. +common.invalid_id = Ungültige Fraktions-ID. +common.na = N/A + +# ========== Befehle - Erstellen ========== +cmd.create.no_permission = Sie haben keine Berechtigung, Fraktionen zu erstellen. +cmd.create.usage = Verwendung: /f create +cmd.create.success = Fraktion '{0}' erstellt! +cmd.create.already_in_named = Sie sind bereits in {0}. +cmd.create.use_leave_first = Verwenden Sie zuerst /f leave, wenn Sie eine neue Fraktion erstellen möchten. +cmd.create.name_taken = Dieser Fraktionsname ist bereits vergeben. +cmd.create.name_too_short = Fraktionsname ist zu kurz. +cmd.create.name_too_long = Fraktionsname ist zu lang. +cmd.create.failed = Fraktion konnte nicht erstellt werden. + +# ========== Befehle - Auflösen ========== +cmd.disband.no_permission = Sie haben keine Berechtigung, Fraktionen aufzulösen. +cmd.disband.not_leader = Nur der Fraktionsanführer kann auflösen. +cmd.disband.confirm_prompt = Sind Sie sicher, dass Sie Ihre Fraktion auflösen möchten? +cmd.disband.confirm_instruction = Geben Sie innerhalb von {0} Sekunden erneut /f disband --text ein, um zu bestätigen. +cmd.disband.success = Ihre Fraktion wurde aufgelöst. +cmd.disband.failed = Fraktion konnte nicht aufgelöst werden. +cmd.disband.cancelled = Vorherige Bestätigung abgebrochen. Geben Sie den Befehl erneut ein, um die Auflösung zu bestätigen. + +# ========== Befehle - Umbenennen ========== +cmd.rename.no_permission = Sie haben keine Berechtigung. +cmd.rename.not_leader = Nur der Anführer kann die Fraktion umbenennen. +cmd.rename.usage = Verwendung: /f rename +cmd.rename.too_short = Name ist zu kurz (min. {0} Zeichen). +cmd.rename.too_long = Name ist zu lang (max. {0} Zeichen). +cmd.rename.name_taken = Dieser Name ist bereits vergeben. +cmd.rename.success = Fraktion umbenannt zu {0}! +cmd.rename.broadcast = {0} hat die Fraktion in {1} umbenannt + +# ========== Befehle - Beschreibung ========== +cmd.desc.no_permission = Sie haben keine Berechtigung. +cmd.desc.not_officer = Sie müssen ein Offizier sein, um die Beschreibung festzulegen. +cmd.desc.set = Fraktionsbeschreibung festgelegt! +cmd.desc.cleared = Fraktionsbeschreibung gelöscht. + +# ========== Befehle - Öffnen / Schließen ========== +cmd.open.no_permission = Sie haben keine Berechtigung. +cmd.open.not_leader = Nur der Anführer kann diese Einstellung ändern. +cmd.open.already_open = Ihre Fraktion ist bereits offen. +cmd.open.success = Ihre Fraktion ist jetzt offen! Jeder kann mit /f join beitreten. +cmd.open.broadcast = {0} hat die Fraktion für öffentlichen Beitritt geöffnet. +cmd.close.no_permission = Sie haben keine Berechtigung. +cmd.close.not_leader = Nur der Anführer kann diese Einstellung ändern. +cmd.close.already_closed = Ihre Fraktion ist bereits geschlossen. +cmd.close.success = Ihre Fraktion ist jetzt nur auf Einladung zugänglich. +cmd.close.broadcast = {0} hat die Fraktion auf Einladung beschränkt. + +# ========== Befehle - Farbe ========== +cmd.color.no_permission = Sie haben keine Berechtigung. +cmd.color.not_officer = Sie müssen ein Offizier sein, um die Farbe zu ändern. +cmd.color.colors_disabled = Fraktionsfarben sind deaktiviert. +cmd.color.usage = Verwendung: /f color +cmd.color.usage_hint = Gültige Codes: 0-9, a-f oder #RRGGBB Hex +cmd.color.invalid = Ungültige Farbe. Verwenden Sie 0-9, a-f oder #RRGGBB. +cmd.color.success = Fraktionsfarbe aktualisiert! + +# ========== Befehle - Beanspruchen ========== +cmd.claim.no_permission = Sie haben keine Berechtigung, Territorium zu beanspruchen. +cmd.claim.already_yours = Ihre Fraktion besitzt diesen Chunk bereits. +cmd.claim.cannot_claim_ally = Sie können verbündetes Territorium nicht beanspruchen. +cmd.claim.already_claimed_hint = Dieser Chunk ist beansprucht. Verwenden Sie /f overclaim, wenn sie plünderbar sind. +cmd.claim.success = Chunk bei {0}, {1} beansprucht! +cmd.claim.not_officer = Sie müssen ein Offizier sein, um Land zu beanspruchen. +cmd.claim.already_claimed = Dieser Chunk ist bereits beansprucht. +cmd.claim.max_claims = Ihre Fraktion hat die maximale Anzahl an Gebietsansprüchen erreicht. Erhalten Sie mehr Macht! +cmd.claim.not_adjacent = Sie müssen angrenzend an bestehendes Territorium beanspruchen. +cmd.claim.world_not_allowed = Beanspruchung ist in dieser Welt nicht erlaubt. +cmd.claim.orbisguard = Dieses Gebiet ist durch OrbisGuard geschützt. +cmd.claim.zone_protected = Dieser Chunk befindet sich in einer SafeZone oder WarZone. +cmd.claim.insufficient_power = Ihre Fraktion hat nicht genug Macht, um mehr Land zu beanspruchen. +cmd.claim.failed = Chunk konnte nicht beansprucht werden. + +# ========== Befehle - Einladen ========== +cmd.invite.no_permission = Sie haben keine Berechtigung, Spieler einzuladen. +cmd.invite.not_officer = Sie müssen ein Offizier sein, um Spieler einzuladen. +cmd.invite.usage = Verwendung: /f invite +cmd.invite.player_not_found = Spieler '{0}' nicht gefunden oder offline. +cmd.invite.target_in_faction = Dieser Spieler ist bereits in einer Fraktion. +cmd.invite.sent = {0} zu Ihrer Fraktion eingeladen. +cmd.invite.received = Sie wurden eingeladen, {0} beizutreten! +cmd.invite.accept_hint = Geben Sie /f accept {0} ein, um beizutreten. + +# ========== Befehle - Annehmen / Beitreten ========== +cmd.join.no_permission = Sie haben keine Berechtigung, Fraktionen beizutreten. +cmd.join.already_in_named = Sie sind bereits in {0}. +cmd.join.use_leave_hint = Verwenden Sie zuerst /f leave, wenn Sie einer anderen Fraktion beitreten möchten. +cmd.join.no_invites = Sie haben keine ausstehenden Einladungen. +cmd.join.faction_not_found = Fraktion '{0}' nicht gefunden. +cmd.join.not_invited = Sie haben keine Einladung von dieser Fraktion. +cmd.join.faction_gone = Diese Fraktion existiert nicht mehr. +cmd.join.success = Sie sind {0} beigetreten! +cmd.join.broadcast = {0} ist der Fraktion beigetreten! +cmd.join.faction_full = Diese Fraktion ist voll. +cmd.join.failed = Beitritt zur Fraktion fehlgeschlagen. + +# ========== Befehle - Rauswerfen ========== +cmd.kick.no_permission = Sie haben keine Berechtigung, Mitglieder rauszuwerfen. +cmd.kick.usage = Verwendung: /f kick +cmd.kick.not_in_your_faction = Spieler '{0}' ist nicht in Ihrer Fraktion. +cmd.kick.success = {0} aus der Fraktion geworfen. +cmd.kick.broadcast = {0} wurde aus der Fraktion geworfen. +cmd.kick.kicked = Sie wurden aus der Fraktion geworfen. +cmd.kick.cannot_kick_higher = Sie haben keine Berechtigung, diesen Spieler rauszuwerfen. +cmd.kick.cannot_kick_leader = Sie können den Fraktionsanführer nicht rauswerfen. +cmd.kick.failed = Spieler konnte nicht rausgeworfen werden. + +# ========== Befehle - Verlassen ========== +cmd.leave.no_permission = Sie haben keine Berechtigung, Fraktionen zu verlassen. +cmd.leave.confirm_prompt = Sind Sie sicher, dass Sie Ihre Fraktion verlassen möchten? +cmd.leave.confirm_instruction = Geben Sie innerhalb von {0} Sekunden erneut /f leave --text ein, um zu bestätigen. +cmd.leave.success = Sie haben Ihre Fraktion verlassen. +cmd.leave.broadcast = {0} hat die Fraktion verlassen. +cmd.leave.failed = Verlassen der Fraktion fehlgeschlagen. +cmd.leave.cancelled = Vorherige Bestätigung abgebrochen. Geben Sie den Befehl erneut ein, um das Verlassen zu bestätigen. + +# ========== Befehle - Befördern / Degradieren / Übertragen ========== +cmd.rank.promote_no_permission = Sie haben keine Berechtigung, Mitglieder zu befördern. +cmd.rank.promote_usage = Verwendung: /f promote +cmd.rank.promoted = {0} zu {1} befördert! +cmd.rank.promote_broadcast = {0} wurde zu {1} befördert! +cmd.rank.already_highest = Weitere Beförderung nicht möglich. Verwenden Sie /f transfer, um den Anführer zu wechseln. +cmd.rank.promote_failed = Beförderung des Spielers fehlgeschlagen. +cmd.rank.demote_no_permission = Sie haben keine Berechtigung, Mitglieder zu degradieren. +cmd.rank.demote_usage = Verwendung: /f demote +cmd.rank.demoted = {0} zu {1} degradiert. +cmd.rank.demote_broadcast = {0} wurde zu {1} degradiert. +cmd.rank.already_lowest = Dieser Spieler ist bereits ein Mitglied. +cmd.rank.demote_failed = Degradierung des Spielers fehlgeschlagen. +cmd.rank.transfer_no_permission = Sie haben keine Berechtigung, die Führung zu übertragen. +cmd.rank.transfer_usage = Verwendung: /f transfer +cmd.rank.player_not_in_faction = Spieler nicht in Ihrer Fraktion gefunden. +cmd.rank.transfer_confirm = Sind Sie sicher, dass Sie die Führung an {0} übertragen möchten? +cmd.rank.transfer_confirm_instruction = Geben Sie innerhalb von {1} Sekunden erneut /f transfer {0} --text ein, um zu bestätigen. +cmd.rank.transferred = Führung an {0} übertragen! +cmd.rank.transfer_broadcast = {0} ist jetzt der Fraktionsanführer! +cmd.rank.transfer_failed = Übertragung der Führung fehlgeschlagen. +cmd.rank.transfer_cancelled = Vorherige Bestätigung abgebrochen. Geben Sie den Befehl erneut ein, um die Übertragung zu bestätigen. + +# ========== Befehle - Freigeben ========== +cmd.unclaim.no_permission = Sie haben keine Berechtigung, Territorium freizugeben. +cmd.unclaim.success = Chunk bei {0}, {1} freigegeben. +cmd.unclaim.not_officer = Sie müssen ein Offizier sein, um Land freizugeben. +cmd.unclaim.chunk_not_claimed = Dieser Chunk ist nicht beansprucht. +cmd.unclaim.not_your_claim = Ihre Fraktion besitzt diesen Chunk nicht. +cmd.unclaim.cannot_unclaim_home = Der Chunk mit dem Fraktionsheim kann nicht freigegeben werden. +cmd.unclaim.would_disconnect = Freigabe nicht möglich — sie würde Ihr Territorium trennen. +cmd.unclaim.failed = Freigabe des Chunks fehlgeschlagen. + +# ========== Befehle - Überbeanspruchen ========== +cmd.overclaim.no_permission = Sie haben keine Berechtigung, Territorium zu überbeanspruchen. +cmd.overclaim.success = Feindliches Territorium überbeansprucht! +cmd.overclaim.not_officer = Sie müssen ein Offizier sein, um zu überbeanspruchen. +cmd.overclaim.not_claimed = Dieser Chunk ist nicht beansprucht. Verwenden Sie /f claim. +cmd.overclaim.own_chunk = Ihre Fraktion besitzt diesen Chunk bereits. +cmd.overclaim.ally = Sie können verbündetes Territorium nicht überbeanspruchen. +cmd.overclaim.target_has_power = Diese Fraktion hat noch genug Macht. +cmd.overclaim.failed = Überbeanspruchung fehlgeschlagen. + +# ========== Befehle - Feststecken ========== +cmd.stuck.no_permission = Sie haben keine Berechtigung, /f stuck zu verwenden. +cmd.stuck.not_stuck = Sie stecken nicht fest — dies ist Wildnis. +cmd.stuck.combat_tagged = Sie können /f stuck nicht im Kampf verwenden! +cmd.stuck.no_safe = Es konnte kein sicherer Ort gefunden werden. +cmd.stuck.teleporting = Teleportation in Sicherheit in {0} Sekunden. Nicht bewegen! + +# ========== Befehle - Heim ========== +cmd.home.no_permission = Sie haben keine Berechtigung, sich zum Fraktionsheim zu teleportieren. +cmd.home.no_home = Ihre Fraktion hat kein Heim festgelegt. +cmd.home.combat_tagged = Sie können sich nicht im Kampf teleportieren! +cmd.home.teleported = Zum Fraktionsheim teleportiert! + +# ========== Befehle - Heim Setzen ========== +cmd.sethome.no_permission = Sie haben keine Berechtigung, das Fraktionsheim festzulegen. +cmd.sethome.world_not_allowed = In dieser Welt kann kein Heim gesetzt werden. +cmd.sethome.not_in_territory = Sie können das Heim nur im Territorium Ihrer Fraktion setzen. +cmd.sethome.set = Fraktionsheim festgelegt! +cmd.sethome.broadcast = {0} hat das Fraktionsheim festgelegt. +cmd.sethome.not_officer = Sie müssen ein Offizier sein, um das Heim festzulegen. +cmd.sethome.failed = Heim konnte nicht festgelegt werden. + +# ========== Befehle - Heim Löschen ========== +cmd.delhome.no_permission = Sie haben keine Berechtigung, das Fraktionsheim zu löschen. +cmd.delhome.no_home = Ihre Fraktion hat kein Heim festgelegt. +cmd.delhome.deleted = Fraktionsheim gelöscht! +cmd.delhome.broadcast = {0} hat das Fraktionsheim gelöscht. +cmd.delhome.not_officer = Sie müssen ein Offizier sein, um das Heim zu löschen. +cmd.delhome.failed = Heim konnte nicht gelöscht werden. + +# ========== Befehle - Beziehung (Verbündeter/Feind/Neutral/Beziehungen) ========== +cmd.relation.ally_no_permission = Sie haben keine Berechtigung, Allianzen zu verwalten. +cmd.relation.ally_usage = Verwendung: /f ally +cmd.relation.ally_sent = Allianzanfrage an {0} gesendet! +cmd.relation.ally_formed = Sie sind jetzt mit {0} verbündet! +cmd.relation.already_ally = Sie sind bereits mit dieser Fraktion verbündet. +cmd.relation.ally_failed = Allianzanfrage konnte nicht gesendet werden. +cmd.relation.enemy_no_permission = Sie haben keine Berechtigung, Feinde zu erklären. +cmd.relation.enemy_usage = Verwendung: /f enemy +cmd.relation.enemy_declared = {0} ist jetzt Ihr Feind! +cmd.relation.already_enemy = Sie sind bereits Feinde mit dieser Fraktion. +cmd.relation.max_enemies = Sie haben die maximale Anzahl an Feinden erreicht. +cmd.relation.enemy_failed = Feind konnte nicht gesetzt werden. +cmd.relation.neutral_no_permission = Sie haben keine Berechtigung, neutrale Beziehungen zu setzen. +cmd.relation.neutral_usage = Verwendung: /f neutral +cmd.relation.neutral_set = Ihre Fraktion ist jetzt neutral mit {0}. +cmd.relation.already_neutral = Sie sind bereits neutral mit dieser Fraktion. +cmd.relation.neutral_failed = Neutral konnte nicht gesetzt werden. +cmd.relation.cannot_self = Sie können sich nicht mit sich selbst verbünden. +cmd.relation.max_allies = Sie haben die maximale Anzahl an Verbündeten erreicht. +cmd.relation.view_no_permission = Sie haben keine Berechtigung, Beziehungen anzuzeigen. +cmd.relation.header = === Fraktionsbeziehungen === +cmd.relation.allies_count = Verbündete ({0}): +cmd.relation.enemies_count = Feinde ({0}): +cmd.relation.list_entry = - {0} + +# ========== Befehle - Chat ========== +cmd.chat.usage = Verwendung: /f c [f|a|off] +cmd.chat.no_permission = Sie haben keine Berechtigung für diesen Chat-Modus. +cmd.chat.mode_set = Chat-Modus auf {0} gesetzt + +# ========== Befehle - Einladungen ========== +cmd.invites.not_officer = Sie müssen ein Offizier sein, um Einladungen zu verwalten. +cmd.invites.header = === Fraktionseinladungen === +cmd.invites.no_pending = Keine ausstehenden Einladungen oder Anfragen. +cmd.invites.outgoing = Ausgehende Einladungen: +cmd.invites.outgoing_entry = {0} (eingeladen von {1}) +cmd.invites.requests = Beitrittsanfragen: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Ihre Einladungen === +cmd.invites.no_invites = Sie haben keine ausstehenden Einladungen. +cmd.invites.invite_entry = {0} - Verwenden Sie /f accept {1} + +# ========== Befehle - Anfrage ========== +cmd.request.no_permission = Sie haben keine Berechtigung, eine Fraktionsmitgliedschaft anzufragen. +cmd.request.already_in_named = Sie sind bereits in {0}. +cmd.request.use_leave_hint = Verwenden Sie zuerst /f leave, wenn Sie einer anderen Fraktion beitreten möchten. +cmd.request.usage = Verwendung: /f request [Nachricht] +cmd.request.faction_open = Diese Fraktion ist offen! Verwenden Sie /f accept {0}, um direkt beizutreten. +cmd.request.already_requested = Sie haben bereits eine ausstehende Anfrage bei dieser Fraktion. +cmd.request.has_invite = Sie wurden von dieser Fraktion eingeladen! Verwenden Sie /f accept {0}, um beizutreten. +cmd.request.sent = Beitrittsanfrage an {0} gesendet! +cmd.request.your_message = Ihre Nachricht: "{0}" +cmd.request.officer_review = Ein Offizier wird Ihre Anfrage prüfen. +cmd.request.officer_notify = {0} hat einen Beitritt zu Ihrer Fraktion angefragt! +cmd.request.officer_review_hint = Verwenden Sie /f gui > Einladungen zur Prüfung. + +# ========== Befehle - Info ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = Sie haben keine Berechtigung, Fraktionsinfo anzuzeigen. +cmd.info.faction_not_found = Fraktion '{0}' nicht gefunden. +cmd.info.not_in_faction_hint = Sie sind in keiner Fraktion. Verwenden Sie /f info +cmd.info.leader = Anführer: {0} +cmd.info.members = Mitglieder: {0}/{1} +cmd.info.power = Macht: {0} +cmd.info.claims = Gebietsansprüche: {0} +cmd.info.raidable = PLÜNDERBAR! +cmd.info.allies = Verbündete: {0} +cmd.info.enemies = Feinde: {0} +cmd.info.they_consider = Sie betrachten euch als: {0} +cmd.info.you_consider = Ihr betrachtet sie als: {0} +cmd.info.members_no_permission = Sie haben keine Berechtigung, Fraktionsmitglieder anzuzeigen. +cmd.info.members_header = === {0} Mitglieder ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = Sie haben keine Berechtigung, die Fraktionsliste anzuzeigen. +cmd.info.list_empty = Es gibt keine Fraktionen. +cmd.info.list_header = === Fraktionen ({0}) === +cmd.info.list_entry = {0} - {1} Mitglieder, {2} Macht +cmd.info.list_entry_raidable = {0} - {1} Mitglieder, {2} Macht [PLÜNDERBAR] +cmd.info.help_no_permission = Sie haben keine Berechtigung, die Hilfe anzuzeigen. +cmd.info.who_no_permission = Sie haben keine Berechtigung, Spielerinfo anzuzeigen. +cmd.info.who_faction = Fraktion: {0} +cmd.info.who_role = Rolle: {0} +cmd.info.who_joined = Beigetreten: {0} +cmd.info.who_faction_none = Fraktion: Keine +cmd.info.who_power = Macht: {0} +cmd.info.who_status = Status: {0} +cmd.info.who_last_seen = Zuletzt gesehen: {0} +cmd.info.map_no_permission = Sie haben keine Berechtigung, die Karte anzuzeigen. +cmd.info.map_header = === Gebietskarte === +cmd.info.map_legend = Legende: +Du /Eigen /Verbündet /Feind -Wildnis +cmd.info.map_gui_hint = Verwenden Sie /f gui für die interaktive Karte + +# ========== Befehle - Macht ========== +cmd.power.personal = Persönliche Macht: {0}/{1} +cmd.power.faction = Fraktionsmacht: {0}/{1} +cmd.power.death_loss = Todesverlust: {0} +cmd.power.regen = Regenerationsrate: {0}/Std +cmd.power.no_permission = Sie haben keine Berechtigung, Machtinfo anzuzeigen. +cmd.power.header = Macht von {0}: +cmd.power.current = Aktuell: {0} + +# ========== Befehle - Wirtschaft ========== +cmd.economy.balance = Guthaben: {0} +cmd.economy.deposited = {0} in die Fraktionsschatzkammer eingezahlt. +cmd.economy.withdrawn = {0} aus der Fraktionsschatzkammer abgehoben. +cmd.economy.transferred = {0} an {1} überwiesen. +cmd.economy.insufficient = Unzureichendes Guthaben in der Fraktionsschatzkammer. +cmd.economy.invalid_amount = Ungültiger Betrag: {0} +cmd.economy.economy_disabled = Wirtschaft ist deaktiviert. +cmd.economy.balance_no_permission = Sie haben keine Berechtigung, Guthaben anzuzeigen. +cmd.economy.treasury_unavailable = Schatzkammer ist nicht verfügbar. +cmd.economy.balance_display = Schatzkammer von {0}: {1} +cmd.economy.deposit_no_permission = Sie haben keine Berechtigung, einzuzahlen. +cmd.economy.deposit_faction_denied = Sie haben keine Fraktionsberechtigung zum Einzahlen. +cmd.economy.deposit_usage = Verwendung: /f deposit +cmd.economy.amount_positive = Betrag muss positiv sein. +cmd.economy.wallet_insufficient = Sie haben nicht genug Geld. Geldbörse: {0} +cmd.economy.wallet_withdraw_failed = Abhebung von Ihrer Geldbörse fehlgeschlagen. +cmd.economy.deposit_failed = Einzahlung in die Fraktionsschatzkammer fehlgeschlagen. Geld zurückerstattet. +cmd.economy.withdraw_no_permission = Sie haben keine Berechtigung, abzuheben. +cmd.economy.withdraw_faction_denied = Sie haben keine Fraktionsberechtigung zum Abheben. +cmd.economy.withdraw_usage = Verwendung: /f withdraw +cmd.economy.withdraw_limit_denied = Abhebung abgelehnt: {0} +cmd.economy.wallet_deposit_failed = Warnung: Einzahlung in Ihre Geldbörse fehlgeschlagen. Kontaktieren Sie einen Admin. +cmd.economy.withdraw_limit_exceeded = Abhebung abgelehnt: Limit überschritten. +cmd.economy.withdraw_failed = Abhebung fehlgeschlagen: {0} +cmd.economy.transfer_no_permission = Sie haben keine Berechtigung zu überweisen. +cmd.economy.transfer_faction_denied = Sie haben keine Fraktionsberechtigung zum Überweisen. +cmd.economy.transfer_usage = Verwendung: /f money transfer +cmd.economy.transfer_self = Überweisung an die eigene Fraktion nicht möglich. +cmd.economy.transfer_limit_denied = Überweisung abgelehnt: {0} +cmd.economy.transfer_limit_exceeded = Überweisung abgelehnt: Limit überschritten. +cmd.economy.transfer_failed = Überweisung fehlgeschlagen: {0} +cmd.economy.log_no_permission = Sie haben keine Berechtigung, das Transaktionsprotokoll anzuzeigen. +cmd.economy.log_header = Transaktionsprotokoll (Seite {0}/{1}) +cmd.economy.log_empty = Keine Transaktionen gefunden. +cmd.economy.money_help_header = Schatzkammer-Befehle: +cmd.economy.money_help_balance = /f money balance [Fraktion] - Guthaben anzeigen +cmd.economy.money_help_deposit = /f money deposit - In Schatzkammer einzahlen +cmd.economy.money_help_withdraw = /f money withdraw - Von Schatzkammer abheben +cmd.economy.money_help_transfer = /f money transfer - Zwischen Fraktionen überweisen +cmd.economy.money_help_log = /f money log [Seite] [Typ] - Transaktionsverlauf anzeigen + +# ========== Schutz - Aktionsphrasen ========== +protection.action.generic = Sie können das hier nicht tun +protection.action.build = Sie können keine Blöcke bauen oder abbauen +protection.action.interact = Sie können damit nicht interagieren +protection.action.door = Sie können keine Türen benutzen +protection.action.container = Sie können keine Behälter öffnen +protection.action.bench = Sie können keine Werkbänke benutzen +protection.action.processing = Sie können keine Verarbeitungsstationen benutzen +protection.action.seat = Sie können keine Sitzplätze benutzen +protection.action.light = Sie können keine Lichter umschalten +protection.action.teleporter = Sie können keine Teleporter benutzen +protection.action.crate = Sie können keine Kisten benutzen +protection.action.tame = Sie können keine Kreaturen zähmen +protection.action.npc = Sie können nicht mit NPCs interagieren +protection.action.mount = Sie können keine Kreaturen reiten +protection.action.pve = Sie können keine Kreaturen verletzen +protection.action.item_drop = Sie können keine Gegenstände fallen lassen +protection.action.item_pickup = Sie können keine Gegenstände aufheben + +# ========== Schutz - Ablehnungsgründe ========== +protection.denied.safezone = {0} in einer SafeZone. +protection.denied.warzone = {0} in einer WarZone. +protection.denied.enemy_claim = {0} in feindlichem Territorium. +protection.denied.claimed = {0} in beanspruchtem Territorium. +protection.denied.here = {0} hier. +protection.denied.zone = {0} in dieser Zone. +protection.denied.faction_perm = {0} hier. (Fraktionsberechtigung: {1}) +protection.denied.ally_territory = {0} hier. (Verbündetes Territorium) +protection.denied.error = Schutzfehler — Aktion zur Sicherheit blockiert. + +# ========== Schutz - PvP ========== +protection.pvp.safezone = PvP ist in SafeZones deaktiviert. +protection.pvp.same_faction = Sie können Fraktionsmitglieder nicht angreifen. +protection.pvp.ally = Sie können Verbündete nicht angreifen. +protection.pvp.spawn_protected = Dieser Spieler hat Spawn-Schutz. +protection.pvp.territory_disabled = PvP ist in diesem Territorium deaktiviert. +protection.pvp.generic = Sie können diesen Spieler nicht angreifen. + +# ========== Schutz - Kreaturschaden ========== +protection.mob_damage_disabled = Mob-Schaden ist in dieser Zone deaktiviert. +protection.pve_damage_disabled = PvE-Schaden ist in dieser Zone deaktiviert. +protection.pve_territory_denied = Sie können Mobs in diesem Territorium nicht verletzen. + +# ========== Schutz - Kampfmarkierung ========== +protection.combat_tag_command = Sie können diesen Befehl nicht verwenden, während Sie im Kampf markiert sind. + +# ========== Server-Ankündigungen ========== +# Diese werden an alle Online-Spieler für bedeutende Fraktionsereignisse gesendet. +# {0}, {1} = dynamische Werte (Fraktionsnamen, Spielernamen) +server_announce.faction_created = {0} hat die Fraktion {1} gegründet! +server_announce.faction_disbanded = Die Fraktion {0} wurde aufgelöst! +server_announce.leadership_transfer = {0} ist jetzt der Anführer von {1}! +server_announce.overclaim = {0} hat Territorium von {1} überbeansprucht! +server_announce.war_declared = {0} hat {1} den Krieg erklärt! +server_announce.alliance_formed = {0} und {1} sind jetzt Verbündete! +server_announce.alliance_broken = {0} und {1} sind keine Verbündeten mehr! + +# ========== Teleportationssystem ========== +teleport.cooldown_wait = Sie müssen {0} warten, bevor Sie sich erneut teleportieren können. +teleport.warmup_start = Teleportation zum Fraktionsheim in {0} Sekunden... +teleport.combat_cancelled = Teleportation abgebrochen — Sie sind im Kampf! +teleport.success_default = Zum Fraktionsheim teleportiert! +teleport.no_home = Ihre Fraktion hat kein Heim festgelegt. +teleport.world_not_found = Welt nicht gefunden. +teleport.failed = Teleportation fehlgeschlagen. +teleport.countdown = Teleportation in {0} Sekunden... +teleport.countdown_one = Teleportation in 1 Sekunde... +teleport.moved_cancelled = Teleportation abgebrochen — Sie haben sich bewegt! +teleport.damage_cancelled = Teleportation abgebrochen — Sie haben Schaden erlitten! +teleport.mount_teleport_blocked = Sie können sich nicht in diese Zone teleportieren, während Sie reiten. +teleport.mount_entry_blocked = Sie können diese Zone nicht betreten, während Sie reiten. + +# ========== Chat-Anzeige ========== +chat.display.public = Öffentlich +chat.display.faction = Fraktion +chat.display.ally = Verbündete diff --git a/src/main/resources/Server/Languages/de-DE/hyperfactions_admin.lang b/src/main/resources/Server/Languages/de-DE/hyperfactions_admin.lang new file mode 100644 index 00000000..23a7d943 --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Deutsche Übersetzungen +# Format: key = value +# Hinweis: Schlüssel werden automatisch mit "hyperfactions_admin." durch Hytales I18nModule vorangestellt + +# ========== Admin-Navigationsleiste ========== +nav.dashboard = Übersicht +nav.actions = Aktionen +nav.factions = Fraktionen +nav.players = Spieler +nav.economy = Wirtschaft +nav.zones = Zonen +nav.config = Konfiguration +nav.backups = Sicherungen +nav.log = Protokoll +nav.updates = Aktualisierungen +nav.help = Hilfe +nav.version = Version + +# ========== Allgemeine Admin-Beschriftungen ========== +common.faction_not_found = Fraktion nicht gefunden +common.no_faction = Keine Fraktion +common.not_set = Nicht festgelegt +common.on = An +common.off = Aus +common.enable = Aktivieren +common.disable = Deaktivieren +common.none_paren = (Keine) +common.invalid_faction = Ungültige Fraktion. +common.leader_prefix = Anführer: {0} +common.members_suffix = {0} Mitglieder +common.claims_suffix = {0} Gebiete +common.factions_suffix = {0} Fraktionen +common.players_suffix = {0} Spieler +common.chunks_suffix = {0} Chunks +common.entries_suffix = {0} Einträge +common.found_suffix = {0} gefunden +common.power_format = {0}/{1} Macht +common.raidable = Plünderbar +common.protected = Geschützt +common.no_description = Keine Beschreibung festgelegt. +common.officers_more = +{0} weitere +common.custom_max = (benutzerdefiniertes Max.) +common.default_max = (Standard-Max.) +common.now = Jetzt +common.ago_suffix = vor {0} +common.just_now = gerade eben +common.no_membership_history = Kein Mitgliedschaftsverlauf + +# ========== Admin-Übersicht ========== +dashboard.factions_prefix = Fraktionen: {0} +dashboard.members_prefix = Mitglieder gesamt: {0} +dashboard.claims_prefix = Gebiete gesamt: {0} + +# ========== Admin-Aktionen ========== +actions.confirm_reset = Zurücksetzen bestätigen? +actions.confirm_trigger = Auslösung bestätigen? +actions.kd_reset = K/D für {0} Spieler zurückgesetzt. +actions.kd_reset_failed = K/D-Zurücksetzung fehlgeschlagen: {0} +actions.upkeep_unavailable = Unterhaltsprozessor ist nicht verfügbar. +actions.upkeep_triggered = Unterhaltseinzug ausgelöst. +actions.upkeep_failed = Unterhalt fehlgeschlagen: {0} + +# ========== Admin-Auflösung ========== +disband.faction_gone = Fraktion existiert nicht mehr. +disband.success = Fraktion '{0}' wurde aufgelöst. +disband.failed = Auflösung fehlgeschlagen: {0} +disband.no_leader = Fraktion hat keinen Anführer, Auflösung nicht möglich. + +# ========== Admin - Alle Gebiete freigeben ========== +unclaim.removed = [Admin] {0} Gebiete von {1} entfernt. +unclaim.no_claims = {0} hatte keine Gebiete zum Entfernen. + +# ========== Admin-Fraktionsliste ========== +factions.home_not_set = Nicht festgelegt +factions.teleported = Zum Heim von {0} teleportiert. +factions.no_home = Fraktion hat kein Heim festgelegt. +factions.world_not_found = Zielwelt nicht gefunden. + +# ========== Admin-Fraktionsinfo ========== +info.faction_gone = Diese Fraktion existiert nicht mehr. + +# ========== Admin-Fraktionsmitglieder ========== +members.sort_role = Rolle +members.sort_online = Online +members.sort_name = Name +members.sort_power = Macht +members.promoted = [Admin] {0} zu {1} befördert. +members.demoted = [Admin] {0} zu {1} degradiert. +members.kicked = [Admin] {0} aus der Fraktion geworfen. + +# ========== Admin-Fraktionsbeziehungen ========== +relations.allies_header = VERBÜNDETE ({0}) +relations.enemies_header = FEINDE ({0}) +relations.no_allies = Keine Verbündeten. +relations.no_enemies = Keine Feinde. +relations.neutral_count = {0} neutrale Fraktionen +relations.since_today = Seit: heute +relations.since_one_day = Seit: vor 1 Tag +relations.since_days = Seit: vor {0} Tagen +relations.set_ally = [Admin] Gegenseitigen Verbündeten-Status mit {0} gesetzt. +relations.set_enemy = Gegenseitigen Feind-Status mit {0} gesetzt. +relations.set_neutral = [Admin] Gegenseitigen Neutral-Status mit {0} gesetzt. + +# ========== Admin-Fraktionseinstellungen ========== +settings.locked = Diese Einstellung ist durch die Serverkonfiguration gesperrt. +settings.perm_toggled = {0} auf {1} gesetzt. +settings.color_changed = Fraktionsfarbe auf {0} gesetzt. +settings.recruitment_set = Aufnahme auf {0} gesetzt. +settings.no_home = [Admin] Diese Fraktion hat kein Heim festgelegt. +settings.home_cleared = Fraktionsheim für {0} gelöscht. + +# ========== Sortier-Dropdown-Beschriftungen ========== +sort.power = Macht +sort.name = Name +sort.members = Mitglieder +sort.balance = Guthaben + +# ========== Admin-Spieler ========== +players.sort_last_online = Zuletzt online +players.sort_faction = Fraktion +players.sort_online = Online +players.not_online = Spieler ist nicht online. +players.world_not_found = Zielwelt nicht gefunden. +players.teleported = [Admin] Zu {0} teleportiert. + +# ========== Admin-Spielerinfo ========== +playerinfo.disband_faction = Fraktion auflösen +playerinfo.kick_leader = Anführer rauswerfen +playerinfo.enter_valid_number = Geben Sie eine gültige Zahl ein. +playerinfo.enter_valid_positive = Geben Sie eine gültige positive Zahl ein. +playerinfo.faction_gone = Fraktion existiert nicht mehr. +playerinfo.kd_reset = K/D für {0} zurückgesetzt. +playerinfo.kicked_success = {0} aus {1} geworfen. +playerinfo.kicked_leader = Anführer {0} rausgeworfen. Führung an {1} übertragen. +playerinfo.disbanded_kick = [Admin] Fraktion '{0}' aufgelöst (letztes Mitglied rausgeworfen). + +# ========== Admin-Wirtschaft ========== +economy.no_data = Keine Fraktionen mit Wirtschaftsdaten. +economy.amount_zero = Betrag darf nicht null sein. +economy.enter_amount = Bitte geben Sie einen Betrag ein. +economy.invalid_number = Ungültige Zahl: {0} +economy.error = Ein Fehler ist aufgetreten. +economy.balance_negative = Guthaben darf nicht negativ sein. +economy.failed = Fehlgeschlagen: {0} +economy.bulk_complete = Massenanpassung abgeschlossen: {0} {1} an {2} Fraktionen. +economy.bulk_failures = ({0} fehlgeschlagen) + +# ========== Admin-Zonen ========== +zones.not_found = Zone nicht gefunden. +zones.invalid_id = Ungültige Zonen-ID. +zones.deleted = Zone {0} gelöscht. +zones.delete_failed = Zone konnte nicht gelöscht werden: {0} +zones.no_chunks = Keine Chunks +zones.chunks_suffix = {0} ({1} Chunks) + +# ========== Zonenerstellungs-Assistent ========== +wizard.enter_name = Bitte geben Sie einen Zonennamen ein. +wizard.name_too_short = Zonenname muss mindestens {0} Zeichen lang sein. +wizard.name_too_long = Zonenname darf {0} Zeichen nicht überschreiten. +wizard.name_taken = Eine Zone mit diesem Namen existiert bereits. +wizard.radius_range = Radius muss zwischen 1 und {0} liegen. +wizard.create_failed = Zone konnte nicht erstellt werden: {0} +wizard.created_not_found = Zone erstellt, konnte aber nicht gefunden werden. +wizard.created = {0} '{1}' erstellt! +wizard.chunk_claimed = Chunk ({0}, {1}) beansprucht. +wizard.chunk_failed = Aktueller Chunk konnte nicht beansprucht werden: {0} +wizard.radius_claimed = {0} Chunks in einem {1}-Radius von {2} beansprucht. +wizard.radius_no_claims = Keine Chunks konnten beansprucht werden (Gebiet möglicherweise besetzt). +wizard.no_claims = Zone ohne Gebiete erstellt. +wizard.chunks_preview = ~{0} Chunks + +# ========== Zonen-Umbenennung ========== +zone_rename.zone_gone = Zone existiert nicht mehr. +zone_rename.enter_name = Bitte geben Sie einen Zonennamen ein. +zone_rename.too_short = Zonenname muss mindestens {0} Zeichen lang sein. +zone_rename.too_long = Zonenname darf {0} Zeichen nicht überschreiten. +zone_rename.same_name = Das ist bereits der Name dieser Zone. +zone_rename.renamed = [Admin] Zone umbenannt von {0} zu {1}! +zone_rename.name_taken = Eine Zone mit diesem Namen existiert bereits. +zone_rename.invalid_name = Ungültiger Zonenname. +zone_rename.rename_failed = Umbenennung der Zone fehlgeschlagen: {0} + +# ========== Zonen-Typänderung ========== +zone_type.zone_gone = Zone existiert nicht mehr. +zone_type.changed = [Admin] {0} geändert von {1} zu {2} ({3}). +zone_type.failed = Zonentyp konnte nicht geändert werden: {0} +zone_type.flags_reset = Flags zurückgesetzt +zone_type.flags_kept = Flags beibehalten + +# ========== Zonen-Integrations-Flags ========== +zone_int.zone_not_found = Zone nicht gefunden +zone_int.no_plugin = (kein Plugin) +zone_int.default = (Standard) +zone_int.custom = (benutzerdefiniert) + +# Integrations-Flags UI-Beschriftungen +gui.zint_cat_gravestones = Grabsteine +gui.zint_gravestones_desc = Wenn AN, können Nicht-Besitzer Gräber plündern. Besitzer können es immer. +gui.zint_cat_world_map = Weltkarte +gui.zint_world_map_desc = Kartenausblendung für Spieler in dieser Zone überschreiben. Wenn aktiviert, wählen Sie, wer Spieler in dieser Zone sehen kann. +gui.zint_visibility_label = Sichtbarkeitsstufe: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Auf Standard zurücksetzen +gui.zint_back_to_flags = Zurück zu Flags +gui.zint_map_vis_faction = Nur Fraktion +gui.zint_map_vis_ally = Fraktion + Verbündete +gui.zint_map_vis_all = Alle Spieler + +# ========== Aktivitätsprotokoll ========== +log.all_types = Alle Typen +log.no_logs = Keine Aktivitätsprotokolle passend zu den Filtern. + +# ========== Versionsseite ========== +version.active = Aktiv +version.not_found = Nicht gefunden +version.not_detected = Nicht erkannt +version.not_installed = Nicht installiert +version.active_version = Aktiv (v{0}) +version.active_compatible = Aktiv (kompatibel) +version.active_claims_only = Aktiv (nur Gebiete) +version.installed_no_perm = Installiert (kein Berechtigungsanbieter) +version.active_provider = Aktiv ({0}) + +# ========== Admin-Hauptseite ========== +main.reload_hint = Verwenden Sie /f reload, um die Konfiguration neu zu laden. +main.unclaim_hint = Verwenden Sie /f admin unclaim {0}, um alle {1} Chunks freizugeben. + +# ========== Zonen-Flags/Einstellungen ========== +zflags.invalid_flag = Ungültiges Flag. +zflags.zone_not_found = Zone nicht gefunden. +zflags.conflict = (Konflikt) +zflags.mixin = (Mixin) +zflags.reset_int = Integrations-Flags auf Standard zurücksetzen. +zflags.reset_all = Alle Flags auf Standard zurücksetzen. +zflags.reset_failed = Zurücksetzen der Flags fehlgeschlagen: {0} +zflags.back_to_settings = Zurück zu Einstellungen + +# Zonen-Einstellungen UI-Beschriftungen +gui.zset_cat_combat = Kampf +gui.zset_cat_damage = Schaden +gui.zset_cat_death = Tod +gui.zset_cat_building = Bauen +gui.zset_cat_interaction = Interaktion +gui.zset_cat_transport = Transport +gui.zset_cat_items = Gegenstände +gui.zset_cat_spawning = Mob-Spawning +gui.zset_cat_mob_clear = Mob-Bereinigung +gui.zset_children_hint = (Unterelemente gelten nur, wenn übergeordnetes Element AN ist) +gui.zset_reset_defaults = Auf Standard zurücksetzen +gui.zset_integration_flags = Integrations-Flags +gui.zset_back_to_zones = Zurück zu Zonen +gui.zset_chunks = {0} Chunks + +# Zonen-Flag-Anzeigenamen +gui.zflag_pvp_enabled = PvP aktiviert +gui.zflag_friendly_fire = Eigenbeschuss +gui.zflag_friendly_fire_faction = Fraktionsschaden +gui.zflag_friendly_fire_ally = Verbündetenschaden +gui.zflag_projectile_damage = Projektilschaden +gui.zflag_mob_damage = Mob-Schaden erleiden +gui.zflag_pve_damage = Mob-Schaden zufügen +gui.zflag_fall_damage = Fallschaden +gui.zflag_environmental_damage = Umweltschaden +gui.zflag_explosion_damage = Explosionsschaden +gui.zflag_fire_spread = Feuerausbreitung +gui.zflag_keep_inventory = Inventar behalten +gui.zflag_power_loss = Machtverlust +gui.zflag_build_allowed = Bauen erlaubt +gui.zflag_block_place = Blockplatzierung +gui.zflag_hammer_use = Hammernutzung +gui.zflag_builder_tools_use = Bauwerkzeuge +gui.zflag_block_interact = Blockinteraktion +gui.zflag_door_use = Türnutzung +gui.zflag_container_use = Behälternutzung +gui.zflag_bench_use = Werkbanknutzung +gui.zflag_processing_use = Verarbeitungsnutzung +gui.zflag_seat_use = Sitznutzung +gui.zflag_mount_use = Reitnutzung +gui.zflag_light_use = Lichtnutzung +gui.zflag_npc_use = NPC-Interaktion +gui.zflag_crate_pickup = Kiste aufheben +gui.zflag_crate_place = Kiste platzieren +gui.zflag_npc_tame = NPC zähmen +gui.zflag_npc_interact = NPC-Interaktion +gui.zflag_teleporter_use = Teleporternutzung +gui.zflag_portal_use = Portalnutzung +gui.zflag_mount_entry = Reittier betreten +gui.zflag_item_drop = Gegenstand fallen lassen +gui.zflag_item_pickup = Auto-Aufheben +gui.zflag_item_pickup_manual = F-Taste Aufheben +gui.zflag_invincible_items = Unzerstörbare Gegenstände +gui.zflag_mob_spawning = Mob-Spawning +gui.zflag_hostile_mob_spawning = Feindliche Mobs +gui.zflag_passive_mob_spawning = Passive Mobs +gui.zflag_neutral_mob_spawning = Neutrale Mobs +gui.zflag_npc_spawning = NPC-Spawning +gui.zflag_mob_clear = Mob-Bereinigung +gui.zflag_hostile_mob_clear = Feindliche Mobs entfernen +gui.zflag_passive_mob_clear = Passive Mobs entfernen +gui.zflag_neutral_mob_clear = Neutrale Mobs entfernen +gui.zflag_gravestone_access = Andere können Gräber plündern +gui.zflag_show_on_map = Auf Karte anzeigen +gui.zflag_essentials_homes = Heimnutzung +gui.zflag_essentials_warps = Warp-Nutzung +gui.zflag_essentials_kits = Kit-Anspruch + +# ========== Zonen-Eigenschaften ========== +zprop.current_custom = Aktuell: "{0}" (benutzerdefiniert) +zprop.current_default = Aktuell: "{0}" (Standard) +zprop.pvp_disabled = PvP deaktiviert +zprop.pvp_enabled = PvP aktiviert +zprop.name_empty = Name darf nicht leer sein. +zprop.renamed = Zone umbenannt zu "{0}". +zprop.name_taken = Eine Zone mit diesem Namen existiert bereits. +zprop.name_invalid = Ungültiger Name (max. 32 Zeichen). +zprop.rename_failed = Umbenennung fehlgeschlagen: {0} +zprop.upper_empty = Oberer Titel darf nicht leer sein. Verwenden Sie Leeren zum Zurücksetzen. +zprop.upper_set = Oberer Titel festgelegt. +zprop.upper_reset = Oberer Titel auf Standard zurückgesetzt. +zprop.lower_empty = Unterer Titel darf nicht leer sein. Verwenden Sie Leeren zum Zurücksetzen. +zprop.lower_set = Unterer Titel festgelegt. +zprop.lower_reset = Unterer Titel auf Standard zurückgesetzt. + +# ========== Beziehungen Zusätzlich ========== +relations.failed = Fehlgeschlagen: {0} + +# ========== Mitglieder Zusätzlich ========== +members.never = Nie +members.teleported = [Admin] Zu {0} teleportiert. + +# ========== Spielerinfo Zusätzlich ========== +playerinfo.records = {0} Einträge +playerinfo.joined_date = Beigetreten: {0} +playerinfo.current = Aktuell +playerinfo.left_date = Verlassen: {0} + +# ========== Zonenkarte ========== +map.world_warning = WARNUNG: Sie sind in '{0}' — Zone ist in '{1}' +map.position = Ihre Position: Chunk ({0}, {1}) +map.zone_gone = Zone existiert nicht mehr. +map.claimed = Chunk ({0}, {1}) für {2} beansprucht. +map.claim_failed = Chunk konnte nicht beansprucht werden: {0} +map.unclaimed = Chunk ({0}, {1}) von {2} freigegeben. +map.unclaim_failed = Chunk konnte nicht freigegeben werden: {0} +map.chunk_belongs = Dieser Chunk gehört zu {0}. +map.chunk_faction = Dieser Chunk ist von einer Fraktion beansprucht. +map.chunk_protected = Dieser Chunk befindet sich in einem geschützten Bereich. +map.another_zone = einer anderen Zone + +# ========== GUI-Beschriftungsschlüssel (für .ui fest codierte Text-Lokalisierung) ========== + +# Seitentitel +gui.title_dashboard = Admin-Übersicht +gui.title_main = Fraktions-Admin +gui.title_actions = Admin: Serveraktionen +gui.title_factions = Fraktionsverwaltung +gui.title_players = Spielerverwaltung +gui.title_economy = Admin: Serverwirtschaft +gui.title_zones = Zonenverwaltung +gui.title_backups = Sicherungen +gui.title_config = Konfiguration +gui.title_help = Admin-Hilfe +gui.title_updates = Aktualisierungen +gui.title_version = Version und Integrationen +gui.title_activity_log = Admin: Aktivitätsprotokoll +gui.title_player_info = Admin: Spielerinfo +gui.title_faction_info = Admin: Fraktionsinfo +gui.title_faction_settings = Admin: Fraktionseinstellungen +gui.title_faction_members = Admin: Mitglieder +gui.title_faction_relations = Admin: Beziehungen +gui.title_zone_map = Zonenkarten-Editor +gui.title_zone_settings = Admin: Zoneneinstellungen +gui.title_zone_properties = Admin: Zoneneigenschaften +gui.title_bulk_economy = Massen-Schatzkammer-Anpassung +gui.title_economy_adjust = Admin: Wirtschaft + +# Übersicht-Beschriftungen +gui.dash_server_stats = Serverstatistiken +gui.dash_factions = Fraktionen +gui.dash_total_members = Mitglieder gesamt +gui.dash_total_claims = Gebiete gesamt +gui.dash_zones = Zonen +gui.dash_safe_war = Sicher / Krieg +gui.dash_total_power = Macht gesamt +gui.dash_avg_power = Durchschn. Macht/Fraktion +gui.dash_total_economy = Wirtschaft gesamt +gui.dash_wealthiest = Reichste +gui.dash_avg_balance = Durchschn. Guthaben +gui.dash_protection_bypass = Schutzumgehung: + +# Allgemeine Schaltflächen und Beschriftungen +gui.search = Suche: +gui.sort = Sortieren: +gui.prev = < Zurück +gui.next = Weiter > +gui.back = Zurück +gui.done = Fertig +gui.cancel = Abbrechen +gui.apply = Anwenden +gui.set = Setzen +gui.reset = Zurücksetzen +gui.coming_soon = Demnächst +gui.zones_btn = Zonen +gui.reload_btn = Neu laden +gui.all = Alle +gui.safe = Sicher +gui.war = Krieg +gui.create_zone = + Erstellen + +# Aktionsseiten-Beschriftungen +gui.act_combat_stats = Kampfstatistiken +gui.act_combat_desc = Kills und Tode für ALLE Spieler auf dem Server zurücksetzen. Diese Aktion kann nicht rückgängig gemacht werden. +gui.act_reset_kd = Alle K/D zurücksetzen +gui.act_economy = Wirtschaft +gui.act_economy_desc = Geld zu ALLEN Fraktionsschatzkammern auf einmal hinzufügen oder entfernen. +gui.act_bulk_adjust = Massenhinzufügen/-entfernen +gui.act_upkeep_collection = Unterhaltseinzug +gui.act_upkeep_desc = Unterhaltseinzug für alle Fraktionen jetzt manuell auslösen, unabhängig vom geplanten Timer. +gui.act_trigger_upkeep = Unterhalt auslösen + +# Platzhalterseiten-Beschriftungen +gui.backup_heading = Sicherungsverwaltung +gui.backup_desc1 = Fraktionsdaten-Sicherungen erstellen, wiederherstellen und verwalten. +gui.backup_desc2 = Automatische Sicherungen werden im data/backups-Ordner gespeichert. +gui.config_heading = Konfigurationseditor +gui.config_desc1 = HyperFactions-Einstellungen direkt über die GUI konfigurieren. +gui.config_desc2 = Verwenden Sie vorerst /f reload, um Konfigurationsänderungen neu zu laden. +gui.help_heading = Admin-Dokumentation +gui.help_desc1 = Admin-Dokumentation und Befehlsreferenz anzeigen. +gui.help_desc2 = Besuchen Sie das HyperFactions-Wiki für Hilfe. +gui.updates_heading = Update-Center +gui.updates_desc1 = Nach neuen Versionen suchen und Changelogs anzeigen. +gui.updates_desc2 = Besuchen Sie die HyperFactions-Seite für die neuesten Updates. + +# Versionsseiten-Beschriftungen +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Hytale Server +gui.ver_java = Java +gui.ver_permissions = BERECHTIGUNGEN +gui.ver_placeholders = PLATZHALTER +gui.ver_economy_section = WIRTSCHAFT +gui.ver_protection = SCHUTZ +gui.ver_disabled = Deaktiviert + +# Spaltenüberschriften (seitenübergreifend) +gui.col_faction = Fraktion +gui.col_balance = Guthaben +gui.col_members = Mitglieder +gui.col_actions = Aktionen +gui.col_time = Zeit +gui.col_type = Typ +gui.col_message = Nachricht + +# Wirtschaftsseiten-Beschriftungen +gui.econ_total_balance = Gesamtguthaben +gui.econ_factions = Fraktionen +gui.econ_avg_balance = Durchschn. Guthaben +gui.econ_in_grace = In Gnadenfrist +gui.econ_collected = Eingezogen (24h) +gui.econ_next_collection = Nächster Einzug +gui.econ_no_data = Keine Fraktionen mit Wirtschaftsdaten. + +# Aktivitätsprotokoll-Beschriftungen +gui.log_type = Typ: +gui.log_time = Zeit: +gui.log_player = Spieler: +gui.log_no_logs = Keine Aktivitätsprotokolle passend zu den Filtern. + +# Spielerinfo-Beschriftungen +gui.plr_first_joined = Erstmals beigetreten: +gui.plr_last_online = Zuletzt online: +gui.plr_uuid = UUID: +gui.plr_faction = Fraktion: +gui.plr_role = Rolle: +gui.plr_view_faction = Fraktion anzeigen +gui.plr_power = Macht +gui.plr_max_power = Max. Macht +gui.plr_set_power = Setzen +gui.plr_reset_power = Zurücksetzen +gui.plr_set_max = Setzen +gui.plr_reset_max = Zurücksetzen +gui.plr_no_power_loss = Kein Machtverlust +gui.plr_no_claim_decay = Kein Gebietsverfall +gui.plr_kills = Kills +gui.plr_deaths = Tode +gui.plr_kdr = K/D-Verhältnis +gui.plr_reset_kd = K/D zurücksetzen +gui.plr_kick = Rauswerfen +gui.plr_membership_history = Mitgliedschaftsverlauf +gui.plr_no_faction_label = In keiner Fraktion +gui.plr_power_management = Machtverwaltung +gui.plr_combat_stats = Kampfstatistiken +gui.plr_bypass_flags = Umgehungs-Flags +gui.plr_admin_controls = Admin-Steuerung +gui.plr_kd_subtitle = K / D +gui.plr_max_prefix = Max.: +gui.plr_view = Anzeigen +gui.plr_kick_from_faction = Aus Fraktion werfen +gui.plr_set_max_btn = Max. setzen +gui.plr_combat = Kampf +gui.plr_reason_active = AKTIV +gui.plr_reason_left = VERLASSEN +gui.plr_reason_kicked = RAUSGEWORFEN +gui.plr_reason_disbanded = AUFGELÖST + +# Mitgliedseintrag-Beschriftungen +gui.mem_label_power = Macht: +gui.mem_label_joined = Beigetreten: +gui.mem_label_last_death = Letzter Tod: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Info +gui.mem_btn_teleport = Teleportieren +gui.mem_btn_promote = Befördern +gui.mem_btn_demote = Degradieren +gui.mem_btn_kick = Rauswerfen +gui.econ_not_enabled = Wirtschaftssystem ist nicht aktiviert. +gui.info_more = +{0} weitere +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7T +gui.log_time_all = Alle +gui.shape_circular = kreisförmig +gui.shape_square = quadratisch +gui.nav_title = Admin-Panel +gui.econ_btn_adjust = Anpassen +gui.econ_btn_info = Info + +# Fraktionsinfo-Beschriftungen +gui.fac_description = Beschreibung +gui.fac_power = Macht +gui.fac_claims = Gebiete +gui.fac_members = Mitglieder +gui.fac_recruitment = Aufnahme +gui.fac_founded = Gegründet +gui.fac_allies = Verbündete +gui.fac_enemies = Feinde +gui.fac_raidable = Plünderbarkeitsstatus +gui.fac_treasury = Schatzkammer +gui.fac_leader = Anführer +gui.fac_officers = Offiziere +gui.fac_view_members = Mitglieder anzeigen +gui.fac_view_relations = Beziehungen anzeigen +gui.fac_view_settings = Einstellungen +gui.fac_disband = Fraktion auflösen +gui.fac_power_management = Machtverwaltung +gui.fac_reset_all_power = Alle Macht zurücksetzen +gui.fac_econ_adjust = Guthaben anpassen +gui.fac_econ_view_log = Transaktionsprotokoll anzeigen +gui.fac_current_max = aktuell / max +gui.fac_claimed_max = beansprucht / max +gui.fac_relations = Beziehungen +gui.fac_ally_enemy = Verbündete / Feinde +gui.fac_status = Status +gui.fac_info = Info +gui.fac_treasury_balance = Schatzkammer-Guthaben +gui.fac_leadership = Führung +gui.fac_leader_label = Anführer: +gui.fac_officers_label = Offiziere: +gui.fac_econ_mgmt = Wirtschaftsverwaltung +gui.fac_danger_zone = Gefahrenzone +gui.fac_view_treasury = Schatzkammer anzeigen + +# Fraktionseinstellungen-Beschriftungen +gui.set_editing = Bearbeitung: +gui.set_general = Allgemeine Einstellungen +gui.set_name = Name +gui.set_tag = Tag +gui.set_description = Beschreibung +gui.set_recruitment = Aufnahme +gui.set_home = Heimstandort +gui.set_clear_home = Heim löschen +gui.set_disband_faction = Fraktion auflösen +gui.set_faction_color = Fraktionsfarbe +gui.set_admin_override = [Admin-Überschreibung] +gui.set_territory_perms = Territorialberechtigungen +gui.set_mob_spawning = Mob-Spawning +gui.set_faction_settings = Fraktionseinstellungen +gui.set_name_label = Name: +gui.set_tag_label = Tag: +gui.set_desc_label = Beschr.: +gui.set_edit = Bearbeiten +gui.set_status_label = Status: +gui.set_location_label = Standort: +gui.set_danger_zone = Gefahrenzone +gui.set_irreversible = Diese Aktion kann nicht rückgängig gemacht werden. +gui.set_lock_hint = Einige Optionen können vom Server gesperrt sein und lassen keine Änderungen zu. +gui.set_appearance = Erscheinung +gui.set_color_label = Farbe: +gui.set_mob_sub = (Unterelemente deaktiviert, wenn Hauptschalter aus ist) +gui.set_back_to_info = Zurück zu Info +gui.set_col_out = Ext +gui.set_col_ally = Verb +gui.set_col_mem = Mit +gui.set_col_off = Off +gui.set_cat_building = BAUEN +gui.set_cat_interaction = INTERAKTION +gui.set_cat_interact_sub = (Unterelemente deaktiviert, wenn Alle aus ist) +gui.set_cat_other = SONSTIGES +gui.set_perm_break = Abbauen +gui.set_perm_place = Platzieren +gui.set_perm_all = Alle +gui.set_perm_door = Tür +gui.set_perm_chest = Truhe +gui.set_perm_bench = Werkbank +gui.set_perm_processing = Verarbeitung +gui.set_perm_seat = Sitz +gui.set_perm_transport = Transport +gui.set_perm_crate_use = Kistennutzung +gui.set_perm_npc_tame = NPC zähmen +gui.set_perm_pve_damage = PvE-Schaden +gui.set_perm_mob_spawning = Mob-Spawning +gui.set_perm_hostile = Feindliche Mobs +gui.set_perm_passive = Passive Mobs +gui.set_perm_neutral = Neutrale Mobs +gui.set_perm_pvp = PvP im Territorium +gui.set_perm_officers_edit = Offiziere können bearbeiten + +# Fraktionsbeziehungen-Beschriftungen +gui.rel_subtitle = Fraktionsbeziehungen verwalten (umgeht Genehmigung) +gui.rel_set_new = Neue Beziehung setzen +gui.rel_btn_ally = Verbündeter +gui.rel_btn_neutral = Neutral +gui.rel_btn_enemy = Feind + +# Zonenseiten-Beschriftungen +gui.zone_sort_name = Name +gui.zone_sort_type = Typ +gui.zone_sort_chunks = Chunks +gui.zone_sort_world = Welt +gui.zone_count_format = {0} {1}Zonen ({2} Chunks) + +# Zonenkarten-Beschriftungen +gui.map_zone_chunk = Zonen-Chunk +gui.map_empty = Leer +gui.map_other_zone = Andere Zone +gui.map_faction_claim = Fraktionsgebiet +gui.map_protected = Geschützt +gui.map_your_pos = Ihre Position +gui.map_click_hint = Klicken zum Beanspruchen/Freigeben von Chunks +gui.map_legend_zone_safe = Diese Zone (Sicher) +gui.map_legend_zone_war = Diese Zone (Krieg) +gui.map_legend_other_safe = Andere SafeZone +gui.map_legend_other_war = Andere WarZone +gui.map_legend_faction = Fraktionsgebiet +gui.map_legend_unclaimed = Unbeansprucht +gui.map_legend_you_here = Sie sind hier +gui.map_action_hint = Linksklick: Für Zone beanspruchen | Rechtsklick: Von Zone freigeben +gui.map_done = Fertig + +# Zoneneigenschaften-Beschriftungen +gui.zprop_general = Allgemein +gui.zprop_zone_name = Zonenname +gui.zprop_zone_type = Zonentyp +gui.zprop_change_type = Typ ändern +gui.zprop_notifications = Benachrichtigungen +gui.zprop_show_entry = Eintrittsbenachrichtigung anzeigen +gui.zprop_upper_title = Oberer Titel +gui.zprop_upper_desc = Oberer Titel (kleiner Text über Zonenname) +gui.zprop_lower_title = Unterer Titel +gui.zprop_lower_desc = Unterer Titel (großer Zonennamen-Text) +gui.zprop_edit_flags = Flags bearbeiten +gui.zprop_back_to_zones = Zurück zu Zonen +gui.save = Speichern +gui.clear = Leeren + +# Massen-Wirtschafts-Beschriftungen +gui.bulk_header = Alle Fraktionsschatzkammern anpassen +gui.bulk_factions_label = Fraktionen: +gui.bulk_total_label = Gesamtguthaben: +gui.bulk_amount_hint = Betrag (positiv zum Hinzufügen, negativ zum Entfernen): +gui.bulk_hint = Dies wird auf jede Fraktion mit Schatzkammer angewendet +gui.bulk_warning_msg = Warnung: Diese Aktion betrifft ALLE Fraktionen und kann nicht rückgängig gemacht werden. +gui.bulk_apply_all = Auf alle anwenden +gui.bulk_operation = Vorgang +gui.bulk_add = Hinzufügen +gui.bulk_remove = Entfernen +gui.bulk_amount = Betrag +gui.bulk_warning = Dies betrifft ALLE Fraktionsschatzkammern. +gui.bulk_preview = Vorschau + +# Wirtschaftsanpassungs-Beschriftungen +gui.ecadj_header = Schatzkammer-Guthaben anpassen +gui.ecadj_faction_label = Fraktion: +gui.ecadj_current_balance = Aktuelles Guthaben: +gui.ecadj_amount_hint = Betrag (positiv zum Hinzufügen, negativ zum Abziehen): +gui.ecadj_preview_hint = Geben Sie eine Zahl ein, um die Änderung vorab anzuzeigen +gui.ecadj_adjustment = Anpassung: +gui.ecadj_set_balance = Guthaben setzen +gui.ecadj_confirm = +/- bestätigen +gui.ecadj_operation = Vorgang +gui.ecadj_add = Hinzufügen +gui.ecadj_remove = Entfernen +gui.ecadj_set_to = Setzen auf +gui.ecadj_amount = Betrag +gui.ecadj_new_balance = Neues Guthaben: + +# Versionsseiten-Integrationsbeschriftungen +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Nativ +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Grabsteine +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Schatzkammer + +# Alle-Gebiete-freigeben-Bestätigungsdialog-Beschriftungen +gui.unclaim_title = Alle Gebiete freigeben +gui.unclaim_confirm_msg1 = Sind Sie sicher, dass Sie alle freigeben möchten +gui.unclaim_confirm_msg2 = von +gui.unclaim_warning = Diese Aktion kann nicht rückgängig gemacht werden! +gui.unclaim_all = Alle freigeben + +# Zonen-Umbenennungsdialog-Beschriftungen +gui.zren_title = Zone umbenennen +gui.zren_current = Aktuell: +gui.zren_new_name = Neuer Name: + +# Zonen-Typänderungsdialog-Beschriftungen +gui.ztype_title = Zonentyp ändern +gui.ztype_zone_label = Zone: +gui.ztype_current = Aktuell: +gui.ztype_will_become = wird zu +gui.ztype_new = Neu: +gui.ztype_warning1 = Verschiedene Zonentypen haben verschiedene Standard-Flag-Werte. +gui.ztype_warning2 = Wählen Sie, wie bestehende Flag-Einstellungen behandelt werden sollen: +gui.ztype_keep_desc = Benutzerdefinierte Überschreibungen beibehalten +gui.ztype_keep_flags = Flags beibehalten +gui.ztype_reset_desc = Neue Typ-Standards verwenden +gui.ztype_reset_flags = Flags zurücksetzen + +# Zonenerstellungs-Assistent-Beschriftungen +gui.czw_title = Zone erstellen +gui.czw_back = < Zurück +gui.czw_create = Zone erstellen +gui.czw_zone_type = Zonentyp +gui.czw_safe_desc = Geschützt, kein PvP +gui.czw_war_desc = Kampf, PvP aktiviert +gui.czw_zone_name = Zonenname +gui.czw_name_desc = Geben Sie einen eindeutigen Namen für die Zone ein +gui.czw_claim_method = Beanspruchungsmethode +gui.czw_method_none_desc = Leere Zone erstellen +gui.czw_method_none = Keine Gebiete +gui.czw_method_single_desc = Ihr aktueller Chunk +gui.czw_method_single = Einzelner Chunk +gui.czw_method_circle_desc = Kreisförmiges Gebiet +gui.czw_method_circle = Kreisradius +gui.czw_method_square_desc = Quadratisches Gebiet +gui.czw_method_square = Quadratradius +gui.czw_method_map_desc = Interaktiver Chunk-Editor +gui.czw_method_map = Gebietskarte verwenden +gui.czw_radius = Radius +gui.czw_custom_radius = Benutzerdefiniert (1-50): +gui.czw_flags = Flags +gui.czw_flags_defaults_desc = Basierend auf Zonentyp +gui.czw_flags_defaults = Standards verwenden +gui.czw_flags_customize_desc = Einstellungen danach öffnen +gui.czw_flags_customize = Anpassen + +# ========== Eintrags-Beschriftungen (Fraktions-/Spieler-/Zonenlisten-Einträge) ========== + +# Fraktionseintrag-Beschriftungen +gui.fac_entry_power = Macht +gui.fac_entry_claims = Gebiete +gui.fac_entry_members = Mitglieder +gui.fac_entry_created = Gegründet: +gui.fac_entry_home = Heim: +gui.fac_entry_tp_home = TP Heim +gui.fac_entry_view_info = Info anzeigen +gui.fac_entry_members_btn = Mitglieder +gui.fac_entry_settings = Einstellungen +gui.fac_entry_unclaim_all = Alle freigeben +gui.fac_entry_disband = Auflösen + +# Spielereintrag-Beschriftungen +gui.plr_entry_role = Rolle: +gui.plr_entry_joined = Beigetreten: +gui.plr_entry_last_online = Zuletzt online: +gui.plr_entry_kdr = K/D/R: +gui.plr_entry_power = Macht: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Info +gui.plr_entry_teleport = Teleportieren +gui.plr_entry_na = N/A +gui.plr_entry_unknown = Unbekannt +gui.plr_entry_ago = vor {0} + +# Zoneneintrag-Beschriftungen +gui.zone_entry_world = Welt: +gui.zone_entry_chunks = Chunks: +gui.zone_entry_bounds = Grenzen: +gui.zone_entry_created = Erstellt: +gui.zone_entry_edit_map = Karte bearbeiten +gui.zone_entry_flags = Flags +gui.zone_entry_settings = Einstellungen +gui.zone_entry_delete = Löschen diff --git a/src/main/resources/Server/Languages/de-DE/hyperfactions_gui.lang b/src/main/resources/Server/Languages/de-DE/hyperfactions_gui.lang new file mode 100644 index 00000000..5d4e722d --- /dev/null +++ b/src/main/resources/Server/Languages/de-DE/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Deutsche Übersetzungen +# Format: key = value +# Hinweis: Schlüssel werden automatisch mit "hyperfactions_gui." durch Hytales I18nModule vorangestellt + +# ========== Navigationsleiste ========== +nav.dashboard = Übersicht +nav.chat = Chat +nav.members = Mitglieder +nav.invites = Einladungen +nav.browser = Durchsuchen +nav.map = Karte +nav.leaderboard = Rangliste +nav.relations = Beziehungen +nav.treasury = Schatzkammer +nav.settings = Einstellungen +nav.logs = Protokolle +nav.help = Hilfe +nav.admin = Admin +nav.create = Erstellen + +# ========== Hilfe-Kategorienamen ========== +help.category.welcome = Willkommen +help.category.your_faction = Ihre Fraktion +help.category.power_land = Macht & Land +help.category.diplomacy = Diplomatie +help.category.combat = Kampf & Sicherheit +help.category.economy = Wirtschaft +help.category.quick_ref = Kurzreferenz + +# ========== Admin-Hilfe-Kategorienamen ========== +help.category.admin_overview = Übersicht +help.category.admin_factions = Fraktionen +help.category.admin_zones = Zonen +help.category.admin_power = Macht +help.category.admin_economy = Wirtschaft +help.category.admin_config = Konfiguration +help.category.admin_maintenance = Wartung +help.category.admin_reference = Referenz + +# ========== Hauptmenü ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Meine Fraktion +main_menu.section_get_started = Erste Schritte +main_menu.section_territory = Territorium +main_menu.section_browse = Durchsuchen +main_menu.section_admin = Admin +main_menu.claim_hint = Verwenden Sie /f claim, um Territorium zu beanspruchen. + +# ========== Fraktionsinfo-Seite ========== +faction_info.title = Fraktionsinfo +faction_info.no_description = Keine Beschreibung festgelegt. +faction_info.status_open = Offen +faction_info.status_invite_only = Nur auf Einladung +faction_info.status_raidable = Plünderbar +faction_info.status_protected = Geschützt +faction_info.officers_more = +{0} weitere +faction_info.power_header = Macht +faction_info.claims_header = Gebietsansprüche +faction_info.members_header = Mitglieder +faction_info.relations_header = Beziehungen +faction_info.status_header = Status +faction_info.treasury_header = Schatzkammer +faction_info.current_max = aktuell / max +faction_info.claimed_max = beansprucht / max +faction_info.ally_enemy = Verbündete / Feinde +faction_info.faction_balance = Fraktionsguthaben +faction_info.leader_label = Anführer: +faction_info.officers_label = Offiziere: +faction_info.view_members_btn = Mitglieder anzeigen +faction_info.relations_btn = Beziehungen +faction_info.back_btn = Zurück + +# ========== Umbenennungsdialog ========== +rename.title = Fraktion umbenennen +rename.current_label = Aktuell: +rename.new_name_label = Neuer Name: +rename.no_permission = Sie haben keine Berechtigung, die Fraktion umzubenennen. +rename.enter_name = Bitte geben Sie einen Fraktionsnamen ein. +rename.too_short = Fraktionsname muss mindestens {0} Zeichen lang sein. +rename.too_long = Fraktionsname darf {0} Zeichen nicht überschreiten. +rename.same_name = Das ist bereits der Name Ihrer Fraktion. +rename.name_taken = Eine Fraktion mit diesem Namen existiert bereits. +rename.success = Fraktion umbenannt von {0} zu {1}! + +# ========== Beschreibungsdialog ========== +desc.title = Beschreibung bearbeiten +desc.current_label = Aktuell: +desc.new_desc_label = Neue Beschreibung: +desc.no_permission = Sie haben keine Berechtigung, die Beschreibung zu bearbeiten. +desc.display_none = (Keine) +desc.cleared = Fraktionsbeschreibung gelöscht. +desc.updated = Fraktionsbeschreibung aktualisiert! + +# ========== Tag-Dialog ========== +tag.title = Tag bearbeiten +tag.current_label = Aktuell: +tag.instructions = Tag (1-5 Zeichen, nur Buchstaben und Zahlen): +tag.help_text = Tags erscheinen im Chat und auf der Karte +tag.no_permission = Sie haben keine Berechtigung, den Tag zu bearbeiten. +tag.display_none = (Keiner) +tag.cleared = Fraktionstag gelöscht. +tag.too_short = Tag muss mindestens {0} Zeichen lang sein. +tag.too_long = Tag darf {0} Zeichen nicht überschreiten. +tag.invalid_format = Tag darf nur Buchstaben und Zahlen enthalten. +tag.same_tag = Das ist bereits der Tag Ihrer Fraktion. +tag.tag_taken = Eine Fraktion mit diesem Tag existiert bereits. +tag.success = Fraktionstag auf [{0}] gesetzt! + +# ========== Dashboard-Seite ========== +dashboard.title = Fraktionsübersicht +dashboard.power_label = Macht +dashboard.land_label = Gebietsansprüche +dashboard.members_label = Mitglieder +dashboard.online_label = Online +dashboard.allies_label = Verbündete +dashboard.enemies_label = Feinde +dashboard.relations_label = Beziehungen +dashboard.ally_enemy_label = Verbündete / Feinde +dashboard.status_label = Status +dashboard.invites_label = Einladungen +dashboard.sent_requests_label = gesendet / Anfragen +dashboard.treasury_label = Schatzkammer +dashboard.upkeep_label = Unterhalt +dashboard.per_cycle = pro Zyklus +dashboard.your_wallet = Ihre Geldbörse +dashboard.personal_balance = persönliches Guthaben +dashboard.quick_actions = Schnellaktionen +dashboard.teleport_label = Teleportation +dashboard.territory_label = Territorium +dashboard.channel_label = Kanal +dashboard.membership_label = Mitgliedschaft +dashboard.recent_activity = Letzte Aktivität +dashboard.view_all = Alle anzeigen +dashboard.income_24h = Einnahmen (24h) +dashboard.deposits_transfers_in = Einzahlungen, eingehende Überweisungen +dashboard.expenses_24h = Ausgaben (24h) +dashboard.withdrawals_transfers_out = Abhebungen, ausgehende Überweisungen +dashboard.faction_gone = Ihre Fraktion existiert nicht mehr. +dashboard.available = {0} verfügbar +dashboard.at_risk = Gefährdet! +dashboard.online_count = {0} online +dashboard.status_invite = Einladung +dashboard.in_grace = IN GNADENFRIST +dashboard.billable_chunks = {0} kostenpflichtige Chunks +dashboard.btn_home = Heim +dashboard.btn_set_home = Heim setzen +dashboard.btn_claim = Beanspruchen +dashboard.chat_prefix = Chat: {0} +dashboard.btn_leave = Verlassen +dashboard.no_activity = Keine neuere Aktivität. +dashboard.time_now = jetzt +dashboard.time_minutes = vor {0}m +dashboard.time_hours = vor {0}h +dashboard.time_days = vor {0}T +dashboard.no_home_hint = Ihre Fraktion hat kein Heim. Bitten Sie einen Offizier, eines festzulegen. +dashboard.chat_mode_set = Chat-Modus: {0} +dashboard.claim_success = Chunk bei ({0}, {1}) beansprucht +dashboard.upkeep_in = in {0} + +# ========== Fraktions-Hauptseite ========== +main.no_faction = Keine Fraktion +main.joined = Sie sind der Fraktion beigetreten! +main.join_failed = Beitritt zur Fraktion fehlgeschlagen: {0} +main.invite_declined = Einladung abgelehnt. +main.cooldown = Teleportation auf Abklingzeit! Noch {0}s verbleibend. +main.world_not_found = Teleportation nicht möglich — Welt nicht gefunden. +main.leave_failed = Verlassen fehlgeschlagen: {0} + +# ========== Gemeinsame GUI-Beschriftungen ========== +common.faction_count = {0} Fraktionen +common.leader_label = Anführer: {0} +common.sort_power = Macht +common.sort_members = Mitglieder +common.page_format = {0}/{1} +common.own_faction = (Sie) +common.search = Suche: +common.sort = Sortieren: +common.prev = < Zurück +common.next = Weiter > +common.treasury_not_available = Schatzkammer ist nicht verfügbar. + +# ========== Mitgliederseite ========== +members.title = Mitglieder +members.search_label = Suche: +members.sort_label = Sortieren: +members.prev_btn = < Zurück +members.next_btn = Weiter > +members.count = {0} Mitglieder +members.sort_role = Rolle +members.sort_last_online = Zuletzt online +members.just_now = gerade eben +members.ago = vor {0} +members.never = Nie +members.member_not_found = Mitglied nicht gefunden. +members.promoted = {0} zu {1} befördert. +members.promote_failed = Beförderung fehlgeschlagen: {0} +members.demoted = {0} zu {1} degradiert. +members.demote_failed = Degradierung fehlgeschlagen: {0} +members.kicked = {0} aus der Fraktion geworfen. +members.kick_failed = Rauswurf fehlgeschlagen: {0} +members.label_power = Macht: +members.label_joined = Beigetreten: +members.label_last_death = Letzter Tod: +members.btn_promote = Befördern +members.btn_demote = Degradieren +members.btn_kick = Rauswerfen +members.btn_make_leader = Zum Anführer machen +members.btn_profile = Profil +members.self_label = (Sie) + +# ========== Browser-Seite ========== +browser.title = Fraktionen durchsuchen +browser.search_label = Suche: +browser.sort_label = Sortieren: +browser.prev_btn = < Zurück +browser.next_btn = Weiter > +browser.sort_name = Name +browser.invalid_faction = Ungültige Fraktion. +browser.label_power = Macht +browser.label_claims = Gebietsansprüche +browser.label_members = Mitglieder +browser.label_recruitment = Aufnahme: +browser.label_created = Gegründet: +browser.label_description = Beschreibung: +browser.view_info_btn = Info anzeigen +browser.label_leader = Anführer: +browser.no_description = Keine Beschreibung festgelegt + +# ========== Ranglisten-Seite ========== +leaderboard.title = Fraktionsrangliste +leaderboard.rank_by = Sortieren nach: +leaderboard.col_rank = # +leaderboard.col_faction = Fraktion +leaderboard.col_claims = Gebiete +leaderboard.col_members = Mitglieder +leaderboard.prev_btn = < Zurück +leaderboard.next_btn = Weiter > +leaderboard.sort_kd = K/D +leaderboard.sort_territory = Territorium +leaderboard.sort_balance = Guthaben + +# ========== Spielerinfo-Seite ========== +playerinfo.title = Spielerinfo +playerinfo.first_joined_label = Erstmals beigetreten: +playerinfo.last_online_label = Zuletzt online: +playerinfo.faction_label = Fraktion: +playerinfo.role_label = Rolle: +playerinfo.joined_label_static = Beigetreten: +playerinfo.not_in_faction = In keiner Fraktion +playerinfo.power_header = Macht +playerinfo.current_max = aktuell / max +playerinfo.combat_header = Kampf +playerinfo.kills_deaths = Kills / Tode +playerinfo.kdr_header = K/D-Verhältnis +playerinfo.membership_history = Mitgliedschaftsverlauf +playerinfo.view_faction_btn = Fraktion anzeigen +playerinfo.back_btn = Zurück +playerinfo.now = Jetzt +playerinfo.history_count = {0} Einträge +playerinfo.joined_label = Beigetreten: {0} +playerinfo.current = Aktuell +playerinfo.left_label = Verlassen: {0} +playerinfo.no_history = Kein Mitgliedschaftsverlauf +playerinfo.faction_gone = Fraktion existiert nicht mehr. +playerinfo.reason_active = AKTIV +playerinfo.reason_left = VERLASSEN +playerinfo.reason_kicked = RAUSGEWORFEN +playerinfo.reason_disbanded = AUFGELÖST + +# ========== Beziehungsseite ========== +relations.title = Beziehungen +relations.tab_relations = Beziehungen +relations.tab_pending = Ausstehend +relations.set_relation_btn = + Beziehung setzen +relations.prev_btn = < Zurück +relations.next_btn = Weiter > +relations.relation_count = {0} Beziehungen +relations.request_count = {0} Anfragen +relations.type_ally = Verbündeter +relations.type_enemy = Feind +relations.type_incoming = Eingehend +relations.type_outgoing = Ausgehend +relations.incoming_request = Eingehende Anfrage +relations.outgoing_request = Ausgehende Anfrage +relations.empty_relations = Noch keine Beziehungen. +relations.empty_relations_hint = Noch keine Beziehungen. Klicken Sie auf + BEZIEHUNG SETZEN, um Verbündete oder Feinde hinzuzufügen. +relations.empty_pending = Keine ausstehenden Allianzanfragen. +relations.today = Heute +relations.one_day_ago = Vor 1 Tag +relations.days_ago = Vor {0} Tagen +relations.now_neutral = Jetzt neutral mit {0}. +relations.now_enemies = Jetzt verfeindet mit {0}! +relations.request_sent = Allianzanfrage an {0} gesendet. +relations.now_allied = Jetzt verbündet mit {0}! +relations.request_declined = Allianzanfrage von {0} abgelehnt. +relations.request_cancelled = Allianzanfrage an {0} abgebrochen. +relations.failed = Fehlgeschlagen: {0} +relations.search_hint = Nach einer Fraktion suchen, um Beziehung zu setzen +relations.no_results = Keine Fraktionen gefunden für '{0}' +relations.power_display = {0} Macht +relations.member_count = {0} Mitglieder +relations.label_members = Mitglieder +relations.label_power = Macht +relations.label_since = Seit: +relations.label_claims = Gebiete: +relations.label_direction = Richtung: +relations.btn_view = Anzeigen +relations.btn_neutral = Neutral +relations.btn_enemy = Feind +relations.btn_ally = Verbündeter +relations.btn_accept = Annehmen +relations.btn_decline = Ablehnen +relations.btn_cancel = Abbrechen + +# ========== Einstellungsseite ========== +settings.title = Fraktionseinstellungen +settings.general = Allgemein +settings.name_label = Name: +settings.tag_label = Tag: +settings.desc_label = Beschr.: +settings.edit_btn = Bearbeiten +settings.recruitment = Aufnahme +settings.status_label = Status: +settings.home_location = Heimstandort +settings.location_label = Standort: +settings.set_home_btn = Heim setzen +settings.teleport_btn = Teleportieren +settings.delete_btn = Löschen +settings.optional_features = Optionale Funktionen +settings.configure_modules = Optionale Module konfigurieren. +settings.modules_btn = Module +settings.danger_zone = Gefahrenzone +settings.irreversible = Diese Aktion kann nicht rückgängig gemacht werden. +settings.disband_btn = Fraktion auflösen +settings.lock_hint = Einige Optionen können vom Server gesperrt sein und lassen keine Änderungen zu. +settings.territory_permissions = Territorialberechtigungen +settings.col_out = Ext +settings.col_ally = Verb +settings.col_mem = Mit +settings.col_off = Off +settings.cat_building = BAUEN +settings.perm_break = Abbauen +settings.perm_place = Platzieren +settings.cat_interaction = INTERAKTION +settings.interaction_hint = (Unterelemente deaktiviert, wenn Alle aus ist) +settings.perm_all = Alle +settings.perm_door = Tür +settings.perm_chest = Truhe +settings.perm_bench = Werkbank +settings.perm_processing = Verarbeitung +settings.perm_seat = Sitz +settings.perm_transport = Transport +settings.cat_other = SONSTIGES +settings.perm_crate = Kistennutzung +settings.perm_npc_tame = NPC zähmen +settings.perm_pve = PvE-Schaden +settings.appearance = Erscheinung +settings.color_label = Farbe: +settings.mob_spawning = Mob-Spawning +settings.mob_spawning_hint = (Unterelemente deaktiviert, wenn Hauptschalter aus ist) +settings.mob_spawning_label = Mob-Spawning +settings.hostile_mobs = Feindliche Mobs +settings.passive_mobs = Passive Mobs +settings.neutral_mobs = Neutrale Mobs +settings.faction_settings = Fraktionseinstellungen +settings.pvp_in_territory = PvP im Territorium +settings.officers_can_edit = Offiziere können bearbeiten +settings.leader_only = Nur Anführer +settings.officers_only = Nur Offiziere und Anführer können Fraktionseinstellungen ändern. +settings.display_none = (Keine) +settings.home_not_set = Nicht festgelegt +settings.no_permission = Sie haben keine Berechtigung, Einstellungen zu ändern. +settings.only_leader_disband = Nur der Anführer kann die Fraktion auflösen. +settings.perm_locked = Diese Einstellung ist vom Server gesperrt. +settings.no_perm_edit = Sie haben keine Berechtigung, Territorialberechtigungen zu bearbeiten. +settings.only_leader_officers = Nur der Anführer kann den Offizierstatus ändern. +settings.pvp_enabled = Aktiviert +settings.pvp_disabled = Deaktiviert +settings.not_in_territory = Sie müssen im Territorium Ihrer Fraktion sein, um das Heim zu setzen. +settings.home_set = Fraktionsheim auf Ihren aktuellen Standort gesetzt! +settings.recruitment_set = Aufnahme auf {0} gesetzt. +settings.home_no_set = Ihre Fraktion hat kein Heim festgelegt. +settings.home_deleted = Fraktionsheim gelöscht! + +# ========== Modulseite ========== +modules.title = Fraktionsmodule +modules.description = Optionale Funktionen zur Verbesserung Ihrer Fraktion +modules.configure_btn = Konfigurieren +modules.back_btn = < Zurück zu Einstellungen +modules.treasury_name = Schatzkammer +modules.treasury_desc = Fraktionsbank & Wirtschaftssystem +modules.raids_name = Überfälle +modules.raids_desc = Geplante Fraktionskämpfe +modules.levels_name = Stufen +modules.levels_desc = Fraktionsfortschritt & XP +modules.war_name = Krieg +modules.war_desc = Formelle Kriegserklärungen +modules.coming_soon = Demnächst +modules.active = Aktiv +modules.view_treasury = Schatzkammer anzeigen +modules.unavailable = Nicht verfügbar +modules.no_economy = Kein Wirtschafts-Plugin erkannt +modules.disabled = Deaktiviert +modules.economy_not_available = Wirtschaftsfunktionen sind auf diesem Server nicht verfügbar + +# ========== Schatzkammer-Seite ========== +treasury.title = Fraktionsschatzkammer +treasury.balance_label = Guthaben +treasury.income_24h = Einnahmen (24h) +treasury.deposits_transfers_in = Einzahlungen, eingehende Überweisungen +treasury.expenses_24h = Ausgaben (24h) +treasury.withdrawals_transfers_out = Abhebungen, ausgehende Überweisungen +treasury.maintenance = UNTERHALT +treasury.runway_label = Laufzeit: +treasury.add_funds = Geld hinzufügen +treasury.deposit_btn = Einzahlen +treasury.take_funds = Geld entnehmen +treasury.withdraw_btn = Abheben +treasury.send_to_faction = An Fraktion senden +treasury.transfer_btn = Überweisen +treasury.treasury_config = Schatzkammer-Einstellungen +treasury.settings_btn = Einstellungen +treasury.recent_transactions = Letzte Transaktionen +treasury.no_transactions = Noch keine Transaktionen +treasury.col_date = Datum +treasury.col_type = Typ +treasury.col_by = Von +treasury.col_amount = Betrag +treasury.col_details = Details +treasury.pay_now_btn = Jetzt bezahlen +treasury.cost_7d = 7T: +treasury.cost_14d = 14T: +treasury.cost_30d = 30T: +treasury.settings_title = Schatzkammer-Einstellungen +treasury.officer_permissions = OFFIZIERSBERECHTIGUNGEN +treasury.allow_withdraw = Offizieren Abhebungen erlauben +treasury.allow_transfer = Offizieren Überweisungen erlauben +treasury.limits_section = ABHEBUNGS- UND ÜBERWEISUNGSLIMITS +treasury.max_per_withdrawal = Max. pro Abhebung: +treasury.max_withdrawals_per = Max. Abhebungen pro Zeitraum: +treasury.max_per_transfer = Max. pro Überweisung: +treasury.max_transfers_per = Max. Überweisungen pro Zeitraum: +treasury.limit_period = Limitzeitraum (Stunden): +treasury.no_limit_hint = Auf 0 setzen für kein Limit +treasury.upkeep_settings = UNTERHALTSEINSTELLUNGEN +treasury.auto_pay_upkeep = Unterhalt automatisch aus der Schatzkammer bezahlen +treasury.back_btn = Zurück +treasury.upkeep_cost_format = {0} alle {1}h +treasury.upkeep_time_left = {0} verbleibend +treasury.wallet_label = Ihre Geldbörse: {0} +treasury.treasury_label = Schatzkammerguthaben: {0} +treasury.chunks_detail = {0} kostenlos + {1} kostenpflichtige Chunks +treasury.cost_label = Kosten: {0} +treasury.pending = Ausstehend +treasury.auto_pay_on = Auto-Zahlung: AN +treasury.auto_pay_off = Auto-Zahlung: AUS +treasury.runway_90_plus = 90+ Tage +treasury.runway_days = {0} Tage +treasury.runway_day = {0} Tag +treasury.runway_less_day = < 1 Tag +treasury.runway_no_funds = Kein Guthaben +treasury.grace_expires = Gnadenfrist endet in: {0} +treasury.missed_payments = Versäumte Zahlungen: {0} +treasury.pay_to_clear = {0} zahlen, um Gnadenfrist aufzuheben +treasury.system = System +treasury.type_deposit = Einzahlung +treasury.type_withdrawal = Abhebung +treasury.type_transfer_in = Eingehende Überweisung +treasury.type_transfer_out = Ausgehende Überweisung +treasury.type_player_transfer = Spielerüberweisung +treasury.type_upkeep = Unterhalt +treasury.type_tax = Steuereinnahmen +treasury.type_war_cost = Kriegskosten +treasury.type_raid_cost = Überfallkosten +treasury.type_spoils = Beute +treasury.type_admin = Admin-Anpassung +treasury.deposit_title = In Schatzkammer einzahlen +treasury.withdraw_title = Aus Schatzkammer abheben +treasury.fee_label = Gebühr ({0}%) +treasury.confirm_deposit = Einzahlung bestätigen +treasury.confirm_withdrawal = Abhebung bestätigen +treasury.from_wallet = {0} aus Geldbörse +treasury.to_wallet = {0} an Geldbörse +treasury.enter_valid_amount = Geben Sie einen gültigen positiven Betrag ein. +treasury.insufficient_wallet = Unzureichendes Geldbörsenguthaben. Benötigt {0}, vorhanden {1}. +treasury.wallet_withdraw_failed = Abhebung von Ihrer Geldbörse fehlgeschlagen. +treasury.deposit_failed_returned = Einzahlung fehlgeschlagen. Geld zurückerstattet. +treasury.deposited = {0} in die Schatzkammer eingezahlt. +treasury.deposited_fee = {0} in die Schatzkammer eingezahlt. (Gebühr: {1}) +treasury.no_withdraw_permission = Sie haben keine Berechtigung zum Abheben. +treasury.withdraw_denied = Abhebung abgelehnt: {0} +treasury.insufficient_treasury = Unzureichendes Guthaben in der Schatzkammer. +treasury.withdraw_limit = Abhebungslimit überschritten. +treasury.withdraw_failed = Abhebung fehlgeschlagen: {0} +treasury.wallet_deposit_warn = Warnung: Einzahlung in Ihre Geldbörse fehlgeschlagen. Kontaktieren Sie einen Admin. +treasury.withdrew = {0} aus der Schatzkammer abgehoben. +treasury.withdrew_fee = {0} aus der Schatzkammer abgehoben. (Gebühr: {1}, erhalten: {2}) +treasury.search_hint = Nach einem Spieler oder einer Fraktion suchen +treasury.no_results = Keine Ergebnisse für '{0}' +treasury.tag_player = [Spieler] +treasury.tag_faction = [Fraktion] +treasury.source_online = Online +treasury.source_offline = Offline +treasury.source_player_db = Hytale-Spieler +treasury.no_transfer_permission = Sie haben keine Berechtigung zum Überweisen. +treasury.transfer_denied = Überweisung abgelehnt: {0} +treasury.invalid_target_faction = Ungültige Zielfraktion. +treasury.target_faction_gone = Zielfraktion existiert nicht mehr. +treasury.transfer_failed = Überweisung fehlgeschlagen: {0} +treasury.transfer_failed_returned = Überweisung fehlgeschlagen. Geld zurückerstattet. +treasury.transferred = {0} an {1} überwiesen. +treasury.invalid_target_player = Ungültiger Zielspieler. +treasury.player_transfer_failed = Einzahlung in Spielergeldbörse fehlgeschlagen. Überweisung zurückgerollt. +treasury.leader_only_perms = Nur der Anführer kann Schatzkammer-Berechtigungen ändern. +treasury.leader_only_upkeep = Nur der Anführer kann Unterhaltseinstellungen ändern. +treasury.invalid_limit = Ungültige Zahl in den Limitfeldern. Verwenden Sie 0 für unbegrenzt. + +# ========== Bestätigungsseiten ========== +confirm.disband_title = Fraktion auflösen +confirm.disband_prompt = Sind Sie sicher, dass Sie auflösen möchten +confirm.disband_warning = Diese Aktion kann nicht rückgängig gemacht werden! +confirm.leave_title = Fraktion verlassen +confirm.leave_prompt = Sind Sie sicher, dass Sie verlassen möchten +confirm.leave_warning = Sie verlieren den Zugang zum Fraktionsterritorium. +confirm.leader_leave_title = Als Anführer verlassen +confirm.leader_leave_prompt = Sie verlassen +confirm.transfer_title = Führung übertragen +confirm.transfer_prompt = Sind Sie sicher, dass Sie die Führung übertragen möchten an +confirm.transfer_warning = Sie werden zum Offizier. +confirm.disband_not_leader = Nur der Anführer kann die Fraktion auflösen. +confirm.disbanded = Fraktion '{0}' wurde aufgelöst. +confirm.disband_failed = Auflösung der Fraktion fehlgeschlagen. +confirm.succession_title = Führung wird übertragen an: +confirm.no_members_warning = WARNUNG: Keine weiteren Mitglieder! +confirm.will_disband = Verlassen wird die Fraktion dauerhaft auflösen. +confirm.not_in_faction = Sie sind nicht in dieser Fraktion. +confirm.not_leader_anymore = Sie sind nicht mehr der Anführer. +confirm.no_successor = Kein Nachfolger verfügbar. Verwenden Sie stattdessen Auflösen. +confirm.transfer_failed = Führungsübertragung fehlgeschlagen: {0} +confirm.leader_left = Führung an {0} übertragen. Sie haben {1} verlassen. +confirm.leave_failed = Verlassen der Fraktion fehlgeschlagen: {0} +confirm.leader_cannot_leave = Anführer können nicht verlassen. Übertragen Sie die Führung oder lösen Sie die Fraktion auf. +confirm.left_faction = Sie haben {0} verlassen. +confirm.faction_gone = Fraktion existiert nicht mehr. +confirm.not_leader_transfer = Nur der Anführer kann die Führung übertragen. +confirm.leadership_transferred = Führung an {0} übertragen. + +# ========== Protokollansicht ========== +logs.title = {0} - Aktivitätsprotokolle +logs.entry_count = {0} Einträge +logs.filter_label = Filter: +logs.col_time = Zeit +logs.col_type = Typ +logs.col_message = Nachricht +logs.prev_btn = < Zurück +logs.next_btn = Weiter > +logs.all_types = Alle Typen +logs.no_logs_type = Keine Protokolle dieses Typs. +logs.no_logs = Noch keine Aktivitätsprotokolle. +logs.time_just_now = gerade eben +logs.time_minute = vor {0} Minute +logs.time_minutes = vor {0} Minuten +logs.time_hour = vor {0} Stunde +logs.time_hours = vor {0} Stunden +logs.time_day = vor {0} Tag +logs.time_days = vor {0} Tagen +logs.time_week = vor {0} Woche +logs.time_weeks = vor {0} Wochen +logs.type_member_join = Beitritt +logs.type_member_leave = Austritt +logs.type_member_kick = Rauswurf +logs.type_member_promote = Beförderung +logs.type_member_demote = Degradierung +logs.type_claim = Beanspruchung +logs.type_unclaim = Freigabe +logs.type_overclaim = Überbeanspruchung +logs.type_home_set = Heim gesetzt +logs.type_relation_ally = Verbündeter +logs.type_relation_enemy = Feind +logs.type_relation_neutral = Neutral +logs.type_leader_transfer = Übertragung +logs.type_settings_change = Einstellungen +logs.type_power_change = Macht +logs.type_economy = Wirtschaft +logs.type_admin_power = Admin-Macht + +# Protokollnachricht-Vorlagen (i18n für Aktivitätsprotokoll-Inhalte) +# Spieleraktionen +logs.msg_faction_created = {0} hat die Fraktion gegründet +logs.msg_member_joined = {0} ist der Fraktion beigetreten +logs.msg_member_left = {0} hat die Fraktion verlassen +logs.msg_member_kicked = {0} wurde rausgeworfen +logs.msg_member_promoted = {0} befördert zu {1} +logs.msg_member_demoted = {0} degradiert zu {1} +logs.msg_leader_transferred = Führung an {0} übertragen +logs.msg_leader_left_transfer = {0} ist gegangen, {1} ist jetzt Anführer +logs.msg_relation_set = {0} als {1} gesetzt +# Territorium +logs.msg_claimed = Chunk beansprucht bei {0}, {1} in {2} +logs.msg_unclaimed = Chunk freigegeben bei {0}, {1} in {2} +logs.msg_overclaim_lost = Chunk verloren bei {0}, {1} an {2} +logs.msg_overclaim_taken = Chunk überbeansprucht bei {0}, {1} von {2} +logs.msg_all_unclaimed = Gesamtes Territorium freigegeben +logs.msg_claim_removed_world = Anspruch in '{0}' entfernt (Welt verbietet Beanspruchung) +logs.msg_claims_lost_upkeep = {0} Anspruch/Ansprüche durch Unterhalt verloren ({1} Zahlungen versäumt) +logs.msg_claims_removed_inactive = {0} Ansprüche wegen Inaktivität entfernt ({1} Tage) +# Heim +logs.msg_home_set = Heim festgelegt +logs.msg_home_cleared = Heim gelöscht +logs.msg_home_cleared_world = Heim in '{0}' gelöscht (Welt verbietet Beanspruchung) +# Einstellungen +logs.msg_renamed = Umbenannt von '{0}' zu '{1}' +logs.msg_set_open = Fraktion auf offen gesetzt +logs.msg_set_closed = Fraktion auf nur Einladung gesetzt +logs.msg_desc_set = Beschreibung festgelegt +logs.msg_desc_cleared = Beschreibung gelöscht +logs.msg_color_changed = Farbe geändert zu '{0}' +# Wirtschaft +logs.msg_deposit = Einzahlung: {0} (+{1}) +logs.msg_withdrawal = Abhebung: {0} (-{1}) +logs.msg_upkeep_paid = Unterhalt bezahlt: {0} ({1} kostenpflichtige Chunks) +logs.msg_upkeep_grace_started = Unterhalt fehlgeschlagen: Gnadenfrist begonnen ({0}h) +logs.msg_upkeep_missed = Unterhalt versäumt (Zahlung {0}), Gnadenfrist endet in {1} +logs.msg_upkeep_manual = Unterhalt manuell bezahlt: {0} ({1} kostenpflichtige Chunks, Gnadenfrist aufgehoben) +# Admin-Macht +logs.msg_admin_power_set = Admin hat Macht von {0} auf {1} gesetzt (war {2}) +logs.msg_admin_power_add = Admin hat {0} Macht zu {1} hinzugefügt ({2} -> {3}) +logs.msg_admin_power_remove = Admin hat {0} Macht von {1} entfernt ({2} -> {3}) +logs.msg_admin_power_reset = Admin hat Macht von {0} auf {1} zurückgesetzt (war {2}) +logs.msg_admin_power_adjusted = Admin hat Macht von {0} um {1} angepasst ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin hat Max-Macht von {0} auf {1} gesetzt (war {2}) +logs.msg_admin_maxpower_reset = Admin hat Max-Macht von {0} auf globalen Standard zurückgesetzt ({1}) +logs.msg_admin_powerloss_enabled = Admin hat Machtverlust für {0} aktiviert +logs.msg_admin_powerloss_disabled = Admin hat Machtverlust für {0} deaktiviert +logs.msg_admin_decay_enabled = Admin hat Anspruchsverfall-Ausnahme für {0} aktiviert +logs.msg_admin_decay_disabled = Admin hat Anspruchsverfall-Ausnahme für {0} deaktiviert +logs.msg_admin_kd_reset = Admin hat K/D für {0} zurückgesetzt +logs.msg_admin_power_set_all = Admin hat Macht aller {0} Mitglieder auf {1} gesetzt +logs.msg_admin_power_add_all = Admin hat {0} Macht zu allen {1} Mitgliedern hinzugefügt +logs.msg_admin_power_remove_all = Admin hat {0} Macht von allen {1} Mitgliedern entfernt +logs.msg_admin_power_reset_all = Admin hat Macht für alle {0} Mitglieder zurückgesetzt +logs.msg_admin_power_adjusted_all = Admin hat Macht aller {0} Mitglieder um {1} angepasst +# Admin-Fraktion +logs.msg_admin_kicked = [Admin] {0} wurde rausgeworfen +logs.msg_admin_role_set = [Admin] Rolle von {0} auf {1} gesetzt +logs.msg_admin_leader_kick = [Admin] Führung von {0} an {1} übertragen (Admin-Rauswurf) +logs.msg_admin_econ_added = Admin hinzugefügt: {0} (Guthaben: {1}) +logs.msg_admin_econ_deducted = Admin abgezogen: {0} (Guthaben: {1}) +logs.msg_admin_econ_set = Admin hat Guthaben auf {0} gesetzt (war {1}) +# Import +logs.msg_left_import = {0} ist gegangen (in andere Fraktion importiert) +logs.msg_leader_import_transfer = {0} wurde Anführer (vorheriger Anführer in andere Fraktion importiert) +logs.msg_imported_from = Fraktion importiert von {0} + +# ========== Chat-Seite ========== +chat.title = Fraktionschat +chat.tab_faction = Fraktion +chat.tab_ally = Verbündete +chat.send_btn = Senden +chat.placeholder = Nachricht eingeben... +chat.no_messages = Noch keine Nachrichten. +chat.no_ally_permission = Sie haben keine Berechtigung für den Verbündeten-Chat. +chat.no_permission = Keine Berechtigung. +chat.faction_gone = Ihre Fraktion existiert nicht mehr. +chat.time_now = jetzt +chat.time_minutes = {0}m +chat.time_hours = {0}h + +# ========== Einladungsseite ========== +invites.title = Einladungen +invites.tab_outgoing = Ausgehend +invites.tab_requests = Anfragen +invites.prev_btn = < Zurück +invites.next_btn = Weiter > +invites.invite_count = {0} Einladungen +invites.request_count = {0} Anfragen +invites.invited_by = Eingeladen von: {0} +invites.no_message = Keine Nachricht +invites.expires = Läuft ab: {0} +invites.type_outgoing = Ausgehend +invites.type_request = Anfrage +invites.invited_by_label = Eingeladen von: +invites.empty_outgoing = Keine ausgehenden Einladungen. Verwenden Sie /f invite , um jemanden einzuladen. +invites.empty_requests = Keine Beitrittsanfragen. Spieler können mit /f request einen Beitritt anfragen. +invites.invalid_player = Ungültiger Spieler. +invites.cancelled_invite = Einladung an {0} abgebrochen. +invites.player_joined = {0} ist der Fraktion beigetreten! +invites.faction_full = Fraktion ist voll. Anfrage kann nicht angenommen werden. +invites.add_failed = Spieler konnte nicht zur Fraktion hinzugefügt werden. +invites.request_expired = Anfrage nicht gefunden oder abgelaufen. +invites.request_declined = Beitrittsanfrage von {0} abgelehnt. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}h +invites.label_message = Nachricht: +invites.btn_cancel = Abbrechen +invites.btn_accept = Annehmen +invites.btn_decline = Ablehnen + +# ========== Kartenseite ========== +map.title = Gebietskarte +map.action_hint = Linksklick: Beanspruchen | Rechtsklick: Freigeben +map.legend_your = Ihr Territorium +map.legend_ally = Verbündetes Territorium +map.legend_enemy = Feindliches Territorium +map.legend_other = Andere Fraktion +map.legend_wilderness = Wildnis +map.legend_safe = SafeZone +map.legend_war = WarZone +map.legend_you = Sie sind hier +map.position = Ihre Position: Chunk ({0}, {1}) +map.legend_protected = Geschützt +map.claim_stats = Gebiete: {0}/{1} ({2} verfügbar) +map.overclaimed = ÜBERBEANSPRUCHT von {0}! +map.power_display = Macht: {0}/{1} +map.join_to_claim = Treten Sie einer Fraktion bei, um zu beanspruchen +map.claim_success = Chunk bei ({0}, {1}) beansprucht! +map.claim_not_in_faction = Sie müssen in einer Fraktion sein, um Territorium zu beanspruchen. +map.claim_not_officer = Nur Offiziere und Anführer können Territorium beanspruchen. +map.claim_already_yours = Sie besitzen diesen Chunk bereits. +map.claim_already_claimed = Dieser Chunk ist bereits von einer anderen Fraktion beansprucht. +map.claim_not_adjacent = Sie können nur Chunks angrenzend an Ihr Territorium beanspruchen. +map.claim_max = Sie haben Ihr maximales Gebietslimit erreicht. +map.claim_world_not_allowed = Beanspruchung ist in dieser Welt nicht erlaubt. +map.claim_orbisguard = Dieses Gebiet ist durch OrbisGuard geschützt. +map.claim_failed = Chunk konnte nicht beansprucht werden. +map.unclaim_success = Chunk bei ({0}, {1}) freigegeben. +map.unclaim_not_in_faction = Sie müssen in einer Fraktion sein. +map.unclaim_not_officer = Nur Offiziere und Anführer können Territorium freigeben. +map.unclaim_not_claimed = Dieser Chunk ist nicht beansprucht. +map.unclaim_not_yours = Dieser Chunk gehört einer anderen Fraktion. +map.unclaim_home = Der Chunk mit Ihrem Fraktionsheim kann nicht freigegeben werden. +map.unclaim_failed = Freigabe des Chunks fehlgeschlagen. +map.overclaim_success = Feindlichen Chunk bei ({0}, {1}) überbeansprucht! +map.overclaim_not_in_faction = Sie müssen in einer Fraktion sein. +map.overclaim_not_officer = Nur Offiziere und Anführer können Territorium überbeanspruchen. +map.overclaim_already_yours = Sie besitzen diesen Chunk bereits. +map.overclaim_ally = Sie können verbündetes Territorium nicht überbeanspruchen. +map.overclaim_has_power = Diese Fraktion hat genug Macht, um ihr Territorium zu verteidigen. +map.overclaim_max = Sie haben Ihr maximales Gebietslimit erreicht. +map.overclaim_failed = Überbeanspruchung des Chunks fehlgeschlagen. +# ========== Fraktion erstellen ========== +create.title = Erstellen Sie Ihre Fraktion +create.section_preview = Vorschau +create.section_basic_info = Grundinfo +create.section_details = Details +create.name_prefix = Name: +create.faction_name_label = Fraktionsname * +create.tag_label = TAG (2-4 Zeichen, automatisch wenn leer) +create.desc_label = Beschreibung (Optional) +create.recruitment_label = Aufnahme +create.section_faction_color = Fraktionsfarbe +create.section_combat = Kampf +create.create_btn = Fraktion erstellen +create.preview_name = Ihr Fraktionsname +create.leader_prefix = Anführer: {0} +create.enter_name = Bitte geben Sie einen Fraktionsnamen ein. +create.name_too_short = Fraktionsname muss mindestens {0} Zeichen lang sein. +create.name_too_long = Fraktionsname darf {0} Zeichen nicht überschreiten. +create.name_taken = Eine Fraktion mit diesem Namen existiert bereits. +create.tag_length = Fraktionstag muss {0}-{1} Zeichen lang sein. +create.tag_format = Fraktionstag darf nur Buchstaben und Zahlen enthalten. +create.desc_too_long = Beschreibung darf {0} Zeichen nicht überschreiten. +create.created = Fraktion {0} erfolgreich erstellt! +create.created_no_dashboard = Fraktion erstellt, aber Übersicht konnte nicht geöffnet werden. +create.invalid_name = Ungültiger Fraktionsname. +create.create_failed = Fraktion konnte nicht erstellt werden. + +# ========== Neue Spieler Seiten ========== +newplayer.browse_title = Fraktionen durchsuchen +newplayer.invites_title = Einladungen & Anfragen +newplayer.map_title = Gebietskarte +newplayer.view_only_badge = Nur-Anzeige-Modus +newplayer.legend_label = Legende: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Fraktion +newplayer.legend_wilderness = Wildnis +newplayer.search_label = Suche: +newplayer.sort_label = Sortieren: +newplayer.prev_btn = < Zurück +newplayer.next_btn = Weiter > +newplayer.pending_count = {0} ausstehend +newplayer.received_header = ERHALTENE EINLADUNGEN ({0}) +newplayer.requests_header = IHRE ANFRAGEN ({0}) +newplayer.no_invites = Keine Einladungen. Durchsuchen Sie Fraktionen, um eine zu finden! +newplayer.no_requests = Keine ausstehenden Anfragen. +newplayer.invited_by = Eingeladen von: {0} +newplayer.member_count = {0} Mitglieder +newplayer.power_count = {0} Macht +newplayer.claim_count = {0} Gebiete +newplayer.awaiting_review = Wartet auf Prüfung +newplayer.expires_in = Läuft ab in {0}h +newplayer.time_just_now = gerade eben +newplayer.time_minutes = vor {0} Min +newplayer.time_hours = vor {0}h +newplayer.time_days = vor {0}T +newplayer.invalid_faction = Ungültige Fraktion. +newplayer.invite_expired = Diese Einladung ist abgelaufen oder wurde widerrufen. +newplayer.faction_gone = Fraktion existiert nicht mehr. +newplayer.joined = Sie sind {0} beigetreten! +newplayer.faction_full = Diese Fraktion ist voll. +newplayer.join_failed = Beitritt zur Fraktion nicht möglich. +newplayer.invite_declined = Einladung abgelehnt. +newplayer.request_cancelled = Anfrage zum Beitritt bei {0} abgebrochen. +newplayer.faction_count = {0} Fraktionen +newplayer.browse_subtitle = Finden Sie Ihr neues Zuhause! +newplayer.sort_power = Macht +newplayer.sort_name = Name +newplayer.sort_members = Mitglieder +newplayer.btn_accept = Annehmen +newplayer.btn_pending = Ausstehend +newplayer.btn_join = Beitreten +newplayer.btn_request = Anfragen +newplayer.invite_only_msg = Diese Fraktion ist nur auf Einladung zugänglich. +newplayer.welcome_hint = Willkommen! Verwenden Sie /f, um das Fraktionsmenü zu öffnen. +newplayer.faction_open_hint = Diese Fraktion ist offen! Klicken Sie stattdessen auf BEITRETEN. +newplayer.already_requested = Sie haben bereits eine ausstehende Anfrage bei dieser Fraktion. +newplayer.has_invite_hint = Sie haben eine Einladung von dieser Fraktion! Klicken Sie stattdessen auf ANNEHMEN. +newplayer.request_sent = Beitrittsanfrage an {0} gesendet! +newplayer.officer_review = Ein Offizier wird Ihre Anfrage prüfen. +newplayer.map_hint = Nur Anzeige — Treten Sie einer Fraktion bei, um Territorium zu beanspruchen! + +# Spielereinstellungen +nav.player_settings = Spieler +player_settings.title = Spielereinstellungen +player_settings.language_section = Sprache +player_settings.auto_detect = Automatisch vom Client erkennen +player_settings.auto_detect_desc = Verwendet die Spracheinstellung Ihres Spielclients +player_settings.language_label = Sprache +player_settings.notifications_section = Benachrichtigungen +player_settings.territory_alerts = Gebietsbenachrichtigungen +player_settings.territory_alerts_desc = Benachrichtigungen beim Betreten/Verlassen von Territorien anzeigen +player_settings.death_announcements = Todesankündigungen +player_settings.death_announcements_desc = Todesort-Ankündigungen von Fraktionsmitgliedern empfangen +player_settings.power_notifications = Machtänderungen +player_settings.power_notifications_desc = Nachrichten anzeigen, wenn sich Ihre Macht ändert +player_settings.language_changed = Sprache geändert zu {0} +player_settings.pref_enabled = {0} aktiviert +player_settings.pref_disabled = {0} deaktiviert + +# ========== Hilfeseiten ========== +help.center_title = Hilfezentrum +help.getting_started_title = Erste Schritte +help.what_are_factions_title = Was sind Fraktionen? +help.what_are_factions_1 = Fraktionen sind von Spielern erstellte Gruppen, die zusammenarbeiten, +help.what_are_factions_2 = um Territorium zu beanspruchen, Basen zu bauen und zu konkurrieren. +help.what_are_factions_bullet_1 = - Geschütztes Territorium zum Bauen +help.what_are_factions_bullet_2 = - Teammitglieder zum Spielen +help.what_are_factions_bullet_3 = - Zugang zu Fraktionschat und Funktionen +help.joining_title = Einer Fraktion beitreten +help.joining_desc = Es gibt mehrere Möglichkeiten, einer Fraktion beizutreten: +help.joining_bullet_1 = - Durchsuchen - Offene Fraktionen finden und BEITRETEN klicken +help.joining_bullet_2 = - Einladungen - Einladungen von Offizieren annehmen +help.joining_bullet_3 = - Anfragen - Bei Fraktionen auf Einladung anfragen +help.creating_title = Eine Fraktion gründen +help.creating_desc = Gehen Sie zum Erstellen-Tab, um Ihre eigene Fraktion zu gründen. +help.creating_bullet_1 = - Mitglieder einladen und verwalten +help.creating_bullet_2 = - Territorium beanspruchen und schützen +help.commands_title = Schnellbefehle +help.cmd_f = /f - Fraktionsmenü öffnen +help.cmd_f_list = /f list - Alle Fraktionen auflisten +help.cmd_f_join = /f join - Einer offenen Fraktion beitreten +help.cmd_f_create = /f create - Eine neue Fraktion gründen +help.cmd_f_help = /f help - Vollständige Befehlsliste +help.tip = Tipp: Durchsuchen Sie Fraktionen, um eine Gruppe zu finden, die zu Ihnen passt! diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..95b6c952 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Configuration System + +HyperFactions uses a modular JSON config system with 11 configuration files. + +## Admin Config Commands + +| Command | Description | +|---------|-------------| +| `/f admin config` | Open the visual config editor GUI | +| `/f admin reload` | Reload all config files from disk | +| `/f admin sync` | Synchronize faction data to storage | + +## Configuration Files + +| File | Contents | +|------|----------| +| `factions.json` | Roles, power, claims, combat, relations | +| `server.json` | Teleport, auto-save, messages, GUI, permissions | +| `economy.json` | Treasury, upkeep, transaction settings | +| `backup.json` | Backup rotation and retention settings | +| `chat.json` | Faction and ally chat formatting | +| `debug.json` | Debug logging categories | +| `faction-permissions.json` | Per-role permission defaults | +| `announcements.json` | Event broadcast and territory notifications | +| `gravestones.json` | Gravestone integration settings | +| `worldmap.json` | World map refresh modes | +| `worlds.json` | Per-world behavior overrides | + +>[!TIP] The config GUI provides a visual editor with descriptions for every setting. Changes are saved immediately but some require `/f admin reload` to take full effect. + +## Config Location + +All files are stored in: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Manual JSON edits require `/f admin reload` to apply. Invalid JSON will cause the file to be skipped with a warning in the server log. + +>[!NOTE] Config version is tracked in `server.json`. The plugin auto-migrates older configs on startup. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..47e8dffe --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Per-World Settings + +HyperFactions supports per-world configuration for claiming, PvP, and protection behavior. + +## World Commands + +| Command | Description | +|---------|-------------| +| `/f admin world list` | List all world overrides | +| `/f admin world info ` | Show settings for a world | +| `/f admin world set ` | Set a setting | +| `/f admin world reset ` | Reset world to defaults | + +## Available Settings + +| Setting | Type | Description | +|---------|------|-------------| +| claiming_enabled | boolean | Allow faction claims in this world | +| pvp_enabled | boolean | Allow PvP combat in this world | +| power_loss | boolean | Apply power loss on death | +| build_protection | boolean | Enforce claim build protection | +| explosion_protection | boolean | Protect claims from explosions | + +## World Whitelist / Blacklist + +Control which worlds allow faction features through the `worlds.json` config file: + +- **Whitelist mode**: Only listed worlds allow claiming +- **Blacklist mode**: All worlds allow claiming except listed + +>[!INFO] World settings are stored in `worlds.json` and override the global defaults from `factions.json`. + +## Examples + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- restore all defaults + +>[!TIP] Disable claiming in creative or lobby worlds to keep the faction system focused on survival gameplay. + +>[!NOTE] Per-world settings take priority over global config but are overridden by zone flags within that world. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..b219d330 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Treasury Management + +Admin commands for managing faction treasuries. Requires `hyperfactions.admin.economy` permission. + +## Treasury Commands + +| Command | Description | +|---------|-------------| +| `/f admin economy balance ` | View faction treasury balance | +| `/f admin economy set ` | Set exact balance | +| `/f admin economy add ` | Add funds to treasury | +| `/f admin economy take ` | Remove funds from treasury | +| `/f admin economy reset ` | Reset treasury to zero | + +## Examples + +- `/f admin economy balance Vikings` -- check balance +- `/f admin economy set Vikings 5000` -- set to 5000 +- `/f admin economy add Vikings 1000` -- deposit 1000 +- `/f admin economy take Vikings 500` -- withdraw 500 +- `/f admin economy reset Vikings` -- zero out balance + +>[!TIP] Use `/f admin info ` to see the full economy overview including transaction history alongside the treasury balance. + +## Use Cases + +| Scenario | Command | +|----------|---------| +| Event prize distribution | `economy add ` | +| Penalty for rule violation | `economy take ` | +| Economy reset after wipe | `economy reset ` | +| Compensation for bugs | `economy add ` | + +>[!WARNING] Treasury changes are logged in the faction's transaction history. Admin modifications are recorded with the admin's name for accountability. + +>[!NOTE] All economy admin commands work even when the economy module is disabled in config. The data is stored regardless of module status. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..7df9b4c7 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Upkeep Management + +Faction upkeep charges factions periodically based on their territory and member count. + +## Admin Controls + +Upkeep settings are managed through the economy config file or the admin config GUI. + +`/f admin config` +Open the config editor and navigate to economy settings to adjust upkeep values. + +## Default Upkeep Settings + +| Setting | Default | Description | +|---------|---------|-------------| +| Upkeep enabled | false | Master toggle for the system | +| Upkeep interval | 24h | How often upkeep is charged | +| Per-claim cost | 5.0 | Cost per claimed chunk per cycle | +| Per-member cost | 0.0 | Cost per member per cycle | +| Grace period | 72h | New factions are exempt | +| Disband on bankrupt | false | Auto-disband if cannot pay | + +## Monitoring Upkeep + +Use `/f admin info ` to see: +- Current treasury balance +- Estimated upkeep cost per cycle +- Time until next upkeep charge +- Whether the faction can afford upkeep + +>[!TIP] Review economy statistics across all factions from the admin dashboard to identify factions at risk of bankruptcy before upkeep triggers. + +>[!INFO] Upkeep configuration is stored in `economy.json`. Changes made via the config GUI take effect after reload with `/f admin reload`. + +## Upkeep Formula + +**Total upkeep** = (claimed chunks x per-claim cost) + (member count x per-member cost) + +>[!WARNING] Enabling upkeep on a server with existing factions may cause unexpected bankruptcies. Consider setting a grace period or announcing the change in advance. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..253e05ab --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Force Disbanding + +Admins can forcefully disband any faction, regardless of the leader's wishes. + +## Command + +`/f admin disband ` +Force-disband the named faction. A confirmation prompt will appear before the action is executed. + +**Permission**: `hyperfactions.admin.disband` + +>[!WARNING] Disbanding a faction is **irreversible**. All claims are released, all members are removed, and the faction ceases to exist. Create a backup first. + +## Consequences + +When a faction is disbanded: + +| Effect | Description | +|--------|-------------| +| **Claims** | All territory is released immediately | +| **Members** | All players are removed from the roster | +| **Relations** | All alliances and enemies are cleared | +| **Treasury** | Handled per economy config settings | +| **Home** | Faction home is deleted | +| **Chat** | Faction chat history is removed | + +## Best Practices + +1. Always run `/f admin backup create` before disbanding +2. Notify faction members when possible +3. Document the reason for server records +4. Check `/f admin info ` to review before acting + +>[!TIP] If the issue is with a specific member, consider using the admin factions GUI to transfer leadership rather than disbanding the entire faction. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..b00218c9 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Managing Factions + +Admins can inspect and modify any faction on the server through the dashboard or commands. + +## Browsing Factions + +`/f admin factions` +Opens the admin faction browser. View all factions with member counts, power levels, and territory. + +`/f admin info ` +Opens the admin info panel for a specific faction with full details and management options. + +## Modifying Faction Settings + +With `hyperfactions.admin.modify` permission, you can: + +- **Rename** a faction to resolve conflicts +- **Set color** to fix display issues +- **Toggle open/close** to override join policy +- **Edit description** for moderation purposes + +>[!TIP] Use `/f admin who ` to look up which faction a specific player belongs to and view their details. + +## Viewing Members and Relations + +The admin info panel shows: + +| Section | Details | +|---------|---------| +| **Members** | Full roster with roles and last seen | +| **Relations** | All ally, enemy, and neutral standings | +| **Territory** | Claimed chunks and power balance | +| **Economy** | Treasury balance and transaction log | + +>[!NOTE] Admin inspection commands do not notify the faction being viewed. Only modifications trigger alerts. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..84a331f7 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Backup System + +HyperFactions includes automatic and manual backups with GFS (Grandfather-Father-Son) rotation. + +## Backup Commands + +| Command | Description | +|---------|-------------| +| `/f admin backup create` | Create a manual backup now | +| `/f admin backup list` | List all available backups | +| `/f admin backup restore ` | Restore from a backup | +| `/f admin backup delete ` | Delete a specific backup | + +**Permission**: `hyperfactions.admin.backup` + +## GFS Rotation Defaults + +| Type | Retention | Description | +|------|-----------|-------------| +| Hourly | 24 | Last 24 hourly snapshots | +| Daily | 7 | Last 7 daily snapshots | +| Weekly | 4 | Last 4 weekly snapshots | +| Manual | 10 | Manually created backups | +| Shutdown | 5 | Created on server stop | + +>[!INFO] Shutdown backups are enabled by default (`onShutdown=true`). They capture the latest state before the server stops. + +## Backup Contents + +Each backup ZIP archive contains: +- All faction data files +- Player power data +- Zone definitions +- Chat history and economy data +- Invite and join request data +- Configuration files + +>[!WARNING] **Restoring a backup is destructive.** It replaces all current data with the backup's contents. Any changes made after the backup was created will be lost. Always create a fresh backup before restoring. + +## Best Practices + +1. Create a manual backup before major admin actions +2. Review backup retention in `backup.json` +3. Test restore on a staging server first +4. Keep shutdown backups enabled for crash recovery diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..e3bf7548 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Data Import + +Import faction data from other plugins to migrate your server to HyperFactions. + +## Import Command + +`/f admin import [path] [flags]` + +**Permission**: `hyperfactions.admin.use` + +## Supported Sources + +| Source | Description | +|--------|-------------| +| `elbaphfactions` | Import from ElbaphFactions data | +| `hyfactions` | Import from HyFactions v1 data | + +## Import Flags + +| Flag | Description | +|------|-------------| +| `--dry-run` | Validate data without importing anything | +| `--overwrite` | Overwrite existing factions with same name | +| `--no-zones` | Skip zone data during import | +| `--no-power` | Skip power data during import | + +>[!TIP] Always run with `--dry-run` first to preview what will be imported and catch any data issues before committing changes. + +## Import Process + +1. A pre-import backup is created automatically +2. Player name mappings are loaded +3. Factions, claims, and zones are converted +4. Data is validated and saved + +## Examples + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Using `--overwrite` will **replace** any existing faction that shares a name with an imported faction. Member data and claims will be overwritten. Run with `--dry-run` first to identify conflicts. + +>[!NOTE] Some source-specific data (e.g., worker plots, farm plots) has no equivalent in HyperFactions and will be logged as warnings during import. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..f6dc2880 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Update Checking + +HyperFactions can check for new versions and manage the HyperProtect-Mixin dependency. + +## Update Commands + +| Command | Description | +|---------|-------------| +| `/f admin update` | Check for HyperFactions updates | +| `/f admin update mixin` | Check/download HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Toggle auto-download | +| `/f admin version` | Show current version and build info | + +## Release Channels + +| Channel | Description | +|---------|-------------| +| **Stable** | Recommended for production servers | +| **Pre-release** | Early access to upcoming features | + +>[!INFO] The update checker only notifies about new versions. It does **not** automatically install updates to HyperFactions itself. + +## HyperProtect-Mixin + +HyperProtect-Mixin is the recommended protection mixin that enables advanced zone flags (explosions, fire spread, keep inventory, etc.). + +- `/f admin update mixin` checks for the latest version +and downloads it if a newer version is available +- Auto-download can be toggled on or off per server + +>[!TIP] After downloading a new mixin version, a server restart is required for the changes to take effect. + +## Rollback Procedure + +If an update causes issues: + +1. Stop the server +2. Replace the plugin JAR with the previous version +3. Start the server +4. Verify functionality with `/f admin version` + +>[!WARNING] Downgrading may require a config migration reset. Always keep backups before updating. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..bf30a5b4 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Getting Started as Admin + +Welcome to HyperFactions administration. This guide covers your first steps after installing the plugin. + +## Opening the Admin Dashboard + +`/f admin` +Opens the admin dashboard GUI with access to all management tools, zone editors, and server settings. + +>[!INFO] You need **hyperfactions.admin.use** permission or OP status to access admin commands. + +## Requirements + +- **With a permission plugin**: Grant `hyperfactions.admin.use` +- **Without a permission plugin**: The player must be a +server operator (`adminRequiresOp=true` by default) + +## First Steps After Install + +1. Run `/f admin` to verify your access +2. Open **Config** to review default faction settings +3. Create a **SafeZone** at spawn with `/f admin safezone Spawn` +4. Optionally create **WarZones** for PvP arenas +5. Review **Backup** settings to ensure data safety + +## Admin Capabilities + +| Area | What You Can Do | +|------|----------------| +| Factions | Inspect, modify, or force-disband any faction | +| Zones | Create SafeZones and WarZones with custom flags | +| Power | Override player/faction power values | +| Economy | Manage faction treasuries and upkeep | +| Config | Edit settings live via GUI or reload from disk | +| Backups | Create, restore, and manage data backups | +| Imports | Migrate data from other faction plugins | + +>[!TIP] Use `/f admin --text` to get chat-based output instead of the GUI, useful for console or automation. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..979e5543 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Admin Permissions + +All admin features are gated behind permission nodes in the `hyperfactions.admin` namespace. + +## Permission Nodes + +| Permission | Description | +|-----------|-------------| +| `hyperfactions.admin.*` | Grants **all** admin permissions | +| `hyperfactions.admin.use` | Access `/f admin` dashboard | +| `hyperfactions.admin.reload` | Reload configuration files | +| `hyperfactions.admin.debug` | Toggle debug logging categories | +| `hyperfactions.admin.zones` | Create, edit, and delete zones | +| `hyperfactions.admin.disband` | Force-disband any faction | +| `hyperfactions.admin.modify` | Modify any faction's settings | +| `hyperfactions.admin.bypass.limits` | Bypass claim and power limits | +| `hyperfactions.admin.backup` | Create and restore backups | +| `hyperfactions.admin.power` | Override player power values | +| `hyperfactions.admin.economy` | Manage faction treasuries | + +## Fallback Behavior + +When **no permission plugin** is installed, admin permissions fall back to server operator (OP) status. This is controlled by `adminRequiresOp` in the server config (default: `true`). + +>[!NOTE] The `hyperfactions.admin.*` wildcard grants every admin permission. Use individual nodes for granular control over your staff team. + +## Permission Resolution Order + +1. **VaultUnlocked** provider (if available) +2. **HyperPerms** provider (if available) +3. **LuckPerms** provider (if available) +4. **OP check** for admin nodes (fallback) + +>[!WARNING] Without a permission plugin and with `adminRequiresOp` disabled, admin commands are **open to all players**. Always use a permission plugin in production. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..b2c9f463 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Power Admin Commands + +Override player and faction power values. All commands require `hyperfactions.admin.power` permission. + +## Player Power Commands + +| Command | Description | +|---------|-------------| +| `/f admin power set ` | Set exact power value | +| `/f admin power add ` | Add power to player | +| `/f admin power remove ` | Remove power from player | +| `/f admin power reset ` | Reset to default starting power | +| `/f admin power info ` | View detailed power breakdown | + +## How Power Affects Factions + +A faction's total power is the sum of all its members' individual power. Territory claims require sufficient total power to maintain. + +| Scenario | Effect | +|----------|--------| +| Power set higher | Faction can claim more territory | +| Power set lower | Faction may become vulnerable to overclaim | +| Power reset | Returns player to default starting value | + +>[!WARNING] Lowering a player's power may cause their faction to lose territory if total power drops below the number of claimed chunks. + +## Examples + +- `/f admin power set Steve 50` -- set to exactly 50 +- `/f admin power add Steve 10` -- increase by 10 +- `/f admin power remove Steve 5` -- decrease by 5 +- `/f admin power reset Steve` -- back to default +- `/f admin power info Steve` -- show full breakdown + +>[!TIP] Use `/f admin power info ` to see current power, max power, and any active overrides before making changes. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..5469f903 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Power Overrides + +Special power commands that change how power behaves for specific players or factions. + +## Override Commands + +| Command | Description | +|---------|-------------| +| `/f admin power setmax ` | Set custom max power cap | +| `/f admin power noloss ` | Toggle death power penalty immunity | +| `/f admin power nodecay ` | Toggle offline power decay immunity | +| `/f admin power info ` | View all overrides and power details | + +## Custom Max Power + +`/f admin power setmax ` +Sets a personal maximum power cap for the player, overriding the server default. + +>[!INFO] Setting a custom max does **not** change current power. It only changes the ceiling. The player must still earn power up to the new limit. + +## No-Loss Mode + +`/f admin power noloss ` +Toggles death power loss immunity. When enabled, the player will **not** lose power on death. + +Useful for: +- New player protection periods +- Event participants +- Staff members + +## No-Decay Mode + +`/f admin power nodecay ` +Toggles offline power decay immunity. When enabled, the player's power will **not** decrease while offline. + +Useful for: +- Players on extended leave +- VIP members +- Seasonal protection + +## Power Info + +`/f admin power info ` +Shows a complete breakdown: + +- Current power and max power +- Active overrides (noloss, nodecay, custom max) +- Last death time and power lost +- Faction contribution percentage + +>[!TIP] All power overrides persist across server restarts and are stored in the player's data file. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..bd0b0fa6 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Admin Command Reference + +Complete list of all `/f admin` subcommands with syntax and required permissions. + +## Dashboard and General + +| Command | Permission | +|---------|-----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Faction Management + +| Command | Permission | +|---------|-----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Zone Management + +| Command | Permission | +|---------|-----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Power and Economy + +| Command | Permission | +|---------|-----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Maintenance + +| Command | Permission | +|---------|-----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] All permission nodes are prefixed with `hyperfactions.` (e.g., `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..c39bfb3b --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Plugin Integrations + +HyperFactions integrates with several external plugins through soft dependencies. All integrations are optional and fail gracefully if unavailable. + +## Checking Integration Status + +`/f admin version` +Shows current version and detected integrations. + +`/f admin integration` +Opens the integration management panel with detailed status for each detected plugin. + +## Integration Table + +| Plugin | Type | Description | +|--------|------|-------------| +| **HyperPerms** | Permissions | Full permission system with groups, inheritance, and context | +| **LuckPerms** | Permissions | Alternative permission provider | +| **VaultUnlocked** | Permissions/Economy | Permission and economy bridge | +| **HyperProtect-Mixin** | Protection | Enables advanced zone flags (explosions, fire, keep inventory) | +| **OrbisGuard-Mixins** | Protection | Alternative mixin for zone flag enforcement | +| **PlaceholderAPI** | Placeholders | 49 faction placeholders for other plugins | +| **WiFlow PlaceholderAPI** | Placeholders | Alternative placeholder provider | +| **GravestonePlugin** | Death | Gravestone access control in zones | +| **HyperEssentials** | Features | Zone flags for homes, warps, and kits | +| **KyuubiSoft Core** | Framework | Core library integration | +| **Sentry** | Monitoring | Error tracking and diagnostics | + +## Permission Provider Priority + +1. **VaultUnlocked** (highest priority) +2. **HyperPerms** +3. **LuckPerms** +4. **OP fallback** (if no provider found) + +>[!INFO] Integrations are detected once at startup using reflection. Results are cached for the session. A server restart is required after adding or removing an integrated plugin. + +>[!TIP] Use `/f admin debug toggle integration` to enable detailed integration logging for troubleshooting. + +>[!NOTE] HyperProtect-Mixin is the **recommended** protection mixin. Without it, 15 zone flags will have no effect. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..933a9b2d --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Zone Basics + +Zones are admin-controlled territories with custom rules that override normal faction protection. + +## Zone Types + +- **SafeZone** -- No PvP, no building, no damage. +Ideal for spawn areas and trading hubs. +- **WarZone** -- PvP always enabled, no building. +Ideal for arenas and contested battle areas. + +## Creating Zones + +`/f admin safezone ` +Creates a SafeZone and claims your current chunk. + +`/f admin warzone ` +Creates a WarZone and claims your current chunk. + +After creation, stand in additional chunks and use `/f admin zone claim ` to expand the zone. + +## Managing Zone Chunks + +`/f admin zone claim ` +Add the current chunk to the named zone. + +`/f admin zone unclaim ` +Remove the current chunk from the named zone. + +`/f admin zone radius ` +Claim a square of chunks around your position. + +## Deleting Zones + +`/f admin removezone ` +Permanently deletes the zone and releases all its claimed chunks. + +>[!WARNING] Deleting a zone releases all its chunks instantly. This cannot be undone without a backup restore. + +>[!INFO] Zone rules **always override** faction territory rules. A SafeZone inside enemy land is still safe. diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..403b6b63 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Zone Command Reference + +Complete reference for all zone management commands. All require `hyperfactions.admin.zones` permission. + +## Quick Creation + +| Command | Description | +|---------|-------------| +| `/f admin safezone ` | Create a SafeZone at current chunk | +| `/f admin warzone ` | Create a WarZone at current chunk | +| `/f admin removezone ` | Delete a zone and release chunks | + +## Zone Management + +| Command | Description | +|---------|-------------| +| `/f admin zone create ` | Create a zone (safezone/warzone) | +| `/f admin zone delete ` | Delete a zone | +| `/f admin zone claim ` | Add current chunk to zone | +| `/f admin zone unclaim ` | Remove current chunk from zone | +| `/f admin zone radius ` | Claim square radius of chunks | +| `/f admin zone list` | List all zones with chunk counts | +| `/f admin zone notify ` | Toggle entry/leave messages | +| `/f admin zone title upper/lower ` | Set zone title text | +| `/f admin zone properties ` | Open zone properties GUI | + +## Flag Management + +| Command | Description | +|---------|-------------| +| `/f admin zoneflag ` | Set a specific flag | + +>[!TIP] Use the zone **properties GUI** for a visual editor with toggles for every flag, organized by category. + +## Examples + +- `/f admin safezone Spawn` -- create spawn protection +- `/f admin zone radius Spawn 3` -- expand to 7x7 chunks +- `/f admin zoneflag Spawn door_use true` -- allow doors +- `/f admin zone notify Spawn true` -- show entry messages diff --git a/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..368a4ec9 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Zone Flags + +Zones support **47 boolean flags** across 10 categories. Each flag controls a specific behavior within the zone. + +## Flag Categories Overview + +| Category | Count | Key Flags | +|----------|-------|-----------| +| Combat | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Damage | 4 | fall_damage, explosion_damage, fire_spread | +| Death | 2 | keep_inventory, power_loss | +| Building | 4 | build_allowed, block_place, hammer_use | +| Interaction | 13 | door_use, container_use, bench_use, npc_tame | +| Transport | 3 | teleporter_use, portal_use, mount_entry | +| Items | 4 | item_drop, item_pickup, invincible_items | +| Mob Spawning | 5 | mob_spawning, hostile/passive/neutral | +| Mob Clearing | 4 | mob_clear, hostile/passive/neutral clear | +| Integration | 5 | gravestone_access, show_on_map, essentials_homes | + +## Default Values (SafeZone vs WarZone) + +| Flag | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Some flags require **HyperProtect-Mixin** to function (e.g., keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Without the mixin, these flags have no effect even when enabled. + +## Setting Flags + +`/f admin zoneflag ` + +>[!TIP] Use `/f admin zone properties ` for a visual toggle editor grouped by category. diff --git a/src/main/resources/Server/Languages/en-US/help/combat/death.md b/src/main/resources/Server/Languages/en-US/help/combat/death.md new file mode 100644 index 00000000..8690b43a --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Death and Recovery + +Death carries real consequences in factions. Every death costs you personal power, weakening your faction's ability to hold territory. + +## Power Loss + +Each death costs -1.0 power from your personal total. This lowers the faction's combined power. + +| Event | Power Change | +|-------|-------------| +| Death (any cause) | -1.0 | +| Online regen | +0.1 per minute | +| Combat logout | -1.0 (killed) | + +>[!NOTE] These are default values. Your server administrator may have configured different settings. + +## Example Scenarios + +*5 members at 10.0 power each = 50 total, 20 claims.* +*One member dies twice: 8.0 power, faction total 48.* +*Three members die once each: total drops to 47.* + +>[!WARNING] If your faction power drops below your claim count, enemies can overclaim your territory. + +## Recovery + +Power regenerates at 0.1 per minute while online. Recovering 1.0 lost power takes about 10 minutes. Multiple deaths stack, so avoid repeated fights. + +--- + +## All Death Types + +Power loss applies to all deaths: PvP, mob kills, fall damage, drowning, and any other cause. There is no safe way to die. + +>[!TIP] Set a faction home with /f sethome so members can regroup quickly after dying. diff --git a/src/main/resources/Server/Languages/en-US/help/combat/protection.md b/src/main/resources/Server/Languages/en-US/help/combat/protection.md new file mode 100644 index 00000000..e564ec2d --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Territory Protection + +Claimed territory provides several layers of defense for your faction's builds and resources. + +## Block Protection + +Only faction members can place or break blocks in your territory. Enemies and neutrals are blocked from modifying anything. + +## Container Protection + +Chests, barrels, and other containers are secured. Only your faction members can open or interact with storage in claimed chunks. + +## Entry Alerts + +When a non-member enters your claimed territory, online faction members receive a notification with the intruder's name and location. + +--- + +## Ally Access + +Allies cannot build or break blocks in your territory by default. Ally damage is also disabled, so allied players cannot harm each other. + +>[!INFO] Territory protects blocks, not players. PvP in your own territory depends on the attacker's relation to your faction. + +>[!TIP] Keep your claims connected and avoid isolated chunks that are harder to defend. diff --git a/src/main/resources/Server/Languages/en-US/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/en-US/help/combat/spawn_protection.md new file mode 100644 index 00000000..f0b2ab76 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Spawn Protection + +After respawning from death, you receive temporary protection to prevent spawn camping. + +## How It Works + +- Protection lasts 5 seconds after respawn +- You cannot take damage during this period +- A visual indicator shows your protected status + +## Protection Breaks + +Spawn protection ends early if you: + +- Attack another player or entity +- Move from your spawn position + +This prevents abuse. You cannot attack others while invulnerable. Once you take any action, protection drops and normal combat rules apply. + +--- + +>[!NOTE] These are default values. Your server administrator may have configured different settings. + +>[!TIP] Use your protection time to assess the situation before moving. diff --git a/src/main/resources/Server/Languages/en-US/help/combat/tagging.md b/src/main/resources/Server/Languages/en-US/help/combat/tagging.md new file mode 100644 index 00000000..e45cbdb3 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Combat Tagging + +When you attack or are attacked by another player, you become combat tagged for 15 seconds. + +## While Tagged + +- No /f home or /f stuck teleports +- No server teleport commands +- Tag resets with each new combat action +- A timer displays your remaining tag duration + +--- + +## Logout Penalty + +>[!WARNING] Logging out while combat tagged kills your character and you lose 1.0 power. + +Your items drop where you disconnected and enemies can loot them. Always wait for the tag to expire. + +## How the Timer Works + +The combat tag timer appears on screen when you enter combat. Every new hit resets it to 15 seconds. Once it reaches zero, all restrictions are lifted. + +>[!NOTE] These are default values. Your server administrator may have configured different settings. + +>[!TIP] Disengage and wait out the timer if you need to teleport. diff --git a/src/main/resources/Server/Languages/en-US/help/combat/zones.md b/src/main/resources/Server/Languages/en-US/help/combat/zones.md new file mode 100644 index 00000000..d1d957d2 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Special Zones + +Admins can designate areas with special rules that override normal faction territory protection. + +## SafeZone + +No PvP damage, no block breaking by non-admins. Ideal for spawn areas, trading hubs, and event staging areas. Players cannot be harmed here. + +## WarZone + +PvP is always enabled. No block protection applies. Open battle areas where anything goes. You receive no territory protection benefits in a WarZone. + +--- + +## Zone Comparison + +| Feature | SafeZone | WarZone | Faction Land | +|---------|----------|---------|--------------| +| PvP | Disabled | Always On | Relation-based | +| Block Break | Disabled | Allowed | Members Only | +| Containers | Protected | Open | Members Only | +| Best For | Spawn/Trade | Arenas | Bases | + +>[!NOTE] Zone rules always override faction territory rules. A claimed chunk inside a WarZone follows WarZone rules. + +>[!TIP] Check your territory map with /f map to see zone boundaries. diff --git a/src/main/resources/Server/Languages/en-US/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/en-US/help/diplomacy/alliances.md new file mode 100644 index 00000000..45da7756 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Forming Alliances + +Alliances are mutual agreements between two factions that provide protection and cooperation benefits. + +--- + +## How to Form an Alliance + +`/f ally ` + +Sends an alliance request to the target faction. The alliance only takes effect once both sides agree. An Officer or Leader from the other faction must also run the same command targeting your faction to confirm. + +## How to Break an Alliance + +`/f neutral ` + +Either side can unilaterally end an alliance by resetting the relation to neutral. + +--- + +## Alliance Benefits + +| Benefit | Details | +|---------|---------| +| No friendly fire | Allied players cannot damage each other | +| Shared map visibility | Allied territory shows in blue on the territory map | +| Territory interaction | Allies can use doors, seats, and transport in your territory | +| Ally chat | Cycle to ally chat mode for cross-faction communication | +| Overclaim protection | Allies cannot overclaim each other's territory | + +>[!NOTE] Your faction can have up to 10 alliances at a time. Choose your allies wisely. + +--- + +## Alliance Etiquette + +>[!TIP] Communication is key. Before sending an alliance request, consider reaching out to the other faction's leader to discuss terms. A strong alliance is built on mutual benefit, not just convenience. + +- Alliances work both ways -- if you benefit from protection, your allies expect the same +- Breaking an alliance during wartime may damage your faction's reputation +- Allied factions can coordinate territory claims to create defensible borders diff --git a/src/main/resources/Server/Languages/en-US/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/en-US/help/diplomacy/enemies.md new file mode 100644 index 00000000..70688ad4 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Enemy Factions + +Declaring an enemy is a one-way action that immediately enables PvP and territorial aggression against the target faction. No agreement is required. + +--- + +## Declaring an Enemy + +`/f enemy ` + +Instantly marks the target faction as your enemy. This takes effect immediately -- no confirmation from the other side is needed. Requires Officer rank or higher. + +## Resetting to Neutral + +`/f neutral ` + +Ends the enemy status and resets the relation to neutral. This also requires Officer+ and takes effect immediately. + +--- + +## What Enemy Status Enables + +| Effect | Details | +|--------|---------| +| PvP in territory | Full PvP is enabled in both factions' territory | +| Overclaiming | You can overclaim their chunks if they are in a power deficit | +| Map marking | Enemy territory shows in red on the territory map | +| No protection | Standard territory protection does not prevent enemy PvP | + +>[!WARNING] Declaring an enemy is a serious decision. Their members can also fight you in your own territory once you declare. + +--- + +## Strategic Considerations + +- Enemy declarations are one-way -- you can declare without their consent, but they also see you as hostile +- Before declaring, check the target's power with /f info. If they are strong, you may lose territory instead +- Weaken enemies through repeated combat to drain their power, then overclaim their land +- There is no limit to how many enemies you can have, but fighting on multiple fronts is risky + +>[!TIP] Use /f neutral to de-escalate conflicts. Sometimes a strategic peace is more valuable than continued war. + +>[!NOTE] If you are allied with a faction and declare them as an enemy, the alliance is broken first. diff --git a/src/main/resources/Server/Languages/en-US/help/diplomacy/relations.md b/src/main/resources/Server/Languages/en-US/help/diplomacy/relations.md new file mode 100644 index 00000000..89711eee --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Faction Relations + +Every pair of factions has a diplomatic relation that determines how they interact. There are three states: Ally, Enemy, and Neutral. + +--- + +## Relation Comparison + +| Effect | Ally | Neutral | Enemy | +|--------|------|---------|-------| +| PvP in territory | Disabled | Standard rules | Enabled | +| Territory protection | Mutual protection | Standard protection | Can overclaim if weakened | +| Friendly fire | Disabled | N/A | Enabled everywhere | +| Map color | Blue | Gray | Red | +| How to set | Mutual agreement | Default state | One-way declaration | +| Chat access | Ally chat channel | None | None | + +--- + +## Viewing Relations + +`/f relations` + +Shows all your current alliances, enemies, and any pending alliance requests. + +## How Relations Work + +- Neutral is the default state between all factions. Standard server rules apply. +- Alliance requires both factions to agree. Either side can break it unilaterally. +- Enemy is declared one-way. No agreement needed -- the other faction is immediately marked as your enemy. + +>[!INFO] Relations are managed by Officers and Leaders. Members can view relations but cannot change them. + +>[!TIP] Use /f relations regularly to keep track of the diplomatic landscape. Knowing who your enemies are helps you prepare for territorial conflicts. diff --git a/src/main/resources/Server/Languages/en-US/help/economy/commands.md b/src/main/resources/Server/Languages/en-US/help/economy/commands.md new file mode 100644 index 00000000..020190cd --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Economy Commands + +Quick reference for all faction economy commands. + +| Command | Description | Role | +|---------|-------------|------| +| /f balance | View treasury balance | Any | +| /f deposit (amount) | Deposit into treasury | Any | +| /f withdraw (amount) | Withdraw from treasury | Officer+ | +| /f money transfer (faction) (amount) | Transfer to another faction | Officer+ | +| /f money log [page] | View transaction history | Officer+ | + +--- + +## Command Aliases + +- /f balance can also be used as /f bal +- /f deposit and /f withdraw accept decimal amounts + +## Role Requirements + +Withdraw and transfer commands are restricted to Officers and Leaders. All other economy commands are available to any faction member. + +>[!TIP] Use /f money log to review recent deposits, withdrawals, and transfers with timestamps. diff --git a/src/main/resources/Server/Languages/en-US/help/economy/funds.md b/src/main/resources/Server/Languages/en-US/help/economy/funds.md new file mode 100644 index 00000000..4fe4539c --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Managing Funds + +Faction members work together to keep the treasury funded through deposits, withdrawals, and transfers. + +## Depositing + +Any member can deposit personal funds into the faction treasury. + +`/f deposit ` +Deposit from your personal balance into the treasury. + +## Withdrawing + +Officers and the Leader can withdraw funds back to their personal balance. + +`/f withdraw ` +Withdraw from the treasury to your balance. (Officer+) + +## Transferring + +Officers can transfer funds directly between faction treasuries for trade deals or diplomacy. + +`/f money transfer ` +Send funds to another faction's treasury. (Officer+) + +--- + +## Fees + +| Transaction | Fee | +|------------|-----| +| Deposit | 0% | +| Withdraw | 0% | +| Transfer | 0% | + +>[!INFO] Fee rates are configurable by the server and may differ from defaults shown above. + +>[!TIP] All transactions are logged. Use /f money log to review recent activity. diff --git a/src/main/resources/Server/Languages/en-US/help/economy/treasury.md b/src/main/resources/Server/Languages/en-US/help/economy/treasury.md new file mode 100644 index 00000000..e4e7307b --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Faction Treasury + +Every faction has a shared treasury that serves as the faction's bank. Funds are used for upkeep costs, territory maintenance, and faction operations. + +## Starting Balance + +New factions start with 0 in their treasury. Members must deposit funds to build up reserves. + +## Who Can Manage + +- Any member can deposit funds +- Officers and Leader can withdraw and transfer +- Leader has full treasury control + +--- + +`/f balance` +Check your faction's current treasury balance. Also available as /f bal. + +>[!TIP] Contribute regularly to keep your faction funded. Territory upkeep costs can drain an empty treasury quickly. + +>[!INFO] All treasury transactions are logged and can be reviewed by officers. diff --git a/src/main/resources/Server/Languages/en-US/help/economy/upkeep.md b/src/main/resources/Server/Languages/en-US/help/economy/upkeep.md new file mode 100644 index 00000000..8a2d12e4 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Territory Upkeep + +Factions must pay ongoing upkeep to maintain their claimed territory. This prevents land hoarding and keeps the map dynamic. + +## Upkeep Costs + +| Setting | Default | +|---------|---------| +| Cost per chunk | 2.0 per cycle | +| Payment interval | Every 24 hours | +| Free chunks | 3 (no cost) | +| Scaling mode | Flat rate | + +>[!NOTE] These are default values. Your server administrator may have configured different settings. + +Your first 3 chunks are free. Beyond that, each additional claimed chunk costs 2.0 per payment cycle. + +## Auto-Pay + +Auto-pay is enabled by default. The system automatically deducts upkeep from your treasury at each interval. No manual action needed. + +--- + +## Grace Period + +If your treasury cannot cover upkeep, a 48-hour grace period begins. A warning is sent 6 hours before claims start being lost. + +>[!WARNING] If upkeep remains unpaid after the grace period, your faction loses 1 claim per cycle until costs are covered or all extra claims are gone. + +## Example + +*A faction with 8 claims pays for 5 chunks (8 minus 3 free). At 2.0 per chunk, that is 10.0 per cycle.* + +>[!TIP] Keep your treasury funded above your upkeep cost. Use /f balance to check your reserves. diff --git a/src/main/resources/Server/Languages/en-US/help/power_land/claiming.md b/src/main/resources/Server/Languages/en-US/help/power_land/claiming.md new file mode 100644 index 00000000..f70427cb --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Claiming Territory + +Claiming a chunk protects it under your faction's control. Only faction members can build, break, or access containers inside claimed territory. + +--- + +## How to Claim + +`/f claim` + +Stand in the chunk you want to claim and run this command. The chunk is immediately protected. Requires Officer rank or higher. + +## How to Unclaim + +`/f unclaim` + +Releases the chunk you are standing in back to wilderness. Also requires Officer+. + +--- + +## Claim Rules + +| Rule | Default | +|------|---------| +| Power cost per claim | 2.0 power | +| Maximum claims | 100 per faction | +| Adjacent only | No (you can claim anywhere) | + +>[!NOTE] These are default values. Your server administrator may have configured different settings. + +>[!INFO] Each claim costs 2.0 power to maintain. A faction with 50 total power can hold up to 25 claims safely. + +--- + +## What Protection Provides + +Inside claimed territory, the following is enforced by default: + +- Outsiders cannot break, place, or interact with blocks +- Allies can use doors, seats, and transport but cannot break or place blocks +- Members and Officers have full access to build, break, and use everything +- Container access (chests, crates) is restricted to members only + +>[!TIP] You can also claim directly from the territory map. Open /f map and click on unclaimed chunks to claim them. + +>[!WARNING] Do not over-expand. If your faction loses power through deaths, claims beyond your power budget become vulnerable to overclaiming. diff --git a/src/main/resources/Server/Languages/en-US/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/en-US/help/power_land/losing_territory.md new file mode 100644 index 00000000..ea39186b --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Losing Territory + +When a faction's total power drops below the cost of its claims, it becomes raidable. Enemies can overclaim chunks right out from under you. + +--- + +## How Overclaiming Works + +`/f overclaim` + +An Officer or Leader from an enemy faction stands in your claimed chunk and runs this command. If your faction is in a power deficit, the chunk transfers to their faction. + +## The Math + +Each claim costs 2.0 power to maintain. If your total power falls below that threshold, the deficit chunks are vulnerable. + +>[!NOTE] These are default values. Your server administrator may have configured different settings. + +>[!WARNING] Overclaiming is permanent. Once an enemy takes a chunk, you must reclaim it (or overclaim it back if they weaken). + +--- + +## Example Scenario + +| Factor | Value | +|--------|-------| +| Members | 5 players | +| Power per member | 10 each (starting) | +| Total power | 50 | +| Claims | 30 chunks | +| Power needed (30 x 2.0) | 60 | +| Deficit | 10 power short | + +In this example, the faction is already raidable from the start. Enemies could overclaim up to 5 chunks (10 deficit / 2.0 per claim) before the faction reaches equilibrium. + +--- + +## How to Prevent Overclaiming + +- Do not over-expand -- always keep total power above your claim cost with a buffer +- Stay active -- power only regenerates while online (+0.1/min) +- Avoid unnecessary deaths -- each death costs 1.0 power +- Recruit more members -- more players means more total power +- Unclaim unused chunks -- free up power with /f unclaim + +>[!TIP] Check your power status regularly with /f power. If your total power is close to your claim cost, consider unclaiming less important chunks before a war. diff --git a/src/main/resources/Server/Languages/en-US/help/power_land/territory_map.md b/src/main/resources/Server/Languages/en-US/help/power_land/territory_map.md new file mode 100644 index 00000000..207c041d --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# The Territory Map + +The territory map gives you a bird's-eye view of claimed chunks in your area, showing which factions control the land around you. + +--- + +## Opening the Map + +`/f map` + +Opens the territory map GUI centered on your current location. + +--- + +## Color Legend + +| Color | Meaning | +|-------|---------| +| [#55FF55] Your faction's color | Territory claimed by your faction | +| [#5555FF] Blue | Allied faction territory | +| [#FF5555] Red | Enemy faction territory | +| [#AAAAAA] Gray | Neutral faction territory | +| [#333333] Dark | Wilderness (unclaimed land) | +| [#FFAA00] Gold | Special zones (safezone, warzone) | + +>[!INFO] Your faction's color on the map matches the color you set with the faction color setting. Allies and enemies use fixed colors for easy identification. + +--- + +## Click to Claim + +The map is not just for viewing -- you can interact with it directly. + +- Click an unclaimed chunk to claim it (requires Officer+ rank and sufficient power) +- Click a claimed chunk to see which faction owns it +- Scroll or pan to explore the area around you + +>[!TIP] The map is the easiest way to plan your territory expansion. Look for unclaimed areas near your base and claim strategically to create a contiguous border. + +>[!NOTE] The map shows a fixed area around your position. Move to a different location and reopen it to see other parts of the world. diff --git a/src/main/resources/Server/Languages/en-US/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/en-US/help/power_land/understanding_power.md new file mode 100644 index 00000000..ae158ed5 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Understanding Power + +Power is the core resource that determines how much territory your faction can hold. Every player has personal power that contributes to the faction total. + +--- + +## Default Power Values + +| Setting | Value | +|---------|-------| +| Maximum power per player | 20 | +| Starting power | 10 | +| Death penalty | -1.0 per death | +| Kill reward | 0.0 | +| Regen rate | +0.1 per minute (while online) | +| Power cost per claim | 2.0 | +| Logout while tagged | -1.0 additional | + +>[!NOTE] These are default values. Your server administrator may have configured different settings. + +## How It Works + +Your faction's total power is the sum of every member's personal power. Your required power is the number of claims multiplied by 2.0. As long as total power stays above required power, your territory is safe. + +>[!INFO] Power regenerates passively at 0.1 per minute while you are online. At that rate, recovering 1.0 power takes about 10 minutes. + +--- + +## Checking Your Power + +`/f power` + +Shows your personal power, your faction's total power, and how much is needed to maintain current claims. + +## The Danger Zone + +If total power falls below the required amount for your claims, your faction becomes vulnerable. Enemies can overclaim your chunks. + +>[!WARNING] Multiple deaths in a short period can cascade quickly. If you have 5 members each at 10 power (50 total) and 20 claims (40 needed), just 5 deaths across your team drops you to 45 -- still safe. But 11 deaths puts you at 39, below the 40 threshold. + +>[!TIP] Keep a power buffer. Do not claim every chunk you can afford -- leave room for a few deaths without becoming raidable. diff --git a/src/main/resources/Server/Languages/en-US/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/en-US/help/quick_ref/all_commands.md new file mode 100644 index 00000000..0540d550 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# All Commands + +## Core + +| Command | Description | Role | +|---------|-------------|------| +| /f | Open faction menu | Any | +| /f help | Open help center | Any | +| /f create (name) | Create a faction | Any | +| /f disband | Delete your faction | Leader | +| /f leave | Leave your faction | Any | + +## Membership + +| Command | Description | Role | +|---------|-------------|------| +| /f invite (player) | Invite a player | Officer+ | +| /f accept [faction] | Accept an invite | Any | +| /f request (faction) | Request to join | Any | +| /f kick (player) | Remove a member | Officer+ | +| /f promote (player) | Promote to Officer | Leader | +| /f demote (player) | Demote to Member | Leader | +| /f transfer (player) | Transfer leadership | Leader | + +## Territory + +| Command | Description | Role | +|---------|-------------|------| +| /f claim | Claim current chunk | Officer+ | +| /f unclaim | Release current chunk | Officer+ | +| /f overclaim | Take weakened chunk | Officer+ | +| /f map | Open territory map | Any | + +## Teleport + +| Command | Description | Role | +|---------|-------------|------| +| /f home | Teleport to faction home | Any | +| /f sethome | Set faction home | Officer+ | +| /f delhome | Delete faction home | Officer+ | +| /f stuck | Escape enemy territory | Any | + +## Information + +| Command | Description | Role | +|---------|-------------|------| +| /f info [faction] | View faction details | Any | +| /f list | Browse all factions | Any | +| /f members | View roster | Any | +| /f who [player] | View player info | Any | +| /f power [player] | Check power levels | Any | +| /f invites | Manage invites/requests | Any | +| /f relations | View diplomatic relations | Any | + +## Diplomacy + +| Command | Description | Role | +|---------|-------------|------| +| /f ally (faction) | Request alliance | Officer+ | +| /f enemy (faction) | Declare enemy | Officer+ | +| /f neutral (faction) | Reset to neutral | Officer+ | + +## Settings + +| Command | Description | Role | +|---------|-------------|------| +| /f settings | Open settings GUI | Officer+ | +| /f rename (name) | Rename faction | Leader | +| /f desc [text] | Set description | Officer+ | +| /f color (code) | Set faction color | Officer+ | +| /f open | Allow anyone to join | Leader | +| /f close | Require invitation | Leader | + +## Economy + +| Command | Description | Role | +|---------|-------------|------| +| /f balance | View treasury | Any | +| /f deposit (amount) | Deposit funds | Any | +| /f withdraw (amount) | Withdraw funds | Officer+ | +| /f money transfer (faction) (amt) | Transfer funds | Officer+ | +| /f money log [page] | Transaction history | Officer+ | + +## Chat + +| Command | Description | Role | +|---------|-------------|------| +| /f c | Cycle chat mode | Any | +| /f c f | Set faction chat | Any | +| /f c a | Set ally chat | Any | +| /f c off | Set public chat | Any | diff --git a/src/main/resources/Server/Languages/en-US/help/welcome/getting_started.md b/src/main/resources/Server/Languages/en-US/help/welcome/getting_started.md new file mode 100644 index 00000000..2155ff0c --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Getting Started + +Welcome to HyperFactions! Here is how to get up and running in just a few steps. + +--- + +## Step 1: Open the Faction Menu + +Type /f to open the main faction GUI. This is your hub for everything -- browsing factions, creating your own, and managing invitations. + +## Step 2: Choose Your Path + +| Option | How | +|--------|-----| +| Browse open factions | Click Browse in the menu and hit Join on any open faction. | +| Accept an invitation | Check the Invites tab. If someone invited you, click Accept. | +| Create your own | Click Create Faction, pick a name, and you are the Leader. | + +## Step 3: Explore Your Faction + +Once you are in a faction, you will see the Faction Dashboard with your roster, territory map, relations, and settings. + +>[!TIP] If you are brand new, try joining an existing faction first. You will learn the ropes faster with experienced members around you. + +--- + +## Essential First Commands + +- /f -- Opens the faction GUI +- /f home -- Teleport to your faction's home base +- /f c -- Cycle chat mode between Normal, Faction, and Ally +- /f map -- View the territory map around you + +>[!TIP] You can also type /f help in chat for a quick command reference anytime. diff --git a/src/main/resources/Server/Languages/en-US/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/en-US/help/welcome/quick_tips.md new file mode 100644 index 00000000..dcd1df1a --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Quick Tips + +Handy advice organized by category to help you thrive. + +--- + +## Territory + +- Claim land around your base early with `/f claim` -- unclaimed builds have **no protection** +- Each claim costs **2.0 power** to maintain, so do not over-expand beyond what your members can support +- Use `/f map` to scout nearby claims and find safe spots to build +- Unclaim chunks you no longer need with `/f unclaim` to free up power + +## Combat + +- Dying costs **1.0 power** -- avoid unnecessary fights when your faction is near its claim limit +- You have **5 seconds of spawn protection** after respawning +- Combat tagging lasts **15 seconds** -- logging out while tagged costs extra power +- Friendly fire is **disabled** between faction members and allies by default + +>[!WARNING] Logging out while combat tagged causes additional power loss (1.0 per logout). Stay and fight or escape first. + +## Social + +- Use `/f c` to cycle through chat modes so faction talk stays private +- Invite trusted players with `/f invite ` -- invitations expire after **5 minutes** +- Form alliances with `/f ally ` for mutual protection and shared map visibility +- Check `/f relations` to see your full diplomatic status + +## Economy + +>[!TIP] If the server has economy enabled, your faction can accumulate a treasury. Members can deposit, but only Officers and Leaders can withdraw or transfer funds. + +- Deposit funds with the treasury GUI to strengthen your faction +- A wealthier faction can afford more claims and recover from setbacks faster + +## General + +- Type `/f` anytime to open your faction dashboard -- everything is accessible from there +- Promote active members to Officer so they can help claim and manage territory +- Keep your faction active -- power only regenerates while players are **online** diff --git a/src/main/resources/Server/Languages/en-US/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/en-US/help/welcome/what_are_factions.md new file mode 100644 index 00000000..5fedf54c --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# What Are Factions? + +Factions are player-run teams that claim territory, build bases, and compete for dominance. When you join or create a faction, you gain access to protected land, a shared home, private chat, and diplomatic tools. + +>[!TIP] Factions is all about teamwork. The more active members you have, the stronger your faction becomes. + +--- + +## Core Mechanics + +| Mechanic | What It Does | +|----------|-------------| +| Power | Each player generates power over time (max 20). Your faction's total power determines how much land you can hold. | +| Claims | Claimed chunks are protected -- only members can build, break, or open containers inside them. Each claim costs 2.0 power to maintain. | +| Relations | Factions can form alliances for mutual protection or declare enemies to enable PvP and territorial aggression. | +| Roles | Three ranks -- Leader, Officer, Member -- each with different capabilities. | + +--- + +## How Strength Works + +Your faction's strength comes from its members. Every player starts with 10 power and regenerates up to 20 while online. Dying costs power. If your total faction power drops below the cost of your claims, enemies can overclaim your territory. + +>[!WARNING] A single death costs 1.0 power. Multiple deaths in a short time can leave your faction vulnerable to overclaiming. + +--- + +## Diplomacy at a Glance + +- **Allies** -- Mutual agreements that prevent friendly fire and protect each other's territory +- **Enemies** -- One-way declarations that enable PvP in each other's land and allow overclaiming +- **Neutral** -- The default state between all factions with standard rules + +>[!INFO] You can manage all of this through the in-game GUI by typing `/f` or through chat commands. diff --git a/src/main/resources/Server/Languages/en-US/help/your_faction/creating.md b/src/main/resources/Server/Languages/en-US/help/your_faction/creating.md new file mode 100644 index 00000000..e1eaa33b --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Creating a Faction + +Starting your own faction makes you the Leader with full control over settings, members, and territory. + +--- + +## How to Create + +`/f create ` + +This creates your faction and immediately opens the Faction Dashboard where you can begin inviting members, claiming land, and configuring settings. + +## Name Rules + +| Rule | Requirement | +|------|------------| +| Length | Between 3 and 24 characters | +| Characters | Letters, numbers, and spaces only | +| Uniqueness | No two factions can share the same name | + +>[!WARNING] Choose your name carefully. Renaming later requires Leader permissions and may have a cooldown. + +--- + +## What Happens on Creation + +- You become the Leader (highest rank) +- Your faction starts with 0 claims and your personal power (10 by default) +- The faction dashboard opens automatically +- You can immediately invite players, claim territory, and set a faction home + +>[!INFO] If the server has economy integration enabled, creating a faction may cost money. The creation cost is set by the server administrator. + +>[!TIP] After creating, your first priorities should be: invite friends, find a base location, and claim it. diff --git a/src/main/resources/Server/Languages/en-US/help/your_faction/joining.md b/src/main/resources/Server/Languages/en-US/help/your_faction/joining.md new file mode 100644 index 00000000..7dbabdcd --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Joining a Faction + +There are three ways to join an existing faction, depending on how the faction is configured. + +--- + +## Methods Compared + +| Method | How | Requires | +|--------|-----|----------| +| Browse and Join | Open /f, click Browse, click Join | Faction is set to open | +| Accept Invite | Check Invites tab in /f menu | Active invitation | +| Request to Join | Use /f request, wait for approval | Officer or Leader approves | + +--- + +## Invite Details + +- Invitations are sent by Officers or Leaders +- Invitations expire after 5 minutes -- accept promptly +- View your pending invites in the Invites tab of the faction menu +- Accept with the GUI or /f accept + +## Join Requests + +- Use /f request to request membership in a closed faction +- Requests expire after 24 hours if not acted on +- Officers and Leaders can approve or deny requests from the faction dashboard + +>[!TIP] Not sure which faction to join? Use the Browse tab in /f to see faction descriptions, member counts, and whether they are open or invite-only. + +>[!NOTE] Each faction can hold up to 50 members by default. If a faction is full, you will need to wait for a spot to open up. diff --git a/src/main/resources/Server/Languages/en-US/help/your_faction/managing.md b/src/main/resources/Server/Languages/en-US/help/your_faction/managing.md new file mode 100644 index 00000000..870c6133 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Managing Members + +Officers and Leaders share responsibility for managing the faction roster. Here are the key commands and who can use them. + +--- + +## Commands + +| Command | What It Does | Required Role | +|---------|-------------|---------------| +| `/f invite ` | Sends a join invitation (expires in 5 min) | Officer+ | +| `/f kick ` | Removes a member from the faction | Officer+ (see note) | +| `/f promote ` | Promotes a Member to Officer | Leader only | +| `/f demote ` | Demotes an Officer to Member | Leader only | +| `/f transfer ` | Transfers faction ownership | Leader only | + +>[!NOTE] Officers can only kick Members. To remove another Officer, the Leader must either demote them first or kick them directly. + +--- + +## Invitations + +- Invitations expire after 5 minutes if not accepted +- The invited player sees it in their Invites tab when they open /f +- There is no limit to how many invitations you can send at once +- Your faction can hold up to 50 members total + +## Promotions and Demotions + +- Only the Leader can promote or demote +- /f promote raises a Member to Officer +- /f demote lowers an Officer back to Member + +## Transferring Leadership + +>[!WARNING] Transferring leadership is irreversible. You will be demoted to Officer and the target player becomes the new Leader. Make sure you trust them completely. + +`/f transfer ` + +The target must be a current member of your faction. diff --git a/src/main/resources/Server/Languages/en-US/help/your_faction/roles.md b/src/main/resources/Server/Languages/en-US/help/your_faction/roles.md new file mode 100644 index 00000000..67bb5962 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Roles and Ranks + +Every faction has three roles in a strict hierarchy. Higher roles inherit all capabilities of the roles below them. + +--- + +## Permission Breakdown + +| Action | Leader | Officer | Member | +|--------|--------|---------|--------| +| Build in territory | Yes | Yes | Yes | +| Use faction home | Yes | Yes | Yes | +| Faction and ally chat | Yes | Yes | Yes | +| Invite players | Yes | Yes | No | +| Kick members | Yes | Yes (Members only) | No | +| Claim / unclaim land | Yes | Yes | No | +| Overclaim enemy territory | Yes | Yes | No | +| Set faction home | Yes | Yes | No | +| Delete faction home | Yes | Yes | No | +| Manage relations (ally/enemy) | Yes | Yes | No | +| View faction logs | Yes | Yes | No | +| Promote to Officer | Yes | No | No | +| Demote from Officer | Yes | No | No | +| Rename faction | Yes | No | No | +| Set description / tag / color | Yes | No | No | +| Open / close faction | Yes | No | No | +| Access faction settings | Yes | No | No | +| Transfer leadership | Yes | No | No | +| Disband faction | Yes | No | No | + +>[!NOTE] Officers can kick Members but cannot kick other Officers. Only the Leader can remove Officers. + +--- + +## Role Details + +- Leader -- One per faction. Has full control over all settings, members, and territory. Can transfer ownership to another member. +- Officer -- Trusted members who help manage the faction. Can invite, kick members, claim land, and handle diplomacy. +- Member -- The default role when joining. Can build in territory, use the faction home, and participate in faction chat. + +>[!TIP] Promote your most active and trusted members to Officer so they can help manage territory and recruit new players. diff --git a/src/main/resources/Server/Languages/en-US/hyperfactions.lang b/src/main/resources/Server/Languages/en-US/hyperfactions.lang new file mode 100644 index 00000000..2fc0c45b --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - English Translations +# Format: key = value (or key = "quoted value") +# Note: Keys are auto-prefixed with "hyperfactions." by Hytale's I18nModule +# Placeholders: {0}, {1}, etc. + +# ========== Common ========== +common.no_permission = You don't have permission to do that. +common.not_in_faction = You are not in a faction. +common.already_in_faction = You are already in a faction. +common.player_not_found = Player not found. +common.faction_not_found = Faction not found. +common.player_not_online = That player is not online. +common.must_be_leader = Only the faction leader can do that. +common.must_be_officer = You must be an Officer or Leader to do that. +common.combat_tagged = You can't do that while combat tagged. +common.cancel = Cancel +common.confirm = Confirm +common.save = Save +common.close = Close +common.clear = Clear +common.back = Back +common.leave = Leave +common.transfer = Transfer +common.disband = Disband +common.world_fallback = world +common.yes = Yes +common.no = No +common.loading = Loading... +common.online = Online +common.offline = Offline +common.enabled = Enabled +common.disabled = Disabled +common.none = None +common.page = Page {0} of {1} +common.unknown = Unknown +common.error_generic = Something went wrong. Please try again. +common.gui_fallback = Could not access GUI. Use /f help for commands. +common.admin_prefix = [Admin] +common.location_error = Could not determine your location. +common.world_error = Could not determine your world. +common.invalid_id = Invalid faction ID. +common.na = N/A + +# ========== Commands - Create ========== +cmd.create.no_permission = You don't have permission to create factions. +cmd.create.usage = Usage: /f create +cmd.create.success = Faction '{0}' created! +cmd.create.already_in_named = You are already in {0}. +cmd.create.use_leave_first = Use /f leave first if you want to create a new faction. +cmd.create.name_taken = That faction name is already taken. +cmd.create.name_too_short = Faction name is too short. +cmd.create.name_too_long = Faction name is too long. +cmd.create.failed = Failed to create faction. + +# ========== Commands - Disband ========== +cmd.disband.no_permission = You don't have permission to disband factions. +cmd.disband.not_leader = Only the faction leader can disband. +cmd.disband.confirm_prompt = Are you sure you want to disband your faction? +cmd.disband.confirm_instruction = Type /f disband --text again within {0} seconds to confirm. +cmd.disband.success = Your faction has been disbanded. +cmd.disband.failed = Failed to disband faction. +cmd.disband.cancelled = Previous confirmation cancelled. Type again to confirm disband. + +# ========== Commands - Rename ========== +cmd.rename.no_permission = You don't have permission. +cmd.rename.not_leader = Only the leader can rename the faction. +cmd.rename.usage = Usage: /f rename +cmd.rename.too_short = Name is too short (min {0} chars). +cmd.rename.too_long = Name is too long (max {0} chars). +cmd.rename.name_taken = That name is already taken. +cmd.rename.success = Faction renamed to {0}! +cmd.rename.broadcast = {0} renamed the faction to {1} + +# ========== Commands - Description ========== +cmd.desc.no_permission = You don't have permission. +cmd.desc.not_officer = You must be an officer to set the description. +cmd.desc.set = Faction description set! +cmd.desc.cleared = Faction description cleared. + +# ========== Commands - Open / Close ========== +cmd.open.no_permission = You don't have permission. +cmd.open.not_leader = Only the leader can change this setting. +cmd.open.already_open = Your faction is already open. +cmd.open.success = Your faction is now open! Anyone can join with /f join. +cmd.open.broadcast = {0} opened the faction to public joining. +cmd.close.no_permission = You don't have permission. +cmd.close.not_leader = Only the leader can change this setting. +cmd.close.already_closed = Your faction is already closed. +cmd.close.success = Your faction is now invite-only. +cmd.close.broadcast = {0} closed the faction to invite-only. + +# ========== Commands - Color ========== +cmd.color.no_permission = You don't have permission. +cmd.color.not_officer = You must be an officer to change the color. +cmd.color.colors_disabled = Faction colors are disabled. +cmd.color.usage = Usage: /f color +cmd.color.usage_hint = Valid codes: 0-9, a-f or #RRGGBB hex +cmd.color.invalid = Invalid color. Use 0-9, a-f, or #RRGGBB. +cmd.color.success = Faction color updated! + +# ========== Commands - Claim ========== +cmd.claim.no_permission = You don't have permission to claim territory. +cmd.claim.already_yours = Your faction already owns this chunk. +cmd.claim.cannot_claim_ally = You cannot claim ally territory. +cmd.claim.already_claimed_hint = This chunk is claimed. Use /f overclaim if they are raidable. +cmd.claim.success = Claimed chunk at {0}, {1}! +cmd.claim.not_officer = You must be an officer to claim land. +cmd.claim.already_claimed = This chunk is already claimed. +cmd.claim.max_claims = Your faction has reached max claims. Get more power! +cmd.claim.not_adjacent = You must claim adjacent to existing territory. +cmd.claim.world_not_allowed = Claiming is not allowed in this world. +cmd.claim.orbisguard = This area is protected by OrbisGuard. +cmd.claim.zone_protected = This chunk is in a safezone or warzone. +cmd.claim.insufficient_power = Your faction doesn't have enough power to claim more land. +cmd.claim.failed = Failed to claim chunk. + +# ========== Commands - Invite ========== +cmd.invite.no_permission = You don't have permission to invite players. +cmd.invite.not_officer = You must be an officer to invite players. +cmd.invite.usage = Usage: /f invite +cmd.invite.player_not_found = Player '{0}' not found or offline. +cmd.invite.target_in_faction = That player is already in a faction. +cmd.invite.sent = Invited {0} to your faction. +cmd.invite.received = You have been invited to join {0}! +cmd.invite.accept_hint = Type /f accept {0} to join. + +# ========== Commands - Accept / Join ========== +cmd.join.no_permission = You don't have permission to join factions. +cmd.join.already_in_named = You are already in {0}. +cmd.join.use_leave_hint = Use /f leave first if you want to join another faction. +cmd.join.no_invites = You have no pending invites. +cmd.join.faction_not_found = Faction '{0}' not found. +cmd.join.not_invited = You have no invite from that faction. +cmd.join.faction_gone = That faction no longer exists. +cmd.join.success = You have joined {0}! +cmd.join.broadcast = {0} has joined the faction! +cmd.join.faction_full = That faction is full. +cmd.join.failed = Failed to join faction. + +# ========== Commands - Kick ========== +cmd.kick.no_permission = You don't have permission to kick members. +cmd.kick.usage = Usage: /f kick +cmd.kick.not_in_your_faction = Player '{0}' is not in your faction. +cmd.kick.success = Kicked {0} from the faction. +cmd.kick.broadcast = {0} was kicked from the faction. +cmd.kick.kicked = You have been kicked from the faction. +cmd.kick.cannot_kick_higher = You don't have permission to kick that player. +cmd.kick.cannot_kick_leader = You cannot kick the faction leader. +cmd.kick.failed = Failed to kick player. + +# ========== Commands - Leave ========== +cmd.leave.no_permission = You don't have permission to leave factions. +cmd.leave.confirm_prompt = Are you sure you want to leave your faction? +cmd.leave.confirm_instruction = Type /f leave --text again within {0} seconds to confirm. +cmd.leave.success = You have left your faction. +cmd.leave.broadcast = {0} has left the faction. +cmd.leave.failed = Failed to leave faction. +cmd.leave.cancelled = Previous confirmation cancelled. Type again to confirm leave. + +# ========== Commands - Promote / Demote / Transfer ========== +cmd.rank.promote_no_permission = You don't have permission to promote members. +cmd.rank.promote_usage = Usage: /f promote +cmd.rank.promoted = Promoted {0} to {1}! +cmd.rank.promote_broadcast = {0} was promoted to {1}! +cmd.rank.already_highest = Cannot promote further. Use /f transfer to change leader. +cmd.rank.promote_failed = Failed to promote player. +cmd.rank.demote_no_permission = You don't have permission to demote members. +cmd.rank.demote_usage = Usage: /f demote +cmd.rank.demoted = Demoted {0} to {1}. +cmd.rank.demote_broadcast = {0} was demoted to {1}. +cmd.rank.already_lowest = That player is already a Member. +cmd.rank.demote_failed = Failed to demote player. +cmd.rank.transfer_no_permission = You don't have permission to transfer leadership. +cmd.rank.transfer_usage = Usage: /f transfer +cmd.rank.player_not_in_faction = Player not found in your faction. +cmd.rank.transfer_confirm = Are you sure you want to transfer leadership to {0}? +cmd.rank.transfer_confirm_instruction = Type /f transfer {0} --text again within {1} seconds to confirm. +cmd.rank.transferred = Transferred leadership to {0}! +cmd.rank.transfer_broadcast = {0} is now the faction leader! +cmd.rank.transfer_failed = Failed to transfer leadership. +cmd.rank.transfer_cancelled = Previous confirmation cancelled. Type again to confirm transfer. + +# ========== Commands - Unclaim ========== +cmd.unclaim.no_permission = You don't have permission to unclaim territory. +cmd.unclaim.success = Unclaimed chunk at {0}, {1}. +cmd.unclaim.not_officer = You must be an officer to unclaim land. +cmd.unclaim.chunk_not_claimed = This chunk is not claimed. +cmd.unclaim.not_your_claim = Your faction doesn't own this chunk. +cmd.unclaim.cannot_unclaim_home = Cannot unclaim the chunk with faction home. +cmd.unclaim.would_disconnect = Cannot unclaim — it would disconnect your territory. +cmd.unclaim.failed = Failed to unclaim chunk. + +# ========== Commands - Overclaim ========== +cmd.overclaim.no_permission = You don't have permission to overclaim territory. +cmd.overclaim.success = Overclaimed enemy territory! +cmd.overclaim.not_officer = You must be an officer to overclaim. +cmd.overclaim.not_claimed = This chunk is not claimed. Use /f claim. +cmd.overclaim.own_chunk = Your faction already owns this chunk. +cmd.overclaim.ally = You cannot overclaim ally territory. +cmd.overclaim.target_has_power = This faction still has enough power. +cmd.overclaim.failed = Failed to overclaim. + +# ========== Commands - Stuck ========== +cmd.stuck.no_permission = You don't have permission to use /f stuck. +cmd.stuck.not_stuck = You're not stuck - this is wilderness. +cmd.stuck.combat_tagged = You cannot use /f stuck while in combat! +cmd.stuck.no_safe = Could not find a safe location. +cmd.stuck.teleporting = Teleporting to safety in {0} seconds. Don't move! + +# ========== Commands - Home ========== +cmd.home.no_permission = You don't have permission to teleport to faction home. +cmd.home.no_home = Your faction has no home set. +cmd.home.combat_tagged = You cannot teleport while in combat! +cmd.home.teleported = Teleported to faction home! + +# ========== Commands - SetHome ========== +cmd.sethome.no_permission = You don't have permission to set faction home. +cmd.sethome.world_not_allowed = Cannot set home in this world. +cmd.sethome.not_in_territory = You can only set home in your faction's territory. +cmd.sethome.set = Faction home set! +cmd.sethome.broadcast = {0} set the faction home. +cmd.sethome.not_officer = You must be an officer to set the home. +cmd.sethome.failed = Failed to set home. + +# ========== Commands - DelHome ========== +cmd.delhome.no_permission = You don't have permission to delete faction home. +cmd.delhome.no_home = Your faction does not have a home set. +cmd.delhome.deleted = Faction home deleted! +cmd.delhome.broadcast = {0} deleted the faction home. +cmd.delhome.not_officer = You must be an officer to delete the home. +cmd.delhome.failed = Failed to delete home. + +# ========== Commands - Relation (Ally/Enemy/Neutral/Relations) ========== +cmd.relation.ally_no_permission = You don't have permission to manage alliances. +cmd.relation.ally_usage = Usage: /f ally +cmd.relation.ally_sent = Ally request sent to {0}! +cmd.relation.ally_formed = You are now allies with {0}! +cmd.relation.already_ally = You are already allied with that faction. +cmd.relation.ally_failed = Failed to send ally request. +cmd.relation.enemy_no_permission = You don't have permission to declare enemies. +cmd.relation.enemy_usage = Usage: /f enemy +cmd.relation.enemy_declared = {0} is now your enemy! +cmd.relation.already_enemy = You are already enemies with that faction. +cmd.relation.max_enemies = You have reached the maximum number of enemies. +cmd.relation.enemy_failed = Failed to set enemy. +cmd.relation.neutral_no_permission = You don't have permission to set neutral relations. +cmd.relation.neutral_usage = Usage: /f neutral +cmd.relation.neutral_set = Your faction is now neutral with {0}. +cmd.relation.already_neutral = You are already neutral with that faction. +cmd.relation.neutral_failed = Failed to set neutral. +cmd.relation.cannot_self = You cannot ally with yourself. +cmd.relation.max_allies = You have reached the maximum number of allies. +cmd.relation.view_no_permission = You don't have permission to view relations. +cmd.relation.header = === Faction Relations === +cmd.relation.allies_count = Allies ({0}): +cmd.relation.enemies_count = Enemies ({0}): +cmd.relation.list_entry = - {0} + +# ========== Commands - Chat ========== +cmd.chat.usage = Usage: /f c [f|a|off] +cmd.chat.no_permission = You don't have permission for that chat mode. +cmd.chat.mode_set = Chat mode set to {0} + +# ========== Commands - Invites ========== +cmd.invites.not_officer = You must be an officer to manage invites. +cmd.invites.header = === Faction Invites === +cmd.invites.no_pending = No pending invites or requests. +cmd.invites.outgoing = Outgoing Invites: +cmd.invites.outgoing_entry = {0} (invited by {1}) +cmd.invites.requests = Join Requests: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Your Invites === +cmd.invites.no_invites = You have no pending invites. +cmd.invites.invite_entry = {0} - Use /f accept {1} + +# ========== Commands - Request ========== +cmd.request.no_permission = You don't have permission to request faction membership. +cmd.request.already_in_named = You are already in {0}. +cmd.request.use_leave_hint = Use /f leave first if you want to join another faction. +cmd.request.usage = Usage: /f request [message] +cmd.request.faction_open = That faction is open! Use /f accept {0} to join directly. +cmd.request.already_requested = You already have a pending request to that faction. +cmd.request.has_invite = You have been invited to that faction! Use /f accept {0} to join. +cmd.request.sent = Sent join request to {0}! +cmd.request.your_message = Your message: "{0}" +cmd.request.officer_review = An officer will review your request. +cmd.request.officer_notify = {0} has requested to join your faction! +cmd.request.officer_review_hint = Use /f gui > Invites to review. + +# ========== Commands - Info ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = You don't have permission to view faction info. +cmd.info.faction_not_found = Faction '{0}' not found. +cmd.info.not_in_faction_hint = You are not in a faction. Use /f info +cmd.info.leader = Leader: {0} +cmd.info.members = Members: {0}/{1} +cmd.info.power = Power: {0} +cmd.info.claims = Claims: {0} +cmd.info.raidable = RAIDABLE! +cmd.info.allies = Allies: {0} +cmd.info.enemies = Enemies: {0} +cmd.info.they_consider = They consider you: {0} +cmd.info.you_consider = You consider them: {0} +cmd.info.members_no_permission = You don't have permission to view faction members. +cmd.info.members_header = === {0} Members ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = You don't have permission to view faction list. +cmd.info.list_empty = There are no factions. +cmd.info.list_header = === Factions ({0}) === +cmd.info.list_entry = {0} - {1} members, {2} power +cmd.info.list_entry_raidable = {0} - {1} members, {2} power [RAIDABLE] +cmd.info.help_no_permission = You don't have permission to view help. +cmd.info.who_no_permission = You don't have permission to view player info. +cmd.info.who_faction = Faction: {0} +cmd.info.who_role = Role: {0} +cmd.info.who_joined = Joined: {0} +cmd.info.who_faction_none = Faction: None +cmd.info.who_power = Power: {0} +cmd.info.who_status = Status: {0} +cmd.info.who_last_seen = Last seen: {0} +cmd.info.map_no_permission = You don't have permission to view the map. +cmd.info.map_header = === Territory Map === +cmd.info.map_legend = Legend: +You /Own /Ally /Enemy -Wild +cmd.info.map_gui_hint = Use /f gui for interactive map + +# ========== Commands - Power ========== +cmd.power.personal = Personal Power: {0}/{1} +cmd.power.faction = Faction Power: {0}/{1} +cmd.power.death_loss = Death Loss: {0} +cmd.power.regen = Regen Rate: {0}/hr +cmd.power.no_permission = You don't have permission to view power info. +cmd.power.header = {0}'s Power: +cmd.power.current = Current: {0} + +# ========== Commands - Economy ========== +cmd.economy.balance = Balance: {0} +cmd.economy.deposited = Deposited {0} into the faction treasury. +cmd.economy.withdrawn = Withdrew {0} from the faction treasury. +cmd.economy.transferred = Transferred {0} to {1}. +cmd.economy.insufficient = Insufficient funds in faction treasury. +cmd.economy.invalid_amount = Invalid amount: {0} +cmd.economy.economy_disabled = Economy is disabled. +cmd.economy.balance_no_permission = You don't have permission to view balances. +cmd.economy.treasury_unavailable = Treasury is not available. +cmd.economy.balance_display = {0}'s treasury: {1} +cmd.economy.deposit_no_permission = You don't have permission to deposit. +cmd.economy.deposit_faction_denied = You don't have faction permission to deposit. +cmd.economy.deposit_usage = Usage: /f deposit +cmd.economy.amount_positive = Amount must be positive. +cmd.economy.wallet_insufficient = You don't have enough money. Wallet: {0} +cmd.economy.wallet_withdraw_failed = Failed to withdraw from your wallet. +cmd.economy.deposit_failed = Failed to deposit to faction treasury. Money returned. +cmd.economy.withdraw_no_permission = You don't have permission to withdraw. +cmd.economy.withdraw_faction_denied = You don't have faction permission to withdraw. +cmd.economy.withdraw_usage = Usage: /f withdraw +cmd.economy.withdraw_limit_denied = Withdrawal denied: {0} +cmd.economy.wallet_deposit_failed = Warning: Failed to deposit to your wallet. Contact an admin. +cmd.economy.withdraw_limit_exceeded = Withdrawal denied: limit exceeded. +cmd.economy.withdraw_failed = Withdrawal failed: {0} +cmd.economy.transfer_no_permission = You don't have permission to transfer. +cmd.economy.transfer_faction_denied = You don't have faction permission to transfer. +cmd.economy.transfer_usage = Usage: /f money transfer +cmd.economy.transfer_self = Cannot transfer to your own faction. +cmd.economy.transfer_limit_denied = Transfer denied: {0} +cmd.economy.transfer_limit_exceeded = Transfer denied: limit exceeded. +cmd.economy.transfer_failed = Transfer failed: {0} +cmd.economy.log_no_permission = You don't have permission to view the transaction log. +cmd.economy.log_header = Transaction Log (page {0}/{1}) +cmd.economy.log_empty = No transactions found. +cmd.economy.money_help_header = Treasury Commands: +cmd.economy.money_help_balance = /f money balance [faction] - View balance +cmd.economy.money_help_deposit = /f money deposit - Deposit into treasury +cmd.economy.money_help_withdraw = /f money withdraw - Withdraw from treasury +cmd.economy.money_help_transfer = /f money transfer - Transfer between factions +cmd.economy.money_help_log = /f money log [page] [type] - View transaction history + +# ========== Protection - Action Phrases ========== +protection.action.generic = You can't do that +protection.action.build = You can't build or break blocks +protection.action.interact = You can't interact with that +protection.action.door = You can't use doors +protection.action.container = You can't open containers +protection.action.bench = You can't use crafting stations +protection.action.processing = You can't use processing stations +protection.action.seat = You can't use seats +protection.action.light = You can't toggle lights +protection.action.teleporter = You can't use teleporters +protection.action.crate = You can't use crates +protection.action.tame = You can't tame creatures +protection.action.npc = You can't interact with NPCs +protection.action.mount = You can't mount creatures +protection.action.pve = You can't damage creatures +protection.action.item_drop = You can't drop items +protection.action.item_pickup = You can't pick up items + +# ========== Protection - Denial Reasons ========== +protection.denied.safezone = {0} in a SafeZone. +protection.denied.warzone = {0} in a WarZone. +protection.denied.enemy_claim = {0} in enemy territory. +protection.denied.claimed = {0} in claimed territory. +protection.denied.here = {0} here. +protection.denied.zone = {0} in this zone. +protection.denied.faction_perm = {0} here. (Faction permission: {1}) +protection.denied.ally_territory = {0} here. (Ally territory) +protection.denied.error = Protection error — action blocked for safety. + +# ========== Protection - PvP ========== +protection.pvp.safezone = PvP is disabled in SafeZones. +protection.pvp.same_faction = You cannot attack faction members. +protection.pvp.ally = You cannot attack allies. +protection.pvp.spawn_protected = That player has spawn protection. +protection.pvp.territory_disabled = PvP is disabled in this territory. +protection.pvp.generic = You cannot attack this player. + +# ========== Protection - Entity Damage ========== +protection.mob_damage_disabled = Mob damage is disabled in this zone. +protection.pve_damage_disabled = PvE damage is disabled in this zone. +protection.pve_territory_denied = You cannot damage mobs in this territory. + +# ========== Protection - Combat Tag ========== +protection.combat_tag_command = You cannot use that command while combat tagged. + +# ========== Server Announcements ========== +# These are broadcast to all online players for significant faction events. +# {0}, {1} = dynamic values (faction names, player names) +server_announce.faction_created = {0} has founded the faction {1}! +server_announce.faction_disbanded = The faction {0} has been disbanded! +server_announce.leadership_transfer = {0} is now the leader of {1}! +server_announce.overclaim = {0} has overclaimed territory from {1}! +server_announce.war_declared = {0} has declared war on {1}! +server_announce.alliance_formed = {0} and {1} are now allies! +server_announce.alliance_broken = {0} and {1} are no longer allies! + +# ========== Teleport System ========== +teleport.cooldown_wait = You must wait {0} before teleporting again. +teleport.warmup_start = Teleporting to faction home in {0} seconds... +teleport.combat_cancelled = Teleportation cancelled - you are in combat! +teleport.success_default = Teleported to faction home! +teleport.no_home = Your faction has no home set. +teleport.world_not_found = World not found. +teleport.failed = Teleportation failed. +teleport.countdown = Teleporting in {0} seconds... +teleport.countdown_one = Teleporting in 1 second... +teleport.moved_cancelled = Teleportation cancelled - you moved! +teleport.damage_cancelled = Teleportation cancelled - you took damage! +teleport.mount_teleport_blocked = You can't teleport into that zone while mounted. +teleport.mount_entry_blocked = You can't enter this zone while mounted. + +# ========== Chat Display ========== +chat.display.public = Public +chat.display.faction = Faction +chat.display.ally = Ally diff --git a/src/main/resources/Server/Languages/en-US/hyperfactions_admin.lang b/src/main/resources/Server/Languages/en-US/hyperfactions_admin.lang new file mode 100644 index 00000000..bb35ea86 --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - English Translations +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_admin." by Hytale's I18nModule + +# ========== Admin Navigation Bar ========== +nav.dashboard = Dashboard +nav.actions = Actions +nav.factions = Factions +nav.players = Players +nav.economy = Economy +nav.zones = Zones +nav.config = Config +nav.backups = Backups +nav.log = Log +nav.updates = Updates +nav.help = Help +nav.version = Version + +# ========== Common Admin Labels ========== +common.faction_not_found = Faction Not Found +common.no_faction = No Faction +common.not_set = Not set +common.on = On +common.off = Off +common.enable = Enable +common.disable = Disable +common.none_paren = (None) +common.invalid_faction = Invalid faction. +common.leader_prefix = Leader: {0} +common.members_suffix = {0} members +common.claims_suffix = {0} claims +common.factions_suffix = {0} factions +common.players_suffix = {0} players +common.chunks_suffix = {0} chunks +common.entries_suffix = {0} entries +common.found_suffix = {0} found +common.power_format = {0}/{1} power +common.raidable = Raidable +common.protected = Protected +common.no_description = No description set. +common.officers_more = +{0} more +common.custom_max = (custom max) +common.default_max = (default max) +common.now = Now +common.ago_suffix = {0} ago +common.just_now = just now +common.no_membership_history = No membership history + +# ========== Admin Dashboard ========== +dashboard.factions_prefix = Factions: {0} +dashboard.members_prefix = Total Members: {0} +dashboard.claims_prefix = Total Claims: {0} + +# ========== Admin Actions ========== +actions.confirm_reset = Confirm Reset? +actions.confirm_trigger = Confirm Trigger? +actions.kd_reset = Reset K/D for {0} players. +actions.kd_reset_failed = Failed to reset K/D: {0} +actions.upkeep_unavailable = Upkeep processor is not available. +actions.upkeep_triggered = Upkeep collection triggered. +actions.upkeep_failed = Upkeep failed: {0} + +# ========== Admin Disband ========== +disband.faction_gone = Faction no longer exists. +disband.success = Faction '{0}' has been disbanded. +disband.failed = Failed to disband: {0} +disband.no_leader = Faction has no leader, cannot disband. + +# ========== Admin Unclaim All ========== +unclaim.removed = [Admin] Removed {0} claims from {1}. +unclaim.no_claims = {0} had no claims to remove. + +# ========== Admin Factions List ========== +factions.home_not_set = Not set +factions.teleported = Teleported to {0}'s home. +factions.no_home = Faction has no home set. +factions.world_not_found = Target world not found. + +# ========== Admin Faction Info ========== +info.faction_gone = This faction no longer exists. + +# ========== Admin Faction Members ========== +members.sort_role = Role +members.sort_online = Online +members.sort_name = Name +members.sort_power = Power +members.promoted = [Admin] Promoted {0} to {1}. +members.demoted = [Admin] Demoted {0} to {1}. +members.kicked = [Admin] Kicked {0} from the faction. + +# ========== Admin Faction Relations ========== +relations.allies_header = ALLIES ({0}) +relations.enemies_header = ENEMIES ({0}) +relations.no_allies = No allies. +relations.no_enemies = No enemies. +relations.neutral_count = {0} neutral factions +relations.since_today = Since: today +relations.since_one_day = Since: 1 day ago +relations.since_days = Since: {0} days ago +relations.set_ally = [Admin] Set mutual ally status with {0}. +relations.set_enemy = Set mutual enemy status with {0}. +relations.set_neutral = [Admin] Set mutual neutral status with {0}. + +# ========== Admin Faction Settings ========== +settings.locked = This setting is locked by server configuration. +settings.perm_toggled = Set {0} to {1}. +settings.color_changed = Set faction color to {0}. +settings.recruitment_set = Set recruitment to {0}. +settings.no_home = [Admin] This faction has no home set. +settings.home_cleared = Cleared faction home for {0}. + +# ========== Sort Dropdown Labels ========== +sort.power = Power +sort.name = Name +sort.members = Members +sort.balance = Balance + +# ========== Admin Players ========== +players.sort_last_online = Last Online +players.sort_faction = Faction +players.sort_online = Online +players.not_online = Player is not online. +players.world_not_found = Target world not found. +players.teleported = [Admin] Teleported to {0}. + +# ========== Admin Player Info ========== +playerinfo.disband_faction = Disband Faction +playerinfo.kick_leader = Kick Leader +playerinfo.enter_valid_number = Enter a valid number. +playerinfo.enter_valid_positive = Enter a valid positive number. +playerinfo.faction_gone = Faction no longer exists. +playerinfo.kd_reset = Reset K/D for {0}. +playerinfo.kicked_success = Kicked {0} from {1}. +playerinfo.kicked_leader = Kicked leader {0}. Leadership transferred to {1}. +playerinfo.disbanded_kick = [Admin] Faction '{0}' disbanded (last member kicked). + +# ========== Admin Economy ========== +economy.no_data = No factions with economy data. +economy.amount_zero = Amount cannot be zero. +economy.enter_amount = Please enter an amount. +economy.invalid_number = Invalid number: {0} +economy.error = An error occurred. +economy.balance_negative = Balance cannot be negative. +economy.failed = Failed: {0} +economy.bulk_complete = Bulk adjust complete: {0} {1} to {2} factions. +economy.bulk_failures = ({0} failed) + +# ========== Admin Zones ========== +zones.not_found = Zone not found. +zones.invalid_id = Invalid zone ID. +zones.deleted = Zone {0} deleted. +zones.delete_failed = Failed to delete zone: {0} +zones.no_chunks = No chunks +zones.chunks_suffix = {0} ({1} chunks) + +# ========== Zone Create Wizard ========== +wizard.enter_name = Please enter a zone name. +wizard.name_too_short = Zone name must be at least {0} characters. +wizard.name_too_long = Zone name cannot exceed {0} characters. +wizard.name_taken = A zone with this name already exists. +wizard.radius_range = Radius must be between 1 and {0}. +wizard.create_failed = Could not create zone: {0} +wizard.created_not_found = Zone created but could not be found. +wizard.created = Created {0} '{1}'! +wizard.chunk_claimed = Claimed chunk ({0}, {1}). +wizard.chunk_failed = Could not claim current chunk: {0} +wizard.radius_claimed = Claimed {0} chunks in a {1} radius of {2}. +wizard.radius_no_claims = No chunks could be claimed (area may be occupied). +wizard.no_claims = Zone created with no claims. +wizard.chunks_preview = ~{0} chunks + +# ========== Zone Rename ========== +zone_rename.zone_gone = Zone no longer exists. +zone_rename.enter_name = Please enter a zone name. +zone_rename.too_short = Zone name must be at least {0} character. +zone_rename.too_long = Zone name cannot exceed {0} characters. +zone_rename.same_name = That's already this zone's name. +zone_rename.renamed = [Admin] Zone renamed from {0} to {1}! +zone_rename.name_taken = A zone with that name already exists. +zone_rename.invalid_name = Invalid zone name. +zone_rename.rename_failed = Failed to rename zone: {0} + +# ========== Zone Change Type ========== +zone_type.zone_gone = Zone no longer exists. +zone_type.changed = [Admin] Changed {0} from {1} to {2} ({3}). +zone_type.failed = Failed to change zone type: {0} +zone_type.flags_reset = flags reset +zone_type.flags_kept = flags kept + +# ========== Zone Integration Flags ========== +zone_int.zone_not_found = Zone Not Found +zone_int.no_plugin = (no plugin) +zone_int.default = (default) +zone_int.custom = (custom) + +# Integration flags UI labels +gui.zint_cat_gravestones = Gravestones +gui.zint_gravestones_desc = When ON, non-owners can loot graves. Owners always can. +gui.zint_cat_world_map = World Map +gui.zint_world_map_desc = Override map hiding for players in this zone. When enabled, select who can see players in this zone. +gui.zint_visibility_label = Visibility Level: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Reset to Defaults +gui.zint_back_to_flags = Back to Flags +gui.zint_map_vis_faction = Faction Only +gui.zint_map_vis_ally = Faction + Allies +gui.zint_map_vis_all = All Players + +# ========== Activity Log ========== +log.all_types = All Types +log.no_logs = No activity logs matching filters. + +# ========== Version Page ========== +version.active = Active +version.not_found = Not Found +version.not_detected = Not Detected +version.not_installed = Not Installed +version.active_version = Active (v{0}) +version.active_compatible = Active (compatible) +version.active_claims_only = Active (claims only) +version.installed_no_perm = Installed (no perm provider) +version.active_provider = Active ({0}) + +# ========== Admin Main Page ========== +main.reload_hint = Use /f reload to reload configuration. +main.unclaim_hint = Use /f admin unclaim {0} to unclaim all {1} chunks. + +# ========== Zone Flags/Settings ========== +zflags.invalid_flag = Invalid flag. +zflags.zone_not_found = Zone not found. +zflags.conflict = (conflict) +zflags.mixin = (mixin) +zflags.reset_int = Reset integration flags to defaults. +zflags.reset_all = Reset all flags to defaults. +zflags.reset_failed = Failed to reset flags: {0} +zflags.back_to_settings = Back to Settings + +# Zone settings UI labels +gui.zset_cat_combat = Combat +gui.zset_cat_damage = Damage +gui.zset_cat_death = Death +gui.zset_cat_building = Building +gui.zset_cat_interaction = Interaction +gui.zset_cat_transport = Transport +gui.zset_cat_items = Items +gui.zset_cat_spawning = Mob Spawning +gui.zset_cat_mob_clear = Mob Clearing +gui.zset_children_hint = (children only apply when parent ON) +gui.zset_reset_defaults = Reset to Defaults +gui.zset_integration_flags = Integration Flags +gui.zset_back_to_zones = Back to Zones +gui.zset_chunks = {0} chunks + +# Zone Flag Display Names +gui.zflag_pvp_enabled = PvP Enabled +gui.zflag_friendly_fire = Friendly Fire +gui.zflag_friendly_fire_faction = Faction Damage +gui.zflag_friendly_fire_ally = Ally Damage +gui.zflag_projectile_damage = Projectile Damage +gui.zflag_mob_damage = Take Mob Damage +gui.zflag_pve_damage = Give Mob Damage +gui.zflag_fall_damage = Fall Damage +gui.zflag_environmental_damage = Env. Damage +gui.zflag_explosion_damage = Explosion Damage +gui.zflag_fire_spread = Fire Spread +gui.zflag_keep_inventory = Keep Inventory +gui.zflag_power_loss = Power Loss +gui.zflag_build_allowed = Building Allowed +gui.zflag_block_place = Block Placement +gui.zflag_hammer_use = Hammer Use +gui.zflag_builder_tools_use = Builder Tools +gui.zflag_block_interact = Block Interaction +gui.zflag_door_use = Door Use +gui.zflag_container_use = Container Use +gui.zflag_bench_use = Bench Use +gui.zflag_processing_use = Processing Use +gui.zflag_seat_use = Seat Use +gui.zflag_mount_use = Mount Use +gui.zflag_light_use = Light Use +gui.zflag_npc_use = NPC Interaction +gui.zflag_crate_pickup = Crate Pickup +gui.zflag_crate_place = Crate Place +gui.zflag_npc_tame = NPC Tame +gui.zflag_npc_interact = NPC Interact +gui.zflag_teleporter_use = Teleporter Use +gui.zflag_portal_use = Portal Use +gui.zflag_mount_entry = Mount Entry +gui.zflag_item_drop = Item Drop +gui.zflag_item_pickup = Auto Pickup +gui.zflag_item_pickup_manual = F-Key Pickup +gui.zflag_invincible_items = Invincible Items +gui.zflag_mob_spawning = Mob Spawning +gui.zflag_hostile_mob_spawning = Hostile Mobs +gui.zflag_passive_mob_spawning = Passive Mobs +gui.zflag_neutral_mob_spawning = Neutral Mobs +gui.zflag_npc_spawning = NPC Spawning +gui.zflag_mob_clear = Mob Clearing +gui.zflag_hostile_mob_clear = Clear Hostile Mobs +gui.zflag_passive_mob_clear = Clear Passive Mobs +gui.zflag_neutral_mob_clear = Clear Neutral Mobs +gui.zflag_gravestone_access = Others Loot Graves +gui.zflag_show_on_map = Show on Map +gui.zflag_essentials_homes = Home Use +gui.zflag_essentials_warps = Warp Use +gui.zflag_essentials_kits = Kit Claiming + +# ========== Zone Properties ========== +zprop.current_custom = Current: "{0}" (custom) +zprop.current_default = Current: "{0}" (default) +zprop.pvp_disabled = PvP Disabled +zprop.pvp_enabled = PvP Enabled +zprop.name_empty = Name cannot be empty. +zprop.renamed = Zone renamed to "{0}". +zprop.name_taken = A zone with that name already exists. +zprop.name_invalid = Invalid name (max 32 characters). +zprop.rename_failed = Failed to rename: {0} +zprop.upper_empty = Upper title cannot be empty. Use Clear to reset. +zprop.upper_set = Upper title set. +zprop.upper_reset = Upper title reset to default. +zprop.lower_empty = Lower title cannot be empty. Use Clear to reset. +zprop.lower_set = Lower title set. +zprop.lower_reset = Lower title reset to default. + +# ========== Relations Additional ========== +relations.failed = Failed: {0} + +# ========== Members Additional ========== +members.never = Never +members.teleported = [Admin] Teleported to {0}. + +# ========== Player Info Additional ========== +playerinfo.records = {0} records +playerinfo.joined_date = Joined: {0} +playerinfo.current = Current +playerinfo.left_date = Left: {0} + +# ========== Zone Map ========== +map.world_warning = WARNING: You are in '{0}' - zone is in '{1}' +map.position = Your Position: Chunk ({0}, {1}) +map.zone_gone = Zone no longer exists. +map.claimed = Claimed chunk ({0}, {1}) for {2}. +map.claim_failed = Failed to claim chunk: {0} +map.unclaimed = Unclaimed chunk ({0}, {1}) from {2}. +map.unclaim_failed = Failed to unclaim chunk: {0} +map.chunk_belongs = This chunk belongs to {0}. +map.chunk_faction = This chunk is claimed by a faction. +map.chunk_protected = This chunk is in a protected region. +map.another_zone = another zone + +# ========== GUI Label Keys (for .ui hardcoded text localization) ========== + +# Page Titles +gui.title_dashboard = Admin Dashboard +gui.title_main = Factions Admin +gui.title_actions = Admin: Server Actions +gui.title_factions = Faction Management +gui.title_players = Player Management +gui.title_economy = Admin: Server Economy +gui.title_zones = Zone Management +gui.title_backups = Backups +gui.title_config = Configuration +gui.title_help = Admin Help +gui.title_updates = Updates +gui.title_version = Version and Integrations +gui.title_activity_log = Admin: Activity Log +gui.title_player_info = Admin: Player Info +gui.title_faction_info = Admin: Faction Info +gui.title_faction_settings = Admin: Faction Settings +gui.title_faction_members = Admin: Members +gui.title_faction_relations = Admin: Relations +gui.title_zone_map = Zone Map Editor +gui.title_zone_settings = Admin: Zone Settings +gui.title_zone_properties = Admin: Zone Properties +gui.title_bulk_economy = Bulk Treasury Adjust +gui.title_economy_adjust = Admin: Economy + +# Dashboard labels +gui.dash_server_stats = Server Statistics +gui.dash_factions = Factions +gui.dash_total_members = Total Members +gui.dash_total_claims = Total Claims +gui.dash_zones = Zones +gui.dash_safe_war = safe / war +gui.dash_total_power = Total Power +gui.dash_avg_power = Avg Power/Faction +gui.dash_total_economy = Total Economy +gui.dash_wealthiest = Wealthiest +gui.dash_avg_balance = Avg Balance +gui.dash_protection_bypass = Protection Bypass: + +# Common buttons and labels +gui.search = Search: +gui.sort = Sort: +gui.prev = < Prev +gui.next = Next > +gui.back = Back +gui.done = Done +gui.cancel = Cancel +gui.apply = Apply +gui.set = Set +gui.reset = Reset +gui.coming_soon = Coming Soon +gui.zones_btn = Zones +gui.reload_btn = Reload +gui.all = All +gui.safe = Safe +gui.war = War +gui.create_zone = + Create + +# Actions page labels +gui.act_combat_stats = Combat Statistics +gui.act_combat_desc = Reset kills and deaths for ALL players on the server. This action cannot be undone. +gui.act_reset_kd = Reset All K/D +gui.act_economy = Economy +gui.act_economy_desc = Add or remove money from ALL faction treasuries at once. +gui.act_bulk_adjust = Bulk Add/Remove +gui.act_upkeep_collection = Upkeep Collection +gui.act_upkeep_desc = Manually trigger upkeep collection for all factions right now, regardless of the scheduled timer. +gui.act_trigger_upkeep = Trigger Upkeep + +# Placeholder page labels +gui.backup_heading = Backup Management +gui.backup_desc1 = Create, restore, and manage faction data backups. +gui.backup_desc2 = Automatic backups are saved to the data/backups folder. +gui.config_heading = Configuration Editor +gui.config_desc1 = Configure HyperFactions settings directly from the GUI. +gui.config_desc2 = For now, use /f reload to reload configuration changes. +gui.help_heading = Admin Documentation +gui.help_desc1 = View admin documentation and command reference. +gui.help_desc2 = For help, visit the HyperFactions wiki. +gui.updates_heading = Update Center +gui.updates_desc1 = Check for new versions and view changelogs. +gui.updates_desc2 = Visit the HyperFactions page for the latest updates. + +# Version page labels +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Hytale Server +gui.ver_java = Java +gui.ver_permissions = PERMISSIONS +gui.ver_placeholders = PLACEHOLDERS +gui.ver_economy_section = ECONOMY +gui.ver_protection = PROTECTION +gui.ver_disabled = Disabled + +# Column headers (shared across pages) +gui.col_faction = Faction +gui.col_balance = Balance +gui.col_members = Members +gui.col_actions = Actions +gui.col_time = Time +gui.col_type = Type +gui.col_message = Message + +# Economy page labels +gui.econ_total_balance = Total Balance +gui.econ_factions = Factions +gui.econ_avg_balance = Avg Balance +gui.econ_in_grace = In Grace +gui.econ_collected = Collected (24h) +gui.econ_next_collection = Next Collection +gui.econ_no_data = No factions with economy data. + +# Activity log labels +gui.log_type = Type: +gui.log_time = Time: +gui.log_player = Player: +gui.log_no_logs = No activity logs matching filters. + +# Player info labels +gui.plr_first_joined = First joined: +gui.plr_last_online = Last online: +gui.plr_uuid = UUID: +gui.plr_faction = Faction: +gui.plr_role = Role: +gui.plr_view_faction = View Faction +gui.plr_power = Power +gui.plr_max_power = Max Power +gui.plr_set_power = Set +gui.plr_reset_power = Reset +gui.plr_set_max = Set +gui.plr_reset_max = Reset +gui.plr_no_power_loss = No Power Loss +gui.plr_no_claim_decay = No Claim Decay +gui.plr_kills = Kills +gui.plr_deaths = Deaths +gui.plr_kdr = K/D Ratio +gui.plr_reset_kd = Reset K/D +gui.plr_kick = Kick +gui.plr_membership_history = Membership History +gui.plr_no_faction_label = Not in a faction +gui.plr_power_management = Power Management +gui.plr_combat_stats = Combat Stats +gui.plr_bypass_flags = Bypass Flags +gui.plr_admin_controls = Admin Controls +gui.plr_kd_subtitle = K / D +gui.plr_max_prefix = Max: +gui.plr_view = View +gui.plr_kick_from_faction = Kick from Faction +gui.plr_set_max_btn = Set Max +gui.plr_combat = Combat +gui.plr_reason_active = ACTIVE +gui.plr_reason_left = LEFT +gui.plr_reason_kicked = KICKED +gui.plr_reason_disbanded = DISBANDED + +# Member entry labels +gui.mem_label_power = Power: +gui.mem_label_joined = Joined: +gui.mem_label_last_death = Last Death: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Info +gui.mem_btn_teleport = Teleport +gui.mem_btn_promote = Promote +gui.mem_btn_demote = Demote +gui.mem_btn_kick = Kick +gui.econ_not_enabled = Economy system is not enabled. +gui.info_more = +{0} more +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7d +gui.log_time_all = All +gui.shape_circular = circular +gui.shape_square = square +gui.nav_title = Admin Panel +gui.econ_btn_adjust = Adjust +gui.econ_btn_info = Info + +# Faction info labels +gui.fac_description = Description +gui.fac_power = Power +gui.fac_claims = Claims +gui.fac_members = Members +gui.fac_recruitment = Recruitment +gui.fac_founded = Founded +gui.fac_allies = Allies +gui.fac_enemies = Enemies +gui.fac_raidable = Raidable Status +gui.fac_treasury = Treasury +gui.fac_leader = Leader +gui.fac_officers = Officers +gui.fac_view_members = View Members +gui.fac_view_relations = View Relations +gui.fac_view_settings = Settings +gui.fac_disband = Disband Faction +gui.fac_power_management = Power Management +gui.fac_reset_all_power = Reset All Power +gui.fac_econ_adjust = Adjust Balance +gui.fac_econ_view_log = View Transaction Log +gui.fac_current_max = current / max +gui.fac_claimed_max = claimed / max +gui.fac_relations = Relations +gui.fac_ally_enemy = ally / enemy +gui.fac_status = Status +gui.fac_info = Info +gui.fac_treasury_balance = treasury balance +gui.fac_leadership = Leadership +gui.fac_leader_label = Leader: +gui.fac_officers_label = Officers: +gui.fac_econ_mgmt = Economy Management +gui.fac_danger_zone = Danger Zone +gui.fac_view_treasury = View Treasury + +# Faction settings labels +gui.set_editing = Editing: +gui.set_general = General Settings +gui.set_name = Name +gui.set_tag = Tag +gui.set_description = Description +gui.set_recruitment = Recruitment +gui.set_home = Home Location +gui.set_clear_home = Clear Home +gui.set_disband_faction = Disband Faction +gui.set_faction_color = Faction Color +gui.set_admin_override = [Admin Override] +gui.set_territory_perms = Territory Permissions +gui.set_mob_spawning = Mob Spawning +gui.set_faction_settings = Faction Settings +gui.set_name_label = Name: +gui.set_tag_label = Tag: +gui.set_desc_label = Desc: +gui.set_edit = Edit +gui.set_status_label = Status: +gui.set_location_label = Location: +gui.set_danger_zone = Danger Zone +gui.set_irreversible = This action is irreversible. +gui.set_lock_hint = Some options may be locked by the server and won't accept changes. +gui.set_appearance = Appearance +gui.set_color_label = Color: +gui.set_mob_sub = (children disabled when master is off) +gui.set_back_to_info = Back to Info +gui.set_col_out = Out +gui.set_col_ally = Ally +gui.set_col_mem = Mem +gui.set_col_off = Off +gui.set_cat_building = BUILDING +gui.set_cat_interaction = INTERACTION +gui.set_cat_interact_sub = (children disabled when All is off) +gui.set_cat_other = OTHER +gui.set_perm_break = Break +gui.set_perm_place = Place +gui.set_perm_all = All +gui.set_perm_door = Door +gui.set_perm_chest = Chest +gui.set_perm_bench = Bench +gui.set_perm_processing = Processing +gui.set_perm_seat = Seat +gui.set_perm_transport = Transport +gui.set_perm_crate_use = Crate Use +gui.set_perm_npc_tame = NPC Tame +gui.set_perm_pve_damage = PvE Damage +gui.set_perm_mob_spawning = Mob Spawning +gui.set_perm_hostile = Hostile Mobs +gui.set_perm_passive = Passive Mobs +gui.set_perm_neutral = Neutral Mobs +gui.set_perm_pvp = PvP in Territory +gui.set_perm_officers_edit = Officers can edit + +# Faction relations labels +gui.rel_subtitle = Manage faction relations (bypasses approval) +gui.rel_set_new = Set New Relation +gui.rel_btn_ally = Ally +gui.rel_btn_neutral = Neutral +gui.rel_btn_enemy = Enemy + +# Zone page labels +gui.zone_sort_name = Name +gui.zone_sort_type = Type +gui.zone_sort_chunks = Chunks +gui.zone_sort_world = World +gui.zone_count_format = {0} {1}zones ({2} chunks) + +# Zone map labels +gui.map_zone_chunk = Zone Chunk +gui.map_empty = Empty +gui.map_other_zone = Other Zone +gui.map_faction_claim = Faction Claim +gui.map_protected = Protected +gui.map_your_pos = Your Position +gui.map_click_hint = Click to claim/unclaim chunks +gui.map_legend_zone_safe = This Zone (Safe) +gui.map_legend_zone_war = This Zone (War) +gui.map_legend_other_safe = Other SafeZone +gui.map_legend_other_war = Other WarZone +gui.map_legend_faction = Faction Claim +gui.map_legend_unclaimed = Unclaimed +gui.map_legend_you_here = You are here +gui.map_action_hint = Left-click: Claim for zone | Right-click: Unclaim from zone +gui.map_done = Done + +# Zone properties labels +gui.zprop_general = General +gui.zprop_zone_name = Zone Name +gui.zprop_zone_type = Zone Type +gui.zprop_change_type = Change Type +gui.zprop_notifications = Notifications +gui.zprop_show_entry = Show Entry Notification +gui.zprop_upper_title = Upper Title +gui.zprop_upper_desc = Upper Title (small text above zone name) +gui.zprop_lower_title = Lower Title +gui.zprop_lower_desc = Lower Title (large zone name text) +gui.zprop_edit_flags = Edit Flags +gui.zprop_back_to_zones = Back to Zones +gui.save = Save +gui.clear = Clear + +# Bulk economy labels +gui.bulk_header = Adjust All Faction Treasuries +gui.bulk_factions_label = Factions: +gui.bulk_total_label = Total Balance: +gui.bulk_amount_hint = Amount (positive to add, negative to remove): +gui.bulk_hint = This will apply to every faction with a treasury +gui.bulk_warning_msg = Warning: This action affects ALL factions and cannot be undone. +gui.bulk_apply_all = Apply to All +gui.bulk_operation = Operation +gui.bulk_add = Add +gui.bulk_remove = Remove +gui.bulk_amount = Amount +gui.bulk_warning = This will affect ALL faction treasuries. +gui.bulk_preview = Preview + +# Economy adjust labels +gui.ecadj_header = Adjust Treasury Balance +gui.ecadj_faction_label = Faction: +gui.ecadj_current_balance = Current Balance: +gui.ecadj_amount_hint = Amount (positive to add, negative to deduct): +gui.ecadj_preview_hint = Enter a number to preview the change +gui.ecadj_adjustment = Adjustment: +gui.ecadj_set_balance = Set Balance +gui.ecadj_confirm = Confirm +/- +gui.ecadj_operation = Operation +gui.ecadj_add = Add +gui.ecadj_remove = Remove +gui.ecadj_set_to = Set To +gui.ecadj_amount = Amount +gui.ecadj_new_balance = New Balance: + +# Version page integration labels +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Native +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Gravestones +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Treasury + +# Unclaim all confirm modal labels +gui.unclaim_title = Unclaim All Territory +gui.unclaim_confirm_msg1 = Are you sure you want to unclaim all +gui.unclaim_confirm_msg2 = from +gui.unclaim_warning = This action cannot be undone! +gui.unclaim_all = Unclaim All + +# Zone rename modal labels +gui.zren_title = Rename Zone +gui.zren_current = Current: +gui.zren_new_name = New Name: + +# Zone change type modal labels +gui.ztype_title = Change Zone Type +gui.ztype_zone_label = Zone: +gui.ztype_current = Current: +gui.ztype_will_become = will become +gui.ztype_new = New: +gui.ztype_warning1 = Different zone types have different default flag values. +gui.ztype_warning2 = Choose how to handle existing flag settings: +gui.ztype_keep_desc = Keep custom overrides +gui.ztype_keep_flags = Keep Flags +gui.ztype_reset_desc = Use new type defaults +gui.ztype_reset_flags = Reset Flags + +# Create zone wizard labels +gui.czw_title = Create Zone +gui.czw_back = < Back +gui.czw_create = Create Zone +gui.czw_zone_type = Zone Type +gui.czw_safe_desc = Protected, no PvP +gui.czw_war_desc = Combat, PvP enabled +gui.czw_zone_name = Zone Name +gui.czw_name_desc = Enter a unique name for the zone +gui.czw_claim_method = Claiming Method +gui.czw_method_none_desc = Create empty zone +gui.czw_method_none = No claims +gui.czw_method_single_desc = Your current chunk +gui.czw_method_single = Single chunk +gui.czw_method_circle_desc = Circular area +gui.czw_method_circle = Circle radius +gui.czw_method_square_desc = Square area +gui.czw_method_square = Square radius +gui.czw_method_map_desc = Interactive chunk editor +gui.czw_method_map = Use claim map +gui.czw_radius = Radius +gui.czw_custom_radius = Custom (1-50): +gui.czw_flags = Flags +gui.czw_flags_defaults_desc = Based on zone type +gui.czw_flags_defaults = Use defaults +gui.czw_flags_customize_desc = Open settings after +gui.czw_flags_customize = Customize + +# ========== Entry Labels (Faction/Player/Zone list entries) ========== + +# Faction entry labels +gui.fac_entry_power = power +gui.fac_entry_claims = claims +gui.fac_entry_members = members +gui.fac_entry_created = Created: +gui.fac_entry_home = Home: +gui.fac_entry_tp_home = TP Home +gui.fac_entry_view_info = View Info +gui.fac_entry_members_btn = Members +gui.fac_entry_settings = Settings +gui.fac_entry_unclaim_all = Unclaim All +gui.fac_entry_disband = Disband + +# Player entry labels +gui.plr_entry_role = Role: +gui.plr_entry_joined = Joined: +gui.plr_entry_last_online = Last Online: +gui.plr_entry_kdr = K/D/R: +gui.plr_entry_power = Power: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Info +gui.plr_entry_teleport = Teleport +gui.plr_entry_na = N/A +gui.plr_entry_unknown = Unknown +gui.plr_entry_ago = {0} ago + +# Zone entry labels +gui.zone_entry_world = World: +gui.zone_entry_chunks = Chunks: +gui.zone_entry_bounds = Bounds: +gui.zone_entry_created = Created: +gui.zone_entry_edit_map = Edit Map +gui.zone_entry_flags = Flags +gui.zone_entry_settings = Settings +gui.zone_entry_delete = Delete diff --git a/src/main/resources/Server/Languages/en-US/hyperfactions_gui.lang b/src/main/resources/Server/Languages/en-US/hyperfactions_gui.lang new file mode 100644 index 00000000..9f68570a --- /dev/null +++ b/src/main/resources/Server/Languages/en-US/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - English Translations +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_gui." by Hytale's I18nModule + +# ========== Navigation Bar ========== +nav.dashboard = Dashboard +nav.chat = Chat +nav.members = Members +nav.invites = Invites +nav.browser = Browse +nav.map = Map +nav.leaderboard = Leaderboard +nav.relations = Relations +nav.treasury = Treasury +nav.settings = Settings +nav.logs = Logs +nav.help = Help +nav.admin = Admin +nav.create = Create + +# ========== Help Category Names ========== +help.category.welcome = Welcome +help.category.your_faction = Your Faction +help.category.power_land = Power & Land +help.category.diplomacy = Diplomacy +help.category.combat = Combat & Safety +help.category.economy = Economy +help.category.quick_ref = Quick Reference + +# ========== Admin Help Category Names ========== +help.category.admin_overview = Overview +help.category.admin_factions = Factions +help.category.admin_zones = Zones +help.category.admin_power = Power +help.category.admin_economy = Economy +help.category.admin_config = Configuration +help.category.admin_maintenance = Maintenance +help.category.admin_reference = Reference + +# ========== Main Menu ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = My Faction +main_menu.section_get_started = Get Started +main_menu.section_territory = Territory +main_menu.section_browse = Browse +main_menu.section_admin = Admin +main_menu.claim_hint = Use /f claim to claim territory. + +# ========== Faction Info Page ========== +faction_info.title = Faction Info +faction_info.no_description = No description set. +faction_info.status_open = Open +faction_info.status_invite_only = Invite Only +faction_info.status_raidable = Raidable +faction_info.status_protected = Protected +faction_info.officers_more = +{0} more +faction_info.power_header = Power +faction_info.claims_header = Claims +faction_info.members_header = Members +faction_info.relations_header = Relations +faction_info.status_header = Status +faction_info.treasury_header = Treasury +faction_info.current_max = current / max +faction_info.claimed_max = claimed / max +faction_info.ally_enemy = ally / enemy +faction_info.faction_balance = faction balance +faction_info.leader_label = Leader: +faction_info.officers_label = Officers: +faction_info.view_members_btn = View Members +faction_info.relations_btn = Relations +faction_info.back_btn = Back + +# ========== Rename Modal ========== +rename.title = Rename Faction +rename.current_label = Current: +rename.new_name_label = New Name: +rename.no_permission = You don't have permission to rename the faction. +rename.enter_name = Please enter a faction name. +rename.too_short = Faction name must be at least {0} characters. +rename.too_long = Faction name cannot exceed {0} characters. +rename.same_name = That's already your faction's name. +rename.name_taken = A faction with that name already exists. +rename.success = Faction renamed from {0} to {1}! + +# ========== Description Modal ========== +desc.title = Edit Description +desc.current_label = Current: +desc.new_desc_label = New Description: +desc.no_permission = You don't have permission to edit the description. +desc.display_none = (None) +desc.cleared = Faction description cleared. +desc.updated = Faction description updated! + +# ========== Tag Modal ========== +tag.title = Edit Tag +tag.current_label = Current: +tag.instructions = Tag (1-5 chars, letters and numbers only): +tag.help_text = Tags appear in chat and on the map +tag.no_permission = You don't have permission to edit the tag. +tag.display_none = (None) +tag.cleared = Faction tag cleared. +tag.too_short = Tag must be at least {0} character. +tag.too_long = Tag cannot exceed {0} characters. +tag.invalid_format = Tag can only contain letters and numbers. +tag.same_tag = That's already your faction's tag. +tag.tag_taken = A faction with that tag already exists. +tag.success = Faction tag set to [{0}]! + +# ========== Dashboard Page ========== +dashboard.title = Faction Dashboard +dashboard.power_label = Power +dashboard.land_label = Claims +dashboard.members_label = Members +dashboard.online_label = Online +dashboard.allies_label = Allies +dashboard.enemies_label = Enemies +dashboard.relations_label = Relations +dashboard.ally_enemy_label = ally / enemy +dashboard.status_label = Status +dashboard.invites_label = Invites +dashboard.sent_requests_label = sent / requests +dashboard.treasury_label = Treasury +dashboard.upkeep_label = Upkeep +dashboard.per_cycle = per cycle +dashboard.your_wallet = Your Wallet +dashboard.personal_balance = personal balance +dashboard.quick_actions = Quick Actions +dashboard.teleport_label = Teleport +dashboard.territory_label = Territory +dashboard.channel_label = Channel +dashboard.membership_label = Membership +dashboard.recent_activity = Recent Activity +dashboard.view_all = View All +dashboard.income_24h = Income (24h) +dashboard.deposits_transfers_in = deposits, transfers in +dashboard.expenses_24h = Expenses (24h) +dashboard.withdrawals_transfers_out = withdrawals, transfers out +dashboard.faction_gone = Your faction no longer exists. +dashboard.available = {0} available +dashboard.at_risk = At Risk! +dashboard.online_count = {0} online +dashboard.status_invite = Invite +dashboard.in_grace = IN GRACE +dashboard.billable_chunks = {0} billable chunks +dashboard.btn_home = Home +dashboard.btn_set_home = Set Home +dashboard.btn_claim = Claim +dashboard.chat_prefix = Chat: {0} +dashboard.btn_leave = Leave +dashboard.no_activity = No recent activity. +dashboard.time_now = now +dashboard.time_minutes = {0}m ago +dashboard.time_hours = {0}h ago +dashboard.time_days = {0}d ago +dashboard.no_home_hint = Your faction has no home set. Ask an officer to set one. +dashboard.chat_mode_set = Chat mode: {0} +dashboard.claim_success = Claimed chunk at ({0}, {1}) +dashboard.upkeep_in = in {0} + +# ========== Faction Main Page ========== +main.no_faction = No Faction +main.joined = You joined the faction! +main.join_failed = Failed to join faction: {0} +main.invite_declined = Invite declined. +main.cooldown = Teleport on cooldown! {0}s remaining. +main.world_not_found = Cannot teleport - world not found. +main.leave_failed = Failed to leave: {0} + +# ========== Shared GUI Labels ========== +common.faction_count = {0} factions +common.leader_label = Leader: {0} +common.sort_power = Power +common.sort_members = Members +common.page_format = {0}/{1} +common.own_faction = (You) +common.search = Search: +common.sort = Sort: +common.prev = < Prev +common.next = Next > +common.treasury_not_available = Treasury is not available. + +# ========== Members Page ========== +members.title = Members +members.search_label = Search: +members.sort_label = Sort: +members.prev_btn = < Prev +members.next_btn = Next > +members.count = {0} members +members.sort_role = Role +members.sort_last_online = Last Online +members.just_now = just now +members.ago = {0} ago +members.never = Never +members.member_not_found = Member not found. +members.promoted = Promoted {0} to {1}. +members.promote_failed = Failed to promote: {0} +members.demoted = Demoted {0} to {1}. +members.demote_failed = Failed to demote: {0} +members.kicked = Kicked {0} from the faction. +members.kick_failed = Failed to kick: {0} +members.label_power = Power: +members.label_joined = Joined: +members.label_last_death = Last Death: +members.btn_promote = Promote +members.btn_demote = Demote +members.btn_kick = Kick +members.btn_make_leader = Make Leader +members.btn_profile = Profile +members.self_label = (You) + +# ========== Browser Page ========== +browser.title = Browse Factions +browser.search_label = Search: +browser.sort_label = Sort: +browser.prev_btn = < Prev +browser.next_btn = Next > +browser.sort_name = Name +browser.invalid_faction = Invalid faction. +browser.label_power = power +browser.label_claims = claims +browser.label_members = members +browser.label_recruitment = Recruitment: +browser.label_created = Created: +browser.label_description = Description: +browser.view_info_btn = View Info +browser.label_leader = Leader: +browser.no_description = No description set + +# ========== Leaderboard Page ========== +leaderboard.title = Faction Leaderboard +leaderboard.rank_by = Rank by: +leaderboard.col_rank = # +leaderboard.col_faction = Faction +leaderboard.col_claims = Claims +leaderboard.col_members = Members +leaderboard.prev_btn = < Prev +leaderboard.next_btn = Next > +leaderboard.sort_kd = K/D +leaderboard.sort_territory = Territory +leaderboard.sort_balance = Balance + +# ========== Player Info Page ========== +playerinfo.title = Player Info +playerinfo.first_joined_label = First joined: +playerinfo.last_online_label = Last online: +playerinfo.faction_label = Faction: +playerinfo.role_label = Role: +playerinfo.joined_label_static = Joined: +playerinfo.not_in_faction = Not in a faction +playerinfo.power_header = Power +playerinfo.current_max = current / max +playerinfo.combat_header = Combat +playerinfo.kills_deaths = kills / deaths +playerinfo.kdr_header = K/D Ratio +playerinfo.membership_history = Membership History +playerinfo.view_faction_btn = View Faction +playerinfo.back_btn = Back +playerinfo.now = Now +playerinfo.history_count = {0} records +playerinfo.joined_label = Joined: {0} +playerinfo.current = Current +playerinfo.left_label = Left: {0} +playerinfo.no_history = No membership history +playerinfo.faction_gone = Faction no longer exists. +playerinfo.reason_active = ACTIVE +playerinfo.reason_left = LEFT +playerinfo.reason_kicked = KICKED +playerinfo.reason_disbanded = DISBANDED + +# ========== Relations Page ========== +relations.title = Relations +relations.tab_relations = Relations +relations.tab_pending = Pending +relations.set_relation_btn = + Set Relation +relations.prev_btn = < Prev +relations.next_btn = Next > +relations.relation_count = {0} relations +relations.request_count = {0} requests +relations.type_ally = Ally +relations.type_enemy = Enemy +relations.type_incoming = Incoming +relations.type_outgoing = Outgoing +relations.incoming_request = Incoming request +relations.outgoing_request = Outgoing request +relations.empty_relations = No relations yet. +relations.empty_relations_hint = No relations yet. Click + SET RELATION to add allies or enemies. +relations.empty_pending = No pending ally requests. +relations.today = Today +relations.one_day_ago = 1 day ago +relations.days_ago = {0} days ago +relations.now_neutral = Now neutral with {0}. +relations.now_enemies = Now enemies with {0}! +relations.request_sent = Alliance request sent to {0}. +relations.now_allied = Now allied with {0}! +relations.request_declined = Ally request from {0} declined. +relations.request_cancelled = Ally request to {0} cancelled. +relations.failed = Failed: {0} +relations.search_hint = Search for a faction to set relation +relations.no_results = No factions found matching '{0}' +relations.power_display = {0} power +relations.member_count = {0} members +relations.label_members = members +relations.label_power = power +relations.label_since = Since: +relations.label_claims = Claims: +relations.label_direction = Direction: +relations.btn_view = View +relations.btn_neutral = Neutral +relations.btn_enemy = Enemy +relations.btn_ally = Ally +relations.btn_accept = Accept +relations.btn_decline = Decline +relations.btn_cancel = Cancel + +# ========== Settings Page ========== +settings.title = Faction Settings +settings.general = General +settings.name_label = Name: +settings.tag_label = Tag: +settings.desc_label = Desc: +settings.edit_btn = Edit +settings.recruitment = Recruitment +settings.status_label = Status: +settings.home_location = Home Location +settings.location_label = Location: +settings.set_home_btn = Set Home +settings.teleport_btn = Teleport +settings.delete_btn = Delete +settings.optional_features = Optional Features +settings.configure_modules = Configure optional modules. +settings.modules_btn = Modules +settings.danger_zone = Danger Zone +settings.irreversible = This action is irreversible. +settings.disband_btn = Disband Faction +settings.lock_hint = Some options may be locked by the server and won't accept changes. +settings.territory_permissions = Territory Permissions +settings.col_out = Out +settings.col_ally = Ally +settings.col_mem = Mem +settings.col_off = Off +settings.cat_building = BUILDING +settings.perm_break = Break +settings.perm_place = Place +settings.cat_interaction = INTERACTION +settings.interaction_hint = (children disabled when All is off) +settings.perm_all = All +settings.perm_door = Door +settings.perm_chest = Chest +settings.perm_bench = Bench +settings.perm_processing = Processing +settings.perm_seat = Seat +settings.perm_transport = Transport +settings.cat_other = OTHER +settings.perm_crate = Crate Use +settings.perm_npc_tame = NPC Tame +settings.perm_pve = PvE Damage +settings.appearance = Appearance +settings.color_label = Color: +settings.mob_spawning = Mob Spawning +settings.mob_spawning_hint = (children disabled when master is off) +settings.mob_spawning_label = Mob Spawning +settings.hostile_mobs = Hostile Mobs +settings.passive_mobs = Passive Mobs +settings.neutral_mobs = Neutral Mobs +settings.faction_settings = Faction Settings +settings.pvp_in_territory = PvP in Territory +settings.officers_can_edit = Officers can edit +settings.leader_only = Leader only +settings.officers_only = Only officers and leaders can change faction settings. +settings.display_none = (None) +settings.home_not_set = Not set +settings.no_permission = You don't have permission to change settings. +settings.only_leader_disband = Only the leader can disband the faction. +settings.perm_locked = This setting is locked by the server. +settings.no_perm_edit = You don't have permission to edit territory permissions. +settings.only_leader_officers = Only the leader can change officer access. +settings.pvp_enabled = Enabled +settings.pvp_disabled = Disabled +settings.not_in_territory = You must be in your faction's territory to set home. +settings.home_set = Faction home set to your current location! +settings.recruitment_set = Recruitment set to {0}. +settings.home_no_set = Your faction does not have a home set. +settings.home_deleted = Faction home deleted! + +# ========== Modules Page ========== +modules.title = Faction Modules +modules.description = Optional features to enhance your faction +modules.configure_btn = Configure +modules.back_btn = < Back to Settings +modules.treasury_name = Treasury +modules.treasury_desc = Faction bank & economy system +modules.raids_name = Raids +modules.raids_desc = Scheduled faction battles +modules.levels_name = Levels +modules.levels_desc = Faction progression & XP +modules.war_name = War +modules.war_desc = Formal war declarations +modules.coming_soon = Coming Soon +modules.active = Active +modules.view_treasury = View Treasury +modules.unavailable = Unavailable +modules.no_economy = No economy plugin detected +modules.disabled = Disabled +modules.economy_not_available = Economy features are not available on this server + +# ========== Treasury Page ========== +treasury.title = Faction Treasury +treasury.balance_label = Balance +treasury.income_24h = Income (24h) +treasury.deposits_transfers_in = deposits, transfers in +treasury.expenses_24h = Expenses (24h) +treasury.withdrawals_transfers_out = withdrawals, transfers out +treasury.maintenance = MAINTENANCE +treasury.runway_label = Runway: +treasury.add_funds = Add funds +treasury.deposit_btn = Deposit +treasury.take_funds = Take funds +treasury.withdraw_btn = Withdraw +treasury.send_to_faction = Send to faction +treasury.transfer_btn = Transfer +treasury.treasury_config = Treasury config +treasury.settings_btn = Settings +treasury.recent_transactions = Recent Transactions +treasury.no_transactions = No transactions yet +treasury.col_date = Date +treasury.col_type = Type +treasury.col_by = By +treasury.col_amount = Amount +treasury.col_details = Details +treasury.pay_now_btn = Pay Now +treasury.cost_7d = 7d: +treasury.cost_14d = 14d: +treasury.cost_30d = 30d: +treasury.settings_title = Treasury Settings +treasury.officer_permissions = OFFICER PERMISSIONS +treasury.allow_withdraw = Allow Officers to Withdraw +treasury.allow_transfer = Allow Officers to Transfer +treasury.limits_section = WITHDRAWAL AND TRANSFER LIMITS +treasury.max_per_withdrawal = Max per withdrawal: +treasury.max_withdrawals_per = Max withdrawals per period: +treasury.max_per_transfer = Max per transfer: +treasury.max_transfers_per = Max transfers per period: +treasury.limit_period = Limit period (hours): +treasury.no_limit_hint = Set to 0 for no limit +treasury.upkeep_settings = UPKEEP SETTINGS +treasury.auto_pay_upkeep = Auto-pay upkeep from treasury +treasury.back_btn = Back +treasury.upkeep_cost_format = {0} every {1}h +treasury.upkeep_time_left = {0} left +treasury.wallet_label = Your wallet: {0} +treasury.treasury_label = Treasury balance: {0} +treasury.chunks_detail = {0} free + {1} billable chunks +treasury.cost_label = Cost: {0} +treasury.pending = Pending +treasury.auto_pay_on = Auto-pay: ON +treasury.auto_pay_off = Auto-pay: OFF +treasury.runway_90_plus = 90+ days +treasury.runway_days = {0} days +treasury.runway_day = {0} day +treasury.runway_less_day = < 1 day +treasury.runway_no_funds = No funds +treasury.grace_expires = Grace expires in: {0} +treasury.missed_payments = Missed payments: {0} +treasury.pay_to_clear = Pay {0} to clear grace +treasury.system = System +treasury.type_deposit = Deposit +treasury.type_withdrawal = Withdrawal +treasury.type_transfer_in = Transfer In +treasury.type_transfer_out = Transfer Out +treasury.type_player_transfer = Player Transfer +treasury.type_upkeep = Upkeep +treasury.type_tax = Tax Collection +treasury.type_war_cost = War Cost +treasury.type_raid_cost = Raid Cost +treasury.type_spoils = Spoils +treasury.type_admin = Admin Adjustment +treasury.deposit_title = Deposit to Treasury +treasury.withdraw_title = Withdraw from Treasury +treasury.fee_label = Fee ({0}%) +treasury.confirm_deposit = Confirm Deposit +treasury.confirm_withdrawal = Confirm Withdrawal +treasury.from_wallet = {0} from wallet +treasury.to_wallet = {0} to wallet +treasury.enter_valid_amount = Enter a valid positive amount. +treasury.insufficient_wallet = Insufficient wallet funds. Need {0}, have {1}. +treasury.wallet_withdraw_failed = Failed to withdraw from your wallet. +treasury.deposit_failed_returned = Failed to deposit. Money returned. +treasury.deposited = Deposited {0} into the treasury. +treasury.deposited_fee = Deposited {0} into the treasury. (fee: {1}) +treasury.no_withdraw_permission = You don't have permission to withdraw. +treasury.withdraw_denied = Withdrawal denied: {0} +treasury.insufficient_treasury = Insufficient funds in treasury. +treasury.withdraw_limit = Withdrawal limit exceeded. +treasury.withdraw_failed = Withdrawal failed: {0} +treasury.wallet_deposit_warn = Warning: Failed to deposit to your wallet. Contact an admin. +treasury.withdrew = Withdrew {0} from the treasury. +treasury.withdrew_fee = Withdrew {0} from the treasury. (fee: {1}, received: {2}) +treasury.search_hint = Search for a player or faction +treasury.no_results = No results for '{0}' +treasury.tag_player = [Player] +treasury.tag_faction = [Faction] +treasury.source_online = Online +treasury.source_offline = Offline +treasury.source_player_db = Hytale player +treasury.no_transfer_permission = You don't have permission to transfer. +treasury.transfer_denied = Transfer denied: {0} +treasury.invalid_target_faction = Invalid target faction. +treasury.target_faction_gone = Target faction no longer exists. +treasury.transfer_failed = Transfer failed: {0} +treasury.transfer_failed_returned = Transfer failed. Funds returned. +treasury.transferred = Transferred {0} to {1}. +treasury.invalid_target_player = Invalid target player. +treasury.player_transfer_failed = Failed to deposit to player wallet. Transfer rolled back. +treasury.leader_only_perms = Only the leader can change treasury permissions. +treasury.leader_only_upkeep = Only the leader can change upkeep settings. +treasury.invalid_limit = Invalid number in limit fields. Use 0 for unlimited. + +# ========== Confirmation Pages ========== +confirm.disband_title = Disband Faction +confirm.disband_prompt = Are you sure you want to disband +confirm.disband_warning = This action cannot be undone! +confirm.leave_title = Leave Faction +confirm.leave_prompt = Are you sure you want to leave +confirm.leave_warning = You will lose access to faction territory. +confirm.leader_leave_title = Leave as Leader +confirm.leader_leave_prompt = You are leaving +confirm.transfer_title = Transfer Leadership +confirm.transfer_prompt = Are you sure you want to transfer leadership to +confirm.transfer_warning = You will become an Officer. +confirm.disband_not_leader = Only the leader can disband the faction. +confirm.disbanded = Faction '{0}' has been disbanded. +confirm.disband_failed = Failed to disband faction. +confirm.succession_title = Leadership will transfer to: +confirm.no_members_warning = WARNING: No other members! +confirm.will_disband = Leaving will disband the faction permanently. +confirm.not_in_faction = You are not in this faction. +confirm.not_leader_anymore = You are no longer the leader. +confirm.no_successor = No successor available. Use disband instead. +confirm.transfer_failed = Failed to transfer leadership: {0} +confirm.leader_left = Leadership transferred to {0}. You have left {1}. +confirm.leave_failed = Failed to leave faction: {0} +confirm.leader_cannot_leave = Leaders cannot leave. Transfer leadership or disband the faction. +confirm.left_faction = You have left {0}. +confirm.faction_gone = Faction no longer exists. +confirm.not_leader_transfer = Only the leader can transfer leadership. +confirm.leadership_transferred = Leadership transferred to {0}. + +# ========== Logs Viewer Page ========== +logs.title = {0} - Activity Logs +logs.entry_count = {0} entries +logs.filter_label = Filter: +logs.col_time = Time +logs.col_type = Type +logs.col_message = Message +logs.prev_btn = < Prev +logs.next_btn = Next > +logs.all_types = All Types +logs.no_logs_type = No logs of this type. +logs.no_logs = No activity logs yet. +logs.time_just_now = just now +logs.time_minute = {0} minute ago +logs.time_minutes = {0} minutes ago +logs.time_hour = {0} hour ago +logs.time_hours = {0} hours ago +logs.time_day = {0} day ago +logs.time_days = {0} days ago +logs.time_week = {0} week ago +logs.time_weeks = {0} weeks ago +logs.type_member_join = Join +logs.type_member_leave = Leave +logs.type_member_kick = Kick +logs.type_member_promote = Promote +logs.type_member_demote = Demote +logs.type_claim = Claim +logs.type_unclaim = Unclaim +logs.type_overclaim = Overclaim +logs.type_home_set = Home Set +logs.type_relation_ally = Ally +logs.type_relation_enemy = Enemy +logs.type_relation_neutral = Neutral +logs.type_leader_transfer = Transfer +logs.type_settings_change = Settings +logs.type_power_change = Power +logs.type_economy = Economy +logs.type_admin_power = Admin Power + +# Log message templates (i18n for activity log content) +# Player actions +logs.msg_faction_created = {0} created the faction +logs.msg_member_joined = {0} joined the faction +logs.msg_member_left = {0} left the faction +logs.msg_member_kicked = {0} was kicked +logs.msg_member_promoted = {0} promoted to {1} +logs.msg_member_demoted = {0} demoted to {1} +logs.msg_leader_transferred = Leadership transferred to {0} +logs.msg_leader_left_transfer = {0} left, {1} is now leader +logs.msg_relation_set = Set {0} as {1} +# Territory +logs.msg_claimed = Claimed chunk at {0}, {1} in {2} +logs.msg_unclaimed = Unclaimed chunk at {0}, {1} in {2} +logs.msg_overclaim_lost = Lost chunk at {0}, {1} to {2} +logs.msg_overclaim_taken = Overclaimed chunk at {0}, {1} from {2} +logs.msg_all_unclaimed = All territory unclaimed +logs.msg_claim_removed_world = Claim in '{0}' removed (world disallows claiming) +logs.msg_claims_lost_upkeep = Lost {0} claim(s) to upkeep (missed {1} payments) +logs.msg_claims_removed_inactive = {0} claims removed due to inactivity ({1} days) +# Home +logs.msg_home_set = Home set +logs.msg_home_cleared = Home cleared +logs.msg_home_cleared_world = Home in '{0}' cleared (world disallows claiming) +# Settings +logs.msg_renamed = Renamed from '{0}' to '{1}' +logs.msg_set_open = Faction set to open +logs.msg_set_closed = Faction set to invite-only +logs.msg_desc_set = Description set +logs.msg_desc_cleared = Description cleared +logs.msg_color_changed = Color changed to '{0}' +# Economy +logs.msg_deposit = Deposit: {0} (+{1}) +logs.msg_withdrawal = Withdrawal: {0} (-{1}) +logs.msg_upkeep_paid = Upkeep paid: {0} ({1} billable chunks) +logs.msg_upkeep_grace_started = Upkeep failed: grace period started ({0}h) +logs.msg_upkeep_missed = Upkeep missed (payment {0}), grace expires in {1} +logs.msg_upkeep_manual = Upkeep paid manually: {0} ({1} billable chunks, grace cleared) +# Admin power +logs.msg_admin_power_set = Admin set {0}'s power to {1} (was {2}) +logs.msg_admin_power_add = Admin added {0} power to {1} ({2} -> {3}) +logs.msg_admin_power_remove = Admin removed {0} power from {1} ({2} -> {3}) +logs.msg_admin_power_reset = Admin reset {0}'s power to {1} (was {2}) +logs.msg_admin_power_adjusted = Admin adjusted {0}'s power by {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin set {0}'s max power to {1} (was {2}) +logs.msg_admin_maxpower_reset = Admin reset {0}'s max power to global default ({1}) +logs.msg_admin_powerloss_enabled = Admin enabled power loss for {0} +logs.msg_admin_powerloss_disabled = Admin disabled power loss for {0} +logs.msg_admin_decay_enabled = Admin enabled claim decay exemption for {0} +logs.msg_admin_decay_disabled = Admin disabled claim decay exemption for {0} +logs.msg_admin_kd_reset = Admin reset K/D for {0} +logs.msg_admin_power_set_all = Admin set all {0} members' power to {1} +logs.msg_admin_power_add_all = Admin added {0} power to all {1} members +logs.msg_admin_power_remove_all = Admin removed {0} power from all {1} members +logs.msg_admin_power_reset_all = Admin reset power for all {0} members +logs.msg_admin_power_adjusted_all = Admin adjusted all {0} members' power by {1} +# Admin faction +logs.msg_admin_kicked = [Admin] {0} was kicked +logs.msg_admin_role_set = [Admin] {0} role set to {1} +logs.msg_admin_leader_kick = [Admin] Leadership transferred from {0} to {1} (admin kick) +logs.msg_admin_econ_added = Admin added: {0} (balance: {1}) +logs.msg_admin_econ_deducted = Admin deducted: {0} (balance: {1}) +logs.msg_admin_econ_set = Admin set balance to {0} (was {1}) +# Import +logs.msg_left_import = {0} left (imported to another faction) +logs.msg_leader_import_transfer = {0} became leader (previous leader imported to another faction) +logs.msg_imported_from = Faction imported from {0} + +# ========== Chat Page ========== +chat.title = Faction Chat +chat.tab_faction = Faction +chat.tab_ally = Ally +chat.send_btn = Send +chat.placeholder = Type a message... +chat.no_messages = No messages yet. +chat.no_ally_permission = You don't have permission for ally chat. +chat.no_permission = No permission. +chat.faction_gone = Your faction no longer exists. +chat.time_now = now +chat.time_minutes = {0}m +chat.time_hours = {0}h + +# ========== Invites Page ========== +invites.title = Invites +invites.tab_outgoing = Outgoing +invites.tab_requests = Requests +invites.prev_btn = < Prev +invites.next_btn = Next > +invites.invite_count = {0} invites +invites.request_count = {0} requests +invites.invited_by = Invited by: {0} +invites.no_message = No message +invites.expires = Expires: {0} +invites.type_outgoing = Outgoing +invites.type_request = Request +invites.invited_by_label = Invited by: +invites.empty_outgoing = No outgoing invites. Use /f invite to invite someone. +invites.empty_requests = No join requests. Players can request to join with /f request. +invites.invalid_player = Invalid player. +invites.cancelled_invite = Cancelled invite to {0}. +invites.player_joined = {0} has joined the faction! +invites.faction_full = Faction is full. Cannot accept request. +invites.add_failed = Failed to add player to faction. +invites.request_expired = Request not found or expired. +invites.request_declined = Declined join request from {0}. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}h +invites.label_message = Message: +invites.btn_cancel = Cancel +invites.btn_accept = Accept +invites.btn_decline = Decline + +# ========== Map Page ========== +map.title = Territory Map +map.action_hint = Left-click: Claim | Right-click: Unclaim +map.legend_your = Your Territory +map.legend_ally = Ally Territory +map.legend_enemy = Enemy Territory +map.legend_other = Other Faction +map.legend_wilderness = Wilderness +map.legend_safe = Safe Zone +map.legend_war = War Zone +map.legend_you = You are here +map.position = Your Position: Chunk ({0}, {1}) +map.legend_protected = Protected +map.claim_stats = Claims: {0}/{1} ({2} Available) +map.overclaimed = OVERCLAIMED by {0}! +map.power_display = Power: {0}/{1} +map.join_to_claim = Join a faction to claim +map.claim_success = Claimed chunk at ({0}, {1})! +map.claim_not_in_faction = You must be in a faction to claim territory. +map.claim_not_officer = Only officers and leaders can claim territory. +map.claim_already_yours = You already own this chunk. +map.claim_already_claimed = This chunk is already claimed by another faction. +map.claim_not_adjacent = You can only claim chunks adjacent to your territory. +map.claim_max = You have reached your maximum claim limit. +map.claim_world_not_allowed = Claiming is not allowed in this world. +map.claim_orbisguard = This area is protected by OrbisGuard. +map.claim_failed = Failed to claim chunk. +map.unclaim_success = Unclaimed chunk at ({0}, {1}). +map.unclaim_not_in_faction = You must be in a faction. +map.unclaim_not_officer = Only officers and leaders can unclaim territory. +map.unclaim_not_claimed = This chunk is not claimed. +map.unclaim_not_yours = This chunk belongs to another faction. +map.unclaim_home = Cannot unclaim the chunk containing your faction home. +map.unclaim_failed = Failed to unclaim chunk. +map.overclaim_success = Overclaimed enemy chunk at ({0}, {1})! +map.overclaim_not_in_faction = You must be in a faction. +map.overclaim_not_officer = Only officers and leaders can overclaim territory. +map.overclaim_already_yours = You already own this chunk. +map.overclaim_ally = You cannot overclaim allied territory. +map.overclaim_has_power = This faction has enough power to defend their territory. +map.overclaim_max = You have reached your maximum claim limit. +map.overclaim_failed = Failed to overclaim chunk. +# ========== Create Faction Page ========== +create.title = Create Your Faction +create.section_preview = Preview +create.section_basic_info = Basic Info +create.section_details = Details +create.name_prefix = Name: +create.faction_name_label = Faction Name * +create.tag_label = TAG (2-4 chars, auto if empty) +create.desc_label = Description (Optional) +create.recruitment_label = Recruitment +create.section_faction_color = Faction Color +create.section_combat = Combat +create.create_btn = Create Faction +create.preview_name = Your Faction Name +create.leader_prefix = Leader: {0} +create.enter_name = Please enter a faction name. +create.name_too_short = Faction name must be at least {0} characters. +create.name_too_long = Faction name cannot exceed {0} characters. +create.name_taken = A faction with this name already exists. +create.tag_length = Faction tag must be {0}-{1} characters. +create.tag_format = Faction tag can only contain letters and numbers. +create.desc_too_long = Description cannot exceed {0} characters. +create.created = Faction {0} created successfully! +create.created_no_dashboard = Faction created but could not open dashboard. +create.invalid_name = Invalid faction name. +create.create_failed = Could not create faction. + +# ========== New Player Pages ========== +newplayer.browse_title = Browse Factions +newplayer.invites_title = Invites & Requests +newplayer.map_title = Territory Map +newplayer.view_only_badge = View Only Mode +newplayer.legend_label = Legend: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Faction +newplayer.legend_wilderness = Wilderness +newplayer.search_label = Search: +newplayer.sort_label = Sort: +newplayer.prev_btn = < Prev +newplayer.next_btn = Next > +newplayer.pending_count = {0} pending +newplayer.received_header = RECEIVED INVITES ({0}) +newplayer.requests_header = YOUR REQUESTS ({0}) +newplayer.no_invites = No invites. Browse factions to find one! +newplayer.no_requests = No pending requests. +newplayer.invited_by = Invited by: {0} +newplayer.member_count = {0} members +newplayer.power_count = {0} power +newplayer.claim_count = {0} claims +newplayer.awaiting_review = Awaiting review +newplayer.expires_in = Expires in {0}h +newplayer.time_just_now = just now +newplayer.time_minutes = {0} min ago +newplayer.time_hours = {0}h ago +newplayer.time_days = {0}d ago +newplayer.invalid_faction = Invalid faction. +newplayer.invite_expired = This invite has expired or was revoked. +newplayer.faction_gone = Faction no longer exists. +newplayer.joined = You joined {0}! +newplayer.faction_full = This faction is full. +newplayer.join_failed = Could not join faction. +newplayer.invite_declined = Invite declined. +newplayer.request_cancelled = Cancelled request to join {0}. +newplayer.faction_count = {0} factions +newplayer.browse_subtitle = Find your new home! +newplayer.sort_power = Power +newplayer.sort_name = Name +newplayer.sort_members = Members +newplayer.btn_accept = Accept +newplayer.btn_pending = Pending +newplayer.btn_join = Join +newplayer.btn_request = Request +newplayer.invite_only_msg = This faction is invite-only. +newplayer.welcome_hint = Welcome! Use /f to open faction menu. +newplayer.faction_open_hint = This faction is open! Click JOIN instead. +newplayer.already_requested = You already have a pending request to this faction. +newplayer.has_invite_hint = You have an invite from this faction! Click ACCEPT instead. +newplayer.request_sent = Join request sent to {0}! +newplayer.officer_review = An officer will review your request. +newplayer.map_hint = View Only - Join a faction to claim territory! + +# Player Settings +nav.player_settings = Player +player_settings.title = Player Settings +player_settings.language_section = Language +player_settings.auto_detect = Auto-detect from client +player_settings.auto_detect_desc = Uses your game client's language setting +player_settings.language_label = Language +player_settings.notifications_section = Notifications +player_settings.territory_alerts = Territory Alerts +player_settings.territory_alerts_desc = Show notifications when entering/leaving territories +player_settings.death_announcements = Death Broadcasts +player_settings.death_announcements_desc = Receive faction member death location announcements +player_settings.power_notifications = Power Changes +player_settings.power_notifications_desc = Show messages when your power changes +player_settings.language_changed = Language changed to {0} +player_settings.pref_enabled = {0} enabled +player_settings.pref_disabled = {0} disabled + +# ========== Help Pages ========== +help.center_title = Help Center +help.getting_started_title = Getting Started +help.what_are_factions_title = What Are Factions? +help.what_are_factions_1 = Factions are player-created groups that work together +help.what_are_factions_2 = to claim territory, build bases, and compete. +help.what_are_factions_bullet_1 = - Protected territory for building +help.what_are_factions_bullet_2 = - Teammates to play with +help.what_are_factions_bullet_3 = - Access to faction chat and features +help.joining_title = Joining a Faction +help.joining_desc = There are several ways to join a faction: +help.joining_bullet_1 = - Browse - Find open factions and click JOIN +help.joining_bullet_2 = - Invites - Accept invitations from officers +help.joining_bullet_3 = - Request - Ask to join invite-only factions +help.creating_title = Creating a Faction +help.creating_desc = Go to the Create tab to start your own faction. +help.creating_bullet_1 = - Invite and manage members +help.creating_bullet_2 = - Claim and protect territory +help.commands_title = Quick Commands +help.cmd_f = /f - Open faction menu +help.cmd_f_list = /f list - List all factions +help.cmd_f_join = /f join - Join an open faction +help.cmd_f_create = /f create - Create a new faction +help.cmd_f_help = /f help - Full command list +help.tip = Tip: Browse factions to find a group that matches you! diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..6935ddd6 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Sistema de Configuracion + +HyperFactions usa un sistema de configuracion modular en JSON con 11 archivos de configuracion. + +## Comandos de Configuracion del Administrador + +| Comando | Descripcion | +|---------|-------------| +| `/f admin config` | Abrir la GUI del editor visual de configuracion | +| `/f admin reload` | Recargar todos los archivos de configuracion desde disco | +| `/f admin sync` | Sincronizar datos de facciones al almacenamiento | + +## Archivos de Configuracion + +| Archivo | Contenido | +|------|----------| +| `factions.json` | Roles, poder, reclamaciones, combate, relaciones | +| `server.json` | Teletransporte, auto-guardado, mensajes, GUI, permisos | +| `economy.json` | Tesoreria, mantenimiento, ajustes de transacciones | +| `backup.json` | Rotacion y retencion de copias de seguridad | +| `chat.json` | Formato de chat de faccion y aliados | +| `debug.json` | Categorias de registro de depuracion | +| `faction-permissions.json` | Permisos predeterminados por rol | +| `announcements.json` | Difusion de eventos y notificaciones de territorio | +| `gravestones.json` | Ajustes de integracion de lapidas | +| `worldmap.json` | Modos de actualizacion del mapa del mundo | +| `worlds.json` | Sobrescrituras de comportamiento por mundo | + +>[!TIP] La GUI de configuracion proporciona un editor visual con descripciones para cada ajuste. Los cambios se guardan inmediatamente pero algunos requieren `/f admin reload` para tomar efecto completo. + +## Ubicacion de Configuracion + +Todos los archivos se almacenan en: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Las ediciones manuales de JSON requieren `/f admin reload` para aplicarse. Un JSON invalido causara que el archivo sea omitido con una advertencia en el registro del servidor. + +>[!NOTE] La version de configuracion se rastrea en `server.json`. El plugin auto-migra configuraciones anteriores al iniciar. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..4700a582 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Ajustes por Mundo + +HyperFactions soporta configuracion por mundo para reclamaciones, PvP y comportamiento de proteccion. + +## Comandos de Mundo + +| Comando | Descripcion | +|---------|-------------| +| `/f admin world list` | Listar todas las sobrescrituras de mundo | +| `/f admin world info ` | Mostrar ajustes de un mundo | +| `/f admin world set ` | Establecer un ajuste | +| `/f admin world reset ` | Restablecer mundo a valores predeterminados | + +## Ajustes Disponibles + +| Ajuste | Tipo | Descripcion | +|---------|------|-------------| +| claiming_enabled | boolean | Permitir reclamaciones de faccion en este mundo | +| pvp_enabled | boolean | Permitir combate PvP en este mundo | +| power_loss | boolean | Aplicar perdida de poder al morir | +| build_protection | boolean | Aplicar proteccion de construccion en reclamaciones | +| explosion_protection | boolean | Proteger reclamaciones de explosiones | + +## Lista Blanca / Lista Negra de Mundos + +Controla que mundos permiten funciones de facciones a traves del archivo de configuracion `worlds.json`: + +- **Modo lista blanca**: Solo los mundos listados permiten reclamar +- **Modo lista negra**: Todos los mundos permiten reclamar excepto los listados + +>[!INFO] Los ajustes de mundo se almacenan en `worlds.json` y sobrescriben los valores globales predeterminados de `factions.json`. + +## Ejemplos + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- restaurar todos los valores predeterminados + +>[!TIP] Deshabilita las reclamaciones en mundos creativos o de lobby para mantener el sistema de facciones enfocado en la jugabilidad de supervivencia. + +>[!NOTE] Los ajustes por mundo tienen prioridad sobre la configuracion global pero son sobrescritos por los indicadores de zona dentro de ese mundo. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..7936806d --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Gestion de Tesoreria + +Comandos de administracion para gestionar tesorerias de facciones. Requiere el permiso `hyperfactions.admin.economy`. + +## Comandos de Tesoreria + +| Comando | Descripcion | +|---------|-------------| +| `/f admin economy balance ` | Ver saldo de tesoreria de la faccion | +| `/f admin economy set ` | Establecer saldo exacto | +| `/f admin economy add ` | Agregar fondos a la tesoreria | +| `/f admin economy take ` | Retirar fondos de la tesoreria | +| `/f admin economy reset ` | Restablecer tesoreria a cero | + +## Ejemplos + +- `/f admin economy balance Vikings` -- consultar saldo +- `/f admin economy set Vikings 5000` -- establecer en 5000 +- `/f admin economy add Vikings 1000` -- depositar 1000 +- `/f admin economy take Vikings 500` -- retirar 500 +- `/f admin economy reset Vikings` -- poner saldo en cero + +>[!TIP] Usa `/f admin info ` para ver el panorama economico completo incluyendo historial de transacciones junto al saldo de tesoreria. + +## Casos de Uso + +| Escenario | Comando | +|----------|---------| +| Distribucion de premios de eventos | `economy add ` | +| Penalizacion por violacion de reglas | `economy take ` | +| Reinicio de economia tras limpieza | `economy reset ` | +| Compensacion por errores | `economy add ` | + +>[!WARNING] Los cambios en la tesoreria se registran en el historial de transacciones de la faccion. Las modificaciones del administrador se registran con el nombre del administrador para responsabilidad. + +>[!NOTE] Todos los comandos de economia de administracion funcionan incluso cuando el modulo de economia esta deshabilitado en la configuracion. Los datos se almacenan independientemente del estado del modulo. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..4f98e40f --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Gestion de Mantenimiento + +El mantenimiento de faccion cobra a las facciones periodicamente basandose en su territorio y cantidad de miembros. + +## Controles del Administrador + +Los ajustes de mantenimiento se gestionan a traves del archivo de configuracion de economia o la GUI de configuracion del administrador. + +`/f admin config` +Abre el editor de configuracion y navega a los ajustes de economia para modificar valores de mantenimiento. + +## Ajustes Predeterminados de Mantenimiento + +| Ajuste | Predeterminado | Descripcion | +|---------|---------|-------------| +| Mantenimiento habilitado | false | Interruptor principal del sistema | +| Intervalo de mantenimiento | 24h | Frecuencia de cobro del mantenimiento | +| Costo por reclamacion | 5.0 | Costo por chunk reclamado por ciclo | +| Costo por miembro | 0.0 | Costo por miembro por ciclo | +| Periodo de gracia | 72h | Las facciones nuevas estan exentas | +| Disolver por bancarrota | false | Disolucion automatica si no puede pagar | + +## Monitorear el Mantenimiento + +Usa `/f admin info ` para ver: +- Saldo actual de tesoreria +- Costo estimado de mantenimiento por ciclo +- Tiempo hasta el proximo cobro de mantenimiento +- Si la faccion puede cubrir el mantenimiento + +>[!TIP] Revisa las estadisticas de economia de todas las facciones desde el panel de administracion para identificar facciones en riesgo de bancarrota antes de que se active el mantenimiento. + +>[!INFO] La configuracion de mantenimiento se almacena en `economy.json`. Los cambios realizados a traves de la GUI de configuracion toman efecto despues de recargar con `/f admin reload`. + +## Formula de Mantenimiento + +**Mantenimiento total** = (chunks reclamados x costo por reclamacion) + (cantidad de miembros x costo por miembro) + +>[!WARNING] Habilitar el mantenimiento en un servidor con facciones existentes puede causar bancarrotas inesperadas. Considera establecer un periodo de gracia o anunciar el cambio con anticipacion. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..cd0f473e --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Disolucion Forzada + +Los administradores pueden disolver cualquier faccion por la fuerza, sin importar los deseos del lider. + +## Comando + +`/f admin disband ` +Disuelve la faccion indicada por la fuerza. Aparecera un mensaje de confirmacion antes de ejecutar la accion. + +**Permiso**: `hyperfactions.admin.disband` + +>[!WARNING] Disolver una faccion es **irreversible**. Todas las reclamaciones son liberadas, todos los miembros son removidos y la faccion deja de existir. Crea una copia de seguridad primero. + +## Consecuencias + +Cuando una faccion es disuelta: + +| Efecto | Descripcion | +|--------|-------------| +| **Reclamaciones** | Todo el territorio es liberado inmediatamente | +| **Miembros** | Todos los jugadores son removidos de la lista | +| **Relaciones** | Todas las alianzas y enemistades son eliminadas | +| **Tesoreria** | Gestionada segun la configuracion de economia | +| **Hogar** | El hogar de la faccion es eliminado | +| **Chat** | El historial del chat de faccion es removido | + +## Buenas Practicas + +1. Siempre ejecuta `/f admin backup create` antes de disolver +2. Notifica a los miembros de la faccion cuando sea posible +3. Documenta la razon para los registros del servidor +4. Revisa `/f admin info ` antes de actuar + +>[!TIP] Si el problema es con un miembro especifico, considera usar el panel de administracion de facciones para transferir el liderazgo en lugar de disolver toda la faccion. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..a35db23d --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Gestion de Facciones + +Los administradores pueden inspeccionar y modificar cualquier faccion del servidor a traves del panel o comandos. + +## Explorar Facciones + +`/f admin factions` +Abre el explorador de facciones del administrador. Ve todas las facciones con cantidad de miembros, niveles de poder y territorio. + +`/f admin info ` +Abre el panel de informacion del administrador para una faccion especifica con detalles completos y opciones de gestion. + +## Modificar Configuracion de Facciones + +Con el permiso `hyperfactions.admin.modify`, puedes: + +- **Renombrar** una faccion para resolver conflictos +- **Cambiar color** para corregir problemas de visualizacion +- **Alternar abierta/cerrada** para sobrescribir la politica de ingreso +- **Editar descripcion** con fines de moderacion + +>[!TIP] Usa `/f admin who ` para buscar a que faccion pertenece un jugador especifico y ver sus detalles. + +## Ver Miembros y Relaciones + +El panel de informacion del administrador muestra: + +| Seccion | Detalles | +|---------|---------| +| **Miembros** | Lista completa con roles y ultima conexion | +| **Relaciones** | Todas las posiciones de aliados, enemigos y neutrales | +| **Territorio** | Chunks reclamados y balance de poder | +| **Economia** | Saldo de tesoreria y registro de transacciones | + +>[!NOTE] Los comandos de inspeccion del administrador no notifican a la faccion que esta siendo revisada. Solo las modificaciones activan alertas. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..c3386ad0 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Sistema de Copias de Seguridad + +HyperFactions incluye copias de seguridad automaticas y manuales con rotacion GFS (Abuelo-Padre-Hijo). + +## Comandos de Copias de Seguridad + +| Comando | Descripcion | +|---------|-------------| +| `/f admin backup create` | Crear una copia de seguridad manual ahora | +| `/f admin backup list` | Listar todas las copias de seguridad disponibles | +| `/f admin backup restore ` | Restaurar desde una copia de seguridad | +| `/f admin backup delete ` | Eliminar una copia de seguridad especifica | + +**Permiso**: `hyperfactions.admin.backup` + +## Valores Predeterminados de Rotacion GFS + +| Tipo | Retencion | Descripcion | +|------|-----------|-------------| +| Cada hora | 24 | Ultimas 24 capturas por hora | +| Diaria | 7 | Ultimas 7 capturas diarias | +| Semanal | 4 | Ultimas 4 capturas semanales | +| Manual | 10 | Copias creadas manualmente | +| Apagado | 5 | Creadas al detener el servidor | + +>[!INFO] Las copias de seguridad al apagar estan habilitadas por defecto (`onShutdown=true`). Capturan el estado mas reciente antes de que el servidor se detenga. + +## Contenido de las Copias de Seguridad + +Cada archivo ZIP de copia de seguridad contiene: +- Todos los archivos de datos de facciones +- Datos de poder de jugadores +- Definiciones de zonas +- Historial de chat y datos de economia +- Datos de invitaciones y solicitudes de ingreso +- Archivos de configuracion + +>[!WARNING] **Restaurar una copia de seguridad es destructivo.** Reemplaza todos los datos actuales con el contenido de la copia de seguridad. Cualquier cambio realizado despues de que la copia fue creada se perdera. Siempre crea una copia de seguridad nueva antes de restaurar. + +## Buenas Practicas + +1. Crea una copia de seguridad manual antes de acciones importantes del administrador +2. Revisa la retencion de copias de seguridad en `backup.json` +3. Prueba la restauracion en un servidor de pruebas primero +4. Mantiene habilitadas las copias al apagar para recuperacion tras fallos diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..4e3ffb27 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Importacion de Datos + +Importa datos de facciones desde otros plugins para migrar tu servidor a HyperFactions. + +## Comando de Importacion + +`/f admin import [path] [flags]` + +**Permiso**: `hyperfactions.admin.use` + +## Fuentes Soportadas + +| Fuente | Descripcion | +|--------|-------------| +| `elbaphfactions` | Importar desde datos de ElbaphFactions | +| `hyfactions` | Importar desde datos de HyFactions v1 | + +## Indicadores de Importacion + +| Indicador | Descripcion | +|------|-------------| +| `--dry-run` | Validar datos sin importar nada | +| `--overwrite` | Sobrescribir facciones existentes con el mismo nombre | +| `--no-zones` | Omitir datos de zonas durante la importacion | +| `--no-power` | Omitir datos de poder durante la importacion | + +>[!TIP] Siempre ejecuta con `--dry-run` primero para previsualizar lo que sera importado y detectar cualquier problema de datos antes de confirmar los cambios. + +## Proceso de Importacion + +1. Se crea una copia de seguridad previa automaticamente +2. Se cargan las asignaciones de nombres de jugadores +3. Se convierten facciones, reclamaciones y zonas +4. Los datos son validados y guardados + +## Ejemplos + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Usar `--overwrite` **reemplazara** cualquier faccion existente que comparta nombre con una faccion importada. Los datos de miembros y reclamaciones seran sobrescritos. Ejecuta con `--dry-run` primero para identificar conflictos. + +>[!NOTE] Algunos datos especificos de la fuente (ej., parcelas de trabajadores, parcelas de granja) no tienen equivalente en HyperFactions y se registraran como advertencias durante la importacion. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..125a10d7 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Verificacion de Actualizaciones + +HyperFactions puede verificar nuevas versiones y gestionar la dependencia HyperProtect-Mixin. + +## Comandos de Actualizacion + +| Comando | Descripcion | +|---------|-------------| +| `/f admin update` | Verificar actualizaciones de HyperFactions | +| `/f admin update mixin` | Verificar/descargar HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Alternar descarga automatica | +| `/f admin version` | Mostrar version actual e informacion de compilacion | + +## Canales de Lanzamiento + +| Canal | Descripcion | +|---------|-------------| +| **Estable** | Recomendado para servidores de produccion | +| **Pre-lanzamiento** | Acceso anticipado a funciones proximas | + +>[!INFO] El verificador de actualizaciones solo notifica sobre nuevas versiones. **No** instala automaticamente actualizaciones de HyperFactions. + +## HyperProtect-Mixin + +HyperProtect-Mixin es el mixin de proteccion recomendado que habilita indicadores de zona avanzados (explosiones, propagacion de fuego, conservar inventario, etc.). + +- `/f admin update mixin` verifica la ultima version +y la descarga si hay una version mas nueva disponible +- La descarga automatica puede alternarse por servidor + +>[!TIP] Despues de descargar una nueva version del mixin, se requiere reiniciar el servidor para que los cambios tomen efecto. + +## Procedimiento de Reversion + +Si una actualizacion causa problemas: + +1. Detiene el servidor +2. Reemplaza el JAR del plugin con la version anterior +3. Inicia el servidor +4. Verifica la funcionalidad con `/f admin version` + +>[!WARNING] Revertir a una version anterior puede requerir un reinicio de migracion de configuracion. Siempre conserva copias de seguridad antes de actualizar. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..7b976e90 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Primeros Pasos como Administrador + +Bienvenido a la administracion de HyperFactions. Esta guia cubre tus primeros pasos despues de instalar el plugin. + +## Abrir el Panel de Administracion + +`/f admin` +Abre la interfaz del panel de administracion con acceso a todas las herramientas de gestion, editores de zonas y configuracion del servidor. + +>[!INFO] Necesitas el permiso **hyperfactions.admin.use** o estado de OP para acceder a los comandos de administracion. + +## Requisitos + +- **Con un plugin de permisos**: Otorga `hyperfactions.admin.use` +- **Sin un plugin de permisos**: El jugador debe ser un +operador del servidor (`adminRequiresOp=true` por defecto) + +## Primeros Pasos Tras la Instalacion + +1. Ejecuta `/f admin` para verificar tu acceso +2. Abre **Configuracion** para revisar los ajustes predeterminados de facciones +3. Crea una **Zona Segura** en el spawn con `/f admin safezone Spawn` +4. Opcionalmente crea **Zonas de Guerra** para arenas PvP +5. Revisa los ajustes de **Copia de seguridad** para asegurar la proteccion de datos + +## Capacidades del Administrador + +| Area | Lo Que Puedes Hacer | +|------|----------------| +| Facciones | Inspeccionar, modificar o disolver cualquier faccion | +| Zonas | Crear Zonas Seguras y Zonas de Guerra con indicadores personalizados | +| Poder | Sobrescribir valores de poder de jugadores/facciones | +| Economia | Gestionar tesorerias de facciones y mantenimiento | +| Configuracion | Editar ajustes en vivo via GUI o recargar desde disco | +| Copias de seguridad | Crear, restaurar y gestionar copias de seguridad de datos | +| Importaciones | Migrar datos desde otros plugins de facciones | + +>[!TIP] Usa `/f admin --text` para obtener salida por chat en lugar de la GUI, util para consola o automatizacion. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..88e522fe --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Permisos de Administracion + +Todas las funciones de administracion estan protegidas por nodos de permisos en el espacio `hyperfactions.admin`. + +## Nodos de Permisos + +| Permiso | Descripcion | +|-----------|-------------| +| `hyperfactions.admin.*` | Otorga **todos** los permisos de administracion | +| `hyperfactions.admin.use` | Acceso al panel `/f admin` | +| `hyperfactions.admin.reload` | Recargar archivos de configuracion | +| `hyperfactions.admin.debug` | Alternar categorias de registro de depuracion | +| `hyperfactions.admin.zones` | Crear, editar y eliminar zonas | +| `hyperfactions.admin.disband` | Disolver cualquier faccion por la fuerza | +| `hyperfactions.admin.modify` | Modificar los ajustes de cualquier faccion | +| `hyperfactions.admin.bypass.limits` | Ignorar limites de reclamacion y poder | +| `hyperfactions.admin.backup` | Crear y restaurar copias de seguridad | +| `hyperfactions.admin.power` | Sobrescribir valores de poder de jugadores | +| `hyperfactions.admin.economy` | Gestionar tesorerias de facciones | + +## Comportamiento Alternativo + +Cuando **no hay un plugin de permisos** instalado, los permisos de administracion recurren al estado de operador del servidor (OP). Esto se controla mediante `adminRequiresOp` en la configuracion del servidor (por defecto: `true`). + +>[!NOTE] El comodin `hyperfactions.admin.*` otorga todos los permisos de administracion. Usa nodos individuales para un control granular sobre tu equipo de staff. + +## Orden de Resolucion de Permisos + +1. Proveedor **VaultUnlocked** (si esta disponible) +2. Proveedor **HyperPerms** (si esta disponible) +3. Proveedor **LuckPerms** (si esta disponible) +4. **Verificacion de OP** para nodos de administracion (alternativa) + +>[!WARNING] Sin un plugin de permisos y con `adminRequiresOp` deshabilitado, los comandos de administracion estan **abiertos a todos los jugadores**. Siempre usa un plugin de permisos en produccion. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..fa74dc41 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Comandos de Administracion de Poder + +Sobrescribir valores de poder de jugadores y facciones. Todos los comandos requieren el permiso `hyperfactions.admin.power`. + +## Comandos de Poder de Jugador + +| Comando | Descripcion | +|---------|-------------| +| `/f admin power set ` | Establecer valor exacto de poder | +| `/f admin power add ` | Agregar poder al jugador | +| `/f admin power remove ` | Remover poder del jugador | +| `/f admin power reset ` | Restablecer al poder inicial predeterminado | +| `/f admin power info ` | Ver desglose detallado de poder | + +## Como Afecta el Poder a las Facciones + +El poder total de una faccion es la suma del poder individual de todos sus miembros. Las reclamaciones de territorio requieren poder total suficiente para mantenerse. + +| Escenario | Efecto | +|----------|--------| +| Poder aumentado | La faccion puede reclamar mas territorio | +| Poder reducido | La faccion puede volverse vulnerable a sobre-reclamacion | +| Poder restablecido | Regresa al jugador al valor inicial predeterminado | + +>[!WARNING] Reducir el poder de un jugador puede causar que su faccion pierda territorio si el poder total cae por debajo del numero de chunks reclamados. + +## Ejemplos + +- `/f admin power set Steve 50` -- establecer exactamente en 50 +- `/f admin power add Steve 10` -- aumentar en 10 +- `/f admin power remove Steve 5` -- reducir en 5 +- `/f admin power reset Steve` -- volver al predeterminado +- `/f admin power info Steve` -- mostrar desglose completo + +>[!TIP] Usa `/f admin power info ` para ver el poder actual, poder maximo y cualquier sobrescritura activa antes de hacer cambios. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..3eb9002a --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Sobrescrituras de Poder + +Comandos especiales de poder que cambian como funciona el poder para jugadores o facciones especificos. + +## Comandos de Sobrescritura + +| Comando | Descripcion | +|---------|-------------| +| `/f admin power setmax ` | Establecer limite maximo de poder personalizado | +| `/f admin power noloss ` | Alternar inmunidad a penalizacion de poder por muerte | +| `/f admin power nodecay ` | Alternar inmunidad a deterioro de poder por desconexion | +| `/f admin power info ` | Ver todas las sobrescrituras y detalles de poder | + +## Poder Maximo Personalizado + +`/f admin power setmax ` +Establece un limite maximo de poder personal para el jugador, sobrescribiendo el valor predeterminado del servidor. + +>[!INFO] Establecer un maximo personalizado **no** cambia el poder actual. Solo cambia el techo. El jugador aun debe ganar poder hasta el nuevo limite. + +## Modo Sin Perdida + +`/f admin power noloss ` +Alterna la inmunidad a perdida de poder por muerte. Cuando esta habilitado, el jugador **no** perdera poder al morir. + +Util para: +- Periodos de proteccion para nuevos jugadores +- Participantes de eventos +- Miembros del staff + +## Modo Sin Deterioro + +`/f admin power nodecay ` +Alterna la inmunidad al deterioro de poder por desconexion. Cuando esta habilitado, el poder del jugador **no** disminuira mientras este desconectado. + +Util para: +- Jugadores en ausencia prolongada +- Miembros VIP +- Proteccion estacional + +## Informacion de Poder + +`/f admin power info ` +Muestra un desglose completo: + +- Poder actual y poder maximo +- Sobrescrituras activas (sin perdida, sin deterioro, maximo personalizado) +- Ultima muerte y poder perdido +- Porcentaje de contribucion a la faccion + +>[!TIP] Todas las sobrescrituras de poder persisten entre reinicios del servidor y se almacenan en el archivo de datos del jugador. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..b76b37b4 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Referencia de Comandos de Administracion + +Lista completa de todos los subcomandos de `/f admin` con sintaxis y permisos requeridos. + +## Panel y General + +| Comando | Permiso | +|---------|-----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Gestion de Facciones + +| Comando | Permiso | +|---------|-----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Gestion de Zonas + +| Comando | Permiso | +|---------|-----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Poder y Economia + +| Comando | Permiso | +|---------|-----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Mantenimiento + +| Comando | Permiso | +|---------|-----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Todos los nodos de permisos tienen el prefijo `hyperfactions.` (ej., `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..c99db3a2 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Integraciones de Plugins + +HyperFactions se integra con varios plugins externos a traves de dependencias suaves. Todas las integraciones son opcionales y funcionan correctamente si no estan disponibles. + +## Verificar Estado de Integraciones + +`/f admin version` +Muestra la version actual y las integraciones detectadas. + +`/f admin integration` +Abre el panel de gestion de integraciones con el estado detallado de cada plugin detectado. + +## Tabla de Integraciones + +| Plugin | Tipo | Descripcion | +|--------|------|-------------| +| **HyperPerms** | Permisos | Sistema completo de permisos con grupos, herencia y contexto | +| **LuckPerms** | Permisos | Proveedor alternativo de permisos | +| **VaultUnlocked** | Permisos/Economia | Puente de permisos y economia | +| **HyperProtect-Mixin** | Proteccion | Habilita indicadores de zona avanzados (explosiones, fuego, conservar inventario) | +| **OrbisGuard-Mixins** | Proteccion | Mixin alternativo para aplicacion de indicadores de zona | +| **PlaceholderAPI** | Marcadores | 49 marcadores de faccion para otros plugins | +| **WiFlow PlaceholderAPI** | Marcadores | Proveedor alternativo de marcadores | +| **GravestonePlugin** | Muerte | Control de acceso a lapidas en zonas | +| **HyperEssentials** | Funciones | Indicadores de zona para hogares, warps y kits | +| **KyuubiSoft Core** | Framework | Integracion de libreria base | +| **Sentry** | Monitoreo | Rastreo de errores y diagnosticos | + +## Prioridad de Proveedor de Permisos + +1. **VaultUnlocked** (mayor prioridad) +2. **HyperPerms** +3. **LuckPerms** +4. **Alternativa de OP** (si no se encuentra proveedor) + +>[!INFO] Las integraciones se detectan una vez al iniciar usando reflexion. Los resultados se almacenan en cache para la sesion. Se requiere reiniciar el servidor despues de agregar o remover un plugin integrado. + +>[!TIP] Usa `/f admin debug toggle integration` para habilitar el registro detallado de integraciones para solucion de problemas. + +>[!NOTE] HyperProtect-Mixin es el mixin de proteccion **recomendado**. Sin el, 15 indicadores de zona no tendran efecto. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..e83a2a6f --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Conceptos Basicos de Zonas + +Las zonas son territorios controlados por el administrador con reglas personalizadas que anulan la proteccion normal de facciones. + +## Tipos de Zonas + +- **Zona Segura** -- Sin PvP, sin construccion, sin dano. +Ideal para areas de spawn y centros de comercio. +- **Zona de Guerra** -- PvP siempre habilitado, sin construccion. +Ideal para arenas y areas de batalla disputadas. + +## Crear Zonas + +`/f admin safezone ` +Crea una Zona Segura y reclama tu chunk actual. + +`/f admin warzone ` +Crea una Zona de Guerra y reclama tu chunk actual. + +Despues de la creacion, colocate en chunks adicionales y usa `/f admin zone claim ` para expandir la zona. + +## Gestionar Chunks de Zonas + +`/f admin zone claim ` +Agrega el chunk actual a la zona indicada. + +`/f admin zone unclaim ` +Remueve el chunk actual de la zona indicada. + +`/f admin zone radius ` +Reclama un cuadrado de chunks alrededor de tu posicion. + +## Eliminar Zonas + +`/f admin removezone ` +Elimina permanentemente la zona y libera todos sus chunks reclamados. + +>[!WARNING] Eliminar una zona libera todos sus chunks instantaneamente. Esto no se puede deshacer sin una restauracion de copia de seguridad. + +>[!INFO] Las reglas de zona **siempre anulan** las reglas de territorio de faccion. Una Zona Segura dentro de territorio enemigo sigue siendo segura. diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..55ad031b --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Referencia de Comandos de Zonas + +Referencia completa de todos los comandos de gestion de zonas. Todos requieren el permiso `hyperfactions.admin.zones`. + +## Creacion Rapida + +| Comando | Descripcion | +|---------|-------------| +| `/f admin safezone ` | Crear una Zona Segura en el chunk actual | +| `/f admin warzone ` | Crear una Zona de Guerra en el chunk actual | +| `/f admin removezone ` | Eliminar una zona y liberar chunks | + +## Gestion de Zonas + +| Comando | Descripcion | +|---------|-------------| +| `/f admin zone create ` | Crear una zona (safezone/warzone) | +| `/f admin zone delete ` | Eliminar una zona | +| `/f admin zone claim ` | Agregar chunk actual a la zona | +| `/f admin zone unclaim ` | Remover chunk actual de la zona | +| `/f admin zone radius ` | Reclamar radio cuadrado de chunks | +| `/f admin zone list` | Listar todas las zonas con cantidad de chunks | +| `/f admin zone notify ` | Alternar mensajes de entrada/salida | +| `/f admin zone title upper/lower ` | Establecer texto del titulo de zona | +| `/f admin zone properties ` | Abrir la GUI de propiedades de zona | + +## Gestion de Indicadores + +| Comando | Descripcion | +|---------|-------------| +| `/f admin zoneflag ` | Establecer un indicador especifico | + +>[!TIP] Usa la **GUI de propiedades** de zona para un editor visual con interruptores para cada indicador, organizados por categoria. + +## Ejemplos + +- `/f admin safezone Spawn` -- crear proteccion de spawn +- `/f admin zone radius Spawn 3` -- expandir a 7x7 chunks +- `/f admin zoneflag Spawn door_use true` -- permitir puertas +- `/f admin zone notify Spawn true` -- mostrar mensajes de entrada diff --git a/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..c4ebc988 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Indicadores de Zona + +Las zonas soportan **47 indicadores booleanos** en 10 categorias. Cada indicador controla un comportamiento especifico dentro de la zona. + +## Resumen de Categorias de Indicadores + +| Categoria | Cantidad | Indicadores Clave | +|----------|-------|-----------| +| Combate | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Dano | 4 | fall_damage, explosion_damage, fire_spread | +| Muerte | 2 | keep_inventory, power_loss | +| Construccion | 4 | build_allowed, block_place, hammer_use | +| Interaccion | 13 | door_use, container_use, bench_use, npc_tame | +| Transporte | 3 | teleporter_use, portal_use, mount_entry | +| Objetos | 4 | item_drop, item_pickup, invincible_items | +| Aparicion de Mobs | 5 | mob_spawning, hostile/passive/neutral | +| Limpieza de Mobs | 4 | mob_clear, hostile/passive/neutral clear | +| Integracion | 5 | gravestone_access, show_on_map, essentials_homes | + +## Valores Predeterminados (Zona Segura vs Zona de Guerra) + +| Indicador | Zona Segura | Zona de Guerra | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Algunos indicadores requieren **HyperProtect-Mixin** para funcionar (ej., keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Sin el mixin, estos indicadores no tienen efecto aunque esten habilitados. + +## Establecer Indicadores + +`/f admin zoneflag ` + +>[!TIP] Usa `/f admin zone properties ` para un editor visual con interruptores agrupados por categoria. diff --git a/src/main/resources/Server/Languages/es-ES/help/combat/death.md b/src/main/resources/Server/Languages/es-ES/help/combat/death.md new file mode 100644 index 00000000..12c1dc1f --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/combat/death.md @@ -0,0 +1,37 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Muerte y Recuperacion + +La muerte tiene consecuencias reales en facciones. Cada muerte te cuesta poder personal, debilitando la capacidad de tu faccion para mantener territorio. + +## Perdida de Poder + +Cada muerte cuesta **-1.0 de poder** de tu total personal. Esto reduce el poder combinado de la faccion. + +| Evento | Cambio de Poder | +|--------|-----------------| +| Muerte (cualquier causa) | -1.0 | +| Regeneracion en linea | +0.1 por minuto | +| Desconexion en combate | -1.0 (muerto) | + +## Escenarios de Ejemplo + +*5 miembros a 10.0 de poder cada uno = 50 total, 20 reclamos.* +*Un miembro muere dos veces: 8.0 de poder, total de faccion 48.* +*Tres miembros mueren una vez cada uno: el total baja a 47.* + +>[!WARNING] Si el poder de tu faccion cae por debajo de tu cantidad de reclamos, los enemigos pueden sobrereclamar tu territorio. + +## Recuperacion + +El poder se regenera a 0.1 por minuto mientras estas en linea. Recuperar 1.0 de poder perdido toma aproximadamente 10 minutos. Las muertes multiples se acumulan, asi que evita peleas repetidas. + +--- + +## Todos los Tipos de Muerte + +La perdida de poder aplica a todas las muertes: PvP, muertes por mobs, dano por caida, ahogamiento y cualquier otra causa. No hay forma segura de morir. + +>[!TIP] Establece un hogar de faccion con /f sethome para que los miembros puedan reagruparse rapidamente despues de morir. diff --git a/src/main/resources/Server/Languages/es-ES/help/combat/protection.md b/src/main/resources/Server/Languages/es-ES/help/combat/protection.md new file mode 100644 index 00000000..048fb06a --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Proteccion de Territorio + +El territorio reclamado proporciona varias capas de defensa para las construcciones y recursos de tu faccion. + +## Proteccion de Bloques + +Solo los miembros de la faccion pueden colocar o destruir bloques en tu territorio. Los enemigos y neutrales no pueden modificar nada. + +## Proteccion de Contenedores + +Los cofres, barriles y otros contenedores estan asegurados. Solo los miembros de tu faccion pueden abrir o interactuar con el almacenamiento en chunks reclamados. + +## Alertas de Entrada + +Cuando un no miembro entra en tu territorio reclamado, los miembros de la faccion en linea reciben una notificacion con el nombre y ubicacion del intruso. + +--- + +## Acceso de Aliados + +Los aliados no pueden construir ni destruir bloques en tu territorio por defecto. El dano entre aliados tambien esta desactivado, por lo que los jugadores aliados no pueden danarse entre si. + +>[!INFO] El territorio protege bloques, no jugadores. El PvP en tu propio territorio depende de la relacion del atacante con tu faccion. + +>[!TIP] Manten tus reclamos conectados y evita chunks aislados que son mas dificiles de defender. diff --git a/src/main/resources/Server/Languages/es-ES/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/es-ES/help/combat/spawn_protection.md new file mode 100644 index 00000000..590dbde7 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Proteccion de Aparicion + +Despues de reaparecer tras la muerte, recibes proteccion temporal para prevenir el campeo de aparicion. + +## Como Funciona + +- La proteccion dura **5 segundos** despues de reaparecer +- No puedes recibir dano durante este periodo +- Un indicador visual muestra tu estado de proteccion + +## La Proteccion se Rompe + +La proteccion de aparicion termina antes si: + +- **Atacas** a otro jugador o entidad +- **Te mueves** de tu posicion de aparicion + +Esto previene el abuso. No puedes atacar a otros mientras eres invulnerable. Una vez que realizas cualquier accion, la proteccion cae y las reglas normales de combate aplican. + +--- + +>[!NOTE] La duracion de la proteccion de aparicion y las condiciones de ruptura son configurables por el servidor. Tu servidor puede usar configuraciones diferentes. + +>[!TIP] Usa tu tiempo de proteccion para evaluar la situacion antes de moverte. diff --git a/src/main/resources/Server/Languages/es-ES/help/combat/tagging.md b/src/main/resources/Server/Languages/es-ES/help/combat/tagging.md new file mode 100644 index 00000000..46b88caf --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Etiqueta de Combate + +Cuando atacas o eres atacado por otro jugador, te conviertes en **etiquetado de combate** por 15 segundos. + +## Mientras Estas Etiquetado + +- No puedes usar `/f home` ni `/f stuck` para teletransportarte +- No puedes usar comandos de teletransporte del servidor +- La etiqueta se reinicia con cada nueva accion de combate +- Un temporizador muestra la duracion restante de tu etiqueta + +--- + +## Penalidad por Desconexion + +>[!WARNING] Desconectarte mientras estas etiquetado en combate mata a tu personaje y pierdes 1.0 de poder. + +Tus objetos caen donde te desconectaste y los enemigos pueden saquearlos. Siempre espera a que la etiqueta expire. + +## Como Funciona el Temporizador + +El temporizador de etiqueta de combate aparece en pantalla cuando entras en combate. Cada nuevo golpe lo reinicia a 15 segundos. Una vez que llega a cero, todas las restricciones se levantan. + +>[!NOTE] Estos son valores predeterminados. El administrador de tu servidor puede haber configurado ajustes diferentes. + +>[!TIP] Desvincularte y espera a que el temporizador termine si necesitas teletransportarte. diff --git a/src/main/resources/Server/Languages/es-ES/help/combat/zones.md b/src/main/resources/Server/Languages/es-ES/help/combat/zones.md new file mode 100644 index 00000000..251de49f --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Zonas Especiales + +Los administradores pueden designar areas con reglas especiales que anulan la proteccion normal de territorio de faccion. + +## Zona Segura + +Sin dano PvP, sin destruccion de bloques por no administradores. Ideal para areas de aparicion, centros de comercio y areas de preparacion de eventos. Los jugadores no pueden ser danados aqui. + +## Zona de Guerra + +PvP siempre habilitado. No aplica proteccion de bloques. Areas de batalla abierta donde todo vale. No recibes beneficios de proteccion de territorio en una Zona de Guerra. + +--- + +## Comparacion de Zonas + +| Caracteristica | Zona Segura | Zona de Guerra | Tierra de Faccion | +|----------------|-------------|----------------|-------------------| +| PvP | Desactivado | Siempre Activo | Basado en relacion | +| Destruccion de Bloques | Desactivada | Permitida | Solo Miembros | +| Contenedores | Protegidos | Abiertos | Solo Miembros | +| Mejor Para | Aparicion/Comercio | Arenas | Bases | + +>[!NOTE] Las reglas de zona siempre anulan las reglas de territorio de faccion. Un chunk reclamado dentro de una Zona de Guerra sigue las reglas de Zona de Guerra. + +>[!TIP] Revisa tu mapa de territorio con /f map para ver los limites de las zonas. diff --git a/src/main/resources/Server/Languages/es-ES/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/es-ES/help/diplomacy/alliances.md new file mode 100644 index 00000000..2a89f468 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Formar Alianzas + +Las alianzas son **acuerdos mutuos** entre dos facciones que proporcionan beneficios de proteccion y cooperacion. + +--- + +## Como Formar una Alianza + +`/f ally ` + +Envia una solicitud de alianza a la faccion objetivo. La alianza solo entra en efecto una vez que **ambos lados acepten**. Un Oficial o Lider de la otra faccion tambien debe ejecutar `/f ally ` para confirmar. + +## Como Romper una Alianza + +`/f neutral ` + +Cualquier lado puede terminar unilateralmente una alianza restableciendo la relacion a neutral. + +--- + +## Beneficios de Alianza + +| Beneficio | Detalles | +|-----------|----------| +| **Sin fuego amigo** | Los jugadores aliados no pueden danarse entre si (cuando el dano entre aliados esta desactivado) | +| **Visibilidad compartida en mapa** | El territorio aliado se muestra en azul en el mapa de territorio | +| **Interaccion con territorio** | Los aliados pueden usar puertas, asientos y transporte en tu territorio por defecto | +| **Chat de aliados** | Usa `/f c` para cambiar al modo de chat de aliados para comunicacion entre facciones | +| **Proteccion contra sobrereclamacion** | Los aliados no pueden sobrereclamar el territorio del otro | + +>[!NOTE] Tu faccion puede tener hasta **10 alianzas** a la vez. Elige a tus aliados sabiamente. + +--- + +## Etiqueta de Alianza + +>[!TIP] La comunicacion es clave. Antes de enviar una solicitud de alianza, considera contactar al lider de la otra faccion para discutir terminos. Una alianza fuerte se construye sobre beneficio mutuo, no solo conveniencia. + +- Las alianzas funcionan en ambas direcciones -- si te beneficias de la proteccion, tus aliados esperan lo mismo +- Romper una alianza durante tiempo de guerra puede danar la reputacion de tu faccion +- Las facciones aliadas pueden coordinar reclamos de territorio para crear fronteras defendibles diff --git a/src/main/resources/Server/Languages/es-ES/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/es-ES/help/diplomacy/enemies.md new file mode 100644 index 00000000..cb8719ad --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Facciones Enemigas + +Declarar un enemigo es una **accion unilateral** que inmediatamente habilita PvP y agresion territorial contra la faccion objetivo. No se requiere acuerdo. + +--- + +## Declarar un Enemigo + +`/f enemy ` + +Marca instantaneamente a la faccion objetivo como tu enemigo. Esto entra en efecto inmediatamente -- no se necesita confirmacion del otro lado. Requiere rango de Oficial o superior. + +## Restablecer a Neutral + +`/f neutral ` + +Termina el estado de enemigo y restablece la relacion a neutral. Esto tambien requiere Oficial+ y entra en efecto inmediatamente. + +--- + +## Que Habilita el Estado de Enemigo + +| Efecto | Detalles | +|--------|----------| +| **PvP en territorio** | PvP completo habilitado en el territorio de ambas facciones | +| **Sobrereclamar** | Puedes usar `/f overclaim` en sus chunks si estan en deficit de poder | +| **Marcacion en mapa** | El territorio enemigo se muestra en [#FF5555] rojo en el mapa de territorio | +| **Sin proteccion** | La proteccion de territorio estandar no previene PvP enemigo | + +>[!WARNING] Declarar un enemigo es una decision seria. Sus miembros tambien pueden pelear contigo en tu propio territorio una vez que declares. + +--- + +## Consideraciones Estrategicas + +- Las declaraciones de enemigo son **unilaterales** -- puedes declarar sin su consentimiento, pero ellos tambien te ven como hostil +- Antes de declarar, revisa el poder del objetivo con `/f info `. Si son fuertes, puedes perder territorio en su lugar +- Debilita a los enemigos a traves de combate repetido para drenar su poder, luego sobreclama su tierra +- **No hay limite** de cuantos enemigos puedes tener, pero pelear en multiples frentes es arriesgado + +>[!TIP] Usa `/f neutral ` para desescalar conflictos. A veces una paz estrategica es mas valiosa que una guerra continua. + +>[!NOTE] Si estas aliado con una faccion y la declaras como enemiga, la alianza se rompe primero. diff --git a/src/main/resources/Server/Languages/es-ES/help/diplomacy/relations.md b/src/main/resources/Server/Languages/es-ES/help/diplomacy/relations.md new file mode 100644 index 00000000..ab2bf378 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Relaciones entre Facciones + +Cada par de facciones tiene una relacion diplomatica que determina como interactuan. Hay tres estados: **Aliado**, **Enemigo** y **Neutral**. + +--- + +## Comparacion de Relaciones + +| Efecto | Aliado | Neutral | Enemigo | +|--------|--------|---------|---------| +| **PvP en territorio** | Desactivado | Reglas estandar | Activado | +| **Proteccion de territorio** | Proteccion mutua | Proteccion estandar | Puede sobrereclamar si esta debilitado | +| **Fuego amigo** | Desactivado | N/A | Activado en todas partes | +| **Color en mapa** | [#5555FF] Azul | [#AAAAAA] Gris | [#FF5555] Rojo | +| **Como establecer** | Acuerdo mutuo | Estado predeterminado | Declaracion unilateral | +| **Acceso a chat** | Canal de chat aliado | Ninguno | Ninguno | + +--- + +## Ver Relaciones + +`/f relations` + +Muestra todas tus alianzas actuales, enemigos y cualquier solicitud de alianza pendiente. + +## Como Funcionan las Relaciones + +- **Neutral** es el estado predeterminado entre todas las facciones. Se aplican las reglas estandar del servidor. +- **Alianza** requiere que ambas facciones esten de acuerdo. Cualquier lado puede romperla unilateralmente. +- **Enemigo** se declara de forma unilateral. No se necesita acuerdo -- la otra faccion queda marcada inmediatamente como tu enemigo. + +>[!INFO] Las relaciones son gestionadas por Oficiales y Lideres. Los Miembros pueden ver relaciones pero no pueden cambiarlas. + +>[!TIP] Usa `/f relations` regularmente para mantenerte al tanto del panorama diplomatico. Saber quienes son tus enemigos te ayuda a prepararte para conflictos territoriales. diff --git a/src/main/resources/Server/Languages/es-ES/help/economy/commands.md b/src/main/resources/Server/Languages/es-ES/help/economy/commands.md new file mode 100644 index 00000000..7427681d --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Comandos de Economia + +Referencia rapida para todos los comandos de economia de faccion. + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f balance | Ver saldo de tesoreria | Cualquiera | +| /f deposit (amount) | Depositar en la tesoreria | Cualquiera | +| /f withdraw (amount) | Retirar de la tesoreria | Oficial+ | +| /f money transfer (faction) (amount) | Transferir a otra faccion | Oficial+ | +| /f money log [page] | Ver historial de transacciones | Oficial+ | + +--- + +## Alias de Comandos + +- `/f balance` tambien puede usarse como `/f bal` +- `/f deposit` y `/f withdraw` aceptan cantidades decimales + +## Permisos + +Todos los comandos de economia requieren nodos de permiso `hyperfactions.economy.*`. Retirar y transferir estan adicionalmente restringidos por rol de faccion (Oficial o superior). + +>[!TIP] Usa /f money log para revisar depositos, retiros y transferencias recientes con marcas de tiempo. diff --git a/src/main/resources/Server/Languages/es-ES/help/economy/funds.md b/src/main/resources/Server/Languages/es-ES/help/economy/funds.md new file mode 100644 index 00000000..030a3a03 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Gestionar Fondos + +Los miembros de la faccion trabajan juntos para mantener la tesoreria financiada a traves de depositos, retiros y transferencias. + +## Depositar + +Cualquier miembro puede depositar fondos personales en la tesoreria de la faccion. + +`/f deposit ` +Deposita de tu saldo personal a la tesoreria. + +## Retirar + +Los Oficiales y el Lider pueden retirar fondos de vuelta a su saldo personal. + +`/f withdraw ` +Retira de la tesoreria a tu saldo. (Oficial+) + +## Transferir + +Los Oficiales pueden transferir fondos directamente entre tesorerias de facciones para acuerdos comerciales o diplomacia. + +`/f money transfer ` +Envia fondos a la tesoreria de otra faccion. (Oficial+) + +--- + +## Comisiones + +| Transaccion | Comision | +|-------------|----------| +| Deposito | 0% | +| Retiro | 0% | +| Transferencia | 0% | + +>[!INFO] Las tasas de comision son configurables por el servidor y pueden diferir de los valores predeterminados mostrados arriba. + +>[!TIP] Todas las transacciones se registran. Usa /f money log para revisar la actividad reciente. diff --git a/src/main/resources/Server/Languages/es-ES/help/economy/treasury.md b/src/main/resources/Server/Languages/es-ES/help/economy/treasury.md new file mode 100644 index 00000000..e298ec4b --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Tesoreria de Faccion + +Cada faccion tiene una tesoreria compartida que sirve como el banco de la faccion. Los fondos se usan para costos de mantenimiento, mantenimiento de territorio y operaciones de faccion. + +## Saldo Inicial + +Las facciones nuevas comienzan con **0** en su tesoreria. Los miembros deben depositar fondos para acumular reservas. + +## Quien Puede Gestionar + +- **Cualquier miembro** puede depositar fondos +- **Oficiales y Lider** pueden retirar y transferir +- **Lider** tiene control total de la tesoreria + +--- + +`/f balance` +Consulta el saldo actual de la tesoreria de tu faccion. Tambien disponible como `/f bal`. + +>[!TIP] Contribuye regularmente para mantener tu faccion financiada. Los costos de mantenimiento de territorio pueden vaciar una tesoreria rapidamente. + +>[!INFO] Todas las transacciones de tesoreria se registran y pueden ser revisadas por los oficiales. diff --git a/src/main/resources/Server/Languages/es-ES/help/economy/upkeep.md b/src/main/resources/Server/Languages/es-ES/help/economy/upkeep.md new file mode 100644 index 00000000..efd1909f --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/economy/upkeep.md @@ -0,0 +1,35 @@ +--- +id: economy_upkeep +--- +# Mantenimiento de Territorio + +Las facciones deben pagar un mantenimiento continuo para conservar su territorio reclamado. Esto evita el acaparamiento de tierras y mantiene el mapa activo. + +## Costos de Mantenimiento + +| Configuracion | Valor por defecto | +|---------------|-------------------| +| Costo por chunk | 2.0 por ciclo | +| Intervalo de pago | Cada 24 horas | +| Chunks gratis | 3 (sin costo) | +| Modo de escalado | Tarifa plana | + +Tus primeros 3 chunks son gratis. Mas alla de eso, cada chunk adicional reclamado cuesta 2.0 por ciclo de pago. + +## Pago Automatico + +El pago automatico esta habilitado por defecto. El sistema deduce automaticamente el mantenimiento de tu tesoreria en cada intervalo. No requiere accion manual. + +--- + +## Periodo de Gracia + +Si tu tesoreria no puede cubrir el mantenimiento, comienza un periodo de gracia de 48 horas. Se envia una advertencia 6 horas antes de que se empiecen a perder reclamos. + +>[!WARNING] Si el mantenimiento sigue sin pagarse despues del periodo de gracia, tu faccion pierde 1 reclamo por ciclo hasta que los costos se cubran o todos los reclamos extra desaparezcan. + +## Ejemplo + +*Una faccion con 8 reclamos paga por 5 chunks (8 menos 3 gratis). A 2.0 por chunk, eso es 10.0 por ciclo.* + +>[!TIP] Manten tu tesoreria por encima del costo de mantenimiento. Usa /f balance para revisar tus reservas. diff --git a/src/main/resources/Server/Languages/es-ES/help/power_land/claiming.md b/src/main/resources/Server/Languages/es-ES/help/power_land/claiming.md new file mode 100644 index 00000000..7715e5c4 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/power_land/claiming.md @@ -0,0 +1,48 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Reclamar Territorio + +Reclamar un chunk lo protege bajo el control de tu faccion. Solo los miembros de la faccion pueden construir, destruir o acceder a contenedores dentro del territorio reclamado. + +--- + +## Como Reclamar + +`/f claim` + +Parate en el chunk que quieres reclamar y ejecuta este comando. El chunk queda protegido inmediatamente. Requiere rango de **Oficial** o superior. + +## Como Desreclamar + +`/f unclaim` + +Libera el chunk donde estas parado de vuelta a terreno salvaje. Tambien requiere Oficial+. + +--- + +## Reglas de Reclamo + +| Regla | Predeterminado | +|-------|----------------| +| **Costo de poder por reclamo** | 2.0 de poder | +| **Reclamos maximos** | 100 por faccion | +| **Solo adyacentes** | No (puedes reclamar en cualquier lugar) | + +>[!INFO] Cada reclamo cuesta 2.0 de poder para mantener. Una faccion con 50 de poder total puede mantener hasta 25 reclamos de forma segura. + +--- + +## Que Proporciona la Proteccion + +Dentro del territorio reclamado, lo siguiente se aplica por defecto: + +- **Los foraneos** no pueden destruir, colocar o interactuar con bloques +- **Los aliados** pueden usar puertas, asientos y transporte pero no pueden destruir o colocar bloques +- **Los Miembros y Oficiales** tienen acceso completo para construir, destruir y usar todo +- El acceso a contenedores (cofres, cajas) esta restringido solo a miembros + +>[!TIP] Tambien puedes reclamar directamente desde el mapa de territorio. Abre `/f map` y haz clic en chunks sin reclamar para reclamarlos. + +>[!WARNING] No te expandas demasiado. Si tu faccion pierde poder por muertes, los reclamos que excedan tu presupuesto de poder se vuelven vulnerables a sobrereclamaciones. diff --git a/src/main/resources/Server/Languages/es-ES/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/es-ES/help/power_land/losing_territory.md new file mode 100644 index 00000000..53c152ac --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/power_land/losing_territory.md @@ -0,0 +1,48 @@ +--- +id: power_losing +commands: overclaim +--- +# Perder Territorio + +Cuando el poder total de una faccion cae por debajo del costo de sus reclamos, se vuelve **vulnerable**. Los enemigos pueden sobrereclamar chunks directamente. + +--- + +## Como Funciona Sobrereclamar + +`/f overclaim` + +Un Oficial o Lider de una faccion **enemiga** se para en tu chunk reclamado y ejecuta este comando. Si tu faccion esta en deficit de poder, el chunk se transfiere a su faccion. + +## Las Matematicas + +Cada reclamo cuesta **2.0 de poder** para mantener. Si tu poder total cae por debajo de ese umbral, los chunks en deficit son vulnerables. + +>[!WARNING] Sobrereclamar es permanente. Una vez que un enemigo toma un chunk, debes reclamarlo de nuevo (o sobrereclamarlo de vuelta si se debilitan). + +--- + +## Escenario de Ejemplo + +| Factor | Valor | +|--------|-------| +| Miembros | 5 jugadores | +| Poder por miembro | 10 cada uno (inicial) | +| **Poder total** | **50** | +| Reclamos | 30 chunks | +| Poder necesario (30 x 2.0) | **60** | +| **Deficit** | **10 de poder faltante** | + +En este ejemplo, la faccion ya es vulnerable desde el inicio. Los enemigos podrian sobrereclamar hasta **5 chunks** (10 de deficit / 2.0 por reclamo) antes de que la faccion alcance el equilibrio. + +--- + +## Como Prevenir Sobrereclamaciones + +- **No te expandas demasiado** -- siempre manten el poder total por encima del costo de tus reclamos con un margen +- **Mantente activo** -- el poder solo se regenera mientras estas en linea (+0.1/min) +- **Evita muertes innecesarias** -- cada muerte cuesta 1.0 de poder +- **Recluta mas miembros** -- mas jugadores significa mas poder total +- **Desreclama chunks sin usar** -- libera poder con `/f unclaim` + +>[!TIP] Revisa tu estado de poder regularmente con `/f power`. Si tu poder total esta cerca del costo de tus reclamos, considera desreclamar chunks menos importantes antes de una guerra. diff --git a/src/main/resources/Server/Languages/es-ES/help/power_land/territory_map.md b/src/main/resources/Server/Languages/es-ES/help/power_land/territory_map.md new file mode 100644 index 00000000..21a1cf65 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# El Mapa de Territorio + +El mapa de territorio te da una vista aerea de los chunks reclamados en tu area, mostrando que facciones controlan la tierra a tu alrededor. + +--- + +## Abrir el Mapa + +`/f map` + +Abre la interfaz del mapa de territorio centrada en tu ubicacion actual. + +--- + +## Leyenda de Colores + +| Color | Significado | +|-------|-------------| +| [#55FF55] **El color de tu faccion** | Territorio reclamado por tu faccion | +| [#5555FF] **Azul** | Territorio de faccion aliada | +| [#FF5555] **Rojo** | Territorio de faccion enemiga | +| [#AAAAAA] **Gris** | Territorio de faccion neutral | +| [#333333] **Oscuro** | Terreno salvaje (tierra sin reclamar) | +| [#FFAA00] **Dorado** | Zonas especiales (zona segura, zona de guerra) | + +>[!INFO] El color de tu faccion en el mapa coincide con el color que estableciste en la configuracion de color de faccion. Los aliados y enemigos usan colores fijos para facil identificacion. + +--- + +## Clic para Reclamar + +El mapa no es solo para ver -- puedes interactuar con el directamente. + +- **Haz clic en un chunk sin reclamar** para reclamarlo (requiere rango Oficial+ y poder suficiente) +- **Haz clic en un chunk reclamado** para ver que faccion lo posee +- Desplazate o mueve el mapa para explorar el area a tu alrededor + +>[!TIP] El mapa es la forma mas facil de planear la expansion de tu territorio. Busca areas sin reclamar cerca de tu base y reclama estrategicamente para crear un borde contiguo. + +>[!NOTE] El mapa muestra un area fija alrededor de tu posicion. Muevete a otra ubicacion y vuelve a abrirlo para ver otras partes del mundo. diff --git a/src/main/resources/Server/Languages/es-ES/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/es-ES/help/power_land/understanding_power.md new file mode 100644 index 00000000..a73464cc --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/power_land/understanding_power.md @@ -0,0 +1,43 @@ +--- +id: power_understanding +commands: power +--- +# Entender el Poder + +El poder es el recurso principal que determina cuanto territorio puede mantener tu faccion. Cada jugador tiene poder personal que contribuye al total de la faccion. + +--- + +## Valores de Poder Predeterminados + +| Configuracion | Valor | +|---------------|-------| +| **Poder maximo por jugador** | 20 | +| **Poder inicial** | 10 | +| **Penalidad por muerte** | -1.0 por muerte | +| **Recompensa por matar** | 0.0 | +| **Tasa de regeneracion** | +0.1 por minuto (mientras esta en linea) | +| **Costo de poder por reclamo** | 2.0 | +| **Desconexion mientras etiquetado** | -1.0 adicional | + +## Como Funciona + +El **poder total** de tu faccion es la suma del poder personal de cada miembro. Tu **poder requerido** es el numero de reclamos multiplicado por 2.0. Mientras el poder total se mantenga por encima del poder requerido, tu territorio esta seguro. + +>[!INFO] El poder se regenera pasivamente a 0.1 por minuto mientras estas en linea. A esa tasa, recuperar 1.0 de poder toma aproximadamente 10 minutos. + +--- + +## Consultar Tu Poder + +`/f power` + +Muestra tu poder personal, el poder total de tu faccion y cuanto se necesita para mantener los reclamos actuales. + +## La Zona de Peligro + +Si el poder total cae **por debajo** de la cantidad requerida para tus reclamos, tu faccion se vuelve vulnerable. Los enemigos pueden usar `/f overclaim` para robar tus chunks. + +>[!WARNING] Multiples muertes en un corto periodo pueden escalar rapidamente. Si tienes 5 miembros cada uno con 10 de poder (50 total) y 20 reclamos (40 necesarios), solo 5 muertes en tu equipo te bajan a 45 -- aun seguro. Pero 11 muertes te ponen en 39, por debajo del umbral de 40. + +>[!TIP] Manten un margen de poder. No reclames cada chunk que puedas costear -- deja espacio para algunas muertes sin volverte vulnerable. diff --git a/src/main/resources/Server/Languages/es-ES/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/es-ES/help/quick_ref/all_commands.md new file mode 100644 index 00000000..a6af93f5 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Todos los Comandos + +## Principal + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f | Abrir menu de faccion | Cualquiera | +| /f help | Abrir centro de ayuda | Cualquiera | +| /f create (name) | Crear una faccion | Cualquiera | +| /f disband | Eliminar tu faccion | Lider | +| /f leave | Abandonar tu faccion | Cualquiera | + +## Membresia + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f invite (player) | Invitar a un jugador | Oficial+ | +| /f accept [faction] | Aceptar una invitacion | Cualquiera | +| /f request (faction) | Solicitar unirse | Cualquiera | +| /f kick (player) | Remover a un miembro | Oficial+ | +| /f promote (player) | Promover a Oficial | Lider | +| /f demote (player) | Degradar a Miembro | Lider | +| /f transfer (player) | Transferir liderazgo | Lider | + +## Territorio + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f claim | Reclamar chunk actual | Oficial+ | +| /f unclaim | Liberar chunk actual | Oficial+ | +| /f overclaim | Tomar chunk debilitado | Oficial+ | +| /f map | Abrir mapa de territorio | Cualquiera | + +## Teletransporte + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f home | Teletransportarse al hogar de faccion | Cualquiera | +| /f sethome | Establecer hogar de faccion | Oficial+ | +| /f delhome | Eliminar hogar de faccion | Oficial+ | +| /f stuck | Escapar de territorio enemigo | Cualquiera | + +## Informacion + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f info [faction] | Ver detalles de faccion | Cualquiera | +| /f list | Explorar todas las facciones | Cualquiera | +| /f members | Ver lista de miembros | Cualquiera | +| /f who [player] | Ver info de jugador | Cualquiera | +| /f power [player] | Consultar niveles de poder | Cualquiera | +| /f invites | Gestionar invitaciones/solicitudes | Cualquiera | +| /f relations | Ver relaciones diplomaticas | Cualquiera | + +## Diplomacia + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f ally (faction) | Solicitar alianza | Oficial+ | +| /f enemy (faction) | Declarar enemigo | Oficial+ | +| /f neutral (faction) | Restablecer a neutral | Oficial+ | + +## Configuracion + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f settings | Abrir interfaz de configuracion | Oficial+ | +| /f rename (name) | Renombrar faccion | Lider | +| /f desc [text] | Establecer descripcion | Oficial+ | +| /f color (code) | Establecer color de faccion | Oficial+ | +| /f open | Permitir que cualquiera se una | Lider | +| /f close | Requerir invitacion | Lider | + +## Economia + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f balance | Ver tesoreria | Cualquiera | +| /f deposit (amount) | Depositar fondos | Cualquiera | +| /f withdraw (amount) | Retirar fondos | Oficial+ | +| /f money transfer (faction) (amt) | Transferir fondos | Oficial+ | +| /f money log [page] | Historial de transacciones | Oficial+ | + +## Chat + +| Comando | Descripcion | Rol | +|---------|-------------|-----| +| /f c | Cambiar modo de chat | Cualquiera | +| /f c f | Establecer chat de faccion | Cualquiera | +| /f c a | Establecer chat de aliados | Cualquiera | +| /f c off | Establecer chat publico | Cualquiera | diff --git a/src/main/resources/Server/Languages/es-ES/help/welcome/getting_started.md b/src/main/resources/Server/Languages/es-ES/help/welcome/getting_started.md new file mode 100644 index 00000000..31958ee8 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Primeros Pasos + +Bienvenido a HyperFactions! Aqui te explicamos como empezar en unos pocos pasos. + +--- + +## Paso 1: Abre el Menu de Faccion + +Escribe `/f` para abrir la interfaz principal de facciones. Este es tu centro para todo -- explorar facciones, crear la tuya y gestionar invitaciones. + +## Paso 2: Elige Tu Camino + +| Opcion | Como | +|--------|------| +| **Explorar facciones abiertas** | Haz clic en *Explorar* en el menu y presiona *Unirse* en cualquier faccion abierta. | +| **Aceptar una invitacion** | Revisa la pestana *Invitaciones*. Si alguien te invito, haz clic en *Aceptar*. | +| **Crear la tuya** | Haz clic en *Crear Faccion*, elige un nombre, y seras el Lider. | + +## Paso 3: Explora Tu Faccion + +Una vez que estes en una faccion, veras el **Panel de Faccion** con tu lista de miembros, mapa de territorio, relaciones y configuraciones. + +>[!TIP] Si eres nuevo, intenta unirte a una faccion existente primero. Aprenderas mas rapido con miembros experimentados a tu alrededor. + +--- + +## Primeros Comandos Esenciales + +- `/f` -- Abre la interfaz de facciones +- `/f home` -- Teletransportate al hogar de tu faccion +- `/f c` -- Cambia el modo de chat entre Normal, Faccion y Aliado +- `/f map` -- Ver el mapa de territorio a tu alrededor + +>[!TIP] Tambien puedes escribir `/f help` en el chat para una referencia rapida de comandos en cualquier momento. diff --git a/src/main/resources/Server/Languages/es-ES/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/es-ES/help/welcome/quick_tips.md new file mode 100644 index 00000000..8a81ad9e --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Consejos Rapidos + +Consejos utiles organizados por categoria para ayudarte a prosperar. + +--- + +## Territorio + +- Reclama tierra alrededor de tu base temprano con `/f claim` -- las construcciones sin reclamar no tienen **ninguna proteccion** +- Cada reclamo cuesta **2.0 de poder** para mantener, asi que no te expandas mas alla de lo que tus miembros pueden soportar +- Usa `/f map` para explorar reclamos cercanos y encontrar lugares seguros para construir +- Desreclama chunks que ya no necesites con `/f unclaim` para liberar poder + +## Combate + +- Morir cuesta **1.0 de poder** -- evita peleas innecesarias cuando tu faccion esta cerca de su limite de reclamos +- Tienes **5 segundos de proteccion de aparicion** despues de reaparecer +- La etiqueta de combate dura **15 segundos** -- desconectarte mientras estas etiquetado cuesta poder extra +- El fuego amigo esta **desactivado** entre miembros de faccion y aliados por defecto + +>[!WARNING] Desconectarte mientras estas etiquetado en combate causa perdida de poder adicional (1.0 por desconexion). Quedate y pelea o escapa primero. + +## Social + +- Usa `/f c` para cambiar entre modos de chat para que la conversacion de faccion sea privada +- Invita a jugadores de confianza con `/f invite ` -- las invitaciones expiran despues de **5 minutos** +- Forma alianzas con `/f ally ` para proteccion mutua y visibilidad compartida en el mapa +- Revisa `/f relations` para ver tu estado diplomatico completo + +## Economia + +>[!TIP] Si el servidor tiene economia habilitada, tu faccion puede acumular una tesoreria. Los miembros pueden depositar, pero solo los Oficiales y Lideres pueden retirar o transferir fondos. + +- Deposita fondos con la interfaz de tesoreria para fortalecer tu faccion +- Una faccion mas rica puede costear mas reclamos y recuperarse de contratiempos mas rapido + +## General + +- Escribe `/f` en cualquier momento para abrir tu panel de faccion -- todo es accesible desde ahi +- Promueve a miembros activos a Oficial para que puedan ayudar a reclamar y gestionar territorio +- Manten tu faccion activa -- el poder solo se regenera mientras los jugadores estan **en linea** diff --git a/src/main/resources/Server/Languages/es-ES/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/es-ES/help/welcome/what_are_factions.md new file mode 100644 index 00000000..30d16b6a --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Que Son las Facciones? + +Las facciones son **equipos dirigidos por jugadores** que reclaman territorio, construyen bases y compiten por el dominio. Cuando te unes o creas una faccion, obtienes acceso a tierras protegidas, un hogar compartido, chat privado y herramientas diplomaticas. + +>[!TIP] Las facciones se tratan de trabajo en equipo. Cuantos mas miembros activos tengas, mas fuerte sera tu faccion. + +--- + +## Mecanicas Principales + +| Mecanica | Que Hace | +|----------|----------| +| **Poder** | Cada jugador genera poder con el tiempo (max 20). El poder total de tu faccion determina cuanta tierra puedes mantener. | +| **Reclamos** | Los chunks reclamados estan protegidos -- solo los miembros pueden construir, destruir o abrir contenedores dentro de ellos. Cada reclamo cuesta 2.0 de poder para mantener. | +| **Relaciones** | Las facciones pueden formar **alianzas** para proteccion mutua o declarar **enemigos** para habilitar PvP y agresion territorial. | +| **Roles** | Tres rangos -- Lider, Oficial, Miembro -- cada uno con diferentes capacidades. | + +--- + +## Como Funciona la Fuerza + +La fuerza de tu faccion proviene de sus miembros. Cada jugador comienza con **10 de poder** y regenera hasta **20** mientras esta en linea. Morir cuesta poder. Si el poder total de tu faccion cae por debajo del costo de tus reclamos, los enemigos pueden **sobrereclamar** tu territorio. + +>[!WARNING] Una sola muerte cuesta 1.0 de poder. Multiples muertes en poco tiempo pueden dejar a tu faccion vulnerable a sobrereclamaciones. + +--- + +## Diplomacia en Resumen + +- **Aliados** -- Acuerdos mutuos que previenen el fuego amigo y protegen el territorio del otro +- **Enemigos** -- Declaraciones unilaterales que habilitan PvP en las tierras del otro y permiten sobrereclamar +- **Neutral** -- El estado predeterminado entre todas las facciones con reglas estandar + +>[!INFO] Puedes gestionar todo esto a traves de la interfaz del juego escribiendo `/f` o mediante comandos de chat. diff --git a/src/main/resources/Server/Languages/es-ES/help/your_faction/creating.md b/src/main/resources/Server/Languages/es-ES/help/your_faction/creating.md new file mode 100644 index 00000000..b6e7c940 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Crear una Faccion + +Iniciar tu propia faccion te convierte en el **Lider** con control total sobre configuraciones, miembros y territorio. + +--- + +## Como Crear + +`/f create ` + +Esto crea tu faccion e inmediatamente abre el **Panel de Faccion** donde puedes comenzar a invitar miembros, reclamar tierra y configurar ajustes. + +## Reglas de Nombre + +| Regla | Requisito | +|-------|-----------| +| **Longitud** | Entre **3** y **24** caracteres | +| **Caracteres** | Solo letras, numeros y espacios (alfanumerico) | +| **Unicidad** | Dos facciones no pueden compartir el mismo nombre | + +>[!WARNING] Elige tu nombre con cuidado. Renombrar despues requiere permisos de Lider y puede tener un tiempo de espera. + +--- + +## Que Ocurre al Crear + +- Te conviertes en el **Lider** (rango mas alto) +- Tu faccion comienza con **0 reclamos** y tu poder personal (10 por defecto) +- El panel de faccion se abre automaticamente +- Puedes inmediatamente invitar jugadores, reclamar territorio y establecer un hogar de faccion + +>[!INFO] Si el servidor tiene integracion de economia habilitada, crear una faccion puede costar dinero. El costo de creacion lo establece el administrador del servidor. + +>[!TIP] Despues de crear, tus primeras prioridades deben ser: invitar amigos con `/f invite `, encontrar una ubicacion para la base, y reclamarla con `/f claim`. diff --git a/src/main/resources/Server/Languages/es-ES/help/your_faction/joining.md b/src/main/resources/Server/Languages/es-ES/help/your_faction/joining.md new file mode 100644 index 00000000..018d8c33 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Unirse a una Faccion + +Hay tres formas de unirse a una faccion existente, dependiendo de como esta configurada la faccion. + +--- + +## Metodos Comparados + +| Metodo | Como Funciona | Requiere | +|--------|---------------|----------| +| **Explorar y Unirse** | Abre `/f`, haz clic en *Explorar*, y presiona *Unirse* en una faccion abierta | La faccion debe estar en modo **abierto** | +| **Aceptar Invitacion** | Un Oficial o Lider de la faccion te envia una invitacion; aceptala desde la pestana *Invitaciones* en `/f` | Una invitacion activa | +| **Solicitar Unirse** | Envia una solicitud a una faccion cerrada con `/f request ` | Un Oficial o Lider para aprobar | + +--- + +## Detalles de Invitacion + +- Las invitaciones son enviadas por Oficiales o Lideres usando `/f invite ` +- Las invitaciones expiran despues de **5 minutos** -- acepta pronto +- Ve tus invitaciones pendientes en la pestana *Invitaciones* del menu de faccion (`/f`) +- Acepta con la interfaz o `/f accept ` + +## Solicitudes de Union + +- Usa `/f request ` para solicitar membresia en una faccion cerrada +- Las solicitudes expiran despues de **24 horas** si no se actua sobre ellas +- Los Oficiales y Lideres pueden aprobar o rechazar solicitudes desde el panel de faccion + +>[!TIP] No sabes a que faccion unirte? Usa la pestana Explorar en `/f` para ver descripciones de facciones, cantidad de miembros y si son abiertas o solo por invitacion. + +>[!NOTE] Cada faccion puede tener hasta **50 miembros** por defecto. Si una faccion esta llena, tendras que esperar a que se abra un lugar. diff --git a/src/main/resources/Server/Languages/es-ES/help/your_faction/managing.md b/src/main/resources/Server/Languages/es-ES/help/your_faction/managing.md new file mode 100644 index 00000000..74838462 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Gestionar Miembros + +Los Oficiales y Lideres comparten la responsabilidad de gestionar la lista de miembros de la faccion. Aqui estan los comandos clave y quien puede usarlos. + +--- + +## Comandos + +| Comando | Que Hace | Rol Requerido | +|---------|----------|---------------| +| `/f invite ` | Envia una invitacion (expira en 5 min) | Oficial+ | +| `/f kick ` | Remueve a un miembro de la faccion | Oficial+ (ver nota) | +| `/f promote ` | Promueve un Miembro a Oficial | Solo Lider | +| `/f demote ` | Degrada un Oficial a Miembro | Solo Lider | +| `/f transfer ` | Transfiere la propiedad de la faccion | Solo Lider | + +>[!NOTE] Los Oficiales solo pueden expulsar **Miembros**. Para remover a otro Oficial, el Lider debe degradarlo primero o expulsarlo directamente. + +--- + +## Invitaciones + +- Las invitaciones expiran despues de **5 minutos** si no son aceptadas +- El jugador invitado las ve en su pestana de Invitaciones cuando abre `/f` +- No hay limite de cuantas invitaciones puedes enviar a la vez +- Tu faccion puede tener hasta **50 miembros** en total + +## Promociones y Degradaciones + +- Solo el **Lider** puede promover o degradar +- `/f promote ` eleva a un Miembro a Oficial +- `/f demote ` baja a un Oficial de vuelta a Miembro + +## Transferir Liderazgo + +>[!WARNING] Transferir el liderazgo es **irreversible**. Seras degradado a Oficial y el jugador objetivo se convierte en el nuevo Lider. Asegurate de confiar completamente en el. + +`/f transfer ` + +El objetivo debe ser un miembro actual de tu faccion. diff --git a/src/main/resources/Server/Languages/es-ES/help/your_faction/roles.md b/src/main/resources/Server/Languages/es-ES/help/your_faction/roles.md new file mode 100644 index 00000000..6be4f190 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Roles y Rangos + +Cada faccion tiene tres roles en una jerarquia estricta. Los roles superiores heredan todas las capacidades de los roles inferiores. + +--- + +## Desglose de Permisos + +| Accion | Lider | Oficial | Miembro | +|--------|-------|---------|---------| +| Construir en territorio | S | S | S | +| Usar hogar de faccion | S | S | S | +| Chat de faccion y aliados | S | S | S | +| Invitar jugadores | S | S | N | +| Expulsar miembros | S | S (Solo Miembros) | N | +| Reclamar / desreclamar tierra | S | S | N | +| Sobrereclamar territorio enemigo | S | S | N | +| Establecer hogar de faccion | S | S | N | +| Eliminar hogar de faccion | S | S | N | +| Gestionar relaciones (aliado/enemigo) | S | S | N | +| Ver registros de faccion | S | S | N | +| Promover a Oficial | S | N | N | +| Degradar de Oficial | S | N | N | +| Renombrar faccion | S | N | N | +| Establecer descripcion / etiqueta / color | S | N | N | +| Abrir / cerrar faccion | S | N | N | +| Acceder a configuracion de faccion | S | N | N | +| Transferir liderazgo | S | N | N | +| Disolver faccion | S | N | N | + +>[!NOTE] Los Oficiales pueden expulsar **Miembros** pero no pueden expulsar a otros Oficiales. Solo el Lider puede remover Oficiales. + +--- + +## Detalles de Roles + +- **Lider** -- Uno por faccion. Tiene control total sobre todas las configuraciones, miembros y territorio. Puede transferir la propiedad a otro miembro. +- **Oficial** -- Miembros de confianza que ayudan a gestionar la faccion. Pueden invitar, expulsar miembros, reclamar tierra y manejar la diplomacia. +- **Miembro** -- El rol predeterminado al unirse. Puede construir en territorio, usar el hogar de faccion y participar en el chat de faccion. + +>[!TIP] Promueve a tus miembros mas activos y confiables a Oficial para que puedan ayudar a gestionar el territorio y reclutar nuevos jugadores. diff --git a/src/main/resources/Server/Languages/es-ES/hyperfactions.lang b/src/main/resources/Server/Languages/es-ES/hyperfactions.lang new file mode 100644 index 00000000..0354cca2 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Traducciones al Espanol +# Formato: clave = valor (o clave = "valor entre comillas") +# Nota: Las claves se prefijan automaticamente con "hyperfactions." por el I18nModule de Hytale +# Marcadores: {0}, {1}, etc. + +# ========== Comun ========== +common.no_permission = No tienes permiso para hacer eso. +common.not_in_faction = No estas en una faccion. +common.already_in_faction = Ya estas en una faccion. +common.player_not_found = Jugador no encontrado. +common.faction_not_found = Faccion no encontrada. +common.player_not_online = Ese jugador no esta conectado. +common.must_be_leader = Solo el lider de la faccion puede hacer eso. +common.must_be_officer = Debes ser Oficial o Lider para hacer eso. +common.combat_tagged = No puedes hacer eso mientras estas en combate. +common.cancel = Cancelar +common.confirm = Confirmar +common.save = Guardar +common.close = Cerrar +common.clear = Limpiar +common.back = Volver +common.leave = Salir +common.transfer = Transferir +common.disband = Disolver +common.world_fallback = mundo +common.yes = Si +common.no = No +common.loading = Cargando... +common.online = Conectado +common.offline = Desconectado +common.enabled = Activado +common.disabled = Desactivado +common.none = Ninguno +common.page = Pagina {0} de {1} +common.unknown = Desconocido +common.error_generic = Algo salio mal. Intentalo de nuevo. +common.gui_fallback = No se pudo abrir la interfaz. Usa /f help para ver los comandos. +common.admin_prefix = [Admin] +common.location_error = No se pudo determinar tu ubicacion. +common.world_error = No se pudo determinar tu mundo. +common.invalid_id = ID de faccion invalido. +common.na = N/D + +# ========== Comandos - Crear ========== +cmd.create.no_permission = No tienes permiso para crear facciones. +cmd.create.usage = Uso: /f create +cmd.create.success = Faccion '{0}' creada! +cmd.create.already_in_named = Ya estas en {0}. +cmd.create.use_leave_first = Usa /f leave primero si quieres crear una nueva faccion. +cmd.create.name_taken = Ese nombre de faccion ya esta en uso. +cmd.create.name_too_short = El nombre de la faccion es demasiado corto. +cmd.create.name_too_long = El nombre de la faccion es demasiado largo. +cmd.create.failed = No se pudo crear la faccion. + +# ========== Comandos - Disolver ========== +cmd.disband.no_permission = No tienes permiso para disolver facciones. +cmd.disband.not_leader = Solo el lider de la faccion puede disolverla. +cmd.disband.confirm_prompt = Estas seguro de que quieres disolver tu faccion? +cmd.disband.confirm_instruction = Escribe /f disband --text de nuevo en los proximos {0} segundos para confirmar. +cmd.disband.success = Tu faccion ha sido disuelta. +cmd.disband.failed = No se pudo disolver la faccion. +cmd.disband.cancelled = Confirmacion anterior cancelada. Escribe de nuevo para confirmar la disolucion. + +# ========== Comandos - Renombrar ========== +cmd.rename.no_permission = No tienes permiso. +cmd.rename.not_leader = Solo el lider puede renombrar la faccion. +cmd.rename.usage = Uso: /f rename +cmd.rename.too_short = El nombre es demasiado corto (min {0} caracteres). +cmd.rename.too_long = El nombre es demasiado largo (max {0} caracteres). +cmd.rename.name_taken = Ese nombre ya esta en uso. +cmd.rename.success = Faccion renombrada a {0}! +cmd.rename.broadcast = {0} renombro la faccion a {1} + +# ========== Comandos - Descripcion ========== +cmd.desc.no_permission = No tienes permiso. +cmd.desc.not_officer = Debes ser oficial para establecer la descripcion. +cmd.desc.set = Descripcion de la faccion establecida! +cmd.desc.cleared = Descripcion de la faccion borrada. + +# ========== Comandos - Abrir / Cerrar ========== +cmd.open.no_permission = No tienes permiso. +cmd.open.not_leader = Solo el lider puede cambiar esta configuracion. +cmd.open.already_open = Tu faccion ya esta abierta. +cmd.open.success = Tu faccion ahora esta abierta! Cualquiera puede unirse con /f join. +cmd.open.broadcast = {0} abrio la faccion al ingreso publico. +cmd.close.no_permission = No tienes permiso. +cmd.close.not_leader = Solo el lider puede cambiar esta configuracion. +cmd.close.already_closed = Tu faccion ya esta cerrada. +cmd.close.success = Tu faccion ahora es solo por invitacion. +cmd.close.broadcast = {0} cerro la faccion a solo invitacion. + +# ========== Comandos - Color ========== +cmd.color.no_permission = No tienes permiso. +cmd.color.not_officer = Debes ser oficial para cambiar el color. +cmd.color.colors_disabled = Los colores de faccion estan desactivados. +cmd.color.usage = Uso: /f color +cmd.color.usage_hint = Codigos validos: 0-9, a-f o #RRGGBB hex +cmd.color.invalid = Color invalido. Usa 0-9, a-f o #RRGGBB. +cmd.color.success = Color de la faccion actualizado! + +# ========== Comandos - Reclamar ========== +cmd.claim.no_permission = No tienes permiso para reclamar territorio. +cmd.claim.already_yours = Tu faccion ya posee este chunk. +cmd.claim.cannot_claim_ally = No puedes reclamar territorio aliado. +cmd.claim.already_claimed_hint = Este chunk ya esta reclamado. Usa /f overclaim si son vulnerables. +cmd.claim.success = Chunk reclamado en {0}, {1}! +cmd.claim.not_officer = Debes ser oficial para reclamar territorio. +cmd.claim.already_claimed = Este chunk ya esta reclamado. +cmd.claim.max_claims = Tu faccion alcanzo el maximo de reclamos. Consigue mas poder! +cmd.claim.not_adjacent = Debes reclamar junto a territorio existente. +cmd.claim.world_not_allowed = No se permite reclamar en este mundo. +cmd.claim.orbisguard = Esta area esta protegida por OrbisGuard. +cmd.claim.zone_protected = Este chunk esta en una zona segura o de guerra. +cmd.claim.insufficient_power = Tu faccion no tiene suficiente poder para reclamar mas territorio. +cmd.claim.failed = No se pudo reclamar el chunk. + +# ========== Comandos - Invitar ========== +cmd.invite.no_permission = No tienes permiso para invitar jugadores. +cmd.invite.not_officer = Debes ser oficial para invitar jugadores. +cmd.invite.usage = Uso: /f invite +cmd.invite.player_not_found = Jugador '{0}' no encontrado o desconectado. +cmd.invite.target_in_faction = Ese jugador ya esta en una faccion. +cmd.invite.sent = Invitaste a {0} a tu faccion. +cmd.invite.received = Has sido invitado a unirte a {0}! +cmd.invite.accept_hint = Escribe /f accept {0} para unirte. + +# ========== Comandos - Aceptar / Unirse ========== +cmd.join.no_permission = No tienes permiso para unirte a facciones. +cmd.join.already_in_named = Ya estas en {0}. +cmd.join.use_leave_hint = Usa /f leave primero si quieres unirte a otra faccion. +cmd.join.no_invites = No tienes invitaciones pendientes. +cmd.join.faction_not_found = Faccion '{0}' no encontrada. +cmd.join.not_invited = No tienes invitacion de esa faccion. +cmd.join.faction_gone = Esa faccion ya no existe. +cmd.join.success = Te has unido a {0}! +cmd.join.broadcast = {0} se ha unido a la faccion! +cmd.join.faction_full = Esa faccion esta llena. +cmd.join.failed = No se pudo unir a la faccion. + +# ========== Comandos - Expulsar ========== +cmd.kick.no_permission = No tienes permiso para expulsar miembros. +cmd.kick.usage = Uso: /f kick +cmd.kick.not_in_your_faction = El jugador '{0}' no esta en tu faccion. +cmd.kick.success = Expulsaste a {0} de la faccion. +cmd.kick.broadcast = {0} fue expulsado de la faccion. +cmd.kick.kicked = Has sido expulsado de la faccion. +cmd.kick.cannot_kick_higher = No tienes permiso para expulsar a ese jugador. +cmd.kick.cannot_kick_leader = No puedes expulsar al lider de la faccion. +cmd.kick.failed = No se pudo expulsar al jugador. + +# ========== Comandos - Salir ========== +cmd.leave.no_permission = No tienes permiso para salir de facciones. +cmd.leave.confirm_prompt = Estas seguro de que quieres salir de tu faccion? +cmd.leave.confirm_instruction = Escribe /f leave --text de nuevo en los proximos {0} segundos para confirmar. +cmd.leave.success = Has salido de tu faccion. +cmd.leave.broadcast = {0} ha salido de la faccion. +cmd.leave.failed = No se pudo salir de la faccion. +cmd.leave.cancelled = Confirmacion anterior cancelada. Escribe de nuevo para confirmar la salida. + +# ========== Comandos - Promover / Degradar / Transferir ========== +cmd.rank.promote_no_permission = No tienes permiso para promover miembros. +cmd.rank.promote_usage = Uso: /f promote +cmd.rank.promoted = {0} promovido a {1}! +cmd.rank.promote_broadcast = {0} fue promovido a {1}! +cmd.rank.already_highest = No se puede promover mas. Usa /f transfer para cambiar de lider. +cmd.rank.promote_failed = No se pudo promover al jugador. +cmd.rank.demote_no_permission = No tienes permiso para degradar miembros. +cmd.rank.demote_usage = Uso: /f demote +cmd.rank.demoted = {0} degradado a {1}. +cmd.rank.demote_broadcast = {0} fue degradado a {1}. +cmd.rank.already_lowest = Ese jugador ya es Miembro. +cmd.rank.demote_failed = No se pudo degradar al jugador. +cmd.rank.transfer_no_permission = No tienes permiso para transferir el liderazgo. +cmd.rank.transfer_usage = Uso: /f transfer +cmd.rank.player_not_in_faction = Jugador no encontrado en tu faccion. +cmd.rank.transfer_confirm = Estas seguro de que quieres transferir el liderazgo a {0}? +cmd.rank.transfer_confirm_instruction = Escribe /f transfer {0} --text de nuevo en los proximos {1} segundos para confirmar. +cmd.rank.transferred = Liderazgo transferido a {0}! +cmd.rank.transfer_broadcast = {0} ahora es el lider de la faccion! +cmd.rank.transfer_failed = No se pudo transferir el liderazgo. +cmd.rank.transfer_cancelled = Confirmacion anterior cancelada. Escribe de nuevo para confirmar la transferencia. + +# ========== Comandos - Desreclamar ========== +cmd.unclaim.no_permission = No tienes permiso para desreclamar territorio. +cmd.unclaim.success = Chunk desreclamado en {0}, {1}. +cmd.unclaim.not_officer = Debes ser oficial para desreclamar territorio. +cmd.unclaim.chunk_not_claimed = Este chunk no esta reclamado. +cmd.unclaim.not_your_claim = Tu faccion no posee este chunk. +cmd.unclaim.cannot_unclaim_home = No puedes desreclamar el chunk con el hogar de la faccion. +cmd.unclaim.would_disconnect = No se puede desreclamar - desconectaria tu territorio. +cmd.unclaim.failed = No se pudo desreclamar el chunk. + +# ========== Comandos - Sobrereclamar ========== +cmd.overclaim.no_permission = No tienes permiso para sobrereclamar territorio. +cmd.overclaim.success = Territorio enemigo sobrereclamado! +cmd.overclaim.not_officer = Debes ser oficial para sobrereclamar. +cmd.overclaim.not_claimed = Este chunk no esta reclamado. Usa /f claim. +cmd.overclaim.own_chunk = Tu faccion ya posee este chunk. +cmd.overclaim.ally = No puedes sobrereclamar territorio aliado. +cmd.overclaim.target_has_power = Esta faccion aun tiene suficiente poder. +cmd.overclaim.failed = No se pudo sobrereclamar. + +# ========== Comandos - Atrapado ========== +cmd.stuck.no_permission = No tienes permiso para usar /f stuck. +cmd.stuck.not_stuck = No estas atrapado - esto es territorio salvaje. +cmd.stuck.combat_tagged = No puedes usar /f stuck mientras estas en combate! +cmd.stuck.no_safe = No se encontro una ubicacion segura. +cmd.stuck.teleporting = Teletransportandote a un lugar seguro en {0} segundos. No te muevas! + +# ========== Comandos - Hogar ========== +cmd.home.no_permission = No tienes permiso para teletransportarte al hogar de la faccion. +cmd.home.no_home = Tu faccion no tiene hogar establecido. +cmd.home.combat_tagged = No puedes teletransportarte mientras estas en combate! +cmd.home.teleported = Teletransportado al hogar de la faccion! + +# ========== Comandos - Establecer Hogar ========== +cmd.sethome.no_permission = No tienes permiso para establecer el hogar de la faccion. +cmd.sethome.world_not_allowed = No se puede establecer el hogar en este mundo. +cmd.sethome.not_in_territory = Solo puedes establecer el hogar en el territorio de tu faccion. +cmd.sethome.set = Hogar de la faccion establecido! +cmd.sethome.broadcast = {0} establecio el hogar de la faccion. +cmd.sethome.not_officer = Debes ser oficial para establecer el hogar. +cmd.sethome.failed = No se pudo establecer el hogar. + +# ========== Comandos - Eliminar Hogar ========== +cmd.delhome.no_permission = No tienes permiso para eliminar el hogar de la faccion. +cmd.delhome.no_home = Tu faccion no tiene un hogar establecido. +cmd.delhome.deleted = Hogar de la faccion eliminado! +cmd.delhome.broadcast = {0} elimino el hogar de la faccion. +cmd.delhome.not_officer = Debes ser oficial para eliminar el hogar. +cmd.delhome.failed = No se pudo eliminar el hogar. + +# ========== Comandos - Relacion (Aliado/Enemigo/Neutral/Relaciones) ========== +cmd.relation.ally_no_permission = No tienes permiso para gestionar alianzas. +cmd.relation.ally_usage = Uso: /f ally +cmd.relation.ally_sent = Solicitud de alianza enviada a {0}! +cmd.relation.ally_formed = Ahora son aliados con {0}! +cmd.relation.already_ally = Ya son aliados con esa faccion. +cmd.relation.ally_failed = No se pudo enviar la solicitud de alianza. +cmd.relation.enemy_no_permission = No tienes permiso para declarar enemigos. +cmd.relation.enemy_usage = Uso: /f enemy +cmd.relation.enemy_declared = {0} ahora es tu enemigo! +cmd.relation.already_enemy = Ya son enemigos con esa faccion. +cmd.relation.max_enemies = Has alcanzado el numero maximo de enemigos. +cmd.relation.enemy_failed = No se pudo establecer como enemigo. +cmd.relation.neutral_no_permission = No tienes permiso para establecer relaciones neutrales. +cmd.relation.neutral_usage = Uso: /f neutral +cmd.relation.neutral_set = Tu faccion ahora es neutral con {0}. +cmd.relation.already_neutral = Ya son neutrales con esa faccion. +cmd.relation.neutral_failed = No se pudo establecer como neutral. +cmd.relation.cannot_self = No puedes aliarte contigo mismo. +cmd.relation.max_allies = Has alcanzado el numero maximo de aliados. +cmd.relation.view_no_permission = No tienes permiso para ver las relaciones. +cmd.relation.header = === Relaciones de la Faccion === +cmd.relation.allies_count = Aliados ({0}): +cmd.relation.enemies_count = Enemigos ({0}): +cmd.relation.list_entry = - {0} + +# ========== Comandos - Chat ========== +cmd.chat.usage = Uso: /f c [f|a|off] +cmd.chat.no_permission = No tienes permiso para ese modo de chat. +cmd.chat.mode_set = Modo de chat establecido a {0} + +# ========== Comandos - Invitaciones ========== +cmd.invites.not_officer = Debes ser oficial para gestionar invitaciones. +cmd.invites.header = === Invitaciones de la Faccion === +cmd.invites.no_pending = No hay invitaciones ni solicitudes pendientes. +cmd.invites.outgoing = Invitaciones Enviadas: +cmd.invites.outgoing_entry = {0} (invitado por {1}) +cmd.invites.requests = Solicitudes de Ingreso: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Tus Invitaciones === +cmd.invites.no_invites = No tienes invitaciones pendientes. +cmd.invites.invite_entry = {0} - Usa /f accept {1} + +# ========== Comandos - Solicitud ========== +cmd.request.no_permission = No tienes permiso para solicitar membresia en facciones. +cmd.request.already_in_named = Ya estas en {0}. +cmd.request.use_leave_hint = Usa /f leave primero si quieres unirte a otra faccion. +cmd.request.usage = Uso: /f request [mensaje] +cmd.request.faction_open = Esa faccion esta abierta! Usa /f accept {0} para unirte directamente. +cmd.request.already_requested = Ya tienes una solicitud pendiente para esa faccion. +cmd.request.has_invite = Has sido invitado a esa faccion! Usa /f accept {0} para unirte. +cmd.request.sent = Solicitud de ingreso enviada a {0}! +cmd.request.your_message = Tu mensaje: "{0}" +cmd.request.officer_review = Un oficial revisara tu solicitud. +cmd.request.officer_notify = {0} ha solicitado unirse a tu faccion! +cmd.request.officer_review_hint = Usa /f gui > Invitaciones para revisar. + +# ========== Comandos - Info ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = No tienes permiso para ver informacion de facciones. +cmd.info.faction_not_found = Faccion '{0}' no encontrada. +cmd.info.not_in_faction_hint = No estas en una faccion. Usa /f info +cmd.info.leader = Lider: {0} +cmd.info.members = Miembros: {0}/{1} +cmd.info.power = Poder: {0} +cmd.info.claims = Reclamos: {0} +cmd.info.raidable = VULNERABLE! +cmd.info.allies = Aliados: {0} +cmd.info.enemies = Enemigos: {0} +cmd.info.they_consider = Ellos te consideran: {0} +cmd.info.you_consider = Tu los consideras: {0} +cmd.info.members_no_permission = No tienes permiso para ver los miembros de la faccion. +cmd.info.members_header = === Miembros de {0} ({1}) === +cmd.info.member_online = [Conectado] +cmd.info.list_no_permission = No tienes permiso para ver la lista de facciones. +cmd.info.list_empty = No hay facciones. +cmd.info.list_header = === Facciones ({0}) === +cmd.info.list_entry = {0} - {1} miembros, {2} poder +cmd.info.list_entry_raidable = {0} - {1} miembros, {2} poder [VULNERABLE] +cmd.info.help_no_permission = No tienes permiso para ver la ayuda. +cmd.info.who_no_permission = No tienes permiso para ver informacion de jugadores. +cmd.info.who_faction = Faccion: {0} +cmd.info.who_role = Rol: {0} +cmd.info.who_joined = Ingreso: {0} +cmd.info.who_faction_none = Faccion: Ninguna +cmd.info.who_power = Poder: {0} +cmd.info.who_status = Estado: {0} +cmd.info.who_last_seen = Ultima vez visto: {0} +cmd.info.map_no_permission = No tienes permiso para ver el mapa. +cmd.info.map_header = === Mapa de Territorio === +cmd.info.map_legend = Leyenda: +Tu /Propio /Aliado /Enemigo -Salvaje +cmd.info.map_gui_hint = Usa /f gui para el mapa interactivo + +# ========== Comandos - Poder ========== +cmd.power.personal = Poder Personal: {0}/{1} +cmd.power.faction = Poder de Faccion: {0}/{1} +cmd.power.death_loss = Perdida por Muerte: {0} +cmd.power.regen = Velocidad de Regeneracion: {0}/hr +cmd.power.no_permission = No tienes permiso para ver informacion de poder. +cmd.power.header = Poder de {0}: +cmd.power.current = Actual: {0} + +# ========== Comandos - Economia ========== +cmd.economy.balance = Saldo: {0} +cmd.economy.deposited = Depositaste {0} en la tesoreria de la faccion. +cmd.economy.withdrawn = Retiraste {0} de la tesoreria de la faccion. +cmd.economy.transferred = Transferiste {0} a {1}. +cmd.economy.insufficient = Fondos insuficientes en la tesoreria de la faccion. +cmd.economy.invalid_amount = Cantidad invalida: {0} +cmd.economy.economy_disabled = La economia esta desactivada. +cmd.economy.balance_no_permission = No tienes permiso para ver saldos. +cmd.economy.treasury_unavailable = La tesoreria no esta disponible. +cmd.economy.balance_display = Tesoreria de {0}: {1} +cmd.economy.deposit_no_permission = No tienes permiso para depositar. +cmd.economy.deposit_faction_denied = No tienes permiso de faccion para depositar. +cmd.economy.deposit_usage = Uso: /f deposit +cmd.economy.amount_positive = La cantidad debe ser positiva. +cmd.economy.wallet_insufficient = No tienes suficiente dinero. Billetera: {0} +cmd.economy.wallet_withdraw_failed = No se pudo retirar de tu billetera. +cmd.economy.deposit_failed = No se pudo depositar en la tesoreria. Dinero devuelto. +cmd.economy.withdraw_no_permission = No tienes permiso para retirar. +cmd.economy.withdraw_faction_denied = No tienes permiso de faccion para retirar. +cmd.economy.withdraw_usage = Uso: /f withdraw +cmd.economy.withdraw_limit_denied = Retiro denegado: {0} +cmd.economy.wallet_deposit_failed = Advertencia: No se pudo depositar en tu billetera. Contacta a un admin. +cmd.economy.withdraw_limit_exceeded = Retiro denegado: limite excedido. +cmd.economy.withdraw_failed = Retiro fallido: {0} +cmd.economy.transfer_no_permission = No tienes permiso para transferir. +cmd.economy.transfer_faction_denied = No tienes permiso de faccion para transferir. +cmd.economy.transfer_usage = Uso: /f money transfer +cmd.economy.transfer_self = No puedes transferir a tu propia faccion. +cmd.economy.transfer_limit_denied = Transferencia denegada: {0} +cmd.economy.transfer_limit_exceeded = Transferencia denegada: limite excedido. +cmd.economy.transfer_failed = Transferencia fallida: {0} +cmd.economy.log_no_permission = No tienes permiso para ver el registro de transacciones. +cmd.economy.log_header = Registro de Transacciones (pagina {0}/{1}) +cmd.economy.log_empty = No se encontraron transacciones. +cmd.economy.money_help_header = Comandos de Tesoreria: +cmd.economy.money_help_balance = /f money balance [faccion] - Ver saldo +cmd.economy.money_help_deposit = /f money deposit - Depositar en la tesoreria +cmd.economy.money_help_withdraw = /f money withdraw - Retirar de la tesoreria +cmd.economy.money_help_transfer = /f money transfer - Transferir entre facciones +cmd.economy.money_help_log = /f money log [pagina] [tipo] - Ver historial de transacciones + +# ========== Proteccion - Frases de Accion ========== +protection.action.generic = No puedes hacer eso +protection.action.build = No puedes construir ni romper bloques +protection.action.interact = No puedes interactuar con eso +protection.action.door = No puedes usar puertas +protection.action.container = No puedes abrir contenedores +protection.action.bench = No puedes usar estaciones de crafteo +protection.action.processing = No puedes usar estaciones de procesamiento +protection.action.seat = No puedes usar asientos +protection.action.light = No puedes encender o apagar luces +protection.action.teleporter = No puedes usar teletransportadores +protection.action.crate = No puedes usar cajas +protection.action.tame = No puedes domesticar criaturas +protection.action.npc = No puedes interactuar con NPCs +protection.action.mount = No puedes montar criaturas +protection.action.pve = No puedes danar criaturas +protection.action.item_drop = No puedes soltar objetos +protection.action.item_pickup = No puedes recoger objetos + +# ========== Proteccion - Razones de Denegacion ========== +protection.denied.safezone = {0} en una Zona Segura. +protection.denied.warzone = {0} en una Zona de Guerra. +protection.denied.enemy_claim = {0} en territorio enemigo. +protection.denied.claimed = {0} en territorio reclamado. +protection.denied.here = {0} aqui. +protection.denied.zone = {0} en esta zona. +protection.denied.faction_perm = {0} aqui. (Permiso de faccion: {1}) +protection.denied.ally_territory = {0} aqui. (Territorio aliado) +protection.denied.error = Error de proteccion - accion bloqueada por seguridad. + +# ========== Proteccion - PvP ========== +protection.pvp.safezone = El PvP esta desactivado en Zonas Seguras. +protection.pvp.same_faction = No puedes atacar a miembros de tu faccion. +protection.pvp.ally = No puedes atacar a aliados. +protection.pvp.spawn_protected = Ese jugador tiene proteccion de aparicion. +protection.pvp.territory_disabled = El PvP esta desactivado en este territorio. +protection.pvp.generic = No puedes atacar a este jugador. + +# ========== Proteccion - Dano a Entidades ========== +protection.mob_damage_disabled = El dano a mobs esta desactivado en esta zona. +protection.pve_damage_disabled = El dano PvE esta desactivado en esta zona. +protection.pve_territory_denied = No puedes danar mobs en este territorio. + +# ========== Proteccion - Etiqueta de Combate ========== +protection.combat_tag_command = No puedes usar ese comando mientras estas en combate. + +# ========== Anuncios del Servidor ========== +# Estos se transmiten a todos los jugadores conectados para eventos significativos de facciones. +# {0}, {1} = valores dinamicos (nombres de facciones, nombres de jugadores) +server_announce.faction_created = {0} ha fundado la faccion {1}! +server_announce.faction_disbanded = La faccion {0} ha sido disuelta! +server_announce.leadership_transfer = {0} ahora es el lider de {1}! +server_announce.overclaim = {0} ha sobrereclamado territorio de {1}! +server_announce.war_declared = {0} ha declarado la guerra a {1}! +server_announce.alliance_formed = {0} y {1} ahora son aliados! +server_announce.alliance_broken = {0} y {1} ya no son aliados! + +# ========== Sistema de Teletransporte ========== +teleport.cooldown_wait = Debes esperar {0} antes de teletransportarte de nuevo. +teleport.warmup_start = Teletransportandote al hogar de la faccion en {0} segundos... +teleport.combat_cancelled = Teletransporte cancelado - estas en combate! +teleport.success_default = Teletransportado al hogar de la faccion! +teleport.no_home = Tu faccion no tiene hogar establecido. +teleport.world_not_found = Mundo no encontrado. +teleport.failed = El teletransporte fallo. +teleport.countdown = Teletransporte en {0} segundos... +teleport.countdown_one = Teletransporte en 1 segundo... +teleport.moved_cancelled = Teletransporte cancelado - te moviste! +teleport.damage_cancelled = Teletransporte cancelado - recibiste dano! +teleport.mount_teleport_blocked = No puedes teletransportarte a esa zona mientras estas montado. +teleport.mount_entry_blocked = No puedes entrar a esta zona mientras estas montado. + +# ========== Visualizacion del Chat ========== +chat.display.public = Publico +chat.display.faction = Faccion +chat.display.ally = Aliado diff --git a/src/main/resources/Server/Languages/es-ES/hyperfactions_admin.lang b/src/main/resources/Server/Languages/es-ES/hyperfactions_admin.lang new file mode 100644 index 00000000..605b811f --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Traducciones al Espanol +# Formato: clave = valor +# Nota: Las claves se prefijan automaticamente con "hyperfactions_admin." por el I18nModule de Hytale + +# ========== Barra de Navegacion de Admin ========== +nav.dashboard = Panel +nav.actions = Acciones +nav.factions = Facciones +nav.players = Jugadores +nav.economy = Economia +nav.zones = Zonas +nav.config = Configuracion +nav.backups = Respaldos +nav.log = Registro +nav.updates = Actualizaciones +nav.help = Ayuda +nav.version = Version + +# ========== Etiquetas Comunes de Admin ========== +common.faction_not_found = Faccion No Encontrada +common.no_faction = Sin Faccion +common.not_set = Sin establecer +common.on = Activado +common.off = Desactivado +common.enable = Activar +common.disable = Desactivar +common.none_paren = (Ninguno) +common.invalid_faction = Faccion invalida. +common.leader_prefix = Lider: {0} +common.members_suffix = {0} miembros +common.claims_suffix = {0} reclamos +common.factions_suffix = {0} facciones +common.players_suffix = {0} jugadores +common.chunks_suffix = {0} chunks +common.entries_suffix = {0} entradas +common.found_suffix = {0} encontrados +common.power_format = {0}/{1} poder +common.raidable = Vulnerable +common.protected = Protegida +common.no_description = Sin descripcion. +common.officers_more = +{0} mas +common.custom_max = (max personalizado) +common.default_max = (max por defecto) +common.now = Ahora +common.ago_suffix = hace {0} +common.just_now = ahora mismo +common.no_membership_history = Sin historial de membresia + +# ========== Panel de Admin ========== +dashboard.factions_prefix = Facciones: {0} +dashboard.members_prefix = Total Miembros: {0} +dashboard.claims_prefix = Total Reclamos: {0} + +# ========== Acciones de Admin ========== +actions.confirm_reset = Confirmar Reinicio? +actions.confirm_trigger = Confirmar Ejecucion? +actions.kd_reset = K/D reiniciado para {0} jugadores. +actions.kd_reset_failed = No se pudo reiniciar K/D: {0} +actions.upkeep_unavailable = El procesador de mantenimiento no esta disponible. +actions.upkeep_triggered = Cobro de mantenimiento ejecutado. +actions.upkeep_failed = Mantenimiento fallido: {0} + +# ========== Admin Disolver ========== +disband.faction_gone = La faccion ya no existe. +disband.success = La faccion '{0}' ha sido disuelta. +disband.failed = No se pudo disolver: {0} +disband.no_leader = La faccion no tiene lider, no se puede disolver. + +# ========== Admin Desreclamar Todo ========== +unclaim.removed = [Admin] Se eliminaron {0} reclamos de {1}. +unclaim.no_claims = {0} no tenia reclamos para eliminar. + +# ========== Lista de Facciones de Admin ========== +factions.home_not_set = Sin establecer +factions.teleported = Teletransportado al hogar de {0}. +factions.no_home = La faccion no tiene hogar establecido. +factions.world_not_found = Mundo destino no encontrado. + +# ========== Info de Faccion de Admin ========== +info.faction_gone = Esta faccion ya no existe. + +# ========== Miembros de Faccion de Admin ========== +members.sort_role = Rol +members.sort_online = Conectado +members.sort_name = Nombre +members.sort_power = Poder +members.promoted = [Admin] {0} promovido a {1}. +members.demoted = [Admin] {0} degradado a {1}. +members.kicked = [Admin] {0} expulsado de la faccion. + +# ========== Relaciones de Faccion de Admin ========== +relations.allies_header = ALIADOS ({0}) +relations.enemies_header = ENEMIGOS ({0}) +relations.no_allies = Sin aliados. +relations.no_enemies = Sin enemigos. +relations.neutral_count = {0} facciones neutrales +relations.since_today = Desde: hoy +relations.since_one_day = Desde: hace 1 dia +relations.since_days = Desde: hace {0} dias +relations.set_ally = [Admin] Estado de alianza mutua establecido con {0}. +relations.set_enemy = Estado de enemistad mutua establecido con {0}. +relations.set_neutral = [Admin] Estado neutral mutuo establecido con {0}. + +# ========== Ajustes de Faccion de Admin ========== +settings.locked = Este ajuste esta bloqueado por la configuracion del servidor. +settings.perm_toggled = {0} establecido a {1}. +settings.color_changed = Color de faccion establecido a {0}. +settings.recruitment_set = Reclutamiento establecido a {0}. +settings.no_home = [Admin] Esta faccion no tiene hogar establecido. +settings.home_cleared = Hogar de faccion eliminado para {0}. + +# ========== Etiquetas de Ordenamiento ========== +sort.power = Poder +sort.name = Nombre +sort.members = Miembros +sort.balance = Saldo + +# ========== Jugadores de Admin ========== +players.sort_last_online = Ultima Conexion +players.sort_faction = Faccion +players.sort_online = Conectado +players.not_online = El jugador no esta conectado. +players.world_not_found = Mundo destino no encontrado. +players.teleported = [Admin] Teletransportado a {0}. + +# ========== Info de Jugador de Admin ========== +playerinfo.disband_faction = Disolver Faccion +playerinfo.kick_leader = Expulsar Lider +playerinfo.enter_valid_number = Ingresa un numero valido. +playerinfo.enter_valid_positive = Ingresa un numero positivo valido. +playerinfo.faction_gone = La faccion ya no existe. +playerinfo.kd_reset = K/D reiniciado para {0}. +playerinfo.kicked_success = {0} expulsado de {1}. +playerinfo.kicked_leader = Lider {0} expulsado. Liderazgo transferido a {1}. +playerinfo.disbanded_kick = [Admin] Faccion '{0}' disuelta (ultimo miembro expulsado). + +# ========== Economia de Admin ========== +economy.no_data = No hay facciones con datos economicos. +economy.amount_zero = La cantidad no puede ser cero. +economy.enter_amount = Ingresa una cantidad. +economy.invalid_number = Numero invalido: {0} +economy.error = Ocurrio un error. +economy.balance_negative = El saldo no puede ser negativo. +economy.failed = Fallo: {0} +economy.bulk_complete = Ajuste masivo completado: {0} {1} a {2} facciones. +economy.bulk_failures = ({0} fallaron) + +# ========== Zonas de Admin ========== +zones.not_found = Zona no encontrada. +zones.invalid_id = ID de zona invalido. +zones.deleted = Zona {0} eliminada. +zones.delete_failed = No se pudo eliminar la zona: {0} +zones.no_chunks = Sin chunks +zones.chunks_suffix = {0} ({1} chunks) + +# ========== Asistente de Creacion de Zona ========== +wizard.enter_name = Ingresa un nombre para la zona. +wizard.name_too_short = El nombre de zona debe tener al menos {0} caracteres. +wizard.name_too_long = El nombre de zona no puede exceder {0} caracteres. +wizard.name_taken = Ya existe una zona con este nombre. +wizard.radius_range = El radio debe estar entre 1 y {0}. +wizard.create_failed = No se pudo crear la zona: {0} +wizard.created_not_found = Zona creada pero no se pudo encontrar. +wizard.created = {0} '{1}' creada! +wizard.chunk_claimed = Chunk reclamado ({0}, {1}). +wizard.chunk_failed = No se pudo reclamar el chunk actual: {0} +wizard.radius_claimed = {0} chunks reclamados en un radio de {1} de {2}. +wizard.radius_no_claims = No se pudieron reclamar chunks (el area puede estar ocupada). +wizard.no_claims = Zona creada sin reclamos. +wizard.chunks_preview = ~{0} chunks + +# ========== Renombrar Zona ========== +zone_rename.zone_gone = La zona ya no existe. +zone_rename.enter_name = Ingresa un nombre para la zona. +zone_rename.too_short = El nombre de zona debe tener al menos {0} caracter. +zone_rename.too_long = El nombre de zona no puede exceder {0} caracteres. +zone_rename.same_name = Ese ya es el nombre de esta zona. +zone_rename.renamed = [Admin] Zona renombrada de {0} a {1}! +zone_rename.name_taken = Ya existe una zona con ese nombre. +zone_rename.invalid_name = Nombre de zona invalido. +zone_rename.rename_failed = No se pudo renombrar la zona: {0} + +# ========== Cambiar Tipo de Zona ========== +zone_type.zone_gone = La zona ya no existe. +zone_type.changed = [Admin] {0} cambiada de {1} a {2} ({3}). +zone_type.failed = No se pudo cambiar el tipo de zona: {0} +zone_type.flags_reset = flags reiniciados +zone_type.flags_kept = flags conservados + +# ========== Flags de Integracion de Zona ========== +zone_int.zone_not_found = Zona No Encontrada +zone_int.no_plugin = (sin plugin) +zone_int.default = (por defecto) +zone_int.custom = (personalizado) + +# Etiquetas de interfaz de flags de integracion +gui.zint_cat_gravestones = Tumbas +gui.zint_gravestones_desc = Cuando esta EN, otros jugadores pueden saquear tumbas. Los duenos siempre pueden. +gui.zint_cat_world_map = Mapa del Mundo +gui.zint_world_map_desc = Sobrescribir ocultamiento en mapa para jugadores en esta zona. Cuando esta habilitado, selecciona quien puede ver jugadores en esta zona. +gui.zint_visibility_label = Nivel de Visibilidad: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Restablecer Valores +gui.zint_back_to_flags = Volver a Flags +gui.zint_map_vis_faction = Solo Faccion +gui.zint_map_vis_ally = Faccion + Aliados +gui.zint_map_vis_all = Todos los Jugadores + +# ========== Registro de Actividad ========== +log.all_types = Todos los Tipos +log.no_logs = No hay registros de actividad que coincidan con los filtros. + +# ========== Pagina de Version ========== +version.active = Activo +version.not_found = No Encontrado +version.not_detected = No Detectado +version.not_installed = No Instalado +version.active_version = Activo (v{0}) +version.active_compatible = Activo (compatible) +version.active_claims_only = Activo (solo reclamos) +version.installed_no_perm = Instalado (sin proveedor de permisos) +version.active_provider = Activo ({0}) + +# ========== Pagina Principal de Admin ========== +main.reload_hint = Usa /f reload para recargar la configuracion. +main.unclaim_hint = Usa /f admin unclaim {0} para desreclamar los {1} chunks. + +# ========== Flags/Ajustes de Zona ========== +zflags.invalid_flag = Flag invalido. +zflags.zone_not_found = Zona no encontrada. +zflags.conflict = (conflicto) +zflags.mixin = (mixin) +zflags.reset_int = Flags de integracion reiniciados a valores por defecto. +zflags.reset_all = Todos los flags reiniciados a valores por defecto. +zflags.reset_failed = No se pudieron reiniciar los flags: {0} +zflags.back_to_settings = Volver a Ajustes + +# Etiquetas de interfaz de ajustes de zona +gui.zset_cat_combat = Combate +gui.zset_cat_damage = Dano +gui.zset_cat_death = Muerte +gui.zset_cat_building = Construccion +gui.zset_cat_interaction = Interaccion +gui.zset_cat_transport = Transporte +gui.zset_cat_items = Objetos +gui.zset_cat_spawning = Aparicion de Mobs +gui.zset_cat_mob_clear = Limpieza de Mobs +gui.zset_children_hint = (hijos solo aplican cuando el padre esta EN) +gui.zset_reset_defaults = Restablecer Valores +gui.zset_integration_flags = Flags de Integracion +gui.zset_back_to_zones = Volver a Zonas +gui.zset_chunks = {0} chunks + +# Nombres de Flags de Zona +gui.zflag_pvp_enabled = PvP Activado +gui.zflag_friendly_fire = Fuego Amigo +gui.zflag_friendly_fire_faction = Dano de Faccion +gui.zflag_friendly_fire_ally = Dano de Aliado +gui.zflag_projectile_damage = Dano de Proyectil +gui.zflag_mob_damage = Recibir Dano de Mob +gui.zflag_pve_damage = Dar Dano a Mob +gui.zflag_fall_damage = Dano por Caida +gui.zflag_environmental_damage = Dano Ambiental +gui.zflag_explosion_damage = Dano de Explosion +gui.zflag_fire_spread = Propagacion de Fuego +gui.zflag_keep_inventory = Conservar Inventario +gui.zflag_power_loss = Perdida de Poder +gui.zflag_build_allowed = Construccion Permitida +gui.zflag_block_place = Colocar Bloques +gui.zflag_hammer_use = Uso de Martillo +gui.zflag_builder_tools_use = Herr. de Constructor +gui.zflag_block_interact = Interaccion de Bloques +gui.zflag_door_use = Uso de Puertas +gui.zflag_container_use = Uso de Contenedores +gui.zflag_bench_use = Uso de Bancos +gui.zflag_processing_use = Uso de Procesadores +gui.zflag_seat_use = Uso de Asientos +gui.zflag_mount_use = Uso de Monturas +gui.zflag_light_use = Uso de Luces +gui.zflag_npc_use = Interaccion con NPC +gui.zflag_crate_pickup = Recoger Cajas +gui.zflag_crate_place = Colocar Cajas +gui.zflag_npc_tame = Domesticar NPC +gui.zflag_npc_interact = Interactuar con NPC +gui.zflag_teleporter_use = Uso de Teletransporte +gui.zflag_portal_use = Uso de Portales +gui.zflag_mount_entry = Entrada a Montura +gui.zflag_item_drop = Soltar Objetos +gui.zflag_item_pickup = Recoger Automatico +gui.zflag_item_pickup_manual = Recoger con F +gui.zflag_invincible_items = Objetos Invencibles +gui.zflag_mob_spawning = Aparicion de Mobs +gui.zflag_hostile_mob_spawning = Mobs Hostiles +gui.zflag_passive_mob_spawning = Mobs Pasivos +gui.zflag_neutral_mob_spawning = Mobs Neutrales +gui.zflag_npc_spawning = Aparicion de NPC +gui.zflag_mob_clear = Limpieza de Mobs +gui.zflag_hostile_mob_clear = Limpiar Mobs Hostiles +gui.zflag_passive_mob_clear = Limpiar Mobs Pasivos +gui.zflag_neutral_mob_clear = Limpiar Mobs Neutrales +gui.zflag_gravestone_access = Saquear Tumbas Ajenas +gui.zflag_show_on_map = Mostrar en Mapa +gui.zflag_essentials_homes = Uso de Hogar +gui.zflag_essentials_warps = Uso de Warps +gui.zflag_essentials_kits = Reclamo de Kits + +# ========== Propiedades de Zona ========== +zprop.current_custom = Actual: "{0}" (personalizado) +zprop.current_default = Actual: "{0}" (por defecto) +zprop.pvp_disabled = PvP Desactivado +zprop.pvp_enabled = PvP Activado +zprop.name_empty = El nombre no puede estar vacio. +zprop.renamed = Zona renombrada a "{0}". +zprop.name_taken = Ya existe una zona con ese nombre. +zprop.name_invalid = Nombre invalido (maximo 32 caracteres). +zprop.rename_failed = No se pudo renombrar: {0} +zprop.upper_empty = El titulo superior no puede estar vacio. Usa Limpiar para reiniciar. +zprop.upper_set = Titulo superior establecido. +zprop.upper_reset = Titulo superior reiniciado al valor por defecto. +zprop.lower_empty = El titulo inferior no puede estar vacio. Usa Limpiar para reiniciar. +zprop.lower_set = Titulo inferior establecido. +zprop.lower_reset = Titulo inferior reiniciado al valor por defecto. + +# ========== Relaciones Adicionales ========== +relations.failed = Fallo: {0} + +# ========== Miembros Adicionales ========== +members.never = Nunca +members.teleported = [Admin] Teletransportado a {0}. + +# ========== Info de Jugador Adicional ========== +playerinfo.records = {0} registros +playerinfo.joined_date = Ingreso: {0} +playerinfo.current = Actual +playerinfo.left_date = Salio: {0} + +# ========== Mapa de Zona ========== +map.world_warning = ADVERTENCIA: Estas en '{0}' - la zona esta en '{1}' +map.position = Tu Posicion: Chunk ({0}, {1}) +map.zone_gone = La zona ya no existe. +map.claimed = Chunk ({0}, {1}) reclamado para {2}. +map.claim_failed = No se pudo reclamar el chunk: {0} +map.unclaimed = Chunk ({0}, {1}) desreclamado de {2}. +map.unclaim_failed = No se pudo desreclamar el chunk: {0} +map.chunk_belongs = Este chunk pertenece a {0}. +map.chunk_faction = Este chunk esta reclamado por una faccion. +map.chunk_protected = Este chunk esta en una region protegida. +map.another_zone = otra zona + +# ========== Claves de Etiquetas GUI (localizacion de texto en .ui) ========== + +# Titulos de Pagina +gui.title_dashboard = Panel de Admin +gui.title_main = Admin de Facciones +gui.title_actions = Admin: Acciones del Servidor +gui.title_factions = Gestion de Facciones +gui.title_players = Gestion de Jugadores +gui.title_economy = Admin: Economia del Servidor +gui.title_zones = Gestion de Zonas +gui.title_backups = Respaldos +gui.title_config = Configuracion +gui.title_help = Ayuda de Admin +gui.title_updates = Actualizaciones +gui.title_version = Version e Integraciones +gui.title_activity_log = Admin: Registro de Actividad +gui.title_player_info = Admin: Info del Jugador +gui.title_faction_info = Admin: Info de Faccion +gui.title_faction_settings = Admin: Ajustes de Faccion +gui.title_faction_members = Admin: Miembros +gui.title_faction_relations = Admin: Relaciones +gui.title_zone_map = Editor de Mapa de Zona +gui.title_zone_settings = Admin: Ajustes de Zona +gui.title_zone_properties = Admin: Propiedades de Zona +gui.title_bulk_economy = Ajuste Masivo de Tesoreria +gui.title_economy_adjust = Admin: Economia + +# Etiquetas del Panel +gui.dash_server_stats = Estadisticas del Servidor +gui.dash_factions = Facciones +gui.dash_total_members = Total Miembros +gui.dash_total_claims = Total Reclamos +gui.dash_zones = Zonas +gui.dash_safe_war = segura / guerra +gui.dash_total_power = Poder Total +gui.dash_avg_power = Poder Prom/Faccion +gui.dash_total_economy = Economia Total +gui.dash_wealthiest = Mas Rica +gui.dash_avg_balance = Saldo Promedio +gui.dash_protection_bypass = Bypass de Proteccion: + +# Botones y etiquetas comunes +gui.search = Buscar: +gui.sort = Ordenar: +gui.prev = < Anterior +gui.next = Siguiente > +gui.back = Volver +gui.done = Listo +gui.cancel = Cancelar +gui.apply = Aplicar +gui.set = Establecer +gui.reset = Reiniciar +gui.coming_soon = Proximamente +gui.zones_btn = Zonas +gui.reload_btn = Recargar +gui.all = Todas +gui.safe = Segura +gui.war = Guerra +gui.create_zone = + Crear + +# Etiquetas de pagina de acciones +gui.act_combat_stats = Estadisticas de Combate +gui.act_combat_desc = Reiniciar muertes y asesinatos para TODOS los jugadores del servidor. Esta accion no se puede deshacer. +gui.act_reset_kd = Reiniciar Todos K/D +gui.act_economy = Economia +gui.act_economy_desc = Agregar o quitar dinero de TODAS las tesorerias de facciones a la vez. +gui.act_bulk_adjust = Agregar/Quitar Masivo +gui.act_upkeep_collection = Cobro de Mantenimiento +gui.act_upkeep_desc = Ejecutar manualmente el cobro de mantenimiento para todas las facciones ahora, sin importar el temporizador programado. +gui.act_trigger_upkeep = Ejecutar Mantenimiento + +# Etiquetas de paginas placeholder +gui.backup_heading = Gestion de Respaldos +gui.backup_desc1 = Crear, restaurar y gestionar respaldos de datos de facciones. +gui.backup_desc2 = Los respaldos automaticos se guardan en la carpeta data/backups. +gui.config_heading = Editor de Configuracion +gui.config_desc1 = Configurar los ajustes de HyperFactions directamente desde la GUI. +gui.config_desc2 = Por ahora, usa /f reload para recargar los cambios de configuracion. +gui.help_heading = Documentacion de Admin +gui.help_desc1 = Ver documentacion de admin y referencia de comandos. +gui.help_desc2 = Para ayuda, visita la wiki de HyperFactions. +gui.updates_heading = Centro de Actualizaciones +gui.updates_desc1 = Buscar nuevas versiones y ver changelogs. +gui.updates_desc2 = Visita la pagina de HyperFactions para las ultimas actualizaciones. + +# Etiquetas de pagina de version +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Servidor Hytale +gui.ver_java = Java +gui.ver_permissions = PERMISOS +gui.ver_placeholders = PLACEHOLDERS +gui.ver_economy_section = ECONOMIA +gui.ver_protection = PROTECCION +gui.ver_disabled = Desactivado + +# Encabezados de columna (compartidos entre paginas) +gui.col_faction = Faccion +gui.col_balance = Saldo +gui.col_members = Miembros +gui.col_actions = Acciones +gui.col_time = Hora +gui.col_type = Tipo +gui.col_message = Mensaje + +# Etiquetas de pagina de economia +gui.econ_total_balance = Saldo Total +gui.econ_factions = Facciones +gui.econ_avg_balance = Saldo Promedio +gui.econ_in_grace = En Gracia +gui.econ_collected = Cobrado (24h) +gui.econ_next_collection = Proximo Cobro +gui.econ_no_data = No hay facciones con datos economicos. + +# Etiquetas de registro de actividad +gui.log_type = Tipo: +gui.log_time = Hora: +gui.log_player = Jugador: +gui.log_no_logs = No hay registros de actividad que coincidan con los filtros. + +# Etiquetas de info de jugador +gui.plr_first_joined = Primera conexion: +gui.plr_last_online = Ultima conexion: +gui.plr_uuid = UUID: +gui.plr_faction = Faccion: +gui.plr_role = Rol: +gui.plr_view_faction = Ver Faccion +gui.plr_power = Poder +gui.plr_max_power = Poder Maximo +gui.plr_set_power = Establecer +gui.plr_reset_power = Reiniciar +gui.plr_set_max = Establecer +gui.plr_reset_max = Reiniciar +gui.plr_no_power_loss = Sin Perdida de Poder +gui.plr_no_claim_decay = Sin Decaimiento de Reclamos +gui.plr_kills = Asesinatos +gui.plr_deaths = Muertes +gui.plr_kdr = Ratio K/D +gui.plr_reset_kd = Reiniciar K/D +gui.plr_kick = Expulsar +gui.plr_membership_history = Historial de Membresia +gui.plr_no_faction_label = No esta en una faccion +gui.plr_power_management = Gestion de Poder +gui.plr_combat_stats = Estadisticas de Combate +gui.plr_bypass_flags = Flags de Bypass +gui.plr_admin_controls = Controles de Admin +gui.plr_kd_subtitle = K / D +gui.plr_max_prefix = Max: +gui.plr_view = Ver +gui.plr_kick_from_faction = Expulsar de Faccion +gui.plr_set_max_btn = Establecer Max +gui.plr_combat = Combate +gui.plr_reason_active = ACTIVO +gui.plr_reason_left = SALIO +gui.plr_reason_kicked = EXPULSADO +gui.plr_reason_disbanded = DISUELTO + +# Etiquetas de entrada de miembros +gui.mem_label_power = Poder: +gui.mem_label_joined = Ingreso: +gui.mem_label_last_death = Ultima Muerte: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Info +gui.mem_btn_teleport = Teletransportar +gui.mem_btn_promote = Promover +gui.mem_btn_demote = Degradar +gui.mem_btn_kick = Expulsar +gui.econ_not_enabled = El sistema de economia no esta habilitado. +gui.info_more = +{0} mas +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7d +gui.log_time_all = Todos +gui.shape_circular = circular +gui.shape_square = cuadrado +gui.nav_title = Panel de Admin +gui.econ_btn_adjust = Ajustar +gui.econ_btn_info = Info + +# Etiquetas de info de faccion +gui.fac_description = Descripcion +gui.fac_power = Poder +gui.fac_claims = Reclamos +gui.fac_members = Miembros +gui.fac_recruitment = Reclutamiento +gui.fac_founded = Fundada +gui.fac_allies = Aliados +gui.fac_enemies = Enemigos +gui.fac_raidable = Estado de Vulnerabilidad +gui.fac_treasury = Tesoreria +gui.fac_leader = Lider +gui.fac_officers = Oficiales +gui.fac_view_members = Ver Miembros +gui.fac_view_relations = Ver Relaciones +gui.fac_view_settings = Ajustes +gui.fac_disband = Disolver Faccion +gui.fac_power_management = Gestion de Poder +gui.fac_reset_all_power = Reiniciar Todo el Poder +gui.fac_econ_adjust = Ajustar Saldo +gui.fac_econ_view_log = Ver Registro de Transacciones +gui.fac_current_max = actual / max +gui.fac_claimed_max = reclamado / max +gui.fac_relations = Relaciones +gui.fac_ally_enemy = aliado / enemigo +gui.fac_status = Estado +gui.fac_info = Info +gui.fac_treasury_balance = saldo de tesoreria +gui.fac_leadership = Liderazgo +gui.fac_leader_label = Lider: +gui.fac_officers_label = Oficiales: +gui.fac_econ_mgmt = Gestion de Economia +gui.fac_danger_zone = Zona de Peligro +gui.fac_view_treasury = Ver Tesoreria + +# Etiquetas de ajustes de faccion +gui.set_editing = Editando: +gui.set_general = Ajustes Generales +gui.set_name = Nombre +gui.set_tag = Etiqueta +gui.set_description = Descripcion +gui.set_recruitment = Reclutamiento +gui.set_home = Ubicacion del Hogar +gui.set_clear_home = Limpiar Hogar +gui.set_disband_faction = Disolver Faccion +gui.set_faction_color = Color de Faccion +gui.set_admin_override = [Override de Admin] +gui.set_territory_perms = Permisos de Territorio +gui.set_mob_spawning = Generacion de Mobs +gui.set_faction_settings = Ajustes de Faccion +gui.set_name_label = Nombre: +gui.set_tag_label = Etiqueta: +gui.set_desc_label = Desc: +gui.set_edit = Editar +gui.set_status_label = Estado: +gui.set_location_label = Ubicacion: +gui.set_danger_zone = Zona de Peligro +gui.set_irreversible = Esta accion es irreversible. +gui.set_lock_hint = Algunas opciones pueden estar bloqueadas por el servidor y no aceptaran cambios. +gui.set_appearance = Apariencia +gui.set_color_label = Color: +gui.set_mob_sub = (hijos desactivados cuando el maestro esta apagado) +gui.set_back_to_info = Volver a Info +gui.set_col_out = Ext +gui.set_col_ally = Ali +gui.set_col_mem = Mie +gui.set_col_off = Ofi +gui.set_cat_building = CONSTRUCCION +gui.set_cat_interaction = INTERACCION +gui.set_cat_interact_sub = (hijos desactivados cuando Todo esta apagado) +gui.set_cat_other = OTROS +gui.set_perm_break = Romper +gui.set_perm_place = Colocar +gui.set_perm_all = Todo +gui.set_perm_door = Puerta +gui.set_perm_chest = Cofre +gui.set_perm_bench = Banco +gui.set_perm_processing = Procesamiento +gui.set_perm_seat = Asiento +gui.set_perm_transport = Transporte +gui.set_perm_crate_use = Uso de Caja +gui.set_perm_npc_tame = Domar NPC +gui.set_perm_pve_damage = Dano PvE +gui.set_perm_mob_spawning = Generacion de Mobs +gui.set_perm_hostile = Mobs Hostiles +gui.set_perm_passive = Mobs Pasivos +gui.set_perm_neutral = Mobs Neutrales +gui.set_perm_pvp = PvP en Territorio +gui.set_perm_officers_edit = Oficiales pueden editar + +# Etiquetas de relaciones de faccion +gui.rel_subtitle = Gestionar relaciones de faccion (sin aprobacion) +gui.rel_set_new = Establecer Nueva Relacion +gui.rel_btn_ally = Aliado +gui.rel_btn_neutral = Neutral +gui.rel_btn_enemy = Enemigo + +# Etiquetas de pagina de zonas +gui.zone_sort_name = Nombre +gui.zone_sort_type = Tipo +gui.zone_sort_chunks = Chunks +gui.zone_sort_world = Mundo +gui.zone_count_format = {0} {1}zonas ({2} chunks) + +# Etiquetas de mapa de zona +gui.map_zone_chunk = Chunk de Zona +gui.map_empty = Vacio +gui.map_other_zone = Otra Zona +gui.map_faction_claim = Reclamo de Faccion +gui.map_protected = Protegido +gui.map_your_pos = Tu Posicion +gui.map_click_hint = Clic para reclamar/desreclamar chunks +gui.map_legend_zone_safe = Esta Zona (Segura) +gui.map_legend_zone_war = Esta Zona (Guerra) +gui.map_legend_other_safe = Otra Zona Segura +gui.map_legend_other_war = Otra Zona de Guerra +gui.map_legend_faction = Reclamo de Faccion +gui.map_legend_unclaimed = Sin Reclamar +gui.map_legend_you_here = Estas aqui +gui.map_action_hint = Clic izq: Reclamar para zona | Clic der: Desreclamar de zona +gui.map_done = Listo + +# Etiquetas de propiedades de zona +gui.zprop_general = General +gui.zprop_zone_name = Nombre de Zona +gui.zprop_zone_type = Tipo de Zona +gui.zprop_change_type = Cambiar Tipo +gui.zprop_notifications = Notificaciones +gui.zprop_show_entry = Mostrar Notificacion de Entrada +gui.zprop_upper_title = Titulo Superior +gui.zprop_upper_desc = Titulo Superior (texto pequeno sobre nombre de zona) +gui.zprop_lower_title = Titulo Inferior +gui.zprop_lower_desc = Titulo Inferior (texto grande del nombre de zona) +gui.zprop_edit_flags = Editar Flags +gui.zprop_back_to_zones = Volver a Zonas +gui.save = Guardar +gui.clear = Limpiar + +# Etiquetas de economia masiva +gui.bulk_header = Ajustar Todas las Tesorerias +gui.bulk_factions_label = Facciones: +gui.bulk_total_label = Saldo Total: +gui.bulk_amount_hint = Cantidad (positivo para agregar, negativo para quitar): +gui.bulk_hint = Esto se aplicara a cada faccion con tesoreria +gui.bulk_warning_msg = Advertencia: Esta accion afecta TODAS las facciones y no se puede deshacer. +gui.bulk_apply_all = Aplicar a Todas +gui.bulk_operation = Operacion +gui.bulk_add = Agregar +gui.bulk_remove = Quitar +gui.bulk_amount = Cantidad +gui.bulk_warning = Esto afectara TODAS las tesorerias de facciones. +gui.bulk_preview = Vista Previa + +# Etiquetas de ajuste de economia +gui.ecadj_header = Ajustar Saldo de Tesoreria +gui.ecadj_faction_label = Faccion: +gui.ecadj_current_balance = Saldo Actual: +gui.ecadj_amount_hint = Cantidad (positivo para agregar, negativo para deducir): +gui.ecadj_preview_hint = Ingresa un numero para previsualizar el cambio +gui.ecadj_adjustment = Ajuste: +gui.ecadj_set_balance = Establecer Saldo +gui.ecadj_confirm = Confirmar +/- +gui.ecadj_operation = Operacion +gui.ecadj_add = Agregar +gui.ecadj_remove = Quitar +gui.ecadj_set_to = Establecer En +gui.ecadj_amount = Cantidad +gui.ecadj_new_balance = Nuevo Saldo: + +# Etiquetas de integraciones en pagina de version +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Nativo +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Gravestones +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Tesoreria + +# Etiquetas de modal de desreclamar todo +gui.unclaim_title = Desreclamar Todo el Territorio +gui.unclaim_confirm_msg1 = Estas seguro de que deseas desreclamar todos los +gui.unclaim_confirm_msg2 = de +gui.unclaim_warning = Esta accion no se puede deshacer! +gui.unclaim_all = Desreclamar Todo + +# Etiquetas de modal de renombrar zona +gui.zren_title = Renombrar Zona +gui.zren_current = Actual: +gui.zren_new_name = Nuevo Nombre: + +# Etiquetas de modal de cambiar tipo de zona +gui.ztype_title = Cambiar Tipo de Zona +gui.ztype_zone_label = Zona: +gui.ztype_current = Actual: +gui.ztype_will_become = se convertira en +gui.ztype_new = Nuevo: +gui.ztype_warning1 = Diferentes tipos de zona tienen diferentes valores de flags por defecto. +gui.ztype_warning2 = Elige como manejar los ajustes de flags existentes: +gui.ztype_keep_desc = Mantener anulaciones personalizadas +gui.ztype_keep_flags = Mantener Flags +gui.ztype_reset_desc = Usar valores por defecto del nuevo tipo +gui.ztype_reset_flags = Restablecer Flags + +# Etiquetas de asistente de creacion de zona +gui.czw_title = Crear Zona +gui.czw_back = < Volver +gui.czw_create = Crear Zona +gui.czw_zone_type = Tipo de Zona +gui.czw_safe_desc = Protegido, sin PvP +gui.czw_war_desc = Combate, PvP habilitado +gui.czw_zone_name = Nombre de Zona +gui.czw_name_desc = Ingresa un nombre unico para la zona +gui.czw_claim_method = Metodo de Reclamo +gui.czw_method_none_desc = Crear zona vacia +gui.czw_method_none = Sin reclamos +gui.czw_method_single_desc = Tu chunk actual +gui.czw_method_single = Chunk unico +gui.czw_method_circle_desc = Area circular +gui.czw_method_circle = Radio circular +gui.czw_method_square_desc = Area cuadrada +gui.czw_method_square = Radio cuadrado +gui.czw_method_map_desc = Editor de chunks interactivo +gui.czw_method_map = Usar mapa de reclamos +gui.czw_radius = Radio +gui.czw_custom_radius = Personalizado (1-50): +gui.czw_flags = Flags +gui.czw_flags_defaults_desc = Basado en tipo de zona +gui.czw_flags_defaults = Usar por defecto +gui.czw_flags_customize_desc = Abrir ajustes despues +gui.czw_flags_customize = Personalizar + +# ========== Etiquetas de Entradas (listas de Faccion/Jugador/Zona) ========== + +# Etiquetas de entrada de faccion +gui.fac_entry_power = poder +gui.fac_entry_claims = reclamos +gui.fac_entry_members = miembros +gui.fac_entry_created = Creada: +gui.fac_entry_home = Hogar: +gui.fac_entry_tp_home = TP Hogar +gui.fac_entry_view_info = Ver Info +gui.fac_entry_members_btn = Miembros +gui.fac_entry_settings = Ajustes +gui.fac_entry_unclaim_all = Desreclamar +gui.fac_entry_disband = Disolver + +# Etiquetas de entrada de jugador +gui.plr_entry_role = Rol: +gui.plr_entry_joined = Ingreso: +gui.plr_entry_last_online = Ultima Conexion: +gui.plr_entry_kdr = K/D/R: +gui.plr_entry_power = Poder: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Info +gui.plr_entry_teleport = Teletransportar +gui.plr_entry_na = N/D +gui.plr_entry_unknown = Desconocido +gui.plr_entry_ago = hace {0} + +# Etiquetas de entrada de zona +gui.zone_entry_world = Mundo: +gui.zone_entry_chunks = Chunks: +gui.zone_entry_bounds = Limites: +gui.zone_entry_created = Creada: +gui.zone_entry_edit_map = Editar Mapa +gui.zone_entry_flags = Flags +gui.zone_entry_settings = Ajustes +gui.zone_entry_delete = Eliminar diff --git a/src/main/resources/Server/Languages/es-ES/hyperfactions_gui.lang b/src/main/resources/Server/Languages/es-ES/hyperfactions_gui.lang new file mode 100644 index 00000000..6a730430 --- /dev/null +++ b/src/main/resources/Server/Languages/es-ES/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Traducciones al Espanol +# Formato: clave = valor +# Nota: Las claves se prefijan automaticamente con "hyperfactions_gui." por el I18nModule de Hytale + +# ========== Barra de Navegacion ========== +nav.dashboard = Panel +nav.chat = Chat +nav.members = Miembros +nav.invites = Invitaciones +nav.browser = Explorar +nav.map = Mapa +nav.leaderboard = Clasificacion +nav.relations = Relaciones +nav.treasury = Tesoreria +nav.settings = Ajustes +nav.logs = Registros +nav.help = Ayuda +nav.admin = Admin +nav.create = Crear + +# ========== Nombres de Categorias de Ayuda ========== +help.category.welcome = Bienvenida +help.category.your_faction = Tu Faccion +help.category.power_land = Poder y Territorio +help.category.diplomacy = Diplomacia +help.category.combat = Combate y Seguridad +help.category.economy = Economia +help.category.quick_ref = Referencia Rapida + +# ========== Nombres de Categorias de Ayuda Admin ========== +help.category.admin_overview = General +help.category.admin_factions = Facciones +help.category.admin_zones = Zonas +help.category.admin_power = Poder +help.category.admin_economy = Economia +help.category.admin_config = Configuracion +help.category.admin_maintenance = Mantenimiento +help.category.admin_reference = Referencia + +# ========== Menu Principal ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Mi Faccion +main_menu.section_get_started = Comenzar +main_menu.section_territory = Territorio +main_menu.section_browse = Explorar +main_menu.section_admin = Admin +main_menu.claim_hint = Usa /f claim para reclamar territorio. + +# ========== Pagina de Info de Faccion ========== +faction_info.title = Info de Faccion +faction_info.no_description = Sin descripcion. +faction_info.status_open = Abierta +faction_info.status_invite_only = Solo Invitacion +faction_info.status_raidable = Vulnerable +faction_info.status_protected = Protegida +faction_info.officers_more = +{0} mas +faction_info.power_header = Poder +faction_info.claims_header = Reclamos +faction_info.members_header = Miembros +faction_info.relations_header = Relaciones +faction_info.status_header = Estado +faction_info.treasury_header = Tesoreria +faction_info.current_max = actual / max +faction_info.claimed_max = reclamados / max +faction_info.ally_enemy = aliado / enemigo +faction_info.faction_balance = saldo de faccion +faction_info.leader_label = Lider: +faction_info.officers_label = Oficiales: +faction_info.view_members_btn = Ver Miembros +faction_info.relations_btn = Relaciones +faction_info.back_btn = Volver + +# ========== Modal de Renombrar ========== +rename.title = Renombrar Faccion +rename.current_label = Actual: +rename.new_name_label = Nuevo Nombre: +rename.no_permission = No tienes permiso para renombrar la faccion. +rename.enter_name = Ingresa un nombre para la faccion. +rename.too_short = El nombre de faccion debe tener al menos {0} caracteres. +rename.too_long = El nombre de faccion no puede exceder {0} caracteres. +rename.same_name = Ese ya es el nombre de tu faccion. +rename.name_taken = Ya existe una faccion con ese nombre. +rename.success = Faccion renombrada de {0} a {1}! + +# ========== Modal de Descripcion ========== +desc.title = Editar Descripcion +desc.current_label = Actual: +desc.new_desc_label = Nueva Descripcion: +desc.no_permission = No tienes permiso para editar la descripcion. +desc.display_none = (Ninguna) +desc.cleared = Descripcion de la faccion borrada. +desc.updated = Descripcion de la faccion actualizada! + +# ========== Modal de Etiqueta ========== +tag.title = Editar Etiqueta +tag.current_label = Actual: +tag.instructions = Etiqueta (1-5 caracteres, solo letras y numeros): +tag.help_text = Las etiquetas aparecen en el chat y en el mapa +tag.no_permission = No tienes permiso para editar la etiqueta. +tag.display_none = (Ninguna) +tag.cleared = Etiqueta de la faccion borrada. +tag.too_short = La etiqueta debe tener al menos {0} caracter. +tag.too_long = La etiqueta no puede exceder {0} caracteres. +tag.invalid_format = La etiqueta solo puede contener letras y numeros. +tag.same_tag = Esa ya es la etiqueta de tu faccion. +tag.tag_taken = Ya existe una faccion con esa etiqueta. +tag.success = Etiqueta de faccion establecida a [{0}]! + +# ========== Pagina del Panel ========== +dashboard.title = Panel de Faccion +dashboard.power_label = Poder +dashboard.land_label = Reclamos +dashboard.members_label = Miembros +dashboard.online_label = Conectados +dashboard.allies_label = Aliados +dashboard.enemies_label = Enemigos +dashboard.relations_label = Relaciones +dashboard.ally_enemy_label = aliado / enemigo +dashboard.status_label = Estado +dashboard.invites_label = Invitaciones +dashboard.sent_requests_label = enviadas / solicitudes +dashboard.treasury_label = Tesoreria +dashboard.upkeep_label = Mantenimiento +dashboard.per_cycle = por ciclo +dashboard.your_wallet = Tu Billetera +dashboard.personal_balance = saldo personal +dashboard.quick_actions = Acciones Rapidas +dashboard.teleport_label = Teletransporte +dashboard.territory_label = Territorio +dashboard.channel_label = Canal +dashboard.membership_label = Membresia +dashboard.recent_activity = Actividad Reciente +dashboard.view_all = Ver Todo +dashboard.income_24h = Ingresos (24h) +dashboard.deposits_transfers_in = depositos, transferencias entrantes +dashboard.expenses_24h = Gastos (24h) +dashboard.withdrawals_transfers_out = retiros, transferencias salientes +dashboard.faction_gone = Tu faccion ya no existe. +dashboard.available = {0} disponibles +dashboard.at_risk = En riesgo! +dashboard.online_count = {0} conectados +dashboard.status_invite = Invitacion +dashboard.in_grace = EN GRACIA +dashboard.billable_chunks = {0} chunks facturables +dashboard.btn_home = Hogar +dashboard.btn_set_home = Fijar Hogar +dashboard.btn_claim = Reclamar +dashboard.chat_prefix = Chat: {0} +dashboard.btn_leave = Salir +dashboard.no_activity = Sin actividad reciente. +dashboard.time_now = ahora +dashboard.time_minutes = hace {0}m +dashboard.time_hours = hace {0}h +dashboard.time_days = hace {0}d +dashboard.no_home_hint = Tu faccion no tiene hogar. Pide a un oficial que lo establezca. +dashboard.chat_mode_set = Modo de chat: {0} +dashboard.claim_success = Chunk reclamado en ({0}, {1}) +dashboard.upkeep_in = en {0} + +# ========== Pagina Principal de Faccion ========== +main.no_faction = Sin Faccion +main.joined = Te uniste a la faccion! +main.join_failed = No se pudo unir a la faccion: {0} +main.invite_declined = Invitacion rechazada. +main.cooldown = Teletransporte en enfriamiento! {0}s restantes. +main.world_not_found = No se puede teletransportar - mundo no encontrado. +main.leave_failed = No se pudo salir: {0} + +# ========== Etiquetas Compartidas de la Interfaz ========== +common.faction_count = {0} facciones +common.leader_label = Lider: {0} +common.sort_power = Poder +common.sort_members = Miembros +common.page_format = {0}/{1} +common.own_faction = (Tu) +common.search = Buscar: +common.sort = Orden: +common.prev = < Anterior +common.next = Siguiente > +common.treasury_not_available = La tesoreria no esta disponible. + +# ========== Pagina de Miembros ========== +members.title = Miembros +members.search_label = Buscar: +members.sort_label = Orden: +members.prev_btn = < Anterior +members.next_btn = Siguiente > +members.count = {0} miembros +members.sort_role = Rol +members.sort_last_online = Ultima Conexion +members.just_now = ahora mismo +members.ago = hace {0} +members.never = Nunca +members.member_not_found = Miembro no encontrado. +members.promoted = {0} promovido a {1}. +members.promote_failed = No se pudo promover: {0} +members.demoted = {0} degradado a {1}. +members.demote_failed = No se pudo degradar: {0} +members.kicked = {0} expulsado de la faccion. +members.kick_failed = No se pudo expulsar: {0} +members.label_power = Poder: +members.label_joined = Ingreso: +members.label_last_death = Ultima Muerte: +members.btn_promote = Promover +members.btn_demote = Degradar +members.btn_kick = Expulsar +members.btn_make_leader = Hacer Lider +members.btn_profile = Perfil +members.self_label = (Tu) + +# ========== Pagina del Explorador ========== +browser.title = Explorar Facciones +browser.search_label = Buscar: +browser.sort_label = Orden: +browser.prev_btn = < Anterior +browser.next_btn = Siguiente > +browser.sort_name = Nombre +browser.invalid_faction = Faccion invalida. +browser.label_power = poder +browser.label_claims = reclamos +browser.label_members = miembros +browser.label_recruitment = Reclutamiento: +browser.label_created = Creada: +browser.label_description = Descripcion: +browser.view_info_btn = Ver Info +browser.label_leader = Lider: +browser.no_description = Sin descripcion + +# ========== Pagina de Clasificacion ========== +leaderboard.title = Clasificacion de Facciones +leaderboard.rank_by = Orden: +leaderboard.col_rank = # +leaderboard.col_faction = Faccion +leaderboard.col_claims = Reclamos +leaderboard.col_members = Miembros +leaderboard.prev_btn = < Anterior +leaderboard.next_btn = Siguiente > +leaderboard.sort_kd = K/D +leaderboard.sort_territory = Territorio +leaderboard.sort_balance = Saldo + +# ========== Pagina de Info de Jugador ========== +playerinfo.title = Info de Jugador +playerinfo.first_joined_label = Primera conexion: +playerinfo.last_online_label = Ultima conexion: +playerinfo.faction_label = Faccion: +playerinfo.role_label = Rol: +playerinfo.joined_label_static = Ingreso: +playerinfo.not_in_faction = No esta en una faccion +playerinfo.power_header = Poder +playerinfo.current_max = actual / max +playerinfo.combat_header = Combate +playerinfo.kills_deaths = muertes / asesinatos +playerinfo.kdr_header = Ratio K/D +playerinfo.membership_history = Historial de Membresia +playerinfo.view_faction_btn = Ver Faccion +playerinfo.back_btn = Volver +playerinfo.now = Ahora +playerinfo.history_count = {0} registros +playerinfo.joined_label = Ingreso: {0} +playerinfo.current = Actual +playerinfo.left_label = Salio: {0} +playerinfo.no_history = Sin historial de membresia +playerinfo.faction_gone = La faccion ya no existe. +playerinfo.reason_active = ACTIVO +playerinfo.reason_left = SALIO +playerinfo.reason_kicked = EXPULSADO +playerinfo.reason_disbanded = DISUELTA + +# ========== Pagina de Relaciones ========== +relations.title = Relaciones +relations.tab_relations = Relaciones +relations.tab_pending = Pendientes +relations.set_relation_btn = + Nueva Relacion +relations.prev_btn = < Anterior +relations.next_btn = Siguiente > +relations.relation_count = {0} relaciones +relations.request_count = {0} solicitudes +relations.type_ally = Aliado +relations.type_enemy = Enemigo +relations.type_incoming = Entrante +relations.type_outgoing = Saliente +relations.incoming_request = Solicitud entrante +relations.outgoing_request = Solicitud saliente +relations.empty_relations = Sin relaciones aun. +relations.empty_relations_hint = Sin relaciones aun. Haz clic en + ESTABLECER RELACION para agregar aliados o enemigos. +relations.empty_pending = No hay solicitudes de alianza pendientes. +relations.today = Hoy +relations.one_day_ago = Hace 1 dia +relations.days_ago = Hace {0} dias +relations.now_neutral = Ahora neutral con {0}. +relations.now_enemies = Ahora enemigos con {0}! +relations.request_sent = Solicitud de alianza enviada a {0}. +relations.now_allied = Ahora aliados con {0}! +relations.request_declined = Solicitud de alianza de {0} rechazada. +relations.request_cancelled = Solicitud de alianza a {0} cancelada. +relations.failed = Fallo: {0} +relations.search_hint = Busca una faccion para establecer relacion +relations.no_results = No se encontraron facciones con '{0}' +relations.power_display = {0} poder +relations.member_count = {0} miembros +relations.label_members = miembros +relations.label_power = poder +relations.label_since = Desde: +relations.label_claims = Reclamos: +relations.label_direction = Direccion: +relations.btn_view = Ver +relations.btn_neutral = Neutral +relations.btn_enemy = Enemigo +relations.btn_ally = Aliado +relations.btn_accept = Aceptar +relations.btn_decline = Rechazar +relations.btn_cancel = Cancelar + +# ========== Pagina de Ajustes ========== +settings.title = Ajustes de Faccion +settings.general = General +settings.name_label = Nombre: +settings.tag_label = Etiqueta: +settings.desc_label = Desc: +settings.edit_btn = Editar +settings.recruitment = Reclutamiento +settings.status_label = Estado: +settings.home_location = Ubicacion del Hogar +settings.location_label = Ubicacion: +settings.set_home_btn = Fijar Hogar +settings.teleport_btn = Teleportar +settings.delete_btn = Eliminar +settings.optional_features = Funciones Opcionales +settings.configure_modules = Configurar modulos opcionales. +settings.modules_btn = Modulos +settings.danger_zone = Zona de Peligro +settings.irreversible = Esta accion es irreversible. +settings.disband_btn = Disolver Faccion +settings.lock_hint = Algunas opciones pueden estar bloqueadas por el servidor y no aceptaran cambios. +settings.territory_permissions = Permisos de Territorio +settings.col_out = Ext +settings.col_ally = Ali +settings.col_mem = Mie +settings.col_off = Ofi +settings.cat_building = CONSTRUCCION +settings.perm_break = Romper +settings.perm_place = Colocar +settings.cat_interaction = INTERACCION +settings.interaction_hint = (hijos desactivados cuando Todo esta apagado) +settings.perm_all = Todo +settings.perm_door = Puerta +settings.perm_chest = Cofre +settings.perm_bench = Banco +settings.perm_processing = Procesamiento +settings.perm_seat = Asiento +settings.perm_transport = Transporte +settings.cat_other = OTROS +settings.perm_crate = Uso de Caja +settings.perm_npc_tame = Domar NPC +settings.perm_pve = Dano PvE +settings.appearance = Apariencia +settings.color_label = Color: +settings.mob_spawning = Generacion de Mobs +settings.mob_spawning_hint = (hijos desactivados cuando el maestro esta apagado) +settings.mob_spawning_label = Generacion de Mobs +settings.hostile_mobs = Mobs Hostiles +settings.passive_mobs = Mobs Pasivos +settings.neutral_mobs = Mobs Neutrales +settings.faction_settings = Ajustes de Faccion +settings.pvp_in_territory = PvP en Territorio +settings.officers_can_edit = Oficiales pueden editar +settings.leader_only = Solo lider +settings.officers_only = Solo oficiales y lideres pueden cambiar los ajustes de la faccion. +settings.display_none = (Ninguna) +settings.home_not_set = Sin establecer +settings.no_permission = No tienes permiso para cambiar los ajustes. +settings.only_leader_disband = Solo el lider puede disolver la faccion. +settings.perm_locked = Este ajuste esta bloqueado por el servidor. +settings.no_perm_edit = No tienes permiso para editar los permisos de territorio. +settings.only_leader_officers = Solo el lider puede cambiar el acceso de oficiales. +settings.pvp_enabled = Activado +settings.pvp_disabled = Desactivado +settings.not_in_territory = Debes estar en el territorio de tu faccion para establecer el hogar. +settings.home_set = Hogar de la faccion establecido en tu ubicacion actual! +settings.recruitment_set = Reclutamiento establecido a {0}. +settings.home_no_set = Tu faccion no tiene un hogar establecido. +settings.home_deleted = Hogar de la faccion eliminado! + +# ========== Pagina de Modulos ========== +modules.title = Modulos de Faccion +modules.description = Funciones opcionales para mejorar tu faccion +modules.configure_btn = Configurar +modules.back_btn = < Volver a Ajustes +modules.treasury_name = Tesoreria +modules.treasury_desc = Banco y sistema economico de la faccion +modules.raids_name = Raids +modules.raids_desc = Batallas de facciones programadas +modules.levels_name = Niveles +modules.levels_desc = Progresion y XP de faccion +modules.war_name = Guerra +modules.war_desc = Declaraciones formales de guerra +modules.coming_soon = Proximamente +modules.active = Activo +modules.view_treasury = Ver Tesoreria +modules.unavailable = No disponible +modules.no_economy = No se detecto plugin de economia +modules.disabled = Desactivado +modules.economy_not_available = Las funciones de economia no estan disponibles en este servidor + +# ========== Pagina de Tesoreria ========== +treasury.title = Tesoreria de Faccion +treasury.balance_label = Saldo +treasury.income_24h = Ingresos (24h) +treasury.deposits_transfers_in = depositos, transferencias entrantes +treasury.expenses_24h = Gastos (24h) +treasury.withdrawals_transfers_out = retiros, transferencias salientes +treasury.maintenance = MANTENIMIENTO +treasury.runway_label = Duracion: +treasury.add_funds = Agregar fondos +treasury.deposit_btn = Depositar +treasury.take_funds = Retirar fondos +treasury.withdraw_btn = Retirar +treasury.send_to_faction = Enviar a faccion +treasury.transfer_btn = Transferir +treasury.treasury_config = Config. tesoreria +treasury.settings_btn = Ajustes +treasury.recent_transactions = Transacciones Recientes +treasury.no_transactions = Sin transacciones aun +treasury.col_date = Fecha +treasury.col_type = Tipo +treasury.col_by = Por +treasury.col_amount = Monto +treasury.col_details = Detalles +treasury.pay_now_btn = Pagar Ahora +treasury.cost_7d = 7d: +treasury.cost_14d = 14d: +treasury.cost_30d = 30d: +treasury.settings_title = Ajustes de Tesoreria +treasury.officer_permissions = PERMISOS DE OFICIALES +treasury.allow_withdraw = Permitir a Oficiales Retirar +treasury.allow_transfer = Permitir a Oficiales Transferir +treasury.limits_section = LIMITES DE RETIRO Y TRANSFERENCIA +treasury.max_per_withdrawal = Max por retiro: +treasury.max_withdrawals_per = Max retiros por periodo: +treasury.max_per_transfer = Max por transferencia: +treasury.max_transfers_per = Max transferencias por periodo: +treasury.limit_period = Periodo de limite (horas): +treasury.no_limit_hint = Usar 0 para sin limite +treasury.upkeep_settings = AJUSTES DE MANTENIMIENTO +treasury.auto_pay_upkeep = Pago automatico de mantenimiento desde tesoreria +treasury.back_btn = Volver +treasury.upkeep_cost_format = {0} cada {1}h +treasury.upkeep_time_left = {0} restante +treasury.wallet_label = Tu billetera: {0} +treasury.treasury_label = Saldo de tesoreria: {0} +treasury.chunks_detail = {0} gratis + {1} chunks facturables +treasury.cost_label = Costo: {0} +treasury.pending = Pendiente +treasury.auto_pay_on = Pago automatico: ACTIVADO +treasury.auto_pay_off = Pago automatico: DESACTIVADO +treasury.runway_90_plus = 90+ dias +treasury.runway_days = {0} dias +treasury.runway_day = {0} dia +treasury.runway_less_day = < 1 dia +treasury.runway_no_funds = Sin fondos +treasury.grace_expires = La gracia expira en: {0} +treasury.missed_payments = Pagos perdidos: {0} +treasury.pay_to_clear = Paga {0} para limpiar la gracia +treasury.system = Sistema +treasury.type_deposit = Deposito +treasury.type_withdrawal = Retiro +treasury.type_transfer_in = Transferencia Entrante +treasury.type_transfer_out = Transferencia Saliente +treasury.type_player_transfer = Transferencia de Jugador +treasury.type_upkeep = Mantenimiento +treasury.type_tax = Recaudacion de Impuestos +treasury.type_war_cost = Costo de Guerra +treasury.type_raid_cost = Costo de Raid +treasury.type_spoils = Botin +treasury.type_admin = Ajuste de Admin +treasury.deposit_title = Depositar en la Tesoreria +treasury.withdraw_title = Retirar de la Tesoreria +treasury.fee_label = Comision ({0}%) +treasury.confirm_deposit = Confirmar Deposito +treasury.confirm_withdrawal = Confirmar Retiro +treasury.from_wallet = {0} de la billetera +treasury.to_wallet = {0} a la billetera +treasury.enter_valid_amount = Ingresa una cantidad positiva valida. +treasury.insufficient_wallet = Fondos insuficientes en la billetera. Necesitas {0}, tienes {1}. +treasury.wallet_withdraw_failed = No se pudo retirar de tu billetera. +treasury.deposit_failed_returned = No se pudo depositar. Dinero devuelto. +treasury.deposited = Depositaste {0} en la tesoreria. +treasury.deposited_fee = Depositaste {0} en la tesoreria. (comision: {1}) +treasury.no_withdraw_permission = No tienes permiso para retirar. +treasury.withdraw_denied = Retiro denegado: {0} +treasury.insufficient_treasury = Fondos insuficientes en la tesoreria. +treasury.withdraw_limit = Limite de retiro excedido. +treasury.withdraw_failed = Retiro fallido: {0} +treasury.wallet_deposit_warn = Advertencia: No se pudo depositar en tu billetera. Contacta a un admin. +treasury.withdrew = Retiraste {0} de la tesoreria. +treasury.withdrew_fee = Retiraste {0} de la tesoreria. (comision: {1}, recibido: {2}) +treasury.search_hint = Buscar jugador o faccion +treasury.no_results = Sin resultados para '{0}' +treasury.tag_player = [Jugador] +treasury.tag_faction = [Faccion] +treasury.source_online = Conectado +treasury.source_offline = Desconectado +treasury.source_player_db = Jugador de Hytale +treasury.no_transfer_permission = No tienes permiso para transferir. +treasury.transfer_denied = Transferencia denegada: {0} +treasury.invalid_target_faction = Faccion de destino invalida. +treasury.target_faction_gone = La faccion de destino ya no existe. +treasury.transfer_failed = Transferencia fallida: {0} +treasury.transfer_failed_returned = Transferencia fallida. Fondos devueltos. +treasury.transferred = Transferiste {0} a {1}. +treasury.invalid_target_player = Jugador de destino invalido. +treasury.player_transfer_failed = No se pudo depositar en la billetera del jugador. Transferencia revertida. +treasury.leader_only_perms = Solo el lider puede cambiar los permisos de tesoreria. +treasury.leader_only_upkeep = Solo el lider puede cambiar los ajustes de mantenimiento. +treasury.invalid_limit = Numero invalido en los campos de limite. Usa 0 para ilimitado. + +# ========== Paginas de Confirmacion ========== +confirm.disband_title = Disolver Faccion +confirm.disband_prompt = Estas seguro de que quieres disolver +confirm.disband_warning = Esta accion no se puede deshacer! +confirm.leave_title = Salir de la Faccion +confirm.leave_prompt = Estas seguro de que quieres salir de +confirm.leave_warning = Perderas acceso al territorio de la faccion. +confirm.leader_leave_title = Salir como Lider +confirm.leader_leave_prompt = Estas saliendo de +confirm.transfer_title = Transferir Liderazgo +confirm.transfer_prompt = Estas seguro de que quieres transferir el liderazgo a +confirm.transfer_warning = Te convertiras en Oficial. +confirm.disband_not_leader = Solo el lider puede disolver la faccion. +confirm.disbanded = La faccion '{0}' ha sido disuelta. +confirm.disband_failed = No se pudo disolver la faccion. +confirm.succession_title = El liderazgo se transferira a: +confirm.no_members_warning = ADVERTENCIA: No hay otros miembros! +confirm.will_disband = Salir disolvera la faccion permanentemente. +confirm.not_in_faction = No estas en esta faccion. +confirm.not_leader_anymore = Ya no eres el lider. +confirm.no_successor = No hay sucesor disponible. Usa disolver en su lugar. +confirm.transfer_failed = No se pudo transferir el liderazgo: {0} +confirm.leader_left = Liderazgo transferido a {0}. Has salido de {1}. +confirm.leave_failed = No se pudo salir de la faccion: {0} +confirm.leader_cannot_leave = Los lideres no pueden salir. Transfiere el liderazgo o disuelve la faccion. +confirm.left_faction = Has salido de {0}. +confirm.faction_gone = La faccion ya no existe. +confirm.not_leader_transfer = Solo el lider puede transferir el liderazgo. +confirm.leadership_transferred = Liderazgo transferido a {0}. + +# ========== Pagina del Visor de Registros ========== +logs.title = {0} - Registros de Actividad +logs.entry_count = {0} entradas +logs.filter_label = Filtrar: +logs.col_time = Hora +logs.col_type = Tipo +logs.col_message = Mensaje +logs.prev_btn = < Anterior +logs.next_btn = Siguiente > +logs.all_types = Todos los Tipos +logs.no_logs_type = No hay registros de este tipo. +logs.no_logs = No hay registros de actividad aun. +logs.time_just_now = ahora mismo +logs.time_minute = hace {0} minuto +logs.time_minutes = hace {0} minutos +logs.time_hour = hace {0} hora +logs.time_hours = hace {0} horas +logs.time_day = hace {0} dia +logs.time_days = hace {0} dias +logs.time_week = hace {0} semana +logs.time_weeks = hace {0} semanas +logs.type_member_join = Ingreso +logs.type_member_leave = Salida +logs.type_member_kick = Expulsion +logs.type_member_promote = Ascenso +logs.type_member_demote = Descenso +logs.type_claim = Reclamo +logs.type_unclaim = Desreclamo +logs.type_overclaim = Sobrerreclamo +logs.type_home_set = Hogar +logs.type_relation_ally = Aliado +logs.type_relation_enemy = Enemigo +logs.type_relation_neutral = Neutral +logs.type_leader_transfer = Liderazgo +logs.type_settings_change = Ajustes +logs.type_power_change = Poder +logs.type_economy = Economia +logs.type_admin_power = Admin + +# Plantillas de mensajes de registro (i18n para contenido del registro de actividad) +# Acciones de jugador +logs.msg_faction_created = {0} creo la faccion +logs.msg_member_joined = {0} se unio a la faccion +logs.msg_member_left = {0} abandono la faccion +logs.msg_member_kicked = {0} fue expulsado +logs.msg_member_promoted = {0} ascendido a {1} +logs.msg_member_demoted = {0} degradado a {1} +logs.msg_leader_transferred = Liderazgo transferido a {0} +logs.msg_leader_left_transfer = {0} se fue, {1} es ahora el lider +logs.msg_relation_set = {0} establecido como {1} +# Territorio +logs.msg_claimed = Chunk reclamado en {0}, {1} en {2} +logs.msg_unclaimed = Chunk abandonado en {0}, {1} en {2} +logs.msg_overclaim_lost = Chunk perdido en {0}, {1} ante {2} +logs.msg_overclaim_taken = Sobrerreclamo de chunk en {0}, {1} de {2} +logs.msg_all_unclaimed = Todo el territorio abandonado +logs.msg_claim_removed_world = Reclamo en '{0}' eliminado (mundo no permite reclamos) +logs.msg_claims_lost_upkeep = {0} reclamo(s) perdidos por mantenimiento (faltan {1} pagos) +logs.msg_claims_removed_inactive = {0} reclamos eliminados por inactividad ({1} dias) +# Hogar +logs.msg_home_set = Hogar establecido +logs.msg_home_cleared = Hogar eliminado +logs.msg_home_cleared_world = Hogar en '{0}' eliminado (mundo no permite reclamos) +# Ajustes +logs.msg_renamed = Renombrado de '{0}' a '{1}' +logs.msg_set_open = Faccion abierta al publico +logs.msg_set_closed = Faccion solo por invitacion +logs.msg_desc_set = Descripcion establecida +logs.msg_desc_cleared = Descripcion eliminada +logs.msg_color_changed = Color cambiado a '{0}' +# Economia +logs.msg_deposit = Deposito: {0} (+{1}) +logs.msg_withdrawal = Retiro: {0} (-{1}) +logs.msg_upkeep_paid = Mantenimiento pagado: {0} ({1} chunks facturables) +logs.msg_upkeep_grace_started = Mantenimiento fallido: periodo de gracia iniciado ({0}h) +logs.msg_upkeep_missed = Mantenimiento no pagado (pago {0}), gracia expira en {1} +logs.msg_upkeep_manual = Mantenimiento pagado manualmente: {0} ({1} chunks facturables, gracia eliminada) +# Admin poder +logs.msg_admin_power_set = Admin establecio el poder de {0} a {1} (era {2}) +logs.msg_admin_power_add = Admin agrego {0} de poder a {1} ({2} -> {3}) +logs.msg_admin_power_remove = Admin quito {0} de poder de {1} ({2} -> {3}) +logs.msg_admin_power_reset = Admin reinicio el poder de {0} a {1} (era {2}) +logs.msg_admin_power_adjusted = Admin ajusto el poder de {0} en {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin establecio el poder maximo de {0} a {1} (era {2}) +logs.msg_admin_maxpower_reset = Admin reinicio el poder maximo de {0} al valor predeterminado ({1}) +logs.msg_admin_powerloss_enabled = Admin habilito perdida de poder para {0} +logs.msg_admin_powerloss_disabled = Admin deshabilito perdida de poder para {0} +logs.msg_admin_decay_enabled = Admin habilito exencion de deterioro de reclamos para {0} +logs.msg_admin_decay_disabled = Admin deshabilito exencion de deterioro de reclamos para {0} +logs.msg_admin_kd_reset = Admin reinicio K/D de {0} +logs.msg_admin_power_set_all = Admin establecio el poder de los {0} miembros a {1} +logs.msg_admin_power_add_all = Admin agrego {0} de poder a los {1} miembros +logs.msg_admin_power_remove_all = Admin quito {0} de poder de los {1} miembros +logs.msg_admin_power_reset_all = Admin reinicio el poder de los {0} miembros +logs.msg_admin_power_adjusted_all = Admin ajusto el poder de los {0} miembros en {1} +# Admin faccion +logs.msg_admin_kicked = [Admin] {0} fue expulsado +logs.msg_admin_role_set = [Admin] Rol de {0} establecido a {1} +logs.msg_admin_leader_kick = [Admin] Liderazgo transferido de {0} a {1} (expulsion admin) +logs.msg_admin_econ_added = Admin agrego: {0} (saldo: {1}) +logs.msg_admin_econ_deducted = Admin dedujo: {0} (saldo: {1}) +logs.msg_admin_econ_set = Admin establecio saldo a {0} (era {1}) +# Importacion +logs.msg_left_import = {0} se fue (importado a otra faccion) +logs.msg_leader_import_transfer = {0} se convirtio en lider (lider anterior importado a otra faccion) +logs.msg_imported_from = Faccion importada desde {0} + +# ========== Pagina de Chat ========== +chat.title = Chat de Faccion +chat.tab_faction = Faccion +chat.tab_ally = Aliado +chat.send_btn = Enviar +chat.placeholder = Escribe un mensaje... +chat.no_messages = No hay mensajes aun. +chat.no_ally_permission = No tienes permiso para el chat de aliados. +chat.no_permission = Sin permiso. +chat.faction_gone = Tu faccion ya no existe. +chat.time_now = ahora +chat.time_minutes = {0}m +chat.time_hours = {0}h + +# ========== Pagina de Invitaciones ========== +invites.title = Invitaciones +invites.tab_outgoing = Salientes +invites.tab_requests = Solicitudes +invites.prev_btn = < Anterior +invites.next_btn = Siguiente > +invites.invite_count = {0} invitaciones +invites.request_count = {0} solicitudes +invites.invited_by = Invitado por: {0} +invites.no_message = Sin mensaje +invites.expires = Expira: {0} +invites.type_outgoing = Saliente +invites.type_request = Solicitud +invites.invited_by_label = Invitado por: +invites.empty_outgoing = Sin invitaciones salientes. Usa /f invite para invitar a alguien. +invites.empty_requests = Sin solicitudes de ingreso. Los jugadores pueden solicitar unirse con /f request. +invites.invalid_player = Jugador invalido. +invites.cancelled_invite = Invitacion a {0} cancelada. +invites.player_joined = {0} se ha unido a la faccion! +invites.faction_full = La faccion esta llena. No se puede aceptar la solicitud. +invites.add_failed = No se pudo agregar al jugador a la faccion. +invites.request_expired = Solicitud no encontrada o expirada. +invites.request_declined = Solicitud de ingreso de {0} rechazada. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}h +invites.label_message = Mensaje: +invites.btn_cancel = Cancelar +invites.btn_accept = Aceptar +invites.btn_decline = Rechazar + +# ========== Pagina del Mapa ========== +map.title = Mapa de Territorio +map.action_hint = Clic izquierdo: Reclamar | Clic derecho: Desreclamar +map.legend_your = Tu Territorio +map.legend_ally = Territorio Aliado +map.legend_enemy = Territorio Enemigo +map.legend_other = Otra Faccion +map.legend_wilderness = Naturaleza +map.legend_safe = Zona Segura +map.legend_war = Zona de Guerra +map.legend_you = Estas aqui +map.position = Tu Posicion: Chunk ({0}, {1}) +map.legend_protected = Protegido +map.claim_stats = Reclamos: {0}/{1} ({2} Disponibles) +map.overclaimed = SOBRERECLAMADO por {0}! +map.power_display = Poder: {0}/{1} +map.join_to_claim = Unete a una faccion para reclamar +map.claim_success = Chunk reclamado en ({0}, {1})! +map.claim_not_in_faction = Debes estar en una faccion para reclamar territorio. +map.claim_not_officer = Solo oficiales y lideres pueden reclamar territorio. +map.claim_already_yours = Ya posees este chunk. +map.claim_already_claimed = Este chunk ya esta reclamado por otra faccion. +map.claim_not_adjacent = Solo puedes reclamar chunks adyacentes a tu territorio. +map.claim_max = Has alcanzado tu limite maximo de reclamos. +map.claim_world_not_allowed = No se permite reclamar en este mundo. +map.claim_orbisguard = Esta area esta protegida por OrbisGuard. +map.claim_failed = No se pudo reclamar el chunk. +map.unclaim_success = Chunk desreclamado en ({0}, {1}). +map.unclaim_not_in_faction = Debes estar en una faccion. +map.unclaim_not_officer = Solo oficiales y lideres pueden desreclamar territorio. +map.unclaim_not_claimed = Este chunk no esta reclamado. +map.unclaim_not_yours = Este chunk pertenece a otra faccion. +map.unclaim_home = No puedes desreclamar el chunk que contiene el hogar de la faccion. +map.unclaim_failed = No se pudo desreclamar el chunk. +map.overclaim_success = Chunk enemigo sobrereclamado en ({0}, {1})! +map.overclaim_not_in_faction = Debes estar en una faccion. +map.overclaim_not_officer = Solo oficiales y lideres pueden sobrereclamar territorio. +map.overclaim_already_yours = Ya posees este chunk. +map.overclaim_ally = No puedes sobrereclamar territorio aliado. +map.overclaim_has_power = Esta faccion tiene suficiente poder para defender su territorio. +map.overclaim_max = Has alcanzado tu limite maximo de reclamos. +map.overclaim_failed = No se pudo sobrereclamar el chunk. +# ========== Pagina de Crear Faccion ========== +create.title = Crea Tu Faccion +create.section_preview = Vista Previa +create.section_basic_info = Info Basica +create.section_details = Detalles +create.name_prefix = Nombre: +create.faction_name_label = Nombre de Faccion * +create.tag_label = ETIQUETA (2-4 caracteres, automatica si vacia) +create.desc_label = Descripcion (Opcional) +create.recruitment_label = Reclutamiento +create.section_faction_color = Color de Faccion +create.section_combat = Combate +create.create_btn = Crear Faccion +create.preview_name = Nombre de Tu Faccion +create.leader_prefix = Lider: {0} +create.enter_name = Ingresa un nombre para la faccion. +create.name_too_short = El nombre de faccion debe tener al menos {0} caracteres. +create.name_too_long = El nombre de faccion no puede exceder {0} caracteres. +create.name_taken = Ya existe una faccion con este nombre. +create.tag_length = La etiqueta de faccion debe tener entre {0} y {1} caracteres. +create.tag_format = La etiqueta de faccion solo puede contener letras y numeros. +create.desc_too_long = La descripcion no puede exceder {0} caracteres. +create.created = Faccion {0} creada exitosamente! +create.created_no_dashboard = Faccion creada pero no se pudo abrir el panel. +create.invalid_name = Nombre de faccion invalido. +create.create_failed = No se pudo crear la faccion. + +# ========== Paginas de Nuevo Jugador ========== +newplayer.browse_title = Explorar Facciones +newplayer.invites_title = Invitaciones y Solicitudes +newplayer.map_title = Mapa de Territorio +newplayer.view_only_badge = Solo Vista +newplayer.legend_label = Leyenda: +newplayer.legend_safezone = Zona Segura +newplayer.legend_warzone = Zona de Guerra +newplayer.legend_faction = Faccion +newplayer.legend_wilderness = Naturaleza +newplayer.search_label = Buscar: +newplayer.sort_label = Orden: +newplayer.prev_btn = < Anterior +newplayer.next_btn = Siguiente > +newplayer.pending_count = {0} pendientes +newplayer.received_header = INVITACIONES RECIBIDAS ({0}) +newplayer.requests_header = TUS SOLICITUDES ({0}) +newplayer.no_invites = Sin invitaciones. Explora facciones para encontrar una! +newplayer.no_requests = Sin solicitudes pendientes. +newplayer.invited_by = Invitado por: {0} +newplayer.member_count = {0} miembros +newplayer.power_count = {0} poder +newplayer.claim_count = {0} reclamos +newplayer.awaiting_review = Esperando revision +newplayer.expires_in = Expira en {0}h +newplayer.time_just_now = ahora mismo +newplayer.time_minutes = hace {0} min +newplayer.time_hours = hace {0}h +newplayer.time_days = hace {0}d +newplayer.invalid_faction = Faccion invalida. +newplayer.invite_expired = Esta invitacion ha expirado o fue revocada. +newplayer.faction_gone = La faccion ya no existe. +newplayer.joined = Te uniste a {0}! +newplayer.faction_full = Esta faccion esta llena. +newplayer.join_failed = No se pudo unir a la faccion. +newplayer.invite_declined = Invitacion rechazada. +newplayer.request_cancelled = Solicitud para unirte a {0} cancelada. +newplayer.faction_count = {0} facciones +newplayer.browse_subtitle = Encuentra tu nuevo hogar! +newplayer.sort_power = Poder +newplayer.sort_name = Nombre +newplayer.sort_members = Miembros +newplayer.btn_accept = Aceptar +newplayer.btn_pending = Pendiente +newplayer.btn_join = Unirse +newplayer.btn_request = Solicitar +newplayer.invite_only_msg = Esta faccion es solo por invitacion. +newplayer.welcome_hint = Bienvenido! Usa /f para abrir el menu de facciones. +newplayer.faction_open_hint = Esta faccion esta abierta! Haz clic en UNIRSE. +newplayer.already_requested = Ya tienes una solicitud pendiente para esta faccion. +newplayer.has_invite_hint = Tienes una invitacion de esta faccion! Haz clic en ACEPTAR. +newplayer.request_sent = Solicitud de ingreso enviada a {0}! +newplayer.officer_review = Un oficial revisara tu solicitud. +newplayer.map_hint = Solo Vista - Unete a una faccion para reclamar territorio! + +# Ajustes de Jugador +nav.player_settings = Jugador +player_settings.title = Ajustes del Jugador +player_settings.language_section = Idioma +player_settings.auto_detect = Detectar automaticamente del cliente +player_settings.auto_detect_desc = Usa la configuracion de idioma de tu cliente de juego +player_settings.language_label = Idioma +player_settings.notifications_section = Notificaciones +player_settings.territory_alerts = Alertas de Territorio +player_settings.territory_alerts_desc = Mostrar notificaciones al entrar/salir de territorios +player_settings.death_announcements = Anuncios de Muerte +player_settings.death_announcements_desc = Recibir anuncios de ubicacion de muerte de miembros de la faccion +player_settings.power_notifications = Cambios de Poder +player_settings.power_notifications_desc = Mostrar mensajes cuando tu poder cambia +player_settings.language_changed = Idioma cambiado a {0} +player_settings.pref_enabled = {0} activado +player_settings.pref_disabled = {0} desactivado + +# ========== Paginas de Ayuda ========== +help.center_title = Centro de Ayuda +help.getting_started_title = Primeros Pasos +help.what_are_factions_title = Que son las Facciones? +help.what_are_factions_1 = Las facciones son grupos creados por jugadores que trabajan juntos +help.what_are_factions_2 = para reclamar territorio, construir bases y competir. +help.what_are_factions_bullet_1 = - Territorio protegido para construir +help.what_are_factions_bullet_2 = - Companeros de equipo para jugar +help.what_are_factions_bullet_3 = - Acceso al chat y funciones de faccion +help.joining_title = Unirse a una Faccion +help.joining_desc = Hay varias formas de unirse a una faccion: +help.joining_bullet_1 = - Explorar - Encuentra facciones abiertas y haz clic en UNIRSE +help.joining_bullet_2 = - Invitaciones - Acepta invitaciones de oficiales +help.joining_bullet_3 = - Solicitar - Pide unirte a facciones de solo invitacion +help.creating_title = Crear una Faccion +help.creating_desc = Ve a la pestana Crear para iniciar tu propia faccion. +help.creating_bullet_1 = - Invita y administra miembros +help.creating_bullet_2 = - Reclama y protege territorio +help.commands_title = Comandos Rapidos +help.cmd_f = /f - Abrir menu de faccion +help.cmd_f_list = /f list - Listar todas las facciones +help.cmd_f_join = /f join - Unirse a una faccion abierta +help.cmd_f_create = /f create - Crear una nueva faccion +help.cmd_f_help = /f help - Lista completa de comandos +help.tip = Consejo: Explora facciones para encontrar un grupo que se adapte a ti! diff --git a/src/main/resources/Server/Languages/fallback.lang b/src/main/resources/Server/Languages/fallback.lang new file mode 100644 index 00000000..43a0187f --- /dev/null +++ b/src/main/resources/Server/Languages/fallback.lang @@ -0,0 +1,41 @@ +# HyperFactions — Fallback Language Configuration +# +# Hytale's I18nModule automatically falls back to en-US when a translation key +# is missing from the player's locale. This means: +# +# 1. If a locale directory exists (e.g., fr-FR/) but a specific key is missing +# from its .lang file, the en-US value is used automatically. +# +# 2. If a locale directory does not exist at all, ALL keys fall back to en-US. +# +# 3. Partially translated locales work fine — translated keys use the locale's +# value, untranslated keys use en-US. +# +# No explicit mapping is needed in this file. It exists as documentation for +# translators and maintainers. +# +# Supported locales (directories under Server/Languages/): +# en-US — English (United States) [base language, complete] +# es-ES — Spanish (Spain) [complete] +# de-DE — German (Germany) [complete] +# fr-FR — French (France) [complete] +# pt-BR — Portuguese (Brazil) [complete] +# ru-RU — Russian (Russia) [complete] +# pl-PL — Polish (Poland) [complete] +# it-IT — Italian (Italy) [complete] +# nl-NL — Dutch (Netherlands) [complete] +# tl-PH — Filipino/Tagalog (Philippines) [complete] +# +# Note: tl-PH is not natively supported by the Hytale client. Players must +# select it manually via /f settings > Language. HFMessages falls back to +# en-US automatically for any locale not loaded by I18nModule. +# +# To add a new locale: +# ./scripts/new-translation.sh +# (or scripts\new-translation.bat on Windows) +# +# Translation guidelines: +# - Keep all keys exactly as they are (left side of =) +# - Keep {0}, {1}, etc. placeholders in the translated text +# - Do not translate color codes or formatting tokens +# - Test in-game by switching language in /f settings diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..e80d49b7 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Systeme de configuration + +HyperFactions utilise un systeme de configuration JSON modulaire avec 11 fichiers de configuration. + +## Commandes de configuration admin + +| Commande | Description | +|----------|-------------| +| `/f admin config` | Ouvrir l'editeur visuel de configuration | +| `/f admin reload` | Recharger tous les fichiers de configuration depuis le disque | +| `/f admin sync` | Synchroniser les donnees de faction vers le stockage | + +## Fichiers de configuration + +| Fichier | Contenu | +|---------|---------| +| `factions.json` | Roles, puissance, revendications, combat, relations | +| `server.json` | Teleportation, sauvegarde auto, messages, interface, permissions | +| `economy.json` | Tresor, entretien, parametres de transaction | +| `backup.json` | Rotation et retention des sauvegardes | +| `chat.json` | Formatage de la discussion de faction et d'allie | +| `debug.json` | Categories de journalisation de debogage | +| `faction-permissions.json` | Permissions par defaut par role | +| `announcements.json` | Diffusion d'evenements et notifications territoriales | +| `gravestones.json` | Parametres d'integration des pierres tombales | +| `worldmap.json` | Modes de rafraichissement de la carte du monde | +| `worlds.json` | Remplacements de comportement par monde | + +>[!TIP] L'interface de configuration fournit un editeur visuel avec des descriptions pour chaque parametre. Les modifications sont enregistrees immediatement mais certaines necessitent `/f admin reload` pour prendre pleinement effet. + +## Emplacement de la configuration + +Tous les fichiers sont stockes dans : +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Les modifications manuelles du JSON necessitent `/f admin reload` pour etre appliquees. Un JSON invalide entrainera le saut du fichier avec un avertissement dans le journal du serveur. + +>[!NOTE] La version de configuration est suivie dans `server.json`. Le plugin migre automatiquement les anciennes configurations au demarrage. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..6b7ccad8 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Parametres par monde + +HyperFactions supporte une configuration par monde pour les revendications, le JcJ et le comportement de protection. + +## Commandes de monde + +| Commande | Description | +|----------|-------------| +| `/f admin world list` | Lister tous les remplacements de monde | +| `/f admin world info ` | Afficher les parametres d'un monde | +| `/f admin world set ` | Definir un parametre | +| `/f admin world reset ` | Reinitialiser le monde aux valeurs par defaut | + +## Parametres disponibles + +| Parametre | Type | Description | +|-----------|------|-------------| +| claiming_enabled | boolean | Autoriser les revendications de faction dans ce monde | +| pvp_enabled | boolean | Autoriser le combat JcJ dans ce monde | +| power_loss | boolean | Appliquer la perte de puissance a la mort | +| build_protection | boolean | Appliquer la protection de construction des revendications | +| explosion_protection | boolean | Proteger les revendications des explosions | + +## Liste blanche / Liste noire de mondes + +Controlez quels mondes autorisent les fonctionnalites de faction via le fichier de configuration `worlds.json` : + +- **Mode liste blanche** : Seuls les mondes listes autorisent les revendications +- **Mode liste noire** : Tous les mondes autorisent les revendications sauf ceux listes + +>[!INFO] Les parametres de monde sont stockes dans `worlds.json` et remplacent les valeurs par defaut globales de `factions.json`. + +## Exemples + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- restaurer toutes les valeurs par defaut + +>[!TIP] Desactivez les revendications dans les mondes creatif ou lobby pour garder le systeme de factions concentre sur le gameplay de survie. + +>[!NOTE] Les parametres par monde ont la priorite sur la configuration globale mais sont remplaces par les drapeaux de zone dans ce monde. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..5a075adc --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Gestion du tresor + +Commandes admin pour gerer les tresors de faction. Necessite la permission `hyperfactions.admin.economy`. + +## Commandes du tresor + +| Commande | Description | +|----------|-------------| +| `/f admin economy balance ` | Voir le solde du tresor de la faction | +| `/f admin economy set ` | Definir le solde exact | +| `/f admin economy add ` | Ajouter des fonds au tresor | +| `/f admin economy take ` | Retirer des fonds du tresor | +| `/f admin economy reset ` | Reinitialiser le tresor a zero | + +## Exemples + +- `/f admin economy balance Vikings` -- verifier le solde +- `/f admin economy set Vikings 5000` -- definir a 5000 +- `/f admin economy add Vikings 1000` -- deposer 1000 +- `/f admin economy take Vikings 500` -- retirer 500 +- `/f admin economy reset Vikings` -- remettre le solde a zero + +>[!TIP] Utilisez `/f admin info ` pour voir l'apercu economique complet incluant l'historique des transactions en plus du solde du tresor. + +## Cas d'utilisation + +| Scenario | Commande | +|----------|----------| +| Distribution de prix d'evenement | `economy add ` | +| Sanction pour violation de regles | `economy take ` | +| Reinitialisation economique apres un wipe | `economy reset ` | +| Compensation pour des bugs | `economy add ` | + +>[!WARNING] Les modifications du tresor sont enregistrees dans l'historique des transactions de la faction. Les modifications admin sont enregistrees avec le nom de l'administrateur pour la tracabilite. + +>[!NOTE] Toutes les commandes admin d'economie fonctionnent meme lorsque le module economique est desactive dans la configuration. Les donnees sont stockees independamment du statut du module. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..950d4598 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Gestion de l'entretien + +L'entretien de faction facture les factions periodiquement en fonction de leur territoire et du nombre de membres. + +## Controles admin + +Les parametres d'entretien sont geres via le fichier de configuration economique ou l'interface de configuration admin. + +`/f admin config` +Ouvrir l'editeur de configuration et naviguer vers les parametres economiques pour ajuster les valeurs d'entretien. + +## Parametres d'entretien par defaut + +| Parametre | Defaut | Description | +|-----------|--------|-------------| +| Entretien active | false | Interrupteur principal du systeme | +| Intervalle d'entretien | 24h | Frequence de facturation de l'entretien | +| Cout par revendication | 5.0 | Cout par chunk revendique par cycle | +| Cout par membre | 0.0 | Cout par membre par cycle | +| Periode de grace | 72h | Les nouvelles factions sont exemptees | +| Dissolution en cas de faillite | false | Dissolution automatique si le paiement est impossible | + +## Surveiller l'entretien + +Utilisez `/f admin info ` pour voir : +- Le solde actuel du tresor +- Le cout estime d'entretien par cycle +- Le temps restant avant le prochain prelevement d'entretien +- Si la faction peut se permettre l'entretien + +>[!TIP] Consultez les statistiques economiques de toutes les factions depuis le tableau de bord admin pour identifier les factions a risque de faillite avant que l'entretien ne se declenche. + +>[!INFO] La configuration de l'entretien est stockee dans `economy.json`. Les modifications effectuees via l'interface de configuration prennent effet apres un rechargement avec `/f admin reload`. + +## Formule d'entretien + +**Entretien total** = (chunks revendiques x cout par revendication) + (nombre de membres x cout par membre) + +>[!WARNING] Activer l'entretien sur un serveur avec des factions existantes peut provoquer des faillites inattendues. Envisagez de definir une periode de grace ou d'annoncer le changement a l'avance. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..ccba66c0 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Dissolution forcee + +Les administrateurs peuvent dissoudre de force n'importe quelle faction, independamment des souhaits du chef. + +## Commande + +`/f admin disband ` +Dissout de force la faction nommee. Une invite de confirmation apparaitra avant l'execution de l'action. + +**Permission** : `hyperfactions.admin.disband` + +>[!WARNING] Dissoudre une faction est **irreversible**. Toutes les revendications sont liberees, tous les membres sont retires et la faction cesse d'exister. Creez d'abord une sauvegarde. + +## Consequences + +Lorsqu'une faction est dissoute : + +| Effet | Description | +|-------|-------------| +| **Revendications** | Tout le territoire est libere immediatement | +| **Membres** | Tous les joueurs sont retires de la liste | +| **Relations** | Toutes les alliances et inimities sont effacees | +| **Tresor** | Gere selon les parametres de configuration de l'economie | +| **Foyer** | Le foyer de faction est supprime | +| **Discussion** | L'historique de discussion de faction est supprime | + +## Bonnes pratiques + +1. Executez toujours `/f admin backup create` avant de dissoudre +2. Notifiez les membres de la faction si possible +3. Documentez la raison pour les archives du serveur +4. Verifiez avec `/f admin info ` avant d'agir + +>[!TIP] Si le probleme concerne un membre specifique, envisagez d'utiliser l'interface admin des factions pour transferer le leadership plutot que de dissoudre la faction entiere. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..d232a16d --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Gerer les factions + +Les administrateurs peuvent inspecter et modifier n'importe quelle faction sur le serveur via le tableau de bord ou les commandes. + +## Parcourir les factions + +`/f admin factions` +Ouvre le navigateur de factions admin. Consultez toutes les factions avec le nombre de membres, les niveaux de puissance et le territoire. + +`/f admin info ` +Ouvre le panneau d'informations admin pour une faction specifique avec tous les details et options de gestion. + +## Modifier les parametres de faction + +Avec la permission `hyperfactions.admin.modify`, vous pouvez : + +- **Renommer** une faction pour resoudre des conflits +- **Definir la couleur** pour corriger des problemes d'affichage +- **Basculer ouvert/ferme** pour remplacer la politique d'adhesion +- **Modifier la description** a des fins de moderation + +>[!TIP] Utilisez `/f admin who ` pour rechercher a quelle faction un joueur specifique appartient et consulter ses details. + +## Consulter les membres et relations + +Le panneau d'informations admin affiche : + +| Section | Details | +|---------|---------| +| **Membres** | Liste complete avec les roles et la derniere connexion | +| **Relations** | Toutes les relations d'alliance, d'inimitie et de neutralite | +| **Territoire** | Chunks revendiques et equilibre de puissance | +| **Economie** | Solde du tresor et journal des transactions | + +>[!NOTE] Les commandes d'inspection admin ne notifient pas la faction inspectee. Seules les modifications declenchent des alertes. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..6b654216 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Systeme de sauvegarde + +HyperFactions inclut des sauvegardes automatiques et manuelles avec une rotation GFS (Grand-pere-Pere-Fils). + +## Commandes de sauvegarde + +| Commande | Description | +|----------|-------------| +| `/f admin backup create` | Creer une sauvegarde manuelle maintenant | +| `/f admin backup list` | Lister toutes les sauvegardes disponibles | +| `/f admin backup restore ` | Restaurer a partir d'une sauvegarde | +| `/f admin backup delete ` | Supprimer une sauvegarde specifique | + +**Permission** : `hyperfactions.admin.backup` + +## Parametres de rotation GFS par defaut + +| Type | Retention | Description | +|------|-----------|-------------| +| Horaire | 24 | Les 24 derniers cliches horaires | +| Quotidien | 7 | Les 7 derniers cliches quotidiens | +| Hebdomadaire | 4 | Les 4 derniers cliches hebdomadaires | +| Manuel | 10 | Sauvegardes creees manuellement | +| Arret | 5 | Creees a l'arret du serveur | + +>[!INFO] Les sauvegardes a l'arret sont activees par defaut (`onShutdown=true`). Elles capturent l'etat le plus recent avant l'arret du serveur. + +## Contenu des sauvegardes + +Chaque archive ZIP de sauvegarde contient : +- Tous les fichiers de donnees de faction +- Les donnees de puissance des joueurs +- Les definitions de zones +- L'historique de discussion et les donnees economiques +- Les donnees d'invitations et de demandes d'adhesion +- Les fichiers de configuration + +>[!WARNING] **Restaurer une sauvegarde est destructif.** Cela remplace toutes les donnees actuelles par le contenu de la sauvegarde. Tout changement effectue apres la creation de la sauvegarde sera perdu. Creez toujours une nouvelle sauvegarde avant de restaurer. + +## Bonnes pratiques + +1. Creez une sauvegarde manuelle avant les actions admin majeures +2. Examinez la retention des sauvegardes dans `backup.json` +3. Testez d'abord la restauration sur un serveur de test +4. Gardez les sauvegardes a l'arret activees pour la recuperation apres un crash diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..7bd64b48 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Import de donnees + +Importez des donnees de faction depuis d'autres plugins pour migrer votre serveur vers HyperFactions. + +## Commande d'import + +`/f admin import [path] [flags]` + +**Permission** : `hyperfactions.admin.use` + +## Sources supportees + +| Source | Description | +|--------|-------------| +| `elbaphfactions` | Importer depuis les donnees ElbaphFactions | +| `hyfactions` | Importer depuis les donnees HyFactions v1 | + +## Drapeaux d'import + +| Drapeau | Description | +|---------|-------------| +| `--dry-run` | Valider les donnees sans rien importer | +| `--overwrite` | Ecraser les factions existantes avec le meme nom | +| `--no-zones` | Ignorer les donnees de zone pendant l'import | +| `--no-power` | Ignorer les donnees de puissance pendant l'import | + +>[!TIP] Executez toujours avec `--dry-run` d'abord pour previsualiser ce qui sera importe et detecter les problemes de donnees avant de valider les changements. + +## Processus d'import + +1. Une sauvegarde pre-import est creee automatiquement +2. Les correspondances de noms de joueurs sont chargees +3. Les factions, revendications et zones sont converties +4. Les donnees sont validees et enregistrees + +## Exemples + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] L'utilisation de `--overwrite` **remplacera** toute faction existante partageant le meme nom qu'une faction importee. Les donnees des membres et les revendications seront ecrasees. Executez d'abord avec `--dry-run` pour identifier les conflits. + +>[!NOTE] Certaines donnees specifiques a la source (ex. : parcelles de travailleurs, parcelles agricoles) n'ont pas d'equivalent dans HyperFactions et seront enregistrees comme avertissements lors de l'import. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..3ef1ee2d --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Verification des mises a jour + +HyperFactions peut verifier les nouvelles versions et gerer la dependance HyperProtect-Mixin. + +## Commandes de mise a jour + +| Commande | Description | +|----------|-------------| +| `/f admin update` | Verifier les mises a jour d'HyperFactions | +| `/f admin update mixin` | Verifier/telecharger HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Activer/desactiver le telechargement automatique | +| `/f admin version` | Afficher la version actuelle et les infos de build | + +## Canaux de publication + +| Canal | Description | +|-------|-------------| +| **Stable** | Recommande pour les serveurs de production | +| **Pre-release** | Acces anticipe aux fonctionnalites a venir | + +>[!INFO] Le verificateur de mises a jour ne fait que notifier les nouvelles versions. Il n'installe **pas** automatiquement les mises a jour d'HyperFactions lui-meme. + +## HyperProtect-Mixin + +HyperProtect-Mixin est le mixin de protection recommande qui active les drapeaux de zone avances (explosions, propagation du feu, conservation de l'inventaire, etc.). + +- `/f admin update mixin` verifie la derniere version +et la telecharge si une version plus recente est disponible +- Le telechargement automatique peut etre active ou desactive par serveur + +>[!TIP] Apres le telechargement d'une nouvelle version du mixin, un redemarrage du serveur est necessaire pour que les changements prennent effet. + +## Procedure de retour en arriere + +Si une mise a jour cause des problemes : + +1. Arretez le serveur +2. Remplacez le JAR du plugin par la version precedente +3. Demarrez le serveur +4. Verifiez le fonctionnement avec `/f admin version` + +>[!WARNING] Revenir a une version anterieure peut necessiter une reinitialisation de la migration de configuration. Gardez toujours des sauvegardes avant de mettre a jour. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..63a6b70d --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Premiers pas en tant qu'administrateur + +Bienvenue dans l'administration d'HyperFactions. Ce guide couvre vos premieres etapes apres l'installation du plugin. + +## Ouvrir le tableau de bord admin + +`/f admin` +Ouvre l'interface du tableau de bord admin avec acces a tous les outils de gestion, editeurs de zones et parametres du serveur. + +>[!INFO] Vous avez besoin de la permission **hyperfactions.admin.use** ou du statut OP pour acceder aux commandes admin. + +## Conditions requises + +- **Avec un plugin de permissions** : Accordez `hyperfactions.admin.use` +- **Sans plugin de permissions** : Le joueur doit etre un +operateur du serveur (`adminRequiresOp=true` par defaut) + +## Premieres etapes apres l'installation + +1. Executez `/f admin` pour verifier votre acces +2. Ouvrez **Config** pour examiner les parametres de faction par defaut +3. Creez une **SafeZone** au spawn avec `/f admin safezone Spawn` +4. Creez eventuellement des **WarZones** pour les arenes JcJ +5. Examinez les parametres de **Sauvegarde** pour assurer la securite des donnees + +## Capacites d'administration + +| Domaine | Ce que vous pouvez faire | +|---------|--------------------------| +| Factions | Inspecter, modifier ou dissoudre de force n'importe quelle faction | +| Zones | Creer des SafeZones et WarZones avec des drapeaux personnalises | +| Puissance | Remplacer les valeurs de puissance des joueurs/factions | +| Economie | Gerer les tresors de faction et l'entretien | +| Config | Modifier les parametres en direct via l'interface ou recharger depuis le disque | +| Sauvegardes | Creer, restaurer et gerer les sauvegardes de donnees | +| Imports | Migrer les donnees depuis d'autres plugins de faction | + +>[!TIP] Utilisez `/f admin --text` pour obtenir une sortie textuelle dans le chat au lieu de l'interface, utile pour la console ou l'automatisation. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..e0320377 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Permissions admin + +Toutes les fonctionnalites admin sont protegees par des noeuds de permission dans l'espace de noms `hyperfactions.admin`. + +## Noeuds de permission + +| Permission | Description | +|-----------|-------------| +| `hyperfactions.admin.*` | Accorde **toutes** les permissions admin | +| `hyperfactions.admin.use` | Acceder au tableau de bord `/f admin` | +| `hyperfactions.admin.reload` | Recharger les fichiers de configuration | +| `hyperfactions.admin.debug` | Activer/desactiver les categories de journalisation de debogage | +| `hyperfactions.admin.zones` | Creer, modifier et supprimer des zones | +| `hyperfactions.admin.disband` | Dissoudre de force n'importe quelle faction | +| `hyperfactions.admin.modify` | Modifier les parametres de n'importe quelle faction | +| `hyperfactions.admin.bypass.limits` | Contourner les limites de revendication et de puissance | +| `hyperfactions.admin.backup` | Creer et restaurer des sauvegardes | +| `hyperfactions.admin.power` | Remplacer les valeurs de puissance des joueurs | +| `hyperfactions.admin.economy` | Gerer les tresors de faction | + +## Comportement de repli + +Lorsqu'**aucun plugin de permissions** n'est installe, les permissions admin se rabattent sur le statut d'operateur du serveur (OP). Ceci est controle par `adminRequiresOp` dans la configuration du serveur (defaut : `true`). + +>[!NOTE] Le joker `hyperfactions.admin.*` accorde toutes les permissions admin. Utilisez des noeuds individuels pour un controle granulaire de votre equipe de staff. + +## Ordre de resolution des permissions + +1. Fournisseur **VaultUnlocked** (si disponible) +2. Fournisseur **HyperPerms** (si disponible) +3. Fournisseur **LuckPerms** (si disponible) +4. **Verification OP** pour les noeuds admin (repli) + +>[!WARNING] Sans plugin de permissions et avec `adminRequiresOp` desactive, les commandes admin sont **ouvertes a tous les joueurs**. Utilisez toujours un plugin de permissions en production. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..dbbbf486 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Commandes admin de puissance + +Remplacez les valeurs de puissance des joueurs et des factions. Toutes les commandes necessitent la permission `hyperfactions.admin.power`. + +## Commandes de puissance des joueurs + +| Commande | Description | +|----------|-------------| +| `/f admin power set ` | Definir la valeur exacte de puissance | +| `/f admin power add ` | Ajouter de la puissance au joueur | +| `/f admin power remove ` | Retirer de la puissance au joueur | +| `/f admin power reset ` | Reinitialiser a la puissance de depart par defaut | +| `/f admin power info ` | Voir le detail complet de la puissance | + +## Impact de la puissance sur les factions + +La puissance totale d'une faction est la somme de la puissance individuelle de tous ses membres. Les revendications territoriales necessitent une puissance totale suffisante pour etre maintenues. + +| Scenario | Effet | +|----------|-------| +| Puissance augmentee | La faction peut revendiquer plus de territoire | +| Puissance diminuee | La faction peut devenir vulnerable a la sur-revendication | +| Puissance reinitialisee | Remet le joueur a la valeur de depart par defaut | + +>[!WARNING] Diminuer la puissance d'un joueur peut faire perdre du territoire a sa faction si la puissance totale tombe en dessous du nombre de chunks revendiques. + +## Exemples + +- `/f admin power set Steve 50` -- definir a exactement 50 +- `/f admin power add Steve 10` -- augmenter de 10 +- `/f admin power remove Steve 5` -- diminuer de 5 +- `/f admin power reset Steve` -- retour a la valeur par defaut +- `/f admin power info Steve` -- afficher le detail complet + +>[!TIP] Utilisez `/f admin power info ` pour voir la puissance actuelle, la puissance maximale et les eventuels remplacement actifs avant d'effectuer des modifications. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..4339b98b --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Remplacements de puissance + +Commandes speciales de puissance qui modifient le comportement de la puissance pour des joueurs ou factions specifiques. + +## Commandes de remplacement + +| Commande | Description | +|----------|-------------| +| `/f admin power setmax ` | Definir un plafond de puissance maximale personnalise | +| `/f admin power noloss ` | Activer/desactiver l'immunite a la penalite de mort | +| `/f admin power nodecay ` | Activer/desactiver l'immunite a la decroissance hors ligne | +| `/f admin power info ` | Voir tous les remplacements et details de puissance | + +## Puissance maximale personnalisee + +`/f admin power setmax ` +Definit un plafond de puissance maximale personnalise pour le joueur, remplacant la valeur par defaut du serveur. + +>[!INFO] Definir un maximum personnalise ne **modifie pas** la puissance actuelle. Cela change uniquement le plafond. Le joueur doit toujours gagner de la puissance jusqu'a la nouvelle limite. + +## Mode sans perte + +`/f admin power noloss ` +Active/desactive l'immunite a la perte de puissance a la mort. Lorsqu'il est active, le joueur ne **perdra pas** de puissance en mourant. + +Utile pour : +- Periodes de protection des nouveaux joueurs +- Participants a des evenements +- Membres du staff + +## Mode sans decroissance + +`/f admin power nodecay ` +Active/desactive l'immunite a la decroissance de puissance hors ligne. Lorsqu'il est active, la puissance du joueur ne **diminuera pas** en etant hors ligne. + +Utile pour : +- Joueurs en absence prolongee +- Membres VIP +- Protection saisonniere + +## Informations de puissance + +`/f admin power info ` +Affiche un detail complet : + +- Puissance actuelle et puissance maximale +- Remplacements actifs (noloss, nodecay, max personnalise) +- Derniere mort et puissance perdue +- Pourcentage de contribution a la faction + +>[!TIP] Tous les remplacements de puissance persistent entre les redemarrages du serveur et sont stockes dans le fichier de donnees du joueur. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..b6f8e749 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Reference des commandes admin + +Liste complete de toutes les sous-commandes `/f admin` avec la syntaxe et les permissions requises. + +## Tableau de bord et general + +| Commande | Permission | +|----------|-----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Gestion des factions + +| Commande | Permission | +|----------|-----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Gestion des zones + +| Commande | Permission | +|----------|-----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Puissance et economie + +| Commande | Permission | +|----------|-----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Maintenance + +| Commande | Permission | +|----------|-----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Tous les noeuds de permission sont prefixes par `hyperfactions.` (ex. : `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..eee33130 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Integrations de plugins + +HyperFactions s'integre avec plusieurs plugins externes via des dependances optionnelles. Toutes les integrations sont facultatives et echouent gracieusement si elles ne sont pas disponibles. + +## Verifier le statut des integrations + +`/f admin version` +Affiche la version actuelle et les integrations detectees. + +`/f admin integration` +Ouvre le panneau de gestion des integrations avec le statut detaille de chaque plugin detecte. + +## Tableau des integrations + +| Plugin | Type | Description | +|--------|------|-------------| +| **HyperPerms** | Permissions | Systeme de permissions complet avec groupes, heritage et contexte | +| **LuckPerms** | Permissions | Fournisseur de permissions alternatif | +| **VaultUnlocked** | Permissions/Economie | Pont de permissions et d'economie | +| **HyperProtect-Mixin** | Protection | Active les drapeaux de zone avances (explosions, feu, conservation de l'inventaire) | +| **OrbisGuard-Mixins** | Protection | Mixin alternatif pour l'application des drapeaux de zone | +| **PlaceholderAPI** | Espaces reservees | 49 espaces reservees de faction pour d'autres plugins | +| **WiFlow PlaceholderAPI** | Espaces reservees | Fournisseur d'espaces reservees alternatif | +| **GravestonePlugin** | Mort | Controle d'acces aux pierres tombales dans les zones | +| **HyperEssentials** | Fonctionnalites | Drapeaux de zone pour les foyers, points de passage et kits | +| **KyuubiSoft Core** | Framework | Integration de la bibliotheque de base | +| **Sentry** | Surveillance | Suivi des erreurs et diagnostics | + +## Priorite des fournisseurs de permissions + +1. **VaultUnlocked** (priorite la plus elevee) +2. **HyperPerms** +3. **LuckPerms** +4. **Repli OP** (si aucun fournisseur trouve) + +>[!INFO] Les integrations sont detectees une seule fois au demarrage par reflexion. Les resultats sont mis en cache pour la session. Un redemarrage du serveur est necessaire apres l'ajout ou la suppression d'un plugin integre. + +>[!TIP] Utilisez `/f admin debug toggle integration` pour activer la journalisation detaillee des integrations pour le depannage. + +>[!NOTE] HyperProtect-Mixin est le mixin de protection **recommande**. Sans lui, 15 drapeaux de zone n'auront aucun effet. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..c7609cbc --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Bases des zones + +Les zones sont des territoires controles par les administrateurs avec des regles personnalisees qui remplacent la protection normale des factions. + +## Types de zones + +- **SafeZone** -- Pas de JcJ, pas de construction, pas de degats. +Ideal pour les zones de reapparition et les centres commerciaux. +- **WarZone** -- JcJ toujours active, pas de construction. +Ideal pour les arenes et les zones de bataille disputees. + +## Creer des zones + +`/f admin safezone ` +Cree une SafeZone et revendique votre chunk actuel. + +`/f admin warzone ` +Cree une WarZone et revendique votre chunk actuel. + +Apres la creation, placez-vous dans des chunks supplementaires et utilisez `/f admin zone claim ` pour etendre la zone. + +## Gerer les chunks de zone + +`/f admin zone claim ` +Ajouter le chunk actuel a la zone nommee. + +`/f admin zone unclaim ` +Retirer le chunk actuel de la zone nommee. + +`/f admin zone radius ` +Revendiquer un carre de chunks autour de votre position. + +## Supprimer des zones + +`/f admin removezone ` +Supprime definitivement la zone et libere tous ses chunks revendiques. + +>[!WARNING] Supprimer une zone libere tous ses chunks instantanement. Cela ne peut pas etre annule sans une restauration de sauvegarde. + +>[!INFO] Les regles de zone **remplacent toujours** les regles de territoire de faction. Une SafeZone dans un territoire ennemi reste sure. diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..4b0a7279 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Reference des commandes de zone + +Reference complete de toutes les commandes de gestion de zone. Toutes necessitent la permission `hyperfactions.admin.zones`. + +## Creation rapide + +| Commande | Description | +|----------|-------------| +| `/f admin safezone ` | Creer une SafeZone au chunk actuel | +| `/f admin warzone ` | Creer une WarZone au chunk actuel | +| `/f admin removezone ` | Supprimer une zone et liberer les chunks | + +## Gestion des zones + +| Commande | Description | +|----------|-------------| +| `/f admin zone create ` | Creer une zone (safezone/warzone) | +| `/f admin zone delete ` | Supprimer une zone | +| `/f admin zone claim ` | Ajouter le chunk actuel a la zone | +| `/f admin zone unclaim ` | Retirer le chunk actuel de la zone | +| `/f admin zone radius ` | Revendiquer un rayon carre de chunks | +| `/f admin zone list` | Lister toutes les zones avec le nombre de chunks | +| `/f admin zone notify ` | Activer/desactiver les messages d'entree/sortie | +| `/f admin zone title upper/lower ` | Definir le texte du titre de zone | +| `/f admin zone properties ` | Ouvrir l'interface des proprietes de zone | + +## Gestion des drapeaux + +| Commande | Description | +|----------|-------------| +| `/f admin zoneflag ` | Definir un drapeau specifique | + +>[!TIP] Utilisez l'interface des **proprietes** de zone pour un editeur visuel avec des bascules pour chaque drapeau, organise par categorie. + +## Exemples + +- `/f admin safezone Spawn` -- creer une protection de spawn +- `/f admin zone radius Spawn 3` -- etendre a 7x7 chunks +- `/f admin zoneflag Spawn door_use true` -- autoriser les portes +- `/f admin zone notify Spawn true` -- afficher les messages d'entree diff --git a/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..47e0c17d --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Drapeaux de zone + +Les zones supportent **47 drapeaux booleens** repartis en 10 categories. Chaque drapeau controle un comportement specifique dans la zone. + +## Apercu des categories de drapeaux + +| Categorie | Nombre | Drapeaux cles | +|-----------|--------|---------------| +| Combat | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Degats | 4 | fall_damage, explosion_damage, fire_spread | +| Mort | 2 | keep_inventory, power_loss | +| Construction | 4 | build_allowed, block_place, hammer_use | +| Interaction | 13 | door_use, container_use, bench_use, npc_tame | +| Transport | 3 | teleporter_use, portal_use, mount_entry | +| Objets | 4 | item_drop, item_pickup, invincible_items | +| Apparition de mobs | 5 | mob_spawning, hostile/passive/neutral | +| Nettoyage de mobs | 4 | mob_clear, hostile/passive/neutral clear | +| Integration | 5 | gravestone_access, show_on_map, essentials_homes | + +## Valeurs par defaut (SafeZone vs WarZone) + +| Drapeau | SafeZone | WarZone | +|---------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Certains drapeaux necessitent **HyperProtect-Mixin** pour fonctionner (ex. : keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Sans le mixin, ces drapeaux n'ont aucun effet meme lorsqu'ils sont actives. + +## Definir des drapeaux + +`/f admin zoneflag ` + +>[!TIP] Utilisez `/f admin zone properties ` pour un editeur visuel avec bascules groupees par categorie. diff --git a/src/main/resources/Server/Languages/fr-FR/help/combat/death.md b/src/main/resources/Server/Languages/fr-FR/help/combat/death.md new file mode 100644 index 00000000..2d095f1e --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Mort et recuperation + +La mort a de vraies consequences dans les factions. Chaque mort vous coute de la puissance personnelle, affaiblissant la capacite de votre faction a detenir du territoire. + +## Perte de puissance + +Chaque mort coute -1.0 de puissance sur votre total personnel. Cela reduit la puissance combinee de la faction. + +| Evenement | Changement de puissance | +|-----------|------------------------| +| Mort (toute cause) | -1.0 | +| Regeneration en ligne | +0.1 par minute | +| Deconnexion en combat | -1.0 (tue) | + +>[!NOTE] Ce sont les valeurs par defaut. L'administrateur de votre serveur peut avoir configure des parametres differents. + +## Exemples de scenarios + +*5 membres a 10.0 de puissance chacun = 50 au total, 20 revendications.* +*Un membre meurt deux fois : 8.0 de puissance, total de la faction 48.* +*Trois membres meurent une fois chacun : le total tombe a 47.* + +>[!WARNING] Si la puissance de votre faction tombe en dessous du cout de vos revendications, les ennemis peuvent sur-revendiquer votre territoire. + +## Recuperation + +La puissance se regenere a 0.1 par minute en ligne. Recuperer 1.0 de puissance perdue prend environ 10 minutes. Les morts multiples s'accumulent, evitez donc les combats repetes. + +--- + +## Tous les types de mort + +La perte de puissance s'applique a toutes les morts : JcJ, creatures, degats de chute, noyade et toute autre cause. Il n'y a pas de facon sure de mourir. + +>[!TIP] Definissez un foyer de faction avec /f sethome pour que les membres puissent se regrouper rapidement apres etre morts. diff --git a/src/main/resources/Server/Languages/fr-FR/help/combat/protection.md b/src/main/resources/Server/Languages/fr-FR/help/combat/protection.md new file mode 100644 index 00000000..3a825530 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Protection territoriale + +Le territoire revendique offre plusieurs couches de defense pour les constructions et les ressources de votre faction. + +## Protection des blocs + +Seuls les membres de la faction peuvent placer ou casser des blocs dans votre territoire. Les ennemis et les neutres ne peuvent rien modifier. + +## Protection des conteneurs + +Les coffres, tonneaux et autres conteneurs sont securises. Seuls les membres de votre faction peuvent ouvrir ou interagir avec le stockage dans les chunks revendiques. + +## Alertes d'intrusion + +Lorsqu'un non-membre penetre dans votre territoire revendique, les membres de faction en ligne recoivent une notification avec le nom et la position de l'intrus. + +--- + +## Acces des allies + +Les allies ne peuvent pas construire ni casser de blocs dans votre territoire par defaut. Les degats entre allies sont egalement desactives, de sorte que les joueurs allies ne peuvent pas se blesser mutuellement. + +>[!INFO] Le territoire protege les blocs, pas les joueurs. Le JcJ dans votre propre territoire depend de la relation de l'attaquant avec votre faction. + +>[!TIP] Gardez vos revendications connectees et evitez les chunks isoles qui sont plus difficiles a defendre. diff --git a/src/main/resources/Server/Languages/fr-FR/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/fr-FR/help/combat/spawn_protection.md new file mode 100644 index 00000000..d3888b8c --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Protection de reapparition + +Apres avoir reapparu suite a une mort, vous recevez une protection temporaire pour empecher le camping au point de reapparition. + +## Comment ca fonctionne + +- La protection dure 5 secondes apres la reapparition +- Vous ne pouvez pas subir de degats pendant cette periode +- Un indicateur visuel montre votre statut de protection + +## Fin de la protection + +La protection de reapparition prend fin prematurement si vous : + +- Attaquez un autre joueur ou une entite +- Vous deplacez de votre position de reapparition + +Cela empeche les abus. Vous ne pouvez pas attaquer d'autres joueurs en etant invulnerable. Des que vous effectuez une action, la protection tombe et les regles de combat normales s'appliquent. + +--- + +>[!NOTE] Ce sont les valeurs par defaut. L'administrateur de votre serveur peut avoir configure des parametres differents. + +>[!TIP] Utilisez votre temps de protection pour evaluer la situation avant de vous deplacer. diff --git a/src/main/resources/Server/Languages/fr-FR/help/combat/tagging.md b/src/main/resources/Server/Languages/fr-FR/help/combat/tagging.md new file mode 100644 index 00000000..6e3eacdf --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Marquage de combat + +Lorsque vous attaquez ou etes attaque par un autre joueur, vous devenez marque au combat pendant 15 secondes. + +## En etant marque + +- Pas de teleportation /f home ou /f stuck +- Pas de commandes de teleportation du serveur +- Le marquage se reinitialise a chaque nouvelle action de combat +- Un chronometre affiche la duree restante du marquage + +--- + +## Penalite de deconnexion + +>[!WARNING] Se deconnecter en etant marque au combat tue votre personnage et vous perdez 1.0 de puissance. + +Vos objets tombent la ou vous vous etes deconnecte et les ennemis peuvent les recuperer. Attendez toujours que le marquage expire. + +## Comment fonctionne le chronometre + +Le chronometre de marquage de combat apparait a l'ecran lorsque vous entrez en combat. Chaque nouveau coup le reinitialise a 15 secondes. Une fois qu'il atteint zero, toutes les restrictions sont levees. + +>[!NOTE] Ce sont les valeurs par defaut. L'administrateur de votre serveur peut avoir configure des parametres differents. + +>[!TIP] Desengagez-vous et attendez l'expiration du chronometre si vous avez besoin de vous teleporter. diff --git a/src/main/resources/Server/Languages/fr-FR/help/combat/zones.md b/src/main/resources/Server/Languages/fr-FR/help/combat/zones.md new file mode 100644 index 00000000..fbb6e19e --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Zones speciales + +Les administrateurs peuvent designer des zones avec des regles speciales qui remplacent la protection territoriale normale des factions. + +## SafeZone + +Pas de degats JcJ, pas de destruction de blocs par les non-administrateurs. Ideal pour les zones de reapparition, les centres commerciaux et les zones d'evenements. Les joueurs ne peuvent pas etre blesses ici. + +## WarZone + +Le JcJ est toujours active. Aucune protection des blocs ne s'applique. Des zones de combat ouvertes ou tout est permis. Vous ne beneficiez d'aucun avantage de protection territoriale dans une WarZone. + +--- + +## Comparaison des zones + +| Caracteristique | SafeZone | WarZone | Territoire de faction | +|-----------------|----------|---------|----------------------| +| JcJ | Desactive | Toujours actif | Selon les relations | +| Destruction de blocs | Desactivee | Autorisee | Membres uniquement | +| Conteneurs | Proteges | Ouverts | Membres uniquement | +| Ideal pour | Spawn/Commerce | Arenes | Bases | + +>[!NOTE] Les regles de zone remplacent toujours les regles de territoire de faction. Un chunk revendique dans une WarZone suit les regles de la WarZone. + +>[!TIP] Consultez votre carte du territoire avec /f map pour voir les limites des zones. diff --git a/src/main/resources/Server/Languages/fr-FR/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/fr-FR/help/diplomacy/alliances.md new file mode 100644 index 00000000..2175a090 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Former des alliances + +Les alliances sont des accords mutuels entre deux factions qui offrent des avantages de protection et de cooperation. + +--- + +## Comment former une alliance + +`/f ally ` + +Envoie une demande d'alliance a la faction cible. L'alliance ne prend effet que lorsque les deux parties acceptent. Un Officier ou Chef de l'autre faction doit egalement executer la meme commande en ciblant votre faction pour confirmer. + +## Comment rompre une alliance + +`/f neutral ` + +L'une ou l'autre partie peut mettre fin unilateralement a une alliance en reinitialisant la relation a neutre. + +--- + +## Avantages de l'alliance + +| Avantage | Details | +|----------|---------| +| Pas de tirs allies | Les joueurs allies ne peuvent pas s'infliger de degats mutuellement | +| Visibilite partagee sur la carte | Le territoire allie s'affiche en bleu sur la carte du territoire | +| Interaction territoriale | Les allies peuvent utiliser les portes, sieges et transports dans votre territoire | +| Discussion d'allies | Passez en mode discussion d'allies pour communiquer entre factions | +| Protection contre la sur-revendication | Les allies ne peuvent pas sur-revendiquer le territoire de l'autre | + +>[!NOTE] Votre faction peut avoir jusqu'a 10 alliances a la fois. Choisissez vos allies avec sagesse. + +--- + +## Etiquette d'alliance + +>[!TIP] La communication est essentielle. Avant d'envoyer une demande d'alliance, envisagez de contacter le chef de l'autre faction pour discuter des termes. Une alliance solide repose sur un benefice mutuel, pas seulement sur la commodite. + +- Les alliances fonctionnent dans les deux sens -- si vous beneficiez de la protection, vos allies attendent la meme chose +- Rompre une alliance en temps de guerre peut nuire a la reputation de votre faction +- Les factions alliees peuvent coordonner leurs revendications territoriales pour creer des frontieres defensives diff --git a/src/main/resources/Server/Languages/fr-FR/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/fr-FR/help/diplomacy/enemies.md new file mode 100644 index 00000000..8c6f3fb7 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Factions ennemies + +Declarer un ennemi est une action unilaterale qui active immediatement le JcJ et l'agression territoriale contre la faction cible. Aucun accord n'est requis. + +--- + +## Declarer un ennemi + +`/f enemy ` + +Marque instantanement la faction cible comme votre ennemi. Cela prend effet immediatement -- aucune confirmation de l'autre partie n'est necessaire. Necessite le rang d'Officier ou superieur. + +## Reinitialiser a neutre + +`/f neutral ` + +Met fin au statut d'ennemi et reinitialise la relation a neutre. Cela necessite egalement Officier+ et prend effet immediatement. + +--- + +## Ce que le statut d'ennemi active + +| Effet | Details | +|-------|---------| +| JcJ dans le territoire | Le JcJ complet est active dans le territoire des deux factions | +| Sur-revendication | Vous pouvez sur-revendiquer leurs chunks s'ils sont en deficit de puissance | +| Marquage sur la carte | Le territoire ennemi s'affiche en rouge sur la carte du territoire | +| Pas de protection | La protection territoriale standard n'empeche pas le JcJ ennemi | + +>[!WARNING] Declarer un ennemi est une decision serieuse. Leurs membres peuvent aussi vous combattre dans votre propre territoire une fois la declaration faite. + +--- + +## Considerations strategiques + +- Les declarations d'ennemi sont unilaterales -- vous pouvez declarer sans leur consentement, mais ils vous voient egalement comme hostile +- Avant de declarer, verifiez la puissance de la cible avec /f info. S'ils sont forts, vous pourriez perdre du territoire a la place +- Affaiblissez les ennemis par des combats repetes pour drainer leur puissance, puis sur-revendiquez leurs terres +- Il n'y a pas de limite au nombre d'ennemis que vous pouvez avoir, mais combattre sur plusieurs fronts est risque + +>[!TIP] Utilisez /f neutral pour desamorcer les conflits. Parfois une paix strategique est plus precieuse qu'une guerre continue. + +>[!NOTE] Si vous etes allie avec une faction et que vous la declarez ennemie, l'alliance est rompue en premier. diff --git a/src/main/resources/Server/Languages/fr-FR/help/diplomacy/relations.md b/src/main/resources/Server/Languages/fr-FR/help/diplomacy/relations.md new file mode 100644 index 00000000..4c38f99d --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Relations de faction + +Chaque paire de factions a une relation diplomatique qui determine comment elles interagissent. Il existe trois etats : Allie, Ennemi et Neutre. + +--- + +## Comparaison des relations + +| Effet | Allie | Neutre | Ennemi | +|-------|-------|--------|--------| +| JcJ dans le territoire | Desactive | Regles standards | Active | +| Protection territoriale | Protection mutuelle | Protection standard | Peut sur-revendiquer si affaibli | +| Tirs allies | Desactives | N/A | Actives partout | +| Couleur sur la carte | Bleu | Gris | Rouge | +| Comment definir | Accord mutuel | Etat par defaut | Declaration unilaterale | +| Acces au chat | Canal de discussion d'allies | Aucun | Aucun | + +--- + +## Consulter les relations + +`/f relations` + +Affiche toutes vos alliances actuelles, vos ennemis et les demandes d'alliance en attente. + +## Comment fonctionnent les relations + +- Neutre est l'etat par defaut entre toutes les factions. Les regles standards du serveur s'appliquent. +- L'alliance necessite que les deux factions acceptent. L'une ou l'autre partie peut la rompre unilateralement. +- Ennemi est declare de maniere unilaterale. Aucun accord n'est necessaire -- l'autre faction est immediatement marquee comme votre ennemi. + +>[!INFO] Les relations sont gerees par les Officiers et le Chef. Les Membres peuvent consulter les relations mais ne peuvent pas les modifier. + +>[!TIP] Utilisez /f relations regulierement pour suivre le paysage diplomatique. Savoir qui sont vos ennemis vous aide a vous preparer aux conflits territoriaux. diff --git a/src/main/resources/Server/Languages/fr-FR/help/economy/commands.md b/src/main/resources/Server/Languages/fr-FR/help/economy/commands.md new file mode 100644 index 00000000..68122a3c --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Commandes d'economie + +Reference rapide de toutes les commandes d'economie de faction. + +| Commande | Description | Role | +|----------|-------------|------| +| /f balance | Voir le solde du tresor | Tous | +| /f deposit (montant) | Deposer dans le tresor | Tous | +| /f withdraw (montant) | Retirer du tresor | Officier+ | +| /f money transfer (faction) (montant) | Transferer a une autre faction | Officier+ | +| /f money log [page] | Voir l'historique des transactions | Officier+ | + +--- + +## Alias de commandes + +- /f balance peut aussi etre utilise comme /f bal +- /f deposit et /f withdraw acceptent les montants decimaux + +## Conditions de role + +Les commandes de retrait et de transfert sont reservees aux Officiers et au Chef. Toutes les autres commandes d'economie sont accessibles a n'importe quel membre de la faction. + +>[!TIP] Utilisez /f money log pour consulter les depots, retraits et transferts recents avec horodatage. diff --git a/src/main/resources/Server/Languages/fr-FR/help/economy/funds.md b/src/main/resources/Server/Languages/fr-FR/help/economy/funds.md new file mode 100644 index 00000000..a68cea91 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Gerer les fonds + +Les membres de la faction travaillent ensemble pour alimenter le tresor par des depots, retraits et transferts. + +## Deposer + +N'importe quel membre peut deposer des fonds personnels dans le tresor de la faction. + +`/f deposit ` +Deposer de votre solde personnel dans le tresor. + +## Retirer + +Les Officiers et le Chef peuvent retirer des fonds vers leur solde personnel. + +`/f withdraw ` +Retirer du tresor vers votre solde. (Officier+) + +## Transferer + +Les Officiers peuvent transferer des fonds directement entre les tresors de factions pour des accords commerciaux ou de la diplomatie. + +`/f money transfer ` +Envoyer des fonds au tresor d'une autre faction. (Officier+) + +--- + +## Frais + +| Transaction | Frais | +|-------------|-------| +| Depot | 0% | +| Retrait | 0% | +| Transfert | 0% | + +>[!INFO] Les taux de frais sont configurables par le serveur et peuvent differer des valeurs par defaut indiquees ci-dessus. + +>[!TIP] Toutes les transactions sont enregistrees. Utilisez /f money log pour consulter l'activite recente. diff --git a/src/main/resources/Server/Languages/fr-FR/help/economy/treasury.md b/src/main/resources/Server/Languages/fr-FR/help/economy/treasury.md new file mode 100644 index 00000000..86d4e5e6 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Tresor de faction + +Chaque faction possede un tresor partage qui sert de banque a la faction. Les fonds sont utilises pour les couts d'entretien, la maintenance du territoire et les operations de la faction. + +## Solde de depart + +Les nouvelles factions commencent avec 0 dans leur tresor. Les membres doivent deposer des fonds pour constituer des reserves. + +## Qui peut gerer + +- N'importe quel membre peut deposer des fonds +- Les Officiers et le Chef peuvent retirer et transferer +- Le Chef a le controle total du tresor + +--- + +`/f balance` +Verifier le solde actuel du tresor de votre faction. Egalement disponible via /f bal. + +>[!TIP] Contribuez regulierement pour garder votre faction financee. Les couts d'entretien du territoire peuvent vider un tresor vide rapidement. + +>[!INFO] Toutes les transactions du tresor sont enregistrees et peuvent etre consultees par les officiers. diff --git a/src/main/resources/Server/Languages/fr-FR/help/economy/upkeep.md b/src/main/resources/Server/Languages/fr-FR/help/economy/upkeep.md new file mode 100644 index 00000000..3211b64b --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Entretien du territoire + +Les factions doivent payer un entretien continu pour maintenir leur territoire revendique. Cela empeche l'accumulation de terres et maintient la carte dynamique. + +## Couts d'entretien + +| Parametre | Valeur par defaut | +|-----------|-------------------| +| Cout par chunk | 2.0 par cycle | +| Intervalle de paiement | Toutes les 24 heures | +| Chunks gratuits | 3 (sans cout) | +| Mode de calcul | Taux fixe | + +>[!NOTE] Ce sont les valeurs par defaut. L'administrateur de votre serveur peut avoir configure des parametres differents. + +Vos 3 premiers chunks sont gratuits. Au-dela, chaque chunk revendique supplementaire coute 2.0 par cycle de paiement. + +## Paiement automatique + +Le paiement automatique est active par defaut. Le systeme deduit automatiquement l'entretien de votre tresor a chaque intervalle. Aucune action manuelle n'est necessaire. + +--- + +## Periode de grace + +Si votre tresor ne peut pas couvrir l'entretien, une periode de grace de 48 heures commence. Un avertissement est envoye 6 heures avant que les revendications ne commencent a etre perdues. + +>[!WARNING] Si l'entretien reste impaye apres la periode de grace, votre faction perd 1 revendication par cycle jusqu'a ce que les couts soient couverts ou que toutes les revendications supplementaires soient perdues. + +## Exemple + +*Une faction avec 8 revendications paie pour 5 chunks (8 moins 3 gratuits). A 2.0 par chunk, cela fait 10.0 par cycle.* + +>[!TIP] Gardez votre tresor approvisionne au-dessus de votre cout d'entretien. Utilisez /f balance pour verifier vos reserves. diff --git a/src/main/resources/Server/Languages/fr-FR/help/power_land/claiming.md b/src/main/resources/Server/Languages/fr-FR/help/power_land/claiming.md new file mode 100644 index 00000000..7bdc13da --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Revendiquer un territoire + +Revendiquer un chunk le place sous le controle de votre faction. Seuls les membres de la faction peuvent construire, casser ou acceder aux conteneurs dans un territoire revendique. + +--- + +## Comment revendiquer + +`/f claim` + +Placez-vous dans le chunk que vous souhaitez revendiquer et executez cette commande. Le chunk est immediatement protege. Necessite le rang d'Officier ou superieur. + +## Comment annuler une revendication + +`/f unclaim` + +Libere le chunk dans lequel vous vous trouvez et le remet a l'etat sauvage. Necessite egalement Officier+. + +--- + +## Regles de revendication + +| Regle | Valeur par defaut | +|-------|-------------------| +| Cout en puissance par revendication | 2.0 de puissance | +| Maximum de revendications | 100 par faction | +| Adjacence obligatoire | Non (vous pouvez revendiquer n'importe ou) | + +>[!NOTE] Ce sont les valeurs par defaut. L'administrateur de votre serveur peut avoir configure des parametres differents. + +>[!INFO] Chaque revendication coute 2.0 de puissance a maintenir. Une faction avec 50 de puissance totale peut detenir en securite jusqu'a 25 revendications. + +--- + +## Ce que la protection offre + +Dans un territoire revendique, les regles suivantes s'appliquent par defaut : + +- Les etrangers ne peuvent ni casser, ni placer, ni interagir avec les blocs +- Les allies peuvent utiliser les portes, les sieges et les transports, mais ne peuvent ni casser ni placer de blocs +- Les Membres et Officiers ont un acces complet pour construire, casser et tout utiliser +- L'acces aux conteneurs (coffres, caisses) est reserve aux membres uniquement + +>[!TIP] Vous pouvez aussi revendiquer directement depuis la carte du territoire. Ouvrez /f map et cliquez sur les chunks non revendiques pour les revendiquer. + +>[!WARNING] Ne vous etendez pas trop. Si votre faction perd de la puissance a cause des morts, les revendications au-dela de votre budget de puissance deviennent vulnerables a la sur-revendication. diff --git a/src/main/resources/Server/Languages/fr-FR/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/fr-FR/help/power_land/losing_territory.md new file mode 100644 index 00000000..ca2a9c87 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Perte de territoire + +Lorsque la puissance totale d'une faction tombe en dessous du cout de ses revendications, elle devient pillable. Les ennemis peuvent sur-revendiquer des chunks directement sous vos pieds. + +--- + +## Comment fonctionne la sur-revendication + +`/f overclaim` + +Un Officier ou Chef d'une faction ennemie se place dans votre chunk revendique et execute cette commande. Si votre faction est en deficit de puissance, le chunk est transfere a leur faction. + +## Le calcul + +Chaque revendication coute 2.0 de puissance a maintenir. Si votre puissance totale tombe en dessous de ce seuil, les chunks en deficit sont vulnerables. + +>[!NOTE] Ce sont les valeurs par defaut. L'administrateur de votre serveur peut avoir configure des parametres differents. + +>[!WARNING] La sur-revendication est permanente. Une fois qu'un ennemi prend un chunk, vous devez le re-revendiquer (ou le sur-revendiquer en retour s'il s'affaiblit). + +--- + +## Exemple de scenario + +| Facteur | Valeur | +|---------|--------| +| Membres | 5 joueurs | +| Puissance par membre | 10 chacun (initiale) | +| Puissance totale | 50 | +| Revendications | 30 chunks | +| Puissance requise (30 x 2.0) | 60 | +| Deficit | 10 de puissance en moins | + +Dans cet exemple, la faction est deja pillable des le depart. Les ennemis pourraient sur-revendiquer jusqu'a 5 chunks (deficit de 10 / 2.0 par revendication) avant que la faction n'atteigne l'equilibre. + +--- + +## Comment prevenir la sur-revendication + +- Ne vous etendez pas trop -- gardez toujours la puissance totale au-dessus du cout de vos revendications avec une marge +- Restez actifs -- la puissance ne se regenere qu'en ligne (+0.1/min) +- Evitez les morts inutiles -- chaque mort coute 1.0 de puissance +- Recrutez plus de membres -- plus de joueurs signifie plus de puissance totale +- Annulez la revendication des chunks inutilises -- liberez de la puissance avec /f unclaim + +>[!TIP] Verifiez regulierement votre statut de puissance avec /f power. Si votre puissance totale est proche du cout de vos revendications, envisagez d'annuler la revendication de chunks moins importants avant une guerre. diff --git a/src/main/resources/Server/Languages/fr-FR/help/power_land/territory_map.md b/src/main/resources/Server/Languages/fr-FR/help/power_land/territory_map.md new file mode 100644 index 00000000..085683d7 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# La carte du territoire + +La carte du territoire vous offre une vue aerienne des chunks revendiques dans votre zone, montrant quelles factions controlent les terres autour de vous. + +--- + +## Ouvrir la carte + +`/f map` + +Ouvre l'interface de la carte du territoire centree sur votre position actuelle. + +--- + +## Legende des couleurs + +| Couleur | Signification | +|---------|---------------| +| [#55FF55] Couleur de votre faction | Territoire revendique par votre faction | +| [#5555FF] Bleu | Territoire d'une faction alliee | +| [#FF5555] Rouge | Territoire d'une faction ennemie | +| [#AAAAAA] Gris | Territoire d'une faction neutre | +| [#333333] Sombre | Terres sauvages (non revendiquees) | +| [#FFAA00] Or | Zones speciales (SafeZone, WarZone) | + +>[!INFO] La couleur de votre faction sur la carte correspond a celle que vous avez definie dans les parametres de couleur de la faction. Les allies et ennemis utilisent des couleurs fixes pour une identification facile. + +--- + +## Cliquer pour revendiquer + +La carte ne sert pas seulement a regarder -- vous pouvez interagir avec elle directement. + +- Cliquez sur un chunk non revendique pour le revendiquer (necessite le rang Officier+ et suffisamment de puissance) +- Cliquez sur un chunk revendique pour voir quelle faction le possede +- Faites defiler ou deplacez la vue pour explorer les environs + +>[!TIP] La carte est le moyen le plus simple de planifier l'expansion de votre territoire. Cherchez des zones non revendiquees pres de votre base et revendiquez strategiquement pour creer une frontiere continue. + +>[!NOTE] La carte affiche une zone fixe autour de votre position. Deplacez-vous et rouvrez-la pour voir d'autres parties du monde. diff --git a/src/main/resources/Server/Languages/fr-FR/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/fr-FR/help/power_land/understanding_power.md new file mode 100644 index 00000000..cabefeb2 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Comprendre la puissance + +La puissance est la ressource centrale qui determine la quantite de territoire que votre faction peut detenir. Chaque joueur possede une puissance personnelle qui contribue au total de la faction. + +--- + +## Valeurs de puissance par defaut + +| Parametre | Valeur | +|-----------|--------| +| Puissance maximale par joueur | 20 | +| Puissance de depart | 10 | +| Penalite de mort | -1.0 par mort | +| Recompense d'elimination | 0.0 | +| Taux de regeneration | +0.1 par minute (en ligne) | +| Cout en puissance par revendication | 2.0 | +| Deconnexion en etant marque | -1.0 supplementaire | + +>[!NOTE] Ce sont les valeurs par defaut. L'administrateur de votre serveur peut avoir configure des parametres differents. + +## Comment ca fonctionne + +La puissance totale de votre faction est la somme de la puissance personnelle de chaque membre. Votre puissance requise est le nombre de revendications multiplie par 2.0. Tant que la puissance totale reste au-dessus de la puissance requise, votre territoire est en securite. + +>[!INFO] La puissance se regenere passivement a 0.1 par minute tant que vous etes en ligne. A ce rythme, recuperer 1.0 de puissance prend environ 10 minutes. + +--- + +## Verifier votre puissance + +`/f power` + +Affiche votre puissance personnelle, la puissance totale de votre faction et la quantite necessaire pour maintenir les revendications actuelles. + +## La zone de danger + +Si la puissance totale tombe en dessous du montant requis pour vos revendications, votre faction devient vulnerable. Les ennemis peuvent sur-revendiquer vos chunks. + +>[!WARNING] Plusieurs morts en peu de temps peuvent s'enchainer rapidement. Si vous avez 5 membres chacun a 10 de puissance (50 au total) et 20 revendications (40 necessaires), 5 morts dans votre equipe vous font descendre a 45 -- toujours en securite. Mais 11 morts vous mettent a 39, en dessous du seuil de 40. + +>[!TIP] Gardez une marge de puissance. Ne revendiquez pas chaque chunk que vous pouvez vous permettre -- laissez de la place pour quelques morts sans devenir pillable. diff --git a/src/main/resources/Server/Languages/fr-FR/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/fr-FR/help/quick_ref/all_commands.md new file mode 100644 index 00000000..e45f32d5 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Toutes les commandes + +## Base + +| Commande | Description | Role | +|----------|-------------|------| +| /f | Ouvrir le menu de faction | Tous | +| /f help | Ouvrir le centre d'aide | Tous | +| /f create (nom) | Creer une faction | Tous | +| /f disband | Supprimer votre faction | Chef | +| /f leave | Quitter votre faction | Tous | + +## Adhesion + +| Commande | Description | Role | +|----------|-------------|------| +| /f invite (joueur) | Inviter un joueur | Officier+ | +| /f accept [faction] | Accepter une invitation | Tous | +| /f request (faction) | Demander a rejoindre | Tous | +| /f kick (joueur) | Retirer un membre | Officier+ | +| /f promote (joueur) | Promouvoir en Officier | Chef | +| /f demote (joueur) | Retrograder en Membre | Chef | +| /f transfer (joueur) | Transferer le leadership | Chef | + +## Territoire + +| Commande | Description | Role | +|----------|-------------|------| +| /f claim | Revendiquer le chunk actuel | Officier+ | +| /f unclaim | Liberer le chunk actuel | Officier+ | +| /f overclaim | Prendre un chunk affaibli | Officier+ | +| /f map | Ouvrir la carte du territoire | Tous | + +## Teleportation + +| Commande | Description | Role | +|----------|-------------|------| +| /f home | Se teleporter au foyer de faction | Tous | +| /f sethome | Definir le foyer de faction | Officier+ | +| /f delhome | Supprimer le foyer de faction | Officier+ | +| /f stuck | Echapper au territoire ennemi | Tous | + +## Informations + +| Commande | Description | Role | +|----------|-------------|------| +| /f info [faction] | Voir les details de la faction | Tous | +| /f list | Parcourir toutes les factions | Tous | +| /f members | Voir la liste des membres | Tous | +| /f who [joueur] | Voir les infos d'un joueur | Tous | +| /f power [joueur] | Verifier les niveaux de puissance | Tous | +| /f invites | Gerer les invitations/demandes | Tous | +| /f relations | Voir les relations diplomatiques | Tous | + +## Diplomatie + +| Commande | Description | Role | +|----------|-------------|------| +| /f ally (faction) | Demander une alliance | Officier+ | +| /f enemy (faction) | Declarer un ennemi | Officier+ | +| /f neutral (faction) | Reinitialiser a neutre | Officier+ | + +## Parametres + +| Commande | Description | Role | +|----------|-------------|------| +| /f settings | Ouvrir l'interface des parametres | Officier+ | +| /f rename (nom) | Renommer la faction | Chef | +| /f desc [texte] | Definir la description | Officier+ | +| /f color (code) | Definir la couleur de la faction | Officier+ | +| /f open | Autoriser tout le monde a rejoindre | Chef | +| /f close | Exiger une invitation | Chef | + +## Economie + +| Commande | Description | Role | +|----------|-------------|------| +| /f balance | Voir le tresor | Tous | +| /f deposit (montant) | Deposer des fonds | Tous | +| /f withdraw (montant) | Retirer des fonds | Officier+ | +| /f money transfer (faction) (mnt) | Transferer des fonds | Officier+ | +| /f money log [page] | Historique des transactions | Officier+ | + +## Discussion + +| Commande | Description | Role | +|----------|-------------|------| +| /f c | Alterner le mode de discussion | Tous | +| /f c f | Activer la discussion de faction | Tous | +| /f c a | Activer la discussion d'allies | Tous | +| /f c off | Activer la discussion publique | Tous | diff --git a/src/main/resources/Server/Languages/fr-FR/help/welcome/getting_started.md b/src/main/resources/Server/Languages/fr-FR/help/welcome/getting_started.md new file mode 100644 index 00000000..1116ff2e --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Premiers pas + +Bienvenue sur HyperFactions ! Voici comment vous lancer en quelques etapes. + +--- + +## Etape 1 : Ouvrir le menu de faction + +Tapez /f pour ouvrir l'interface principale des factions. C'est votre point central pour tout -- parcourir les factions, creer la votre et gerer les invitations. + +## Etape 2 : Choisissez votre voie + +| Option | Comment | +|--------|---------| +| Parcourir les factions ouvertes | Cliquez sur Parcourir dans le menu, puis sur Rejoindre pour toute faction ouverte. | +| Accepter une invitation | Consultez l'onglet Invitations. Si quelqu'un vous a invite, cliquez sur Accepter. | +| Creer la votre | Cliquez sur Creer une faction, choisissez un nom, et vous devenez le Chef. | + +## Etape 3 : Explorez votre faction + +Une fois dans une faction, vous verrez le Tableau de bord de faction avec votre liste de membres, la carte du territoire, les relations et les parametres. + +>[!TIP] Si vous debutez, essayez d'abord de rejoindre une faction existante. Vous apprendrez plus vite avec des membres experimentes a vos cotes. + +--- + +## Commandes essentielles pour commencer + +- /f -- Ouvre l'interface de faction +- /f home -- Se teleporter a la base de votre faction +- /f c -- Alterner le mode de discussion entre Normal, Faction et Allie +- /f map -- Afficher la carte du territoire autour de vous + +>[!TIP] Vous pouvez aussi taper /f help dans le chat pour obtenir un aide-memoire des commandes a tout moment. diff --git a/src/main/resources/Server/Languages/fr-FR/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/fr-FR/help/welcome/quick_tips.md new file mode 100644 index 00000000..cd84c982 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Conseils rapides + +Des conseils pratiques organises par categorie pour vous aider a prosperer. + +--- + +## Territoire + +- Revendiquez des terres autour de votre base tot avec `/f claim` -- les constructions non revendiquees n'ont **aucune protection** +- Chaque revendication coute **2.0 de puissance** a maintenir, alors ne vous etendez pas au-dela de ce que vos membres peuvent supporter +- Utilisez `/f map` pour reperer les revendications alentour et trouver des endroits surs pour construire +- Annulez la revendication des chunks dont vous n'avez plus besoin avec `/f unclaim` pour liberer de la puissance + +## Combat + +- Mourir coute **1.0 de puissance** -- evitez les combats inutiles quand votre faction est proche de sa limite de revendications +- Vous avez **5 secondes de protection de reapparition** apres avoir reapparu +- Le marquage de combat dure **15 secondes** -- se deconnecter en etant marque coute de la puissance supplementaire +- Les tirs allies sont **desactives** entre membres de faction et allies par defaut + +>[!WARNING] Se deconnecter en etant marque au combat entraine une perte de puissance supplementaire (1.0 par deconnexion). Restez pour combattre ou echappez-vous d'abord. + +## Social + +- Utilisez `/f c` pour alterner entre les modes de discussion afin que les conversations de faction restent privees +- Invitez des joueurs de confiance avec `/f invite ` -- les invitations expirent apres **5 minutes** +- Formez des alliances avec `/f ally ` pour une protection mutuelle et une visibilite partagee sur la carte +- Consultez `/f relations` pour voir votre statut diplomatique complet + +## Economie + +>[!TIP] Si le serveur a l'economie activee, votre faction peut accumuler un tresor. Les membres peuvent deposer, mais seuls les Officiers et les Chefs peuvent retirer ou transferer des fonds. + +- Deposez des fonds via l'interface du tresor pour renforcer votre faction +- Une faction plus riche peut se permettre plus de revendications et se remettre plus vite des revers + +## General + +- Tapez `/f` a tout moment pour ouvrir votre tableau de bord de faction -- tout est accessible depuis la +- Promouvez les membres actifs au rang d'Officier pour qu'ils puissent aider a revendiquer et gerer le territoire +- Gardez votre faction active -- la puissance ne se regenere que lorsque les joueurs sont **en ligne** diff --git a/src/main/resources/Server/Languages/fr-FR/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/fr-FR/help/welcome/what_are_factions.md new file mode 100644 index 00000000..09455d1a --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Qu'est-ce que les factions ? + +Les factions sont des equipes gerees par les joueurs qui revendiquent des territoires, construisent des bases et rivalisent pour la domination. Lorsque vous rejoignez ou creez une faction, vous accedez a des terres protegees, un foyer partage, une discussion privee et des outils diplomatiques. + +>[!TIP] Les factions, c'est avant tout le travail d'equipe. Plus vous avez de membres actifs, plus votre faction devient puissante. + +--- + +## Mecaniques de base + +| Mecanique | Ce qu'elle fait | +|-----------|----------------| +| Puissance | Chaque joueur genere de la puissance au fil du temps (max 20). La puissance totale de votre faction determine la quantite de terres que vous pouvez detenir. | +| Revendications | Les chunks revendiques sont proteges -- seuls les membres peuvent construire, casser ou ouvrir des conteneurs a l'interieur. Chaque revendication coute 2.0 de puissance a maintenir. | +| Relations | Les factions peuvent former des alliances pour une protection mutuelle ou declarer des ennemis pour activer le JcJ et l'agression territoriale. | +| Roles | Trois rangs -- Chef, Officier, Membre -- chacun avec des capacites differentes. | + +--- + +## Comment fonctionne la force + +La force de votre faction provient de ses membres. Chaque joueur commence avec 10 de puissance et en regenere jusqu'a 20 tant qu'il est en ligne. Mourir coute de la puissance. Si la puissance totale de votre faction tombe en dessous du cout de vos revendications, les ennemis peuvent sur-revendiquer votre territoire. + +>[!WARNING] Une seule mort coute 1.0 de puissance. Plusieurs morts en peu de temps peuvent rendre votre faction vulnerable a la sur-revendication. + +--- + +## Diplomatie en un coup d'oeil + +- **Allies** -- Accords mutuels qui empechent les tirs allies et protegent le territoire de chacun +- **Ennemis** -- Declarations unilaterales qui activent le JcJ sur les terres de chacun et permettent la sur-revendication +- **Neutres** -- L'etat par defaut entre toutes les factions avec les regles standards + +>[!INFO] Vous pouvez gerer tout cela via l'interface en jeu en tapant `/f` ou par les commandes du chat. diff --git a/src/main/resources/Server/Languages/fr-FR/help/your_faction/creating.md b/src/main/resources/Server/Languages/fr-FR/help/your_faction/creating.md new file mode 100644 index 00000000..f80437c5 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Creer une faction + +Fonder votre propre faction fait de vous le Chef avec un controle total sur les parametres, les membres et le territoire. + +--- + +## Comment creer + +`/f create ` + +Cela cree votre faction et ouvre immediatement le Tableau de bord de faction ou vous pouvez commencer a inviter des membres, revendiquer des terres et configurer les parametres. + +## Regles de nommage + +| Regle | Exigence | +|-------|----------| +| Longueur | Entre 3 et 24 caracteres | +| Caracteres | Lettres, chiffres et espaces uniquement | +| Unicite | Deux factions ne peuvent pas partager le meme nom | + +>[!WARNING] Choisissez votre nom avec soin. Le renommer plus tard necessite les permissions de Chef et peut etre soumis a un delai de recharge. + +--- + +## Ce qui se passe a la creation + +- Vous devenez le Chef (rang le plus eleve) +- Votre faction commence avec 0 revendication et votre puissance personnelle (10 par defaut) +- Le tableau de bord de faction s'ouvre automatiquement +- Vous pouvez immediatement inviter des joueurs, revendiquer du territoire et definir un foyer de faction + +>[!INFO] Si le serveur a l'integration economique activee, creer une faction peut couter de l'argent. Le cout de creation est defini par l'administrateur du serveur. + +>[!TIP] Apres la creation, vos premieres priorites devraient etre : inviter des amis, trouver un emplacement de base et le revendiquer. diff --git a/src/main/resources/Server/Languages/fr-FR/help/your_faction/joining.md b/src/main/resources/Server/Languages/fr-FR/help/your_faction/joining.md new file mode 100644 index 00000000..9237a318 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Rejoindre une faction + +Il existe trois facons de rejoindre une faction existante, selon la configuration de la faction. + +--- + +## Comparaison des methodes + +| Methode | Comment | Condition requise | +|---------|---------|-------------------| +| Parcourir et Rejoindre | Ouvrez /f, cliquez sur Parcourir, puis sur Rejoindre | La faction est ouverte | +| Accepter une invitation | Consultez l'onglet Invitations dans le menu /f | Invitation active | +| Demander a rejoindre | Utilisez /f request, attendez l'approbation | Un Officier ou le Chef approuve | + +--- + +## Details des invitations + +- Les invitations sont envoyees par les Officiers ou le Chef +- Les invitations expirent apres 5 minutes -- acceptez rapidement +- Consultez vos invitations en attente dans l'onglet Invitations du menu de faction +- Acceptez via l'interface ou avec /f accept + +## Demandes d'adhesion + +- Utilisez /f request pour demander a rejoindre une faction fermee +- Les demandes expirent apres 24 heures si elles ne sont pas traitees +- Les Officiers et le Chef peuvent approuver ou refuser les demandes depuis le tableau de bord de la faction + +>[!TIP] Vous ne savez pas quelle faction rejoindre ? Utilisez l'onglet Parcourir dans /f pour voir les descriptions des factions, le nombre de membres et si elles sont ouvertes ou sur invitation uniquement. + +>[!NOTE] Chaque faction peut accueillir jusqu'a 50 membres par defaut. Si une faction est pleine, vous devrez attendre qu'une place se libere. diff --git a/src/main/resources/Server/Languages/fr-FR/help/your_faction/managing.md b/src/main/resources/Server/Languages/fr-FR/help/your_faction/managing.md new file mode 100644 index 00000000..ef531238 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Gerer les membres + +Les Officiers et le Chef partagent la responsabilite de gerer la liste des membres de la faction. Voici les commandes cles et qui peut les utiliser. + +--- + +## Commandes + +| Commande | Ce qu'elle fait | Role requis | +|----------|----------------|-------------| +| `/f invite ` | Envoie une invitation (expire dans 5 min) | Officier+ | +| `/f kick ` | Retire un membre de la faction | Officier+ (voir note) | +| `/f promote ` | Promeut un Membre en Officier | Chef uniquement | +| `/f demote ` | Retrograde un Officier en Membre | Chef uniquement | +| `/f transfer ` | Transfere la propriete de la faction | Chef uniquement | + +>[!NOTE] Les Officiers ne peuvent expulser que des Membres. Pour retirer un autre Officier, le Chef doit d'abord le retrograder ou l'expulser directement. + +--- + +## Invitations + +- Les invitations expirent apres 5 minutes si elles ne sont pas acceptees +- Le joueur invite les voit dans son onglet Invitations en ouvrant /f +- Il n'y a pas de limite au nombre d'invitations que vous pouvez envoyer a la fois +- Votre faction peut accueillir jusqu'a 50 membres au total + +## Promotions et retrogradations + +- Seul le Chef peut promouvoir ou retrograder +- /f promote eleve un Membre au rang d'Officier +- /f demote rabaisse un Officier au rang de Membre + +## Transfert de leadership + +>[!WARNING] Le transfert de leadership est irreversible. Vous serez retrograde au rang d'Officier et le joueur cible deviendra le nouveau Chef. Assurez-vous de lui faire entierement confiance. + +`/f transfer ` + +La cible doit etre un membre actuel de votre faction. diff --git a/src/main/resources/Server/Languages/fr-FR/help/your_faction/roles.md b/src/main/resources/Server/Languages/fr-FR/help/your_faction/roles.md new file mode 100644 index 00000000..5d9cc43c --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Roles et rangs + +Chaque faction possede trois roles dans une hierarchie stricte. Les roles superieurs heritent de toutes les capacites des roles inferieurs. + +--- + +## Repartition des permissions + +| Action | Chef | Officier | Membre | +|--------|------|----------|--------| +| Construire dans le territoire | Oui | Oui | Oui | +| Utiliser le foyer de faction | Oui | Oui | Oui | +| Discussion de faction et d'allie | Oui | Oui | Oui | +| Inviter des joueurs | Oui | Oui | Non | +| Expulser des membres | Oui | Oui (Membres uniquement) | Non | +| Revendiquer / annuler une revendication | Oui | Oui | Non | +| Sur-revendiquer un territoire ennemi | Oui | Oui | Non | +| Definir le foyer de faction | Oui | Oui | Non | +| Supprimer le foyer de faction | Oui | Oui | Non | +| Gerer les relations (allie/ennemi) | Oui | Oui | Non | +| Consulter les journaux de faction | Oui | Oui | Non | +| Promouvoir en Officier | Oui | Non | Non | +| Retrograder un Officier | Oui | Non | Non | +| Renommer la faction | Oui | Non | Non | +| Definir la description / le tag / la couleur | Oui | Non | Non | +| Ouvrir / fermer la faction | Oui | Non | Non | +| Acceder aux parametres de la faction | Oui | Non | Non | +| Transferer le leadership | Oui | Non | Non | +| Dissoudre la faction | Oui | Non | Non | + +>[!NOTE] Les Officiers peuvent expulser des Membres mais ne peuvent pas expulser d'autres Officiers. Seul le Chef peut retirer des Officiers. + +--- + +## Details des roles + +- Chef -- Un par faction. Controle total sur tous les parametres, membres et territoires. Peut transferer la propriete a un autre membre. +- Officier -- Membres de confiance qui aident a gerer la faction. Peuvent inviter, expulser des membres, revendiquer des terres et gerer la diplomatie. +- Membre -- Le role par defaut en rejoignant. Peut construire dans le territoire, utiliser le foyer de faction et participer a la discussion de faction. + +>[!TIP] Promouvez vos membres les plus actifs et dignes de confiance au rang d'Officier pour qu'ils puissent aider a gerer le territoire et recruter de nouveaux joueurs. diff --git a/src/main/resources/Server/Languages/fr-FR/hyperfactions.lang b/src/main/resources/Server/Languages/fr-FR/hyperfactions.lang new file mode 100644 index 00000000..77ab5767 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Traductions Françaises +# Format: key = value (or key = "quoted value") +# Note: Keys are auto-prefixed with "hyperfactions." by Hytale's I18nModule +# Placeholders: {0}, {1}, etc. + +# ========== Commun ========== +common.no_permission = Vous n'avez pas la permission de faire cela. +common.not_in_faction = Vous n'appartenez à aucune faction. +common.already_in_faction = Vous appartenez déjà à une faction. +common.player_not_found = Joueur introuvable. +common.faction_not_found = Faction introuvable. +common.player_not_online = Ce joueur n'est pas en ligne. +common.must_be_leader = Seul le chef de la faction peut faire cela. +common.must_be_officer = Vous devez être Officier ou Chef pour faire cela. +common.combat_tagged = Vous ne pouvez pas faire cela en combat. +common.cancel = Annuler +common.confirm = Confirmer +common.save = Sauvegarder +common.close = Fermer +common.clear = Effacer +common.back = Retour +common.leave = Quitter +common.transfer = Transférer +common.disband = Dissoudre +common.world_fallback = monde +common.yes = Oui +common.no = Non +common.loading = Chargement... +common.online = En ligne +common.offline = Hors ligne +common.enabled = Activé +common.disabled = Désactivé +common.none = Aucun +common.page = Page {0} sur {1} +common.unknown = Inconnu +common.error_generic = Une erreur s'est produite. Veuillez réessayer. +common.gui_fallback = Impossible d'accéder à l'interface. Utilisez /f help pour les commandes. +common.admin_prefix = [Admin] +common.location_error = Impossible de déterminer votre position. +common.world_error = Impossible de déterminer votre monde. +common.invalid_id = Identifiant de faction invalide. +common.na = N/A + +# ========== Commandes - Créer ========== +cmd.create.no_permission = Vous n'avez pas la permission de créer des factions. +cmd.create.usage = Utilisation : /f create +cmd.create.success = Faction « {0} » créée ! +cmd.create.already_in_named = Vous appartenez déjà à {0}. +cmd.create.use_leave_first = Utilisez /f leave d'abord si vous souhaitez créer une nouvelle faction. +cmd.create.name_taken = Ce nom de faction est déjà pris. +cmd.create.name_too_short = Le nom de la faction est trop court. +cmd.create.name_too_long = Le nom de la faction est trop long. +cmd.create.failed = Échec de la création de la faction. + +# ========== Commandes - Dissoudre ========== +cmd.disband.no_permission = Vous n'avez pas la permission de dissoudre des factions. +cmd.disband.not_leader = Seul le chef de la faction peut la dissoudre. +cmd.disband.confirm_prompt = Êtes-vous sûr de vouloir dissoudre votre faction ? +cmd.disband.confirm_instruction = Tapez /f disband --text à nouveau dans les {0} secondes pour confirmer. +cmd.disband.success = Votre faction a été dissoute. +cmd.disband.failed = Échec de la dissolution de la faction. +cmd.disband.cancelled = Confirmation précédente annulée. Tapez à nouveau pour confirmer la dissolution. + +# ========== Commandes - Renommer ========== +cmd.rename.no_permission = Vous n'avez pas la permission. +cmd.rename.not_leader = Seul le chef peut renommer la faction. +cmd.rename.usage = Utilisation : /f rename +cmd.rename.too_short = Le nom est trop court (min. {0} caractères). +cmd.rename.too_long = Le nom est trop long (max. {0} caractères). +cmd.rename.name_taken = Ce nom est déjà pris. +cmd.rename.success = Faction renommée en {0} ! +cmd.rename.broadcast = {0} a renommé la faction en {1} + +# ========== Commandes - Description ========== +cmd.desc.no_permission = Vous n'avez pas la permission. +cmd.desc.not_officer = Vous devez être officier pour modifier la description. +cmd.desc.set = Description de la faction définie ! +cmd.desc.cleared = Description de la faction effacée. + +# ========== Commandes - Ouvrir / Fermer ========== +cmd.open.no_permission = Vous n'avez pas la permission. +cmd.open.not_leader = Seul le chef peut modifier ce paramètre. +cmd.open.already_open = Votre faction est déjà ouverte. +cmd.open.success = Votre faction est maintenant ouverte ! N'importe qui peut rejoindre avec /f join. +cmd.open.broadcast = {0} a ouvert la faction au recrutement public. +cmd.close.no_permission = Vous n'avez pas la permission. +cmd.close.not_leader = Seul le chef peut modifier ce paramètre. +cmd.close.already_closed = Votre faction est déjà fermée. +cmd.close.success = Votre faction est maintenant sur invitation uniquement. +cmd.close.broadcast = {0} a fermé la faction au recrutement (sur invitation uniquement). + +# ========== Commandes - Couleur ========== +cmd.color.no_permission = Vous n'avez pas la permission. +cmd.color.not_officer = Vous devez être officier pour changer la couleur. +cmd.color.colors_disabled = Les couleurs de faction sont désactivées. +cmd.color.usage = Utilisation : /f color +cmd.color.usage_hint = Codes valides : 0-9, a-f ou #RRGGBB en hexadécimal +cmd.color.invalid = Couleur invalide. Utilisez 0-9, a-f, ou #RRGGBB. +cmd.color.success = Couleur de la faction mise à jour ! + +# ========== Commandes - Revendiquer ========== +cmd.claim.no_permission = Vous n'avez pas la permission de revendiquer du territoire. +cmd.claim.already_yours = Votre faction possède déjà ce chunk. +cmd.claim.cannot_claim_ally = Vous ne pouvez pas revendiquer le territoire d'un allié. +cmd.claim.already_claimed_hint = Ce chunk est déjà revendiqué. Utilisez /f overclaim s'ils sont vulnérables. +cmd.claim.success = Chunk revendiqué en {0}, {1} ! +cmd.claim.not_officer = Vous devez être officier pour revendiquer des terres. +cmd.claim.already_claimed = Ce chunk est déjà revendiqué. +cmd.claim.max_claims = Votre faction a atteint le maximum de revendications. Gagnez plus de puissance ! +cmd.claim.not_adjacent = Vous devez revendiquer un chunk adjacent à votre territoire existant. +cmd.claim.world_not_allowed = La revendication n'est pas autorisée dans ce monde. +cmd.claim.orbisguard = Cette zone est protégée par OrbisGuard. +cmd.claim.zone_protected = Ce chunk se trouve dans une SafeZone ou une WarZone. +cmd.claim.insufficient_power = Votre faction n'a pas assez de puissance pour revendiquer plus de territoire. +cmd.claim.failed = Échec de la revendication du chunk. + +# ========== Commandes - Inviter ========== +cmd.invite.no_permission = Vous n'avez pas la permission d'inviter des joueurs. +cmd.invite.not_officer = Vous devez être officier pour inviter des joueurs. +cmd.invite.usage = Utilisation : /f invite +cmd.invite.player_not_found = Joueur « {0} » introuvable ou hors ligne. +cmd.invite.target_in_faction = Ce joueur appartient déjà à une faction. +cmd.invite.sent = {0} a été invité dans votre faction. +cmd.invite.received = Vous avez été invité à rejoindre {0} ! +cmd.invite.accept_hint = Tapez /f accept {0} pour rejoindre. + +# ========== Commandes - Accepter / Rejoindre ========== +cmd.join.no_permission = Vous n'avez pas la permission de rejoindre des factions. +cmd.join.already_in_named = Vous appartenez déjà à {0}. +cmd.join.use_leave_hint = Utilisez /f leave d'abord si vous souhaitez rejoindre une autre faction. +cmd.join.no_invites = Vous n'avez aucune invitation en attente. +cmd.join.faction_not_found = Faction « {0} » introuvable. +cmd.join.not_invited = Vous n'avez pas d'invitation de cette faction. +cmd.join.faction_gone = Cette faction n'existe plus. +cmd.join.success = Vous avez rejoint {0} ! +cmd.join.broadcast = {0} a rejoint la faction ! +cmd.join.faction_full = Cette faction est pleine. +cmd.join.failed = Échec pour rejoindre la faction. + +# ========== Commandes - Exclure ========== +cmd.kick.no_permission = Vous n'avez pas la permission d'exclure des membres. +cmd.kick.usage = Utilisation : /f kick +cmd.kick.not_in_your_faction = Le joueur « {0} » n'est pas dans votre faction. +cmd.kick.success = {0} a été exclu de la faction. +cmd.kick.broadcast = {0} a été exclu de la faction. +cmd.kick.kicked = Vous avez été exclu de la faction. +cmd.kick.cannot_kick_higher = Vous n'avez pas la permission d'exclure ce joueur. +cmd.kick.cannot_kick_leader = Vous ne pouvez pas exclure le chef de la faction. +cmd.kick.failed = Échec de l'exclusion du joueur. + +# ========== Commandes - Quitter ========== +cmd.leave.no_permission = Vous n'avez pas la permission de quitter des factions. +cmd.leave.confirm_prompt = Êtes-vous sûr de vouloir quitter votre faction ? +cmd.leave.confirm_instruction = Tapez /f leave --text à nouveau dans les {0} secondes pour confirmer. +cmd.leave.success = Vous avez quitté votre faction. +cmd.leave.broadcast = {0} a quitté la faction. +cmd.leave.failed = Échec pour quitter la faction. +cmd.leave.cancelled = Confirmation précédente annulée. Tapez à nouveau pour confirmer le départ. + +# ========== Commandes - Promouvoir / Rétrograder / Transférer ========== +cmd.rank.promote_no_permission = Vous n'avez pas la permission de promouvoir des membres. +cmd.rank.promote_usage = Utilisation : /f promote +cmd.rank.promoted = {0} promu au rang de {1} ! +cmd.rank.promote_broadcast = {0} a été promu au rang de {1} ! +cmd.rank.already_highest = Promotion impossible. Utilisez /f transfer pour changer de chef. +cmd.rank.promote_failed = Échec de la promotion du joueur. +cmd.rank.demote_no_permission = Vous n'avez pas la permission de rétrograder des membres. +cmd.rank.demote_usage = Utilisation : /f demote +cmd.rank.demoted = {0} rétrogradé au rang de {1}. +cmd.rank.demote_broadcast = {0} a été rétrogradé au rang de {1}. +cmd.rank.already_lowest = Ce joueur est déjà Membre. +cmd.rank.demote_failed = Échec de la rétrogradation du joueur. +cmd.rank.transfer_no_permission = Vous n'avez pas la permission de transférer le commandement. +cmd.rank.transfer_usage = Utilisation : /f transfer +cmd.rank.player_not_in_faction = Joueur introuvable dans votre faction. +cmd.rank.transfer_confirm = Êtes-vous sûr de vouloir transférer le commandement à {0} ? +cmd.rank.transfer_confirm_instruction = Tapez /f transfer {0} --text à nouveau dans les {1} secondes pour confirmer. +cmd.rank.transferred = Commandement transféré à {0} ! +cmd.rank.transfer_broadcast = {0} est maintenant le chef de la faction ! +cmd.rank.transfer_failed = Échec du transfert de commandement. +cmd.rank.transfer_cancelled = Confirmation précédente annulée. Tapez à nouveau pour confirmer le transfert. + +# ========== Commandes - Abandonner ========== +cmd.unclaim.no_permission = Vous n'avez pas la permission d'abandonner du territoire. +cmd.unclaim.success = Chunk abandonné en {0}, {1}. +cmd.unclaim.not_officer = Vous devez être officier pour abandonner des terres. +cmd.unclaim.chunk_not_claimed = Ce chunk n'est pas revendiqué. +cmd.unclaim.not_your_claim = Votre faction ne possède pas ce chunk. +cmd.unclaim.cannot_unclaim_home = Impossible d'abandonner le chunk contenant le foyer de la faction. +cmd.unclaim.would_disconnect = Impossible d'abandonner — cela déconnecterait votre territoire. +cmd.unclaim.failed = Échec de l'abandon du chunk. + +# ========== Commandes - Surrevendiquer ========== +cmd.overclaim.no_permission = Vous n'avez pas la permission de surrevendiquer du territoire. +cmd.overclaim.success = Territoire ennemi surrevendiqué ! +cmd.overclaim.not_officer = Vous devez être officier pour surrevendiquer. +cmd.overclaim.not_claimed = Ce chunk n'est pas revendiqué. Utilisez /f claim. +cmd.overclaim.own_chunk = Votre faction possède déjà ce chunk. +cmd.overclaim.ally = Vous ne pouvez pas surrevendiquer le territoire d'un allié. +cmd.overclaim.target_has_power = Cette faction possède encore assez de puissance. +cmd.overclaim.failed = Échec de la surrevendication. + +# ========== Commandes - Bloqué ========== +cmd.stuck.no_permission = Vous n'avez pas la permission d'utiliser /f stuck. +cmd.stuck.not_stuck = Vous n'êtes pas bloqué — c'est une zone sauvage. +cmd.stuck.combat_tagged = Vous ne pouvez pas utiliser /f stuck en combat ! +cmd.stuck.no_safe = Impossible de trouver un emplacement sûr. +cmd.stuck.teleporting = Téléportation vers un lieu sûr dans {0} secondes. Ne bougez pas ! + +# ========== Commandes - Foyer ========== +cmd.home.no_permission = Vous n'avez pas la permission de vous téléporter au foyer de la faction. +cmd.home.no_home = Votre faction n'a pas de foyer défini. +cmd.home.combat_tagged = Vous ne pouvez pas vous téléporter en combat ! +cmd.home.teleported = Téléporté au foyer de la faction ! + +# ========== Commandes - Définir le Foyer ========== +cmd.sethome.no_permission = Vous n'avez pas la permission de définir le foyer de la faction. +cmd.sethome.world_not_allowed = Impossible de définir le foyer dans ce monde. +cmd.sethome.not_in_territory = Vous ne pouvez définir le foyer que dans le territoire de votre faction. +cmd.sethome.set = Foyer de la faction défini ! +cmd.sethome.broadcast = {0} a défini le foyer de la faction. +cmd.sethome.not_officer = Vous devez être officier pour définir le foyer. +cmd.sethome.failed = Échec de la définition du foyer. + +# ========== Commandes - Supprimer le Foyer ========== +cmd.delhome.no_permission = Vous n'avez pas la permission de supprimer le foyer de la faction. +cmd.delhome.no_home = Votre faction n'a pas de foyer défini. +cmd.delhome.deleted = Foyer de la faction supprimé ! +cmd.delhome.broadcast = {0} a supprimé le foyer de la faction. +cmd.delhome.not_officer = Vous devez être officier pour supprimer le foyer. +cmd.delhome.failed = Échec de la suppression du foyer. + +# ========== Commandes - Relations (Allié/Ennemi/Neutre/Relations) ========== +cmd.relation.ally_no_permission = Vous n'avez pas la permission de gérer les alliances. +cmd.relation.ally_usage = Utilisation : /f ally +cmd.relation.ally_sent = Demande d'alliance envoyée à {0} ! +cmd.relation.ally_formed = Vous êtes maintenant alliés avec {0} ! +cmd.relation.already_ally = Vous êtes déjà alliés avec cette faction. +cmd.relation.ally_failed = Échec de l'envoi de la demande d'alliance. +cmd.relation.enemy_no_permission = Vous n'avez pas la permission de déclarer des ennemis. +cmd.relation.enemy_usage = Utilisation : /f enemy +cmd.relation.enemy_declared = {0} est maintenant votre ennemi ! +cmd.relation.already_enemy = Vous êtes déjà ennemis avec cette faction. +cmd.relation.max_enemies = Vous avez atteint le nombre maximum d'ennemis. +cmd.relation.enemy_failed = Échec de la déclaration d'ennemi. +cmd.relation.neutral_no_permission = Vous n'avez pas la permission de définir des relations neutres. +cmd.relation.neutral_usage = Utilisation : /f neutral +cmd.relation.neutral_set = Votre faction est maintenant neutre avec {0}. +cmd.relation.already_neutral = Vous êtes déjà neutres avec cette faction. +cmd.relation.neutral_failed = Échec de la définition de neutralité. +cmd.relation.cannot_self = Vous ne pouvez pas vous allier avec vous-même. +cmd.relation.max_allies = Vous avez atteint le nombre maximum d'alliés. +cmd.relation.view_no_permission = Vous n'avez pas la permission de voir les relations. +cmd.relation.header = === Relations de la Faction === +cmd.relation.allies_count = Alliés ({0}) : +cmd.relation.enemies_count = Ennemis ({0}) : +cmd.relation.list_entry = - {0} + +# ========== Commandes - Chat ========== +cmd.chat.usage = Utilisation : /f c [f|a|off] +cmd.chat.no_permission = Vous n'avez pas la permission pour ce mode de chat. +cmd.chat.mode_set = Mode de chat défini sur {0} + +# ========== Commandes - Invitations ========== +cmd.invites.not_officer = Vous devez être officier pour gérer les invitations. +cmd.invites.header = === Invitations de la Faction === +cmd.invites.no_pending = Aucune invitation ou demande en attente. +cmd.invites.outgoing = Invitations envoyées : +cmd.invites.outgoing_entry = {0} (invité par {1}) +cmd.invites.requests = Demandes d'adhésion : +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Vos Invitations === +cmd.invites.no_invites = Vous n'avez aucune invitation en attente. +cmd.invites.invite_entry = {0} - Utilisez /f accept {1} + +# ========== Commandes - Demande ========== +cmd.request.no_permission = Vous n'avez pas la permission de demander l'adhésion à une faction. +cmd.request.already_in_named = Vous appartenez déjà à {0}. +cmd.request.use_leave_hint = Utilisez /f leave d'abord si vous souhaitez rejoindre une autre faction. +cmd.request.usage = Utilisation : /f request [message] +cmd.request.faction_open = Cette faction est ouverte ! Utilisez /f accept {0} pour rejoindre directement. +cmd.request.already_requested = Vous avez déjà une demande en attente pour cette faction. +cmd.request.has_invite = Vous avez été invité dans cette faction ! Utilisez /f accept {0} pour rejoindre. +cmd.request.sent = Demande d'adhésion envoyée à {0} ! +cmd.request.your_message = Votre message : « {0} » +cmd.request.officer_review = Un officier examinera votre demande. +cmd.request.officer_notify = {0} a demandé à rejoindre votre faction ! +cmd.request.officer_review_hint = Utilisez /f gui > Invitations pour examiner. + +# ========== Commandes - Informations ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = Vous n'avez pas la permission de voir les informations de faction. +cmd.info.faction_not_found = Faction « {0} » introuvable. +cmd.info.not_in_faction_hint = Vous n'appartenez à aucune faction. Utilisez /f info +cmd.info.leader = Chef : {0} +cmd.info.members = Membres : {0}/{1} +cmd.info.power = Puissance : {0} +cmd.info.claims = Revendications : {0} +cmd.info.raidable = VULNÉRABLE ! +cmd.info.allies = Alliés : {0} +cmd.info.enemies = Ennemis : {0} +cmd.info.they_consider = Ils vous considèrent comme : {0} +cmd.info.you_consider = Vous les considérez comme : {0} +cmd.info.members_no_permission = Vous n'avez pas la permission de voir les membres de la faction. +cmd.info.members_header = === Membres de {0} ({1}) === +cmd.info.member_online = [En ligne] +cmd.info.list_no_permission = Vous n'avez pas la permission de voir la liste des factions. +cmd.info.list_empty = Il n'y a aucune faction. +cmd.info.list_header = === Factions ({0}) === +cmd.info.list_entry = {0} - {1} membres, {2} puissance +cmd.info.list_entry_raidable = {0} - {1} membres, {2} puissance [VULNÉRABLE] +cmd.info.help_no_permission = Vous n'avez pas la permission de voir l'aide. +cmd.info.who_no_permission = Vous n'avez pas la permission de voir les infos d'un joueur. +cmd.info.who_faction = Faction : {0} +cmd.info.who_role = Rôle : {0} +cmd.info.who_joined = Rejoint le : {0} +cmd.info.who_faction_none = Faction : Aucune +cmd.info.who_power = Puissance : {0} +cmd.info.who_status = Statut : {0} +cmd.info.who_last_seen = Dernière connexion : {0} +cmd.info.map_no_permission = Vous n'avez pas la permission de voir la carte. +cmd.info.map_header = === Carte du Territoire === +cmd.info.map_legend = Légende : +Vous /Propre /Allié /Ennemi -Sauvage +cmd.info.map_gui_hint = Utilisez /f gui pour la carte interactive + +# ========== Commandes - Puissance ========== +cmd.power.personal = Puissance Personnelle : {0}/{1} +cmd.power.faction = Puissance de la Faction : {0}/{1} +cmd.power.death_loss = Perte à la Mort : {0} +cmd.power.regen = Taux de Régénération : {0}/h +cmd.power.no_permission = Vous n'avez pas la permission de voir les infos de puissance. +cmd.power.header = Puissance de {0} : +cmd.power.current = Actuelle : {0} + +# ========== Commandes - Économie ========== +cmd.economy.balance = Solde : {0} +cmd.economy.deposited = {0} déposé dans la trésorerie de la faction. +cmd.economy.withdrawn = {0} retiré de la trésorerie de la faction. +cmd.economy.transferred = {0} transféré à {1}. +cmd.economy.insufficient = Fonds insuffisants dans la trésorerie de la faction. +cmd.economy.invalid_amount = Montant invalide : {0} +cmd.economy.economy_disabled = L'économie est désactivée. +cmd.economy.balance_no_permission = Vous n'avez pas la permission de voir les soldes. +cmd.economy.treasury_unavailable = La trésorerie n'est pas disponible. +cmd.economy.balance_display = Trésorerie de {0} : {1} +cmd.economy.deposit_no_permission = Vous n'avez pas la permission de déposer. +cmd.economy.deposit_faction_denied = Vous n'avez pas la permission de faction pour déposer. +cmd.economy.deposit_usage = Utilisation : /f deposit +cmd.economy.amount_positive = Le montant doit être positif. +cmd.economy.wallet_insufficient = Vous n'avez pas assez d'argent. Portefeuille : {0} +cmd.economy.wallet_withdraw_failed = Échec du retrait de votre portefeuille. +cmd.economy.deposit_failed = Échec du dépôt dans la trésorerie. Argent restitué. +cmd.economy.withdraw_no_permission = Vous n'avez pas la permission de retirer. +cmd.economy.withdraw_faction_denied = Vous n'avez pas la permission de faction pour retirer. +cmd.economy.withdraw_usage = Utilisation : /f withdraw +cmd.economy.withdraw_limit_denied = Retrait refusé : {0} +cmd.economy.wallet_deposit_failed = Attention : Échec du dépôt dans votre portefeuille. Contactez un administrateur. +cmd.economy.withdraw_limit_exceeded = Retrait refusé : limite dépassée. +cmd.economy.withdraw_failed = Retrait échoué : {0} +cmd.economy.transfer_no_permission = Vous n'avez pas la permission de transférer. +cmd.economy.transfer_faction_denied = Vous n'avez pas la permission de faction pour transférer. +cmd.economy.transfer_usage = Utilisation : /f money transfer +cmd.economy.transfer_self = Impossible de transférer vers votre propre faction. +cmd.economy.transfer_limit_denied = Transfert refusé : {0} +cmd.economy.transfer_limit_exceeded = Transfert refusé : limite dépassée. +cmd.economy.transfer_failed = Transfert échoué : {0} +cmd.economy.log_no_permission = Vous n'avez pas la permission de voir le journal des transactions. +cmd.economy.log_header = Journal des Transactions (page {0}/{1}) +cmd.economy.log_empty = Aucune transaction trouvée. +cmd.economy.money_help_header = Commandes de la Trésorerie : +cmd.economy.money_help_balance = /f money balance [faction] - Voir le solde +cmd.economy.money_help_deposit = /f money deposit - Déposer dans la trésorerie +cmd.economy.money_help_withdraw = /f money withdraw - Retirer de la trésorerie +cmd.economy.money_help_transfer = /f money transfer - Transférer entre factions +cmd.economy.money_help_log = /f money log [page] [type] - Voir l'historique des transactions + +# ========== Protection - Phrases d'Action ========== +protection.action.generic = Vous ne pouvez pas faire cela +protection.action.build = Vous ne pouvez pas construire ni casser de blocs +protection.action.interact = Vous ne pouvez pas interagir avec cela +protection.action.door = Vous ne pouvez pas utiliser les portes +protection.action.container = Vous ne pouvez pas ouvrir les conteneurs +protection.action.bench = Vous ne pouvez pas utiliser les stations d'artisanat +protection.action.processing = Vous ne pouvez pas utiliser les stations de traitement +protection.action.seat = Vous ne pouvez pas utiliser les sièges +protection.action.light = Vous ne pouvez pas allumer/éteindre les lumières +protection.action.teleporter = Vous ne pouvez pas utiliser les téléporteurs +protection.action.crate = Vous ne pouvez pas utiliser les caisses +protection.action.tame = Vous ne pouvez pas apprivoiser les créatures +protection.action.npc = Vous ne pouvez pas interagir avec les PNJ +protection.action.mount = Vous ne pouvez pas monter les créatures +protection.action.pve = Vous ne pouvez pas blesser les créatures +protection.action.item_drop = Vous ne pouvez pas jeter d'objets +protection.action.item_pickup = Vous ne pouvez pas ramasser d'objets + +# ========== Protection - Raisons de Refus ========== +protection.denied.safezone = {0} dans une SafeZone. +protection.denied.warzone = {0} dans une WarZone. +protection.denied.enemy_claim = {0} en territoire ennemi. +protection.denied.claimed = {0} en territoire revendiqué. +protection.denied.here = {0} ici. +protection.denied.zone = {0} dans cette zone. +protection.denied.faction_perm = {0} ici. (Permission de faction : {1}) +protection.denied.ally_territory = {0} ici. (Territoire allié) +protection.denied.error = Erreur de protection — action bloquée par sécurité. + +# ========== Protection - JcJ ========== +protection.pvp.safezone = Le JcJ est désactivé dans les SafeZones. +protection.pvp.same_faction = Vous ne pouvez pas attaquer les membres de votre faction. +protection.pvp.ally = Vous ne pouvez pas attaquer vos alliés. +protection.pvp.spawn_protected = Ce joueur a une protection d'apparition. +protection.pvp.territory_disabled = Le JcJ est désactivé dans ce territoire. +protection.pvp.generic = Vous ne pouvez pas attaquer ce joueur. + +# ========== Protection - Dégâts d'Entité ========== +protection.mob_damage_disabled = Les dégâts de monstres sont désactivés dans cette zone. +protection.pve_damage_disabled = Les dégâts JcE sont désactivés dans cette zone. +protection.pve_territory_denied = Vous ne pouvez pas blesser les monstres dans ce territoire. + +# ========== Protection - Marquage de Combat ========== +protection.combat_tag_command = Vous ne pouvez pas utiliser cette commande en combat. + +# ========== Annonces du Serveur ========== +# Messages diffusés à tous les joueurs en ligne pour les événements de faction importants. +# {0}, {1} = valeurs dynamiques (noms de faction, noms de joueur) +server_announce.faction_created = {0} a fondé la faction {1} ! +server_announce.faction_disbanded = La faction {0} a été dissoute ! +server_announce.leadership_transfer = {0} est maintenant le chef de {1} ! +server_announce.overclaim = {0} a surrevendiqué du territoire de {1} ! +server_announce.war_declared = {0} a déclaré la guerre à {1} ! +server_announce.alliance_formed = {0} et {1} sont maintenant alliés ! +server_announce.alliance_broken = {0} et {1} ne sont plus alliés ! + +# ========== Système de Téléportation ========== +teleport.cooldown_wait = Vous devez attendre {0} avant de vous téléporter à nouveau. +teleport.warmup_start = Téléportation au foyer de la faction dans {0} secondes... +teleport.combat_cancelled = Téléportation annulée — vous êtes en combat ! +teleport.success_default = Téléporté au foyer de la faction ! +teleport.no_home = Votre faction n'a pas de foyer défini. +teleport.world_not_found = Monde introuvable. +teleport.failed = Échec de la téléportation. +teleport.countdown = Téléportation dans {0} secondes... +teleport.countdown_one = Téléportation dans 1 seconde... +teleport.moved_cancelled = Téléportation annulée — vous avez bougé ! +teleport.damage_cancelled = Téléportation annulée — vous avez subi des dégâts ! +teleport.mount_teleport_blocked = Vous ne pouvez pas vous téléporter dans cette zone en étant sur une monture. +teleport.mount_entry_blocked = Vous ne pouvez pas entrer dans cette zone en étant sur une monture. + +# ========== Affichage du Chat ========== +chat.display.public = Public +chat.display.faction = Faction +chat.display.ally = Allié diff --git a/src/main/resources/Server/Languages/fr-FR/hyperfactions_admin.lang b/src/main/resources/Server/Languages/fr-FR/hyperfactions_admin.lang new file mode 100644 index 00000000..ddab89ea --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Traductions Françaises +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_admin." by Hytale's I18nModule + +# ========== Barre de Navigation Admin ========== +nav.dashboard = Tableau de Bord +nav.actions = Actions +nav.factions = Factions +nav.players = Joueurs +nav.economy = Économie +nav.zones = Zones +nav.config = Config +nav.backups = Sauvegardes +nav.log = Journal +nav.updates = Mises à Jour +nav.help = Aide +nav.version = Version + +# ========== Labels Admin Communs ========== +common.faction_not_found = Faction Introuvable +common.no_faction = Pas de Faction +common.not_set = Non défini +common.on = Activé +common.off = Désactivé +common.enable = Activer +common.disable = Désactiver +common.none_paren = (Aucun) +common.invalid_faction = Faction invalide. +common.leader_prefix = Chef : {0} +common.members_suffix = {0} membres +common.claims_suffix = {0} revendications +common.factions_suffix = {0} factions +common.players_suffix = {0} joueurs +common.chunks_suffix = {0} chunks +common.entries_suffix = {0} entrées +common.found_suffix = {0} trouvé(s) +common.power_format = {0}/{1} puissance +common.raidable = Vulnérable +common.protected = Protégé +common.no_description = Aucune description définie. +common.officers_more = +{0} de plus +common.custom_max = (max personnalisé) +common.default_max = (max par défaut) +common.now = Maintenant +common.ago_suffix = il y a {0} +common.just_now = à l'instant +common.no_membership_history = Aucun historique d'adhésion + +# ========== Tableau de Bord Admin ========== +dashboard.factions_prefix = Factions : {0} +dashboard.members_prefix = Total Membres : {0} +dashboard.claims_prefix = Total Revendications : {0} + +# ========== Actions Admin ========== +actions.confirm_reset = Confirmer la Réinitialisation ? +actions.confirm_trigger = Confirmer le Déclenchement ? +actions.kd_reset = K/M réinitialisé pour {0} joueurs. +actions.kd_reset_failed = Échec de la réinitialisation K/M : {0} +actions.upkeep_unavailable = Le processeur d'entretien n'est pas disponible. +actions.upkeep_triggered = Collecte d'entretien déclenchée. +actions.upkeep_failed = Échec de l'entretien : {0} + +# ========== Dissolution Admin ========== +disband.faction_gone = La faction n'existe plus. +disband.success = La faction « {0} » a été dissoute. +disband.failed = Échec de la dissolution : {0} +disband.no_leader = La faction n'a pas de chef, dissolution impossible. + +# ========== Abandon Total Admin ========== +unclaim.removed = [Admin] {0} revendications supprimées de {1}. +unclaim.no_claims = {0} n'avait aucune revendication à supprimer. + +# ========== Liste des Factions Admin ========== +factions.home_not_set = Non défini +factions.teleported = Téléporté au foyer de {0}. +factions.no_home = La faction n'a pas de foyer défini. +factions.world_not_found = Monde cible introuvable. + +# ========== Info Faction Admin ========== +info.faction_gone = Cette faction n'existe plus. + +# ========== Membres Faction Admin ========== +members.sort_role = Rôle +members.sort_online = En Ligne +members.sort_name = Nom +members.sort_power = Puissance +members.promoted = [Admin] {0} promu au rang de {1}. +members.demoted = [Admin] {0} rétrogradé au rang de {1}. +members.kicked = [Admin] {0} exclu de la faction. + +# ========== Relations Faction Admin ========== +relations.allies_header = ALLIÉS ({0}) +relations.enemies_header = ENNEMIS ({0}) +relations.no_allies = Aucun allié. +relations.no_enemies = Aucun ennemi. +relations.neutral_count = {0} factions neutres +relations.since_today = Depuis : aujourd'hui +relations.since_one_day = Depuis : il y a 1 jour +relations.since_days = Depuis : il y a {0} jours +relations.set_ally = [Admin] Statut d'alliance mutuelle établi avec {0}. +relations.set_enemy = Statut d'ennemi mutuel établi avec {0}. +relations.set_neutral = [Admin] Statut neutre mutuel établi avec {0}. + +# ========== Paramètres Faction Admin ========== +settings.locked = Ce paramètre est verrouillé par la configuration du serveur. +settings.perm_toggled = {0} défini sur {1}. +settings.color_changed = Couleur de la faction définie sur {0}. +settings.recruitment_set = Recrutement défini sur {0}. +settings.no_home = [Admin] Cette faction n'a pas de foyer défini. +settings.home_cleared = Foyer de la faction effacé pour {0}. + +# ========== Labels du Menu Déroulant de Tri ========== +sort.power = Puissance +sort.name = Nom +sort.members = Membres +sort.balance = Solde + +# ========== Joueurs Admin ========== +players.sort_last_online = Dernière Connexion +players.sort_faction = Faction +players.sort_online = En Ligne +players.not_online = Le joueur n'est pas en ligne. +players.world_not_found = Monde cible introuvable. +players.teleported = [Admin] Téléporté vers {0}. + +# ========== Info Joueur Admin ========== +playerinfo.disband_faction = Dissoudre la Faction +playerinfo.kick_leader = Exclure le Chef +playerinfo.enter_valid_number = Entrez un nombre valide. +playerinfo.enter_valid_positive = Entrez un nombre positif valide. +playerinfo.faction_gone = La faction n'existe plus. +playerinfo.kd_reset = K/M réinitialisé pour {0}. +playerinfo.kicked_success = {0} exclu de {1}. +playerinfo.kicked_leader = Chef {0} exclu. Commandement transféré à {1}. +playerinfo.disbanded_kick = [Admin] Faction « {0} » dissoute (dernier membre exclu). + +# ========== Économie Admin ========== +economy.no_data = Aucune faction avec des données économiques. +economy.amount_zero = Le montant ne peut pas être zéro. +economy.enter_amount = Veuillez entrer un montant. +economy.invalid_number = Nombre invalide : {0} +economy.error = Une erreur s'est produite. +economy.balance_negative = Le solde ne peut pas être négatif. +economy.failed = Échec : {0} +economy.bulk_complete = Ajustement en masse terminé : {0} {1} pour {2} factions. +economy.bulk_failures = ({0} échoué(s)) + +# ========== Zones Admin ========== +zones.not_found = Zone introuvable. +zones.invalid_id = Identifiant de zone invalide. +zones.deleted = Zone {0} supprimée. +zones.delete_failed = Échec de la suppression de la zone : {0} +zones.no_chunks = Aucun chunk +zones.chunks_suffix = {0} ({1} chunks) + +# ========== Assistant de Création de Zone ========== +wizard.enter_name = Veuillez entrer un nom de zone. +wizard.name_too_short = Le nom de la zone doit contenir au moins {0} caractères. +wizard.name_too_long = Le nom de la zone ne peut pas dépasser {0} caractères. +wizard.name_taken = Une zone portant ce nom existe déjà. +wizard.radius_range = Le rayon doit être compris entre 1 et {0}. +wizard.create_failed = Impossible de créer la zone : {0} +wizard.created_not_found = Zone créée mais introuvable. +wizard.created = {0} « {1} » créé(e) ! +wizard.chunk_claimed = Chunk revendiqué ({0}, {1}). +wizard.chunk_failed = Impossible de revendiquer le chunk actuel : {0} +wizard.radius_claimed = {0} chunks revendiqués dans un rayon de {1} autour de {2}. +wizard.radius_no_claims = Aucun chunk n'a pu être revendiqué (la zone est peut-être occupée). +wizard.no_claims = Zone créée sans revendications. +wizard.chunks_preview = ~{0} chunks + +# ========== Renommage de Zone ========== +zone_rename.zone_gone = La zone n'existe plus. +zone_rename.enter_name = Veuillez entrer un nom de zone. +zone_rename.too_short = Le nom de la zone doit contenir au moins {0} caractère. +zone_rename.too_long = Le nom de la zone ne peut pas dépasser {0} caractères. +zone_rename.same_name = C'est déjà le nom de cette zone. +zone_rename.renamed = [Admin] Zone renommée de {0} en {1} ! +zone_rename.name_taken = Une zone portant ce nom existe déjà. +zone_rename.invalid_name = Nom de zone invalide. +zone_rename.rename_failed = Échec du renommage de la zone : {0} + +# ========== Changement de Type de Zone ========== +zone_type.zone_gone = La zone n'existe plus. +zone_type.changed = [Admin] {0} changé de {1} en {2} ({3}). +zone_type.failed = Échec du changement de type de zone : {0} +zone_type.flags_reset = drapeaux réinitialisés +zone_type.flags_kept = drapeaux conservés + +# ========== Drapeaux d'Intégration de Zone ========== +zone_int.zone_not_found = Zone Introuvable +zone_int.no_plugin = (pas de plugin) +zone_int.default = (par défaut) +zone_int.custom = (personnalisé) + +# Labels de l'interface des drapeaux d'intégration +gui.zint_cat_gravestones = Pierres Tombales +gui.zint_gravestones_desc = Quand ACTIVÉ, les non-propriétaires peuvent piller les tombes. Les propriétaires le peuvent toujours. +gui.zint_cat_world_map = Carte du Monde +gui.zint_world_map_desc = Remplacer le masquage de la carte pour les joueurs dans cette zone. Quand activé, sélectionnez qui peut voir les joueurs dans cette zone. +gui.zint_visibility_label = Niveau de Visibilité : +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Réinitialiser par Défaut +gui.zint_back_to_flags = Retour aux Drapeaux +gui.zint_map_vis_faction = Faction Uniquement +gui.zint_map_vis_ally = Faction + Alliés +gui.zint_map_vis_all = Tous les Joueurs + +# ========== Journal d'Activité ========== +log.all_types = Tous les Types +log.no_logs = Aucun journal d'activité correspondant aux filtres. + +# ========== Page de Version ========== +version.active = Actif +version.not_found = Introuvable +version.not_detected = Non Détecté +version.not_installed = Non Installé +version.active_version = Actif (v{0}) +version.active_compatible = Actif (compatible) +version.active_claims_only = Actif (revendications uniquement) +version.installed_no_perm = Installé (pas de fournisseur de permissions) +version.active_provider = Actif ({0}) + +# ========== Page Principale Admin ========== +main.reload_hint = Utilisez /f reload pour recharger la configuration. +main.unclaim_hint = Utilisez /f admin unclaim {0} pour abandonner les {1} chunks. + +# ========== Drapeaux/Paramètres de Zone ========== +zflags.invalid_flag = Drapeau invalide. +zflags.zone_not_found = Zone introuvable. +zflags.conflict = (conflit) +zflags.mixin = (mixin) +zflags.reset_int = Réinitialiser les drapeaux d'intégration par défaut. +zflags.reset_all = Réinitialiser tous les drapeaux par défaut. +zflags.reset_failed = Échec de la réinitialisation des drapeaux : {0} +zflags.back_to_settings = Retour aux Paramètres + +# Labels de l'interface des paramètres de zone +gui.zset_cat_combat = Combat +gui.zset_cat_damage = Dégâts +gui.zset_cat_death = Mort +gui.zset_cat_building = Construction +gui.zset_cat_interaction = Interaction +gui.zset_cat_transport = Transport +gui.zset_cat_items = Objets +gui.zset_cat_spawning = Apparition des Monstres +gui.zset_cat_mob_clear = Nettoyage des Monstres +gui.zset_children_hint = (enfants applicables uniquement quand le parent est ACTIVÉ) +gui.zset_reset_defaults = Réinitialiser par Défaut +gui.zset_integration_flags = Drapeaux d'Intégration +gui.zset_back_to_zones = Retour aux Zones +gui.zset_chunks = {0} chunks + +# Noms d'Affichage des Drapeaux de Zone +gui.zflag_pvp_enabled = JcJ Activé +gui.zflag_friendly_fire = Tir Allié +gui.zflag_friendly_fire_faction = Dégâts de Faction +gui.zflag_friendly_fire_ally = Dégâts entre Alliés +gui.zflag_projectile_damage = Dégâts de Projectile +gui.zflag_mob_damage = Subir Dégâts de Monstres +gui.zflag_pve_damage = Infliger Dégâts aux Monstres +gui.zflag_fall_damage = Dégâts de Chute +gui.zflag_environmental_damage = Dégâts Environnementaux +gui.zflag_explosion_damage = Dégâts d'Explosion +gui.zflag_fire_spread = Propagation du Feu +gui.zflag_keep_inventory = Conserver l'Inventaire +gui.zflag_power_loss = Perte de Puissance +gui.zflag_build_allowed = Construction Autorisée +gui.zflag_block_place = Placement de Blocs +gui.zflag_hammer_use = Utilisation du Marteau +gui.zflag_builder_tools_use = Outils de Construction +gui.zflag_block_interact = Interaction avec les Blocs +gui.zflag_door_use = Utilisation des Portes +gui.zflag_container_use = Utilisation des Conteneurs +gui.zflag_bench_use = Utilisation de l'Établi +gui.zflag_processing_use = Utilisation du Traitement +gui.zflag_seat_use = Utilisation des Sièges +gui.zflag_mount_use = Utilisation des Montures +gui.zflag_light_use = Utilisation des Lumières +gui.zflag_npc_use = Interaction avec les PNJ +gui.zflag_crate_pickup = Ramassage de Caisse +gui.zflag_crate_place = Placement de Caisse +gui.zflag_npc_tame = Apprivoiser PNJ +gui.zflag_npc_interact = Interaction PNJ +gui.zflag_teleporter_use = Utilisation du Téléporteur +gui.zflag_portal_use = Utilisation du Portail +gui.zflag_mount_entry = Accès aux Montures +gui.zflag_item_drop = Lâcher d'Objets +gui.zflag_item_pickup = Ramassage Auto +gui.zflag_item_pickup_manual = Ramassage Touche F +gui.zflag_invincible_items = Objets Invincibles +gui.zflag_mob_spawning = Apparition des Monstres +gui.zflag_hostile_mob_spawning = Monstres Hostiles +gui.zflag_passive_mob_spawning = Monstres Passifs +gui.zflag_neutral_mob_spawning = Monstres Neutres +gui.zflag_npc_spawning = Apparition des PNJ +gui.zflag_mob_clear = Nettoyage des Monstres +gui.zflag_hostile_mob_clear = Nettoyer Monstres Hostiles +gui.zflag_passive_mob_clear = Nettoyer Monstres Passifs +gui.zflag_neutral_mob_clear = Nettoyer Monstres Neutres +gui.zflag_gravestone_access = Autres Pillent les Tombes +gui.zflag_show_on_map = Afficher sur la Carte +gui.zflag_essentials_homes = Utilisation du Foyer +gui.zflag_essentials_warps = Utilisation des Warps +gui.zflag_essentials_kits = Réclamation de Kits + +# ========== Propriétés de Zone ========== +zprop.current_custom = Actuel : « {0} » (personnalisé) +zprop.current_default = Actuel : « {0} » (par défaut) +zprop.pvp_disabled = JcJ Désactivé +zprop.pvp_enabled = JcJ Activé +zprop.name_empty = Le nom ne peut pas être vide. +zprop.renamed = Zone renommée en « {0} ». +zprop.name_taken = Une zone portant ce nom existe déjà. +zprop.name_invalid = Nom invalide (max 32 caractères). +zprop.rename_failed = Échec du renommage : {0} +zprop.upper_empty = Le titre supérieur ne peut pas être vide. Utilisez Effacer pour réinitialiser. +zprop.upper_set = Titre supérieur défini. +zprop.upper_reset = Titre supérieur réinitialisé par défaut. +zprop.lower_empty = Le titre inférieur ne peut pas être vide. Utilisez Effacer pour réinitialiser. +zprop.lower_set = Titre inférieur défini. +zprop.lower_reset = Titre inférieur réinitialisé par défaut. + +# ========== Relations Supplémentaires ========== +relations.failed = Échec : {0} + +# ========== Membres Supplémentaires ========== +members.never = Jamais +members.teleported = [Admin] Téléporté vers {0}. + +# ========== Info Joueur Supplémentaires ========== +playerinfo.records = {0} entrées +playerinfo.joined_date = Rejoint le : {0} +playerinfo.current = Actuel +playerinfo.left_date = Quitté le : {0} + +# ========== Carte de Zone ========== +map.world_warning = ATTENTION : Vous êtes dans « {0} » — la zone est dans « {1} » +map.position = Votre Position : Chunk ({0}, {1}) +map.zone_gone = La zone n'existe plus. +map.claimed = Chunk revendiqué ({0}, {1}) pour {2}. +map.claim_failed = Échec de la revendication du chunk : {0} +map.unclaimed = Chunk abandonné ({0}, {1}) de {2}. +map.unclaim_failed = Échec de l'abandon du chunk : {0} +map.chunk_belongs = Ce chunk appartient à {0}. +map.chunk_faction = Ce chunk est revendiqué par une faction. +map.chunk_protected = Ce chunk se trouve dans une région protégée. +map.another_zone = une autre zone + +# ========== Clés de Labels GUI (pour la localisation du texte en dur dans les .ui) ========== + +# Titres de Page +gui.title_dashboard = Tableau de Bord Admin +gui.title_main = Administration des Factions +gui.title_actions = Admin : Actions Serveur +gui.title_factions = Gestion des Factions +gui.title_players = Gestion des Joueurs +gui.title_economy = Admin : Économie du Serveur +gui.title_zones = Gestion des Zones +gui.title_backups = Sauvegardes +gui.title_config = Configuration +gui.title_help = Aide Admin +gui.title_updates = Mises à Jour +gui.title_version = Version et Intégrations +gui.title_activity_log = Admin : Journal d'Activité +gui.title_player_info = Admin : Info Joueur +gui.title_faction_info = Admin : Info Faction +gui.title_faction_settings = Admin : Paramètres Faction +gui.title_faction_members = Admin : Membres +gui.title_faction_relations = Admin : Relations +gui.title_zone_map = Éditeur de Carte de Zone +gui.title_zone_settings = Admin : Paramètres de Zone +gui.title_zone_properties = Admin : Propriétés de Zone +gui.title_bulk_economy = Ajustement en Masse de la Trésorerie +gui.title_economy_adjust = Admin : Économie + +# Labels du tableau de bord +gui.dash_server_stats = Statistiques du Serveur +gui.dash_factions = Factions +gui.dash_total_members = Total Membres +gui.dash_total_claims = Total Revendications +gui.dash_zones = Zones +gui.dash_safe_war = safe / war +gui.dash_total_power = Puissance Totale +gui.dash_avg_power = Puissance Moy./Faction +gui.dash_total_economy = Économie Totale +gui.dash_wealthiest = Plus Riche +gui.dash_avg_balance = Solde Moyen +gui.dash_protection_bypass = Contournement de Protection : + +# Boutons et labels communs +gui.search = Recherche : +gui.sort = Trier : +gui.prev = < Préc. +gui.next = Suiv. > +gui.back = Retour +gui.done = Terminé +gui.cancel = Annuler +gui.apply = Appliquer +gui.set = Définir +gui.reset = Réinitialiser +gui.coming_soon = Bientôt Disponible +gui.zones_btn = Zones +gui.reload_btn = Recharger +gui.all = Tout +gui.safe = Safe +gui.war = War +gui.create_zone = + Créer + +# Labels de la page d'actions +gui.act_combat_stats = Statistiques de Combat +gui.act_combat_desc = Réinitialiser les éliminations et morts de TOUS les joueurs du serveur. Cette action ne peut pas être annulée. +gui.act_reset_kd = Réinitialiser tous les K/M +gui.act_economy = Économie +gui.act_economy_desc = Ajouter ou retirer de l'argent de TOUTES les trésoreries de faction en une fois. +gui.act_bulk_adjust = Ajout/Retrait en Masse +gui.act_upkeep_collection = Collecte d'Entretien +gui.act_upkeep_desc = Déclencher manuellement la collecte d'entretien pour toutes les factions maintenant, indépendamment du minuteur programmé. +gui.act_trigger_upkeep = Déclencher l'Entretien + +# Labels des pages temporaires +gui.backup_heading = Gestion des Sauvegardes +gui.backup_desc1 = Créer, restaurer et gérer les sauvegardes de données de faction. +gui.backup_desc2 = Les sauvegardes automatiques sont enregistrées dans le dossier data/backups. +gui.config_heading = Éditeur de Configuration +gui.config_desc1 = Configurer les paramètres de HyperFactions directement depuis l'interface. +gui.config_desc2 = Pour l'instant, utilisez /f reload pour recharger les modifications de configuration. +gui.help_heading = Documentation Admin +gui.help_desc1 = Consulter la documentation admin et la référence des commandes. +gui.help_desc2 = Pour de l'aide, visitez le wiki HyperFactions. +gui.updates_heading = Centre de Mises à Jour +gui.updates_desc1 = Vérifier les nouvelles versions et consulter les journaux de modifications. +gui.updates_desc2 = Visitez la page HyperFactions pour les dernières mises à jour. + +# Labels de la page de version +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Serveur Hytale +gui.ver_java = Java +gui.ver_permissions = PERMISSIONS +gui.ver_placeholders = MARQUEURS +gui.ver_economy_section = ÉCONOMIE +gui.ver_protection = PROTECTION +gui.ver_disabled = Désactivé + +# En-têtes de colonnes (partagés entre les pages) +gui.col_faction = Faction +gui.col_balance = Solde +gui.col_members = Membres +gui.col_actions = Actions +gui.col_time = Heure +gui.col_type = Type +gui.col_message = Message + +# Labels de la page économie +gui.econ_total_balance = Solde Total +gui.econ_factions = Factions +gui.econ_avg_balance = Solde Moyen +gui.econ_in_grace = En Sursis +gui.econ_collected = Collecté (24h) +gui.econ_next_collection = Prochaine Collecte +gui.econ_no_data = Aucune faction avec des données économiques. + +# Labels du journal d'activité +gui.log_type = Type : +gui.log_time = Heure : +gui.log_player = Joueur : +gui.log_no_logs = Aucun journal d'activité correspondant aux filtres. + +# Labels d'info joueur +gui.plr_first_joined = Première connexion : +gui.plr_last_online = Dernière connexion : +gui.plr_uuid = UUID : +gui.plr_faction = Faction : +gui.plr_role = Rôle : +gui.plr_view_faction = Voir la Faction +gui.plr_power = Puissance +gui.plr_max_power = Puissance Max +gui.plr_set_power = Définir +gui.plr_reset_power = Réinitialiser +gui.plr_set_max = Définir +gui.plr_reset_max = Réinitialiser +gui.plr_no_power_loss = Pas de Perte de Puissance +gui.plr_no_claim_decay = Pas de Dégradation des Revendications +gui.plr_kills = Éliminations +gui.plr_deaths = Morts +gui.plr_kdr = Ratio K/M +gui.plr_reset_kd = Réinitialiser K/M +gui.plr_kick = Exclure +gui.plr_membership_history = Historique d'Adhésion +gui.plr_no_faction_label = N'appartient à aucune faction +gui.plr_power_management = Gestion de la Puissance +gui.plr_combat_stats = Statistiques de Combat +gui.plr_bypass_flags = Drapeaux de Contournement +gui.plr_admin_controls = Contrôles Admin +gui.plr_kd_subtitle = K / M +gui.plr_max_prefix = Max : +gui.plr_view = Voir +gui.plr_kick_from_faction = Exclure de la Faction +gui.plr_set_max_btn = Définir Max +gui.plr_combat = Combat +gui.plr_reason_active = ACTIF +gui.plr_reason_left = PARTI +gui.plr_reason_kicked = EXCLU +gui.plr_reason_disbanded = DISSOUTE + +# Labels d'entrée de membre +gui.mem_label_power = Puissance : +gui.mem_label_joined = Rejoint le : +gui.mem_label_last_death = Dernière Mort : +gui.mem_label_uuid = UUID : +gui.mem_btn_info = Info +gui.mem_btn_teleport = Téléporter +gui.mem_btn_promote = Promouvoir +gui.mem_btn_demote = Rétrograder +gui.mem_btn_kick = Exclure +gui.econ_not_enabled = Le système économique n'est pas activé. +gui.info_more = +{0} de plus +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7j +gui.log_time_all = Tout +gui.shape_circular = circulaire +gui.shape_square = carré +gui.nav_title = Panneau Admin +gui.econ_btn_adjust = Ajuster +gui.econ_btn_info = Info + +# Labels d'info faction +gui.fac_description = Description +gui.fac_power = Puissance +gui.fac_claims = Revendications +gui.fac_members = Membres +gui.fac_recruitment = Recrutement +gui.fac_founded = Fondée +gui.fac_allies = Alliés +gui.fac_enemies = Ennemis +gui.fac_raidable = Statut de Vulnérabilité +gui.fac_treasury = Trésorerie +gui.fac_leader = Chef +gui.fac_officers = Officiers +gui.fac_view_members = Voir les Membres +gui.fac_view_relations = Voir les Relations +gui.fac_view_settings = Paramètres +gui.fac_disband = Dissoudre la Faction +gui.fac_power_management = Gestion de la Puissance +gui.fac_reset_all_power = Réinitialiser Toute la Puissance +gui.fac_econ_adjust = Ajuster le Solde +gui.fac_econ_view_log = Voir le Journal des Transactions +gui.fac_current_max = actuelle / max +gui.fac_claimed_max = revendiqués / max +gui.fac_relations = Relations +gui.fac_ally_enemy = alliés / ennemis +gui.fac_status = Statut +gui.fac_info = Info +gui.fac_treasury_balance = solde de la trésorerie +gui.fac_leadership = Direction +gui.fac_leader_label = Chef : +gui.fac_officers_label = Officiers : +gui.fac_econ_mgmt = Gestion Économique +gui.fac_danger_zone = Zone de Danger +gui.fac_view_treasury = Voir la Trésorerie + +# Labels des paramètres de faction +gui.set_editing = Modification : +gui.set_general = Paramètres Généraux +gui.set_name = Nom +gui.set_tag = Tag +gui.set_description = Description +gui.set_recruitment = Recrutement +gui.set_home = Emplacement du Foyer +gui.set_clear_home = Effacer le Foyer +gui.set_disband_faction = Dissoudre la Faction +gui.set_faction_color = Couleur de la Faction +gui.set_admin_override = [Remplacement Admin] +gui.set_territory_perms = Permissions du Territoire +gui.set_mob_spawning = Apparition des Monstres +gui.set_faction_settings = Paramètres de Faction +gui.set_name_label = Nom : +gui.set_tag_label = Tag : +gui.set_desc_label = Desc : +gui.set_edit = Modifier +gui.set_status_label = Statut : +gui.set_location_label = Position : +gui.set_danger_zone = Zone de Danger +gui.set_irreversible = Cette action est irréversible. +gui.set_lock_hint = Certaines options peuvent être verrouillées par le serveur et n'accepteront pas de modifications. +gui.set_appearance = Apparence +gui.set_color_label = Couleur : +gui.set_mob_sub = (enfants désactivés quand le principal est désactivé) +gui.set_back_to_info = Retour aux Infos +gui.set_col_out = Ext +gui.set_col_ally = Allié +gui.set_col_mem = Mem +gui.set_col_off = Off +gui.set_cat_building = CONSTRUCTION +gui.set_cat_interaction = INTERACTION +gui.set_cat_interact_sub = (enfants désactivés quand Tout est désactivé) +gui.set_cat_other = AUTRE +gui.set_perm_break = Casser +gui.set_perm_place = Placer +gui.set_perm_all = Tout +gui.set_perm_door = Porte +gui.set_perm_chest = Coffre +gui.set_perm_bench = Établi +gui.set_perm_processing = Traitement +gui.set_perm_seat = Siège +gui.set_perm_transport = Transport +gui.set_perm_crate_use = Utilisation Caisse +gui.set_perm_npc_tame = Apprivoiser PNJ +gui.set_perm_pve_damage = Dégâts JcE +gui.set_perm_mob_spawning = Apparition des Monstres +gui.set_perm_hostile = Monstres Hostiles +gui.set_perm_passive = Monstres Passifs +gui.set_perm_neutral = Monstres Neutres +gui.set_perm_pvp = JcJ dans le Territoire +gui.set_perm_officers_edit = Les officiers peuvent modifier + +# Labels des relations de faction +gui.rel_subtitle = Gérer les relations de faction (contourne l'approbation) +gui.rel_set_new = Définir une Nouvelle Relation +gui.rel_btn_ally = Allié +gui.rel_btn_neutral = Neutre +gui.rel_btn_enemy = Ennemi + +# Labels de la page des zones +gui.zone_sort_name = Nom +gui.zone_sort_type = Type +gui.zone_sort_chunks = Chunks +gui.zone_sort_world = Monde +gui.zone_count_format = {0} {1}zones ({2} chunks) + +# Labels de la carte de zone +gui.map_zone_chunk = Chunk de Zone +gui.map_empty = Vide +gui.map_other_zone = Autre Zone +gui.map_faction_claim = Revendication de Faction +gui.map_protected = Protégé +gui.map_your_pos = Votre Position +gui.map_click_hint = Cliquez pour revendiquer/abandonner des chunks +gui.map_legend_zone_safe = Cette Zone (Safe) +gui.map_legend_zone_war = Cette Zone (War) +gui.map_legend_other_safe = Autre SafeZone +gui.map_legend_other_war = Autre WarZone +gui.map_legend_faction = Revendication de Faction +gui.map_legend_unclaimed = Non Revendiqué +gui.map_legend_you_here = Vous êtes ici +gui.map_action_hint = Clic gauche : Revendiquer pour la zone | Clic droit : Abandonner de la zone +gui.map_done = Terminé + +# Labels des propriétés de zone +gui.zprop_general = Général +gui.zprop_zone_name = Nom de la Zone +gui.zprop_zone_type = Type de Zone +gui.zprop_change_type = Changer le Type +gui.zprop_notifications = Notifications +gui.zprop_show_entry = Afficher la Notification d'Entrée +gui.zprop_upper_title = Titre Supérieur +gui.zprop_upper_desc = Titre Supérieur (petit texte au-dessus du nom de zone) +gui.zprop_lower_title = Titre Inférieur +gui.zprop_lower_desc = Titre Inférieur (grand texte du nom de zone) +gui.zprop_edit_flags = Modifier les Drapeaux +gui.zprop_back_to_zones = Retour aux Zones +gui.save = Sauvegarder +gui.clear = Effacer + +# Labels d'économie en masse +gui.bulk_header = Ajuster Toutes les Trésoreries de Faction +gui.bulk_factions_label = Factions : +gui.bulk_total_label = Solde Total : +gui.bulk_amount_hint = Montant (positif pour ajouter, négatif pour retirer) : +gui.bulk_hint = Ceci s'appliquera à chaque faction possédant une trésorerie +gui.bulk_warning_msg = Attention : Cette action affecte TOUTES les factions et ne peut pas être annulée. +gui.bulk_apply_all = Appliquer à Toutes +gui.bulk_operation = Opération +gui.bulk_add = Ajouter +gui.bulk_remove = Retirer +gui.bulk_amount = Montant +gui.bulk_warning = Ceci affectera TOUTES les trésoreries de faction. +gui.bulk_preview = Aperçu + +# Labels d'ajustement économique +gui.ecadj_header = Ajuster le Solde de la Trésorerie +gui.ecadj_faction_label = Faction : +gui.ecadj_current_balance = Solde Actuel : +gui.ecadj_amount_hint = Montant (positif pour ajouter, négatif pour déduire) : +gui.ecadj_preview_hint = Entrez un nombre pour prévisualiser le changement +gui.ecadj_adjustment = Ajustement : +gui.ecadj_set_balance = Définir le Solde +gui.ecadj_confirm = Confirmer +/- +gui.ecadj_operation = Opération +gui.ecadj_add = Ajouter +gui.ecadj_remove = Retirer +gui.ecadj_set_to = Définir à +gui.ecadj_amount = Montant +gui.ecadj_new_balance = Nouveau Solde : + +# Labels d'intégration de la page de version +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Natif +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Hooks Mixin +gui.ver_gravestones = Pierres Tombales +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Trésorerie + +# Labels de la modale de confirmation d'abandon total +gui.unclaim_title = Abandonner Tout le Territoire +gui.unclaim_confirm_msg1 = Êtes-vous sûr de vouloir abandonner tout +gui.unclaim_confirm_msg2 = de +gui.unclaim_warning = Cette action ne peut pas être annulée ! +gui.unclaim_all = Tout Abandonner + +# Labels de la modale de renommage de zone +gui.zren_title = Renommer la Zone +gui.zren_current = Actuel : +gui.zren_new_name = Nouveau Nom : + +# Labels de la modale de changement de type de zone +gui.ztype_title = Changer le Type de Zone +gui.ztype_zone_label = Zone : +gui.ztype_current = Actuel : +gui.ztype_will_become = deviendra +gui.ztype_new = Nouveau : +gui.ztype_warning1 = Les différents types de zone ont des valeurs de drapeaux par défaut différentes. +gui.ztype_warning2 = Choisissez comment gérer les paramètres de drapeaux existants : +gui.ztype_keep_desc = Conserver les remplacements personnalisés +gui.ztype_keep_flags = Conserver les Drapeaux +gui.ztype_reset_desc = Utiliser les valeurs par défaut du nouveau type +gui.ztype_reset_flags = Réinitialiser les Drapeaux + +# Labels de l'assistant de création de zone +gui.czw_title = Créer une Zone +gui.czw_back = < Retour +gui.czw_create = Créer la Zone +gui.czw_zone_type = Type de Zone +gui.czw_safe_desc = Protégée, pas de JcJ +gui.czw_war_desc = Combat, JcJ activé +gui.czw_zone_name = Nom de la Zone +gui.czw_name_desc = Entrez un nom unique pour la zone +gui.czw_claim_method = Méthode de Revendication +gui.czw_method_none_desc = Créer une zone vide +gui.czw_method_none = Aucune revendication +gui.czw_method_single_desc = Votre chunk actuel +gui.czw_method_single = Chunk unique +gui.czw_method_circle_desc = Zone circulaire +gui.czw_method_circle = Rayon circulaire +gui.czw_method_square_desc = Zone carrée +gui.czw_method_square = Rayon carré +gui.czw_method_map_desc = Éditeur de chunks interactif +gui.czw_method_map = Utiliser la carte de revendication +gui.czw_radius = Rayon +gui.czw_custom_radius = Personnalisé (1-50) : +gui.czw_flags = Drapeaux +gui.czw_flags_defaults_desc = Basés sur le type de zone +gui.czw_flags_defaults = Utiliser les défauts +gui.czw_flags_customize_desc = Ouvrir les paramètres après +gui.czw_flags_customize = Personnaliser + +# ========== Labels d'Entrée (Entrées de liste Faction/Joueur/Zone) ========== + +# Labels d'entrée de faction +gui.fac_entry_power = puissance +gui.fac_entry_claims = revendications +gui.fac_entry_members = membres +gui.fac_entry_created = Créée le : +gui.fac_entry_home = Foyer : +gui.fac_entry_tp_home = TP Foyer +gui.fac_entry_view_info = Voir les Infos +gui.fac_entry_members_btn = Membres +gui.fac_entry_settings = Paramètres +gui.fac_entry_unclaim_all = Tout Abandonner +gui.fac_entry_disband = Dissoudre + +# Labels d'entrée de joueur +gui.plr_entry_role = Rôle : +gui.plr_entry_joined = Rejoint le : +gui.plr_entry_last_online = Dernière Connexion : +gui.plr_entry_kdr = K/M/R : +gui.plr_entry_power = Puissance : +gui.plr_entry_uuid = UUID : +gui.plr_entry_info = Info +gui.plr_entry_teleport = Téléporter +gui.plr_entry_na = N/A +gui.plr_entry_unknown = Inconnu +gui.plr_entry_ago = il y a {0} + +# Labels d'entrée de zone +gui.zone_entry_world = Monde : +gui.zone_entry_chunks = Chunks : +gui.zone_entry_bounds = Limites : +gui.zone_entry_created = Créée le : +gui.zone_entry_edit_map = Modifier la Carte +gui.zone_entry_flags = Drapeaux +gui.zone_entry_settings = Paramètres +gui.zone_entry_delete = Supprimer diff --git a/src/main/resources/Server/Languages/fr-FR/hyperfactions_gui.lang b/src/main/resources/Server/Languages/fr-FR/hyperfactions_gui.lang new file mode 100644 index 00000000..fa65adf6 --- /dev/null +++ b/src/main/resources/Server/Languages/fr-FR/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Traductions Françaises +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_gui." by Hytale's I18nModule + +# ========== Barre de Navigation ========== +nav.dashboard = Tableau de Bord +nav.chat = Chat +nav.members = Membres +nav.invites = Invitations +nav.browser = Parcourir +nav.map = Carte +nav.leaderboard = Classement +nav.relations = Relations +nav.treasury = Trésorerie +nav.settings = Paramètres +nav.logs = Journaux +nav.help = Aide +nav.admin = Admin +nav.create = Créer + +# ========== Noms des Catégories d'Aide ========== +help.category.welcome = Bienvenue +help.category.your_faction = Votre Faction +help.category.power_land = Puissance et Territoire +help.category.diplomacy = Diplomatie +help.category.combat = Combat et Sécurité +help.category.economy = Économie +help.category.quick_ref = Référence Rapide + +# ========== Noms des Catégories d'Aide Admin ========== +help.category.admin_overview = Vue d'Ensemble +help.category.admin_factions = Factions +help.category.admin_zones = Zones +help.category.admin_power = Puissance +help.category.admin_economy = Économie +help.category.admin_config = Configuration +help.category.admin_maintenance = Maintenance +help.category.admin_reference = Référence + +# ========== Menu Principal ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Ma Faction +main_menu.section_get_started = Premiers Pas +main_menu.section_territory = Territoire +main_menu.section_browse = Parcourir +main_menu.section_admin = Admin +main_menu.claim_hint = Utilisez /f claim pour revendiquer du territoire. + +# ========== Page d'Info Faction ========== +faction_info.title = Info Faction +faction_info.no_description = Aucune description définie. +faction_info.status_open = Ouvert +faction_info.status_invite_only = Sur Invitation +faction_info.status_raidable = Vulnérable +faction_info.status_protected = Protégé +faction_info.officers_more = +{0} de plus +faction_info.power_header = Puissance +faction_info.claims_header = Revendications +faction_info.members_header = Membres +faction_info.relations_header = Relations +faction_info.status_header = Statut +faction_info.treasury_header = Trésorerie +faction_info.current_max = actuelle / max +faction_info.claimed_max = revendiqués / max +faction_info.ally_enemy = alliés / ennemis +faction_info.faction_balance = solde de la faction +faction_info.leader_label = Chef : +faction_info.officers_label = Officiers : +faction_info.view_members_btn = Voir les Membres +faction_info.relations_btn = Relations +faction_info.back_btn = Retour + +# ========== Modale de Renommage ========== +rename.title = Renommer la Faction +rename.current_label = Actuel : +rename.new_name_label = Nouveau Nom : +rename.no_permission = Vous n'avez pas la permission de renommer la faction. +rename.enter_name = Veuillez entrer un nom de faction. +rename.too_short = Le nom de la faction doit contenir au moins {0} caractères. +rename.too_long = Le nom de la faction ne peut pas dépasser {0} caractères. +rename.same_name = C'est déjà le nom de votre faction. +rename.name_taken = Une faction portant ce nom existe déjà. +rename.success = Faction renommée de {0} en {1} ! + +# ========== Modale de Description ========== +desc.title = Modifier la Description +desc.current_label = Actuelle : +desc.new_desc_label = Nouvelle Description : +desc.no_permission = Vous n'avez pas la permission de modifier la description. +desc.display_none = (Aucune) +desc.cleared = Description de la faction effacée. +desc.updated = Description de la faction mise à jour ! + +# ========== Modale de Tag ========== +tag.title = Modifier le Tag +tag.current_label = Actuel : +tag.instructions = Tag (1-5 caractères, lettres et chiffres uniquement) : +tag.help_text = Les tags apparaissent dans le chat et sur la carte +tag.no_permission = Vous n'avez pas la permission de modifier le tag. +tag.display_none = (Aucun) +tag.cleared = Tag de la faction effacé. +tag.too_short = Le tag doit contenir au moins {0} caractère. +tag.too_long = Le tag ne peut pas dépasser {0} caractères. +tag.invalid_format = Le tag ne peut contenir que des lettres et des chiffres. +tag.same_tag = C'est déjà le tag de votre faction. +tag.tag_taken = Une faction portant ce tag existe déjà. +tag.success = Tag de la faction défini sur [{0}] ! + +# ========== Page du Tableau de Bord ========== +dashboard.title = Tableau de Bord +dashboard.power_label = Puissance +dashboard.land_label = Revendications +dashboard.members_label = Membres +dashboard.online_label = En Ligne +dashboard.allies_label = Alliés +dashboard.enemies_label = Ennemis +dashboard.relations_label = Relations +dashboard.ally_enemy_label = alliés / ennemis +dashboard.status_label = Statut +dashboard.invites_label = Invitations +dashboard.sent_requests_label = envoyées / demandes +dashboard.treasury_label = Trésorerie +dashboard.upkeep_label = Entretien +dashboard.per_cycle = par cycle +dashboard.your_wallet = Votre Portefeuille +dashboard.personal_balance = solde personnel +dashboard.quick_actions = Actions Rapides +dashboard.teleport_label = Téléportation +dashboard.territory_label = Territoire +dashboard.channel_label = Canal +dashboard.membership_label = Adhésion +dashboard.recent_activity = Activité Récente +dashboard.view_all = Tout Voir +dashboard.income_24h = Revenus (24h) +dashboard.deposits_transfers_in = dépôts, transferts entrants +dashboard.expenses_24h = Dépenses (24h) +dashboard.withdrawals_transfers_out = retraits, transferts sortants +dashboard.faction_gone = Votre faction n'existe plus. +dashboard.available = {0} disponible(s) +dashboard.at_risk = En Danger ! +dashboard.online_count = {0} en ligne +dashboard.status_invite = Invitation +dashboard.in_grace = EN SURSIS +dashboard.billable_chunks = {0} chunks facturables +dashboard.btn_home = Foyer +dashboard.btn_set_home = Définir le Foyer +dashboard.btn_claim = Revendiquer +dashboard.chat_prefix = Chat : {0} +dashboard.btn_leave = Quitter +dashboard.no_activity = Aucune activité récente. +dashboard.time_now = maintenant +dashboard.time_minutes = il y a {0}min +dashboard.time_hours = il y a {0}h +dashboard.time_days = il y a {0}j +dashboard.no_home_hint = Votre faction n'a pas de foyer. Demandez à un officier d'en définir un. +dashboard.chat_mode_set = Mode de chat : {0} +dashboard.claim_success = Chunk revendiqué en ({0}, {1}) +dashboard.upkeep_in = dans {0} + +# ========== Page Principale de la Faction ========== +main.no_faction = Pas de Faction +main.joined = Vous avez rejoint la faction ! +main.join_failed = Échec pour rejoindre la faction : {0} +main.invite_declined = Invitation refusée. +main.cooldown = Téléportation en recharge ! {0}s restantes. +main.world_not_found = Impossible de se téléporter — monde introuvable. +main.leave_failed = Échec du départ : {0} + +# ========== Labels GUI Partagés ========== +common.faction_count = {0} factions +common.leader_label = Chef : {0} +common.sort_power = Puissance +common.sort_members = Membres +common.page_format = {0}/{1} +common.own_faction = (Vous) +common.search = Recherche : +common.sort = Trier : +common.prev = < Préc. +common.next = Suiv. > +common.treasury_not_available = La trésorerie n'est pas disponible. + +# ========== Page des Membres ========== +members.title = Membres +members.search_label = Recherche : +members.sort_label = Trier : +members.prev_btn = < Préc. +members.next_btn = Suiv. > +members.count = {0} membres +members.sort_role = Rôle +members.sort_last_online = Dernière Connexion +members.just_now = à l'instant +members.ago = il y a {0} +members.never = Jamais +members.member_not_found = Membre introuvable. +members.promoted = {0} promu au rang de {1}. +members.promote_failed = Échec de la promotion : {0} +members.demoted = {0} rétrogradé au rang de {1}. +members.demote_failed = Échec de la rétrogradation : {0} +members.kicked = {0} exclu de la faction. +members.kick_failed = Échec de l'exclusion : {0} +members.label_power = Puissance : +members.label_joined = Rejoint le : +members.label_last_death = Dernière Mort : +members.btn_promote = Promouvoir +members.btn_demote = Rétrograder +members.btn_kick = Exclure +members.btn_make_leader = Nommer Chef +members.btn_profile = Profil +members.self_label = (Vous) + +# ========== Page de Navigation ========== +browser.title = Parcourir les Factions +browser.search_label = Recherche : +browser.sort_label = Trier : +browser.prev_btn = < Préc. +browser.next_btn = Suiv. > +browser.sort_name = Nom +browser.invalid_faction = Faction invalide. +browser.label_power = puissance +browser.label_claims = revendications +browser.label_members = membres +browser.label_recruitment = Recrutement : +browser.label_created = Créée le : +browser.label_description = Description : +browser.view_info_btn = Voir les Infos +browser.label_leader = Chef : +browser.no_description = Aucune description définie + +# ========== Page du Classement ========== +leaderboard.title = Classement des Factions +leaderboard.rank_by = Classer par : +leaderboard.col_rank = # +leaderboard.col_faction = Faction +leaderboard.col_claims = Revendications +leaderboard.col_members = Membres +leaderboard.prev_btn = < Préc. +leaderboard.next_btn = Suiv. > +leaderboard.sort_kd = K/M +leaderboard.sort_territory = Territoire +leaderboard.sort_balance = Solde + +# ========== Page d'Info Joueur ========== +playerinfo.title = Info Joueur +playerinfo.first_joined_label = Première connexion : +playerinfo.last_online_label = Dernière connexion : +playerinfo.faction_label = Faction : +playerinfo.role_label = Rôle : +playerinfo.joined_label_static = Rejoint le : +playerinfo.not_in_faction = N'appartient à aucune faction +playerinfo.power_header = Puissance +playerinfo.current_max = actuelle / max +playerinfo.combat_header = Combat +playerinfo.kills_deaths = éliminations / morts +playerinfo.kdr_header = Ratio K/M +playerinfo.membership_history = Historique d'Adhésion +playerinfo.view_faction_btn = Voir la Faction +playerinfo.back_btn = Retour +playerinfo.now = Maintenant +playerinfo.history_count = {0} entrées +playerinfo.joined_label = Rejoint le : {0} +playerinfo.current = Actuel +playerinfo.left_label = Quitté le : {0} +playerinfo.no_history = Aucun historique d'adhésion +playerinfo.faction_gone = La faction n'existe plus. +playerinfo.reason_active = ACTIF +playerinfo.reason_left = PARTI +playerinfo.reason_kicked = EXCLU +playerinfo.reason_disbanded = DISSOUTE + +# ========== Page des Relations ========== +relations.title = Relations +relations.tab_relations = Relations +relations.tab_pending = En Attente +relations.set_relation_btn = + Définir Relation +relations.prev_btn = < Préc. +relations.next_btn = Suiv. > +relations.relation_count = {0} relations +relations.request_count = {0} demandes +relations.type_ally = Allié +relations.type_enemy = Ennemi +relations.type_incoming = Entrante +relations.type_outgoing = Sortante +relations.incoming_request = Demande entrante +relations.outgoing_request = Demande sortante +relations.empty_relations = Aucune relation pour l'instant. +relations.empty_relations_hint = Aucune relation pour l'instant. Cliquez sur + DÉFINIR RELATION pour ajouter des alliés ou des ennemis. +relations.empty_pending = Aucune demande d'alliance en attente. +relations.today = Aujourd'hui +relations.one_day_ago = Il y a 1 jour +relations.days_ago = Il y a {0} jours +relations.now_neutral = Maintenant neutre avec {0}. +relations.now_enemies = Maintenant ennemis avec {0} ! +relations.request_sent = Demande d'alliance envoyée à {0}. +relations.now_allied = Maintenant alliés avec {0} ! +relations.request_declined = Demande d'alliance de {0} refusée. +relations.request_cancelled = Demande d'alliance à {0} annulée. +relations.failed = Échec : {0} +relations.search_hint = Rechercher une faction pour définir une relation +relations.no_results = Aucune faction trouvée pour « {0} » +relations.power_display = {0} puissance +relations.member_count = {0} membres +relations.label_members = membres +relations.label_power = puissance +relations.label_since = Depuis : +relations.label_claims = Revendications : +relations.label_direction = Direction : +relations.btn_view = Voir +relations.btn_neutral = Neutre +relations.btn_enemy = Ennemi +relations.btn_ally = Allié +relations.btn_accept = Accepter +relations.btn_decline = Refuser +relations.btn_cancel = Annuler + +# ========== Page des Paramètres ========== +settings.title = Paramètres de la Faction +settings.general = Général +settings.name_label = Nom : +settings.tag_label = Tag : +settings.desc_label = Desc : +settings.edit_btn = Modifier +settings.recruitment = Recrutement +settings.status_label = Statut : +settings.home_location = Emplacement du Foyer +settings.location_label = Position : +settings.set_home_btn = Définir le Foyer +settings.teleport_btn = Téléporter +settings.delete_btn = Supprimer +settings.optional_features = Fonctionnalités Optionnelles +settings.configure_modules = Configurer les modules optionnels. +settings.modules_btn = Modules +settings.danger_zone = Zone de Danger +settings.irreversible = Cette action est irréversible. +settings.disband_btn = Dissoudre la Faction +settings.lock_hint = Certaines options peuvent être verrouillées par le serveur et n'accepteront pas de modifications. +settings.territory_permissions = Permissions du Territoire +settings.col_out = Ext +settings.col_ally = Allié +settings.col_mem = Mem +settings.col_off = Off +settings.cat_building = CONSTRUCTION +settings.perm_break = Casser +settings.perm_place = Placer +settings.cat_interaction = INTERACTION +settings.interaction_hint = (enfants désactivés quand Tout est désactivé) +settings.perm_all = Tout +settings.perm_door = Porte +settings.perm_chest = Coffre +settings.perm_bench = Établi +settings.perm_processing = Traitement +settings.perm_seat = Siège +settings.perm_transport = Transport +settings.cat_other = AUTRE +settings.perm_crate = Utilisation Caisse +settings.perm_npc_tame = Apprivoiser PNJ +settings.perm_pve = Dégâts JcE +settings.appearance = Apparence +settings.color_label = Couleur : +settings.mob_spawning = Apparition des Monstres +settings.mob_spawning_hint = (enfants désactivés quand le principal est désactivé) +settings.mob_spawning_label = Apparition des Monstres +settings.hostile_mobs = Monstres Hostiles +settings.passive_mobs = Monstres Passifs +settings.neutral_mobs = Monstres Neutres +settings.faction_settings = Paramètres de Faction +settings.pvp_in_territory = JcJ dans le Territoire +settings.officers_can_edit = Les officiers peuvent modifier +settings.leader_only = Chef uniquement +settings.officers_only = Seuls les officiers et le chef peuvent modifier les paramètres de la faction. +settings.display_none = (Aucun) +settings.home_not_set = Non défini +settings.no_permission = Vous n'avez pas la permission de modifier les paramètres. +settings.only_leader_disband = Seul le chef peut dissoudre la faction. +settings.perm_locked = Ce paramètre est verrouillé par le serveur. +settings.no_perm_edit = Vous n'avez pas la permission de modifier les permissions du territoire. +settings.only_leader_officers = Seul le chef peut modifier l'accès des officiers. +settings.pvp_enabled = Activé +settings.pvp_disabled = Désactivé +settings.not_in_territory = Vous devez être dans le territoire de votre faction pour définir le foyer. +settings.home_set = Foyer de la faction défini à votre position actuelle ! +settings.recruitment_set = Recrutement défini sur {0}. +settings.home_no_set = Votre faction n'a pas de foyer défini. +settings.home_deleted = Foyer de la faction supprimé ! + +# ========== Page des Modules ========== +modules.title = Modules de la Faction +modules.description = Fonctionnalités optionnelles pour améliorer votre faction +modules.configure_btn = Configurer +modules.back_btn = < Retour aux Paramètres +modules.treasury_name = Trésorerie +modules.treasury_desc = Banque de faction et système économique +modules.raids_name = Raids +modules.raids_desc = Batailles de faction planifiées +modules.levels_name = Niveaux +modules.levels_desc = Progression de faction et XP +modules.war_name = Guerre +modules.war_desc = Déclarations de guerre formelles +modules.coming_soon = Bientôt Disponible +modules.active = Actif +modules.view_treasury = Voir la Trésorerie +modules.unavailable = Indisponible +modules.no_economy = Aucun plugin d'économie détecté +modules.disabled = Désactivé +modules.economy_not_available = Les fonctionnalités économiques ne sont pas disponibles sur ce serveur + +# ========== Page de la Trésorerie ========== +treasury.title = Trésorerie de la Faction +treasury.balance_label = Solde +treasury.income_24h = Revenus (24h) +treasury.deposits_transfers_in = dépôts, transferts entrants +treasury.expenses_24h = Dépenses (24h) +treasury.withdrawals_transfers_out = retraits, transferts sortants +treasury.maintenance = ENTRETIEN +treasury.runway_label = Autonomie : +treasury.add_funds = Ajouter des fonds +treasury.deposit_btn = Déposer +treasury.take_funds = Retirer des fonds +treasury.withdraw_btn = Retirer +treasury.send_to_faction = Envoyer à une faction +treasury.transfer_btn = Transférer +treasury.treasury_config = Configuration de la trésorerie +treasury.settings_btn = Paramètres +treasury.recent_transactions = Transactions Récentes +treasury.no_transactions = Aucune transaction pour l'instant +treasury.col_date = Date +treasury.col_type = Type +treasury.col_by = Par +treasury.col_amount = Montant +treasury.col_details = Détails +treasury.pay_now_btn = Payer Maintenant +treasury.cost_7d = 7j : +treasury.cost_14d = 14j : +treasury.cost_30d = 30j : +treasury.settings_title = Paramètres de la Trésorerie +treasury.officer_permissions = PERMISSIONS DES OFFICIERS +treasury.allow_withdraw = Autoriser les Officiers à Retirer +treasury.allow_transfer = Autoriser les Officiers à Transférer +treasury.limits_section = LIMITES DE RETRAIT ET DE TRANSFERT +treasury.max_per_withdrawal = Maximum par retrait : +treasury.max_withdrawals_per = Maximum de retraits par période : +treasury.max_per_transfer = Maximum par transfert : +treasury.max_transfers_per = Maximum de transferts par période : +treasury.limit_period = Période limite (heures) : +treasury.no_limit_hint = Mettre à 0 pour aucune limite +treasury.upkeep_settings = PARAMÈTRES D'ENTRETIEN +treasury.auto_pay_upkeep = Paiement automatique de l'entretien depuis la trésorerie +treasury.back_btn = Retour +treasury.upkeep_cost_format = {0} toutes les {1}h +treasury.upkeep_time_left = {0} restant(es) +treasury.wallet_label = Votre portefeuille : {0} +treasury.treasury_label = Solde de la trésorerie : {0} +treasury.chunks_detail = {0} gratuit(s) + {1} chunks facturables +treasury.cost_label = Coût : {0} +treasury.pending = En Attente +treasury.auto_pay_on = Paiement auto : ACTIVÉ +treasury.auto_pay_off = Paiement auto : DÉSACTIVÉ +treasury.runway_90_plus = 90+ jours +treasury.runway_days = {0} jours +treasury.runway_day = {0} jour +treasury.runway_less_day = < 1 jour +treasury.runway_no_funds = Aucun fonds +treasury.grace_expires = Le sursis expire dans : {0} +treasury.missed_payments = Paiements manqués : {0} +treasury.pay_to_clear = Payez {0} pour annuler le sursis +treasury.system = Système +treasury.type_deposit = Dépôt +treasury.type_withdrawal = Retrait +treasury.type_transfer_in = Transfert Entrant +treasury.type_transfer_out = Transfert Sortant +treasury.type_player_transfer = Transfert Joueur +treasury.type_upkeep = Entretien +treasury.type_tax = Collecte d'Impôts +treasury.type_war_cost = Coût de Guerre +treasury.type_raid_cost = Coût de Raid +treasury.type_spoils = Butin +treasury.type_admin = Ajustement Admin +treasury.deposit_title = Déposer dans la Trésorerie +treasury.withdraw_title = Retirer de la Trésorerie +treasury.fee_label = Frais ({0}%) +treasury.confirm_deposit = Confirmer le Dépôt +treasury.confirm_withdrawal = Confirmer le Retrait +treasury.from_wallet = {0} depuis le portefeuille +treasury.to_wallet = {0} vers le portefeuille +treasury.enter_valid_amount = Entrez un montant positif valide. +treasury.insufficient_wallet = Fonds insuffisants dans le portefeuille. Besoin de {0}, vous avez {1}. +treasury.wallet_withdraw_failed = Échec du retrait de votre portefeuille. +treasury.deposit_failed_returned = Échec du dépôt. Argent restitué. +treasury.deposited = {0} déposé dans la trésorerie. +treasury.deposited_fee = {0} déposé dans la trésorerie. (frais : {1}) +treasury.no_withdraw_permission = Vous n'avez pas la permission de retirer. +treasury.withdraw_denied = Retrait refusé : {0} +treasury.insufficient_treasury = Fonds insuffisants dans la trésorerie. +treasury.withdraw_limit = Limite de retrait dépassée. +treasury.withdraw_failed = Retrait échoué : {0} +treasury.wallet_deposit_warn = Attention : Échec du dépôt dans votre portefeuille. Contactez un administrateur. +treasury.withdrew = {0} retiré de la trésorerie. +treasury.withdrew_fee = {0} retiré de la trésorerie. (frais : {1}, reçu : {2}) +treasury.search_hint = Rechercher un joueur ou une faction +treasury.no_results = Aucun résultat pour « {0} » +treasury.tag_player = [Joueur] +treasury.tag_faction = [Faction] +treasury.source_online = En Ligne +treasury.source_offline = Hors Ligne +treasury.source_player_db = Joueur Hytale +treasury.no_transfer_permission = Vous n'avez pas la permission de transférer. +treasury.transfer_denied = Transfert refusé : {0} +treasury.invalid_target_faction = Faction cible invalide. +treasury.target_faction_gone = La faction cible n'existe plus. +treasury.transfer_failed = Transfert échoué : {0} +treasury.transfer_failed_returned = Transfert échoué. Fonds restitués. +treasury.transferred = {0} transféré à {1}. +treasury.invalid_target_player = Joueur cible invalide. +treasury.player_transfer_failed = Échec du dépôt dans le portefeuille du joueur. Transfert annulé. +treasury.leader_only_perms = Seul le chef peut modifier les permissions de la trésorerie. +treasury.leader_only_upkeep = Seul le chef peut modifier les paramètres d'entretien. +treasury.invalid_limit = Nombre invalide dans les champs de limite. Utilisez 0 pour illimité. + +# ========== Pages de Confirmation ========== +confirm.disband_title = Dissoudre la Faction +confirm.disband_prompt = Êtes-vous sûr de vouloir dissoudre +confirm.disband_warning = Cette action ne peut pas être annulée ! +confirm.leave_title = Quitter la Faction +confirm.leave_prompt = Êtes-vous sûr de vouloir quitter +confirm.leave_warning = Vous perdrez l'accès au territoire de la faction. +confirm.leader_leave_title = Quitter en tant que Chef +confirm.leader_leave_prompt = Vous quittez +confirm.transfer_title = Transférer le Commandement +confirm.transfer_prompt = Êtes-vous sûr de vouloir transférer le commandement à +confirm.transfer_warning = Vous deviendrez Officier. +confirm.disband_not_leader = Seul le chef peut dissoudre la faction. +confirm.disbanded = La faction « {0} » a été dissoute. +confirm.disband_failed = Échec de la dissolution de la faction. +confirm.succession_title = Le commandement sera transféré à : +confirm.no_members_warning = ATTENTION : Aucun autre membre ! +confirm.will_disband = Quitter dissoudra la faction définitivement. +confirm.not_in_faction = Vous n'êtes pas dans cette faction. +confirm.not_leader_anymore = Vous n'êtes plus le chef. +confirm.no_successor = Aucun successeur disponible. Utilisez la dissolution à la place. +confirm.transfer_failed = Échec du transfert de commandement : {0} +confirm.leader_left = Commandement transféré à {0}. Vous avez quitté {1}. +confirm.leave_failed = Échec du départ de la faction : {0} +confirm.leader_cannot_leave = Les chefs ne peuvent pas quitter. Transférez le commandement ou dissolvez la faction. +confirm.left_faction = Vous avez quitté {0}. +confirm.faction_gone = La faction n'existe plus. +confirm.not_leader_transfer = Seul le chef peut transférer le commandement. +confirm.leadership_transferred = Commandement transféré à {0}. + +# ========== Page des Journaux d'Activité ========== +logs.title = {0} - Journaux d'Activité +logs.entry_count = {0} entrées +logs.filter_label = Filtrer : +logs.col_time = Heure +logs.col_type = Type +logs.col_message = Message +logs.prev_btn = < Préc. +logs.next_btn = Suiv. > +logs.all_types = Tous les Types +logs.no_logs_type = Aucun journal de ce type. +logs.no_logs = Aucun journal d'activité pour l'instant. +logs.time_just_now = à l'instant +logs.time_minute = il y a {0} minute +logs.time_minutes = il y a {0} minutes +logs.time_hour = il y a {0} heure +logs.time_hours = il y a {0} heures +logs.time_day = il y a {0} jour +logs.time_days = il y a {0} jours +logs.time_week = il y a {0} semaine +logs.time_weeks = il y a {0} semaines +logs.type_member_join = Adhésion +logs.type_member_leave = Départ +logs.type_member_kick = Exclusion +logs.type_member_promote = Promotion +logs.type_member_demote = Rétrogradation +logs.type_claim = Revendication +logs.type_unclaim = Abandon +logs.type_overclaim = Surrevendication +logs.type_home_set = Foyer Défini +logs.type_relation_ally = Allié +logs.type_relation_enemy = Ennemi +logs.type_relation_neutral = Neutre +logs.type_leader_transfer = Transfert +logs.type_settings_change = Paramètres +logs.type_power_change = Puissance +logs.type_economy = Économie +logs.type_admin_power = Puissance Admin + +# Modèles de messages de journal (i18n pour le contenu du journal d'activité) +# Actions des joueurs +logs.msg_faction_created = {0} a créé la faction +logs.msg_member_joined = {0} a rejoint la faction +logs.msg_member_left = {0} a quitté la faction +logs.msg_member_kicked = {0} a été exclu +logs.msg_member_promoted = {0} promu au rang de {1} +logs.msg_member_demoted = {0} rétrogradé au rang de {1} +logs.msg_leader_transferred = Commandement transféré à {0} +logs.msg_leader_left_transfer = {0} est parti, {1} est maintenant chef +logs.msg_relation_set = {0} défini comme {1} +# Territoire +logs.msg_claimed = Chunk revendiqué en {0}, {1} dans {2} +logs.msg_unclaimed = Chunk abandonné en {0}, {1} dans {2} +logs.msg_overclaim_lost = Chunk perdu en {0}, {1} au profit de {2} +logs.msg_overclaim_taken = Chunk surrevendiqué en {0}, {1} depuis {2} +logs.msg_all_unclaimed = Tout le territoire abandonné +logs.msg_claim_removed_world = Revendication dans « {0} » supprimée (monde interdisant les revendications) +logs.msg_claims_lost_upkeep = {0} revendication(s) perdue(s) pour défaut d'entretien ({1} paiements manqués) +logs.msg_claims_removed_inactive = {0} revendications supprimées pour inactivité ({1} jours) +# Foyer +logs.msg_home_set = Foyer défini +logs.msg_home_cleared = Foyer effacé +logs.msg_home_cleared_world = Foyer dans « {0} » effacé (monde interdisant les revendications) +# Paramètres +logs.msg_renamed = Renommée de « {0} » en « {1} » +logs.msg_set_open = Faction définie comme ouverte +logs.msg_set_closed = Faction définie comme sur invitation +logs.msg_desc_set = Description définie +logs.msg_desc_cleared = Description effacée +logs.msg_color_changed = Couleur changée en « {0} » +# Économie +logs.msg_deposit = Dépôt : {0} (+{1}) +logs.msg_withdrawal = Retrait : {0} (-{1}) +logs.msg_upkeep_paid = Entretien payé : {0} ({1} chunks facturables) +logs.msg_upkeep_grace_started = Échec de l'entretien : période de sursis commencée ({0}h) +logs.msg_upkeep_missed = Entretien manqué (paiement {0}), le sursis expire dans {1} +logs.msg_upkeep_manual = Entretien payé manuellement : {0} ({1} chunks facturables, sursis annulé) +# Puissance admin +logs.msg_admin_power_set = Admin a défini la puissance de {0} à {1} (était {2}) +logs.msg_admin_power_add = Admin a ajouté {0} de puissance à {1} ({2} -> {3}) +logs.msg_admin_power_remove = Admin a retiré {0} de puissance à {1} ({2} -> {3}) +logs.msg_admin_power_reset = Admin a réinitialisé la puissance de {0} à {1} (était {2}) +logs.msg_admin_power_adjusted = Admin a ajusté la puissance de {0} de {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin a défini la puissance max de {0} à {1} (était {2}) +logs.msg_admin_maxpower_reset = Admin a réinitialisé la puissance max de {0} au défaut global ({1}) +logs.msg_admin_powerloss_enabled = Admin a activé la perte de puissance pour {0} +logs.msg_admin_powerloss_disabled = Admin a désactivé la perte de puissance pour {0} +logs.msg_admin_decay_enabled = Admin a activé l'exemption de dégradation des revendications pour {0} +logs.msg_admin_decay_disabled = Admin a désactivé l'exemption de dégradation des revendications pour {0} +logs.msg_admin_kd_reset = Admin a réinitialisé le K/M de {0} +logs.msg_admin_power_set_all = Admin a défini la puissance de tous les {0} membres à {1} +logs.msg_admin_power_add_all = Admin a ajouté {0} de puissance à tous les {1} membres +logs.msg_admin_power_remove_all = Admin a retiré {0} de puissance à tous les {1} membres +logs.msg_admin_power_reset_all = Admin a réinitialisé la puissance de tous les {0} membres +logs.msg_admin_power_adjusted_all = Admin a ajusté la puissance de tous les {0} membres de {1} +# Faction admin +logs.msg_admin_kicked = [Admin] {0} a été exclu +logs.msg_admin_role_set = [Admin] Rôle de {0} défini à {1} +logs.msg_admin_leader_kick = [Admin] Commandement transféré de {0} à {1} (exclusion admin) +logs.msg_admin_econ_added = Admin a ajouté : {0} (solde : {1}) +logs.msg_admin_econ_deducted = Admin a déduit : {0} (solde : {1}) +logs.msg_admin_econ_set = Admin a défini le solde à {0} (était {1}) +# Importation +logs.msg_left_import = {0} est parti (importé dans une autre faction) +logs.msg_leader_import_transfer = {0} est devenu chef (ancien chef importé dans une autre faction) +logs.msg_imported_from = Faction importée depuis {0} + +# ========== Page du Chat ========== +chat.title = Chat de la Faction +chat.tab_faction = Faction +chat.tab_ally = Allié +chat.send_btn = Envoyer +chat.placeholder = Écrivez un message... +chat.no_messages = Aucun message pour l'instant. +chat.no_ally_permission = Vous n'avez pas la permission pour le chat allié. +chat.no_permission = Pas de permission. +chat.faction_gone = Votre faction n'existe plus. +chat.time_now = maintenant +chat.time_minutes = {0}min +chat.time_hours = {0}h + +# ========== Page des Invitations ========== +invites.title = Invitations +invites.tab_outgoing = Envoyées +invites.tab_requests = Demandes +invites.prev_btn = < Préc. +invites.next_btn = Suiv. > +invites.invite_count = {0} invitations +invites.request_count = {0} demandes +invites.invited_by = Invité par : {0} +invites.no_message = Aucun message +invites.expires = Expire : {0} +invites.type_outgoing = Envoyée +invites.type_request = Demande +invites.invited_by_label = Invité par : +invites.empty_outgoing = Aucune invitation envoyée. Utilisez /f invite pour inviter quelqu'un. +invites.empty_requests = Aucune demande d'adhésion. Les joueurs peuvent demander à rejoindre avec /f request. +invites.invalid_player = Joueur invalide. +invites.cancelled_invite = Invitation à {0} annulée. +invites.player_joined = {0} a rejoint la faction ! +invites.faction_full = La faction est pleine. Impossible d'accepter la demande. +invites.add_failed = Échec de l'ajout du joueur à la faction. +invites.request_expired = Demande introuvable ou expirée. +invites.request_declined = Demande d'adhésion de {0} refusée. +invites.time_seconds = {0}s +invites.time_minutes = {0}min +invites.time_hours = {0}h +invites.label_message = Message : +invites.btn_cancel = Annuler +invites.btn_accept = Accepter +invites.btn_decline = Refuser + +# ========== Page de la Carte ========== +map.title = Carte du Territoire +map.action_hint = Clic gauche : Revendiquer | Clic droit : Abandonner +map.legend_your = Votre Territoire +map.legend_ally = Territoire Allié +map.legend_enemy = Territoire Ennemi +map.legend_other = Autre Faction +map.legend_wilderness = Zone Sauvage +map.legend_safe = SafeZone +map.legend_war = WarZone +map.legend_you = Vous êtes ici +map.position = Votre Position : Chunk ({0}, {1}) +map.legend_protected = Protégé +map.claim_stats = Revendications : {0}/{1} ({2} disponible(s)) +map.overclaimed = SURREVENDIQUÉ par {0} ! +map.power_display = Puissance : {0}/{1} +map.join_to_claim = Rejoignez une faction pour revendiquer +map.claim_success = Chunk revendiqué en ({0}, {1}) ! +map.claim_not_in_faction = Vous devez appartenir à une faction pour revendiquer du territoire. +map.claim_not_officer = Seuls les officiers et le chef peuvent revendiquer du territoire. +map.claim_already_yours = Vous possédez déjà ce chunk. +map.claim_already_claimed = Ce chunk est déjà revendiqué par une autre faction. +map.claim_not_adjacent = Vous ne pouvez revendiquer que des chunks adjacents à votre territoire. +map.claim_max = Vous avez atteint votre limite maximale de revendications. +map.claim_world_not_allowed = La revendication n'est pas autorisée dans ce monde. +map.claim_orbisguard = Cette zone est protégée par OrbisGuard. +map.claim_failed = Échec de la revendication du chunk. +map.unclaim_success = Chunk abandonné en ({0}, {1}). +map.unclaim_not_in_faction = Vous devez appartenir à une faction. +map.unclaim_not_officer = Seuls les officiers et le chef peuvent abandonner du territoire. +map.unclaim_not_claimed = Ce chunk n'est pas revendiqué. +map.unclaim_not_yours = Ce chunk appartient à une autre faction. +map.unclaim_home = Impossible d'abandonner le chunk contenant le foyer de votre faction. +map.unclaim_failed = Échec de l'abandon du chunk. +map.overclaim_success = Chunk ennemi surrevendiqué en ({0}, {1}) ! +map.overclaim_not_in_faction = Vous devez appartenir à une faction. +map.overclaim_not_officer = Seuls les officiers et le chef peuvent surrevendiquer du territoire. +map.overclaim_already_yours = Vous possédez déjà ce chunk. +map.overclaim_ally = Vous ne pouvez pas surrevendiquer le territoire d'un allié. +map.overclaim_has_power = Cette faction a assez de puissance pour défendre son territoire. +map.overclaim_max = Vous avez atteint votre limite maximale de revendications. +map.overclaim_failed = Échec de la surrevendication du chunk. +# ========== Page de Création de Faction ========== +create.title = Créer Votre Faction +create.section_preview = Aperçu +create.section_basic_info = Informations de Base +create.section_details = Détails +create.name_prefix = Nom : +create.faction_name_label = Nom de la Faction * +create.tag_label = TAG (2-4 car., auto si vide) +create.desc_label = Description (Optionnelle) +create.recruitment_label = Recrutement +create.section_faction_color = Couleur de la Faction +create.section_combat = Combat +create.create_btn = Créer la Faction +create.preview_name = Nom de Votre Faction +create.leader_prefix = Chef : {0} +create.enter_name = Veuillez entrer un nom de faction. +create.name_too_short = Le nom de la faction doit contenir au moins {0} caractères. +create.name_too_long = Le nom de la faction ne peut pas dépasser {0} caractères. +create.name_taken = Une faction portant ce nom existe déjà. +create.tag_length = Le tag de la faction doit contenir {0}-{1} caractères. +create.tag_format = Le tag de la faction ne peut contenir que des lettres et des chiffres. +create.desc_too_long = La description ne peut pas dépasser {0} caractères. +create.created = Faction {0} créée avec succès ! +create.created_no_dashboard = Faction créée mais impossible d'ouvrir le tableau de bord. +create.invalid_name = Nom de faction invalide. +create.create_failed = Impossible de créer la faction. + +# ========== Pages Nouveau Joueur ========== +newplayer.browse_title = Parcourir les Factions +newplayer.invites_title = Invitations et Demandes +newplayer.map_title = Carte du Territoire +newplayer.view_only_badge = Mode Consultation +newplayer.legend_label = Légende : +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Faction +newplayer.legend_wilderness = Zone Sauvage +newplayer.search_label = Recherche : +newplayer.sort_label = Trier : +newplayer.prev_btn = < Préc. +newplayer.next_btn = Suiv. > +newplayer.pending_count = {0} en attente +newplayer.received_header = INVITATIONS REÇUES ({0}) +newplayer.requests_header = VOS DEMANDES ({0}) +newplayer.no_invites = Aucune invitation. Parcourez les factions pour en trouver une ! +newplayer.no_requests = Aucune demande en attente. +newplayer.invited_by = Invité par : {0} +newplayer.member_count = {0} membres +newplayer.power_count = {0} puissance +newplayer.claim_count = {0} revendications +newplayer.awaiting_review = En attente d'examen +newplayer.expires_in = Expire dans {0}h +newplayer.time_just_now = à l'instant +newplayer.time_minutes = il y a {0} min +newplayer.time_hours = il y a {0}h +newplayer.time_days = il y a {0}j +newplayer.invalid_faction = Faction invalide. +newplayer.invite_expired = Cette invitation a expiré ou a été révoquée. +newplayer.faction_gone = La faction n'existe plus. +newplayer.joined = Vous avez rejoint {0} ! +newplayer.faction_full = Cette faction est pleine. +newplayer.join_failed = Impossible de rejoindre la faction. +newplayer.invite_declined = Invitation refusée. +newplayer.request_cancelled = Demande d'adhésion à {0} annulée. +newplayer.faction_count = {0} factions +newplayer.browse_subtitle = Trouvez votre nouveau foyer ! +newplayer.sort_power = Puissance +newplayer.sort_name = Nom +newplayer.sort_members = Membres +newplayer.btn_accept = Accepter +newplayer.btn_pending = En Attente +newplayer.btn_join = Rejoindre +newplayer.btn_request = Demander +newplayer.invite_only_msg = Cette faction est sur invitation uniquement. +newplayer.welcome_hint = Bienvenue ! Utilisez /f pour ouvrir le menu des factions. +newplayer.faction_open_hint = Cette faction est ouverte ! Cliquez sur REJOINDRE à la place. +newplayer.already_requested = Vous avez déjà une demande en attente pour cette faction. +newplayer.has_invite_hint = Vous avez une invitation de cette faction ! Cliquez sur ACCEPTER à la place. +newplayer.request_sent = Demande d'adhésion envoyée à {0} ! +newplayer.officer_review = Un officier examinera votre demande. +newplayer.map_hint = Consultation uniquement - Rejoignez une faction pour revendiquer du territoire ! + +# Paramètres Joueur +nav.player_settings = Joueur +player_settings.title = Paramètres du Joueur +player_settings.language_section = Langue +player_settings.auto_detect = Détection automatique du client +player_settings.auto_detect_desc = Utilise le paramètre de langue de votre client de jeu +player_settings.language_label = Langue +player_settings.notifications_section = Notifications +player_settings.territory_alerts = Alertes de Territoire +player_settings.territory_alerts_desc = Afficher les notifications en entrant/quittant des territoires +player_settings.death_announcements = Annonces de Décès +player_settings.death_announcements_desc = Recevoir les annonces de position de mort des membres de la faction +player_settings.power_notifications = Changements de Puissance +player_settings.power_notifications_desc = Afficher les messages quand votre puissance change +player_settings.language_changed = Langue changée en {0} +player_settings.pref_enabled = {0} activé +player_settings.pref_disabled = {0} désactivé + +# ========== Pages d'Aide ========== +help.center_title = Centre d'Aide +help.getting_started_title = Premiers Pas +help.what_are_factions_title = Qu'est-ce que les Factions ? +help.what_are_factions_1 = Les factions sont des groupes créés par les joueurs qui travaillent ensemble +help.what_are_factions_2 = pour revendiquer du territoire, construire des bases et se mesurer aux autres. +help.what_are_factions_bullet_1 = - Territoire protégé pour construire +help.what_are_factions_bullet_2 = - Des coéquipiers avec qui jouer +help.what_are_factions_bullet_3 = - Accès au chat de faction et aux fonctionnalités +help.joining_title = Rejoindre une Faction +help.joining_desc = Il y a plusieurs façons de rejoindre une faction : +help.joining_bullet_1 = - Parcourir - Trouvez des factions ouvertes et cliquez sur REJOINDRE +help.joining_bullet_2 = - Invitations - Acceptez les invitations des officiers +help.joining_bullet_3 = - Demande - Demandez à rejoindre les factions sur invitation +help.creating_title = Créer une Faction +help.creating_desc = Allez dans l'onglet Créer pour fonder votre propre faction. +help.creating_bullet_1 = - Invitez et gérez des membres +help.creating_bullet_2 = - Revendiquez et protégez du territoire +help.commands_title = Commandes Rapides +help.cmd_f = /f - Ouvrir le menu des factions +help.cmd_f_list = /f list - Lister toutes les factions +help.cmd_f_join = /f join - Rejoindre une faction ouverte +help.cmd_f_create = /f create - Créer une nouvelle faction +help.cmd_f_help = /f help - Liste complète des commandes +help.tip = Astuce : Parcourez les factions pour trouver un groupe qui vous correspond ! diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..c47e0272 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Sistema di Configurazione + +HyperFactions utilizza un sistema di configurazione JSON modulare con 11 file di configurazione. + +## Comandi Configurazione Admin + +| Comando | Descrizione | +|---------|-------------| +| `/f admin config` | Apri la GUI dell'editor visuale di configurazione | +| `/f admin reload` | Ricarica tutti i file di configurazione dal disco | +| `/f admin sync` | Sincronizza i dati delle fazioni con lo storage | + +## File di Configurazione + +| File | Contenuti | +|------|----------| +| `factions.json` | Ruoli, potere, claim, combattimento, relazioni | +| `server.json` | Teletrasporto, salvataggio automatico, messaggi, GUI, permessi | +| `economy.json` | Tesoro, mantenimento, impostazioni transazioni | +| `backup.json` | Rotazione backup e impostazioni di conservazione | +| `chat.json` | Formattazione chat fazione e alleati | +| `debug.json` | Categorie di log debug | +| `faction-permissions.json` | Permessi predefiniti per ruolo | +| `announcements.json` | Notifiche eventi e territorio | +| `gravestones.json` | Impostazioni integrazione tombe | +| `worldmap.json` | Modalita' aggiornamento mappa mondo | +| `worlds.json` | Override comportamento per mondo | + +>[!TIP] La GUI di configurazione fornisce un editor visuale con descrizioni per ogni impostazione. Le modifiche vengono salvate immediatamente ma alcune richiedono `/f admin reload` per avere pieno effetto. + +## Posizione Configurazione + +Tutti i file sono salvati in: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Le modifiche manuali al JSON richiedono `/f admin reload` per essere applicate. Un JSON non valido causera' il salto del file con un avviso nel log del server. + +>[!NOTE] La versione della configurazione e' tracciata in `server.json`. Il plugin migra automaticamente le configurazioni piu' vecchie all'avvio. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..19d1e1b3 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Impostazioni Per-Mondo + +HyperFactions supporta la configurazione per-mondo per claim, PvP e comportamento di protezione. + +## Comandi Mondo + +| Comando | Descrizione | +|---------|-------------| +| `/f admin world list` | Elenca tutti gli override per mondo | +| `/f admin world info ` | Mostra le impostazioni per un mondo | +| `/f admin world set ` | Imposta un'impostazione | +| `/f admin world reset ` | Ripristina il mondo ai valori predefiniti | + +## Impostazioni Disponibili + +| Impostazione | Tipo | Descrizione | +|--------------|------|-------------| +| claiming_enabled | boolean | Permetti claim delle fazioni in questo mondo | +| pvp_enabled | boolean | Permetti combattimento PvP in questo mondo | +| power_loss | boolean | Applica perdita di potere alla morte | +| build_protection | boolean | Applica protezione costruzione nei claim | +| explosion_protection | boolean | Proteggi i claim dalle esplosioni | + +## Whitelist / Blacklist Mondi + +Controlla quali mondi permettono le funzionalita' delle fazioni tramite il file di configurazione `worlds.json`: + +- **Modalita' whitelist**: Solo i mondi elencati permettono il claim +- **Modalita' blacklist**: Tutti i mondi permettono il claim tranne quelli elencati + +>[!INFO] Le impostazioni per mondo sono salvate in `worlds.json` e sovrascrivono i valori predefiniti globali da `factions.json`. + +## Esempi + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- ripristina tutti i valori predefiniti + +>[!TIP] Disabilita il claim nei mondi creativi o lobby per mantenere il sistema fazioni focalizzato sul gameplay survival. + +>[!NOTE] Le impostazioni per-mondo hanno priorita' sulla configurazione globale ma sono sovrascritte dai flag delle zone all'interno di quel mondo. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..05eb4035 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Gestione del Tesoro + +Comandi admin per gestire i tesori delle fazioni. Richiede il permesso `hyperfactions.admin.economy`. + +## Comandi del Tesoro + +| Comando | Descrizione | +|---------|-------------| +| `/f admin economy balance ` | Visualizza il saldo del tesoro della fazione | +| `/f admin economy set ` | Imposta il saldo esatto | +| `/f admin economy add ` | Aggiungi fondi al tesoro | +| `/f admin economy take ` | Rimuovi fondi dal tesoro | +| `/f admin economy reset ` | Azzera il tesoro | + +## Esempi + +- `/f admin economy balance Vikings` -- controlla il saldo +- `/f admin economy set Vikings 5000` -- imposta a 5000 +- `/f admin economy add Vikings 1000` -- deposita 1000 +- `/f admin economy take Vikings 500` -- preleva 500 +- `/f admin economy reset Vikings` -- azzera il saldo + +>[!TIP] Usa `/f admin info ` per vedere la panoramica economica completa incluso lo storico transazioni insieme al saldo del tesoro. + +## Casi d'Uso + +| Scenario | Comando | +|----------|---------| +| Distribuzione premi evento | `economy add ` | +| Penalita' per violazione regole | `economy take ` | +| Reset economia dopo wipe | `economy reset ` | +| Compensazione per bug | `economy add ` | + +>[!WARNING] Le modifiche al tesoro vengono registrate nello storico transazioni della fazione. Le modifiche admin vengono registrate con il nome dell'admin per responsabilita'. + +>[!NOTE] Tutti i comandi admin economia funzionano anche quando il modulo economia e' disabilitato nella configurazione. I dati vengono salvati indipendentemente dallo stato del modulo. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..bc4799ef --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Gestione del Mantenimento + +Il mantenimento delle fazioni addebita le fazioni periodicamente in base al loro territorio e numero di membri. + +## Controlli Admin + +Le impostazioni di mantenimento sono gestite attraverso il file di configurazione economia o la GUI di configurazione admin. + +`/f admin config` +Apri l'editor di configurazione e naviga alle impostazioni economia per regolare i valori di mantenimento. + +## Impostazioni Predefinite del Mantenimento + +| Impostazione | Predefinito | Descrizione | +|--------------|-------------|-------------| +| Mantenimento abilitato | false | Interruttore principale del sistema | +| Intervallo mantenimento | 24h | Quanto spesso viene addebitato il mantenimento | +| Costo per claim | 5.0 | Costo per chunk reclamato per ciclo | +| Costo per membro | 0.0 | Costo per membro per ciclo | +| Periodo di grazia | 72h | Le nuove fazioni sono esenti | +| Scioglimento per bancarotta | false | Scioglimento automatico se non puo' pagare | + +## Monitorare il Mantenimento + +Usa `/f admin info ` per vedere: +- Saldo attuale del tesoro +- Costo stimato di mantenimento per ciclo +- Tempo fino al prossimo addebito di mantenimento +- Se la fazione puo' permettersi il mantenimento + +>[!TIP] Controlla le statistiche economiche di tutte le fazioni dalla dashboard admin per identificare le fazioni a rischio di bancarotta prima che il mantenimento venga addebitato. + +>[!INFO] La configurazione del mantenimento e' salvata in `economy.json`. Le modifiche fatte tramite la GUI di configurazione hanno effetto dopo il ricaricamento con `/f admin reload`. + +## Formula del Mantenimento + +**Mantenimento totale** = (chunk reclamati x costo per claim) + (numero membri x costo per membro) + +>[!WARNING] Abilitare il mantenimento su un server con fazioni esistenti potrebbe causare bancarotte inaspettate. Considera di impostare un periodo di grazia o annunciare il cambiamento in anticipo. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..3219bf01 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Scioglimento Forzato + +Gli admin possono sciogliere forzatamente qualsiasi fazione, indipendentemente dalla volonta' del leader. + +## Comando + +`/f admin disband ` +Scioglie forzatamente la fazione indicata. Apparira' un messaggio di conferma prima che l'azione venga eseguita. + +**Permesso**: `hyperfactions.admin.disband` + +>[!WARNING] Sciogliere una fazione e' **irreversibile**. Tutti i claim vengono rilasciati, tutti i membri vengono rimossi e la fazione cessa di esistere. Crea un backup prima. + +## Conseguenze + +Quando una fazione viene sciolta: + +| Effetto | Descrizione | +|---------|-------------| +| **Claim** | Tutto il territorio viene rilasciato immediatamente | +| **Membri** | Tutti i giocatori vengono rimossi dal roster | +| **Relazioni** | Tutte le alleanze e le inimicizie vengono cancellate | +| **Tesoro** | Gestito secondo le impostazioni della configurazione economia | +| **Home** | La home della fazione viene eliminata | +| **Chat** | Lo storico della chat della fazione viene rimosso | + +## Buone Pratiche + +1. Esegui sempre `/f admin backup create` prima di sciogliere +2. Notifica i membri della fazione quando possibile +3. Documenta il motivo per i registri del server +4. Controlla `/f admin info ` per rivedere prima di agire + +>[!TIP] Se il problema e' con un membro specifico, considera di usare la GUI admin fazioni per trasferire la leadership piuttosto che sciogliere l'intera fazione. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..375816d6 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Gestione delle Fazioni + +Gli admin possono ispezionare e modificare qualsiasi fazione sul server tramite la dashboard o i comandi. + +## Sfogliare le Fazioni + +`/f admin factions` +Apre il browser admin delle fazioni. Visualizza tutte le fazioni con numero di membri, livelli di potere e territorio. + +`/f admin info ` +Apre il pannello info admin per una fazione specifica con tutti i dettagli e le opzioni di gestione. + +## Modificare le Impostazioni della Fazione + +Con il permesso `hyperfactions.admin.modify`, puoi: + +- **Rinominare** una fazione per risolvere conflitti +- **Impostare il colore** per risolvere problemi di visualizzazione +- **Attivare/disattivare aperta/chiusa** per sovrascrivere la politica di adesione +- **Modificare la descrizione** per scopi di moderazione + +>[!TIP] Usa `/f admin who ` per cercare a quale fazione appartiene un giocatore specifico e visualizzare i suoi dettagli. + +## Visualizzare Membri e Relazioni + +Il pannello info admin mostra: + +| Sezione | Dettagli | +|---------|----------| +| **Membri** | Roster completo con ruoli e ultimo accesso | +| **Relazioni** | Tutti gli stati di alleato, nemico e neutrale | +| **Territorio** | Chunk reclamati e bilancio di potere | +| **Economia** | Saldo del tesoro e log delle transazioni | + +>[!NOTE] I comandi di ispezione admin non notificano la fazione che viene visualizzata. Solo le modifiche attivano gli avvisi. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..259cfdb0 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Sistema di Backup + +HyperFactions include backup automatici e manuali con rotazione GFS (Nonno-Padre-Figlio). + +## Comandi Backup + +| Comando | Descrizione | +|---------|-------------| +| `/f admin backup create` | Crea un backup manuale ora | +| `/f admin backup list` | Elenca tutti i backup disponibili | +| `/f admin backup restore ` | Ripristina da un backup | +| `/f admin backup delete ` | Elimina un backup specifico | + +**Permesso**: `hyperfactions.admin.backup` + +## Valori Predefiniti Rotazione GFS + +| Tipo | Conservazione | Descrizione | +|------|---------------|-------------| +| Orario | 24 | Ultimi 24 snapshot orari | +| Giornaliero | 7 | Ultimi 7 snapshot giornalieri | +| Settimanale | 4 | Ultimi 4 snapshot settimanali | +| Manuale | 10 | Backup creati manualmente | +| Spegnimento | 5 | Creati allo stop del server | + +>[!INFO] I backup allo spegnimento sono abilitati per impostazione predefinita (`onShutdown=true`). Catturano lo stato piu' recente prima dell'arresto del server. + +## Contenuti del Backup + +Ogni archivio ZIP di backup contiene: +- Tutti i file dati delle fazioni +- Dati potere dei giocatori +- Definizioni delle zone +- Storico chat e dati economia +- Dati inviti e richieste di adesione +- File di configurazione + +>[!WARNING] **Il ripristino di un backup e' distruttivo.** Sostituisce tutti i dati attuali con i contenuti del backup. Qualsiasi modifica fatta dopo la creazione del backup andra' persa. Crea sempre un backup fresco prima di ripristinare. + +## Buone Pratiche + +1. Crea un backup manuale prima di azioni admin importanti +2. Controlla la conservazione dei backup in `backup.json` +3. Testa il ripristino su un server di staging prima +4. Mantieni i backup allo spegnimento abilitati per il recupero da crash diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..b9d9faa2 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Importazione Dati + +Importa dati di fazioni da altri plugin per migrare il tuo server a HyperFactions. + +## Comando di Importazione + +`/f admin import [path] [flags]` + +**Permesso**: `hyperfactions.admin.use` + +## Sorgenti Supportate + +| Sorgente | Descrizione | +|----------|-------------| +| `elbaphfactions` | Importa da dati ElbaphFactions | +| `hyfactions` | Importa da dati HyFactions v1 | + +## Flag di Importazione + +| Flag | Descrizione | +|------|-------------| +| `--dry-run` | Valida i dati senza importare nulla | +| `--overwrite` | Sovrascrivi le fazioni esistenti con lo stesso nome | +| `--no-zones` | Salta i dati delle zone durante l'importazione | +| `--no-power` | Salta i dati del potere durante l'importazione | + +>[!TIP] Esegui sempre con `--dry-run` prima per visualizzare in anteprima cosa verra' importato e individuare eventuali problemi nei dati prima di confermare le modifiche. + +## Processo di Importazione + +1. Un backup pre-importazione viene creato automaticamente +2. Le mappature dei nomi giocatore vengono caricate +3. Fazioni, claim e zone vengono convertiti +4. I dati vengono validati e salvati + +## Esempi + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Usare `--overwrite` **sostituira'** qualsiasi fazione esistente che condivide un nome con una fazione importata. I dati dei membri e i claim verranno sovrascritti. Esegui prima con `--dry-run` per identificare i conflitti. + +>[!NOTE] Alcuni dati specifici della sorgente (es. worker plots, farm plots) non hanno un equivalente in HyperFactions e verranno registrati come avvisi durante l'importazione. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..00f65032 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Controllo Aggiornamenti + +HyperFactions puo' controllare nuove versioni e gestire la dipendenza HyperProtect-Mixin. + +## Comandi Aggiornamento + +| Comando | Descrizione | +|---------|-------------| +| `/f admin update` | Controlla aggiornamenti di HyperFactions | +| `/f admin update mixin` | Controlla/scarica HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Attiva/disattiva download automatico | +| `/f admin version` | Mostra versione attuale e info build | + +## Canali di Rilascio + +| Canale | Descrizione | +|--------|-------------| +| **Stable** | Raccomandato per server di produzione | +| **Pre-release** | Accesso anticipato alle prossime funzionalita' | + +>[!INFO] Il controllo aggiornamenti notifica solo le nuove versioni. **Non** installa automaticamente gli aggiornamenti di HyperFactions stesso. + +## HyperProtect-Mixin + +HyperProtect-Mixin e' il mixin di protezione raccomandato che abilita flag avanzati delle zone (esplosioni, propagazione fuoco, conservazione inventario, ecc.). + +- `/f admin update mixin` controlla l'ultima versione +e la scarica se una versione piu' recente e' disponibile +- Il download automatico puo' essere attivato o disattivato per ogni server + +>[!TIP] Dopo aver scaricato una nuova versione del mixin, e' necessario un riavvio del server affinche' le modifiche abbiano effetto. + +## Procedura di Rollback + +Se un aggiornamento causa problemi: + +1. Ferma il server +2. Sostituisci il JAR del plugin con la versione precedente +3. Avvia il server +4. Verifica il funzionamento con `/f admin version` + +>[!WARNING] Il downgrade potrebbe richiedere un reset della migrazione della configurazione. Mantieni sempre i backup prima di aggiornare. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..ae85643a --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Per Iniziare come Admin + +Benvenuto nell'amministrazione di HyperFactions. Questa guida copre i tuoi primi passi dopo l'installazione del plugin. + +## Aprire la Dashboard Admin + +`/f admin` +Apre la GUI della dashboard admin con accesso a tutti gli strumenti di gestione, editor di zone e impostazioni del server. + +>[!INFO] Hai bisogno del permesso **hyperfactions.admin.use** o dello stato OP per accedere ai comandi admin. + +## Requisiti + +- **Con un plugin di permessi**: Assegna `hyperfactions.admin.use` +- **Senza un plugin di permessi**: Il giocatore deve essere un +operatore del server (`adminRequiresOp=true` per impostazione predefinita) + +## Primi Passi Dopo l'Installazione + +1. Esegui `/f admin` per verificare il tuo accesso +2. Apri **Config** per rivedere le impostazioni predefinite della fazione +3. Crea una **SafeZone** allo spawn con `/f admin safezone Spawn` +4. Opzionalmente crea **WarZone** per arene PvP +5. Controlla le impostazioni di **Backup** per garantire la sicurezza dei dati + +## Capacita' Admin + +| Area | Cosa Puoi Fare | +|------|----------------| +| Fazioni | Ispezionare, modificare o forzare lo scioglimento di qualsiasi fazione | +| Zone | Creare SafeZone e WarZone con flag personalizzati | +| Potere | Sovrascrivere i valori di potere di giocatori/fazioni | +| Economia | Gestire i tesori delle fazioni e il mantenimento | +| Configurazione | Modificare le impostazioni in tempo reale tramite GUI o ricaricare da disco | +| Backup | Creare, ripristinare e gestire backup dei dati | +| Importazioni | Migrare dati da altri plugin di fazioni | + +>[!TIP] Usa `/f admin --text` per ottenere output basato su chat invece della GUI, utile per console o automazione. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..88b87945 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Permessi Admin + +Tutte le funzionalita' admin sono protette da nodi di permesso nel namespace `hyperfactions.admin`. + +## Nodi di Permesso + +| Permesso | Descrizione | +|----------|-------------| +| `hyperfactions.admin.*` | Concede **tutti** i permessi admin | +| `hyperfactions.admin.use` | Accesso alla dashboard `/f admin` | +| `hyperfactions.admin.reload` | Ricaricare i file di configurazione | +| `hyperfactions.admin.debug` | Attivare/disattivare le categorie di log debug | +| `hyperfactions.admin.zones` | Creare, modificare ed eliminare zone | +| `hyperfactions.admin.disband` | Forzare lo scioglimento di qualsiasi fazione | +| `hyperfactions.admin.modify` | Modificare le impostazioni di qualsiasi fazione | +| `hyperfactions.admin.bypass.limits` | Ignorare i limiti di claim e potere | +| `hyperfactions.admin.backup` | Creare e ripristinare backup | +| `hyperfactions.admin.power` | Sovrascrivere i valori di potere dei giocatori | +| `hyperfactions.admin.economy` | Gestire i tesori delle fazioni | + +## Comportamento di Fallback + +Quando **nessun plugin di permessi** e' installato, i permessi admin ricadono sullo stato di operatore del server (OP). Questo e' controllato da `adminRequiresOp` nella configurazione del server (predefinito: `true`). + +>[!NOTE] Il wildcard `hyperfactions.admin.*` concede ogni permesso admin. Usa i nodi individuali per un controllo granulare sul tuo team di staff. + +## Ordine di Risoluzione dei Permessi + +1. Provider **VaultUnlocked** (se disponibile) +2. Provider **HyperPerms** (se disponibile) +3. Provider **LuckPerms** (se disponibile) +4. **Controllo OP** per i nodi admin (fallback) + +>[!WARNING] Senza un plugin di permessi e con `adminRequiresOp` disabilitato, i comandi admin sono **aperti a tutti i giocatori**. Usa sempre un plugin di permessi in produzione. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..9728bfb0 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Comandi Admin Potere + +Sovrascrivi i valori di potere di giocatori e fazioni. Tutti i comandi richiedono il permesso `hyperfactions.admin.power`. + +## Comandi Potere Giocatore + +| Comando | Descrizione | +|---------|-------------| +| `/f admin power set ` | Imposta il valore esatto di potere | +| `/f admin power add ` | Aggiunge potere al giocatore | +| `/f admin power remove ` | Rimuove potere dal giocatore | +| `/f admin power reset ` | Ripristina al potere iniziale predefinito | +| `/f admin power info ` | Visualizza il dettaglio completo del potere | + +## Come il Potere Influisce sulle Fazioni + +Il potere totale di una fazione e' la somma del potere individuale di tutti i suoi membri. I claim territoriali richiedono un potere totale sufficiente per essere mantenuti. + +| Scenario | Effetto | +|----------|---------| +| Potere impostato piu' alto | La fazione puo' reclamare piu' territorio | +| Potere impostato piu' basso | La fazione potrebbe diventare vulnerabile al sovra-claim | +| Potere resettato | Riporta il giocatore al valore iniziale predefinito | + +>[!WARNING] Ridurre il potere di un giocatore potrebbe causare alla sua fazione la perdita di territorio se il potere totale scende sotto il numero di chunk reclamati. + +## Esempi + +- `/f admin power set Steve 50` -- imposta a esattamente 50 +- `/f admin power add Steve 10` -- aumenta di 10 +- `/f admin power remove Steve 5` -- diminuisce di 5 +- `/f admin power reset Steve` -- riporta al predefinito +- `/f admin power info Steve` -- mostra il dettaglio completo + +>[!TIP] Usa `/f admin power info ` per vedere il potere attuale, il potere massimo e qualsiasi override attivo prima di apportare modifiche. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..0094febb --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Override del Potere + +Comandi speciali del potere che cambiano il comportamento del potere per giocatori o fazioni specifici. + +## Comandi Override + +| Comando | Descrizione | +|---------|-------------| +| `/f admin power setmax ` | Imposta un tetto massimo di potere personalizzato | +| `/f admin power noloss ` | Attiva/disattiva l'immunita' alla penalita' di morte | +| `/f admin power nodecay ` | Attiva/disattiva l'immunita' al decadimento offline | +| `/f admin power info ` | Visualizza tutti gli override e i dettagli del potere | + +## Potere Massimo Personalizzato + +`/f admin power setmax ` +Imposta un tetto massimo di potere personale per il giocatore, sovrascrivendo il valore predefinito del server. + +>[!INFO] Impostare un massimo personalizzato **non** cambia il potere attuale. Cambia solo il tetto. Il giocatore deve comunque guadagnare potere fino al nuovo limite. + +## Modalita' No-Loss + +`/f admin power noloss ` +Attiva/disattiva l'immunita' alla perdita di potere per morte. Quando abilitata, il giocatore **non** perdera' potere alla morte. + +Utile per: +- Periodi di protezione nuovi giocatori +- Partecipanti ad eventi +- Membri dello staff + +## Modalita' No-Decay + +`/f admin power nodecay ` +Attiva/disattiva l'immunita' al decadimento del potere offline. Quando abilitata, il potere del giocatore **non** diminuira' mentre e' offline. + +Utile per: +- Giocatori in congedo prolungato +- Membri VIP +- Protezione stagionale + +## Info Potere + +`/f admin power info ` +Mostra un dettaglio completo: + +- Potere attuale e potere massimo +- Override attivi (noloss, nodecay, massimo personalizzato) +- Orario ultima morte e potere perso +- Percentuale di contributo alla fazione + +>[!TIP] Tutti gli override del potere persistono attraverso i riavvii del server e sono salvati nel file dati del giocatore. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..51707a1e --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Riferimento Comandi Admin + +Lista completa di tutti i sottocomandi `/f admin` con sintassi e permessi richiesti. + +## Dashboard e Generali + +| Comando | Permesso | +|---------|----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Gestione Fazioni + +| Comando | Permesso | +|---------|----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Gestione Zone + +| Comando | Permesso | +|---------|----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Potere ed Economia + +| Comando | Permesso | +|---------|----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Manutenzione + +| Comando | Permesso | +|---------|----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Tutti i nodi di permesso sono prefissati con `hyperfactions.` (es. `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..cb0c959f --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Integrazioni Plugin + +HyperFactions si integra con diversi plugin esterni tramite dipendenze soft. Tutte le integrazioni sono opzionali e gestiscono l'assenza in modo trasparente. + +## Controllare lo Stato delle Integrazioni + +`/f admin version` +Mostra la versione attuale e le integrazioni rilevate. + +`/f admin integration` +Apre il pannello di gestione integrazioni con stato dettagliato per ogni plugin rilevato. + +## Tabella Integrazioni + +| Plugin | Tipo | Descrizione | +|--------|------|-------------| +| **HyperPerms** | Permessi | Sistema completo di permessi con gruppi, ereditarieta' e contesto | +| **LuckPerms** | Permessi | Provider di permessi alternativo | +| **VaultUnlocked** | Permessi/Economia | Bridge per permessi ed economia | +| **HyperProtect-Mixin** | Protezione | Abilita flag avanzati delle zone (esplosioni, fuoco, conservazione inventario) | +| **OrbisGuard-Mixins** | Protezione | Mixin alternativo per l'applicazione dei flag zone | +| **PlaceholderAPI** | Placeholder | 49 placeholder fazione per altri plugin | +| **WiFlow PlaceholderAPI** | Placeholder | Provider di placeholder alternativo | +| **GravestonePlugin** | Morte | Controllo accesso tombe nelle zone | +| **HyperEssentials** | Funzionalita' | Flag zone per home, warp e kit | +| **KyuubiSoft Core** | Framework | Integrazione libreria core | +| **Sentry** | Monitoraggio | Tracciamento errori e diagnostica | + +## Priorita' Provider Permessi + +1. **VaultUnlocked** (priorita' massima) +2. **HyperPerms** +3. **LuckPerms** +4. **Fallback OP** (se nessun provider trovato) + +>[!INFO] Le integrazioni vengono rilevate una volta all'avvio tramite reflection. I risultati vengono memorizzati per la sessione. E' necessario un riavvio del server dopo aver aggiunto o rimosso un plugin integrato. + +>[!TIP] Usa `/f admin debug toggle integration` per abilitare il logging dettagliato delle integrazioni per la risoluzione dei problemi. + +>[!NOTE] HyperProtect-Mixin e' il mixin di protezione **raccomandato**. Senza di esso, 15 flag delle zone non avranno effetto. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..0908aa24 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Basi delle Zone + +Le zone sono territori controllati dagli admin con regole personalizzate che sovrascrivono la normale protezione delle fazioni. + +## Tipi di Zona + +- **SafeZone** -- Niente PvP, niente costruzione, niente danni. +Ideale per aree di spawn e hub commerciali. +- **WarZone** -- PvP sempre abilitato, niente costruzione. +Ideale per arene e aree di battaglia contese. + +## Creare Zone + +`/f admin safezone ` +Crea una SafeZone e reclama il tuo chunk corrente. + +`/f admin warzone ` +Crea una WarZone e reclama il tuo chunk corrente. + +Dopo la creazione, posizionati in chunk aggiuntivi e usa `/f admin zone claim ` per espandere la zona. + +## Gestire i Chunk della Zona + +`/f admin zone claim ` +Aggiungi il chunk corrente alla zona indicata. + +`/f admin zone unclaim ` +Rimuovi il chunk corrente dalla zona indicata. + +`/f admin zone radius ` +Reclama un quadrato di chunk intorno alla tua posizione. + +## Eliminare Zone + +`/f admin removezone ` +Elimina permanentemente la zona e rilascia tutti i suoi chunk reclamati. + +>[!WARNING] Eliminare una zona rilascia tutti i suoi chunk istantaneamente. Questa operazione non puo' essere annullata senza un ripristino da backup. + +>[!INFO] Le regole delle zone **sovrascrivono sempre** le regole del territorio delle fazioni. Una SafeZone all'interno di territorio nemico e' comunque sicura. diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..6e9a041c --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Riferimento Comandi Zone + +Riferimento completo per tutti i comandi di gestione zone. Tutti richiedono il permesso `hyperfactions.admin.zones`. + +## Creazione Rapida + +| Comando | Descrizione | +|---------|-------------| +| `/f admin safezone ` | Crea una SafeZone nel chunk corrente | +| `/f admin warzone ` | Crea una WarZone nel chunk corrente | +| `/f admin removezone ` | Elimina una zona e rilascia i chunk | + +## Gestione Zone + +| Comando | Descrizione | +|---------|-------------| +| `/f admin zone create ` | Crea una zona (safezone/warzone) | +| `/f admin zone delete ` | Elimina una zona | +| `/f admin zone claim ` | Aggiungi il chunk corrente alla zona | +| `/f admin zone unclaim ` | Rimuovi il chunk corrente dalla zona | +| `/f admin zone radius ` | Reclama un raggio quadrato di chunk | +| `/f admin zone list` | Elenca tutte le zone con conteggio chunk | +| `/f admin zone notify ` | Attiva/disattiva messaggi di ingresso/uscita | +| `/f admin zone title upper/lower ` | Imposta il testo del titolo della zona | +| `/f admin zone properties ` | Apri la GUI proprieta' della zona | + +## Gestione Flag + +| Comando | Descrizione | +|---------|-------------| +| `/f admin zoneflag ` | Imposta un flag specifico | + +>[!TIP] Usa la **GUI proprieta'** della zona per un editor visuale con interruttori per ogni flag, organizzati per categoria. + +## Esempi + +- `/f admin safezone Spawn` -- crea protezione spawn +- `/f admin zone radius Spawn 3` -- espandi a 7x7 chunk +- `/f admin zoneflag Spawn door_use true` -- permetti le porte +- `/f admin zone notify Spawn true` -- mostra messaggi di ingresso diff --git a/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..71fc5df4 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Flag delle Zone + +Le zone supportano **47 flag booleani** in 10 categorie. Ogni flag controlla un comportamento specifico all'interno della zona. + +## Panoramica Categorie Flag + +| Categoria | Conteggio | Flag Principali | +|-----------|-----------|-----------------| +| Combattimento | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Danni | 4 | fall_damage, explosion_damage, fire_spread | +| Morte | 2 | keep_inventory, power_loss | +| Costruzione | 4 | build_allowed, block_place, hammer_use | +| Interazione | 13 | door_use, container_use, bench_use, npc_tame | +| Trasporto | 3 | teleporter_use, portal_use, mount_entry | +| Oggetti | 4 | item_drop, item_pickup, invincible_items | +| Spawn Mob | 5 | mob_spawning, hostile/passive/neutral | +| Rimozione Mob | 4 | mob_clear, hostile/passive/neutral clear | +| Integrazione | 5 | gravestone_access, show_on_map, essentials_homes | + +## Valori Predefiniti (SafeZone vs WarZone) + +| Flag | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Alcuni flag richiedono **HyperProtect-Mixin** per funzionare (es. keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Senza il mixin, questi flag non hanno effetto anche quando abilitati. + +## Impostare i Flag + +`/f admin zoneflag ` + +>[!TIP] Usa `/f admin zone properties ` per un editor visuale con interruttori raggruppati per categoria. diff --git a/src/main/resources/Server/Languages/it-IT/help/combat/death.md b/src/main/resources/Server/Languages/it-IT/help/combat/death.md new file mode 100644 index 00000000..fd2cdbbf --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Morte e Recupero + +La morte ha conseguenze reali nelle fazioni. Ogni morte ti costa potere personale, indebolendo la capacita' della tua fazione di mantenere il territorio. + +## Perdita di Potere + +Ogni morte costa -1.0 potere dal tuo totale personale. Questo riduce il potere combinato della fazione. + +| Evento | Variazione Potere | +|--------|-------------------| +| Morte (qualsiasi causa) | -1.0 | +| Rigenerazione online | +0.1 al minuto | +| Disconnessione in combattimento | -1.0 (ucciso) | + +>[!NOTE] Questi sono valori predefiniti. L'amministratore del tuo server potrebbe aver configurato impostazioni diverse. + +## Scenari di Esempio + +*5 membri con 10.0 potere ciascuno = 50 totale, 20 claim.* +*Un membro muore due volte: 8.0 potere, totale fazione 48.* +*Tre membri muoiono una volta ciascuno: il totale scende a 47.* + +>[!WARNING] Se il potere della tua fazione scende sotto il numero dei tuoi claim, i nemici possono sovra-reclamare il tuo territorio. + +## Recupero + +Il potere si rigenera a 0.1 al minuto mentre sei online. Recuperare 1.0 potere perso richiede circa 10 minuti. Le morti multiple si accumulano, quindi evita combattimenti ripetuti. + +--- + +## Tutti i Tipi di Morte + +La perdita di potere si applica a tutte le morti: PvP, uccisioni da mob, danno da caduta, annegamento e qualsiasi altra causa. Non esiste un modo sicuro per morire. + +>[!TIP] Imposta una home della fazione con /f sethome cosi' i membri possono riunirsi velocemente dopo essere morti. diff --git a/src/main/resources/Server/Languages/it-IT/help/combat/protection.md b/src/main/resources/Server/Languages/it-IT/help/combat/protection.md new file mode 100644 index 00000000..b6e922a9 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Protezione del Territorio + +Il territorio reclamato fornisce diversi livelli di difesa per le costruzioni e le risorse della tua fazione. + +## Protezione Blocchi + +Solo i membri della fazione possono piazzare o distruggere blocchi nel tuo territorio. Nemici e neutrali non possono modificare nulla. + +## Protezione Contenitori + +Casse, barili e altri contenitori sono protetti. Solo i membri della tua fazione possono aprire o interagire con lo stoccaggio nei chunk reclamati. + +## Avvisi di Ingresso + +Quando un non-membro entra nel tuo territorio reclamato, i membri della fazione online ricevono una notifica con il nome e la posizione dell'intruso. + +--- + +## Accesso degli Alleati + +Gli alleati non possono costruire o distruggere blocchi nel tuo territorio per impostazione predefinita. Anche il danno tra alleati e' disabilitato, quindi i giocatori alleati non possono danneggiarsi a vicenda. + +>[!INFO] Il territorio protegge i blocchi, non i giocatori. Il PvP nel tuo territorio dipende dalla relazione dell'attaccante con la tua fazione. + +>[!TIP] Mantieni i tuoi claim collegati ed evita chunk isolati che sono piu' difficili da difendere. diff --git a/src/main/resources/Server/Languages/it-IT/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/it-IT/help/combat/spawn_protection.md new file mode 100644 index 00000000..821544a2 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Protezione Spawn + +Dopo il respawn dalla morte, ricevi una protezione temporanea per prevenire il camp allo spawn. + +## Come Funziona + +- La protezione dura 5 secondi dopo il respawn +- Non puoi subire danni durante questo periodo +- Un indicatore visivo mostra il tuo stato di protezione + +## La Protezione si Interrompe + +La protezione spawn termina anticipatamente se: + +- Attacchi un altro giocatore o entita' +- Ti muovi dalla tua posizione di spawn + +Questo previene abusi. Non puoi attaccare altri mentre sei invulnerabile. Una volta che compi qualsiasi azione, la protezione cade e si applicano le regole di combattimento normali. + +--- + +>[!NOTE] Questi sono valori predefiniti. L'amministratore del tuo server potrebbe aver configurato impostazioni diverse. + +>[!TIP] Usa il tempo di protezione per valutare la situazione prima di muoverti. diff --git a/src/main/resources/Server/Languages/it-IT/help/combat/tagging.md b/src/main/resources/Server/Languages/it-IT/help/combat/tagging.md new file mode 100644 index 00000000..a80b04bb --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Combat Tag + +Quando attacchi o vieni attaccato da un altro giocatore, ricevi il combat tag per 15 secondi. + +## Mentre Sei Taggato + +- Niente teletrasporti con /f home o /f stuck +- Niente comandi di teletrasporto del server +- Il tag si resetta con ogni nuova azione di combattimento +- Un timer mostra la durata rimanente del tag + +--- + +## Penalita' di Disconnessione + +>[!WARNING] Disconnettersi mentre sei in combat tag uccide il tuo personaggio e perdi 1.0 potere. + +I tuoi oggetti cadono dove ti sei disconnesso e i nemici possono raccoglierli. Attendi sempre che il tag scada. + +## Come Funziona il Timer + +Il timer del combat tag appare sullo schermo quando entri in combattimento. Ogni nuovo colpo lo resetta a 15 secondi. Una volta che raggiunge lo zero, tutte le restrizioni vengono rimosse. + +>[!NOTE] Questi sono valori predefiniti. L'amministratore del tuo server potrebbe aver configurato impostazioni diverse. + +>[!TIP] Disimpegnati e attendi la fine del timer se hai bisogno di teletrasportarti. diff --git a/src/main/resources/Server/Languages/it-IT/help/combat/zones.md b/src/main/resources/Server/Languages/it-IT/help/combat/zones.md new file mode 100644 index 00000000..d99d296b --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Zone Speciali + +Gli admin possono designare aree con regole speciali che sovrascrivono la protezione territoriale normale delle fazioni. + +## SafeZone + +Niente danni PvP, niente distruzione blocchi da parte dei non-admin. Ideale per aree di spawn, hub commerciali e aree di preparazione eventi. I giocatori non possono essere danneggiati qui. + +## WarZone + +Il PvP e' sempre abilitato. Nessuna protezione blocchi si applica. Aree di battaglia aperte dove tutto e' permesso. Non ricevi benefici di protezione territoriale in una WarZone. + +--- + +## Confronto Zone + +| Caratteristica | SafeZone | WarZone | Terreno Fazione | +|----------------|----------|---------|-----------------| +| PvP | Disabilitato | Sempre Attivo | Basato sulla relazione | +| Distruzione Blocchi | Disabilitata | Permessa | Solo Membri | +| Contenitori | Protetti | Aperti | Solo Membri | +| Ideale Per | Spawn/Commercio | Arene | Basi | + +>[!NOTE] Le regole delle zone sovrascrivono sempre le regole del territorio delle fazioni. Un chunk reclamato all'interno di una WarZone segue le regole della WarZone. + +>[!TIP] Controlla la tua mappa del territorio con /f map per vedere i confini delle zone. diff --git a/src/main/resources/Server/Languages/it-IT/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/it-IT/help/diplomacy/alliances.md new file mode 100644 index 00000000..57902191 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Formare Alleanze + +Le alleanze sono accordi reciproci tra due fazioni che forniscono benefici di protezione e cooperazione. + +--- + +## Come Formare un'Alleanza + +`/f ally ` + +Invia una richiesta di alleanza alla fazione bersaglio. L'alleanza ha effetto solo quando entrambe le parti accettano. Un Ufficiale o Leader dell'altra fazione deve anch'egli eseguire lo stesso comando verso la tua fazione per confermare. + +## Come Rompere un'Alleanza + +`/f neutral ` + +Entrambe le parti possono rompere unilateralmente un'alleanza riportando la relazione a neutrale. + +--- + +## Benefici dell'Alleanza + +| Beneficio | Dettagli | +|-----------|----------| +| Niente fuoco amico | I giocatori alleati non possono danneggiarsi a vicenda | +| Visibilita' mappa condivisa | Il territorio alleato appare in blu sulla mappa del territorio | +| Interazione nel territorio | Gli alleati possono usare porte, sedili e trasporti nel tuo territorio | +| Chat alleati | Passa alla modalita' chat alleati per comunicare tra fazioni | +| Protezione dal sovra-claim | Gli alleati non possono sovra-reclamare il territorio l'uno dell'altro | + +>[!NOTE] La tua fazione puo' avere fino a 10 alleanze contemporaneamente. Scegli i tuoi alleati con saggezza. + +--- + +## Galateo delle Alleanze + +>[!TIP] La comunicazione e' fondamentale. Prima di inviare una richiesta di alleanza, considera di contattare il leader dell'altra fazione per discutere i termini. Un'alleanza forte si basa sul beneficio reciproco, non solo sulla convenienza. + +- Le alleanze funzionano in entrambe le direzioni -- se benefici della protezione, i tuoi alleati si aspettano lo stesso +- Rompere un'alleanza durante un conflitto puo' danneggiare la reputazione della tua fazione +- Le fazioni alleate possono coordinare i claim territoriali per creare confini difendibili diff --git a/src/main/resources/Server/Languages/it-IT/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/it-IT/help/diplomacy/enemies.md new file mode 100644 index 00000000..6016ca44 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Fazioni Nemiche + +Dichiarare un nemico e' un'azione unilaterale che abilita immediatamente il PvP e l'aggressione territoriale contro la fazione bersaglio. Non e' richiesto alcun accordo. + +--- + +## Dichiarare un Nemico + +`/f enemy ` + +Segna istantaneamente la fazione bersaglio come tuo nemico. Ha effetto immediato -- nessuna conferma dall'altra parte e' necessaria. Richiede il grado di Ufficiale o superiore. + +## Ripristinare a Neutrale + +`/f neutral ` + +Termina lo stato di nemico e riporta la relazione a neutrale. Richiede anch'esso Ufficiale+ e ha effetto immediato. + +--- + +## Cosa Abilita lo Stato di Nemico + +| Effetto | Dettagli | +|---------|----------| +| PvP nel territorio | Il PvP completo e' abilitato nel territorio di entrambe le fazioni | +| Sovra-claim | Puoi sovra-reclamare i loro chunk se sono in deficit di potere | +| Segnalazione sulla mappa | Il territorio nemico appare in rosso sulla mappa del territorio | +| Nessuna protezione | La protezione territoriale standard non impedisce il PvP nemico | + +>[!WARNING] Dichiarare un nemico e' una decisione seria. Anche i loro membri possono combatterti nel tuo stesso territorio una volta che dichiari. + +--- + +## Considerazioni Strategiche + +- Le dichiarazioni di nemico sono unilaterali -- puoi dichiarare senza il loro consenso, ma anche loro ti vedranno come ostile +- Prima di dichiarare, controlla il potere del bersaglio con /f info. Se sono forti, potresti perdere territorio invece tu +- Indebolisci i nemici attraverso combattimenti ripetuti per drenare il loro potere, poi sovra-reclama il loro terreno +- Non c'e' limite al numero di nemici che puoi avere, ma combattere su piu' fronti e' rischioso + +>[!TIP] Usa /f neutral per de-escalare i conflitti. A volte una pace strategica e' piu' preziosa di una guerra continua. + +>[!NOTE] Se sei alleato con una fazione e la dichiari nemica, l'alleanza viene rotta prima. diff --git a/src/main/resources/Server/Languages/it-IT/help/diplomacy/relations.md b/src/main/resources/Server/Languages/it-IT/help/diplomacy/relations.md new file mode 100644 index 00000000..d0d20b2e --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Relazioni tra Fazioni + +Ogni coppia di fazioni ha una relazione diplomatica che determina come interagiscono. Ci sono tre stati: Alleato, Nemico e Neutrale. + +--- + +## Confronto Relazioni + +| Effetto | Alleato | Neutrale | Nemico | +|---------|---------|----------|--------| +| PvP nel territorio | Disabilitato | Regole standard | Abilitato | +| Protezione territoriale | Protezione reciproca | Protezione standard | Puo' sovra-reclamare se indebolito | +| Fuoco amico | Disabilitato | N/A | Abilitato ovunque | +| Colore mappa | Blu | Grigio | Rosso | +| Come impostare | Accordo reciproco | Stato predefinito | Dichiarazione unilaterale | +| Accesso chat | Canale chat alleati | Nessuno | Nessuno | + +--- + +## Visualizzare le Relazioni + +`/f relations` + +Mostra tutte le tue alleanze attuali, i nemici e le richieste di alleanza in sospeso. + +## Come Funzionano le Relazioni + +- Neutrale e' lo stato predefinito tra tutte le fazioni. Si applicano le regole standard del server. +- L'alleanza richiede l'accordo di entrambe le fazioni. Entrambe le parti possono romperla unilateralmente. +- Nemico viene dichiarato unilateralmente. Non serve accordo -- l'altra fazione viene immediatamente segnata come tuo nemico. + +>[!INFO] Le relazioni sono gestite da Ufficiali e Leader. I Membri possono visualizzare le relazioni ma non possono modificarle. + +>[!TIP] Usa /f relations regolarmente per tenere traccia del panorama diplomatico. Sapere chi sono i tuoi nemici ti aiuta a prepararti per i conflitti territoriali. diff --git a/src/main/resources/Server/Languages/it-IT/help/economy/commands.md b/src/main/resources/Server/Languages/it-IT/help/economy/commands.md new file mode 100644 index 00000000..78068a39 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Comandi Economia + +Riferimento rapido per tutti i comandi economia della fazione. + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f balance | Visualizza il saldo del tesoro | Tutti | +| /f deposit (amount) | Deposita nel tesoro | Tutti | +| /f withdraw (amount) | Preleva dal tesoro | Ufficiale+ | +| /f money transfer (faction) (amount) | Trasferisci a un'altra fazione | Ufficiale+ | +| /f money log [page] | Visualizza lo storico transazioni | Ufficiale+ | + +--- + +## Alias dei Comandi + +- /f balance puo' essere usato anche come /f bal +- /f deposit e /f withdraw accettano importi decimali + +## Requisiti di Ruolo + +I comandi di prelievo e trasferimento sono limitati a Ufficiali e Leader. Tutti gli altri comandi economia sono disponibili per qualsiasi membro della fazione. + +>[!TIP] Usa /f money log per controllare depositi, prelievi e trasferimenti recenti con data e ora. diff --git a/src/main/resources/Server/Languages/it-IT/help/economy/funds.md b/src/main/resources/Server/Languages/it-IT/help/economy/funds.md new file mode 100644 index 00000000..b7a4047c --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Gestione dei Fondi + +I membri della fazione collaborano per mantenere il tesoro finanziato attraverso depositi, prelievi e trasferimenti. + +## Depositare + +Qualsiasi membro puo' depositare fondi personali nel tesoro della fazione. + +`/f deposit ` +Deposita dal tuo saldo personale nel tesoro. + +## Prelevare + +Gli Ufficiali e il Leader possono prelevare fondi riportandoli al proprio saldo personale. + +`/f withdraw ` +Preleva dal tesoro al tuo saldo. (Ufficiale+) + +## Trasferire + +Gli Ufficiali possono trasferire fondi direttamente tra i tesori delle fazioni per accordi commerciali o diplomazia. + +`/f money transfer ` +Invia fondi al tesoro di un'altra fazione. (Ufficiale+) + +--- + +## Commissioni + +| Transazione | Commissione | +|-------------|-------------| +| Deposito | 0% | +| Prelievo | 0% | +| Trasferimento | 0% | + +>[!INFO] Le percentuali delle commissioni sono configurabili dal server e potrebbero differire dai valori predefiniti mostrati sopra. + +>[!TIP] Tutte le transazioni vengono registrate. Usa /f money log per controllare l'attivita' recente. diff --git a/src/main/resources/Server/Languages/it-IT/help/economy/treasury.md b/src/main/resources/Server/Languages/it-IT/help/economy/treasury.md new file mode 100644 index 00000000..8b47791a --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Tesoro della Fazione + +Ogni fazione ha un tesoro condiviso che funge da banca della fazione. I fondi vengono utilizzati per i costi di mantenimento, la manutenzione del territorio e le operazioni della fazione. + +## Saldo Iniziale + +Le nuove fazioni iniziano con 0 nel loro tesoro. I membri devono depositare fondi per accumulare riserve. + +## Chi Puo' Gestire + +- Qualsiasi membro puo' depositare fondi +- Ufficiali e Leader possono prelevare e trasferire +- Il Leader ha il controllo completo del tesoro + +--- + +`/f balance` +Controlla il saldo attuale del tesoro della tua fazione. Disponibile anche come /f bal. + +>[!TIP] Contribuisci regolarmente per mantenere la tua fazione finanziata. I costi di mantenimento del territorio possono svuotare un tesoro vuoto rapidamente. + +>[!INFO] Tutte le transazioni del tesoro vengono registrate e possono essere consultate dagli ufficiali. diff --git a/src/main/resources/Server/Languages/it-IT/help/economy/upkeep.md b/src/main/resources/Server/Languages/it-IT/help/economy/upkeep.md new file mode 100644 index 00000000..97c8734c --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Mantenimento del Territorio + +Le fazioni devono pagare un mantenimento continuo per conservare il territorio reclamato. Questo previene l'accumulo di terreni e mantiene la mappa dinamica. + +## Costi di Mantenimento + +| Impostazione | Predefinito | +|--------------|-------------| +| Costo per chunk | 2.0 per ciclo | +| Intervallo di pagamento | Ogni 24 ore | +| Chunk gratuiti | 3 (nessun costo) | +| Modalita' di scalatura | Tariffa fissa | + +>[!NOTE] Questi sono valori predefiniti. L'amministratore del tuo server potrebbe aver configurato impostazioni diverse. + +I tuoi primi 3 chunk sono gratuiti. Oltre a cio', ogni chunk reclamato aggiuntivo costa 2.0 per ciclo di pagamento. + +## Pagamento Automatico + +Il pagamento automatico e' abilitato per impostazione predefinita. Il sistema deduce automaticamente il mantenimento dal tuo tesoro ad ogni intervallo. Nessuna azione manuale necessaria. + +--- + +## Periodo di Grazia + +Se il tuo tesoro non puo' coprire il mantenimento, inizia un periodo di grazia di 48 ore. Un avviso viene inviato 6 ore prima che i claim inizino ad essere persi. + +>[!WARNING] Se il mantenimento resta non pagato dopo il periodo di grazia, la tua fazione perde 1 claim per ciclo fino a quando i costi non sono coperti o tutti i claim extra sono stati rimossi. + +## Esempio + +*Una fazione con 8 claim paga per 5 chunk (8 meno 3 gratuiti). A 2.0 per chunk, sono 10.0 per ciclo.* + +>[!TIP] Mantieni il tuo tesoro al di sopra del costo di mantenimento. Usa /f balance per controllare le tue riserve. diff --git a/src/main/resources/Server/Languages/it-IT/help/power_land/claiming.md b/src/main/resources/Server/Languages/it-IT/help/power_land/claiming.md new file mode 100644 index 00000000..447f293d --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Reclamare Territorio + +Reclamare un chunk lo protegge sotto il controllo della tua fazione. Solo i membri della fazione possono costruire, distruggere o accedere ai contenitori nel territorio reclamato. + +--- + +## Come Reclamare + +`/f claim` + +Posizionati nel chunk che vuoi reclamare ed esegui questo comando. Il chunk viene immediatamente protetto. Richiede il grado di Ufficiale o superiore. + +## Come Rilasciare + +`/f unclaim` + +Rilascia il chunk in cui ti trovi riportandolo a natura selvaggia. Richiede anch'esso Ufficiale+. + +--- + +## Regole di Claim + +| Regola | Predefinito | +|--------|-------------| +| Costo in potere per claim | 2.0 potere | +| Claim massimi | 100 per fazione | +| Solo adiacenti | No (puoi reclamare ovunque) | + +>[!NOTE] Questi sono valori predefiniti. L'amministratore del tuo server potrebbe aver configurato impostazioni diverse. + +>[!INFO] Ogni claim costa 2.0 potere da mantenere. Una fazione con 50 potere totale puo' mantenere fino a 25 claim in sicurezza. + +--- + +## Cosa Fornisce la Protezione + +All'interno del territorio reclamato, le seguenti regole sono applicate per impostazione predefinita: + +- Gli esterni non possono distruggere, piazzare o interagire con i blocchi +- Gli alleati possono usare porte, sedili e trasporti ma non possono distruggere o piazzare blocchi +- Membri e Ufficiali hanno pieno accesso per costruire, distruggere e usare tutto +- L'accesso ai contenitori (casse, bauli) e' limitato ai soli membri + +>[!TIP] Puoi anche reclamare direttamente dalla mappa del territorio. Apri /f map e clicca sui chunk non reclamati per reclamarli. + +>[!WARNING] Non espanderti troppo. Se la tua fazione perde potere a causa delle morti, i claim oltre il tuo budget di potere diventano vulnerabili al sovra-claim. diff --git a/src/main/resources/Server/Languages/it-IT/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/it-IT/help/power_land/losing_territory.md new file mode 100644 index 00000000..f663e9ab --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Perdere Territorio + +Quando il potere totale di una fazione scende sotto il costo dei suoi claim, diventa attaccabile. I nemici possono sovra-reclamare i chunk togliendoteli da sotto i piedi. + +--- + +## Come Funziona il Sovra-Claim + +`/f overclaim` + +Un Ufficiale o Leader di una fazione nemica si posiziona nel tuo chunk reclamato ed esegue questo comando. Se la tua fazione e' in deficit di potere, il chunk viene trasferito alla loro fazione. + +## I Calcoli + +Ogni claim costa 2.0 potere da mantenere. Se il tuo potere totale scende sotto quella soglia, i chunk in deficit sono vulnerabili. + +>[!NOTE] Questi sono valori predefiniti. L'amministratore del tuo server potrebbe aver configurato impostazioni diverse. + +>[!WARNING] Il sovra-claim e' permanente. Una volta che un nemico prende un chunk, devi reclamarlo di nuovo (o sovra-reclamarlo a tua volta se si indeboliscono). + +--- + +## Scenario di Esempio + +| Fattore | Valore | +|---------|--------| +| Membri | 5 giocatori | +| Potere per membro | 10 ciascuno (iniziale) | +| Potere totale | 50 | +| Claim | 30 chunk | +| Potere necessario (30 x 2.0) | 60 | +| Deficit | 10 potere in meno | + +In questo esempio, la fazione e' gia' attaccabile fin dall'inizio. I nemici potrebbero sovra-reclamare fino a 5 chunk (10 deficit / 2.0 per claim) prima che la fazione raggiunga l'equilibrio. + +--- + +## Come Prevenire il Sovra-Claim + +- Non espanderti troppo -- mantieni sempre il potere totale sopra il costo dei claim con un margine +- Resta attivo -- il potere si rigenera solo mentre sei online (+0.1/min) +- Evita morti inutili -- ogni morte costa 1.0 potere +- Recluta piu' membri -- piu' giocatori significa piu' potere totale +- Rilascia i chunk inutilizzati -- libera potere con /f unclaim + +>[!TIP] Controlla regolarmente il tuo stato di potere con /f power. Se il tuo potere totale e' vicino al costo dei claim, considera di rilasciare i chunk meno importanti prima di una guerra. diff --git a/src/main/resources/Server/Languages/it-IT/help/power_land/territory_map.md b/src/main/resources/Server/Languages/it-IT/help/power_land/territory_map.md new file mode 100644 index 00000000..f4314a29 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# La Mappa del Territorio + +La mappa del territorio ti offre una vista dall'alto dei chunk reclamati nella tua zona, mostrando quali fazioni controllano il terreno intorno a te. + +--- + +## Aprire la Mappa + +`/f map` + +Apre la GUI della mappa del territorio centrata sulla tua posizione attuale. + +--- + +## Legenda Colori + +| Colore | Significato | +|--------|-------------| +| [#55FF55] Il colore della tua fazione | Territorio reclamato dalla tua fazione | +| [#5555FF] Blu | Territorio di fazione alleata | +| [#FF5555] Rosso | Territorio di fazione nemica | +| [#AAAAAA] Grigio | Territorio di fazione neutrale | +| [#333333] Scuro | Natura selvaggia (terreno non reclamato) | +| [#FFAA00] Oro | Zone speciali (SafeZone, WarZone) | + +>[!INFO] Il colore della tua fazione sulla mappa corrisponde al colore che hai impostato con l'impostazione colore della fazione. Alleati e nemici usano colori fissi per una facile identificazione. + +--- + +## Clicca per Reclamare + +La mappa non serve solo per guardare -- puoi interagirci direttamente. + +- Clicca su un chunk non reclamato per reclamarlo (richiede grado Ufficiale+ e potere sufficiente) +- Clicca su un chunk reclamato per vedere quale fazione lo possiede +- Scorri o trascina per esplorare l'area intorno a te + +>[!TIP] La mappa e' il modo piu' facile per pianificare l'espansione del tuo territorio. Cerca le aree non reclamate vicino alla tua base e reclama strategicamente per creare un confine contiguo. + +>[!NOTE] La mappa mostra un'area fissa intorno alla tua posizione. Spostati in un'altra posizione e riaprila per vedere altre parti del mondo. diff --git a/src/main/resources/Server/Languages/it-IT/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/it-IT/help/power_land/understanding_power.md new file mode 100644 index 00000000..22418627 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Comprendere il Potere + +Il potere e' la risorsa fondamentale che determina quanto territorio la tua fazione puo' mantenere. Ogni giocatore ha un potere personale che contribuisce al totale della fazione. + +--- + +## Valori Predefiniti del Potere + +| Impostazione | Valore | +|--------------|--------| +| Potere massimo per giocatore | 20 | +| Potere iniziale | 10 | +| Penalita' morte | -1.0 per morte | +| Ricompensa uccisione | 0.0 | +| Tasso di rigenerazione | +0.1 al minuto (mentre online) | +| Costo potere per claim | 2.0 | +| Disconnessione mentre taggato | -1.0 aggiuntivo | + +>[!NOTE] Questi sono valori predefiniti. L'amministratore del tuo server potrebbe aver configurato impostazioni diverse. + +## Come Funziona + +Il potere totale della tua fazione e' la somma del potere personale di ogni membro. Il potere richiesto e' il numero di claim moltiplicato per 2.0. Finche' il potere totale resta sopra il potere richiesto, il tuo territorio e' al sicuro. + +>[!INFO] Il potere si rigenera passivamente a 0.1 al minuto mentre sei online. A quel ritmo, recuperare 1.0 potere richiede circa 10 minuti. + +--- + +## Controllare il Tuo Potere + +`/f power` + +Mostra il tuo potere personale, il potere totale della fazione e quanto e' necessario per mantenere i claim attuali. + +## La Zona di Pericolo + +Se il potere totale scende sotto la quantita' richiesta per i tuoi claim, la tua fazione diventa vulnerabile. I nemici possono sovra-reclamare i tuoi chunk. + +>[!WARNING] Morti multiple in un breve periodo possono accumulare conseguenze rapidamente. Se hai 5 membri ciascuno con 10 potere (50 totale) e 20 claim (40 necessari), appena 5 morti nel tuo team ti portano a 45 -- ancora al sicuro. Ma 11 morti ti portano a 39, sotto la soglia di 40. + +>[!TIP] Mantieni un margine di potere. Non reclamare ogni chunk che puoi permetterti -- lascia spazio per qualche morte senza diventare attaccabile. diff --git a/src/main/resources/Server/Languages/it-IT/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/it-IT/help/quick_ref/all_commands.md new file mode 100644 index 00000000..6dedf307 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Tutti i Comandi + +## Base + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f | Apri menu fazione | Tutti | +| /f help | Apri centro assistenza | Tutti | +| /f create (name) | Crea una fazione | Tutti | +| /f disband | Elimina la tua fazione | Leader | +| /f leave | Lascia la tua fazione | Tutti | + +## Membri + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f invite (player) | Invita un giocatore | Ufficiale+ | +| /f accept [faction] | Accetta un invito | Tutti | +| /f request (faction) | Richiedi di unirti | Tutti | +| /f kick (player) | Rimuovi un membro | Ufficiale+ | +| /f promote (player) | Promuovi a Ufficiale | Leader | +| /f demote (player) | Degrada a Membro | Leader | +| /f transfer (player) | Trasferisci leadership | Leader | + +## Territorio + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f claim | Reclama il chunk corrente | Ufficiale+ | +| /f unclaim | Rilascia il chunk corrente | Ufficiale+ | +| /f overclaim | Prendi un chunk indebolito | Ufficiale+ | +| /f map | Apri mappa del territorio | Tutti | + +## Teletrasporto + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f home | Teletrasportati alla home della fazione | Tutti | +| /f sethome | Imposta la home della fazione | Ufficiale+ | +| /f delhome | Elimina la home della fazione | Ufficiale+ | +| /f stuck | Esci dal territorio nemico | Tutti | + +## Informazioni + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f info [faction] | Visualizza dettagli fazione | Tutti | +| /f list | Sfoglia tutte le fazioni | Tutti | +| /f members | Visualizza roster | Tutti | +| /f who [player] | Visualizza info giocatore | Tutti | +| /f power [player] | Controlla livelli di potere | Tutti | +| /f invites | Gestisci inviti/richieste | Tutti | +| /f relations | Visualizza relazioni diplomatiche | Tutti | + +## Diplomazia + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f ally (faction) | Richiedi alleanza | Ufficiale+ | +| /f enemy (faction) | Dichiara nemico | Ufficiale+ | +| /f neutral (faction) | Ripristina a neutrale | Ufficiale+ | + +## Impostazioni + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f settings | Apri GUI impostazioni | Ufficiale+ | +| /f rename (name) | Rinomina fazione | Leader | +| /f desc [text] | Imposta descrizione | Ufficiale+ | +| /f color (code) | Imposta colore fazione | Ufficiale+ | +| /f open | Permetti a chiunque di unirsi | Leader | +| /f close | Richiedi invito | Leader | + +## Economia + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f balance | Visualizza tesoro | Tutti | +| /f deposit (amount) | Deposita fondi | Tutti | +| /f withdraw (amount) | Preleva fondi | Ufficiale+ | +| /f money transfer (faction) (amt) | Trasferisci fondi | Ufficiale+ | +| /f money log [page] | Storico transazioni | Ufficiale+ | + +## Chat + +| Comando | Descrizione | Ruolo | +|---------|-------------|-------| +| /f c | Cambia modalita' chat | Tutti | +| /f c f | Imposta chat fazione | Tutti | +| /f c a | Imposta chat alleati | Tutti | +| /f c off | Imposta chat pubblica | Tutti | diff --git a/src/main/resources/Server/Languages/it-IT/help/welcome/getting_started.md b/src/main/resources/Server/Languages/it-IT/help/welcome/getting_started.md new file mode 100644 index 00000000..3d7f5cff --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Per Iniziare + +Benvenuto su HyperFactions! Ecco come iniziare in pochi semplici passaggi. + +--- + +## Passaggio 1: Apri il Menu Fazione + +Digita /f per aprire la GUI principale della fazione. Questo e' il tuo centro per tutto -- sfogliare le fazioni, crearne una tua e gestire gli inviti. + +## Passaggio 2: Scegli il Tuo Percorso + +| Opzione | Come | +|---------|------| +| Sfoglia le fazioni aperte | Clicca Sfoglia nel menu e premi Unisciti su qualsiasi fazione aperta. | +| Accetta un invito | Controlla la scheda Inviti. Se qualcuno ti ha invitato, clicca Accetta. | +| Creane una tua | Clicca Crea Fazione, scegli un nome e diventerai il Leader. | + +## Passaggio 3: Esplora la Tua Fazione + +Una volta entrato in una fazione, vedrai la Dashboard della Fazione con il roster, la mappa del territorio, le relazioni e le impostazioni. + +>[!TIP] Se sei completamente nuovo, prova prima a unirti a una fazione esistente. Imparerai piu' velocemente con membri esperti intorno a te. + +--- + +## Comandi Essenziali Iniziali + +- /f -- Apre la GUI della fazione +- /f home -- Teletrasportati alla base della tua fazione +- /f c -- Cambia modalita' chat tra Normale, Fazione e Alleato +- /f map -- Visualizza la mappa del territorio intorno a te + +>[!TIP] Puoi anche digitare /f help in chat per un riferimento rapido ai comandi in qualsiasi momento. diff --git a/src/main/resources/Server/Languages/it-IT/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/it-IT/help/welcome/quick_tips.md new file mode 100644 index 00000000..1cf47534 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Consigli Rapidi + +Consigli utili organizzati per categoria per aiutarti a prosperare. + +--- + +## Territorio + +- Reclama il terreno intorno alla tua base il prima possibile con `/f claim` -- le costruzioni non reclamate non hanno **nessuna protezione** +- Ogni claim costa **2.0 potere** da mantenere, quindi non espanderti oltre quello che i tuoi membri possono sostenere +- Usa `/f map` per esplorare i claim vicini e trovare punti sicuri dove costruire +- Rilascia i chunk che non ti servono piu' con `/f unclaim` per liberare potere + +## Combattimento + +- Morire costa **1.0 potere** -- evita combattimenti inutili quando la tua fazione e' vicina al limite di claim +- Hai **5 secondi di protezione spawn** dopo il respawn +- Il combat tag dura **15 secondi** -- disconnettersi mentre sei taggato costa potere extra +- Il fuoco amico e' **disabilitato** tra membri della fazione e alleati per impostazione predefinita + +>[!WARNING] Disconnettersi mentre sei in combat tag causa una perdita di potere aggiuntiva (1.0 per disconnessione). Resta e combatti o scappa prima. + +## Sociale + +- Usa `/f c` per scorrere le modalita' chat cosi' la conversazione della fazione resta privata +- Invita giocatori fidati con `/f invite ` -- gli inviti scadono dopo **5 minuti** +- Forma alleanze con `/f ally ` per protezione reciproca e visibilita' condivisa sulla mappa +- Controlla `/f relations` per vedere il tuo stato diplomatico completo + +## Economia + +>[!TIP] Se il server ha l'economia abilitata, la tua fazione puo' accumulare un tesoro. I membri possono depositare, ma solo gli Ufficiali e i Leader possono prelevare o trasferire fondi. + +- Deposita fondi tramite la GUI del tesoro per rafforzare la tua fazione +- Una fazione piu' ricca puo' permettersi piu' claim e riprendersi piu' velocemente dai contrattempi + +## Generale + +- Digita `/f` in qualsiasi momento per aprire la dashboard della tua fazione -- tutto e' accessibile da li' +- Promuovi i membri attivi a Ufficiale cosi' possono aiutare a reclamare e gestire il territorio +- Mantieni la tua fazione attiva -- il potere si rigenera solo mentre i giocatori sono **online** diff --git a/src/main/resources/Server/Languages/it-IT/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/it-IT/help/welcome/what_are_factions.md new file mode 100644 index 00000000..b4e10ac3 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Cosa Sono le Fazioni? + +Le fazioni sono squadre gestite dai giocatori che reclamano territorio, costruiscono basi e competono per il dominio. Quando ti unisci o crei una fazione, ottieni accesso a terreni protetti, una home condivisa, chat privata e strumenti diplomatici. + +>[!TIP] Le Fazioni sono tutte basate sul lavoro di squadra. Piu' membri attivi hai, piu' forte diventa la tua fazione. + +--- + +## Meccaniche Principali + +| Meccanica | Cosa Fa | +|-----------|---------| +| Potere | Ogni giocatore genera potere nel tempo (max 20). Il potere totale della tua fazione determina quanto territorio puoi mantenere. | +| Claim | I chunk reclamati sono protetti -- solo i membri possono costruire, distruggere o aprire contenitori al loro interno. Ogni claim costa 2.0 potere da mantenere. | +| Relazioni | Le fazioni possono formare alleanze per protezione reciproca o dichiarare nemici per abilitare il PvP e l'aggressione territoriale. | +| Ruoli | Tre gradi -- Leader, Ufficiale, Membro -- ognuno con capacita' diverse. | + +--- + +## Come Funziona la Forza + +La forza della tua fazione viene dai suoi membri. Ogni giocatore inizia con 10 potere e rigenera fino a 20 mentre e' online. Morire costa potere. Se il potere totale della fazione scende sotto il costo dei tuoi claim, i nemici possono sovra-reclamare il tuo territorio. + +>[!WARNING] Una singola morte costa 1.0 potere. Morti multiple in breve tempo possono lasciare la tua fazione vulnerabile al sovra-claim. + +--- + +## Diplomazia in Sintesi + +- **Alleati** -- Accordi reciproci che prevengono il fuoco amico e proteggono il territorio l'uno dell'altro +- **Nemici** -- Dichiarazioni unilaterali che abilitano il PvP nel territorio di ciascuno e permettono il sovra-claim +- **Neutrali** -- Lo stato predefinito tra tutte le fazioni con regole standard + +>[!INFO] Puoi gestire tutto questo tramite la GUI in-game digitando `/f` o tramite i comandi in chat. diff --git a/src/main/resources/Server/Languages/it-IT/help/your_faction/creating.md b/src/main/resources/Server/Languages/it-IT/help/your_faction/creating.md new file mode 100644 index 00000000..74c55e85 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Creare una Fazione + +Creare la tua fazione ti rende il Leader con pieno controllo su impostazioni, membri e territorio. + +--- + +## Come Creare + +`/f create ` + +Questo crea la tua fazione e apre immediatamente la Dashboard della Fazione dove puoi iniziare a invitare membri, reclamare terreno e configurare le impostazioni. + +## Regole del Nome + +| Regola | Requisito | +|--------|-----------| +| Lunghezza | Tra 3 e 24 caratteri | +| Caratteri | Solo lettere, numeri e spazi | +| Unicita' | Due fazioni non possono condividere lo stesso nome | + +>[!WARNING] Scegli il nome con attenzione. Rinominare in seguito richiede i permessi da Leader e potrebbe avere un cooldown. + +--- + +## Cosa Succede alla Creazione + +- Diventi il Leader (grado piu' alto) +- La tua fazione inizia con 0 claim e il tuo potere personale (10 per impostazione predefinita) +- La dashboard della fazione si apre automaticamente +- Puoi immediatamente invitare giocatori, reclamare territorio e impostare una home della fazione + +>[!INFO] Se il server ha l'integrazione economia abilitata, creare una fazione potrebbe costare denaro. Il costo di creazione e' impostato dall'amministratore del server. + +>[!TIP] Dopo la creazione, le tue prime priorita' dovrebbero essere: invitare amici, trovare una posizione per la base e reclamarla. diff --git a/src/main/resources/Server/Languages/it-IT/help/your_faction/joining.md b/src/main/resources/Server/Languages/it-IT/help/your_faction/joining.md new file mode 100644 index 00000000..8cb9c1ce --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Unirsi a una Fazione + +Ci sono tre modi per unirsi a una fazione esistente, a seconda di come e' configurata la fazione. + +--- + +## Confronto dei Metodi + +| Metodo | Come | Richiede | +|--------|------|----------| +| Sfoglia e Unisciti | Apri /f, clicca Sfoglia, clicca Unisciti | La fazione e' impostata come aperta | +| Accetta Invito | Controlla la scheda Inviti nel menu /f | Un invito attivo | +| Richiedi di Unirti | Usa /f request, attendi l'approvazione | Un Ufficiale o Leader approva | + +--- + +## Dettagli Inviti + +- Gli inviti vengono inviati da Ufficiali o Leader +- Gli inviti scadono dopo 5 minuti -- accetta prontamente +- Visualizza i tuoi inviti in sospeso nella scheda Inviti del menu fazione +- Accetta tramite la GUI o /f accept + +## Richieste di Adesione + +- Usa /f request per richiedere l'adesione a una fazione chiusa +- Le richieste scadono dopo 24 ore se non vengono gestite +- Ufficiali e Leader possono approvare o rifiutare le richieste dalla dashboard della fazione + +>[!TIP] Non sai quale fazione scegliere? Usa la scheda Sfoglia in /f per vedere le descrizioni delle fazioni, il numero di membri e se sono aperte o solo su invito. + +>[!NOTE] Ogni fazione puo' contenere fino a 50 membri per impostazione predefinita. Se una fazione e' piena, dovrai attendere che si liberi un posto. diff --git a/src/main/resources/Server/Languages/it-IT/help/your_faction/managing.md b/src/main/resources/Server/Languages/it-IT/help/your_faction/managing.md new file mode 100644 index 00000000..38f56503 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Gestione dei Membri + +Ufficiali e Leader condividono la responsabilita' di gestire il roster della fazione. Ecco i comandi principali e chi puo' usarli. + +--- + +## Comandi + +| Comando | Cosa Fa | Ruolo Richiesto | +|---------|---------|-----------------| +| `/f invite ` | Invia un invito di adesione (scade in 5 min) | Ufficiale+ | +| `/f kick ` | Rimuove un membro dalla fazione | Ufficiale+ (vedi nota) | +| `/f promote ` | Promuove un Membro a Ufficiale | Solo Leader | +| `/f demote ` | Degrada un Ufficiale a Membro | Solo Leader | +| `/f transfer ` | Trasferisce la proprieta' della fazione | Solo Leader | + +>[!NOTE] Gli Ufficiali possono espellere solo i Membri. Per rimuovere un altro Ufficiale, il Leader deve prima degradarlo o espellerlo direttamente. + +--- + +## Inviti + +- Gli inviti scadono dopo 5 minuti se non vengono accettati +- Il giocatore invitato li vede nella scheda Inviti quando apre /f +- Non c'e' limite al numero di inviti che puoi inviare contemporaneamente +- La tua fazione puo' contenere fino a 50 membri in totale + +## Promozioni e Degradamenti + +- Solo il Leader puo' promuovere o degradare +- /f promote eleva un Membro a Ufficiale +- /f demote riporta un Ufficiale a Membro + +## Trasferimento della Leadership + +>[!WARNING] Il trasferimento della leadership e' irreversibile. Verrai degradato a Ufficiale e il giocatore designato diventera' il nuovo Leader. Assicurati di fidarti completamente di lui. + +`/f transfer ` + +Il destinatario deve essere un membro attuale della tua fazione. diff --git a/src/main/resources/Server/Languages/it-IT/help/your_faction/roles.md b/src/main/resources/Server/Languages/it-IT/help/your_faction/roles.md new file mode 100644 index 00000000..40cfee45 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Ruoli e Gradi + +Ogni fazione ha tre ruoli in una gerarchia rigida. I ruoli superiori ereditano tutte le capacita' dei ruoli sottostanti. + +--- + +## Dettaglio Permessi + +| Azione | Leader | Ufficiale | Membro | +|--------|--------|-----------|--------| +| Costruire nel territorio | Si' | Si' | Si' | +| Usare la home della fazione | Si' | Si' | Si' | +| Chat fazione e alleati | Si' | Si' | Si' | +| Invitare giocatori | Si' | Si' | No | +| Espellere membri | Si' | Si' (solo Membri) | No | +| Reclamare / rilasciare terreno | Si' | Si' | No | +| Sovra-reclamare territorio nemico | Si' | Si' | No | +| Impostare la home della fazione | Si' | Si' | No | +| Eliminare la home della fazione | Si' | Si' | No | +| Gestire relazioni (alleato/nemico) | Si' | Si' | No | +| Visualizzare i log della fazione | Si' | Si' | No | +| Promuovere a Ufficiale | Si' | No | No | +| Degradare da Ufficiale | Si' | No | No | +| Rinominare la fazione | Si' | No | No | +| Impostare descrizione / tag / colore | Si' | No | No | +| Aprire / chiudere la fazione | Si' | No | No | +| Accedere alle impostazioni della fazione | Si' | No | No | +| Trasferire la leadership | Si' | No | No | +| Sciogliere la fazione | Si' | No | No | + +>[!NOTE] Gli Ufficiali possono espellere i Membri ma non possono espellere altri Ufficiali. Solo il Leader puo' rimuovere gli Ufficiali. + +--- + +## Dettagli dei Ruoli + +- Leader -- Uno per fazione. Ha il controllo completo su tutte le impostazioni, i membri e il territorio. Puo' trasferire la proprieta' a un altro membro. +- Ufficiale -- Membri fidati che aiutano a gestire la fazione. Possono invitare, espellere membri, reclamare terreno e gestire la diplomazia. +- Membro -- Il ruolo predefinito quando ci si unisce. Puo' costruire nel territorio, usare la home della fazione e partecipare alla chat della fazione. + +>[!TIP] Promuovi i tuoi membri piu' attivi e fidati a Ufficiale cosi' possono aiutare a gestire il territorio e reclutare nuovi giocatori. diff --git a/src/main/resources/Server/Languages/it-IT/hyperfactions.lang b/src/main/resources/Server/Languages/it-IT/hyperfactions.lang new file mode 100644 index 00000000..9b7df507 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Traduzioni Italiane +# Formato: chiave = valore (o chiave = "valore tra virgolette") +# Nota: Le chiavi sono automaticamente prefissate con "hyperfactions." dal modulo I18n di Hytale +# Segnaposto: {0}, {1}, ecc. + +# ========== Comune ========== +common.no_permission = Non hai il permesso per farlo. +common.not_in_faction = Non fai parte di una fazione. +common.already_in_faction = Fai già parte di una fazione. +common.player_not_found = Giocatore non trovato. +common.faction_not_found = Fazione non trovata. +common.player_not_online = Quel giocatore non è online. +common.must_be_leader = Solo il capo della fazione può farlo. +common.must_be_officer = Devi essere un Ufficiale o un Capo per farlo. +common.combat_tagged = Non puoi farlo mentre sei in combattimento. +common.cancel = Annulla +common.confirm = Conferma +common.save = Salva +common.close = Chiudi +common.clear = Cancella +common.back = Indietro +common.leave = Abbandona +common.transfer = Trasferisci +common.disband = Sciogli +common.world_fallback = mondo +common.yes = Sì +common.no = No +common.loading = Caricamento... +common.online = Online +common.offline = Offline +common.enabled = Attivato +common.disabled = Disattivato +common.none = Nessuno +common.page = Pagina {0} di {1} +common.unknown = Sconosciuto +common.error_generic = Qualcosa è andato storto. Riprova. +common.gui_fallback = Impossibile accedere alla GUI. Usa /f help per i comandi. +common.admin_prefix = [Admin] +common.location_error = Impossibile determinare la tua posizione. +common.world_error = Impossibile determinare il tuo mondo. +common.invalid_id = ID fazione non valido. +common.na = N/D + +# ========== Comandi - Creazione ========== +cmd.create.no_permission = Non hai il permesso di creare fazioni. +cmd.create.usage = Uso: /f create +cmd.create.success = Fazione '{0}' creata! +cmd.create.already_in_named = Fai già parte di {0}. +cmd.create.use_leave_first = Usa /f leave prima se vuoi creare una nuova fazione. +cmd.create.name_taken = Quel nome di fazione è già in uso. +cmd.create.name_too_short = Il nome della fazione è troppo corto. +cmd.create.name_too_long = Il nome della fazione è troppo lungo. +cmd.create.failed = Impossibile creare la fazione. + +# ========== Comandi - Scioglimento ========== +cmd.disband.no_permission = Non hai il permesso di sciogliere fazioni. +cmd.disband.not_leader = Solo il capo della fazione può scioglierla. +cmd.disband.confirm_prompt = Sei sicuro di voler sciogliere la tua fazione? +cmd.disband.confirm_instruction = Digita /f disband --text di nuovo entro {0} secondi per confermare. +cmd.disband.success = La tua fazione è stata sciolta. +cmd.disband.failed = Impossibile sciogliere la fazione. +cmd.disband.cancelled = Conferma precedente annullata. Digita di nuovo per confermare lo scioglimento. + +# ========== Comandi - Rinomina ========== +cmd.rename.no_permission = Non hai il permesso. +cmd.rename.not_leader = Solo il capo può rinominare la fazione. +cmd.rename.usage = Uso: /f rename +cmd.rename.too_short = Il nome è troppo corto (min {0} caratteri). +cmd.rename.too_long = Il nome è troppo lungo (max {0} caratteri). +cmd.rename.name_taken = Quel nome è già in uso. +cmd.rename.success = Fazione rinominata in {0}! +cmd.rename.broadcast = {0} ha rinominato la fazione in {1} + +# ========== Comandi - Descrizione ========== +cmd.desc.no_permission = Non hai il permesso. +cmd.desc.not_officer = Devi essere un ufficiale per impostare la descrizione. +cmd.desc.set = Descrizione della fazione impostata! +cmd.desc.cleared = Descrizione della fazione cancellata. + +# ========== Comandi - Apri / Chiudi ========== +cmd.open.no_permission = Non hai il permesso. +cmd.open.not_leader = Solo il capo può modificare questa impostazione. +cmd.open.already_open = La tua fazione è già aperta. +cmd.open.success = La tua fazione è ora aperta! Chiunque può unirsi con /f join. +cmd.open.broadcast = {0} ha aperto la fazione all'iscrizione pubblica. +cmd.close.no_permission = Non hai il permesso. +cmd.close.not_leader = Solo il capo può modificare questa impostazione. +cmd.close.already_closed = La tua fazione è già chiusa. +cmd.close.success = La tua fazione è ora solo su invito. +cmd.close.broadcast = {0} ha chiuso la fazione, ora è solo su invito. + +# ========== Comandi - Colore ========== +cmd.color.no_permission = Non hai il permesso. +cmd.color.not_officer = Devi essere un ufficiale per cambiare il colore. +cmd.color.colors_disabled = I colori delle fazioni sono disattivati. +cmd.color.usage = Uso: /f color +cmd.color.usage_hint = Codici validi: 0-9, a-f oppure #RRGGBB hex +cmd.color.invalid = Colore non valido. Usa 0-9, a-f, oppure #RRGGBB. +cmd.color.success = Colore della fazione aggiornato! + +# ========== Comandi - Territorio ========== +cmd.claim.no_permission = Non hai il permesso di rivendicare territorio. +cmd.claim.already_yours = La tua fazione possiede già questo chunk. +cmd.claim.cannot_claim_ally = Non puoi rivendicare il territorio di un alleato. +cmd.claim.already_claimed_hint = Questo chunk è rivendicato. Usa /f overclaim se sono saccheggiabili. +cmd.claim.success = Chunk rivendicato a {0}, {1}! +cmd.claim.not_officer = Devi essere un ufficiale per rivendicare territori. +cmd.claim.already_claimed = Questo chunk è già rivendicato. +cmd.claim.max_claims = La tua fazione ha raggiunto il massimo di territori. Ottieni più potere! +cmd.claim.not_adjacent = Devi rivendicare un chunk adiacente al territorio esistente. +cmd.claim.world_not_allowed = La rivendicazione non è permessa in questo mondo. +cmd.claim.orbisguard = Quest'area è protetta da OrbisGuard. +cmd.claim.zone_protected = Questo chunk si trova in una SafeZone o WarZone. +cmd.claim.insufficient_power = La tua fazione non ha abbastanza potere per rivendicare altro territorio. +cmd.claim.failed = Impossibile rivendicare il chunk. + +# ========== Comandi - Invito ========== +cmd.invite.no_permission = Non hai il permesso di invitare giocatori. +cmd.invite.not_officer = Devi essere un ufficiale per invitare giocatori. +cmd.invite.usage = Uso: /f invite +cmd.invite.player_not_found = Giocatore '{0}' non trovato o offline. +cmd.invite.target_in_faction = Quel giocatore fa già parte di una fazione. +cmd.invite.sent = {0} è stato invitato nella tua fazione. +cmd.invite.received = Sei stato invitato a unirti a {0}! +cmd.invite.accept_hint = Digita /f accept {0} per unirti. + +# ========== Comandi - Accetta / Unisciti ========== +cmd.join.no_permission = Non hai il permesso di unirti alle fazioni. +cmd.join.already_in_named = Fai già parte di {0}. +cmd.join.use_leave_hint = Usa /f leave prima se vuoi unirti a un'altra fazione. +cmd.join.no_invites = Non hai inviti in sospeso. +cmd.join.faction_not_found = Fazione '{0}' non trovata. +cmd.join.not_invited = Non hai un invito da quella fazione. +cmd.join.faction_gone = Quella fazione non esiste più. +cmd.join.success = Ti sei unito a {0}! +cmd.join.broadcast = {0} si è unito alla fazione! +cmd.join.faction_full = Quella fazione è piena. +cmd.join.failed = Impossibile unirsi alla fazione. + +# ========== Comandi - Espulsione ========== +cmd.kick.no_permission = Non hai il permesso di espellere membri. +cmd.kick.usage = Uso: /f kick +cmd.kick.not_in_your_faction = Il giocatore '{0}' non è nella tua fazione. +cmd.kick.success = {0} è stato espulso dalla fazione. +cmd.kick.broadcast = {0} è stato espulso dalla fazione. +cmd.kick.kicked = Sei stato espulso dalla fazione. +cmd.kick.cannot_kick_higher = Non hai il permesso di espellere quel giocatore. +cmd.kick.cannot_kick_leader = Non puoi espellere il capo della fazione. +cmd.kick.failed = Impossibile espellere il giocatore. + +# ========== Comandi - Abbandono ========== +cmd.leave.no_permission = Non hai il permesso di abbandonare le fazioni. +cmd.leave.confirm_prompt = Sei sicuro di voler abbandonare la tua fazione? +cmd.leave.confirm_instruction = Digita /f leave --text di nuovo entro {0} secondi per confermare. +cmd.leave.success = Hai abbandonato la tua fazione. +cmd.leave.broadcast = {0} ha abbandonato la fazione. +cmd.leave.failed = Impossibile abbandonare la fazione. +cmd.leave.cancelled = Conferma precedente annullata. Digita di nuovo per confermare l'abbandono. + +# ========== Comandi - Promozione / Retrocessione / Trasferimento ========== +cmd.rank.promote_no_permission = Non hai il permesso di promuovere membri. +cmd.rank.promote_usage = Uso: /f promote +cmd.rank.promoted = {0} promosso a {1}! +cmd.rank.promote_broadcast = {0} è stato promosso a {1}! +cmd.rank.already_highest = Impossibile promuovere ulteriormente. Usa /f transfer per cambiare capo. +cmd.rank.promote_failed = Impossibile promuovere il giocatore. +cmd.rank.demote_no_permission = Non hai il permesso di retrocedere membri. +cmd.rank.demote_usage = Uso: /f demote +cmd.rank.demoted = {0} retrocesso a {1}. +cmd.rank.demote_broadcast = {0} è stato retrocesso a {1}. +cmd.rank.already_lowest = Quel giocatore è già un Membro. +cmd.rank.demote_failed = Impossibile retrocedere il giocatore. +cmd.rank.transfer_no_permission = Non hai il permesso di trasferire la leadership. +cmd.rank.transfer_usage = Uso: /f transfer +cmd.rank.player_not_in_faction = Giocatore non trovato nella tua fazione. +cmd.rank.transfer_confirm = Sei sicuro di voler trasferire la leadership a {0}? +cmd.rank.transfer_confirm_instruction = Digita /f transfer {0} --text di nuovo entro {1} secondi per confermare. +cmd.rank.transferred = Leadership trasferita a {0}! +cmd.rank.transfer_broadcast = {0} è ora il capo della fazione! +cmd.rank.transfer_failed = Impossibile trasferire la leadership. +cmd.rank.transfer_cancelled = Conferma precedente annullata. Digita di nuovo per confermare il trasferimento. + +# ========== Comandi - Rinuncia Territorio ========== +cmd.unclaim.no_permission = Non hai il permesso di rinunciare al territorio. +cmd.unclaim.success = Chunk rilasciato a {0}, {1}. +cmd.unclaim.not_officer = Devi essere un ufficiale per rinunciare ai territori. +cmd.unclaim.chunk_not_claimed = Questo chunk non è rivendicato. +cmd.unclaim.not_your_claim = La tua fazione non possiede questo chunk. +cmd.unclaim.cannot_unclaim_home = Impossibile rilasciare il chunk con la base della fazione. +cmd.unclaim.would_disconnect = Impossibile rilasciare — disconnetterebbe il tuo territorio. +cmd.unclaim.failed = Impossibile rilasciare il chunk. + +# ========== Comandi - Conquista ========== +cmd.overclaim.no_permission = Non hai il permesso di conquistare territori. +cmd.overclaim.success = Territorio nemico conquistato! +cmd.overclaim.not_officer = Devi essere un ufficiale per conquistare territori. +cmd.overclaim.not_claimed = Questo chunk non è rivendicato. Usa /f claim. +cmd.overclaim.own_chunk = La tua fazione possiede già questo chunk. +cmd.overclaim.ally = Non puoi conquistare il territorio di un alleato. +cmd.overclaim.target_has_power = Questa fazione ha ancora abbastanza potere. +cmd.overclaim.failed = Impossibile conquistare il territorio. + +# ========== Comandi - Bloccato ========== +cmd.stuck.no_permission = Non hai il permesso di usare /f stuck. +cmd.stuck.not_stuck = Non sei bloccato - questa è zona selvaggia. +cmd.stuck.combat_tagged = Non puoi usare /f stuck durante il combattimento! +cmd.stuck.no_safe = Impossibile trovare una posizione sicura. +cmd.stuck.teleporting = Teletrasporto verso un luogo sicuro tra {0} secondi. Non muoverti! + +# ========== Comandi - Base ========== +cmd.home.no_permission = Non hai il permesso di teletrasportarti alla base della fazione. +cmd.home.no_home = La tua fazione non ha una base impostata. +cmd.home.combat_tagged = Non puoi teletrasportarti durante il combattimento! +cmd.home.teleported = Teletrasportato alla base della fazione! + +# ========== Comandi - Imposta Base ========== +cmd.sethome.no_permission = Non hai il permesso di impostare la base della fazione. +cmd.sethome.world_not_allowed = Impossibile impostare la base in questo mondo. +cmd.sethome.not_in_territory = Puoi impostare la base solo nel territorio della tua fazione. +cmd.sethome.set = Base della fazione impostata! +cmd.sethome.broadcast = {0} ha impostato la base della fazione. +cmd.sethome.not_officer = Devi essere un ufficiale per impostare la base. +cmd.sethome.failed = Impossibile impostare la base. + +# ========== Comandi - Elimina Base ========== +cmd.delhome.no_permission = Non hai il permesso di eliminare la base della fazione. +cmd.delhome.no_home = La tua fazione non ha una base impostata. +cmd.delhome.deleted = Base della fazione eliminata! +cmd.delhome.broadcast = {0} ha eliminato la base della fazione. +cmd.delhome.not_officer = Devi essere un ufficiale per eliminare la base. +cmd.delhome.failed = Impossibile eliminare la base. + +# ========== Comandi - Relazioni (Alleato/Nemico/Neutrale/Relazioni) ========== +cmd.relation.ally_no_permission = Non hai il permesso di gestire le alleanze. +cmd.relation.ally_usage = Uso: /f ally +cmd.relation.ally_sent = Richiesta di alleanza inviata a {0}! +cmd.relation.ally_formed = Ora sei alleato con {0}! +cmd.relation.already_ally = Sei già alleato con quella fazione. +cmd.relation.ally_failed = Impossibile inviare la richiesta di alleanza. +cmd.relation.enemy_no_permission = Non hai il permesso di dichiarare nemici. +cmd.relation.enemy_usage = Uso: /f enemy +cmd.relation.enemy_declared = {0} è ora tuo nemico! +cmd.relation.already_enemy = Sei già nemico di quella fazione. +cmd.relation.max_enemies = Hai raggiunto il numero massimo di nemici. +cmd.relation.enemy_failed = Impossibile impostare il nemico. +cmd.relation.neutral_no_permission = Non hai il permesso di impostare relazioni neutrali. +cmd.relation.neutral_usage = Uso: /f neutral +cmd.relation.neutral_set = La tua fazione è ora neutrale con {0}. +cmd.relation.already_neutral = Sei già neutrale con quella fazione. +cmd.relation.neutral_failed = Impossibile impostare la neutralità. +cmd.relation.cannot_self = Non puoi allearti con te stesso. +cmd.relation.max_allies = Hai raggiunto il numero massimo di alleati. +cmd.relation.view_no_permission = Non hai il permesso di visualizzare le relazioni. +cmd.relation.header = === Relazioni della Fazione === +cmd.relation.allies_count = Alleati ({0}): +cmd.relation.enemies_count = Nemici ({0}): +cmd.relation.list_entry = - {0} + +# ========== Comandi - Chat ========== +cmd.chat.usage = Uso: /f c [f|a|off] +cmd.chat.no_permission = Non hai il permesso per quella modalità di chat. +cmd.chat.mode_set = Modalità chat impostata su {0} + +# ========== Comandi - Inviti ========== +cmd.invites.not_officer = Devi essere un ufficiale per gestire gli inviti. +cmd.invites.header = === Inviti della Fazione === +cmd.invites.no_pending = Nessun invito o richiesta in sospeso. +cmd.invites.outgoing = Inviti in uscita: +cmd.invites.outgoing_entry = {0} (invitato da {1}) +cmd.invites.requests = Richieste di adesione: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === I Tuoi Inviti === +cmd.invites.no_invites = Non hai inviti in sospeso. +cmd.invites.invite_entry = {0} - Usa /f accept {1} + +# ========== Comandi - Richiesta ========== +cmd.request.no_permission = Non hai il permesso di richiedere l'adesione a una fazione. +cmd.request.already_in_named = Fai già parte di {0}. +cmd.request.use_leave_hint = Usa /f leave prima se vuoi unirti a un'altra fazione. +cmd.request.usage = Uso: /f request [messaggio] +cmd.request.faction_open = Quella fazione è aperta! Usa /f accept {0} per unirti direttamente. +cmd.request.already_requested = Hai già una richiesta in sospeso per quella fazione. +cmd.request.has_invite = Sei stato invitato da quella fazione! Usa /f accept {0} per unirti. +cmd.request.sent = Richiesta di adesione inviata a {0}! +cmd.request.your_message = Il tuo messaggio: "{0}" +cmd.request.officer_review = Un ufficiale esaminerà la tua richiesta. +cmd.request.officer_notify = {0} ha richiesto di unirsi alla tua fazione! +cmd.request.officer_review_hint = Usa /f gui > Inviti per esaminare. + +# ========== Comandi - Informazioni ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = Non hai il permesso di visualizzare le informazioni della fazione. +cmd.info.faction_not_found = Fazione '{0}' non trovata. +cmd.info.not_in_faction_hint = Non fai parte di una fazione. Usa /f info +cmd.info.leader = Capo: {0} +cmd.info.members = Membri: {0}/{1} +cmd.info.power = Potere: {0} +cmd.info.claims = Territori: {0} +cmd.info.raidable = SACCHEGGIABILE! +cmd.info.allies = Alleati: {0} +cmd.info.enemies = Nemici: {0} +cmd.info.they_consider = Ti considerano: {0} +cmd.info.you_consider = Li consideri: {0} +cmd.info.members_no_permission = Non hai il permesso di visualizzare i membri della fazione. +cmd.info.members_header = === Membri di {0} ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = Non hai il permesso di visualizzare l'elenco delle fazioni. +cmd.info.list_empty = Non ci sono fazioni. +cmd.info.list_header = === Fazioni ({0}) === +cmd.info.list_entry = {0} - {1} membri, {2} potere +cmd.info.list_entry_raidable = {0} - {1} membri, {2} potere [SACCHEGGIABILE] +cmd.info.help_no_permission = Non hai il permesso di visualizzare l'aiuto. +cmd.info.who_no_permission = Non hai il permesso di visualizzare le informazioni del giocatore. +cmd.info.who_faction = Fazione: {0} +cmd.info.who_role = Ruolo: {0} +cmd.info.who_joined = Iscritto: {0} +cmd.info.who_faction_none = Fazione: Nessuna +cmd.info.who_power = Potere: {0} +cmd.info.who_status = Stato: {0} +cmd.info.who_last_seen = Ultimo accesso: {0} +cmd.info.map_no_permission = Non hai il permesso di visualizzare la mappa. +cmd.info.map_header = === Mappa del Territorio === +cmd.info.map_legend = Legenda: +Tu /Tuo /Alleato /Nemico -Selvaggio +cmd.info.map_gui_hint = Usa /f gui per la mappa interattiva + +# ========== Comandi - Potere ========== +cmd.power.personal = Potere Personale: {0}/{1} +cmd.power.faction = Potere della Fazione: {0}/{1} +cmd.power.death_loss = Perdita per Morte: {0} +cmd.power.regen = Rigenerazione: {0}/ora +cmd.power.no_permission = Non hai il permesso di visualizzare le informazioni sul potere. +cmd.power.header = Potere di {0}: +cmd.power.current = Attuale: {0} + +# ========== Comandi - Economia ========== +cmd.economy.balance = Saldo: {0} +cmd.economy.deposited = Depositato {0} nella tesoreria della fazione. +cmd.economy.withdrawn = Prelevato {0} dalla tesoreria della fazione. +cmd.economy.transferred = Trasferito {0} a {1}. +cmd.economy.insufficient = Fondi insufficienti nella tesoreria della fazione. +cmd.economy.invalid_amount = Importo non valido: {0} +cmd.economy.economy_disabled = L'economia è disattivata. +cmd.economy.balance_no_permission = Non hai il permesso di visualizzare i saldi. +cmd.economy.treasury_unavailable = La tesoreria non è disponibile. +cmd.economy.balance_display = Tesoreria di {0}: {1} +cmd.economy.deposit_no_permission = Non hai il permesso di depositare. +cmd.economy.deposit_faction_denied = Non hai il permesso della fazione per depositare. +cmd.economy.deposit_usage = Uso: /f deposit +cmd.economy.amount_positive = L'importo deve essere positivo. +cmd.economy.wallet_insufficient = Non hai abbastanza denaro. Portafoglio: {0} +cmd.economy.wallet_withdraw_failed = Impossibile prelevare dal tuo portafoglio. +cmd.economy.deposit_failed = Impossibile depositare nella tesoreria della fazione. Denaro restituito. +cmd.economy.withdraw_no_permission = Non hai il permesso di prelevare. +cmd.economy.withdraw_faction_denied = Non hai il permesso della fazione per prelevare. +cmd.economy.withdraw_usage = Uso: /f withdraw +cmd.economy.withdraw_limit_denied = Prelievo negato: {0} +cmd.economy.wallet_deposit_failed = Attenzione: Impossibile depositare nel tuo portafoglio. Contatta un amministratore. +cmd.economy.withdraw_limit_exceeded = Prelievo negato: limite superato. +cmd.economy.withdraw_failed = Prelievo fallito: {0} +cmd.economy.transfer_no_permission = Non hai il permesso di trasferire. +cmd.economy.transfer_faction_denied = Non hai il permesso della fazione per trasferire. +cmd.economy.transfer_usage = Uso: /f money transfer +cmd.economy.transfer_self = Non puoi trasferire alla tua stessa fazione. +cmd.economy.transfer_limit_denied = Trasferimento negato: {0} +cmd.economy.transfer_limit_exceeded = Trasferimento negato: limite superato. +cmd.economy.transfer_failed = Trasferimento fallito: {0} +cmd.economy.log_no_permission = Non hai il permesso di visualizzare il registro delle transazioni. +cmd.economy.log_header = Registro Transazioni (pagina {0}/{1}) +cmd.economy.log_empty = Nessuna transazione trovata. +cmd.economy.money_help_header = Comandi Tesoreria: +cmd.economy.money_help_balance = /f money balance [fazione] - Visualizza saldo +cmd.economy.money_help_deposit = /f money deposit - Deposita nella tesoreria +cmd.economy.money_help_withdraw = /f money withdraw - Preleva dalla tesoreria +cmd.economy.money_help_transfer = /f money transfer - Trasferisci tra fazioni +cmd.economy.money_help_log = /f money log [pagina] [tipo] - Visualizza cronologia transazioni + +# ========== Protezione - Frasi di Azione ========== +protection.action.generic = Non puoi farlo +protection.action.build = Non puoi costruire o distruggere blocchi +protection.action.interact = Non puoi interagire con quello +protection.action.door = Non puoi usare le porte +protection.action.container = Non puoi aprire i contenitori +protection.action.bench = Non puoi usare le stazioni di fabbricazione +protection.action.processing = Non puoi usare le stazioni di lavorazione +protection.action.seat = Non puoi usare le sedute +protection.action.light = Non puoi accendere/spegnere le luci +protection.action.teleporter = Non puoi usare i teletrasportatori +protection.action.crate = Non puoi usare le casse +protection.action.tame = Non puoi addomesticare creature +protection.action.npc = Non puoi interagire con gli NPC +protection.action.mount = Non puoi cavalcare creature +protection.action.pve = Non puoi danneggiare creature +protection.action.item_drop = Non puoi rilasciare oggetti +protection.action.item_pickup = Non puoi raccogliere oggetti + +# ========== Protezione - Motivi del Rifiuto ========== +protection.denied.safezone = {0} in una SafeZone. +protection.denied.warzone = {0} in una WarZone. +protection.denied.enemy_claim = {0} in territorio nemico. +protection.denied.claimed = {0} in territorio rivendicato. +protection.denied.here = {0} qui. +protection.denied.zone = {0} in questa zona. +protection.denied.faction_perm = {0} qui. (Permesso fazione: {1}) +protection.denied.ally_territory = {0} qui. (Territorio alleato) +protection.denied.error = Errore di protezione — azione bloccata per sicurezza. + +# ========== Protezione - PvP ========== +protection.pvp.safezone = Il PvP è disattivato nelle SafeZone. +protection.pvp.same_faction = Non puoi attaccare i membri della tua fazione. +protection.pvp.ally = Non puoi attaccare gli alleati. +protection.pvp.spawn_protected = Quel giocatore ha la protezione allo spawn. +protection.pvp.territory_disabled = Il PvP è disattivato in questo territorio. +protection.pvp.generic = Non puoi attaccare questo giocatore. + +# ========== Protezione - Danni alle Entità ========== +protection.mob_damage_disabled = I danni dei mob sono disattivati in questa zona. +protection.pve_damage_disabled = I danni PvE sono disattivati in questa zona. +protection.pve_territory_denied = Non puoi danneggiare i mob in questo territorio. + +# ========== Protezione - Tag Combattimento ========== +protection.combat_tag_command = Non puoi usare quel comando mentre sei in combattimento. + +# ========== Annunci del Server ========== +# Questi vengono trasmessi a tutti i giocatori online per eventi significativi della fazione. +# {0}, {1} = valori dinamici (nomi di fazioni, nomi di giocatori) +server_announce.faction_created = {0} ha fondato la fazione {1}! +server_announce.faction_disbanded = La fazione {0} è stata sciolta! +server_announce.leadership_transfer = {0} è ora il capo di {1}! +server_announce.overclaim = {0} ha conquistato territorio da {1}! +server_announce.war_declared = {0} ha dichiarato guerra a {1}! +server_announce.alliance_formed = {0} e {1} sono ora alleati! +server_announce.alliance_broken = {0} e {1} non sono più alleati! + +# ========== Sistema di Teletrasporto ========== +teleport.cooldown_wait = Devi attendere {0} prima di teletrasportarti di nuovo. +teleport.warmup_start = Teletrasporto alla base della fazione tra {0} secondi... +teleport.combat_cancelled = Teletrasporto annullato - sei in combattimento! +teleport.success_default = Teletrasportato alla base della fazione! +teleport.no_home = La tua fazione non ha una base impostata. +teleport.world_not_found = Mondo non trovato. +teleport.failed = Teletrasporto fallito. +teleport.countdown = Teletrasporto tra {0} secondi... +teleport.countdown_one = Teletrasporto tra 1 secondo... +teleport.moved_cancelled = Teletrasporto annullato - ti sei mosso! +teleport.damage_cancelled = Teletrasporto annullato - hai subito danni! +teleport.mount_teleport_blocked = Non puoi teletrasportarti in quella zona mentre sei in sella. +teleport.mount_entry_blocked = Non puoi entrare in questa zona mentre sei in sella. + +# ========== Visualizzazione Chat ========== +chat.display.public = Pubblico +chat.display.faction = Fazione +chat.display.ally = Alleato diff --git a/src/main/resources/Server/Languages/it-IT/hyperfactions_admin.lang b/src/main/resources/Server/Languages/it-IT/hyperfactions_admin.lang new file mode 100644 index 00000000..87561a43 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Traduzioni Italiane +# Formato: chiave = valore +# Nota: Le chiavi sono automaticamente prefissate con "hyperfactions_admin." dal modulo I18n di Hytale + +# ========== Barra di Navigazione Admin ========== +nav.dashboard = Pannello +nav.actions = Azioni +nav.factions = Fazioni +nav.players = Giocatori +nav.economy = Economia +nav.zones = Zone +nav.config = Config +nav.backups = Backup +nav.log = Registro +nav.updates = Aggiornamenti +nav.help = Aiuto +nav.version = Versione + +# ========== Etichette Comuni Admin ========== +common.faction_not_found = Fazione Non Trovata +common.no_faction = Nessuna Fazione +common.not_set = Non impostato +common.on = Attivo +common.off = Spento +common.enable = Attiva +common.disable = Disattiva +common.none_paren = (Nessuno) +common.invalid_faction = Fazione non valida. +common.leader_prefix = Capo: {0} +common.members_suffix = {0} membri +common.claims_suffix = {0} territori +common.factions_suffix = {0} fazioni +common.players_suffix = {0} giocatori +common.chunks_suffix = {0} chunk +common.entries_suffix = {0} voci +common.found_suffix = {0} trovati +common.power_format = {0}/{1} potere +common.raidable = Saccheggiabile +common.protected = Protetta +common.no_description = Nessuna descrizione impostata. +common.officers_more = +{0} altri +common.custom_max = (max personalizzato) +common.default_max = (max predefinito) +common.now = Ora +common.ago_suffix = {0} fa +common.just_now = adesso +common.no_membership_history = Nessuna cronologia di appartenenza + +# ========== Pannello Admin ========== +dashboard.factions_prefix = Fazioni: {0} +dashboard.members_prefix = Totale Membri: {0} +dashboard.claims_prefix = Totale Territori: {0} + +# ========== Azioni Admin ========== +actions.confirm_reset = Confermare il Ripristino? +actions.confirm_trigger = Confermare l'Attivazione? +actions.kd_reset = U/M ripristinato per {0} giocatori. +actions.kd_reset_failed = Impossibile ripristinare U/M: {0} +actions.upkeep_unavailable = Il processore di mantenimento non è disponibile. +actions.upkeep_triggered = Riscossione mantenimento avviata. +actions.upkeep_failed = Mantenimento fallito: {0} + +# ========== Scioglimento Admin ========== +disband.faction_gone = La fazione non esiste più. +disband.success = La fazione '{0}' è stata sciolta. +disband.failed = Impossibile sciogliere: {0} +disband.no_leader = La fazione non ha un capo, impossibile sciogliere. + +# ========== Rilascio Totale Territori Admin ========== +unclaim.removed = [Admin] Rimossi {0} territori da {1}. +unclaim.no_claims = {0} non aveva territori da rimuovere. + +# ========== Lista Fazioni Admin ========== +factions.home_not_set = Non impostata +factions.teleported = Teletrasportato alla base di {0}. +factions.no_home = La fazione non ha una base impostata. +factions.world_not_found = Mondo di destinazione non trovato. + +# ========== Info Fazione Admin ========== +info.faction_gone = Questa fazione non esiste più. + +# ========== Membri Fazione Admin ========== +members.sort_role = Ruolo +members.sort_online = Online +members.sort_name = Nome +members.sort_power = Potere +members.promoted = [Admin] {0} promosso a {1}. +members.demoted = [Admin] {0} retrocesso a {1}. +members.kicked = [Admin] {0} espulso dalla fazione. + +# ========== Relazioni Fazione Admin ========== +relations.allies_header = ALLEATI ({0}) +relations.enemies_header = NEMICI ({0}) +relations.no_allies = Nessun alleato. +relations.no_enemies = Nessun nemico. +relations.neutral_count = {0} fazioni neutrali +relations.since_today = Dal: oggi +relations.since_one_day = Dal: 1 giorno fa +relations.since_days = Dal: {0} giorni fa +relations.set_ally = [Admin] Impostato stato di alleanza reciproca con {0}. +relations.set_enemy = Impostato stato di nemico reciproco con {0}. +relations.set_neutral = [Admin] Impostato stato neutrale reciproco con {0}. + +# ========== Impostazioni Fazione Admin ========== +settings.locked = Questa impostazione è bloccata dalla configurazione del server. +settings.perm_toggled = {0} impostato su {1}. +settings.color_changed = Colore fazione impostato su {0}. +settings.recruitment_set = Reclutamento impostato su {0}. +settings.no_home = [Admin] Questa fazione non ha una base impostata. +settings.home_cleared = Base della fazione cancellata per {0}. + +# ========== Etichette Ordinamento ========== +sort.power = Potere +sort.name = Nome +sort.members = Membri +sort.balance = Saldo + +# ========== Giocatori Admin ========== +players.sort_last_online = Ultimo Accesso +players.sort_faction = Fazione +players.sort_online = Online +players.not_online = Il giocatore non è online. +players.world_not_found = Mondo di destinazione non trovato. +players.teleported = [Admin] Teletrasportato a {0}. + +# ========== Info Giocatore Admin ========== +playerinfo.disband_faction = Sciogli Fazione +playerinfo.kick_leader = Espelli Capo +playerinfo.enter_valid_number = Inserisci un numero valido. +playerinfo.enter_valid_positive = Inserisci un numero positivo valido. +playerinfo.faction_gone = La fazione non esiste più. +playerinfo.kd_reset = U/M ripristinato per {0}. +playerinfo.kicked_success = {0} espulso da {1}. +playerinfo.kicked_leader = Capo {0} espulso. Leadership trasferita a {1}. +playerinfo.disbanded_kick = [Admin] Fazione '{0}' sciolta (ultimo membro espulso). + +# ========== Economia Admin ========== +economy.no_data = Nessuna fazione con dati economici. +economy.amount_zero = L'importo non può essere zero. +economy.enter_amount = Inserisci un importo. +economy.invalid_number = Numero non valido: {0} +economy.error = Si è verificato un errore. +economy.balance_negative = Il saldo non può essere negativo. +economy.failed = Fallito: {0} +economy.bulk_complete = Regolazione massiva completata: {0} {1} a {2} fazioni. +economy.bulk_failures = ({0} fallite) + +# ========== Zone Admin ========== +zones.not_found = Zona non trovata. +zones.invalid_id = ID zona non valido. +zones.deleted = Zona {0} eliminata. +zones.delete_failed = Impossibile eliminare la zona: {0} +zones.no_chunks = Nessun chunk +zones.chunks_suffix = {0} ({1} chunk) + +# ========== Procedura Creazione Zona ========== +wizard.enter_name = Inserisci un nome per la zona. +wizard.name_too_short = Il nome della zona deve avere almeno {0} caratteri. +wizard.name_too_long = Il nome della zona non può superare i {0} caratteri. +wizard.name_taken = Esiste già una zona con questo nome. +wizard.radius_range = Il raggio deve essere compreso tra 1 e {0}. +wizard.create_failed = Impossibile creare la zona: {0} +wizard.created_not_found = Zona creata ma non trovata. +wizard.created = Creata {0} '{1}'! +wizard.chunk_claimed = Chunk rivendicato ({0}, {1}). +wizard.chunk_failed = Impossibile rivendicare il chunk corrente: {0} +wizard.radius_claimed = Rivendicati {0} chunk in un raggio di {1} da {2}. +wizard.radius_no_claims = Nessun chunk rivendicabile (l'area potrebbe essere occupata). +wizard.no_claims = Zona creata senza territori. +wizard.chunks_preview = ~{0} chunk + +# ========== Rinomina Zona ========== +zone_rename.zone_gone = La zona non esiste più. +zone_rename.enter_name = Inserisci un nome per la zona. +zone_rename.too_short = Il nome della zona deve avere almeno {0} carattere. +zone_rename.too_long = Il nome della zona non può superare i {0} caratteri. +zone_rename.same_name = È già il nome di questa zona. +zone_rename.renamed = [Admin] Zona rinominata da {0} a {1}! +zone_rename.name_taken = Esiste già una zona con quel nome. +zone_rename.invalid_name = Nome della zona non valido. +zone_rename.rename_failed = Impossibile rinominare la zona: {0} + +# ========== Cambio Tipo Zona ========== +zone_type.zone_gone = La zona non esiste più. +zone_type.changed = [Admin] Cambiato {0} da {1} a {2} ({3}). +zone_type.failed = Impossibile cambiare il tipo di zona: {0} +zone_type.flags_reset = flag ripristinati +zone_type.flags_kept = flag mantenuti + +# ========== Flag di Integrazione Zona ========== +zone_int.zone_not_found = Zona Non Trovata +zone_int.no_plugin = (nessun plugin) +zone_int.default = (predefinito) +zone_int.custom = (personalizzato) + +# Etichette UI flag di integrazione +gui.zint_cat_gravestones = Tombe +gui.zint_gravestones_desc = Quando ATTIVO, i non proprietari possono saccheggiare le tombe. I proprietari possono sempre farlo. +gui.zint_cat_world_map = Mappa del Mondo +gui.zint_world_map_desc = Sovrascrive il nascondimento sulla mappa per i giocatori in questa zona. Quando attivo, seleziona chi può vedere i giocatori in questa zona. +gui.zint_visibility_label = Livello di Visibilità: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Ripristina Predefiniti +gui.zint_back_to_flags = Torna ai Flag +gui.zint_map_vis_faction = Solo Fazione +gui.zint_map_vis_ally = Fazione + Alleati +gui.zint_map_vis_all = Tutti i Giocatori + +# ========== Registro Attività ========== +log.all_types = Tutti i Tipi +log.no_logs = Nessun registro attività corrispondente ai filtri. + +# ========== Pagina Versione ========== +version.active = Attivo +version.not_found = Non Trovato +version.not_detected = Non Rilevato +version.not_installed = Non Installato +version.active_version = Attivo (v{0}) +version.active_compatible = Attivo (compatibile) +version.active_claims_only = Attivo (solo territori) +version.installed_no_perm = Installato (nessun provider permessi) +version.active_provider = Attivo ({0}) + +# ========== Pagina Principale Admin ========== +main.reload_hint = Usa /f reload per ricaricare la configurazione. +main.unclaim_hint = Usa /f admin unclaim {0} per rilasciare tutti i {1} chunk. + +# ========== Flag/Impostazioni Zona ========== +zflags.invalid_flag = Flag non valido. +zflags.zone_not_found = Zona non trovata. +zflags.conflict = (conflitto) +zflags.mixin = (mixin) +zflags.reset_int = Ripristina flag di integrazione ai predefiniti. +zflags.reset_all = Ripristina tutti i flag ai predefiniti. +zflags.reset_failed = Impossibile ripristinare i flag: {0} +zflags.back_to_settings = Torna alle Impostazioni + +# Etichette UI impostazioni zona +gui.zset_cat_combat = Combattimento +gui.zset_cat_damage = Danni +gui.zset_cat_death = Morte +gui.zset_cat_building = Costruzione +gui.zset_cat_interaction = Interazione +gui.zset_cat_transport = Trasporto +gui.zset_cat_items = Oggetti +gui.zset_cat_spawning = Generazione Mob +gui.zset_cat_mob_clear = Pulizia Mob +gui.zset_children_hint = (sottovoci attive solo quando il genitore è ATTIVO) +gui.zset_reset_defaults = Ripristina Predefiniti +gui.zset_integration_flags = Flag di Integrazione +gui.zset_back_to_zones = Torna alle Zone +gui.zset_chunks = {0} chunk + +# Nomi Visualizzati Flag Zona +gui.zflag_pvp_enabled = PvP Attivato +gui.zflag_friendly_fire = Fuoco Amico +gui.zflag_friendly_fire_faction = Danni della Fazione +gui.zflag_friendly_fire_ally = Danni Alleati +gui.zflag_projectile_damage = Danni da Proiettile +gui.zflag_mob_damage = Subire Danni Mob +gui.zflag_pve_damage = Infliggere Danni Mob +gui.zflag_fall_damage = Danni da Caduta +gui.zflag_environmental_damage = Danni Amb. +gui.zflag_explosion_damage = Danni da Esplosione +gui.zflag_fire_spread = Propagazione Fuoco +gui.zflag_keep_inventory = Mantieni Inventario +gui.zflag_power_loss = Perdita Potere +gui.zflag_build_allowed = Costruzione Permessa +gui.zflag_block_place = Piazzamento Blocchi +gui.zflag_hammer_use = Uso Martello +gui.zflag_builder_tools_use = Strumenti Costruttore +gui.zflag_block_interact = Interazione Blocchi +gui.zflag_door_use = Uso Porte +gui.zflag_container_use = Uso Contenitori +gui.zflag_bench_use = Uso Banchi +gui.zflag_processing_use = Uso Lavorazione +gui.zflag_seat_use = Uso Sedute +gui.zflag_mount_use = Uso Cavalcature +gui.zflag_light_use = Uso Luci +gui.zflag_npc_use = Interazione NPC +gui.zflag_crate_pickup = Raccolta Casse +gui.zflag_crate_place = Piazzamento Casse +gui.zflag_npc_tame = Addomesticamento NPC +gui.zflag_npc_interact = Interazione NPC +gui.zflag_teleporter_use = Uso Teletrasportatori +gui.zflag_portal_use = Uso Portali +gui.zflag_mount_entry = Accesso Cavalcature +gui.zflag_item_drop = Rilascio Oggetti +gui.zflag_item_pickup = Raccolta Automatica +gui.zflag_item_pickup_manual = Raccolta con Tasto F +gui.zflag_invincible_items = Oggetti Invincibili +gui.zflag_mob_spawning = Generazione Mob +gui.zflag_hostile_mob_spawning = Mob Ostili +gui.zflag_passive_mob_spawning = Mob Passivi +gui.zflag_neutral_mob_spawning = Mob Neutrali +gui.zflag_npc_spawning = Generazione NPC +gui.zflag_mob_clear = Pulizia Mob +gui.zflag_hostile_mob_clear = Elimina Mob Ostili +gui.zflag_passive_mob_clear = Elimina Mob Passivi +gui.zflag_neutral_mob_clear = Elimina Mob Neutrali +gui.zflag_gravestone_access = Altri Saccheggiano Tombe +gui.zflag_show_on_map = Mostra sulla Mappa +gui.zflag_essentials_homes = Uso Base +gui.zflag_essentials_warps = Uso Warp +gui.zflag_essentials_kits = Riscatto Kit + +# ========== Proprietà Zona ========== +zprop.current_custom = Attuale: "{0}" (personalizzato) +zprop.current_default = Attuale: "{0}" (predefinito) +zprop.pvp_disabled = PvP Disattivato +zprop.pvp_enabled = PvP Attivato +zprop.name_empty = Il nome non può essere vuoto. +zprop.renamed = Zona rinominata in "{0}". +zprop.name_taken = Esiste già una zona con quel nome. +zprop.name_invalid = Nome non valido (max 32 caratteri). +zprop.rename_failed = Impossibile rinominare: {0} +zprop.upper_empty = Il titolo superiore non può essere vuoto. Usa Cancella per ripristinare. +zprop.upper_set = Titolo superiore impostato. +zprop.upper_reset = Titolo superiore ripristinato al predefinito. +zprop.lower_empty = Il titolo inferiore non può essere vuoto. Usa Cancella per ripristinare. +zprop.lower_set = Titolo inferiore impostato. +zprop.lower_reset = Titolo inferiore ripristinato al predefinito. + +# ========== Relazioni Aggiuntive ========== +relations.failed = Fallito: {0} + +# ========== Membri Aggiuntivi ========== +members.never = Mai +members.teleported = [Admin] Teletrasportato a {0}. + +# ========== Info Giocatore Aggiuntive ========== +playerinfo.records = {0} registri +playerinfo.joined_date = Iscritto: {0} +playerinfo.current = Attuale +playerinfo.left_date = Uscito: {0} + +# ========== Mappa Zona ========== +map.world_warning = ATTENZIONE: Sei in '{0}' - la zona è in '{1}' +map.position = La Tua Posizione: Chunk ({0}, {1}) +map.zone_gone = La zona non esiste più. +map.claimed = Chunk rivendicato ({0}, {1}) per {2}. +map.claim_failed = Impossibile rivendicare il chunk: {0} +map.unclaimed = Chunk rilasciato ({0}, {1}) da {2}. +map.unclaim_failed = Impossibile rilasciare il chunk: {0} +map.chunk_belongs = Questo chunk appartiene a {0}. +map.chunk_faction = Questo chunk è rivendicato da una fazione. +map.chunk_protected = Questo chunk si trova in una regione protetta. +map.another_zone = un'altra zona + +# ========== Chiavi Etichette GUI (per localizzazione testo hardcoded .ui) ========== + +# Titoli Pagina +gui.title_dashboard = Pannello Admin +gui.title_main = Admin Fazioni +gui.title_actions = Admin: Azioni Server +gui.title_factions = Gestione Fazioni +gui.title_players = Gestione Giocatori +gui.title_economy = Admin: Economia Server +gui.title_zones = Gestione Zone +gui.title_backups = Backup +gui.title_config = Configurazione +gui.title_help = Aiuto Admin +gui.title_updates = Aggiornamenti +gui.title_version = Versione e Integrazioni +gui.title_activity_log = Admin: Registro Attività +gui.title_player_info = Admin: Info Giocatore +gui.title_faction_info = Admin: Info Fazione +gui.title_faction_settings = Admin: Impostazioni Fazione +gui.title_faction_members = Admin: Membri +gui.title_faction_relations = Admin: Relazioni +gui.title_zone_map = Editor Mappa Zone +gui.title_zone_settings = Admin: Impostazioni Zona +gui.title_zone_properties = Admin: Proprietà Zona +gui.title_bulk_economy = Regolazione Massiva Tesoreria +gui.title_economy_adjust = Admin: Economia + +# Etichette pannello +gui.dash_server_stats = Statistiche Server +gui.dash_factions = Fazioni +gui.dash_total_members = Totale Membri +gui.dash_total_claims = Totale Territori +gui.dash_zones = Zone +gui.dash_safe_war = sicure / guerra +gui.dash_total_power = Potere Totale +gui.dash_avg_power = Potere Medio/Fazione +gui.dash_total_economy = Economia Totale +gui.dash_wealthiest = Più Ricca +gui.dash_avg_balance = Saldo Medio +gui.dash_protection_bypass = Bypass Protezione: + +# Pulsanti e etichette comuni +gui.search = Cerca: +gui.sort = Ordina: +gui.prev = < Prec +gui.next = Succ > +gui.back = Indietro +gui.done = Fatto +gui.cancel = Annulla +gui.apply = Applica +gui.set = Imposta +gui.reset = Ripristina +gui.coming_soon = Prossimamente +gui.zones_btn = Zone +gui.reload_btn = Ricarica +gui.all = Tutte +gui.safe = Sicura +gui.war = Guerra +gui.create_zone = + Crea + +# Etichette pagina azioni +gui.act_combat_stats = Statistiche di Combattimento +gui.act_combat_desc = Ripristina uccisioni e morti per TUTTI i giocatori sul server. Questa azione non può essere annullata. +gui.act_reset_kd = Ripristina Tutti U/M +gui.act_economy = Economia +gui.act_economy_desc = Aggiungi o rimuovi denaro da TUTTE le tesorerie delle fazioni contemporaneamente. +gui.act_bulk_adjust = Aggiungi/Rimuovi in Blocco +gui.act_upkeep_collection = Riscossione Mantenimento +gui.act_upkeep_desc = Attiva manualmente la riscossione del mantenimento per tutte le fazioni immediatamente, indipendentemente dal timer programmato. +gui.act_trigger_upkeep = Avvia Mantenimento + +# Etichette pagine segnaposto +gui.backup_heading = Gestione Backup +gui.backup_desc1 = Crea, ripristina e gestisci i backup dei dati delle fazioni. +gui.backup_desc2 = I backup automatici vengono salvati nella cartella data/backups. +gui.config_heading = Editor Configurazione +gui.config_desc1 = Configura le impostazioni di HyperFactions direttamente dalla GUI. +gui.config_desc2 = Per ora, usa /f reload per ricaricare le modifiche alla configurazione. +gui.help_heading = Documentazione Admin +gui.help_desc1 = Visualizza la documentazione admin e il riferimento dei comandi. +gui.help_desc2 = Per assistenza, visita la wiki di HyperFactions. +gui.updates_heading = Centro Aggiornamenti +gui.updates_desc1 = Controlla nuove versioni e visualizza i changelog. +gui.updates_desc2 = Visita la pagina di HyperFactions per gli ultimi aggiornamenti. + +# Etichette pagina versione +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Hytale Server +gui.ver_java = Java +gui.ver_permissions = PERMESSI +gui.ver_placeholders = SEGNAPOSTO +gui.ver_economy_section = ECONOMIA +gui.ver_protection = PROTEZIONE +gui.ver_disabled = Disattivato + +# Intestazioni colonne (condivise tra pagine) +gui.col_faction = Fazione +gui.col_balance = Saldo +gui.col_members = Membri +gui.col_actions = Azioni +gui.col_time = Orario +gui.col_type = Tipo +gui.col_message = Messaggio + +# Etichette pagina economia +gui.econ_total_balance = Saldo Totale +gui.econ_factions = Fazioni +gui.econ_avg_balance = Saldo Medio +gui.econ_in_grace = In Tolleranza +gui.econ_collected = Riscosso (24h) +gui.econ_next_collection = Prossima Riscossione +gui.econ_no_data = Nessuna fazione con dati economici. + +# Etichette registro attività +gui.log_type = Tipo: +gui.log_time = Orario: +gui.log_player = Giocatore: +gui.log_no_logs = Nessun registro attività corrispondente ai filtri. + +# Etichette info giocatore +gui.plr_first_joined = Prima iscrizione: +gui.plr_last_online = Ultimo accesso: +gui.plr_uuid = UUID: +gui.plr_faction = Fazione: +gui.plr_role = Ruolo: +gui.plr_view_faction = Vedi Fazione +gui.plr_power = Potere +gui.plr_max_power = Potere Max +gui.plr_set_power = Imposta +gui.plr_reset_power = Ripristina +gui.plr_set_max = Imposta +gui.plr_reset_max = Ripristina +gui.plr_no_power_loss = Nessuna Perdita Potere +gui.plr_no_claim_decay = Nessun Decadimento Territori +gui.plr_kills = Uccisioni +gui.plr_deaths = Morti +gui.plr_kdr = Rapporto U/M +gui.plr_reset_kd = Ripristina U/M +gui.plr_kick = Espelli +gui.plr_membership_history = Cronologia Appartenenze +gui.plr_no_faction_label = Non in una fazione +gui.plr_power_management = Gestione Potere +gui.plr_combat_stats = Statistiche Combattimento +gui.plr_bypass_flags = Flag di Bypass +gui.plr_admin_controls = Controlli Admin +gui.plr_kd_subtitle = U / M +gui.plr_max_prefix = Max: +gui.plr_view = Vedi +gui.plr_kick_from_faction = Espelli dalla Fazione +gui.plr_set_max_btn = Imposta Max +gui.plr_combat = Combattimento +gui.plr_reason_active = ATTIVO +gui.plr_reason_left = USCITO +gui.plr_reason_kicked = ESPULSO +gui.plr_reason_disbanded = SCIOLTA + +# Etichette voce membro +gui.mem_label_power = Potere: +gui.mem_label_joined = Iscritto: +gui.mem_label_last_death = Ultima Morte: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Info +gui.mem_btn_teleport = Teletrasporto +gui.mem_btn_promote = Promuovi +gui.mem_btn_demote = Retrocedi +gui.mem_btn_kick = Espelli +gui.econ_not_enabled = Il sistema economico non è attivo. +gui.info_more = +{0} altri +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7g +gui.log_time_all = Tutto +gui.shape_circular = circolare +gui.shape_square = quadrato +gui.nav_title = Pannello Admin +gui.econ_btn_adjust = Regola +gui.econ_btn_info = Info + +# Etichette info fazione +gui.fac_description = Descrizione +gui.fac_power = Potere +gui.fac_claims = Territori +gui.fac_members = Membri +gui.fac_recruitment = Reclutamento +gui.fac_founded = Fondata +gui.fac_allies = Alleati +gui.fac_enemies = Nemici +gui.fac_raidable = Stato Saccheggiabile +gui.fac_treasury = Tesoreria +gui.fac_leader = Capo +gui.fac_officers = Ufficiali +gui.fac_view_members = Vedi Membri +gui.fac_view_relations = Vedi Relazioni +gui.fac_view_settings = Impostazioni +gui.fac_disband = Sciogli Fazione +gui.fac_power_management = Gestione Potere +gui.fac_reset_all_power = Ripristina Tutto il Potere +gui.fac_econ_adjust = Regola Saldo +gui.fac_econ_view_log = Vedi Registro Transazioni +gui.fac_current_max = attuale / max +gui.fac_claimed_max = rivendicati / max +gui.fac_relations = Relazioni +gui.fac_ally_enemy = alleati / nemici +gui.fac_status = Stato +gui.fac_info = Info +gui.fac_treasury_balance = saldo tesoreria +gui.fac_leadership = Leadership +gui.fac_leader_label = Capo: +gui.fac_officers_label = Ufficiali: +gui.fac_econ_mgmt = Gestione Economia +gui.fac_danger_zone = Zona Pericolosa +gui.fac_view_treasury = Vedi Tesoreria + +# Etichette impostazioni fazione +gui.set_editing = Modifica: +gui.set_general = Impostazioni Generali +gui.set_name = Nome +gui.set_tag = Tag +gui.set_description = Descrizione +gui.set_recruitment = Reclutamento +gui.set_home = Posizione Base +gui.set_clear_home = Cancella Base +gui.set_disband_faction = Sciogli Fazione +gui.set_faction_color = Colore Fazione +gui.set_admin_override = [Override Admin] +gui.set_territory_perms = Permessi Territoriali +gui.set_mob_spawning = Generazione Mob +gui.set_faction_settings = Impostazioni Fazione +gui.set_name_label = Nome: +gui.set_tag_label = Tag: +gui.set_desc_label = Desc: +gui.set_edit = Modifica +gui.set_status_label = Stato: +gui.set_location_label = Posizione: +gui.set_danger_zone = Zona Pericolosa +gui.set_irreversible = Questa azione è irreversibile. +gui.set_lock_hint = Alcune opzioni potrebbero essere bloccate dal server e non accetteranno modifiche. +gui.set_appearance = Aspetto +gui.set_color_label = Colore: +gui.set_mob_sub = (sottovoci disattivate quando il principale è spento) +gui.set_back_to_info = Torna alle Info +gui.set_col_out = Est +gui.set_col_ally = All +gui.set_col_mem = Mem +gui.set_col_off = Uff +gui.set_cat_building = COSTRUZIONE +gui.set_cat_interaction = INTERAZIONE +gui.set_cat_interact_sub = (sottovoci disattivate quando Tutti è spento) +gui.set_cat_other = ALTRO +gui.set_perm_break = Distruzione +gui.set_perm_place = Piazzamento +gui.set_perm_all = Tutti +gui.set_perm_door = Porta +gui.set_perm_chest = Cassa +gui.set_perm_bench = Banco +gui.set_perm_processing = Lavorazione +gui.set_perm_seat = Seduta +gui.set_perm_transport = Trasporto +gui.set_perm_crate_use = Uso Casse +gui.set_perm_npc_tame = Addomesticamento NPC +gui.set_perm_pve_damage = Danni PvE +gui.set_perm_mob_spawning = Generazione Mob +gui.set_perm_hostile = Mob Ostili +gui.set_perm_passive = Mob Passivi +gui.set_perm_neutral = Mob Neutrali +gui.set_perm_pvp = PvP nel Territorio +gui.set_perm_officers_edit = Gli ufficiali possono modificare + +# Etichette relazioni fazione +gui.rel_subtitle = Gestisci le relazioni della fazione (senza approvazione) +gui.rel_set_new = Nuova Relazione +gui.rel_btn_ally = Alleato +gui.rel_btn_neutral = Neutrale +gui.rel_btn_enemy = Nemico + +# Etichette pagina zone +gui.zone_sort_name = Nome +gui.zone_sort_type = Tipo +gui.zone_sort_chunks = Chunk +gui.zone_sort_world = Mondo +gui.zone_count_format = {0} {1}zone ({2} chunk) + +# Etichette mappa zona +gui.map_zone_chunk = Chunk Zona +gui.map_empty = Vuoto +gui.map_other_zone = Altra Zona +gui.map_faction_claim = Territorio Fazione +gui.map_protected = Protetto +gui.map_your_pos = La Tua Posizione +gui.map_click_hint = Clicca per rivendicare/rilasciare chunk +gui.map_legend_zone_safe = Questa Zona (Sicura) +gui.map_legend_zone_war = Questa Zona (Guerra) +gui.map_legend_other_safe = Altra SafeZone +gui.map_legend_other_war = Altra WarZone +gui.map_legend_faction = Territorio Fazione +gui.map_legend_unclaimed = Non Rivendicato +gui.map_legend_you_here = Sei qui +gui.map_action_hint = Clic sinistro: Rivendica per zona | Clic destro: Rilascia dalla zona +gui.map_done = Fatto + +# Etichette proprietà zona +gui.zprop_general = Generali +gui.zprop_zone_name = Nome Zona +gui.zprop_zone_type = Tipo Zona +gui.zprop_change_type = Cambia Tipo +gui.zprop_notifications = Notifiche +gui.zprop_show_entry = Mostra Notifica di Ingresso +gui.zprop_upper_title = Titolo Superiore +gui.zprop_upper_desc = Titolo Superiore (testo piccolo sopra il nome della zona) +gui.zprop_lower_title = Titolo Inferiore +gui.zprop_lower_desc = Titolo Inferiore (testo grande del nome della zona) +gui.zprop_edit_flags = Modifica Flag +gui.zprop_back_to_zones = Torna alle Zone +gui.save = Salva +gui.clear = Cancella + +# Etichette economia massiva +gui.bulk_header = Regola Tutte le Tesorerie delle Fazioni +gui.bulk_factions_label = Fazioni: +gui.bulk_total_label = Saldo Totale: +gui.bulk_amount_hint = Importo (positivo per aggiungere, negativo per rimuovere): +gui.bulk_hint = Questo verrà applicato a ogni fazione con una tesoreria +gui.bulk_warning_msg = Attenzione: Questa azione riguarda TUTTE le fazioni e non può essere annullata. +gui.bulk_apply_all = Applica a Tutte +gui.bulk_operation = Operazione +gui.bulk_add = Aggiungi +gui.bulk_remove = Rimuovi +gui.bulk_amount = Importo +gui.bulk_warning = Questo riguarderà TUTTE le tesorerie delle fazioni. +gui.bulk_preview = Anteprima + +# Etichette regolazione economia +gui.ecadj_header = Regola Saldo Tesoreria +gui.ecadj_faction_label = Fazione: +gui.ecadj_current_balance = Saldo Attuale: +gui.ecadj_amount_hint = Importo (positivo per aggiungere, negativo per detrarre): +gui.ecadj_preview_hint = Inserisci un numero per visualizzare l'anteprima della modifica +gui.ecadj_adjustment = Regolazione: +gui.ecadj_set_balance = Imposta Saldo +gui.ecadj_confirm = Conferma +/- +gui.ecadj_operation = Operazione +gui.ecadj_add = Aggiungi +gui.ecadj_remove = Rimuovi +gui.ecadj_set_to = Imposta A +gui.ecadj_amount = Importo +gui.ecadj_new_balance = Nuovo Saldo: + +# Etichette integrazioni pagina versione +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Nativo +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Tombe +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Tesoreria + +# Etichette modale conferma rilascio totale +gui.unclaim_title = Rilascia Tutto il Territorio +gui.unclaim_confirm_msg1 = Sei sicuro di voler rilasciare tutti +gui.unclaim_confirm_msg2 = da +gui.unclaim_warning = Questa azione non può essere annullata! +gui.unclaim_all = Rilascia Tutto + +# Etichette modale rinomina zona +gui.zren_title = Rinomina Zona +gui.zren_current = Attuale: +gui.zren_new_name = Nuovo Nome: + +# Etichette modale cambio tipo zona +gui.ztype_title = Cambia Tipo Zona +gui.ztype_zone_label = Zona: +gui.ztype_current = Attuale: +gui.ztype_will_become = diventerà +gui.ztype_new = Nuovo: +gui.ztype_warning1 = Tipi di zona diversi hanno valori flag predefiniti diversi. +gui.ztype_warning2 = Scegli come gestire le impostazioni flag esistenti: +gui.ztype_keep_desc = Mantieni le personalizzazioni +gui.ztype_keep_flags = Mantieni Flag +gui.ztype_reset_desc = Usa i predefiniti del nuovo tipo +gui.ztype_reset_flags = Ripristina Flag + +# Etichette procedura guidata creazione zona +gui.czw_title = Crea Zona +gui.czw_back = < Indietro +gui.czw_create = Crea Zona +gui.czw_zone_type = Tipo Zona +gui.czw_safe_desc = Protetta, senza PvP +gui.czw_war_desc = Combattimento, PvP attivo +gui.czw_zone_name = Nome Zona +gui.czw_name_desc = Inserisci un nome unico per la zona +gui.czw_claim_method = Metodo di Rivendicazione +gui.czw_method_none_desc = Crea zona vuota +gui.czw_method_none = Nessun territorio +gui.czw_method_single_desc = Il tuo chunk attuale +gui.czw_method_single = Chunk singolo +gui.czw_method_circle_desc = Area circolare +gui.czw_method_circle = Raggio circolare +gui.czw_method_square_desc = Area quadrata +gui.czw_method_square = Raggio quadrato +gui.czw_method_map_desc = Editor chunk interattivo +gui.czw_method_map = Usa mappa territori +gui.czw_radius = Raggio +gui.czw_custom_radius = Personalizzato (1-50): +gui.czw_flags = Flag +gui.czw_flags_defaults_desc = Basati sul tipo di zona +gui.czw_flags_defaults = Usa predefiniti +gui.czw_flags_customize_desc = Apri impostazioni dopo +gui.czw_flags_customize = Personalizza + +# ========== Etichette Voci (Fazione/Giocatore/Zona nell'elenco) ========== + +# Etichette voce fazione +gui.fac_entry_power = potere +gui.fac_entry_claims = territori +gui.fac_entry_members = membri +gui.fac_entry_created = Creata: +gui.fac_entry_home = Base: +gui.fac_entry_tp_home = TP Base +gui.fac_entry_view_info = Vedi Info +gui.fac_entry_members_btn = Membri +gui.fac_entry_settings = Impostazioni +gui.fac_entry_unclaim_all = Rilascia Tutto +gui.fac_entry_disband = Sciogli + +# Etichette voce giocatore +gui.plr_entry_role = Ruolo: +gui.plr_entry_joined = Iscritto: +gui.plr_entry_last_online = Ultimo Accesso: +gui.plr_entry_kdr = U/M/R: +gui.plr_entry_power = Potere: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Info +gui.plr_entry_teleport = Teletrasporto +gui.plr_entry_na = N/D +gui.plr_entry_unknown = Sconosciuto +gui.plr_entry_ago = {0} fa + +# Etichette voce zona +gui.zone_entry_world = Mondo: +gui.zone_entry_chunks = Chunk: +gui.zone_entry_bounds = Limiti: +gui.zone_entry_created = Creata: +gui.zone_entry_edit_map = Modifica Mappa +gui.zone_entry_flags = Flag +gui.zone_entry_settings = Impostazioni +gui.zone_entry_delete = Elimina diff --git a/src/main/resources/Server/Languages/it-IT/hyperfactions_gui.lang b/src/main/resources/Server/Languages/it-IT/hyperfactions_gui.lang new file mode 100644 index 00000000..acc94d72 --- /dev/null +++ b/src/main/resources/Server/Languages/it-IT/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Traduzioni Italiane +# Formato: chiave = valore +# Nota: Le chiavi sono automaticamente prefissate con "hyperfactions_gui." dal modulo I18n di Hytale + +# ========== Barra di Navigazione ========== +nav.dashboard = Pannello +nav.chat = Chat +nav.members = Membri +nav.invites = Inviti +nav.browser = Esplora +nav.map = Mappa +nav.leaderboard = Classifica +nav.relations = Relazioni +nav.treasury = Tesoreria +nav.settings = Impostazioni +nav.logs = Registro +nav.help = Aiuto +nav.admin = Admin +nav.create = Crea + +# ========== Nomi Categorie Aiuto ========== +help.category.welcome = Benvenuto +help.category.your_faction = La Tua Fazione +help.category.power_land = Potere e Territorio +help.category.diplomacy = Diplomazia +help.category.combat = Combattimento e Sicurezza +help.category.economy = Economia +help.category.quick_ref = Riferimento Rapido + +# ========== Nomi Categorie Aiuto Admin ========== +help.category.admin_overview = Panoramica +help.category.admin_factions = Fazioni +help.category.admin_zones = Zone +help.category.admin_power = Potere +help.category.admin_economy = Economia +help.category.admin_config = Configurazione +help.category.admin_maintenance = Manutenzione +help.category.admin_reference = Riferimento + +# ========== Menu Principale ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = La Mia Fazione +main_menu.section_get_started = Inizia +main_menu.section_territory = Territorio +main_menu.section_browse = Esplora +main_menu.section_admin = Admin +main_menu.claim_hint = Usa /f claim per rivendicare territorio. + +# ========== Pagina Info Fazione ========== +faction_info.title = Info Fazione +faction_info.no_description = Nessuna descrizione impostata. +faction_info.status_open = Aperta +faction_info.status_invite_only = Solo su Invito +faction_info.status_raidable = Saccheggiabile +faction_info.status_protected = Protetta +faction_info.officers_more = +{0} altri +faction_info.power_header = Potere +faction_info.claims_header = Territori +faction_info.members_header = Membri +faction_info.relations_header = Relazioni +faction_info.status_header = Stato +faction_info.treasury_header = Tesoreria +faction_info.current_max = attuale / max +faction_info.claimed_max = rivendicati / max +faction_info.ally_enemy = alleati / nemici +faction_info.faction_balance = saldo fazione +faction_info.leader_label = Capo: +faction_info.officers_label = Ufficiali: +faction_info.view_members_btn = Vedi Membri +faction_info.relations_btn = Relazioni +faction_info.back_btn = Indietro + +# ========== Modale Rinomina ========== +rename.title = Rinomina Fazione +rename.current_label = Attuale: +rename.new_name_label = Nuovo Nome: +rename.no_permission = Non hai il permesso di rinominare la fazione. +rename.enter_name = Inserisci un nome per la fazione. +rename.too_short = Il nome della fazione deve avere almeno {0} caratteri. +rename.too_long = Il nome della fazione non può superare i {0} caratteri. +rename.same_name = È già il nome della tua fazione. +rename.name_taken = Esiste già una fazione con quel nome. +rename.success = Fazione rinominata da {0} a {1}! + +# ========== Modale Descrizione ========== +desc.title = Modifica Descrizione +desc.current_label = Attuale: +desc.new_desc_label = Nuova Descrizione: +desc.no_permission = Non hai il permesso di modificare la descrizione. +desc.display_none = (Nessuna) +desc.cleared = Descrizione della fazione cancellata. +desc.updated = Descrizione della fazione aggiornata! + +# ========== Modale Tag ========== +tag.title = Modifica Tag +tag.current_label = Attuale: +tag.instructions = Tag (1-5 caratteri, solo lettere e numeri): +tag.help_text = I tag appaiono nella chat e sulla mappa +tag.no_permission = Non hai il permesso di modificare il tag. +tag.display_none = (Nessuno) +tag.cleared = Tag della fazione cancellato. +tag.too_short = Il tag deve avere almeno {0} carattere. +tag.too_long = Il tag non può superare i {0} caratteri. +tag.invalid_format = Il tag può contenere solo lettere e numeri. +tag.same_tag = È già il tag della tua fazione. +tag.tag_taken = Esiste già una fazione con quel tag. +tag.success = Tag della fazione impostato su [{0}]! + +# ========== Pagina Pannello ========== +dashboard.title = Pannello della Fazione +dashboard.power_label = Potere +dashboard.land_label = Territori +dashboard.members_label = Membri +dashboard.online_label = Online +dashboard.allies_label = Alleati +dashboard.enemies_label = Nemici +dashboard.relations_label = Relazioni +dashboard.ally_enemy_label = alleati / nemici +dashboard.status_label = Stato +dashboard.invites_label = Inviti +dashboard.sent_requests_label = inviati / richieste +dashboard.treasury_label = Tesoreria +dashboard.upkeep_label = Mantenimento +dashboard.per_cycle = per ciclo +dashboard.your_wallet = Il Tuo Portafoglio +dashboard.personal_balance = saldo personale +dashboard.quick_actions = Azioni Rapide +dashboard.teleport_label = Teletrasporto +dashboard.territory_label = Territorio +dashboard.channel_label = Canale +dashboard.membership_label = Appartenenza +dashboard.recent_activity = Attività Recente +dashboard.view_all = Vedi Tutto +dashboard.income_24h = Entrate (24h) +dashboard.deposits_transfers_in = depositi, trasferimenti in entrata +dashboard.expenses_24h = Spese (24h) +dashboard.withdrawals_transfers_out = prelievi, trasferimenti in uscita +dashboard.faction_gone = La tua fazione non esiste più. +dashboard.available = {0} disponibili +dashboard.at_risk = A Rischio! +dashboard.online_count = {0} online +dashboard.status_invite = Invito +dashboard.in_grace = IN TOLLERANZA +dashboard.billable_chunks = {0} chunk fatturabili +dashboard.btn_home = Base +dashboard.btn_set_home = Imposta Base +dashboard.btn_claim = Rivendica +dashboard.chat_prefix = Chat: {0} +dashboard.btn_leave = Abbandona +dashboard.no_activity = Nessuna attività recente. +dashboard.time_now = ora +dashboard.time_minutes = {0}m fa +dashboard.time_hours = {0}h fa +dashboard.time_days = {0}g fa +dashboard.no_home_hint = La tua fazione non ha una base. Chiedi a un ufficiale di impostarne una. +dashboard.chat_mode_set = Modalità chat: {0} +dashboard.claim_success = Chunk rivendicato a ({0}, {1}) +dashboard.upkeep_in = tra {0} + +# ========== Pagina Principale Fazione ========== +main.no_faction = Nessuna Fazione +main.joined = Ti sei unito alla fazione! +main.join_failed = Impossibile unirsi alla fazione: {0} +main.invite_declined = Invito rifiutato. +main.cooldown = Teletrasporto in attesa! {0}s rimanenti. +main.world_not_found = Impossibile teletrasportarsi - mondo non trovato. +main.leave_failed = Impossibile abbandonare: {0} + +# ========== Etichette Condivise GUI ========== +common.faction_count = {0} fazioni +common.leader_label = Capo: {0} +common.sort_power = Potere +common.sort_members = Membri +common.page_format = {0}/{1} +common.own_faction = (Tu) +common.search = Cerca: +common.sort = Ordina: +common.prev = < Prec +common.next = Succ > +common.treasury_not_available = La tesoreria non è disponibile. + +# ========== Pagina Membri ========== +members.title = Membri +members.search_label = Cerca: +members.sort_label = Ordina: +members.prev_btn = < Prec +members.next_btn = Succ > +members.count = {0} membri +members.sort_role = Ruolo +members.sort_last_online = Ultimo Accesso +members.just_now = adesso +members.ago = {0} fa +members.never = Mai +members.member_not_found = Membro non trovato. +members.promoted = {0} promosso a {1}. +members.promote_failed = Impossibile promuovere: {0} +members.demoted = {0} retrocesso a {1}. +members.demote_failed = Impossibile retrocedere: {0} +members.kicked = {0} espulso dalla fazione. +members.kick_failed = Impossibile espellere: {0} +members.label_power = Potere: +members.label_joined = Iscritto: +members.label_last_death = Ultima Morte: +members.btn_promote = Promuovi +members.btn_demote = Retrocedi +members.btn_kick = Espelli +members.btn_make_leader = Nomina Capo +members.btn_profile = Profilo +members.self_label = (Tu) + +# ========== Pagina Esplora ========== +browser.title = Esplora Fazioni +browser.search_label = Cerca: +browser.sort_label = Ordina: +browser.prev_btn = < Prec +browser.next_btn = Succ > +browser.sort_name = Nome +browser.invalid_faction = Fazione non valida. +browser.label_power = potere +browser.label_claims = territori +browser.label_members = membri +browser.label_recruitment = Reclutamento: +browser.label_created = Creata: +browser.label_description = Descrizione: +browser.view_info_btn = Vedi Info +browser.label_leader = Capo: +browser.no_description = Nessuna descrizione impostata + +# ========== Pagina Classifica ========== +leaderboard.title = Classifica delle Fazioni +leaderboard.rank_by = Ordina per: +leaderboard.col_rank = # +leaderboard.col_faction = Fazione +leaderboard.col_claims = Territori +leaderboard.col_members = Membri +leaderboard.prev_btn = < Prec +leaderboard.next_btn = Succ > +leaderboard.sort_kd = U/M +leaderboard.sort_territory = Territorio +leaderboard.sort_balance = Saldo + +# ========== Pagina Info Giocatore ========== +playerinfo.title = Info Giocatore +playerinfo.first_joined_label = Prima iscrizione: +playerinfo.last_online_label = Ultimo accesso: +playerinfo.faction_label = Fazione: +playerinfo.role_label = Ruolo: +playerinfo.joined_label_static = Iscritto: +playerinfo.not_in_faction = Non fa parte di una fazione +playerinfo.power_header = Potere +playerinfo.current_max = attuale / max +playerinfo.combat_header = Combattimento +playerinfo.kills_deaths = uccisioni / morti +playerinfo.kdr_header = Rapporto U/M +playerinfo.membership_history = Cronologia Appartenenze +playerinfo.view_faction_btn = Vedi Fazione +playerinfo.back_btn = Indietro +playerinfo.now = Ora +playerinfo.history_count = {0} registri +playerinfo.joined_label = Iscritto: {0} +playerinfo.current = Attuale +playerinfo.left_label = Uscito: {0} +playerinfo.no_history = Nessuna cronologia di appartenenza +playerinfo.faction_gone = La fazione non esiste più. +playerinfo.reason_active = ATTIVO +playerinfo.reason_left = USCITO +playerinfo.reason_kicked = ESPULSO +playerinfo.reason_disbanded = SCIOLTA + +# ========== Pagina Relazioni ========== +relations.title = Relazioni +relations.tab_relations = Relazioni +relations.tab_pending = In Sospeso +relations.set_relation_btn = + Imposta Relazione +relations.prev_btn = < Prec +relations.next_btn = Succ > +relations.relation_count = {0} relazioni +relations.request_count = {0} richieste +relations.type_ally = Alleato +relations.type_enemy = Nemico +relations.type_incoming = In entrata +relations.type_outgoing = In uscita +relations.incoming_request = Richiesta in entrata +relations.outgoing_request = Richiesta in uscita +relations.empty_relations = Nessuna relazione ancora. +relations.empty_relations_hint = Nessuna relazione ancora. Clicca + IMPOSTA RELAZIONE per aggiungere alleati o nemici. +relations.empty_pending = Nessuna richiesta di alleanza in sospeso. +relations.today = Oggi +relations.one_day_ago = 1 giorno fa +relations.days_ago = {0} giorni fa +relations.now_neutral = Ora sei neutrale con {0}. +relations.now_enemies = Ora sei nemico di {0}! +relations.request_sent = Richiesta di alleanza inviata a {0}. +relations.now_allied = Ora sei alleato con {0}! +relations.request_declined = Richiesta di alleanza da {0} rifiutata. +relations.request_cancelled = Richiesta di alleanza a {0} annullata. +relations.failed = Fallito: {0} +relations.search_hint = Cerca una fazione per impostare la relazione +relations.no_results = Nessuna fazione trovata per '{0}' +relations.power_display = {0} potere +relations.member_count = {0} membri +relations.label_members = membri +relations.label_power = potere +relations.label_since = Dal: +relations.label_claims = Territori: +relations.label_direction = Direzione: +relations.btn_view = Vedi +relations.btn_neutral = Neutrale +relations.btn_enemy = Nemico +relations.btn_ally = Alleato +relations.btn_accept = Accetta +relations.btn_decline = Rifiuta +relations.btn_cancel = Annulla + +# ========== Pagina Impostazioni ========== +settings.title = Impostazioni Fazione +settings.general = Generali +settings.name_label = Nome: +settings.tag_label = Tag: +settings.desc_label = Desc: +settings.edit_btn = Modifica +settings.recruitment = Reclutamento +settings.status_label = Stato: +settings.home_location = Posizione Base +settings.location_label = Posizione: +settings.set_home_btn = Imposta Base +settings.teleport_btn = Teletrasporto +settings.delete_btn = Elimina +settings.optional_features = Funzionalità Opzionali +settings.configure_modules = Configura moduli opzionali. +settings.modules_btn = Moduli +settings.danger_zone = Zona Pericolosa +settings.irreversible = Questa azione è irreversibile. +settings.disband_btn = Sciogli Fazione +settings.lock_hint = Alcune opzioni potrebbero essere bloccate dal server e non accetteranno modifiche. +settings.territory_permissions = Permessi Territoriali +settings.col_out = Est +settings.col_ally = All +settings.col_mem = Mem +settings.col_off = Uff +settings.cat_building = COSTRUZIONE +settings.perm_break = Distruzione +settings.perm_place = Piazzamento +settings.cat_interaction = INTERAZIONE +settings.interaction_hint = (sottovoci disattivate quando Tutti è spento) +settings.perm_all = Tutti +settings.perm_door = Porta +settings.perm_chest = Cassa +settings.perm_bench = Banco +settings.perm_processing = Lavorazione +settings.perm_seat = Seduta +settings.perm_transport = Trasporto +settings.cat_other = ALTRO +settings.perm_crate = Uso Casse +settings.perm_npc_tame = Addomesticamento NPC +settings.perm_pve = Danni PvE +settings.appearance = Aspetto +settings.color_label = Colore: +settings.mob_spawning = Generazione Mob +settings.mob_spawning_hint = (sottovoci disattivate quando il principale è spento) +settings.mob_spawning_label = Generazione Mob +settings.hostile_mobs = Mob Ostili +settings.passive_mobs = Mob Passivi +settings.neutral_mobs = Mob Neutrali +settings.faction_settings = Impostazioni Fazione +settings.pvp_in_territory = PvP nel Territorio +settings.officers_can_edit = Gli ufficiali possono modificare +settings.leader_only = Solo il capo +settings.officers_only = Solo gli ufficiali e il capo possono modificare le impostazioni della fazione. +settings.display_none = (Nessuno) +settings.home_not_set = Non impostata +settings.no_permission = Non hai il permesso di modificare le impostazioni. +settings.only_leader_disband = Solo il capo può sciogliere la fazione. +settings.perm_locked = Questa impostazione è bloccata dal server. +settings.no_perm_edit = Non hai il permesso di modificare i permessi territoriali. +settings.only_leader_officers = Solo il capo può cambiare l'accesso degli ufficiali. +settings.pvp_enabled = Attivato +settings.pvp_disabled = Disattivato +settings.not_in_territory = Devi essere nel territorio della tua fazione per impostare la base. +settings.home_set = Base della fazione impostata nella tua posizione attuale! +settings.recruitment_set = Reclutamento impostato su {0}. +settings.home_no_set = La tua fazione non ha una base impostata. +settings.home_deleted = Base della fazione eliminata! + +# ========== Pagina Moduli ========== +modules.title = Moduli della Fazione +modules.description = Funzionalità opzionali per migliorare la tua fazione +modules.configure_btn = Configura +modules.back_btn = < Torna alle Impostazioni +modules.treasury_name = Tesoreria +modules.treasury_desc = Sistema bancario e economico della fazione +modules.raids_name = Incursioni +modules.raids_desc = Battaglie programmate tra fazioni +modules.levels_name = Livelli +modules.levels_desc = Progressione e XP della fazione +modules.war_name = Guerra +modules.war_desc = Dichiarazioni di guerra formali +modules.coming_soon = Prossimamente +modules.active = Attivo +modules.view_treasury = Vedi Tesoreria +modules.unavailable = Non disponibile +modules.no_economy = Nessun plugin economico rilevato +modules.disabled = Disattivato +modules.economy_not_available = Le funzionalità economiche non sono disponibili su questo server + +# ========== Pagina Tesoreria ========== +treasury.title = Tesoreria della Fazione +treasury.balance_label = Saldo +treasury.income_24h = Entrate (24h) +treasury.deposits_transfers_in = depositi, trasferimenti in entrata +treasury.expenses_24h = Spese (24h) +treasury.withdrawals_transfers_out = prelievi, trasferimenti in uscita +treasury.maintenance = MANUTENZIONE +treasury.runway_label = Autonomia: +treasury.add_funds = Aggiungi fondi +treasury.deposit_btn = Deposita +treasury.take_funds = Preleva fondi +treasury.withdraw_btn = Preleva +treasury.send_to_faction = Invia a fazione +treasury.transfer_btn = Trasferisci +treasury.treasury_config = Configurazione tesoreria +treasury.settings_btn = Impostazioni +treasury.recent_transactions = Transazioni Recenti +treasury.no_transactions = Nessuna transazione ancora +treasury.col_date = Data +treasury.col_type = Tipo +treasury.col_by = Da +treasury.col_amount = Importo +treasury.col_details = Dettagli +treasury.pay_now_btn = Paga Ora +treasury.cost_7d = 7g: +treasury.cost_14d = 14g: +treasury.cost_30d = 30g: +treasury.settings_title = Impostazioni Tesoreria +treasury.officer_permissions = PERMESSI UFFICIALI +treasury.allow_withdraw = Consenti agli Ufficiali di Prelevare +treasury.allow_transfer = Consenti agli Ufficiali di Trasferire +treasury.limits_section = LIMITI DI PRELIEVO E TRASFERIMENTO +treasury.max_per_withdrawal = Max per prelievo: +treasury.max_withdrawals_per = Max prelievi per periodo: +treasury.max_per_transfer = Max per trasferimento: +treasury.max_transfers_per = Max trasferimenti per periodo: +treasury.limit_period = Periodo limite (ore): +treasury.no_limit_hint = Imposta a 0 per nessun limite +treasury.upkeep_settings = IMPOSTAZIONI MANTENIMENTO +treasury.auto_pay_upkeep = Pagamento automatico mantenimento dalla tesoreria +treasury.back_btn = Indietro +treasury.upkeep_cost_format = {0} ogni {1}h +treasury.upkeep_time_left = {0} rimanenti +treasury.wallet_label = Il tuo portafoglio: {0} +treasury.treasury_label = Saldo tesoreria: {0} +treasury.chunks_detail = {0} gratuiti + {1} chunk fatturabili +treasury.cost_label = Costo: {0} +treasury.pending = In sospeso +treasury.auto_pay_on = Pagamento automatico: ATTIVO +treasury.auto_pay_off = Pagamento automatico: DISATTIVATO +treasury.runway_90_plus = 90+ giorni +treasury.runway_days = {0} giorni +treasury.runway_day = {0} giorno +treasury.runway_less_day = < 1 giorno +treasury.runway_no_funds = Nessun fondo +treasury.grace_expires = La tolleranza scade tra: {0} +treasury.missed_payments = Pagamenti mancati: {0} +treasury.pay_to_clear = Paga {0} per saldare la tolleranza +treasury.system = Sistema +treasury.type_deposit = Deposito +treasury.type_withdrawal = Prelievo +treasury.type_transfer_in = Trasferimento In Entrata +treasury.type_transfer_out = Trasferimento In Uscita +treasury.type_player_transfer = Trasferimento Giocatore +treasury.type_upkeep = Mantenimento +treasury.type_tax = Riscossione Tasse +treasury.type_war_cost = Costo di Guerra +treasury.type_raid_cost = Costo di Incursione +treasury.type_spoils = Bottino +treasury.type_admin = Rettifica Admin +treasury.deposit_title = Deposita nella Tesoreria +treasury.withdraw_title = Preleva dalla Tesoreria +treasury.fee_label = Commissione ({0}%) +treasury.confirm_deposit = Conferma Deposito +treasury.confirm_withdrawal = Conferma Prelievo +treasury.from_wallet = {0} dal portafoglio +treasury.to_wallet = {0} al portafoglio +treasury.enter_valid_amount = Inserisci un importo positivo valido. +treasury.insufficient_wallet = Fondi nel portafoglio insufficienti. Necessari {0}, disponibili {1}. +treasury.wallet_withdraw_failed = Impossibile prelevare dal tuo portafoglio. +treasury.deposit_failed_returned = Impossibile depositare. Denaro restituito. +treasury.deposited = Depositato {0} nella tesoreria. +treasury.deposited_fee = Depositato {0} nella tesoreria. (commissione: {1}) +treasury.no_withdraw_permission = Non hai il permesso di prelevare. +treasury.withdraw_denied = Prelievo negato: {0} +treasury.insufficient_treasury = Fondi insufficienti nella tesoreria. +treasury.withdraw_limit = Limite di prelievo superato. +treasury.withdraw_failed = Prelievo fallito: {0} +treasury.wallet_deposit_warn = Attenzione: Impossibile depositare nel tuo portafoglio. Contatta un amministratore. +treasury.withdrew = Prelevato {0} dalla tesoreria. +treasury.withdrew_fee = Prelevato {0} dalla tesoreria. (commissione: {1}, ricevuto: {2}) +treasury.search_hint = Cerca un giocatore o una fazione +treasury.no_results = Nessun risultato per '{0}' +treasury.tag_player = [Giocatore] +treasury.tag_faction = [Fazione] +treasury.source_online = Online +treasury.source_offline = Offline +treasury.source_player_db = Giocatore Hytale +treasury.no_transfer_permission = Non hai il permesso di trasferire. +treasury.transfer_denied = Trasferimento negato: {0} +treasury.invalid_target_faction = Fazione di destinazione non valida. +treasury.target_faction_gone = La fazione di destinazione non esiste più. +treasury.transfer_failed = Trasferimento fallito: {0} +treasury.transfer_failed_returned = Trasferimento fallito. Fondi restituiti. +treasury.transferred = Trasferito {0} a {1}. +treasury.invalid_target_player = Giocatore di destinazione non valido. +treasury.player_transfer_failed = Impossibile depositare nel portafoglio del giocatore. Trasferimento annullato. +treasury.leader_only_perms = Solo il capo può modificare i permessi della tesoreria. +treasury.leader_only_upkeep = Solo il capo può modificare le impostazioni di mantenimento. +treasury.invalid_limit = Numero non valido nei campi limite. Usa 0 per illimitato. + +# ========== Pagine di Conferma ========== +confirm.disband_title = Sciogli Fazione +confirm.disband_prompt = Sei sicuro di voler sciogliere +confirm.disband_warning = Questa azione non può essere annullata! +confirm.leave_title = Abbandona Fazione +confirm.leave_prompt = Sei sicuro di voler abbandonare +confirm.leave_warning = Perderai l'accesso al territorio della fazione. +confirm.leader_leave_title = Abbandona come Capo +confirm.leader_leave_prompt = Stai abbandonando +confirm.transfer_title = Trasferisci Leadership +confirm.transfer_prompt = Sei sicuro di voler trasferire la leadership a +confirm.transfer_warning = Diventerai un Ufficiale. +confirm.disband_not_leader = Solo il capo può sciogliere la fazione. +confirm.disbanded = La fazione '{0}' è stata sciolta. +confirm.disband_failed = Impossibile sciogliere la fazione. +confirm.succession_title = La leadership sarà trasferita a: +confirm.no_members_warning = ATTENZIONE: Nessun altro membro! +confirm.will_disband = Abbandonando si scioglierà la fazione permanentemente. +confirm.not_in_faction = Non fai parte di questa fazione. +confirm.not_leader_anymore = Non sei più il capo. +confirm.no_successor = Nessun successore disponibile. Usa lo scioglimento al suo posto. +confirm.transfer_failed = Impossibile trasferire la leadership: {0} +confirm.leader_left = Leadership trasferita a {0}. Hai abbandonato {1}. +confirm.leave_failed = Impossibile abbandonare la fazione: {0} +confirm.leader_cannot_leave = I capi non possono abbandonare. Trasferisci la leadership o sciogli la fazione. +confirm.left_faction = Hai abbandonato {0}. +confirm.faction_gone = La fazione non esiste più. +confirm.not_leader_transfer = Solo il capo può trasferire la leadership. +confirm.leadership_transferred = Leadership trasferita a {0}. + +# ========== Pagina Registro Attività ========== +logs.title = {0} - Registro Attività +logs.entry_count = {0} voci +logs.filter_label = Filtra: +logs.col_time = Orario +logs.col_type = Tipo +logs.col_message = Messaggio +logs.prev_btn = < Prec +logs.next_btn = Succ > +logs.all_types = Tutti i Tipi +logs.no_logs_type = Nessun registro di questo tipo. +logs.no_logs = Nessun registro attività ancora. +logs.time_just_now = adesso +logs.time_minute = {0} minuto fa +logs.time_minutes = {0} minuti fa +logs.time_hour = {0} ora fa +logs.time_hours = {0} ore fa +logs.time_day = {0} giorno fa +logs.time_days = {0} giorni fa +logs.time_week = {0} settimana fa +logs.time_weeks = {0} settimane fa +logs.type_member_join = Ingresso +logs.type_member_leave = Uscita +logs.type_member_kick = Espulsione +logs.type_member_promote = Promozione +logs.type_member_demote = Retrocessione +logs.type_claim = Rivendicazione +logs.type_unclaim = Rilascio +logs.type_overclaim = Conquista +logs.type_home_set = Base Impostata +logs.type_relation_ally = Alleato +logs.type_relation_enemy = Nemico +logs.type_relation_neutral = Neutrale +logs.type_leader_transfer = Trasferimento +logs.type_settings_change = Impostazioni +logs.type_power_change = Potere +logs.type_economy = Economia +logs.type_admin_power = Potere Admin + +# Modelli messaggi registro (i18n per il contenuto del registro attività) +# Azioni dei giocatori +logs.msg_faction_created = {0} ha creato la fazione +logs.msg_member_joined = {0} si è unito alla fazione +logs.msg_member_left = {0} ha abbandonato la fazione +logs.msg_member_kicked = {0} è stato espulso +logs.msg_member_promoted = {0} promosso a {1} +logs.msg_member_demoted = {0} retrocesso a {1} +logs.msg_leader_transferred = Leadership trasferita a {0} +logs.msg_leader_left_transfer = {0} è uscito, {1} è ora il capo +logs.msg_relation_set = Impostato {0} come {1} +# Territorio +logs.msg_claimed = Chunk rivendicato a {0}, {1} in {2} +logs.msg_unclaimed = Chunk rilasciato a {0}, {1} in {2} +logs.msg_overclaim_lost = Perso chunk a {0}, {1} in favore di {2} +logs.msg_overclaim_taken = Chunk conquistato a {0}, {1} da {2} +logs.msg_all_unclaimed = Tutto il territorio rilasciato +logs.msg_claim_removed_world = Territorio in '{0}' rimosso (il mondo non consente rivendicazioni) +logs.msg_claims_lost_upkeep = Persi {0} territori per mancato mantenimento ({1} pagamenti mancati) +logs.msg_claims_removed_inactive = {0} territori rimossi per inattività ({1} giorni) +# Base +logs.msg_home_set = Base impostata +logs.msg_home_cleared = Base cancellata +logs.msg_home_cleared_world = Base in '{0}' cancellata (il mondo non consente rivendicazioni) +# Impostazioni +logs.msg_renamed = Rinominata da '{0}' a '{1}' +logs.msg_set_open = Fazione impostata come aperta +logs.msg_set_closed = Fazione impostata come solo su invito +logs.msg_desc_set = Descrizione impostata +logs.msg_desc_cleared = Descrizione cancellata +logs.msg_color_changed = Colore cambiato in '{0}' +# Economia +logs.msg_deposit = Deposito: {0} (+{1}) +logs.msg_withdrawal = Prelievo: {0} (-{1}) +logs.msg_upkeep_paid = Mantenimento pagato: {0} ({1} chunk fatturabili) +logs.msg_upkeep_grace_started = Mantenimento fallito: periodo di tolleranza avviato ({0}h) +logs.msg_upkeep_missed = Mantenimento mancato (pagamento {0}), tolleranza scade tra {1} +logs.msg_upkeep_manual = Mantenimento pagato manualmente: {0} ({1} chunk fatturabili, tolleranza saldato) +# Potere admin +logs.msg_admin_power_set = Admin ha impostato il potere di {0} a {1} (era {2}) +logs.msg_admin_power_add = Admin ha aggiunto {0} potere a {1} ({2} -> {3}) +logs.msg_admin_power_remove = Admin ha rimosso {0} potere da {1} ({2} -> {3}) +logs.msg_admin_power_reset = Admin ha ripristinato il potere di {0} a {1} (era {2}) +logs.msg_admin_power_adjusted = Admin ha regolato il potere di {0} di {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin ha impostato il potere max di {0} a {1} (era {2}) +logs.msg_admin_maxpower_reset = Admin ha ripristinato il potere max di {0} al valore predefinito ({1}) +logs.msg_admin_powerloss_enabled = Admin ha attivato la perdita di potere per {0} +logs.msg_admin_powerloss_disabled = Admin ha disattivato la perdita di potere per {0} +logs.msg_admin_decay_enabled = Admin ha attivato l'esenzione dal decadimento territori per {0} +logs.msg_admin_decay_disabled = Admin ha disattivato l'esenzione dal decadimento territori per {0} +logs.msg_admin_kd_reset = Admin ha ripristinato U/M per {0} +logs.msg_admin_power_set_all = Admin ha impostato il potere di tutti i {0} membri a {1} +logs.msg_admin_power_add_all = Admin ha aggiunto {0} potere a tutti i {1} membri +logs.msg_admin_power_remove_all = Admin ha rimosso {0} potere da tutti i {1} membri +logs.msg_admin_power_reset_all = Admin ha ripristinato il potere di tutti i {0} membri +logs.msg_admin_power_adjusted_all = Admin ha regolato il potere di tutti i {0} membri di {1} +# Admin fazione +logs.msg_admin_kicked = [Admin] {0} è stato espulso +logs.msg_admin_role_set = [Admin] Ruolo di {0} impostato a {1} +logs.msg_admin_leader_kick = [Admin] Leadership trasferita da {0} a {1} (espulsione admin) +logs.msg_admin_econ_added = Admin ha aggiunto: {0} (saldo: {1}) +logs.msg_admin_econ_deducted = Admin ha dedotto: {0} (saldo: {1}) +logs.msg_admin_econ_set = Admin ha impostato il saldo a {0} (era {1}) +# Importazione +logs.msg_left_import = {0} è uscito (importato in un'altra fazione) +logs.msg_leader_import_transfer = {0} è diventato capo (precedente capo importato in un'altra fazione) +logs.msg_imported_from = Fazione importata da {0} + +# ========== Pagina Chat ========== +chat.title = Chat della Fazione +chat.tab_faction = Fazione +chat.tab_ally = Alleato +chat.send_btn = Invia +chat.placeholder = Scrivi un messaggio... +chat.no_messages = Nessun messaggio ancora. +chat.no_ally_permission = Non hai il permesso per la chat alleata. +chat.no_permission = Nessun permesso. +chat.faction_gone = La tua fazione non esiste più. +chat.time_now = ora +chat.time_minutes = {0}m +chat.time_hours = {0}h + +# ========== Pagina Inviti ========== +invites.title = Inviti +invites.tab_outgoing = In Uscita +invites.tab_requests = Richieste +invites.prev_btn = < Prec +invites.next_btn = Succ > +invites.invite_count = {0} inviti +invites.request_count = {0} richieste +invites.invited_by = Invitato da: {0} +invites.no_message = Nessun messaggio +invites.expires = Scade: {0} +invites.type_outgoing = In Uscita +invites.type_request = Richiesta +invites.invited_by_label = Invitato da: +invites.empty_outgoing = Nessun invito in uscita. Usa /f invite per invitare qualcuno. +invites.empty_requests = Nessuna richiesta di adesione. I giocatori possono richiedere di unirsi con /f request. +invites.invalid_player = Giocatore non valido. +invites.cancelled_invite = Invito a {0} annullato. +invites.player_joined = {0} si è unito alla fazione! +invites.faction_full = La fazione è piena. Impossibile accettare la richiesta. +invites.add_failed = Impossibile aggiungere il giocatore alla fazione. +invites.request_expired = Richiesta non trovata o scaduta. +invites.request_declined = Richiesta di adesione di {0} rifiutata. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}h +invites.label_message = Messaggio: +invites.btn_cancel = Annulla +invites.btn_accept = Accetta +invites.btn_decline = Rifiuta + +# ========== Pagina Mappa ========== +map.title = Mappa del Territorio +map.action_hint = Clic sinistro: Rivendica | Clic destro: Rilascia +map.legend_your = Tuo Territorio +map.legend_ally = Territorio Alleato +map.legend_enemy = Territorio Nemico +map.legend_other = Altra Fazione +map.legend_wilderness = Zona Selvaggia +map.legend_safe = Safe Zone +map.legend_war = War Zone +map.legend_you = Sei qui +map.position = La Tua Posizione: Chunk ({0}, {1}) +map.legend_protected = Protetto +map.claim_stats = Territori: {0}/{1} ({2} Disponibili) +map.overclaimed = CONQUISTATO da {0}! +map.power_display = Potere: {0}/{1} +map.join_to_claim = Unisciti a una fazione per rivendicare +map.claim_success = Chunk rivendicato a ({0}, {1})! +map.claim_not_in_faction = Devi far parte di una fazione per rivendicare territorio. +map.claim_not_officer = Solo gli ufficiali e i capi possono rivendicare territorio. +map.claim_already_yours = Possiedi già questo chunk. +map.claim_already_claimed = Questo chunk è già rivendicato da un'altra fazione. +map.claim_not_adjacent = Puoi rivendicare solo chunk adiacenti al tuo territorio. +map.claim_max = Hai raggiunto il limite massimo di territori. +map.claim_world_not_allowed = La rivendicazione non è permessa in questo mondo. +map.claim_orbisguard = Quest'area è protetta da OrbisGuard. +map.claim_failed = Impossibile rivendicare il chunk. +map.unclaim_success = Chunk rilasciato a ({0}, {1}). +map.unclaim_not_in_faction = Devi far parte di una fazione. +map.unclaim_not_officer = Solo gli ufficiali e i capi possono rilasciare territorio. +map.unclaim_not_claimed = Questo chunk non è rivendicato. +map.unclaim_not_yours = Questo chunk appartiene a un'altra fazione. +map.unclaim_home = Impossibile rilasciare il chunk contenente la base della fazione. +map.unclaim_failed = Impossibile rilasciare il chunk. +map.overclaim_success = Chunk nemico conquistato a ({0}, {1})! +map.overclaim_not_in_faction = Devi far parte di una fazione. +map.overclaim_not_officer = Solo gli ufficiali e i capi possono conquistare territorio. +map.overclaim_already_yours = Possiedi già questo chunk. +map.overclaim_ally = Non puoi conquistare territorio alleato. +map.overclaim_has_power = Questa fazione ha abbastanza potere per difendere il proprio territorio. +map.overclaim_max = Hai raggiunto il limite massimo di territori. +map.overclaim_failed = Impossibile conquistare il chunk. +# ========== Pagina Creazione Fazione ========== +create.title = Crea la Tua Fazione +create.section_preview = Anteprima +create.section_basic_info = Info di Base +create.section_details = Dettagli +create.name_prefix = Nome: +create.faction_name_label = Nome Fazione * +create.tag_label = TAG (2-4 caratteri, automatico se vuoto) +create.desc_label = Descrizione (Opzionale) +create.recruitment_label = Reclutamento +create.section_faction_color = Colore Fazione +create.section_combat = Combattimento +create.create_btn = Crea Fazione +create.preview_name = Il Nome della Tua Fazione +create.leader_prefix = Capo: {0} +create.enter_name = Inserisci un nome per la fazione. +create.name_too_short = Il nome della fazione deve avere almeno {0} caratteri. +create.name_too_long = Il nome della fazione non può superare i {0} caratteri. +create.name_taken = Esiste già una fazione con questo nome. +create.tag_length = Il tag della fazione deve avere da {0} a {1} caratteri. +create.tag_format = Il tag della fazione può contenere solo lettere e numeri. +create.desc_too_long = La descrizione non può superare i {0} caratteri. +create.created = Fazione {0} creata con successo! +create.created_no_dashboard = Fazione creata ma impossibile aprire il pannello. +create.invalid_name = Nome della fazione non valido. +create.create_failed = Impossibile creare la fazione. + +# ========== Pagine Nuovo Giocatore ========== +newplayer.browse_title = Esplora Fazioni +newplayer.invites_title = Inviti e Richieste +newplayer.map_title = Mappa del Territorio +newplayer.view_only_badge = Modalità Solo Visualizzazione +newplayer.legend_label = Legenda: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Fazione +newplayer.legend_wilderness = Zona Selvaggia +newplayer.search_label = Cerca: +newplayer.sort_label = Ordina: +newplayer.prev_btn = < Prec +newplayer.next_btn = Succ > +newplayer.pending_count = {0} in sospeso +newplayer.received_header = INVITI RICEVUTI ({0}) +newplayer.requests_header = LE TUE RICHIESTE ({0}) +newplayer.no_invites = Nessun invito. Esplora le fazioni per trovarne una! +newplayer.no_requests = Nessuna richiesta in sospeso. +newplayer.invited_by = Invitato da: {0} +newplayer.member_count = {0} membri +newplayer.power_count = {0} potere +newplayer.claim_count = {0} territori +newplayer.awaiting_review = In attesa di esame +newplayer.expires_in = Scade tra {0}h +newplayer.time_just_now = adesso +newplayer.time_minutes = {0} min fa +newplayer.time_hours = {0}h fa +newplayer.time_days = {0}g fa +newplayer.invalid_faction = Fazione non valida. +newplayer.invite_expired = Questo invito è scaduto o è stato revocato. +newplayer.faction_gone = La fazione non esiste più. +newplayer.joined = Ti sei unito a {0}! +newplayer.faction_full = Questa fazione è piena. +newplayer.join_failed = Impossibile unirsi alla fazione. +newplayer.invite_declined = Invito rifiutato. +newplayer.request_cancelled = Richiesta di adesione a {0} annullata. +newplayer.faction_count = {0} fazioni +newplayer.browse_subtitle = Trova la tua nuova casa! +newplayer.sort_power = Potere +newplayer.sort_name = Nome +newplayer.sort_members = Membri +newplayer.btn_accept = Accetta +newplayer.btn_pending = In Sospeso +newplayer.btn_join = Unisciti +newplayer.btn_request = Richiedi +newplayer.invite_only_msg = Questa fazione è solo su invito. +newplayer.welcome_hint = Benvenuto! Usa /f per aprire il menu fazione. +newplayer.faction_open_hint = Questa fazione è aperta! Clicca UNISCITI al suo posto. +newplayer.already_requested = Hai già una richiesta in sospeso per questa fazione. +newplayer.has_invite_hint = Hai un invito da questa fazione! Clicca ACCETTA al suo posto. +newplayer.request_sent = Richiesta di adesione inviata a {0}! +newplayer.officer_review = Un ufficiale esaminerà la tua richiesta. +newplayer.map_hint = Solo Visualizzazione - Unisciti a una fazione per rivendicare territorio! + +# Impostazioni Giocatore +nav.player_settings = Giocatore +player_settings.title = Impostazioni Giocatore +player_settings.language_section = Lingua +player_settings.auto_detect = Rileva automaticamente dal client +player_settings.auto_detect_desc = Usa le impostazioni di lingua del tuo client di gioco +player_settings.language_label = Lingua +player_settings.notifications_section = Notifiche +player_settings.territory_alerts = Avvisi Territoriali +player_settings.territory_alerts_desc = Mostra notifiche quando si entra/esce dai territori +player_settings.death_announcements = Annunci di Morte +player_settings.death_announcements_desc = Ricevi annunci sulla posizione di morte dei membri della fazione +player_settings.power_notifications = Variazioni di Potere +player_settings.power_notifications_desc = Mostra messaggi quando il tuo potere cambia +player_settings.language_changed = Lingua cambiata in {0} +player_settings.pref_enabled = {0} attivato +player_settings.pref_disabled = {0} disattivato + +# ========== Pagine di Aiuto ========== +help.center_title = Centro Assistenza +help.getting_started_title = Per Iniziare +help.what_are_factions_title = Cosa Sono le Fazioni? +help.what_are_factions_1 = Le fazioni sono gruppi creati dai giocatori che collaborano +help.what_are_factions_2 = per rivendicare territorio, costruire basi e competere. +help.what_are_factions_bullet_1 = - Territorio protetto per costruire +help.what_are_factions_bullet_2 = - Compagni di squadra con cui giocare +help.what_are_factions_bullet_3 = - Accesso alla chat e alle funzionalità della fazione +help.joining_title = Unirsi a una Fazione +help.joining_desc = Ci sono diversi modi per unirsi a una fazione: +help.joining_bullet_1 = - Esplora - Trova fazioni aperte e clicca UNISCITI +help.joining_bullet_2 = - Inviti - Accetta gli inviti dagli ufficiali +help.joining_bullet_3 = - Richiesta - Chiedi di unirti alle fazioni solo su invito +help.creating_title = Creare una Fazione +help.creating_desc = Vai alla scheda Crea per fondare la tua fazione. +help.creating_bullet_1 = - Invita e gestisci i membri +help.creating_bullet_2 = - Rivendica e proteggi il territorio +help.commands_title = Comandi Rapidi +help.cmd_f = /f - Apri il menu fazione +help.cmd_f_list = /f list - Elenca tutte le fazioni +help.cmd_f_join = /f join - Unisciti a una fazione aperta +help.cmd_f_create = /f create - Crea una nuova fazione +help.cmd_f_help = /f help - Lista completa dei comandi +help.tip = Suggerimento: Esplora le fazioni per trovare un gruppo adatto a te! diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..7318e04c --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Configuratiesysteem + +HyperFactions gebruikt een modulair JSON-configuratiesysteem met 11 configuratiebestanden. + +## Admin Config-commando's + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin config` | Open de visuele config-editor-GUI | +| `/f admin reload` | Herlaad alle configuratiebestanden van schijf | +| `/f admin sync` | Synchroniseer factiedata naar opslag | + +## Configuratiebestanden + +| Bestand | Inhoud | +|---------|--------| +| `factions.json` | Rollen, power, claims, gevecht, relaties | +| `server.json` | Teleport, automatisch opslaan, berichten, GUI, permissies | +| `economy.json` | Schatkist, onderhoud, transactie-instellingen | +| `backup.json` | Backuprotatie en bewaarinstellingen | +| `chat.json` | Factie- en bondgenotenchat-opmaak | +| `debug.json` | Debug-logcategorieën | +| `faction-permissions.json` | Standaard permissies per rol | +| `announcements.json` | Evenementuitzendingen en gebiedsmeldingen | +| `gravestones.json` | Gravestone-integratie-instellingen | +| `worldmap.json` | Wereldkaart-verversingsmodi | +| `worlds.json` | Per-wereld gedragsoverschrijvingen | + +>[!TIP] De config-GUI biedt een visuele editor met beschrijvingen voor elke instelling. Wijzigingen worden direct opgeslagen, maar sommige vereisen `/f admin reload` om volledig van kracht te worden. + +## Configuratielocatie + +Alle bestanden zijn opgeslagen in: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Handmatige JSON-bewerkingen vereisen `/f admin reload` om toe te passen. Ongeldige JSON zorgt ervoor dat het bestand wordt overgeslagen met een waarschuwing in het serverlog. + +>[!NOTE] De configuratieversie wordt bijgehouden in `server.json`. De plugin migreert oudere configuraties automatisch bij het opstarten. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..5acee392 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Per-wereld Instellingen + +HyperFactions ondersteunt per-wereld configuratie voor claimen, PvP en beschermingsgedrag. + +## Wereldcommando's + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin world list` | Toon alle wereldoverschrijvingen | +| `/f admin world info ` | Toon instellingen voor een wereld | +| `/f admin world set ` | Stel een instelling in | +| `/f admin world reset ` | Reset wereld naar standaardwaarden | + +## Beschikbare Instellingen + +| Instelling | Type | Beschrijving | +|------------|------|-------------| +| claiming_enabled | boolean | Sta factieclaims toe in deze wereld | +| pvp_enabled | boolean | Sta PvP-gevecht toe in deze wereld | +| power_loss | boolean | Pas powerverlies toe bij overlijden | +| build_protection | boolean | Dwing claimbouwbescherming af | +| explosion_protection | boolean | Bescherm claims tegen explosies | + +## Wereld Whitelist / Blacklist + +Bepaal welke werelden factiefuncties toestaan via het `worlds.json` configuratiebestand: + +- **Whitelist-modus**: Alleen vermelde werelden staan claimen toe +- **Blacklist-modus**: Alle werelden staan claimen toe behalve de vermelde + +>[!INFO] Wereldinstellingen worden opgeslagen in `worlds.json` en overschrijven de globale standaardwaarden uit `factions.json`. + +## Voorbeelden + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- herstel alle standaardwaarden + +>[!TIP] Schakel claimen uit in creative- of lobbywerelden om het factiesysteem gericht te houden op survival-gameplay. + +>[!NOTE] Per-wereld instellingen hebben prioriteit boven globale configuratie, maar worden overschreven door zonevlaggen binnen die wereld. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..e37a27eb --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Schatkistbeheer + +Admincommando's voor het beheren van factieschatkisten. Vereist de `hyperfactions.admin.economy` permissie. + +## Schatkistcommando's + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin economy balance ` | Bekijk factieschatkistsaldo | +| `/f admin economy set ` | Stel exact saldo in | +| `/f admin economy add ` | Voeg geld toe aan schatkist | +| `/f admin economy take ` | Verwijder geld uit schatkist | +| `/f admin economy reset ` | Reset schatkist naar nul | + +## Voorbeelden + +- `/f admin economy balance Vikings` -- controleer saldo +- `/f admin economy set Vikings 5000` -- stel in op 5000 +- `/f admin economy add Vikings 1000` -- stort 1000 +- `/f admin economy take Vikings 500` -- neem 500 op +- `/f admin economy reset Vikings` -- zet saldo op nul + +>[!TIP] Gebruik `/f admin info ` om het volledige economie-overzicht te bekijken, inclusief transactiegeschiedenis naast het schatkistsaldo. + +## Gebruiksscenario's + +| Scenario | Commando | +|----------|---------| +| Evenementprijzenverdeling | `economy add ` | +| Straf voor regelovertreding | `economy take ` | +| Economie-reset na wipe | `economy reset ` | +| Compensatie voor bugs | `economy add ` | + +>[!WARNING] Schatkistwijzigingen worden gelogd in de transactiegeschiedenis van de factie. Adminwijzigingen worden vastgelegd met de naam van de admin voor verantwoording. + +>[!NOTE] Alle economie-admincommando's werken zelfs wanneer de economiemodule is uitgeschakeld in de configuratie. De data wordt opgeslagen ongeacht de modulestatus. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..9aae88b4 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Onderhoudsbeheer + +Factieonderhoud brengt facties periodiek kosten in rekening op basis van hun grondgebied en ledenaantal. + +## Admin Besturingselementen + +Onderhoudsinstellingen worden beheerd via het economie-configuratiebestand of de admin-config-GUI. + +`/f admin config` +Open de config-editor en navigeer naar economie-instellingen om onderhoudswaarden aan te passen. + +## Standaard Onderhoudsinstellingen + +| Instelling | Standaard | Beschrijving | +|------------|-----------|-------------| +| Onderhoud ingeschakeld | false | Hoofdschakelaar voor het systeem | +| Onderhoudsinterval | 24u | Hoe vaak onderhoud wordt geheven | +| Per-claim kosten | 5.0 | Kosten per geclaimde chunk per cyclus | +| Per-lid kosten | 0.0 | Kosten per lid per cyclus | +| Respijtperiode | 72u | Nieuwe facties zijn vrijgesteld | +| Ontbinden bij faillissement | false | Automatisch ontbinden als niet kan betalen | + +## Onderhoud Monitoren + +Gebruik `/f admin info ` om te zien: +- Huidig schatkistsaldo +- Geschatte onderhoudskosten per cyclus +- Tijd tot volgende onderhoudsheffing +- Of de factie onderhoud kan betalen + +>[!TIP] Bekijk economiestatistieken van alle facties vanuit het admin-dashboard om facties met faillissementsrisico te identificeren voordat onderhoud in werking treedt. + +>[!INFO] Onderhoudsconfiguratie is opgeslagen in `economy.json`. Wijzigingen via de config-GUI worden van kracht na herladen met `/f admin reload`. + +## Onderhoudsformule + +**Totaal onderhoud** = (geclaimde chunks x per-claim kosten) + (ledenaantal x per-lid kosten) + +>[!WARNING] Het inschakelen van onderhoud op een server met bestaande facties kan onverwachte faillissementen veroorzaken. Overweeg een respijtperiode in te stellen of de wijziging van tevoren aan te kondigen. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..e6c0e8ea --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Geforceerd Ontbinden + +Admins kunnen elke factie geforceerd ontbinden, ongeacht de wensen van de leider. + +## Commando + +`/f admin disband ` +Ontbindt de genoemde factie geforceerd. Er verschijnt een bevestigingsvraag voordat de actie wordt uitgevoerd. + +**Permissie**: `hyperfactions.admin.disband` + +>[!WARNING] Het ontbinden van een factie is **onomkeerbaar**. Alle claims worden vrijgegeven, alle leden worden verwijderd en de factie houdt op te bestaan. Maak eerst een backup. + +## Gevolgen + +Wanneer een factie wordt ontbonden: + +| Effect | Beschrijving | +|--------|-------------| +| **Claims** | Al het grondgebied wordt direct vrijgegeven | +| **Leden** | Alle spelers worden van de ledenlijst verwijderd | +| **Relaties** | Alle bondgenootschappen en vijandschappen worden gewist | +| **Schatkist** | Afgehandeld volgens economie-configuratie | +| **Thuis** | Factiehuis wordt verwijderd | +| **Chat** | Factiechatgeschiedenis wordt verwijderd | + +## Best Practices + +1. Voer altijd `/f admin backup create` uit voor het ontbinden +2. Informeer factieleden wanneer mogelijk +3. Documenteer de reden voor serveradministratie +4. Controleer `/f admin info ` om te beoordelen voor actie + +>[!TIP] Als het probleem bij een specifiek lid ligt, overweeg dan om via de admin-facties-GUI het leiderschap over te dragen in plaats van de hele factie te ontbinden. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..142b1f93 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Facties Beheren + +Admins kunnen elke factie op de server inspecteren en wijzigen via het dashboard of commando's. + +## Facties Bekijken + +`/f admin factions` +Opent de admin-factiebrowser. Bekijk alle facties met ledenaantallen, powerniveaus en grondgebied. + +`/f admin info ` +Opent het admin-infopaneel voor een specifieke factie met volledige details en beheeropties. + +## Factie-instellingen Wijzigen + +Met de `hyperfactions.admin.modify` permissie kun je: + +- **Hernoemen** van een factie om conflicten op te lossen +- **Kleur instellen** om weergaveproblemen te verhelpen +- **Open/gesloten schakelen** om het toetredingsbeleid te overschrijven +- **Beschrijving bewerken** voor moderatiedoeleinden + +>[!TIP] Gebruik `/f admin who ` om op te zoeken bij welke factie een specifieke speler hoort en hun details te bekijken. + +## Leden en Relaties Bekijken + +Het admin-infopaneel toont: + +| Sectie | Details | +|--------|---------| +| **Leden** | Volledige ledenlijst met rollen en laatst gezien | +| **Relaties** | Alle bondgenoot-, vijand- en neutrale verhoudingen | +| **Grondgebied** | Geclaimde chunks en powerbalans | +| **Economie** | Schatkistsaldo en transactielog | + +>[!NOTE] Admin-inspectiecommando's melden de bekeken factie niet. Alleen wijzigingen activeren meldingen. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..ea561d30 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Backupsysteem + +HyperFactions bevat automatische en handmatige backups met GFS (Grandfather-Father-Son) rotatie. + +## Backupcommando's + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin backup create` | Maak nu een handmatige backup | +| `/f admin backup list` | Toon alle beschikbare backups | +| `/f admin backup restore ` | Herstel vanuit een backup | +| `/f admin backup delete ` | Verwijder een specifieke backup | + +**Permissie**: `hyperfactions.admin.backup` + +## GFS Rotatiestandaarden + +| Type | Bewaarperiode | Beschrijving | +|------|---------------|-------------| +| Per uur | 24 | Laatste 24 uurlijkse snapshots | +| Dagelijks | 7 | Laatste 7 dagelijkse snapshots | +| Wekelijks | 4 | Laatste 4 wekelijkse snapshots | +| Handmatig | 10 | Handmatig gemaakte backups | +| Afsluiting | 5 | Gemaakt bij serverstop | + +>[!INFO] Afsluitingsbackups zijn standaard ingeschakeld (`onShutdown=true`). Ze leggen de laatste staat vast voordat de server stopt. + +## Backupinhoud + +Elk backup-ZIP-archief bevat: +- Alle factiedatabestanden +- Speler-powerdata +- Zonedefinities +- Chatgeschiedenis en economiedata +- Uitnodigings- en toetredingsverzoekdata +- Configuratiebestanden + +>[!WARNING] **Het herstellen van een backup is destructief.** Het vervangt alle huidige data door de inhoud van de backup. Alle wijzigingen na het maken van de backup gaan verloren. Maak altijd een verse backup voordat je herstelt. + +## Best Practices + +1. Maak een handmatige backup voor belangrijke adminacties +2. Bekijk backup-bewaarinstellingen in `backup.json` +3. Test eerst herstel op een testserver +4. Houd afsluitingsbackups ingeschakeld voor crashherstel diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..a74bec36 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Data Importeren + +Importeer factiedata van andere plugins om je server te migreren naar HyperFactions. + +## Importcommando + +`/f admin import [path] [flags]` + +**Permissie**: `hyperfactions.admin.use` + +## Ondersteunde Bronnen + +| Bron | Beschrijving | +|------|-------------| +| `elbaphfactions` | Importeer vanuit ElbaphFactions-data | +| `hyfactions` | Importeer vanuit HyFactions v1-data | + +## Importvlaggen + +| Vlag | Beschrijving | +|------|-------------| +| `--dry-run` | Valideer data zonder iets te importeren | +| `--overwrite` | Overschrijf bestaande facties met dezelfde naam | +| `--no-zones` | Sla zonedata over tijdens import | +| `--no-power` | Sla powerdata over tijdens import | + +>[!TIP] Voer altijd eerst uit met `--dry-run` om te bekijken wat er geïmporteerd wordt en dataproblemen te ontdekken voordat je wijzigingen doorvoert. + +## Importproces + +1. Er wordt automatisch een pre-import backup gemaakt +2. Spelernaam-koppelingen worden geladen +3. Facties, claims en zones worden geconverteerd +4. Data wordt gevalideerd en opgeslagen + +## Voorbeelden + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Het gebruik van `--overwrite` zal elke bestaande factie die dezelfde naam deelt met een geïmporteerde factie **vervangen**. Ledendata en claims worden overschreven. Voer eerst `--dry-run` uit om conflicten te identificeren. + +>[!NOTE] Sommige bronspecifieke data (bijv. werkpercelen, boerderijpercelen) heeft geen equivalent in HyperFactions en wordt als waarschuwingen gelogd tijdens de import. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..7984ac22 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Updatecontrole + +HyperFactions kan controleren op nieuwe versies en de HyperProtect-Mixin afhankelijkheid beheren. + +## Updatecommando's + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin update` | Controleer op HyperFactions-updates | +| `/f admin update mixin` | Controleer/download HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Schakel automatisch downloaden in/uit | +| `/f admin version` | Toon huidige versie en build-info | + +## Releasekanalen + +| Kanaal | Beschrijving | +|--------|-------------| +| **Stable** | Aanbevolen voor productieservers | +| **Pre-release** | Vroege toegang tot aankomende functies | + +>[!INFO] De updatecontrole meldt alleen nieuwe versies. Het installeert **niet** automatisch updates voor HyperFactions zelf. + +## HyperProtect-Mixin + +HyperProtect-Mixin is de aanbevolen beschermingsmixin die geavanceerde zonevlaggen inschakelt (explosies, brandverspreiding, inventaris behouden, enz.). + +- `/f admin update mixin` controleert op de nieuwste versie +en downloadt deze als er een nieuwere versie beschikbaar is +- Automatisch downloaden kan per server worden in- of uitgeschakeld + +>[!TIP] Na het downloaden van een nieuwe mixinversie is een serverherstart vereist om de wijzigingen van kracht te laten worden. + +## Terugdraaiprocedure + +Als een update problemen veroorzaakt: + +1. Stop de server +2. Vervang de plugin-JAR door de vorige versie +3. Start de server +4. Controleer de functionaliteit met `/f admin version` + +>[!WARNING] Downgraden kan een configuratiemigratiereset vereisen. Houd altijd backups bij voordat je update. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..5a474826 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Aan de Slag als Admin + +Welkom bij HyperFactions administratie. Deze gids behandelt je eerste stappen na het installeren van de plugin. + +## Het Admin Dashboard Openen + +`/f admin` +Opent de admin-dashboard-GUI met toegang tot alle beheertools, zone-editors en serverinstellingen. + +>[!INFO] Je hebt de **hyperfactions.admin.use** permissie of OP-status nodig om admincommando's te gebruiken. + +## Vereisten + +- **Met een permissieplugin**: Ken `hyperfactions.admin.use` toe +- **Zonder een permissieplugin**: De speler moet een +serveroperator zijn (`adminRequiresOp=true` standaard) + +## Eerste Stappen na Installatie + +1. Voer `/f admin` uit om je toegang te verifiëren +2. Open **Config** om de standaard factie-instellingen te bekijken +3. Maak een **SafeZone** bij de spawn met `/f admin safezone Spawn` +4. Maak optioneel **WarZones** aan voor PvP-arena's +5. Bekijk **Backup**-instellingen om dataveiligheid te waarborgen + +## Admin Mogelijkheden + +| Gebied | Wat je kunt doen | +|--------|-----------------| +| Facties | Inspecteer, wijzig of ontbind elke factie geforceerd | +| Zones | Maak SafeZones en WarZones aan met aangepaste vlaggen | +| Power | Overschrijf speler/factie-powerwaarden | +| Economie | Beheer factieschatkisten en onderhoud | +| Config | Bewerk instellingen live via GUI of herlaad van schijf | +| Backups | Maak backups, herstel en beheer ze | +| Imports | Migreer data van andere factieplugins | + +>[!TIP] Gebruik `/f admin --text` om chatgebaseerde uitvoer te krijgen in plaats van de GUI, handig voor console of automatisering. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..79780ee6 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Admin Permissies + +Alle adminfuncties worden afgeschermd door permissienodes in de `hyperfactions.admin` namespace. + +## Permissienodes + +| Permissie | Beschrijving | +|-----------|-------------| +| `hyperfactions.admin.*` | Verleent **alle** adminpermissies | +| `hyperfactions.admin.use` | Toegang tot het `/f admin` dashboard | +| `hyperfactions.admin.reload` | Herlaad configuratiebestanden | +| `hyperfactions.admin.debug` | Schakel debug-logcategorieën in/uit | +| `hyperfactions.admin.zones` | Maak zones aan, bewerk en verwijder ze | +| `hyperfactions.admin.disband` | Ontbind elke factie geforceerd | +| `hyperfactions.admin.modify` | Wijzig de instellingen van elke factie | +| `hyperfactions.admin.bypass.limits` | Omzeil claim- en powerlimieten | +| `hyperfactions.admin.backup` | Maak backups en herstel ze | +| `hyperfactions.admin.power` | Overschrijf speler-powerwaarden | +| `hyperfactions.admin.economy` | Beheer factieschatkisten | + +## Terugvalgedrag + +Wanneer er **geen permissieplugin** is geïnstalleerd, vallen adminpermissies terug op serveroperator (OP) status. Dit wordt bepaald door `adminRequiresOp` in de serverconfiguratie (standaard: `true`). + +>[!NOTE] De `hyperfactions.admin.*` wildcard verleent elke adminpermissie. Gebruik individuele nodes voor gedetailleerde controle over je staffteam. + +## Volgorde van Permissieresolutie + +1. **VaultUnlocked** provider (indien beschikbaar) +2. **HyperPerms** provider (indien beschikbaar) +3. **LuckPerms** provider (indien beschikbaar) +4. **OP-controle** voor admin-nodes (terugval) + +>[!WARNING] Zonder een permissieplugin en met `adminRequiresOp` uitgeschakeld, zijn admincommando's **open voor alle spelers**. Gebruik altijd een permissieplugin in productie. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..df86e408 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Power Admincommando's + +Overschrijf speler- en factie-powerwaarden. Alle commando's vereisen de `hyperfactions.admin.power` permissie. + +## Speler-powercommando's + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin power set ` | Stel exacte powerwaarde in | +| `/f admin power add ` | Voeg power toe aan speler | +| `/f admin power remove ` | Verwijder power van speler | +| `/f admin power reset ` | Reset naar standaard startpower | +| `/f admin power info ` | Bekijk gedetailleerd power-overzicht | + +## Hoe Power Facties Beïnvloedt + +De totale power van een factie is de som van de individuele power van alle leden. Gebiedsclaims vereisen voldoende totale power om te onderhouden. + +| Scenario | Effect | +|----------|--------| +| Power hoger ingesteld | Factie kan meer grondgebied claimen | +| Power lager ingesteld | Factie kan kwetsbaar worden voor overclaim | +| Power gereset | Speler keert terug naar standaard startwaarde | + +>[!WARNING] Het verlagen van de power van een speler kan ertoe leiden dat hun factie grondgebied verliest als de totale power onder het aantal geclaimde chunks zakt. + +## Voorbeelden + +- `/f admin power set Steve 50` -- instellen op exact 50 +- `/f admin power add Steve 10` -- verhogen met 10 +- `/f admin power remove Steve 5` -- verlagen met 5 +- `/f admin power reset Steve` -- terug naar standaard +- `/f admin power info Steve` -- toon volledig overzicht + +>[!TIP] Gebruik `/f admin power info ` om huidige power, max power en eventuele actieve overschrijvingen te bekijken voordat je wijzigingen aanbrengt. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..1f968f0a --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Power Overschrijvingen + +Speciale powercommando's die het gedrag van power wijzigen voor specifieke spelers of facties. + +## Overschrijvingscommando's + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin power setmax ` | Stel aangepast max power-plafond in | +| `/f admin power noloss ` | Schakel immuniteit voor sterfte-powerstraf in/uit | +| `/f admin power nodecay ` | Schakel immuniteit voor offline power-verval in/uit | +| `/f admin power info ` | Bekijk alle overschrijvingen en powerdetails | + +## Aangepaste Max Power + +`/f admin power setmax ` +Stelt een persoonlijk maximaal power-plafond in voor de speler, dat de serverstandaard overschrijft. + +>[!INFO] Het instellen van een aangepast maximum wijzigt de huidige power **niet**. Het verandert alleen het plafond. De speler moet nog steeds power verdienen tot de nieuwe limiet. + +## Geen-verlies Modus + +`/f admin power noloss ` +Schakelt immuniteit voor sterfte-powerverlies in of uit. Wanneer ingeschakeld, verliest de speler **geen** power bij overlijden. + +Handig voor: +- Beschermingsperiodes voor nieuwe spelers +- Evenementdeelnemers +- Staffleden + +## Geen-verval Modus + +`/f admin power nodecay ` +Schakelt immuniteit voor offline power-verval in of uit. Wanneer ingeschakeld, zal de power van de speler **niet** afnemen terwijl deze offline is. + +Handig voor: +- Spelers met verlengd verlof +- VIP-leden +- Seizoensgebonden bescherming + +## Power Info + +`/f admin power info ` +Toont een volledig overzicht: + +- Huidige power en max power +- Actieve overschrijvingen (noloss, nodecay, aangepast max) +- Laatste sterftijd en verloren power +- Bijdragepercentage aan de factie + +>[!TIP] Alle power-overschrijvingen blijven behouden over server-herstarts en worden opgeslagen in het databestand van de speler. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..be6c9536 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Admin Commandoreferentie + +Volledige lijst van alle `/f admin` subcommando's met syntax en vereiste permissies. + +## Dashboard en Algemeen + +| Commando | Permissie | +|----------|----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Factiebeheer + +| Commando | Permissie | +|----------|----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Zonebeheer + +| Commando | Permissie | +|----------|----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Power en Economie + +| Commando | Permissie | +|----------|----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Onderhoud + +| Commando | Permissie | +|----------|----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Alle permissienodes hebben het voorvoegsel `hyperfactions.` (bijv. `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..d397faaf --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Plugin Integraties + +HyperFactions integreert met diverse externe plugins via zachte afhankelijkheden. Alle integraties zijn optioneel en vallen gracelijk terug als ze niet beschikbaar zijn. + +## Integratiestatus Controleren + +`/f admin version` +Toont de huidige versie en gedetecteerde integraties. + +`/f admin integration` +Opent het integratiebeheervenster met gedetailleerde status voor elke gedetecteerde plugin. + +## Integratietabel + +| Plugin | Type | Beschrijving | +|--------|------|-------------| +| **HyperPerms** | Permissies | Volledig permissiesysteem met groepen, overerving en context | +| **LuckPerms** | Permissies | Alternatieve permissieprovider | +| **VaultUnlocked** | Permissies/Economie | Permissie- en economiebrug | +| **HyperProtect-Mixin** | Bescherming | Schakelt geavanceerde zonevlaggen in (explosies, brand, inventaris behouden) | +| **OrbisGuard-Mixins** | Bescherming | Alternatieve mixin voor zonevlaghandhaving | +| **PlaceholderAPI** | Placeholders | 49 factie-placeholders voor andere plugins | +| **WiFlow PlaceholderAPI** | Placeholders | Alternatieve placeholder-provider | +| **GravestonePlugin** | Dood | Grafsteentoegangscontrole in zones | +| **HyperEssentials** | Functies | Zonevlaggen voor homes, warps en kits | +| **KyuubiSoft Core** | Framework | Core-bibliotheekintegratie | +| **Sentry** | Monitoring | Foutopsporing en diagnostiek | + +## Prioriteit Permissieprovider + +1. **VaultUnlocked** (hoogste prioriteit) +2. **HyperPerms** +3. **LuckPerms** +4. **OP-terugval** (als geen provider gevonden) + +>[!INFO] Integraties worden eenmalig bij het opstarten gedetecteerd via reflectie. Resultaten worden gecached voor de sessie. Een serverherstart is vereist na het toevoegen of verwijderen van een geïntegreerde plugin. + +>[!TIP] Gebruik `/f admin debug toggle integration` om gedetailleerde integratielogging in te schakelen voor probleemoplossing. + +>[!NOTE] HyperProtect-Mixin is de **aanbevolen** beschermingsmixin. Zonder deze hebben 15 zonevlaggen geen effect. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..5b129312 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Zone Basis + +Zones zijn door admins beheerde gebieden met aangepaste regels die de normale factiegebiedsbescherming overschrijven. + +## Zonetypes + +- **SafeZone** -- Geen PvP, geen bouwen, geen schade. +Ideaal voor spawngebieden en handelscentra. +- **WarZone** -- PvP altijd ingeschakeld, geen bouwen. +Ideaal voor arena's en betwiste gevechtsgebieden. + +## Zones Aanmaken + +`/f admin safezone ` +Maakt een SafeZone aan en claimt je huidige chunk. + +`/f admin warzone ` +Maakt een WarZone aan en claimt je huidige chunk. + +Ga na het aanmaken in extra chunks staan en gebruik `/f admin zone claim ` om de zone uit te breiden. + +## Zonechunks Beheren + +`/f admin zone claim ` +Voeg de huidige chunk toe aan de genoemde zone. + +`/f admin zone unclaim ` +Verwijder de huidige chunk uit de genoemde zone. + +`/f admin zone radius ` +Claim een vierkant van chunks rondom je positie. + +## Zones Verwijderen + +`/f admin removezone ` +Verwijdert de zone permanent en geeft al haar geclaimde chunks vrij. + +>[!WARNING] Het verwijderen van een zone geeft al haar chunks direct vrij. Dit kan niet ongedaan worden gemaakt zonder een backup-herstel. + +>[!INFO] Zoneregels **overschrijven altijd** factiegebiedsregels. Een SafeZone in vijandelijk land is nog steeds veilig. diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..53b95523 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Zone Commandoreferentie + +Volledige referentie voor alle zonebeheercommando's. Alle vereisen de `hyperfactions.admin.zones` permissie. + +## Snel Aanmaken + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin safezone ` | Maak een SafeZone aan bij de huidige chunk | +| `/f admin warzone ` | Maak een WarZone aan bij de huidige chunk | +| `/f admin removezone ` | Verwijder een zone en geef chunks vrij | + +## Zonebeheer + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin zone create ` | Maak een zone aan (safezone/warzone) | +| `/f admin zone delete ` | Verwijder een zone | +| `/f admin zone claim ` | Voeg huidige chunk toe aan zone | +| `/f admin zone unclaim ` | Verwijder huidige chunk uit zone | +| `/f admin zone radius ` | Claim vierkante radius aan chunks | +| `/f admin zone list` | Toon alle zones met chunkaantallen | +| `/f admin zone notify ` | Schakel betreed/verlaat-berichten in/uit | +| `/f admin zone title upper/lower ` | Stel zonetiteltekst in | +| `/f admin zone properties ` | Open zone-eigenschappen-GUI | + +## Vlagbeheer + +| Commando | Beschrijving | +|----------|-------------| +| `/f admin zoneflag ` | Stel een specifieke vlag in | + +>[!TIP] Gebruik de zone-**eigenschappen-GUI** voor een visuele editor met schakelaars voor elke vlag, georganiseerd per categorie. + +## Voorbeelden + +- `/f admin safezone Spawn` -- maak spawnbescherming aan +- `/f admin zone radius Spawn 3` -- breid uit naar 7x7 chunks +- `/f admin zoneflag Spawn door_use true` -- sta deuren toe +- `/f admin zone notify Spawn true` -- toon betreedberichten diff --git a/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..a90464bd --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Zonevlaggen + +Zones ondersteunen **47 booleaanse vlaggen** verdeeld over 10 categorieën. Elke vlag regelt een specifiek gedrag binnen de zone. + +## Overzicht Vlagcategorieën + +| Categorie | Aantal | Belangrijkste Vlaggen | +|-----------|--------|----------------------| +| Gevecht | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Schade | 4 | fall_damage, explosion_damage, fire_spread | +| Dood | 2 | keep_inventory, power_loss | +| Bouwen | 4 | build_allowed, block_place, hammer_use | +| Interactie | 13 | door_use, container_use, bench_use, npc_tame | +| Transport | 3 | teleporter_use, portal_use, mount_entry | +| Items | 4 | item_drop, item_pickup, invincible_items | +| Mob Spawning | 5 | mob_spawning, hostile/passive/neutral | +| Mob Verwijderen | 4 | mob_clear, hostile/passive/neutral clear | +| Integratie | 5 | gravestone_access, show_on_map, essentials_homes | + +## Standaardwaarden (SafeZone vs WarZone) + +| Vlag | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Sommige vlaggen vereisen **HyperProtect-Mixin** om te functioneren (bijv. keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Zonder de mixin hebben deze vlaggen geen effect, zelfs als ze zijn ingeschakeld. + +## Vlaggen Instellen + +`/f admin zoneflag ` + +>[!TIP] Gebruik `/f admin zone properties ` voor een visuele schakel-editor gegroepeerd per categorie. diff --git a/src/main/resources/Server/Languages/nl-NL/help/combat/death.md b/src/main/resources/Server/Languages/nl-NL/help/combat/death.md new file mode 100644 index 00000000..4826a104 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Dood en Herstel + +De dood heeft echte gevolgen bij facties. Elk sterfgeval kost je persoonlijke power, wat het vermogen van je factie om grondgebied vast te houden verzwakt. + +## Powerverlies + +Elk sterfgeval kost -1.0 power van je persoonlijke totaal. Dit verlaagt de gecombineerde power van de factie. + +| Gebeurtenis | Powerwijziging | +|-------------|----------------| +| Sterfgeval (elke oorzaak) | -1.0 | +| Online regeneratie | +0.1 per minuut | +| Combat uitloggen | -1.0 (gedood) | + +>[!NOTE] Dit zijn standaardwaarden. Je serverbeheerder kan andere instellingen hebben geconfigureerd. + +## Voorbeeldscenario's + +*5 leden op 10.0 power elk = 50 totaal, 20 claims.* +*Eén lid sterft twee keer: 8.0 power, factietotaal 48.* +*Drie leden sterven elk één keer: totaal daalt naar 47.* + +>[!WARNING] Als je factiepower onder je claimaantal zakt, kunnen vijanden je grondgebied overclaimen. + +## Herstel + +Power regenereert met 0.1 per minuut terwijl je online bent. Het herstellen van 1.0 verloren power duurt ongeveer 10 minuten. Meerdere sterfgevallen stapelen, dus vermijd herhaalde gevechten. + +--- + +## Alle Soorten Sterfgevallen + +Powerverlies geldt voor alle sterfgevallen: PvP, mob-kills, valschade, verdrinking en elke andere oorzaak. Er is geen veilige manier om dood te gaan. + +>[!TIP] Stel een factiehuis in met /f sethome zodat leden zich snel kunnen hergroeperen na het sterven. diff --git a/src/main/resources/Server/Languages/nl-NL/help/combat/protection.md b/src/main/resources/Server/Languages/nl-NL/help/combat/protection.md new file mode 100644 index 00000000..b7bf1cba --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Gebiedsbescherming + +Geclaimed grondgebied biedt meerdere lagen van verdediging voor de bouwwerken en grondstoffen van je factie. + +## Blokbescherming + +Alleen factieleden kunnen blokken plaatsen of breken in je grondgebied. Vijanden en neutralen worden geblokkeerd van het aanpassen van wat dan ook. + +## Containerbescherming + +Kisten, vaten en andere containers zijn beveiligd. Alleen je factieleden kunnen opslag openen of ermee interacteren in geclaimde chunks. + +## Betreedmeldingen + +Wanneer een niet-lid je geclaimde grondgebied betreedt, ontvangen online factieleden een melding met de naam en locatie van de indringer. + +--- + +## Bondgenoottoegang + +Bondgenoten kunnen standaard geen blokken bouwen of breken in je grondgebied. Bondgenootschade is ook uitgeschakeld, zodat bondgenootspelers elkaar niet kunnen verwonden. + +>[!INFO] Grondgebied beschermt blokken, geen spelers. PvP in je eigen grondgebied hangt af van de relatie van de aanvaller met je factie. + +>[!TIP] Houd je claims verbonden en vermijd geïsoleerde chunks die moeilijker te verdedigen zijn. diff --git a/src/main/resources/Server/Languages/nl-NL/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/nl-NL/help/combat/spawn_protection.md new file mode 100644 index 00000000..8a56b542 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Spawnbescherming + +Na het respawnen van de dood ontvang je tijdelijke bescherming om spawncamping te voorkomen. + +## Hoe het Werkt + +- Bescherming duurt 5 seconden na respawn +- Je kunt geen schade oplopen gedurende deze periode +- Een visuele indicator toont je beschermde status + +## Bescherming Stopt + +Spawnbescherming eindigt vroegtijdig als je: + +- Een andere speler of entiteit aanvalt +- Van je spawnpositie beweegt + +Dit voorkomt misbruik. Je kunt anderen niet aanvallen terwijl je onkwetsbaar bent. Zodra je een actie onderneemt, stopt de bescherming en gelden normale gevechtsregels. + +--- + +>[!NOTE] Dit zijn standaardwaarden. Je serverbeheerder kan andere instellingen hebben geconfigureerd. + +>[!TIP] Gebruik je beschermingstijd om de situatie te beoordelen voordat je beweegt. diff --git a/src/main/resources/Server/Languages/nl-NL/help/combat/tagging.md b/src/main/resources/Server/Languages/nl-NL/help/combat/tagging.md new file mode 100644 index 00000000..01d81e33 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Combat Tagging + +Wanneer je een andere speler aanvalt of wordt aangevallen, word je combat-getagd voor 15 seconden. + +## Terwijl je Getagd Bent + +- Geen /f home of /f stuck teleports +- Geen server-teleportcommando's +- Tag reset bij elke nieuwe gevechtsactie +- Een timer toont je resterende tagduur + +--- + +## Uitlogstraf + +>[!WARNING] Uitloggen terwijl je combat-getagd bent doodt je personage en je verliest 1.0 power. + +Je items vallen waar je de verbinding hebt verbroken en vijanden kunnen ze plunderen. Wacht altijd tot de tag verloopt. + +## Hoe de Timer Werkt + +De combat-tagtimer verschijnt op het scherm wanneer je in gevecht gaat. Elke nieuwe klap reset deze naar 15 seconden. Zodra deze nul bereikt, worden alle restricties opgeheven. + +>[!NOTE] Dit zijn standaardwaarden. Je serverbeheerder kan andere instellingen hebben geconfigureerd. + +>[!TIP] Trek je terug en wacht de timer af als je moet teleporteren. diff --git a/src/main/resources/Server/Languages/nl-NL/help/combat/zones.md b/src/main/resources/Server/Languages/nl-NL/help/combat/zones.md new file mode 100644 index 00000000..08503b69 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Speciale Zones + +Admins kunnen gebieden aanwijzen met speciale regels die de normale factiegebiedsbescherming overschrijven. + +## SafeZone + +Geen PvP-schade, geen blokken breken door niet-admins. Ideaal voor spawngebieden, handelscentra en evenementlocaties. Spelers kunnen hier niet verwond worden. + +## WarZone + +PvP is altijd ingeschakeld. Geen blokbescherming van toepassing. Open gevechtsgebieden waar alles mag. Je ontvangt geen gebiedsbeschermingsvoordelen in een WarZone. + +--- + +## Zonevergelijking + +| Kenmerk | SafeZone | WarZone | Factieland | +|---------|----------|---------|------------| +| PvP | Uitgeschakeld | Altijd Aan | Relatiegebaseerd | +| Blokken Breken | Uitgeschakeld | Toegestaan | Alleen Leden | +| Containers | Beschermd | Open | Alleen Leden | +| Ideaal Voor | Spawn/Handel | Arena's | Bases | + +>[!NOTE] Zoneregels overschrijven altijd factiegebiedsregels. Een geclaimde chunk binnen een WarZone volgt WarZone-regels. + +>[!TIP] Controleer je gebiedskaart met /f map om zonegrenzen te bekijken. diff --git a/src/main/resources/Server/Languages/nl-NL/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/nl-NL/help/diplomacy/alliances.md new file mode 100644 index 00000000..7f821b85 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Bondgenootschappen Sluiten + +Bondgenootschappen zijn wederzijdse overeenkomsten tussen twee facties die bescherming en samenwerkingsvoordelen bieden. + +--- + +## Hoe je een Bondgenootschap Sluit + +`/f ally ` + +Stuurt een bondgenootschapsverzoek naar de doelfactie. Het bondgenootschap gaat pas in als beide partijen akkoord gaan. Een Officer of Leider van de andere factie moet ook hetzelfde commando uitvoeren gericht op jouw factie om te bevestigen. + +## Hoe je een Bondgenootschap Verbreekt + +`/f neutral ` + +Beide partijen kunnen eenzijdig een bondgenootschap beëindigen door de relatie naar neutraal te resetten. + +--- + +## Voordelen van een Bondgenootschap + +| Voordeel | Details | +|----------|---------| +| Geen friendly fire | Bondgenootspelers kunnen elkaar geen schade toebrengen | +| Gedeelde kaartzichtbaarheid | Bondgenootgebied wordt blauw weergegeven op de gebiedskaart | +| Gebiedsinteractie | Bondgenoten kunnen deuren, stoelen en transport gebruiken in je grondgebied | +| Bondgenotenchat | Wissel naar bondgenotenchat voor communicatie tussen facties | +| Overclaimbescherming | Bondgenoten kunnen elkaars grondgebied niet overclaimen | + +>[!NOTE] Je factie kan maximaal 10 bondgenootschappen tegelijk hebben. Kies je bondgenoten verstandig. + +--- + +## Bondgenootschapsetiquette + +>[!TIP] Communicatie is essentieel. Overweeg voordat je een bondgenootschapsverzoek stuurt om contact op te nemen met de leider van de andere factie om voorwaarden te bespreken. Een sterk bondgenootschap is gebouwd op wederzijds voordeel, niet alleen gemak. + +- Bondgenootschappen werken beide kanten op -- als je profiteert van bescherming, verwachten je bondgenoten hetzelfde +- Een bondgenootschap verbreken tijdens oorlogstijd kan de reputatie van je factie schaden +- Bondgenootfacties kunnen gebiedsclaims coördineren om verdedigbare grenzen te creëren diff --git a/src/main/resources/Server/Languages/nl-NL/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/nl-NL/help/diplomacy/enemies.md new file mode 100644 index 00000000..1dc76dde --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Vijandige Facties + +Een vijand verklaren is een eenzijdige actie die onmiddellijk PvP en territoriale agressie tegen de doelfactie inschakelt. Er is geen toestemming vereist. + +--- + +## Een Vijand Verklaren + +`/f enemy ` + +Markeert de doelfactie direct als je vijand. Dit gaat onmiddellijk in -- er is geen bevestiging van de andere kant nodig. Vereist Officer-rang of hoger. + +## Resetten naar Neutraal + +`/f neutral ` + +Beëindigt de vijandstatus en reset de relatie naar neutraal. Dit vereist ook Officer+ en gaat direct in. + +--- + +## Wat Vijandstatus Inschakelt + +| Effect | Details | +|--------|---------| +| PvP in grondgebied | Volledige PvP is ingeschakeld in het grondgebied van beide facties | +| Overclaiming | Je kunt hun chunks overclaimen als ze een powertekort hebben | +| Kaartmarkering | Vijandelijk grondgebied wordt rood weergegeven op de gebiedskaart | +| Geen bescherming | Standaard gebiedsbescherming voorkomt geen vijandelijke PvP | + +>[!WARNING] Een vijand verklaren is een serieuze beslissing. Hun leden kunnen ook tegen je vechten in je eigen grondgebied zodra je verklaart. + +--- + +## Strategische Overwegingen + +- Vijandverklaringen zijn eenzijdig -- je kunt verklaren zonder hun toestemming, maar zij zien jou ook als vijandig +- Controleer voor het verklaren de power van het doelwit met /f info. Als ze sterk zijn, kun je zelf grondgebied verliezen +- Verzwak vijanden door herhaaldelijk gevecht om hun power te laten dalen, en overclaim vervolgens hun land +- Er is geen limiet op het aantal vijanden dat je kunt hebben, maar op meerdere fronten vechten is riskant + +>[!TIP] Gebruik /f neutral om conflicten te de-escaleren. Soms is een strategische vrede waardevoller dan voortdurende oorlog. + +>[!NOTE] Als je een bondgenootschap hebt met een factie en ze als vijand verklaart, wordt het bondgenootschap eerst verbroken. diff --git a/src/main/resources/Server/Languages/nl-NL/help/diplomacy/relations.md b/src/main/resources/Server/Languages/nl-NL/help/diplomacy/relations.md new file mode 100644 index 00000000..8715e27e --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Factierelaties + +Elk paar facties heeft een diplomatieke relatie die bepaalt hoe ze met elkaar omgaan. Er zijn drie statussen: Bondgenoot, Vijand en Neutraal. + +--- + +## Relatievergelijking + +| Effect | Bondgenoot | Neutraal | Vijand | +|--------|-----------|----------|--------| +| PvP in grondgebied | Uitgeschakeld | Standaardregels | Ingeschakeld | +| Gebiedsbescherming | Wederzijdse bescherming | Standaardbescherming | Kan overclaimen indien verzwakt | +| Friendly fire | Uitgeschakeld | N.v.t. | Overal ingeschakeld | +| Kaartkleur | Blauw | Grijs | Rood | +| Hoe in te stellen | Wederzijdse overeenkomst | Standaardstatus | Eenzijdige verklaring | +| Chattoegang | Bondgenotenchatkanaal | Geen | Geen | + +--- + +## Relaties Bekijken + +`/f relations` + +Toont al je huidige bondgenootschappen, vijanden en openstaande bondgenootschapsverzoeken. + +## Hoe Relaties Werken + +- Neutraal is de standaardstatus tussen alle facties. Standaard serverregels zijn van toepassing. +- Een bondgenootschap vereist dat beide facties akkoord gaan. Beide partijen kunnen het eenzijdig verbreken. +- Vijand wordt eenzijdig verklaard. Geen overeenkomst nodig -- de andere factie wordt direct als vijand gemarkeerd. + +>[!INFO] Relaties worden beheerd door Officers en Leiders. Leden kunnen relaties bekijken maar niet wijzigen. + +>[!TIP] Gebruik /f relations regelmatig om het diplomatieke landschap bij te houden. Weten wie je vijanden zijn helpt je voor te bereiden op territoriale conflicten. diff --git a/src/main/resources/Server/Languages/nl-NL/help/economy/commands.md b/src/main/resources/Server/Languages/nl-NL/help/economy/commands.md new file mode 100644 index 00000000..bcae9e9f --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Economiecommando's + +Snelle referentie voor alle factie-economiecommando's. + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f balance | Bekijk schatkistsaldo | Iedereen | +| /f deposit (amount) | Storten in schatkist | Iedereen | +| /f withdraw (amount) | Opnemen uit schatkist | Officer+ | +| /f money transfer (faction) (amount) | Overmaken naar andere factie | Officer+ | +| /f money log [page] | Bekijk transactiegeschiedenis | Officer+ | + +--- + +## Commandoaliassen + +- /f balance kan ook gebruikt worden als /f bal +- /f deposit en /f withdraw accepteren decimale bedragen + +## Rolvereisten + +Opname- en overboekingscommando's zijn beperkt tot Officers en Leiders. Alle andere economiecommando's zijn beschikbaar voor elk factielid. + +>[!TIP] Gebruik /f money log om recente stortingen, opnames en overboekingen met tijdstempels te bekijken. diff --git a/src/main/resources/Server/Languages/nl-NL/help/economy/funds.md b/src/main/resources/Server/Languages/nl-NL/help/economy/funds.md new file mode 100644 index 00000000..2fb5f99c --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Geld Beheren + +Factieleden werken samen om de schatkist gevuld te houden door stortingen, opnames en overboekingen. + +## Storten + +Elk lid kan persoonlijke fondsen storten in de factieschatkist. + +`/f deposit ` +Stort van je persoonlijke saldo in de schatkist. + +## Opnemen + +Officers en de Leider kunnen geld opnemen terug naar hun persoonlijke saldo. + +`/f withdraw ` +Neem op uit de schatkist naar je saldo. (Officer+) + +## Overboeken + +Officers kunnen geld direct overboeken tussen factieschatkisten voor handelsdeals of diplomatie. + +`/f money transfer ` +Stuur geld naar de schatkist van een andere factie. (Officer+) + +--- + +## Kosten + +| Transactie | Kosten | +|------------|--------| +| Storting | 0% | +| Opname | 0% | +| Overboeking | 0% | + +>[!INFO] Kostentarieven zijn configureerbaar door de server en kunnen afwijken van de hierboven getoonde standaardwaarden. + +>[!TIP] Alle transacties worden gelogd. Gebruik /f money log om recente activiteit te bekijken. diff --git a/src/main/resources/Server/Languages/nl-NL/help/economy/treasury.md b/src/main/resources/Server/Languages/nl-NL/help/economy/treasury.md new file mode 100644 index 00000000..921f4c46 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Factieschatkist + +Elke factie heeft een gedeelde schatkist die dient als de bank van de factie. Geld wordt gebruikt voor onderhoudskosten, gebiedsbeheer en factieoperaties. + +## Startsaldo + +Nieuwe facties beginnen met 0 in hun schatkist. Leden moeten geld storten om reserves op te bouwen. + +## Wie Kan Beheren + +- Elk lid kan geld storten +- Officers en Leider kunnen opnemen en overboeken +- Leider heeft volledige schatkistcontrole + +--- + +`/f balance` +Controleer het huidige schatkistsaldo van je factie. Ook beschikbaar als /f bal. + +>[!TIP] Draag regelmatig bij om je factie gefinancierd te houden. Gebiedsonderhoudskosten kunnen een lege schatkist snel leegtrekken. + +>[!INFO] Alle schatkisttransacties worden gelogd en kunnen door officers worden bekeken. diff --git a/src/main/resources/Server/Languages/nl-NL/help/economy/upkeep.md b/src/main/resources/Server/Languages/nl-NL/help/economy/upkeep.md new file mode 100644 index 00000000..b28b95df --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Gebiedsonderhoud + +Facties moeten doorlopend onderhoud betalen om hun geclaimd grondgebied te behouden. Dit voorkomt landhamsteren en houdt de kaart dynamisch. + +## Onderhoudskosten + +| Instelling | Standaard | +|------------|-----------| +| Kosten per chunk | 2.0 per cyclus | +| Betalingsinterval | Elke 24 uur | +| Gratis chunks | 3 (geen kosten) | +| Schaalmodus | Vast tarief | + +>[!NOTE] Dit zijn standaardwaarden. Je serverbeheerder kan andere instellingen hebben geconfigureerd. + +Je eerste 3 chunks zijn gratis. Daarna kost elke extra geclaimde chunk 2.0 per betalingscyclus. + +## Automatisch Betalen + +Automatisch betalen is standaard ingeschakeld. Het systeem trekt automatisch onderhoud af van je schatkist bij elk interval. Geen handmatige actie nodig. + +--- + +## Respijtperiode + +Als je schatkist het onderhoud niet kan dekken, begint een respijtperiode van 48 uur. Een waarschuwing wordt 6 uur voor het verlies van claims verstuurd. + +>[!WARNING] Als onderhoud onbetaald blijft na de respijtperiode, verliest je factie 1 claim per cyclus totdat de kosten gedekt zijn of alle extra claims weg zijn. + +## Voorbeeld + +*Een factie met 8 claims betaalt voor 5 chunks (8 min 3 gratis). Tegen 2.0 per chunk is dat 10.0 per cyclus.* + +>[!TIP] Houd je schatkist boven je onderhoudskosten gevuld. Gebruik /f balance om je reserves te controleren. diff --git a/src/main/resources/Server/Languages/nl-NL/help/power_land/claiming.md b/src/main/resources/Server/Languages/nl-NL/help/power_land/claiming.md new file mode 100644 index 00000000..fb894a4e --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Grondgebied Claimen + +Een chunk claimen beschermt het onder de controle van je factie. Alleen factieleden kunnen bouwen, breken of containers openen in geclaimed grondgebied. + +--- + +## Hoe je Claimt + +`/f claim` + +Ga in de chunk staan die je wilt claimen en voer dit commando uit. De chunk is direct beschermd. Vereist Officer-rang of hoger. + +## Hoe je Unclaimt + +`/f unclaim` + +Geeft de chunk waar je in staat terug aan de wildernis. Vereist ook Officer+. + +--- + +## Claimregels + +| Regel | Standaard | +|-------|-----------| +| Powerkosten per claim | 2.0 power | +| Maximaal aantal claims | 100 per factie | +| Alleen aangrenzend | Nee (je kunt overal claimen) | + +>[!NOTE] Dit zijn standaardwaarden. Je serverbeheerder kan andere instellingen hebben geconfigureerd. + +>[!INFO] Elke claim kost 2.0 power om te onderhouden. Een factie met 50 totale power kan veilig maximaal 25 claims vasthouden. + +--- + +## Wat Bescherming Biedt + +Binnen geclaimed grondgebied wordt standaard het volgende afgedwongen: + +- Buitenstaanders kunnen geen blokken breken, plaatsen of interacteren +- Bondgenoten kunnen deuren, stoelen en transport gebruiken maar geen blokken breken of plaatsen +- Leden en Officers hebben volledige toegang om te bouwen, breken en alles te gebruiken +- Containertoegang (kisten, kratten) is beperkt tot alleen leden + +>[!TIP] Je kunt ook direct claimen vanaf de gebiedskaart. Open /f map en klik op ongeclaimde chunks om ze te claimen. + +>[!WARNING] Breid niet te veel uit. Als je factie power verliest door sterfgevallen, worden claims buiten je powerbudget kwetsbaar voor overclaiming. diff --git a/src/main/resources/Server/Languages/nl-NL/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/nl-NL/help/power_land/losing_territory.md new file mode 100644 index 00000000..3fc137d6 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Grondgebied Verliezen + +Wanneer de totale power van een factie onder de kosten van de claims zakt, wordt deze raidbaar. Vijanden kunnen chunks direct onder je vandaan overclaimen. + +--- + +## Hoe Overclaiming Werkt + +`/f overclaim` + +Een Officer of Leider van een vijandige factie gaat in jouw geclaimde chunk staan en voert dit commando uit. Als je factie een powertekort heeft, gaat de chunk over naar hun factie. + +## De Berekening + +Elke claim kost 2.0 power om te onderhouden. Als je totale power onder die drempel zakt, zijn de tekortchunks kwetsbaar. + +>[!NOTE] Dit zijn standaardwaarden. Je serverbeheerder kan andere instellingen hebben geconfigureerd. + +>[!WARNING] Overclaiming is permanent. Zodra een vijand een chunk overneemt, moet je het terugclaimen (of het overclaimen als zij verzwakken). + +--- + +## Voorbeeldscenario + +| Factor | Waarde | +|--------|--------| +| Leden | 5 spelers | +| Power per lid | 10 elk (start) | +| Totale power | 50 | +| Claims | 30 chunks | +| Benodigde power (30 x 2.0) | 60 | +| Tekort | 10 power te kort | + +In dit voorbeeld is de factie al raidbaar vanaf het begin. Vijanden kunnen tot 5 chunks overclaimen (10 tekort / 2.0 per claim) voordat de factie evenwicht bereikt. + +--- + +## Hoe je Overclaiming Voorkomt + +- Breid niet te veel uit -- houd de totale power altijd boven je claimkosten met een buffer +- Blijf actief -- power regenereert alleen terwijl je online bent (+0.1/min) +- Vermijd onnodige sterfgevallen -- elk sterfgeval kost 1.0 power +- Werf meer leden -- meer spelers betekent meer totale power +- Unclaim ongebruikte chunks -- maak power vrij met /f unclaim + +>[!TIP] Controleer je powerstatus regelmatig met /f power. Als je totale power dicht bij je claimkosten ligt, overweeg dan om minder belangrijke chunks te unclaimen voor een oorlog. diff --git a/src/main/resources/Server/Languages/nl-NL/help/power_land/territory_map.md b/src/main/resources/Server/Languages/nl-NL/help/power_land/territory_map.md new file mode 100644 index 00000000..5388c712 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# De Gebiedskaart + +De gebiedskaart geeft je een vogelperspectief van geclaimde chunks in je omgeving en toont welke facties het land om je heen beheersen. + +--- + +## De Kaart Openen + +`/f map` + +Opent de gebiedskaart-GUI gecentreerd op je huidige locatie. + +--- + +## Kleurlegenda + +| Kleur | Betekenis | +|-------|-----------| +| [#55FF55] De kleur van je factie | Grondgebied geclaimed door jouw factie | +| [#5555FF] Blauw | Grondgebied van bondgenootfactie | +| [#FF5555] Rood | Grondgebied van vijandige factie | +| [#AAAAAA] Grijs | Grondgebied van neutrale factie | +| [#333333] Donker | Wildernis (ongeclaimed land) | +| [#FFAA00] Goud | Speciale zones (SafeZone, WarZone) | + +>[!INFO] De kleur van je factie op de kaart komt overeen met de kleur die je hebt ingesteld bij de factiekleurinstelling. Bondgenoten en vijanden gebruiken vaste kleuren voor gemakkelijke herkenning. + +--- + +## Klik om te Claimen + +De kaart is niet alleen om te bekijken -- je kunt er direct mee interacteren. + +- Klik op een ongeclaimde chunk om deze te claimen (vereist Officer+-rang en voldoende power) +- Klik op een geclaimde chunk om te zien welke factie deze bezit +- Scroll of pan om het gebied om je heen te verkennen + +>[!TIP] De kaart is de makkelijkste manier om je gebiedsuitbreiding te plannen. Zoek naar ongeclaimde gebieden bij je basis en claim strategisch om een aaneengesloten grens te creëren. + +>[!NOTE] De kaart toont een vast gebied rondom je positie. Verplaats je naar een andere locatie en open de kaart opnieuw om andere delen van de wereld te zien. diff --git a/src/main/resources/Server/Languages/nl-NL/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/nl-NL/help/power_land/understanding_power.md new file mode 100644 index 00000000..68b43dea --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Power Begrijpen + +Power is de kernresource die bepaalt hoeveel grondgebied je factie kan vasthouden. Elke speler heeft persoonlijke power die bijdraagt aan het factietotaal. + +--- + +## Standaard Powerwaarden + +| Instelling | Waarde | +|------------|--------| +| Maximale power per speler | 20 | +| Startpower | 10 | +| Sterfstraf | -1.0 per sterfgeval | +| Killbeloning | 0.0 | +| Regeneratiesnelheid | +0.1 per minuut (terwijl online) | +| Powerkosten per claim | 2.0 | +| Uitloggen terwijl getagd | -1.0 extra | + +>[!NOTE] Dit zijn standaardwaarden. Je serverbeheerder kan andere instellingen hebben geconfigureerd. + +## Hoe het Werkt + +De totale power van je factie is de som van de persoonlijke power van elk lid. Je vereiste power is het aantal claims vermenigvuldigd met 2.0. Zolang de totale power boven de vereiste power blijft, is je grondgebied veilig. + +>[!INFO] Power regenereert passief met 0.1 per minuut terwijl je online bent. Met die snelheid duurt het herstellen van 1.0 power ongeveer 10 minuten. + +--- + +## Je Power Controleren + +`/f power` + +Toont je persoonlijke power, de totale power van je factie en hoeveel er nodig is om de huidige claims te onderhouden. + +## De Gevarenzone + +Als de totale power onder het vereiste bedrag voor je claims zakt, wordt je factie kwetsbaar. Vijanden kunnen je chunks overclaimen. + +>[!WARNING] Meerdere sterfgevallen in korte tijd kunnen snel escaleren. Als je 5 leden hebt elk op 10 power (50 totaal) en 20 claims (40 nodig), dan brengen slechts 5 sterfgevallen in je team je naar 45 -- nog veilig. Maar 11 sterfgevallen brengt je op 39, onder de drempel van 40. + +>[!TIP] Houd een powerbuffer aan. Claim niet elke chunk die je kunt betalen -- laat ruimte voor een paar sterfgevallen zonder raidbaar te worden. diff --git a/src/main/resources/Server/Languages/nl-NL/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/nl-NL/help/quick_ref/all_commands.md new file mode 100644 index 00000000..5c773d8a --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Alle Commando's + +## Basis + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f | Open factiemenu | Iedereen | +| /f help | Open helpcentrum | Iedereen | +| /f create (name) | Maak een factie aan | Iedereen | +| /f disband | Verwijder je factie | Leider | +| /f leave | Verlaat je factie | Iedereen | + +## Lidmaatschap + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f invite (player) | Nodig een speler uit | Officer+ | +| /f accept [faction] | Accepteer een uitnodiging | Iedereen | +| /f request (faction) | Verzoek om toe te treden | Iedereen | +| /f kick (player) | Verwijder een lid | Officer+ | +| /f promote (player) | Promoveer tot Officer | Leider | +| /f demote (player) | Degradeer tot Lid | Leider | +| /f transfer (player) | Draag leiderschap over | Leider | + +## Grondgebied + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f claim | Claim huidige chunk | Officer+ | +| /f unclaim | Geef huidige chunk vrij | Officer+ | +| /f overclaim | Neem verzwakte chunk over | Officer+ | +| /f map | Open gebiedskaart | Iedereen | + +## Teleport + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f home | Teleporteer naar factiehuis | Iedereen | +| /f sethome | Stel factiehuis in | Officer+ | +| /f delhome | Verwijder factiehuis | Officer+ | +| /f stuck | Ontsnap uit vijandelijk grondgebied | Iedereen | + +## Informatie + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f info [faction] | Bekijk factiedetails | Iedereen | +| /f list | Blader door alle facties | Iedereen | +| /f members | Bekijk ledenlijst | Iedereen | +| /f who [player] | Bekijk spelerinfo | Iedereen | +| /f power [player] | Controleer powerniveaus | Iedereen | +| /f invites | Beheer uitnodigingen/verzoeken | Iedereen | +| /f relations | Bekijk diplomatieke relaties | Iedereen | + +## Diplomatie + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f ally (faction) | Verzoek bondgenootschap | Officer+ | +| /f enemy (faction) | Verklaar vijand | Officer+ | +| /f neutral (faction) | Reset naar neutraal | Officer+ | + +## Instellingen + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f settings | Open instellingen-GUI | Officer+ | +| /f rename (name) | Hernoem factie | Leider | +| /f desc [text] | Stel beschrijving in | Officer+ | +| /f color (code) | Stel factiekleur in | Officer+ | +| /f open | Sta iedereen toe om te joinen | Leider | +| /f close | Vereist uitnodiging | Leider | + +## Economie + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f balance | Bekijk schatkist | Iedereen | +| /f deposit (amount) | Stort geld | Iedereen | +| /f withdraw (amount) | Neem geld op | Officer+ | +| /f money transfer (faction) (amt) | Boek geld over | Officer+ | +| /f money log [page] | Transactiegeschiedenis | Officer+ | + +## Chat + +| Commando | Beschrijving | Rol | +|----------|-------------|-----| +| /f c | Wissel chatmodus | Iedereen | +| /f c f | Stel factiechat in | Iedereen | +| /f c a | Stel bondgenotenchat in | Iedereen | +| /f c off | Stel publieke chat in | Iedereen | diff --git a/src/main/resources/Server/Languages/nl-NL/help/welcome/getting_started.md b/src/main/resources/Server/Languages/nl-NL/help/welcome/getting_started.md new file mode 100644 index 00000000..29f151a0 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Aan de Slag + +Welkom bij HyperFactions! Hier lees je hoe je in een paar stappen kunt beginnen. + +--- + +## Stap 1: Open het Factiemenu + +Typ /f om het hoofdmenu van je factie te openen. Dit is je centrale punt voor alles -- facties bekijken, je eigen factie aanmaken en uitnodigingen beheren. + +## Stap 2: Kies je Pad + +| Optie | Hoe | +|-------|-----| +| Open facties bekijken | Klik op Bladeren in het menu en klik op Toetreden bij een open factie. | +| Een uitnodiging accepteren | Bekijk het tabblad Uitnodigingen. Als iemand je heeft uitgenodigd, klik je op Accepteren. | +| Zelf een factie aanmaken | Klik op Factie Aanmaken, kies een naam en je bent de Leider. | + +## Stap 3: Verken je Factie + +Zodra je in een factie zit, zie je het Factie Dashboard met je ledenlijst, gebiedskaart, relaties en instellingen. + +>[!TIP] Als je helemaal nieuw bent, probeer dan eerst een bestaande factie te joinen. Je leert de kneepjes sneller met ervaren leden om je heen. + +--- + +## Essentiële Eerste Commando's + +- /f -- Opent de factie-GUI +- /f home -- Teleporteer naar de thuisbasis van je factie +- /f c -- Wissel chatmodus tussen Normaal, Factie en Bondgenoot +- /f map -- Bekijk de gebiedskaart om je heen + +>[!TIP] Je kunt ook /f help typen in de chat voor een snelle commandoreferentie op elk moment. diff --git a/src/main/resources/Server/Languages/nl-NL/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/nl-NL/help/welcome/quick_tips.md new file mode 100644 index 00000000..a0acccdc --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Snelle Tips + +Handig advies per categorie om je te helpen slagen. + +--- + +## Grondgebied + +- Claim vroeg land rondom je basis met `/f claim` -- onbeschermde bouwwerken hebben **geen bescherming** +- Elke claim kost **2.0 power** om te onderhouden, dus breid niet verder uit dan je leden kunnen dragen +- Gebruik `/f map` om nabije claims te verkennen en veilige plekken te vinden om te bouwen +- Unclaim chunks die je niet meer nodig hebt met `/f unclaim` om power vrij te maken + +## Gevecht + +- Doodgaan kost **1.0 power** -- vermijd onnodige gevechten als je factie bijna aan de claimlimiet zit +- Je hebt **5 seconden spawnbescherming** na het respawnen +- Combat tagging duurt **15 seconden** -- uitloggen terwijl je getagd bent kost extra power +- Friendly fire is standaard **uitgeschakeld** tussen factieleden en bondgenoten + +>[!WARNING] Uitloggen terwijl je combat-getagd bent veroorzaakt extra powerverlies (1.0 per uitlog). Blijf en vecht of ontvlucht eerst. + +## Sociaal + +- Gebruik `/f c` om tussen chatmodi te wisselen zodat factiegesprekken privé blijven +- Nodig vertrouwde spelers uit met `/f invite ` -- uitnodigingen verlopen na **5 minuten** +- Sluit bondgenootschappen met `/f ally ` voor wederzijdse bescherming en gedeelde kaartzichtbaarheid +- Bekijk `/f relations` om je volledige diplomatieke status te zien + +## Economie + +>[!TIP] Als de server economie heeft ingeschakeld, kan je factie een schatkist opbouwen. Leden kunnen storten, maar alleen Officers en Leiders kunnen opnemen of geld overmaken. + +- Stort geld via de schatkist-GUI om je factie te versterken +- Een rijkere factie kan meer claims betalen en sneller herstellen van tegenslagen + +## Algemeen + +- Typ `/f` op elk moment om je factie-dashboard te openen -- alles is van daaruit bereikbaar +- Promoveer actieve leden tot Officer zodat ze kunnen helpen met claimen en gebiedsbeheer +- Houd je factie actief -- power regenereert alleen terwijl spelers **online** zijn diff --git a/src/main/resources/Server/Languages/nl-NL/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/nl-NL/help/welcome/what_are_factions.md new file mode 100644 index 00000000..5eade385 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Wat zijn Facties? + +Facties zijn door spelers geleide teams die grondgebied claimen, bases bouwen en strijden om dominantie. Wanneer je een factie aanmaakt of toetreedt, krijg je toegang tot beschermd land, een gedeelde thuisbasis, privéchat en diplomatieke tools. + +>[!TIP] Facties draait om teamwork. Hoe meer actieve leden je hebt, hoe sterker je factie wordt. + +--- + +## Kernmechanismen + +| Mechanisme | Wat het doet | +|------------|-------------| +| Power | Elke speler genereert power over tijd (max 20). De totale power van je factie bepaalt hoeveel land je kunt vasthouden. | +| Claims | Geclaimde chunks zijn beschermd -- alleen leden kunnen bouwen, breken of containers openen erin. Elke claim kost 2.0 power om te onderhouden. | +| Relaties | Facties kunnen bondgenootschappen sluiten voor wederzijdse bescherming of vijanden verklaren om PvP en territoriale agressie mogelijk te maken. | +| Rollen | Drie rangen -- Leider, Officer, Lid -- elk met verschillende bevoegdheden. | + +--- + +## Hoe Sterkte Werkt + +De kracht van je factie komt van de leden. Elke speler begint met 10 power en regenereert tot 20 terwijl ze online zijn. Doodgaan kost power. Als de totale factiepower onder de kosten van je claims zakt, kunnen vijanden je grondgebied overclaimen. + +>[!WARNING] Een enkel sterfgeval kost 1.0 power. Meerdere sterfgevallen in korte tijd kunnen je factie kwetsbaar maken voor overclaiming. + +--- + +## Diplomatie in een Oogopslag + +- **Bondgenoten** -- Wederzijdse overeenkomsten die friendly fire voorkomen en elkaars grondgebied beschermen +- **Vijanden** -- Eenzijdige verklaringen die PvP in elkaars land mogelijk maken en overclaiming toestaan +- **Neutraal** -- De standaardstatus tussen alle facties met standaardregels + +>[!INFO] Je kunt dit allemaal beheren via de in-game GUI door `/f` te typen of via chatcommando's. diff --git a/src/main/resources/Server/Languages/nl-NL/help/your_faction/creating.md b/src/main/resources/Server/Languages/nl-NL/help/your_faction/creating.md new file mode 100644 index 00000000..207b401e --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Een Factie Aanmaken + +Je eigen factie starten maakt je de Leider met volledige controle over instellingen, leden en grondgebied. + +--- + +## Hoe je een Factie Aanmaakt + +`/f create ` + +Dit maakt je factie aan en opent direct het Factie Dashboard waar je leden kunt uitnodigen, land claimen en instellingen configureren. + +## Naamregels + +| Regel | Vereiste | +|-------|---------| +| Lengte | Tussen 3 en 24 tekens | +| Tekens | Alleen letters, cijfers en spaties | +| Uniekheid | Geen twee facties kunnen dezelfde naam hebben | + +>[!WARNING] Kies je naam zorgvuldig. Later hernoemen vereist Leider-rechten en kan een cooldown hebben. + +--- + +## Wat er Gebeurt bij Aanmaak + +- Je wordt de Leider (hoogste rang) +- Je factie begint met 0 claims en jouw persoonlijke power (standaard 10) +- Het factie-dashboard opent automatisch +- Je kunt direct spelers uitnodigen, grondgebied claimen en een factiehuis instellen + +>[!INFO] Als de server economie-integratie heeft ingeschakeld, kan het aanmaken van een factie geld kosten. De aanmaakkosten worden ingesteld door de serverbeheerder. + +>[!TIP] Na het aanmaken zijn je eerste prioriteiten: vrienden uitnodigen, een basislocatie vinden en deze claimen. diff --git a/src/main/resources/Server/Languages/nl-NL/help/your_faction/joining.md b/src/main/resources/Server/Languages/nl-NL/help/your_faction/joining.md new file mode 100644 index 00000000..35ca13ef --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Toetreden tot een Factie + +Er zijn drie manieren om een bestaande factie te joinen, afhankelijk van hoe de factie is geconfigureerd. + +--- + +## Methoden Vergeleken + +| Methode | Hoe | Vereist | +|---------|-----|---------| +| Bladeren en Toetreden | Open /f, klik op Bladeren, klik op Toetreden | Factie staat op open | +| Uitnodiging Accepteren | Bekijk het tabblad Uitnodigingen in het /f menu | Actieve uitnodiging | +| Verzoek tot Toetreding | Gebruik /f request, wacht op goedkeuring | Officer of Leider keurt goed | + +--- + +## Details over Uitnodigingen + +- Uitnodigingen worden verstuurd door Officers of Leiders +- Uitnodigingen verlopen na 5 minuten -- accepteer snel +- Bekijk je openstaande uitnodigingen in het tabblad Uitnodigingen van het factiemenu +- Accepteer via de GUI of /f accept + +## Toetredingsverzoeken + +- Gebruik /f request om lidmaatschap aan te vragen bij een gesloten factie +- Verzoeken verlopen na 24 uur als er niet op gereageerd wordt +- Officers en Leiders kunnen verzoeken goedkeuren of afwijzen vanuit het factie-dashboard + +>[!TIP] Weet je niet zeker welke factie je moet joinen? Gebruik het tabblad Bladeren in /f om factiebeschrijvingen, ledenaantallen en of ze open of op uitnodiging zijn te bekijken. + +>[!NOTE] Elke factie kan standaard maximaal 50 leden bevatten. Als een factie vol is, moet je wachten tot er een plek vrijkomt. diff --git a/src/main/resources/Server/Languages/nl-NL/help/your_faction/managing.md b/src/main/resources/Server/Languages/nl-NL/help/your_faction/managing.md new file mode 100644 index 00000000..271253f9 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Leden Beheren + +Officers en Leiders delen de verantwoordelijkheid voor het beheren van de factieledenlijst. Hier zijn de belangrijkste commando's en wie ze kan gebruiken. + +--- + +## Commando's + +| Commando | Wat het doet | Vereiste Rol | +|----------|-------------|--------------| +| `/f invite ` | Stuurt een uitnodiging (verloopt na 5 min) | Officer+ | +| `/f kick ` | Verwijdert een lid uit de factie | Officer+ (zie opmerking) | +| `/f promote ` | Promoveert een Lid tot Officer | Alleen Leider | +| `/f demote ` | Degradeert een Officer tot Lid | Alleen Leider | +| `/f transfer ` | Draagt het leiderschap over | Alleen Leider | + +>[!NOTE] Officers kunnen alleen Leden kicken. Om een andere Officer te verwijderen, moet de Leider ze eerst degraderen of direct kicken. + +--- + +## Uitnodigingen + +- Uitnodigingen verlopen na 5 minuten als ze niet worden geaccepteerd +- De uitgenodigde speler ziet het in het tabblad Uitnodigingen wanneer ze /f openen +- Er is geen limiet op het aantal uitnodigingen dat je tegelijk kunt versturen +- Je factie kan maximaal 50 leden bevatten + +## Promoties en Degradaties + +- Alleen de Leider kan promoveren of degraderen +- /f promote verhoogt een Lid tot Officer +- /f demote verlaagt een Officer terug naar Lid + +## Leiderschap Overdragen + +>[!WARNING] Het overdragen van leiderschap is onomkeerbaar. Je wordt gedegradeerd tot Officer en de doelspeler wordt de nieuwe Leider. Zorg dat je ze volledig vertrouwt. + +`/f transfer ` + +Het doelwit moet een huidig lid van je factie zijn. diff --git a/src/main/resources/Server/Languages/nl-NL/help/your_faction/roles.md b/src/main/resources/Server/Languages/nl-NL/help/your_faction/roles.md new file mode 100644 index 00000000..c413cb56 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Rollen en Rangen + +Elke factie heeft drie rollen in een strikte hiërarchie. Hogere rollen erven alle bevoegdheden van de onderliggende rollen. + +--- + +## Overzicht van Bevoegdheden + +| Actie | Leider | Officer | Lid | +|-------|--------|---------|-----| +| Bouwen in grondgebied | Ja | Ja | Ja | +| Factiehuis gebruiken | Ja | Ja | Ja | +| Factie- en bondgenotenchat | Ja | Ja | Ja | +| Spelers uitnodigen | Ja | Ja | Nee | +| Leden kicken | Ja | Ja (alleen Leden) | Nee | +| Land claimen / unclaimen | Ja | Ja | Nee | +| Vijandelijk grondgebied overclaimen | Ja | Ja | Nee | +| Factiehuis instellen | Ja | Ja | Nee | +| Factiehuis verwijderen | Ja | Ja | Nee | +| Relaties beheren (bondgenoot/vijand) | Ja | Ja | Nee | +| Factielogs bekijken | Ja | Ja | Nee | +| Promoveren tot Officer | Ja | Nee | Nee | +| Degraderen van Officer | Ja | Nee | Nee | +| Factie hernoemen | Ja | Nee | Nee | +| Beschrijving / tag / kleur instellen | Ja | Nee | Nee | +| Factie openen / sluiten | Ja | Nee | Nee | +| Factie-instellingen openen | Ja | Nee | Nee | +| Leiderschap overdragen | Ja | Nee | Nee | +| Factie ontbinden | Ja | Nee | Nee | + +>[!NOTE] Officers kunnen Leden kicken maar geen andere Officers. Alleen de Leider kan Officers verwijderen. + +--- + +## Roldetails + +- Leider -- Eén per factie. Heeft volledige controle over alle instellingen, leden en grondgebied. Kan eigendom overdragen aan een ander lid. +- Officer -- Vertrouwde leden die helpen de factie te beheren. Kunnen uitnodigen, leden kicken, land claimen en diplomatie afhandelen. +- Lid -- De standaardrol bij toetreding. Kan bouwen in grondgebied, het factiehuis gebruiken en deelnemen aan factiechat. + +>[!TIP] Promoveer je meest actieve en vertrouwde leden tot Officer zodat ze kunnen helpen met gebiedsbeheer en het werven van nieuwe spelers. diff --git a/src/main/resources/Server/Languages/nl-NL/hyperfactions.lang b/src/main/resources/Server/Languages/nl-NL/hyperfactions.lang new file mode 100644 index 00000000..f8061210 --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Nederlandse Vertalingen +# Formaat: sleutel = waarde (of sleutel = "waarde met aanhalingstekens") +# Opmerking: Sleutels krijgen automatisch het voorvoegsel "hyperfactions." door Hytale's I18nModule +# Plaatshouders: {0}, {1}, enz. + +# ========== Algemeen ========== +common.no_permission = Je hebt geen toestemming om dat te doen. +common.not_in_faction = Je zit niet in een factie. +common.already_in_faction = Je zit al in een factie. +common.player_not_found = Speler niet gevonden. +common.faction_not_found = Factie niet gevonden. +common.player_not_online = Die speler is niet online. +common.must_be_leader = Alleen de factieleider kan dat doen. +common.must_be_officer = Je moet een Officier of Leider zijn om dat te doen. +common.combat_tagged = Je kunt dat niet doen terwijl je in gevecht bent. +common.cancel = Annuleren +common.confirm = Bevestigen +common.save = Opslaan +common.close = Sluiten +common.clear = Wissen +common.back = Terug +common.leave = Verlaten +common.transfer = Overdragen +common.disband = Ontbinden +common.world_fallback = wereld +common.yes = Ja +common.no = Nee +common.loading = Laden... +common.online = Online +common.offline = Offline +common.enabled = Ingeschakeld +common.disabled = Uitgeschakeld +common.none = Geen +common.page = Pagina {0} van {1} +common.unknown = Onbekend +common.error_generic = Er is iets misgegaan. Probeer het opnieuw. +common.gui_fallback = Kon GUI niet openen. Gebruik /f help voor commando's. +common.admin_prefix = [Admin] +common.location_error = Kon je locatie niet bepalen. +common.world_error = Kon je wereld niet bepalen. +common.invalid_id = Ongeldig factie-ID. +common.na = N.v.t. + +# ========== Commando's - Aanmaken ========== +cmd.create.no_permission = Je hebt geen toestemming om facties aan te maken. +cmd.create.usage = Gebruik: /f create +cmd.create.success = Factie '{0}' aangemaakt! +cmd.create.already_in_named = Je zit al in {0}. +cmd.create.use_leave_first = Gebruik eerst /f leave als je een nieuwe factie wilt aanmaken. +cmd.create.name_taken = Die factienaam is al in gebruik. +cmd.create.name_too_short = Factienaam is te kort. +cmd.create.name_too_long = Factienaam is te lang. +cmd.create.failed = Factie aanmaken mislukt. + +# ========== Commando's - Ontbinden ========== +cmd.disband.no_permission = Je hebt geen toestemming om facties te ontbinden. +cmd.disband.not_leader = Alleen de factieleider kan ontbinden. +cmd.disband.confirm_prompt = Weet je zeker dat je je factie wilt ontbinden? +cmd.disband.confirm_instruction = Typ /f disband --text opnieuw binnen {0} seconden om te bevestigen. +cmd.disband.success = Je factie is ontbonden. +cmd.disband.failed = Factie ontbinden mislukt. +cmd.disband.cancelled = Vorige bevestiging geannuleerd. Typ opnieuw om ontbinding te bevestigen. + +# ========== Commando's - Hernoemen ========== +cmd.rename.no_permission = Je hebt geen toestemming. +cmd.rename.not_leader = Alleen de leider kan de factie hernoemen. +cmd.rename.usage = Gebruik: /f rename +cmd.rename.too_short = Naam is te kort (min {0} tekens). +cmd.rename.too_long = Naam is te lang (max {0} tekens). +cmd.rename.name_taken = Die naam is al in gebruik. +cmd.rename.success = Factie hernoemd naar {0}! +cmd.rename.broadcast = {0} heeft de factie hernoemd naar {1} + +# ========== Commando's - Beschrijving ========== +cmd.desc.no_permission = Je hebt geen toestemming. +cmd.desc.not_officer = Je moet een officier zijn om de beschrijving in te stellen. +cmd.desc.set = Factiebeschrijving ingesteld! +cmd.desc.cleared = Factiebeschrijving gewist. + +# ========== Commando's - Open / Gesloten ========== +cmd.open.no_permission = Je hebt geen toestemming. +cmd.open.not_leader = Alleen de leider kan deze instelling wijzigen. +cmd.open.already_open = Je factie is al open. +cmd.open.success = Je factie is nu open! Iedereen kan toetreden met /f join. +cmd.open.broadcast = {0} heeft de factie opengesteld voor iedereen. +cmd.close.no_permission = Je hebt geen toestemming. +cmd.close.not_leader = Alleen de leider kan deze instelling wijzigen. +cmd.close.already_closed = Je factie is al gesloten. +cmd.close.success = Je factie is nu alleen op uitnodiging. +cmd.close.broadcast = {0} heeft de factie gesloten voor alleen uitnodigingen. + +# ========== Commando's - Kleur ========== +cmd.color.no_permission = Je hebt geen toestemming. +cmd.color.not_officer = Je moet een officier zijn om de kleur te wijzigen. +cmd.color.colors_disabled = Factiekleuren zijn uitgeschakeld. +cmd.color.usage = Gebruik: /f color +cmd.color.usage_hint = Geldige codes: 0-9, a-f of #RRGGBB hex +cmd.color.invalid = Ongeldige kleur. Gebruik 0-9, a-f, of #RRGGBB. +cmd.color.success = Factiekleur bijgewerkt! + +# ========== Commando's - Claimen ========== +cmd.claim.no_permission = Je hebt geen toestemming om gebieden te claimen. +cmd.claim.already_yours = Je factie bezit dit gebied al. +cmd.claim.cannot_claim_ally = Je kunt bondgenootterritorium niet claimen. +cmd.claim.already_claimed_hint = Dit gebied is al geclaimd. Gebruik /f overclaim als ze plunderbaar zijn. +cmd.claim.success = Gebied geclaimd op {0}, {1}! +cmd.claim.not_officer = Je moet een officier zijn om land te claimen. +cmd.claim.already_claimed = Dit gebied is al geclaimd. +cmd.claim.max_claims = Je factie heeft het maximum aantal gebieden bereikt. Krijg meer kracht! +cmd.claim.not_adjacent = Je moet aangrenzend aan bestaand territorium claimen. +cmd.claim.world_not_allowed = Claimen is niet toegestaan in deze wereld. +cmd.claim.orbisguard = Dit gebied wordt beschermd door OrbisGuard. +cmd.claim.zone_protected = Dit gebied bevindt zich in een SafeZone of WarZone. +cmd.claim.insufficient_power = Je factie heeft niet genoeg kracht om meer land te claimen. +cmd.claim.failed = Gebied claimen mislukt. + +# ========== Commando's - Uitnodigen ========== +cmd.invite.no_permission = Je hebt geen toestemming om spelers uit te nodigen. +cmd.invite.not_officer = Je moet een officier zijn om spelers uit te nodigen. +cmd.invite.usage = Gebruik: /f invite +cmd.invite.player_not_found = Speler '{0}' niet gevonden of offline. +cmd.invite.target_in_faction = Die speler zit al in een factie. +cmd.invite.sent = {0} uitgenodigd voor je factie. +cmd.invite.received = Je bent uitgenodigd om lid te worden van {0}! +cmd.invite.accept_hint = Typ /f accept {0} om toe te treden. + +# ========== Commando's - Accepteren / Toetreden ========== +cmd.join.no_permission = Je hebt geen toestemming om bij facties aan te sluiten. +cmd.join.already_in_named = Je zit al in {0}. +cmd.join.use_leave_hint = Gebruik eerst /f leave als je bij een andere factie wilt aansluiten. +cmd.join.no_invites = Je hebt geen openstaande uitnodigingen. +cmd.join.faction_not_found = Factie '{0}' niet gevonden. +cmd.join.not_invited = Je hebt geen uitnodiging van die factie. +cmd.join.faction_gone = Die factie bestaat niet meer. +cmd.join.success = Je bent toegetreden tot {0}! +cmd.join.broadcast = {0} is toegetreden tot de factie! +cmd.join.faction_full = Die factie is vol. +cmd.join.failed = Toetreden tot factie mislukt. + +# ========== Commando's - Schoppen ========== +cmd.kick.no_permission = Je hebt geen toestemming om leden te schoppen. +cmd.kick.usage = Gebruik: /f kick +cmd.kick.not_in_your_faction = Speler '{0}' zit niet in jouw factie. +cmd.kick.success = {0} uit de factie geschopt. +cmd.kick.broadcast = {0} is uit de factie geschopt. +cmd.kick.kicked = Je bent uit de factie geschopt. +cmd.kick.cannot_kick_higher = Je hebt geen toestemming om die speler te schoppen. +cmd.kick.cannot_kick_leader = Je kunt de factieleider niet schoppen. +cmd.kick.failed = Speler schoppen mislukt. + +# ========== Commando's - Verlaten ========== +cmd.leave.no_permission = Je hebt geen toestemming om facties te verlaten. +cmd.leave.confirm_prompt = Weet je zeker dat je je factie wilt verlaten? +cmd.leave.confirm_instruction = Typ /f leave --text opnieuw binnen {0} seconden om te bevestigen. +cmd.leave.success = Je hebt je factie verlaten. +cmd.leave.broadcast = {0} heeft de factie verlaten. +cmd.leave.failed = Factie verlaten mislukt. +cmd.leave.cancelled = Vorige bevestiging geannuleerd. Typ opnieuw om vertrek te bevestigen. + +# ========== Commando's - Promoveren / Degraderen / Overdragen ========== +cmd.rank.promote_no_permission = Je hebt geen toestemming om leden te promoveren. +cmd.rank.promote_usage = Gebruik: /f promote +cmd.rank.promoted = {0} gepromoveerd tot {1}! +cmd.rank.promote_broadcast = {0} is gepromoveerd tot {1}! +cmd.rank.already_highest = Kan niet verder promoveren. Gebruik /f transfer om de leider te wijzigen. +cmd.rank.promote_failed = Speler promoveren mislukt. +cmd.rank.demote_no_permission = Je hebt geen toestemming om leden te degraderen. +cmd.rank.demote_usage = Gebruik: /f demote +cmd.rank.demoted = {0} gedegradeerd naar {1}. +cmd.rank.demote_broadcast = {0} is gedegradeerd naar {1}. +cmd.rank.already_lowest = Die speler is al een Lid. +cmd.rank.demote_failed = Speler degraderen mislukt. +cmd.rank.transfer_no_permission = Je hebt geen toestemming om het leiderschap over te dragen. +cmd.rank.transfer_usage = Gebruik: /f transfer +cmd.rank.player_not_in_faction = Speler niet gevonden in je factie. +cmd.rank.transfer_confirm = Weet je zeker dat je het leiderschap wilt overdragen aan {0}? +cmd.rank.transfer_confirm_instruction = Typ /f transfer {0} --text opnieuw binnen {1} seconden om te bevestigen. +cmd.rank.transferred = Leiderschap overgedragen aan {0}! +cmd.rank.transfer_broadcast = {0} is nu de factieleider! +cmd.rank.transfer_failed = Leiderschap overdragen mislukt. +cmd.rank.transfer_cancelled = Vorige bevestiging geannuleerd. Typ opnieuw om overdracht te bevestigen. + +# ========== Commando's - Unclaimen ========== +cmd.unclaim.no_permission = Je hebt geen toestemming om gebieden vrij te geven. +cmd.unclaim.success = Gebied vrijgegeven op {0}, {1}. +cmd.unclaim.not_officer = Je moet een officier zijn om land vrij te geven. +cmd.unclaim.chunk_not_claimed = Dit gebied is niet geclaimd. +cmd.unclaim.not_your_claim = Je factie bezit dit gebied niet. +cmd.unclaim.cannot_unclaim_home = Kan het gebied met de factiebasis niet vrijgeven. +cmd.unclaim.would_disconnect = Kan niet vrijgeven — het zou je territorium loskoppelen. +cmd.unclaim.failed = Gebied vrijgeven mislukt. + +# ========== Commando's - Overclaimen ========== +cmd.overclaim.no_permission = Je hebt geen toestemming om gebieden over te nemen. +cmd.overclaim.success = Vijandelijk territorium overgenomen! +cmd.overclaim.not_officer = Je moet een officier zijn om gebieden over te nemen. +cmd.overclaim.not_claimed = Dit gebied is niet geclaimd. Gebruik /f claim. +cmd.overclaim.own_chunk = Je factie bezit dit gebied al. +cmd.overclaim.ally = Je kunt bondgenootterritorium niet overnemen. +cmd.overclaim.target_has_power = Deze factie heeft nog genoeg kracht. +cmd.overclaim.failed = Overnemen mislukt. + +# ========== Commando's - Vastgelopen ========== +cmd.stuck.no_permission = Je hebt geen toestemming om /f stuck te gebruiken. +cmd.stuck.not_stuck = Je zit niet vast — dit is wildernis. +cmd.stuck.combat_tagged = Je kunt /f stuck niet gebruiken tijdens gevecht! +cmd.stuck.no_safe = Kon geen veilige locatie vinden. +cmd.stuck.teleporting = Je wordt over {0} seconden naar veiligheid geteleporteerd. Niet bewegen! + +# ========== Commando's - Thuis ========== +cmd.home.no_permission = Je hebt geen toestemming om naar de factiebasis te teleporteren. +cmd.home.no_home = Je factie heeft geen basis ingesteld. +cmd.home.combat_tagged = Je kunt niet teleporteren tijdens gevecht! +cmd.home.teleported = Geteleporteerd naar de factiebasis! + +# ========== Commando's - Basis Instellen ========== +cmd.sethome.no_permission = Je hebt geen toestemming om de factiebasis in te stellen. +cmd.sethome.world_not_allowed = Kan geen basis instellen in deze wereld. +cmd.sethome.not_in_territory = Je kunt de basis alleen instellen in het territorium van je factie. +cmd.sethome.set = Factiebasis ingesteld! +cmd.sethome.broadcast = {0} heeft de factiebasis ingesteld. +cmd.sethome.not_officer = Je moet een officier zijn om de basis in te stellen. +cmd.sethome.failed = Basis instellen mislukt. + +# ========== Commando's - Basis Verwijderen ========== +cmd.delhome.no_permission = Je hebt geen toestemming om de factiebasis te verwijderen. +cmd.delhome.no_home = Je factie heeft geen basis ingesteld. +cmd.delhome.deleted = Factiebasis verwijderd! +cmd.delhome.broadcast = {0} heeft de factiebasis verwijderd. +cmd.delhome.not_officer = Je moet een officier zijn om de basis te verwijderen. +cmd.delhome.failed = Basis verwijderen mislukt. + +# ========== Commando's - Relatie (Bondgenoot/Vijand/Neutraal/Relaties) ========== +cmd.relation.ally_no_permission = Je hebt geen toestemming om bondgenootschappen te beheren. +cmd.relation.ally_usage = Gebruik: /f ally +cmd.relation.ally_sent = Bondgenootschapsverzoek verstuurd naar {0}! +cmd.relation.ally_formed = Je bent nu bondgenoten met {0}! +cmd.relation.already_ally = Je bent al bondgenoten met die factie. +cmd.relation.ally_failed = Bondgenootschapsverzoek versturen mislukt. +cmd.relation.enemy_no_permission = Je hebt geen toestemming om vijanden te verklaren. +cmd.relation.enemy_usage = Gebruik: /f enemy +cmd.relation.enemy_declared = {0} is nu je vijand! +cmd.relation.already_enemy = Je bent al vijanden met die factie. +cmd.relation.max_enemies = Je hebt het maximale aantal vijanden bereikt. +cmd.relation.enemy_failed = Vijand instellen mislukt. +cmd.relation.neutral_no_permission = Je hebt geen toestemming om neutrale relaties in te stellen. +cmd.relation.neutral_usage = Gebruik: /f neutral +cmd.relation.neutral_set = Je factie is nu neutraal met {0}. +cmd.relation.already_neutral = Je bent al neutraal met die factie. +cmd.relation.neutral_failed = Neutraal instellen mislukt. +cmd.relation.cannot_self = Je kunt geen bondgenootschap sluiten met jezelf. +cmd.relation.max_allies = Je hebt het maximale aantal bondgenoten bereikt. +cmd.relation.view_no_permission = Je hebt geen toestemming om relaties te bekijken. +cmd.relation.header = === Factierelaties === +cmd.relation.allies_count = Bondgenoten ({0}): +cmd.relation.enemies_count = Vijanden ({0}): +cmd.relation.list_entry = - {0} + +# ========== Commando's - Chat ========== +cmd.chat.usage = Gebruik: /f c [f|a|off] +cmd.chat.no_permission = Je hebt geen toestemming voor die chatmodus. +cmd.chat.mode_set = Chatmodus ingesteld op {0} + +# ========== Commando's - Uitnodigingen ========== +cmd.invites.not_officer = Je moet een officier zijn om uitnodigingen te beheren. +cmd.invites.header = === Factie-uitnodigingen === +cmd.invites.no_pending = Geen openstaande uitnodigingen of verzoeken. +cmd.invites.outgoing = Uitgaande Uitnodigingen: +cmd.invites.outgoing_entry = {0} (uitgenodigd door {1}) +cmd.invites.requests = Toetredingsverzoeken: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Jouw Uitnodigingen === +cmd.invites.no_invites = Je hebt geen openstaande uitnodigingen. +cmd.invites.invite_entry = {0} - Gebruik /f accept {1} + +# ========== Commando's - Verzoek ========== +cmd.request.no_permission = Je hebt geen toestemming om lidmaatschap aan te vragen. +cmd.request.already_in_named = Je zit al in {0}. +cmd.request.use_leave_hint = Gebruik eerst /f leave als je bij een andere factie wilt aansluiten. +cmd.request.usage = Gebruik: /f request [bericht] +cmd.request.faction_open = Die factie is open! Gebruik /f accept {0} om direct toe te treden. +cmd.request.already_requested = Je hebt al een openstaand verzoek bij die factie. +cmd.request.has_invite = Je bent al uitgenodigd voor die factie! Gebruik /f accept {0} om toe te treden. +cmd.request.sent = Toetredingsverzoek verstuurd naar {0}! +cmd.request.your_message = Je bericht: "{0}" +cmd.request.officer_review = Een officier zal je verzoek beoordelen. +cmd.request.officer_notify = {0} heeft verzocht om lid te worden van je factie! +cmd.request.officer_review_hint = Gebruik /f gui > Uitnodigingen om te beoordelen. + +# ========== Commando's - Info ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = Je hebt geen toestemming om factie-info te bekijken. +cmd.info.faction_not_found = Factie '{0}' niet gevonden. +cmd.info.not_in_faction_hint = Je zit niet in een factie. Gebruik /f info +cmd.info.leader = Leider: {0} +cmd.info.members = Leden: {0}/{1} +cmd.info.power = Kracht: {0} +cmd.info.claims = Gebieden: {0} +cmd.info.raidable = PLUNDERBAAR! +cmd.info.allies = Bondgenoten: {0} +cmd.info.enemies = Vijanden: {0} +cmd.info.they_consider = Zij beschouwen jou als: {0} +cmd.info.you_consider = Jij beschouwt hen als: {0} +cmd.info.members_no_permission = Je hebt geen toestemming om factieleden te bekijken. +cmd.info.members_header = === {0} Leden ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = Je hebt geen toestemming om de factielijst te bekijken. +cmd.info.list_empty = Er zijn geen facties. +cmd.info.list_header = === Facties ({0}) === +cmd.info.list_entry = {0} - {1} leden, {2} kracht +cmd.info.list_entry_raidable = {0} - {1} leden, {2} kracht [PLUNDERBAAR] +cmd.info.help_no_permission = Je hebt geen toestemming om de hulp te bekijken. +cmd.info.who_no_permission = Je hebt geen toestemming om spelerinfo te bekijken. +cmd.info.who_faction = Factie: {0} +cmd.info.who_role = Rol: {0} +cmd.info.who_joined = Toegetreden: {0} +cmd.info.who_faction_none = Factie: Geen +cmd.info.who_power = Kracht: {0} +cmd.info.who_status = Status: {0} +cmd.info.who_last_seen = Laatst gezien: {0} +cmd.info.map_no_permission = Je hebt geen toestemming om de kaart te bekijken. +cmd.info.map_header = === Gebiedskaart === +cmd.info.map_legend = Legenda: +Jij /Eigen /Bondgenoot /Vijand -Wildernis +cmd.info.map_gui_hint = Gebruik /f gui voor een interactieve kaart + +# ========== Commando's - Kracht ========== +cmd.power.personal = Persoonlijke Kracht: {0}/{1} +cmd.power.faction = Factiekracht: {0}/{1} +cmd.power.death_loss = Verlies bij Dood: {0} +cmd.power.regen = Herstelsnelheid: {0}/uur +cmd.power.no_permission = Je hebt geen toestemming om kracht-info te bekijken. +cmd.power.header = Kracht van {0}: +cmd.power.current = Huidig: {0} + +# ========== Commando's - Economie ========== +cmd.economy.balance = Saldo: {0} +cmd.economy.deposited = {0} gestort in de factieschatkist. +cmd.economy.withdrawn = {0} opgenomen uit de factieschatkist. +cmd.economy.transferred = {0} overgemaakt naar {1}. +cmd.economy.insufficient = Onvoldoende saldo in de factieschatkist. +cmd.economy.invalid_amount = Ongeldig bedrag: {0} +cmd.economy.economy_disabled = Economie is uitgeschakeld. +cmd.economy.balance_no_permission = Je hebt geen toestemming om saldo's te bekijken. +cmd.economy.treasury_unavailable = Schatkist is niet beschikbaar. +cmd.economy.balance_display = Schatkist van {0}: {1} +cmd.economy.deposit_no_permission = Je hebt geen toestemming om te storten. +cmd.economy.deposit_faction_denied = Je hebt geen factietoestemming om te storten. +cmd.economy.deposit_usage = Gebruik: /f deposit +cmd.economy.amount_positive = Bedrag moet positief zijn. +cmd.economy.wallet_insufficient = Je hebt niet genoeg geld. Portemonnee: {0} +cmd.economy.wallet_withdraw_failed = Opname uit je portemonnee mislukt. +cmd.economy.deposit_failed = Storten in factieschatkist mislukt. Geld teruggestort. +cmd.economy.withdraw_no_permission = Je hebt geen toestemming om op te nemen. +cmd.economy.withdraw_faction_denied = Je hebt geen factietoestemming om op te nemen. +cmd.economy.withdraw_usage = Gebruik: /f withdraw +cmd.economy.withdraw_limit_denied = Opname geweigerd: {0} +cmd.economy.wallet_deposit_failed = Waarschuwing: Storten naar je portemonnee mislukt. Neem contact op met een admin. +cmd.economy.withdraw_limit_exceeded = Opname geweigerd: limiet overschreden. +cmd.economy.withdraw_failed = Opname mislukt: {0} +cmd.economy.transfer_no_permission = Je hebt geen toestemming om over te maken. +cmd.economy.transfer_faction_denied = Je hebt geen factietoestemming om over te maken. +cmd.economy.transfer_usage = Gebruik: /f money transfer +cmd.economy.transfer_self = Kan niet overmaken naar je eigen factie. +cmd.economy.transfer_limit_denied = Overboeking geweigerd: {0} +cmd.economy.transfer_limit_exceeded = Overboeking geweigerd: limiet overschreden. +cmd.economy.transfer_failed = Overboeking mislukt: {0} +cmd.economy.log_no_permission = Je hebt geen toestemming om het transactielog te bekijken. +cmd.economy.log_header = Transactielog (pagina {0}/{1}) +cmd.economy.log_empty = Geen transacties gevonden. +cmd.economy.money_help_header = Schatkistcommando's: +cmd.economy.money_help_balance = /f money balance [factie] - Saldo bekijken +cmd.economy.money_help_deposit = /f money deposit - Storten in schatkist +cmd.economy.money_help_withdraw = /f money withdraw - Opnemen uit schatkist +cmd.economy.money_help_transfer = /f money transfer - Overmaken tussen facties +cmd.economy.money_help_log = /f money log [pagina] [type] - Transactiegeschiedenis bekijken + +# ========== Bescherming - Actie-omschrijvingen ========== +protection.action.generic = Je kunt dat hier niet doen +protection.action.build = Je kunt hier niet bouwen of blokken breken +protection.action.interact = Je kunt daar niet mee interacteren +protection.action.door = Je kunt geen deuren gebruiken +protection.action.container = Je kunt geen opbergvakken openen +protection.action.bench = Je kunt geen werkstations gebruiken +protection.action.processing = Je kunt geen verwerkingsstations gebruiken +protection.action.seat = Je kunt geen zitplaatsen gebruiken +protection.action.light = Je kunt geen verlichting aan/uitzetten +protection.action.teleporter = Je kunt geen teleporters gebruiken +protection.action.crate = Je kunt geen kratten gebruiken +protection.action.tame = Je kunt geen wezens temmen +protection.action.npc = Je kunt niet interacteren met NPC's +protection.action.mount = Je kunt geen wezens berijden +protection.action.pve = Je kunt geen wezens verwonden +protection.action.item_drop = Je kunt geen items laten vallen +protection.action.item_pickup = Je kunt geen items oprapen + +# ========== Bescherming - Weigeringsredenen ========== +protection.denied.safezone = {0} in een SafeZone. +protection.denied.warzone = {0} in een WarZone. +protection.denied.enemy_claim = {0} in vijandelijk territorium. +protection.denied.claimed = {0} in geclaimd territorium. +protection.denied.here = {0} hier. +protection.denied.zone = {0} in deze zone. +protection.denied.faction_perm = {0} hier. (Factietoestemming: {1}) +protection.denied.ally_territory = {0} hier. (Bondgenootterritorium) +protection.denied.error = Beschermingsfout — actie geblokkeerd voor de veiligheid. + +# ========== Bescherming - PvP ========== +protection.pvp.safezone = PvP is uitgeschakeld in SafeZones. +protection.pvp.same_faction = Je kunt factieleden niet aanvallen. +protection.pvp.ally = Je kunt bondgenoten niet aanvallen. +protection.pvp.spawn_protected = Die speler heeft spawnbescherming. +protection.pvp.territory_disabled = PvP is uitgeschakeld in dit territorium. +protection.pvp.generic = Je kunt deze speler niet aanvallen. + +# ========== Bescherming - Schade aan Entiteiten ========== +protection.mob_damage_disabled = Mobschade is uitgeschakeld in deze zone. +protection.pve_damage_disabled = PvE-schade is uitgeschakeld in deze zone. +protection.pve_territory_denied = Je kunt geen mobs verwonden in dit territorium. + +# ========== Bescherming - Gevechtstag ========== +protection.combat_tag_command = Je kunt dat commando niet gebruiken terwijl je in gevecht bent. + +# ========== Serveraankondigingen ========== +# Deze worden uitgezonden naar alle online spelers bij belangrijke factie-evenementen. +# {0}, {1} = dynamische waarden (factienamen, spelernamen) +server_announce.faction_created = {0} heeft de factie {1} opgericht! +server_announce.faction_disbanded = De factie {0} is ontbonden! +server_announce.leadership_transfer = {0} is nu de leider van {1}! +server_announce.overclaim = {0} heeft territorium overgenomen van {1}! +server_announce.war_declared = {0} heeft de oorlog verklaard aan {1}! +server_announce.alliance_formed = {0} en {1} zijn nu bondgenoten! +server_announce.alliance_broken = {0} en {1} zijn geen bondgenoten meer! + +# ========== Teleportsysteem ========== +teleport.cooldown_wait = Je moet {0} wachten voordat je opnieuw kunt teleporteren. +teleport.warmup_start = Teleporteren naar factiebasis over {0} seconden... +teleport.combat_cancelled = Teleportatie geannuleerd - je bent in gevecht! +teleport.success_default = Geteleporteerd naar de factiebasis! +teleport.no_home = Je factie heeft geen basis ingesteld. +teleport.world_not_found = Wereld niet gevonden. +teleport.failed = Teleportatie mislukt. +teleport.countdown = Teleporteren over {0} seconden... +teleport.countdown_one = Teleporteren over 1 seconde... +teleport.moved_cancelled = Teleportatie geannuleerd - je hebt bewogen! +teleport.damage_cancelled = Teleportatie geannuleerd - je hebt schade ontvangen! +teleport.mount_teleport_blocked = Je kunt niet naar die zone teleporteren terwijl je een mount berijdt. +teleport.mount_entry_blocked = Je kunt deze zone niet betreden terwijl je een mount berijdt. + +# ========== Chatweergave ========== +chat.display.public = Openbaar +chat.display.faction = Factie +chat.display.ally = Bondgenoot diff --git a/src/main/resources/Server/Languages/nl-NL/hyperfactions_admin.lang b/src/main/resources/Server/Languages/nl-NL/hyperfactions_admin.lang new file mode 100644 index 00000000..c06a292c --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Nederlandse Vertalingen +# Formaat: sleutel = waarde +# Opmerking: Sleutels krijgen automatisch het voorvoegsel "hyperfactions_admin." door Hytale's I18nModule + +# ========== Admin Navigatiebalk ========== +nav.dashboard = Dashboard +nav.actions = Acties +nav.factions = Facties +nav.players = Spelers +nav.economy = Economie +nav.zones = Zones +nav.config = Configuratie +nav.backups = Back-ups +nav.log = Logboek +nav.updates = Updates +nav.help = Hulp +nav.version = Versie + +# ========== Algemene Admin Labels ========== +common.faction_not_found = Factie Niet Gevonden +common.no_faction = Geen Factie +common.not_set = Niet ingesteld +common.on = Aan +common.off = Uit +common.enable = Inschakelen +common.disable = Uitschakelen +common.none_paren = (Geen) +common.invalid_faction = Ongeldige factie. +common.leader_prefix = Leider: {0} +common.members_suffix = {0} leden +common.claims_suffix = {0} gebieden +common.factions_suffix = {0} facties +common.players_suffix = {0} spelers +common.chunks_suffix = {0} chunks +common.entries_suffix = {0} vermeldingen +common.found_suffix = {0} gevonden +common.power_format = {0}/{1} kracht +common.raidable = Plunderbaar +common.protected = Beschermd +common.no_description = Geen beschrijving ingesteld. +common.officers_more = +{0} meer +common.custom_max = (aangepast max) +common.default_max = (standaard max) +common.now = Nu +common.ago_suffix = {0} geleden +common.just_now = zojuist +common.no_membership_history = Geen lidmaatschapsgeschiedenis + +# ========== Admin Dashboard ========== +dashboard.factions_prefix = Facties: {0} +dashboard.members_prefix = Totaal Leden: {0} +dashboard.claims_prefix = Totaal Gebieden: {0} + +# ========== Admin Acties ========== +actions.confirm_reset = Bevestig Reset? +actions.confirm_trigger = Bevestig Trigger? +actions.kd_reset = K/D gereset voor {0} spelers. +actions.kd_reset_failed = K/D resetten mislukt: {0} +actions.upkeep_unavailable = Onderhoudsprocessor is niet beschikbaar. +actions.upkeep_triggered = Onderhoudsinning geactiveerd. +actions.upkeep_failed = Onderhoud mislukt: {0} + +# ========== Admin Ontbinden ========== +disband.faction_gone = Factie bestaat niet meer. +disband.success = Factie '{0}' is ontbonden. +disband.failed = Ontbinden mislukt: {0} +disband.no_leader = Factie heeft geen leider, kan niet ontbinden. + +# ========== Admin Alles Unclaimen ========== +unclaim.removed = [Admin] {0} gebieden verwijderd van {1}. +unclaim.no_claims = {0} had geen gebieden om te verwijderen. + +# ========== Admin Factielijst ========== +factions.home_not_set = Niet ingesteld +factions.teleported = Geteleporteerd naar de basis van {0}. +factions.no_home = Factie heeft geen basis ingesteld. +factions.world_not_found = Doelwereld niet gevonden. + +# ========== Admin Factie-info ========== +info.faction_gone = Deze factie bestaat niet meer. + +# ========== Admin Factieleden ========== +members.sort_role = Rol +members.sort_online = Online +members.sort_name = Naam +members.sort_power = Kracht +members.promoted = [Admin] {0} gepromoveerd tot {1}. +members.demoted = [Admin] {0} gedegradeerd naar {1}. +members.kicked = [Admin] {0} uit de factie geschopt. + +# ========== Admin Factierelaties ========== +relations.allies_header = BONDGENOTEN ({0}) +relations.enemies_header = VIJANDEN ({0}) +relations.no_allies = Geen bondgenoten. +relations.no_enemies = Geen vijanden. +relations.neutral_count = {0} neutrale facties +relations.since_today = Sinds: vandaag +relations.since_one_day = Sinds: 1 dag geleden +relations.since_days = Sinds: {0} dagen geleden +relations.set_ally = [Admin] Wederzijds bondgenootschap ingesteld met {0}. +relations.set_enemy = Wederzijdse vijandschap ingesteld met {0}. +relations.set_neutral = [Admin] Wederzijdse neutraliteit ingesteld met {0}. + +# ========== Admin Factie-instellingen ========== +settings.locked = Deze instelling is vergrendeld door de serverconfiguratie. +settings.perm_toggled = {0} ingesteld op {1}. +settings.color_changed = Factiekleur ingesteld op {0}. +settings.recruitment_set = Werving ingesteld op {0}. +settings.no_home = [Admin] Deze factie heeft geen basis ingesteld. +settings.home_cleared = Factiebasis gewist voor {0}. + +# ========== Sorteer Dropdown Labels ========== +sort.power = Kracht +sort.name = Naam +sort.members = Leden +sort.balance = Saldo + +# ========== Admin Spelers ========== +players.sort_last_online = Laatst Online +players.sort_faction = Factie +players.sort_online = Online +players.not_online = Speler is niet online. +players.world_not_found = Doelwereld niet gevonden. +players.teleported = [Admin] Geteleporteerd naar {0}. + +# ========== Admin Spelerinfo ========== +playerinfo.disband_faction = Factie Ontbinden +playerinfo.kick_leader = Leider Schoppen +playerinfo.enter_valid_number = Voer een geldig getal in. +playerinfo.enter_valid_positive = Voer een geldig positief getal in. +playerinfo.faction_gone = Factie bestaat niet meer. +playerinfo.kd_reset = K/D gereset voor {0}. +playerinfo.kicked_success = {0} geschopt uit {1}. +playerinfo.kicked_leader = Leider {0} geschopt. Leiderschap overgedragen aan {1}. +playerinfo.disbanded_kick = [Admin] Factie '{0}' ontbonden (laatste lid geschopt). + +# ========== Admin Economie ========== +economy.no_data = Geen facties met economiegegevens. +economy.amount_zero = Bedrag mag niet nul zijn. +economy.enter_amount = Voer een bedrag in. +economy.invalid_number = Ongeldig getal: {0} +economy.error = Er is een fout opgetreden. +economy.balance_negative = Saldo kan niet negatief zijn. +economy.failed = Mislukt: {0} +economy.bulk_complete = Bulkaanpassing voltooid: {0} {1} aan {2} facties. +economy.bulk_failures = ({0} mislukt) + +# ========== Admin Zones ========== +zones.not_found = Zone niet gevonden. +zones.invalid_id = Ongeldig zone-ID. +zones.deleted = Zone {0} verwijderd. +zones.delete_failed = Zone verwijderen mislukt: {0} +zones.no_chunks = Geen chunks +zones.chunks_suffix = {0} ({1} chunks) + +# ========== Zone Aanmaakwizard ========== +wizard.enter_name = Voer een zonenaam in. +wizard.name_too_short = Zonenaam moet minstens {0} tekens lang zijn. +wizard.name_too_long = Zonenaam mag niet meer dan {0} tekens bevatten. +wizard.name_taken = Er bestaat al een zone met deze naam. +wizard.radius_range = Radius moet tussen 1 en {0} liggen. +wizard.create_failed = Kon zone niet aanmaken: {0} +wizard.created_not_found = Zone aangemaakt maar kon niet worden gevonden. +wizard.created = {0} '{1}' aangemaakt! +wizard.chunk_claimed = Chunk geclaimd ({0}, {1}). +wizard.chunk_failed = Kon huidige chunk niet claimen: {0} +wizard.radius_claimed = {0} chunks geclaimd in een radius van {1} rond {2}. +wizard.radius_no_claims = Geen chunks konden worden geclaimd (gebied kan bezet zijn). +wizard.no_claims = Zone aangemaakt zonder claims. +wizard.chunks_preview = ~{0} chunks + +# ========== Zone Hernoemen ========== +zone_rename.zone_gone = Zone bestaat niet meer. +zone_rename.enter_name = Voer een zonenaam in. +zone_rename.too_short = Zonenaam moet minstens {0} teken lang zijn. +zone_rename.too_long = Zonenaam mag niet meer dan {0} tekens bevatten. +zone_rename.same_name = Dat is al de naam van deze zone. +zone_rename.renamed = [Admin] Zone hernoemd van {0} naar {1}! +zone_rename.name_taken = Er bestaat al een zone met die naam. +zone_rename.invalid_name = Ongeldige zonenaam. +zone_rename.rename_failed = Zone hernoemen mislukt: {0} + +# ========== Zone Type Wijzigen ========== +zone_type.zone_gone = Zone bestaat niet meer. +zone_type.changed = [Admin] {0} gewijzigd van {1} naar {2} ({3}). +zone_type.failed = Zonetype wijzigen mislukt: {0} +zone_type.flags_reset = vlaggen gereset +zone_type.flags_kept = vlaggen behouden + +# ========== Zone Integratievlaggen ========== +zone_int.zone_not_found = Zone Niet Gevonden +zone_int.no_plugin = (geen plugin) +zone_int.default = (standaard) +zone_int.custom = (aangepast) + +# UI-labels integratievlaggen +gui.zint_cat_gravestones = Grafstenen +gui.zint_gravestones_desc = Indien AAN kunnen niet-eigenaren graven plunderen. Eigenaren kunnen dat altijd. +gui.zint_cat_world_map = Wereldkaart +gui.zint_world_map_desc = Overschrijf kaartverberging voor spelers in deze zone. Indien ingeschakeld, selecteer wie spelers in deze zone kan zien. +gui.zint_visibility_label = Zichtbaarheidsniveau: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Standaardwaarden Herstellen +gui.zint_back_to_flags = Terug naar Vlaggen +gui.zint_map_vis_faction = Alleen Factie +gui.zint_map_vis_ally = Factie + Bondgenoten +gui.zint_map_vis_all = Alle Spelers + +# ========== Activiteitenlog ========== +log.all_types = Alle Types +log.no_logs = Geen activiteitenlogs die overeenkomen met filters. + +# ========== Versiepagina ========== +version.active = Actief +version.not_found = Niet Gevonden +version.not_detected = Niet Gedetecteerd +version.not_installed = Niet Geinstalleerd +version.active_version = Actief (v{0}) +version.active_compatible = Actief (compatibel) +version.active_claims_only = Actief (alleen claims) +version.installed_no_perm = Geinstalleerd (geen perm provider) +version.active_provider = Actief ({0}) + +# ========== Admin Hoofdpagina ========== +main.reload_hint = Gebruik /f reload om configuratie te herladen. +main.unclaim_hint = Gebruik /f admin unclaim {0} om alle {1} chunks vrij te geven. + +# ========== Zone Vlaggen/Instellingen ========== +zflags.invalid_flag = Ongeldige vlag. +zflags.zone_not_found = Zone niet gevonden. +zflags.conflict = (conflict) +zflags.mixin = (mixin) +zflags.reset_int = Integratievlaggen naar standaard herstellen. +zflags.reset_all = Alle vlaggen naar standaard herstellen. +zflags.reset_failed = Vlaggen resetten mislukt: {0} +zflags.back_to_settings = Terug naar Instellingen + +# Zone-instellingen UI-labels +gui.zset_cat_combat = Gevecht +gui.zset_cat_damage = Schade +gui.zset_cat_death = Dood +gui.zset_cat_building = Bouwen +gui.zset_cat_interaction = Interactie +gui.zset_cat_transport = Transport +gui.zset_cat_items = Items +gui.zset_cat_spawning = Mob-spawning +gui.zset_cat_mob_clear = Mob-opruiming +gui.zset_children_hint = (onderliggende opties alleen actief wanneer bovenliggende AAN is) +gui.zset_reset_defaults = Standaardwaarden Herstellen +gui.zset_integration_flags = Integratievlaggen +gui.zset_back_to_zones = Terug naar Zones +gui.zset_chunks = {0} chunks + +# Zone Vlag Weergavenamen +gui.zflag_pvp_enabled = PvP Ingeschakeld +gui.zflag_friendly_fire = Vriendelijk Vuur +gui.zflag_friendly_fire_faction = Factieschade +gui.zflag_friendly_fire_ally = Bondgenootschade +gui.zflag_projectile_damage = Projectielschade +gui.zflag_mob_damage = Mobschade Ontvangen +gui.zflag_pve_damage = Mobschade Uitdelen +gui.zflag_fall_damage = Valschade +gui.zflag_environmental_damage = Omgevingsschade +gui.zflag_explosion_damage = Explosieschade +gui.zflag_fire_spread = Vuurverspreiding +gui.zflag_keep_inventory = Inventaris Behouden +gui.zflag_power_loss = Krachtverlies +gui.zflag_build_allowed = Bouwen Toegestaan +gui.zflag_block_place = Blok Plaatsen +gui.zflag_hammer_use = Hamergebruik +gui.zflag_builder_tools_use = Bouwgereedschap +gui.zflag_block_interact = Blokinteractie +gui.zflag_door_use = Deurgebruik +gui.zflag_container_use = Opberggebruik +gui.zflag_bench_use = Werkbankgebruik +gui.zflag_processing_use = Verwerkingsgebruik +gui.zflag_seat_use = Zitplaatsgebruik +gui.zflag_mount_use = Mountgebruik +gui.zflag_light_use = Verlichtingsgebruik +gui.zflag_npc_use = NPC-interactie +gui.zflag_crate_pickup = Krat Oprapen +gui.zflag_crate_place = Krat Plaatsen +gui.zflag_npc_tame = NPC Temmen +gui.zflag_npc_interact = NPC Interactie +gui.zflag_teleporter_use = Teleportergebruik +gui.zflag_portal_use = Portaalgebruik +gui.zflag_mount_entry = Mount Betreden +gui.zflag_item_drop = Item Laten Vallen +gui.zflag_item_pickup = Automatisch Oprapen +gui.zflag_item_pickup_manual = F-toets Oprapen +gui.zflag_invincible_items = Onverwoestbare Items +gui.zflag_mob_spawning = Mob-spawning +gui.zflag_hostile_mob_spawning = Vijandige Mobs +gui.zflag_passive_mob_spawning = Passieve Mobs +gui.zflag_neutral_mob_spawning = Neutrale Mobs +gui.zflag_npc_spawning = NPC-spawning +gui.zflag_mob_clear = Mob-opruiming +gui.zflag_hostile_mob_clear = Vijandige Mobs Opruimen +gui.zflag_passive_mob_clear = Passieve Mobs Opruimen +gui.zflag_neutral_mob_clear = Neutrale Mobs Opruimen +gui.zflag_gravestone_access = Anderen Plunderen Graven +gui.zflag_show_on_map = Tonen op Kaart +gui.zflag_essentials_homes = Basisgebruik +gui.zflag_essentials_warps = Warpgebruik +gui.zflag_essentials_kits = Kit Claimen + +# ========== Zone Eigenschappen ========== +zprop.current_custom = Huidig: "{0}" (aangepast) +zprop.current_default = Huidig: "{0}" (standaard) +zprop.pvp_disabled = PvP Uitgeschakeld +zprop.pvp_enabled = PvP Ingeschakeld +zprop.name_empty = Naam mag niet leeg zijn. +zprop.renamed = Zone hernoemd naar "{0}". +zprop.name_taken = Er bestaat al een zone met die naam. +zprop.name_invalid = Ongeldige naam (max 32 tekens). +zprop.rename_failed = Hernoemen mislukt: {0} +zprop.upper_empty = Boventitel mag niet leeg zijn. Gebruik Wissen om te resetten. +zprop.upper_set = Boventitel ingesteld. +zprop.upper_reset = Boventitel gereset naar standaard. +zprop.lower_empty = Ondertitel mag niet leeg zijn. Gebruik Wissen om te resetten. +zprop.lower_set = Ondertitel ingesteld. +zprop.lower_reset = Ondertitel gereset naar standaard. + +# ========== Relaties Aanvullend ========== +relations.failed = Mislukt: {0} + +# ========== Leden Aanvullend ========== +members.never = Nooit +members.teleported = [Admin] Geteleporteerd naar {0}. + +# ========== Spelerinfo Aanvullend ========== +playerinfo.records = {0} vermeldingen +playerinfo.joined_date = Toegetreden: {0} +playerinfo.current = Huidig +playerinfo.left_date = Vertrokken: {0} + +# ========== Zonekaart ========== +map.world_warning = WAARSCHUWING: Je bent in '{0}' - zone is in '{1}' +map.position = Jouw Positie: Chunk ({0}, {1}) +map.zone_gone = Zone bestaat niet meer. +map.claimed = Chunk geclaimd ({0}, {1}) voor {2}. +map.claim_failed = Chunk claimen mislukt: {0} +map.unclaimed = Chunk vrijgegeven ({0}, {1}) van {2}. +map.unclaim_failed = Chunk vrijgeven mislukt: {0} +map.chunk_belongs = Dit chunk behoort toe aan {0}. +map.chunk_faction = Dit chunk is geclaimd door een factie. +map.chunk_protected = Dit chunk bevindt zich in een beschermd gebied. +map.another_zone = een andere zone + +# ========== GUI Label Sleutels (voor .ui hardcoded tekst lokalisatie) ========== + +# Paginatitels +gui.title_dashboard = Admin Dashboard +gui.title_main = Facties Admin +gui.title_actions = Admin: Serveracties +gui.title_factions = Factiebeheer +gui.title_players = Spelerbeheer +gui.title_economy = Admin: Servereconomie +gui.title_zones = Zonebeheer +gui.title_backups = Back-ups +gui.title_config = Configuratie +gui.title_help = Admin Hulp +gui.title_updates = Updates +gui.title_version = Versie en Integraties +gui.title_activity_log = Admin: Activiteitenlog +gui.title_player_info = Admin: Spelerinfo +gui.title_faction_info = Admin: Factie-info +gui.title_faction_settings = Admin: Factie-instellingen +gui.title_faction_members = Admin: Leden +gui.title_faction_relations = Admin: Relaties +gui.title_zone_map = Zone Kaarteditor +gui.title_zone_settings = Admin: Zone-instellingen +gui.title_zone_properties = Admin: Zone-eigenschappen +gui.title_bulk_economy = Bulk Schatkist Aanpassen +gui.title_economy_adjust = Admin: Economie + +# Dashboard labels +gui.dash_server_stats = Serverstatistieken +gui.dash_factions = Facties +gui.dash_total_members = Totaal Leden +gui.dash_total_claims = Totaal Gebieden +gui.dash_zones = Zones +gui.dash_safe_war = safe / war +gui.dash_total_power = Totale Kracht +gui.dash_avg_power = Gem. Kracht/Factie +gui.dash_total_economy = Totale Economie +gui.dash_wealthiest = Rijkste +gui.dash_avg_balance = Gem. Saldo +gui.dash_protection_bypass = Beschermingsbypass: + +# Algemene knoppen en labels +gui.search = Zoeken: +gui.sort = Sorteren: +gui.prev = < Vorige +gui.next = Volgende > +gui.back = Terug +gui.done = Klaar +gui.cancel = Annuleren +gui.apply = Toepassen +gui.set = Instellen +gui.reset = Resetten +gui.coming_soon = Binnenkort Beschikbaar +gui.zones_btn = Zones +gui.reload_btn = Herladen +gui.all = Alles +gui.safe = Safe +gui.war = War +gui.create_zone = + Aanmaken + +# Actiepagina labels +gui.act_combat_stats = Gevechtsstatistieken +gui.act_combat_desc = Reset kills en sterfgevallen voor ALLE spelers op de server. Deze actie kan niet ongedaan worden gemaakt. +gui.act_reset_kd = Alle K/D Resetten +gui.act_economy = Economie +gui.act_economy_desc = Voeg geld toe of verwijder geld uit ALLE factieschatkisten tegelijk. +gui.act_bulk_adjust = Bulk Toevoegen/Verwijderen +gui.act_upkeep_collection = Onderhoudsinning +gui.act_upkeep_desc = Activeer handmatig de onderhoudsinning voor alle facties, ongeacht de geplande timer. +gui.act_trigger_upkeep = Onderhoud Activeren + +# Placeholder pagina labels +gui.backup_heading = Back-upbeheer +gui.backup_desc1 = Maak, herstel en beheer back-ups van factiegegevens. +gui.backup_desc2 = Automatische back-ups worden opgeslagen in de map data/backups. +gui.config_heading = Configuratie-editor +gui.config_desc1 = Configureer HyperFactions-instellingen rechtstreeks vanuit de GUI. +gui.config_desc2 = Gebruik voorlopig /f reload om configuratiewijzigingen te herladen. +gui.help_heading = Admin Documentatie +gui.help_desc1 = Bekijk admin-documentatie en commandoreferentie. +gui.help_desc2 = Bezoek de HyperFactions wiki voor hulp. +gui.updates_heading = Updatecentrum +gui.updates_desc1 = Controleer op nieuwe versies en bekijk changelogs. +gui.updates_desc2 = Bezoek de HyperFactions-pagina voor de laatste updates. + +# Versiepagina labels +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Hytale Server +gui.ver_java = Java +gui.ver_permissions = RECHTEN +gui.ver_placeholders = PLAATSHOUDERS +gui.ver_economy_section = ECONOMIE +gui.ver_protection = BESCHERMING +gui.ver_disabled = Uitgeschakeld + +# Kolomkoppen (gedeeld over pagina's) +gui.col_faction = Factie +gui.col_balance = Saldo +gui.col_members = Leden +gui.col_actions = Acties +gui.col_time = Tijd +gui.col_type = Type +gui.col_message = Bericht + +# Economiepagina labels +gui.econ_total_balance = Totaal Saldo +gui.econ_factions = Facties +gui.econ_avg_balance = Gem. Saldo +gui.econ_in_grace = In Uitstel +gui.econ_collected = Geind (24u) +gui.econ_next_collection = Volgende Inning +gui.econ_no_data = Geen facties met economiegegevens. + +# Activiteitenlog labels +gui.log_type = Type: +gui.log_time = Tijd: +gui.log_player = Speler: +gui.log_no_logs = Geen activiteitenlogs die overeenkomen met filters. + +# Spelerinfo labels +gui.plr_first_joined = Eerste keer toegetreden: +gui.plr_last_online = Laatst online: +gui.plr_uuid = UUID: +gui.plr_faction = Factie: +gui.plr_role = Rol: +gui.plr_view_faction = Factie Bekijken +gui.plr_power = Kracht +gui.plr_max_power = Max Kracht +gui.plr_set_power = Instellen +gui.plr_reset_power = Resetten +gui.plr_set_max = Instellen +gui.plr_reset_max = Resetten +gui.plr_no_power_loss = Geen Krachtverlies +gui.plr_no_claim_decay = Geen Claimverval +gui.plr_kills = Kills +gui.plr_deaths = Sterfgevallen +gui.plr_kdr = K/D-ratio +gui.plr_reset_kd = K/D Resetten +gui.plr_kick = Schoppen +gui.plr_membership_history = Lidmaatschapsgeschiedenis +gui.plr_no_faction_label = Niet in een factie +gui.plr_power_management = Krachtbeheer +gui.plr_combat_stats = Gevechtsstatistieken +gui.plr_bypass_flags = Bypassvlaggen +gui.plr_admin_controls = Adminbediening +gui.plr_kd_subtitle = K / D +gui.plr_max_prefix = Max: +gui.plr_view = Bekijken +gui.plr_kick_from_faction = Uit Factie Schoppen +gui.plr_set_max_btn = Max Instellen +gui.plr_combat = Gevecht +gui.plr_reason_active = ACTIEF +gui.plr_reason_left = VERTROKKEN +gui.plr_reason_kicked = GESCHOPT +gui.plr_reason_disbanded = ONTBONDEN + +# Lid-entry labels +gui.mem_label_power = Kracht: +gui.mem_label_joined = Toegetreden: +gui.mem_label_last_death = Laatste Dood: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Info +gui.mem_btn_teleport = Teleporteren +gui.mem_btn_promote = Promoveren +gui.mem_btn_demote = Degraderen +gui.mem_btn_kick = Schoppen +gui.econ_not_enabled = Economiesysteem is niet ingeschakeld. +gui.info_more = +{0} meer +gui.log_time_1h = 1u +gui.log_time_24h = 24u +gui.log_time_7d = 7d +gui.log_time_all = Alles +gui.shape_circular = cirkelvormig +gui.shape_square = vierkant +gui.nav_title = Admin Paneel +gui.econ_btn_adjust = Aanpassen +gui.econ_btn_info = Info + +# Factie-info labels +gui.fac_description = Beschrijving +gui.fac_power = Kracht +gui.fac_claims = Gebieden +gui.fac_members = Leden +gui.fac_recruitment = Werving +gui.fac_founded = Opgericht +gui.fac_allies = Bondgenoten +gui.fac_enemies = Vijanden +gui.fac_raidable = Plunderstatus +gui.fac_treasury = Schatkist +gui.fac_leader = Leider +gui.fac_officers = Officieren +gui.fac_view_members = Leden Bekijken +gui.fac_view_relations = Relaties Bekijken +gui.fac_view_settings = Instellingen +gui.fac_disband = Factie Ontbinden +gui.fac_power_management = Krachtbeheer +gui.fac_reset_all_power = Alle Kracht Resetten +gui.fac_econ_adjust = Saldo Aanpassen +gui.fac_econ_view_log = Transactielog Bekijken +gui.fac_current_max = huidig / max +gui.fac_claimed_max = geclaimd / max +gui.fac_relations = Relaties +gui.fac_ally_enemy = bondgenoot / vijand +gui.fac_status = Status +gui.fac_info = Info +gui.fac_treasury_balance = schatkistsaldo +gui.fac_leadership = Leiderschap +gui.fac_leader_label = Leider: +gui.fac_officers_label = Officieren: +gui.fac_econ_mgmt = Economiebeheer +gui.fac_danger_zone = Gevarenzone +gui.fac_view_treasury = Schatkist Bekijken + +# Factie-instellingen labels +gui.set_editing = Bewerken: +gui.set_general = Algemene Instellingen +gui.set_name = Naam +gui.set_tag = Tag +gui.set_description = Beschrijving +gui.set_recruitment = Werving +gui.set_home = Basislocatie +gui.set_clear_home = Basis Wissen +gui.set_disband_faction = Factie Ontbinden +gui.set_faction_color = Factiekleur +gui.set_admin_override = [Admin Overschrijving] +gui.set_territory_perms = Territoriumrechten +gui.set_mob_spawning = Mob-spawning +gui.set_faction_settings = Factie-instellingen +gui.set_name_label = Naam: +gui.set_tag_label = Tag: +gui.set_desc_label = Beschr.: +gui.set_edit = Bewerken +gui.set_status_label = Status: +gui.set_location_label = Locatie: +gui.set_danger_zone = Gevarenzone +gui.set_irreversible = Deze actie is onomkeerbaar. +gui.set_lock_hint = Sommige opties kunnen door de server vergrendeld zijn en accepteren geen wijzigingen. +gui.set_appearance = Uiterlijk +gui.set_color_label = Kleur: +gui.set_mob_sub = (onderliggende opties uitgeschakeld wanneer hoofdschakelaar uit is) +gui.set_back_to_info = Terug naar Info +gui.set_col_out = Buiten +gui.set_col_ally = Bondg. +gui.set_col_mem = Lid +gui.set_col_off = Off. +gui.set_cat_building = BOUWEN +gui.set_cat_interaction = INTERACTIE +gui.set_cat_interact_sub = (onderliggende opties uitgeschakeld wanneer Alles uit is) +gui.set_cat_other = OVERIG +gui.set_perm_break = Breken +gui.set_perm_place = Plaatsen +gui.set_perm_all = Alles +gui.set_perm_door = Deur +gui.set_perm_chest = Kist +gui.set_perm_bench = Werkbank +gui.set_perm_processing = Verwerking +gui.set_perm_seat = Zitplaats +gui.set_perm_transport = Transport +gui.set_perm_crate_use = Kratgebruik +gui.set_perm_npc_tame = NPC Temmen +gui.set_perm_pve_damage = PvE-schade +gui.set_perm_mob_spawning = Mob-spawning +gui.set_perm_hostile = Vijandige Mobs +gui.set_perm_passive = Passieve Mobs +gui.set_perm_neutral = Neutrale Mobs +gui.set_perm_pvp = PvP in Territorium +gui.set_perm_officers_edit = Officieren kunnen bewerken + +# Factierelatie labels +gui.rel_subtitle = Factierelaties beheren (omzeilt goedkeuring) +gui.rel_set_new = Nieuwe Relatie Instellen +gui.rel_btn_ally = Bondgenoot +gui.rel_btn_neutral = Neutraal +gui.rel_btn_enemy = Vijand + +# Zonepagina labels +gui.zone_sort_name = Naam +gui.zone_sort_type = Type +gui.zone_sort_chunks = Chunks +gui.zone_sort_world = Wereld +gui.zone_count_format = {0} {1}zones ({2} chunks) + +# Zonekaart labels +gui.map_zone_chunk = Zone Chunk +gui.map_empty = Leeg +gui.map_other_zone = Andere Zone +gui.map_faction_claim = Factiegebied +gui.map_protected = Beschermd +gui.map_your_pos = Jouw Positie +gui.map_click_hint = Klik om chunks te claimen/unclaimen +gui.map_legend_zone_safe = Deze Zone (Safe) +gui.map_legend_zone_war = Deze Zone (War) +gui.map_legend_other_safe = Andere SafeZone +gui.map_legend_other_war = Andere WarZone +gui.map_legend_faction = Factiegebied +gui.map_legend_unclaimed = Ongeclaimd +gui.map_legend_you_here = Je bent hier +gui.map_action_hint = Linksklik: Claimen voor zone | Rechtsklik: Unclaimen van zone +gui.map_done = Klaar + +# Zone-eigenschappen labels +gui.zprop_general = Algemeen +gui.zprop_zone_name = Zonenaam +gui.zprop_zone_type = Zonetype +gui.zprop_change_type = Type Wijzigen +gui.zprop_notifications = Meldingen +gui.zprop_show_entry = Toegangsmelding Tonen +gui.zprop_upper_title = Boventitel +gui.zprop_upper_desc = Boventitel (kleine tekst boven zonenaam) +gui.zprop_lower_title = Ondertitel +gui.zprop_lower_desc = Ondertitel (grote zonenaamtekst) +gui.zprop_edit_flags = Vlaggen Bewerken +gui.zprop_back_to_zones = Terug naar Zones +gui.save = Opslaan +gui.clear = Wissen + +# Bulk economie labels +gui.bulk_header = Alle Factieschatkisten Aanpassen +gui.bulk_factions_label = Facties: +gui.bulk_total_label = Totaal Saldo: +gui.bulk_amount_hint = Bedrag (positief om toe te voegen, negatief om te verwijderen): +gui.bulk_hint = Dit wordt toegepast op elke factie met een schatkist +gui.bulk_warning_msg = Waarschuwing: Deze actie beinvloedt ALLE facties en kan niet ongedaan worden gemaakt. +gui.bulk_apply_all = Op Alles Toepassen +gui.bulk_operation = Bewerking +gui.bulk_add = Toevoegen +gui.bulk_remove = Verwijderen +gui.bulk_amount = Bedrag +gui.bulk_warning = Dit beinvloedt ALLE factieschatkisten. +gui.bulk_preview = Voorbeeld + +# Economie aanpassen labels +gui.ecadj_header = Schatkistsaldo Aanpassen +gui.ecadj_faction_label = Factie: +gui.ecadj_current_balance = Huidig Saldo: +gui.ecadj_amount_hint = Bedrag (positief om toe te voegen, negatief om af te trekken): +gui.ecadj_preview_hint = Voer een getal in om de wijziging te bekijken +gui.ecadj_adjustment = Aanpassing: +gui.ecadj_set_balance = Saldo Instellen +gui.ecadj_confirm = Bevestig +/- +gui.ecadj_operation = Bewerking +gui.ecadj_add = Toevoegen +gui.ecadj_remove = Verwijderen +gui.ecadj_set_to = Instellen Op +gui.ecadj_amount = Bedrag +gui.ecadj_new_balance = Nieuw Saldo: + +# Versiepagina integratie labels +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Native +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Grafstenen +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Schatkist + +# Alles unclaimen bevestigingsmodaal labels +gui.unclaim_title = Alle Gebieden Vrijgeven +gui.unclaim_confirm_msg1 = Weet je zeker dat je alle gebieden wilt vrijgeven +gui.unclaim_confirm_msg2 = van +gui.unclaim_warning = Deze actie kan niet ongedaan worden gemaakt! +gui.unclaim_all = Alles Vrijgeven + +# Zone hernoemen modaal labels +gui.zren_title = Zone Hernoemen +gui.zren_current = Huidig: +gui.zren_new_name = Nieuwe Naam: + +# Zone type wijzigen modaal labels +gui.ztype_title = Zonetype Wijzigen +gui.ztype_zone_label = Zone: +gui.ztype_current = Huidig: +gui.ztype_will_become = wordt +gui.ztype_new = Nieuw: +gui.ztype_warning1 = Verschillende zonetypes hebben verschillende standaard vlagwaarden. +gui.ztype_warning2 = Kies hoe bestaande vlaginstellingen behandeld moeten worden: +gui.ztype_keep_desc = Aangepaste overschrijvingen behouden +gui.ztype_keep_flags = Vlaggen Behouden +gui.ztype_reset_desc = Nieuwe type standaarden gebruiken +gui.ztype_reset_flags = Vlaggen Resetten + +# Zone aanmaakwizard labels +gui.czw_title = Zone Aanmaken +gui.czw_back = < Terug +gui.czw_create = Zone Aanmaken +gui.czw_zone_type = Zonetype +gui.czw_safe_desc = Beschermd, geen PvP +gui.czw_war_desc = Gevecht, PvP ingeschakeld +gui.czw_zone_name = Zonenaam +gui.czw_name_desc = Voer een unieke naam in voor de zone +gui.czw_claim_method = Claimmethode +gui.czw_method_none_desc = Lege zone aanmaken +gui.czw_method_none = Geen claims +gui.czw_method_single_desc = Je huidige chunk +gui.czw_method_single = Enkele chunk +gui.czw_method_circle_desc = Cirkelvormig gebied +gui.czw_method_circle = Cirkelradius +gui.czw_method_square_desc = Vierkant gebied +gui.czw_method_square = Vierkantradius +gui.czw_method_map_desc = Interactieve chunk-editor +gui.czw_method_map = Claimkaart gebruiken +gui.czw_radius = Radius +gui.czw_custom_radius = Aangepast (1-50): +gui.czw_flags = Vlaggen +gui.czw_flags_defaults_desc = Gebaseerd op zonetype +gui.czw_flags_defaults = Standaard gebruiken +gui.czw_flags_customize_desc = Instellingen openen na +gui.czw_flags_customize = Aanpassen + +# ========== Entry Labels (Factie/Speler/Zone lijstvermeldingen) ========== + +# Factie-entry labels +gui.fac_entry_power = kracht +gui.fac_entry_claims = gebieden +gui.fac_entry_members = leden +gui.fac_entry_created = Opgericht: +gui.fac_entry_home = Basis: +gui.fac_entry_tp_home = TP Basis +gui.fac_entry_view_info = Info Bekijken +gui.fac_entry_members_btn = Leden +gui.fac_entry_settings = Instellingen +gui.fac_entry_unclaim_all = Alles Vrijgeven +gui.fac_entry_disband = Ontbinden + +# Speler-entry labels +gui.plr_entry_role = Rol: +gui.plr_entry_joined = Toegetreden: +gui.plr_entry_last_online = Laatst Online: +gui.plr_entry_kdr = K/D/R: +gui.plr_entry_power = Kracht: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Info +gui.plr_entry_teleport = Teleporteren +gui.plr_entry_na = N.v.t. +gui.plr_entry_unknown = Onbekend +gui.plr_entry_ago = {0} geleden + +# Zone-entry labels +gui.zone_entry_world = Wereld: +gui.zone_entry_chunks = Chunks: +gui.zone_entry_bounds = Grenzen: +gui.zone_entry_created = Aangemaakt: +gui.zone_entry_edit_map = Kaart Bewerken +gui.zone_entry_flags = Vlaggen +gui.zone_entry_settings = Instellingen +gui.zone_entry_delete = Verwijderen diff --git a/src/main/resources/Server/Languages/nl-NL/hyperfactions_gui.lang b/src/main/resources/Server/Languages/nl-NL/hyperfactions_gui.lang new file mode 100644 index 00000000..824e7dad --- /dev/null +++ b/src/main/resources/Server/Languages/nl-NL/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Nederlandse Vertalingen +# Formaat: sleutel = waarde +# Opmerking: Sleutels krijgen automatisch het voorvoegsel "hyperfactions_gui." door Hytale's I18nModule + +# ========== Navigatiebalk ========== +nav.dashboard = Dashboard +nav.chat = Chat +nav.members = Leden +nav.invites = Uitnodigingen +nav.browser = Bladeren +nav.map = Kaart +nav.leaderboard = Ranglijst +nav.relations = Relaties +nav.treasury = Schatkist +nav.settings = Instellingen +nav.logs = Logboek +nav.help = Hulp +nav.admin = Admin +nav.create = Aanmaken + +# ========== Hulpcategorienamen ========== +help.category.welcome = Welkom +help.category.your_faction = Jouw Factie +help.category.power_land = Kracht & Land +help.category.diplomacy = Diplomatie +help.category.combat = Gevecht & Veiligheid +help.category.economy = Economie +help.category.quick_ref = Snelreferentie + +# ========== Admin Hulpcategorienamen ========== +help.category.admin_overview = Overzicht +help.category.admin_factions = Facties +help.category.admin_zones = Zones +help.category.admin_power = Kracht +help.category.admin_economy = Economie +help.category.admin_config = Configuratie +help.category.admin_maintenance = Onderhoud +help.category.admin_reference = Referentie + +# ========== Hoofdmenu ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Mijn Factie +main_menu.section_get_started = Aan de Slag +main_menu.section_territory = Territorium +main_menu.section_browse = Bladeren +main_menu.section_admin = Admin +main_menu.claim_hint = Gebruik /f claim om territorium te claimen. + +# ========== Factie-infopagina ========== +faction_info.title = Factie-info +faction_info.no_description = Geen beschrijving ingesteld. +faction_info.status_open = Open +faction_info.status_invite_only = Alleen op Uitnodiging +faction_info.status_raidable = Plunderbaar +faction_info.status_protected = Beschermd +faction_info.officers_more = +{0} meer +faction_info.power_header = Kracht +faction_info.claims_header = Gebieden +faction_info.members_header = Leden +faction_info.relations_header = Relaties +faction_info.status_header = Status +faction_info.treasury_header = Schatkist +faction_info.current_max = huidig / max +faction_info.claimed_max = geclaimd / max +faction_info.ally_enemy = bondgenoot / vijand +faction_info.faction_balance = factiesaldo +faction_info.leader_label = Leider: +faction_info.officers_label = Officieren: +faction_info.view_members_btn = Leden Bekijken +faction_info.relations_btn = Relaties +faction_info.back_btn = Terug + +# ========== Hernoemen Modaal ========== +rename.title = Factie Hernoemen +rename.current_label = Huidig: +rename.new_name_label = Nieuwe Naam: +rename.no_permission = Je hebt geen toestemming om de factie te hernoemen. +rename.enter_name = Voer een factienaam in. +rename.too_short = Factienaam moet minstens {0} tekens lang zijn. +rename.too_long = Factienaam mag niet meer dan {0} tekens bevatten. +rename.same_name = Dat is al de naam van je factie. +rename.name_taken = Er bestaat al een factie met die naam. +rename.success = Factie hernoemd van {0} naar {1}! + +# ========== Beschrijving Modaal ========== +desc.title = Beschrijving Bewerken +desc.current_label = Huidig: +desc.new_desc_label = Nieuwe Beschrijving: +desc.no_permission = Je hebt geen toestemming om de beschrijving te bewerken. +desc.display_none = (Geen) +desc.cleared = Factiebeschrijving gewist. +desc.updated = Factiebeschrijving bijgewerkt! + +# ========== Tag Modaal ========== +tag.title = Tag Bewerken +tag.current_label = Huidig: +tag.instructions = Tag (1-5 tekens, alleen letters en cijfers): +tag.help_text = Tags verschijnen in de chat en op de kaart +tag.no_permission = Je hebt geen toestemming om de tag te bewerken. +tag.display_none = (Geen) +tag.cleared = Factietag gewist. +tag.too_short = Tag moet minstens {0} teken lang zijn. +tag.too_long = Tag mag niet meer dan {0} tekens bevatten. +tag.invalid_format = Tag mag alleen letters en cijfers bevatten. +tag.same_tag = Dat is al de tag van je factie. +tag.tag_taken = Er bestaat al een factie met die tag. +tag.success = Factietag ingesteld op [{0}]! + +# ========== Dashboardpagina ========== +dashboard.title = Factiedashboard +dashboard.power_label = Kracht +dashboard.land_label = Gebieden +dashboard.members_label = Leden +dashboard.online_label = Online +dashboard.allies_label = Bondgenoten +dashboard.enemies_label = Vijanden +dashboard.relations_label = Relaties +dashboard.ally_enemy_label = bondgenoot / vijand +dashboard.status_label = Status +dashboard.invites_label = Uitnodigingen +dashboard.sent_requests_label = verstuurd / verzoeken +dashboard.treasury_label = Schatkist +dashboard.upkeep_label = Onderhoud +dashboard.per_cycle = per cyclus +dashboard.your_wallet = Jouw Portemonnee +dashboard.personal_balance = persoonlijk saldo +dashboard.quick_actions = Snelle Acties +dashboard.teleport_label = Teleporteren +dashboard.territory_label = Territorium +dashboard.channel_label = Kanaal +dashboard.membership_label = Lidmaatschap +dashboard.recent_activity = Recente Activiteit +dashboard.view_all = Alles Bekijken +dashboard.income_24h = Inkomsten (24u) +dashboard.deposits_transfers_in = stortingen, binnenkomende overboekingen +dashboard.expenses_24h = Uitgaven (24u) +dashboard.withdrawals_transfers_out = opnames, uitgaande overboekingen +dashboard.faction_gone = Je factie bestaat niet meer. +dashboard.available = {0} beschikbaar +dashboard.at_risk = In Gevaar! +dashboard.online_count = {0} online +dashboard.status_invite = Uitnodiging +dashboard.in_grace = IN UITSTEL +dashboard.billable_chunks = {0} betaalbare gebieden +dashboard.btn_home = Basis +dashboard.btn_set_home = Basis Instellen +dashboard.btn_claim = Claimen +dashboard.chat_prefix = Chat: {0} +dashboard.btn_leave = Verlaten +dashboard.no_activity = Geen recente activiteit. +dashboard.time_now = nu +dashboard.time_minutes = {0}m geleden +dashboard.time_hours = {0}u geleden +dashboard.time_days = {0}d geleden +dashboard.no_home_hint = Je factie heeft geen basis ingesteld. Vraag een officier om er een in te stellen. +dashboard.chat_mode_set = Chatmodus: {0} +dashboard.claim_success = Gebied geclaimd op ({0}, {1}) +dashboard.upkeep_in = over {0} + +# ========== Factie Hoofdpagina ========== +main.no_faction = Geen Factie +main.joined = Je bent toegetreden tot de factie! +main.join_failed = Toetreden tot factie mislukt: {0} +main.invite_declined = Uitnodiging afgewezen. +main.cooldown = Teleport op cooldown! Nog {0}s. +main.world_not_found = Kan niet teleporteren - wereld niet gevonden. +main.leave_failed = Verlaten mislukt: {0} + +# ========== Gedeelde GUI-labels ========== +common.faction_count = {0} facties +common.leader_label = Leider: {0} +common.sort_power = Kracht +common.sort_members = Leden +common.page_format = {0}/{1} +common.own_faction = (Jij) +common.search = Zoeken: +common.sort = Sorteren: +common.prev = < Vorige +common.next = Volgende > +common.treasury_not_available = Schatkist is niet beschikbaar. + +# ========== Ledenpagina ========== +members.title = Leden +members.search_label = Zoeken: +members.sort_label = Sorteren: +members.prev_btn = < Vorige +members.next_btn = Volgende > +members.count = {0} leden +members.sort_role = Rol +members.sort_last_online = Laatst Online +members.just_now = zojuist +members.ago = {0} geleden +members.never = Nooit +members.member_not_found = Lid niet gevonden. +members.promoted = {0} gepromoveerd tot {1}. +members.promote_failed = Promoveren mislukt: {0} +members.demoted = {0} gedegradeerd naar {1}. +members.demote_failed = Degraderen mislukt: {0} +members.kicked = {0} uit de factie geschopt. +members.kick_failed = Schoppen mislukt: {0} +members.label_power = Kracht: +members.label_joined = Toegetreden: +members.label_last_death = Laatste Dood: +members.btn_promote = Promoveren +members.btn_demote = Degraderen +members.btn_kick = Schoppen +members.btn_make_leader = Leider Maken +members.btn_profile = Profiel +members.self_label = (Jij) + +# ========== Bladerpagina ========== +browser.title = Facties Bladeren +browser.search_label = Zoeken: +browser.sort_label = Sorteren: +browser.prev_btn = < Vorige +browser.next_btn = Volgende > +browser.sort_name = Naam +browser.invalid_faction = Ongeldige factie. +browser.label_power = kracht +browser.label_claims = gebieden +browser.label_members = leden +browser.label_recruitment = Werving: +browser.label_created = Opgericht: +browser.label_description = Beschrijving: +browser.view_info_btn = Info Bekijken +browser.label_leader = Leider: +browser.no_description = Geen beschrijving ingesteld + +# ========== Ranglijstpagina ========== +leaderboard.title = Factieranglijst +leaderboard.rank_by = Rangschikken op: +leaderboard.col_rank = # +leaderboard.col_faction = Factie +leaderboard.col_claims = Gebieden +leaderboard.col_members = Leden +leaderboard.prev_btn = < Vorige +leaderboard.next_btn = Volgende > +leaderboard.sort_kd = K/D +leaderboard.sort_territory = Territorium +leaderboard.sort_balance = Saldo + +# ========== Spelerinfopagina ========== +playerinfo.title = Spelerinfo +playerinfo.first_joined_label = Eerste keer toegetreden: +playerinfo.last_online_label = Laatst online: +playerinfo.faction_label = Factie: +playerinfo.role_label = Rol: +playerinfo.joined_label_static = Toegetreden: +playerinfo.not_in_faction = Niet in een factie +playerinfo.power_header = Kracht +playerinfo.current_max = huidig / max +playerinfo.combat_header = Gevecht +playerinfo.kills_deaths = kills / sterfgevallen +playerinfo.kdr_header = K/D-ratio +playerinfo.membership_history = Lidmaatschapsgeschiedenis +playerinfo.view_faction_btn = Factie Bekijken +playerinfo.back_btn = Terug +playerinfo.now = Nu +playerinfo.history_count = {0} vermeldingen +playerinfo.joined_label = Toegetreden: {0} +playerinfo.current = Huidig +playerinfo.left_label = Vertrokken: {0} +playerinfo.no_history = Geen lidmaatschapsgeschiedenis +playerinfo.faction_gone = Factie bestaat niet meer. +playerinfo.reason_active = ACTIEF +playerinfo.reason_left = VERTROKKEN +playerinfo.reason_kicked = GESCHOPT +playerinfo.reason_disbanded = ONTBONDEN + +# ========== Relatiepagina ========== +relations.title = Relaties +relations.tab_relations = Relaties +relations.tab_pending = In Afwachting +relations.set_relation_btn = + Relatie Instellen +relations.prev_btn = < Vorige +relations.next_btn = Volgende > +relations.relation_count = {0} relaties +relations.request_count = {0} verzoeken +relations.type_ally = Bondgenoot +relations.type_enemy = Vijand +relations.type_incoming = Inkomend +relations.type_outgoing = Uitgaand +relations.incoming_request = Inkomend verzoek +relations.outgoing_request = Uitgaand verzoek +relations.empty_relations = Nog geen relaties. +relations.empty_relations_hint = Nog geen relaties. Klik op + RELATIE INSTELLEN om bondgenoten of vijanden toe te voegen. +relations.empty_pending = Geen openstaande bondgenootschapsverzoeken. +relations.today = Vandaag +relations.one_day_ago = 1 dag geleden +relations.days_ago = {0} dagen geleden +relations.now_neutral = Nu neutraal met {0}. +relations.now_enemies = Nu vijanden met {0}! +relations.request_sent = Bondgenootschapsverzoek verstuurd naar {0}. +relations.now_allied = Nu bondgenoten met {0}! +relations.request_declined = Bondgenootschapsverzoek van {0} afgewezen. +relations.request_cancelled = Bondgenootschapsverzoek aan {0} geannuleerd. +relations.failed = Mislukt: {0} +relations.search_hint = Zoek een factie om een relatie in te stellen +relations.no_results = Geen facties gevonden die overeenkomen met '{0}' +relations.power_display = {0} kracht +relations.member_count = {0} leden +relations.label_members = leden +relations.label_power = kracht +relations.label_since = Sinds: +relations.label_claims = Gebieden: +relations.label_direction = Richting: +relations.btn_view = Bekijken +relations.btn_neutral = Neutraal +relations.btn_enemy = Vijand +relations.btn_ally = Bondgenoot +relations.btn_accept = Accepteren +relations.btn_decline = Afwijzen +relations.btn_cancel = Annuleren + +# ========== Instellingenpagina ========== +settings.title = Factie-instellingen +settings.general = Algemeen +settings.name_label = Naam: +settings.tag_label = Tag: +settings.desc_label = Beschr.: +settings.edit_btn = Bewerken +settings.recruitment = Werving +settings.status_label = Status: +settings.home_location = Basislocatie +settings.location_label = Locatie: +settings.set_home_btn = Basis Instellen +settings.teleport_btn = Teleporteren +settings.delete_btn = Verwijderen +settings.optional_features = Optionele Functies +settings.configure_modules = Configureer optionele modules. +settings.modules_btn = Modules +settings.danger_zone = Gevarenzone +settings.irreversible = Deze actie is onomkeerbaar. +settings.disband_btn = Factie Ontbinden +settings.lock_hint = Sommige opties kunnen door de server vergrendeld zijn en accepteren geen wijzigingen. +settings.territory_permissions = Territoriumrechten +settings.col_out = Buiten +settings.col_ally = Bondg. +settings.col_mem = Lid +settings.col_off = Off. +settings.cat_building = BOUWEN +settings.perm_break = Breken +settings.perm_place = Plaatsen +settings.cat_interaction = INTERACTIE +settings.interaction_hint = (onderliggende opties uitgeschakeld wanneer Alles uit is) +settings.perm_all = Alles +settings.perm_door = Deur +settings.perm_chest = Kist +settings.perm_bench = Werkbank +settings.perm_processing = Verwerking +settings.perm_seat = Zitplaats +settings.perm_transport = Transport +settings.cat_other = OVERIG +settings.perm_crate = Kratgebruik +settings.perm_npc_tame = NPC Temmen +settings.perm_pve = PvE-schade +settings.appearance = Uiterlijk +settings.color_label = Kleur: +settings.mob_spawning = Mob-spawning +settings.mob_spawning_hint = (onderliggende opties uitgeschakeld wanneer hoofdschakelaar uit is) +settings.mob_spawning_label = Mob-spawning +settings.hostile_mobs = Vijandige Mobs +settings.passive_mobs = Passieve Mobs +settings.neutral_mobs = Neutrale Mobs +settings.faction_settings = Factie-instellingen +settings.pvp_in_territory = PvP in Territorium +settings.officers_can_edit = Officieren kunnen bewerken +settings.leader_only = Alleen leider +settings.officers_only = Alleen officieren en leiders kunnen factie-instellingen wijzigen. +settings.display_none = (Geen) +settings.home_not_set = Niet ingesteld +settings.no_permission = Je hebt geen toestemming om instellingen te wijzigen. +settings.only_leader_disband = Alleen de leider kan de factie ontbinden. +settings.perm_locked = Deze instelling is vergrendeld door de server. +settings.no_perm_edit = Je hebt geen toestemming om territoriumrechten te bewerken. +settings.only_leader_officers = Alleen de leider kan de toegang van officieren wijzigen. +settings.pvp_enabled = Ingeschakeld +settings.pvp_disabled = Uitgeschakeld +settings.not_in_territory = Je moet in het territorium van je factie zijn om de basis in te stellen. +settings.home_set = Factiebasis ingesteld op je huidige locatie! +settings.recruitment_set = Werving ingesteld op {0}. +settings.home_no_set = Je factie heeft geen basis ingesteld. +settings.home_deleted = Factiebasis verwijderd! + +# ========== Modulespagina ========== +modules.title = Factiemodules +modules.description = Optionele functies om je factie te verbeteren +modules.configure_btn = Configureren +modules.back_btn = < Terug naar Instellingen +modules.treasury_name = Schatkist +modules.treasury_desc = Factiebank & economiesysteem +modules.raids_name = Raids +modules.raids_desc = Geplande factiegevechten +modules.levels_name = Niveaus +modules.levels_desc = Factieprogressie & XP +modules.war_name = Oorlog +modules.war_desc = Formele oorlogsverklaringen +modules.coming_soon = Binnenkort Beschikbaar +modules.active = Actief +modules.view_treasury = Schatkist Bekijken +modules.unavailable = Niet Beschikbaar +modules.no_economy = Geen economieplugin gedetecteerd +modules.disabled = Uitgeschakeld +modules.economy_not_available = Economiefuncties zijn niet beschikbaar op deze server + +# ========== Schatkistpagina ========== +treasury.title = Factieschatkist +treasury.balance_label = Saldo +treasury.income_24h = Inkomsten (24u) +treasury.deposits_transfers_in = stortingen, binnenkomende overboekingen +treasury.expenses_24h = Uitgaven (24u) +treasury.withdrawals_transfers_out = opnames, uitgaande overboekingen +treasury.maintenance = ONDERHOUD +treasury.runway_label = Reserve: +treasury.add_funds = Geld toevoegen +treasury.deposit_btn = Storten +treasury.take_funds = Geld opnemen +treasury.withdraw_btn = Opnemen +treasury.send_to_faction = Naar factie sturen +treasury.transfer_btn = Overboeken +treasury.treasury_config = Schatkistconfiguratie +treasury.settings_btn = Instellingen +treasury.recent_transactions = Recente Transacties +treasury.no_transactions = Nog geen transacties +treasury.col_date = Datum +treasury.col_type = Type +treasury.col_by = Door +treasury.col_amount = Bedrag +treasury.col_details = Details +treasury.pay_now_btn = Nu Betalen +treasury.cost_7d = 7d: +treasury.cost_14d = 14d: +treasury.cost_30d = 30d: +treasury.settings_title = Schatkistinstellingen +treasury.officer_permissions = OFFICIERRECHTEN +treasury.allow_withdraw = Officieren mogen opnemen +treasury.allow_transfer = Officieren mogen overboeken +treasury.limits_section = OPNAME- EN OVERBOEKINGSLIMIETEN +treasury.max_per_withdrawal = Max per opname: +treasury.max_withdrawals_per = Max opnames per periode: +treasury.max_per_transfer = Max per overboeking: +treasury.max_transfers_per = Max overboekingen per periode: +treasury.limit_period = Limietperiode (uren): +treasury.no_limit_hint = Stel in op 0 voor geen limiet +treasury.upkeep_settings = ONDERHOUDSINSTELLINGEN +treasury.auto_pay_upkeep = Automatisch onderhoud betalen uit schatkist +treasury.back_btn = Terug +treasury.upkeep_cost_format = {0} elke {1}u +treasury.upkeep_time_left = nog {0} +treasury.wallet_label = Jouw portemonnee: {0} +treasury.treasury_label = Schatkistsaldo: {0} +treasury.chunks_detail = {0} gratis + {1} betaalbare gebieden +treasury.cost_label = Kosten: {0} +treasury.pending = In Afwachting +treasury.auto_pay_on = Automatisch betalen: AAN +treasury.auto_pay_off = Automatisch betalen: UIT +treasury.runway_90_plus = 90+ dagen +treasury.runway_days = {0} dagen +treasury.runway_day = {0} dag +treasury.runway_less_day = < 1 dag +treasury.runway_no_funds = Geen saldo +treasury.grace_expires = Uitstel vervalt over: {0} +treasury.missed_payments = Gemiste betalingen: {0} +treasury.pay_to_clear = Betaal {0} om uitstel op te heffen +treasury.system = Systeem +treasury.type_deposit = Storting +treasury.type_withdrawal = Opname +treasury.type_transfer_in = Binnenkomende Overboeking +treasury.type_transfer_out = Uitgaande Overboeking +treasury.type_player_transfer = Speleroverboeking +treasury.type_upkeep = Onderhoud +treasury.type_tax = Belastinginning +treasury.type_war_cost = Oorlogskosten +treasury.type_raid_cost = Raidkosten +treasury.type_spoils = Buit +treasury.type_admin = Adminaanpassing +treasury.deposit_title = Storten in Schatkist +treasury.withdraw_title = Opnemen uit Schatkist +treasury.fee_label = Kosten ({0}%) +treasury.confirm_deposit = Storting Bevestigen +treasury.confirm_withdrawal = Opname Bevestigen +treasury.from_wallet = {0} uit portemonnee +treasury.to_wallet = {0} naar portemonnee +treasury.enter_valid_amount = Voer een geldig positief bedrag in. +treasury.insufficient_wallet = Onvoldoende portemanneesaldo. Nodig {0}, heb {1}. +treasury.wallet_withdraw_failed = Opname uit je portemonnee mislukt. +treasury.deposit_failed_returned = Storten mislukt. Geld teruggestort. +treasury.deposited = {0} gestort in de schatkist. +treasury.deposited_fee = {0} gestort in de schatkist. (kosten: {1}) +treasury.no_withdraw_permission = Je hebt geen toestemming om op te nemen. +treasury.withdraw_denied = Opname geweigerd: {0} +treasury.insufficient_treasury = Onvoldoende saldo in de schatkist. +treasury.withdraw_limit = Opnamelimiet overschreden. +treasury.withdraw_failed = Opname mislukt: {0} +treasury.wallet_deposit_warn = Waarschuwing: Storten naar je portemonnee mislukt. Neem contact op met een admin. +treasury.withdrew = {0} opgenomen uit de schatkist. +treasury.withdrew_fee = {0} opgenomen uit de schatkist. (kosten: {1}, ontvangen: {2}) +treasury.search_hint = Zoek een speler of factie +treasury.no_results = Geen resultaten voor '{0}' +treasury.tag_player = [Speler] +treasury.tag_faction = [Factie] +treasury.source_online = Online +treasury.source_offline = Offline +treasury.source_player_db = Hytale-speler +treasury.no_transfer_permission = Je hebt geen toestemming om over te boeken. +treasury.transfer_denied = Overboeking geweigerd: {0} +treasury.invalid_target_faction = Ongeldige doelfactie. +treasury.target_faction_gone = Doelfactie bestaat niet meer. +treasury.transfer_failed = Overboeking mislukt: {0} +treasury.transfer_failed_returned = Overboeking mislukt. Geld teruggestort. +treasury.transferred = {0} overgeboekt naar {1}. +treasury.invalid_target_player = Ongeldige doelspeler. +treasury.player_transfer_failed = Storten naar spelerportemonnee mislukt. Overboeking teruggedraaid. +treasury.leader_only_perms = Alleen de leider kan schatkistrechten wijzigen. +treasury.leader_only_upkeep = Alleen de leider kan onderhoudsinstellingen wijzigen. +treasury.invalid_limit = Ongeldig getal in limietvelden. Gebruik 0 voor onbeperkt. + +# ========== Bevestigingspagina's ========== +confirm.disband_title = Factie Ontbinden +confirm.disband_prompt = Weet je zeker dat je wilt ontbinden +confirm.disband_warning = Deze actie kan niet ongedaan worden gemaakt! +confirm.leave_title = Factie Verlaten +confirm.leave_prompt = Weet je zeker dat je wilt verlaten +confirm.leave_warning = Je verliest toegang tot factie-territorium. +confirm.leader_leave_title = Verlaten als Leider +confirm.leader_leave_prompt = Je verlaat +confirm.transfer_title = Leiderschap Overdragen +confirm.transfer_prompt = Weet je zeker dat je het leiderschap wilt overdragen aan +confirm.transfer_warning = Je wordt een Officier. +confirm.disband_not_leader = Alleen de leider kan de factie ontbinden. +confirm.disbanded = Factie '{0}' is ontbonden. +confirm.disband_failed = Factie ontbinden mislukt. +confirm.succession_title = Leiderschap wordt overgedragen aan: +confirm.no_members_warning = WAARSCHUWING: Geen andere leden! +confirm.will_disband = Verlaten zal de factie permanent ontbinden. +confirm.not_in_faction = Je zit niet in deze factie. +confirm.not_leader_anymore = Je bent niet langer de leider. +confirm.no_successor = Geen opvolger beschikbaar. Gebruik ontbinden. +confirm.transfer_failed = Leiderschap overdragen mislukt: {0} +confirm.leader_left = Leiderschap overgedragen aan {0}. Je hebt {1} verlaten. +confirm.leave_failed = Factie verlaten mislukt: {0} +confirm.leader_cannot_leave = Leiders kunnen niet vertrekken. Draag het leiderschap over of ontbind de factie. +confirm.left_faction = Je hebt {0} verlaten. +confirm.faction_gone = Factie bestaat niet meer. +confirm.not_leader_transfer = Alleen de leider kan het leiderschap overdragen. +confirm.leadership_transferred = Leiderschap overgedragen aan {0}. + +# ========== Logboekpagina ========== +logs.title = {0} - Activiteitenlogboek +logs.entry_count = {0} vermeldingen +logs.filter_label = Filter: +logs.col_time = Tijd +logs.col_type = Type +logs.col_message = Bericht +logs.prev_btn = < Vorige +logs.next_btn = Volgende > +logs.all_types = Alle Types +logs.no_logs_type = Geen logs van dit type. +logs.no_logs = Nog geen activiteitenlogs. +logs.time_just_now = zojuist +logs.time_minute = {0} minuut geleden +logs.time_minutes = {0} minuten geleden +logs.time_hour = {0} uur geleden +logs.time_hours = {0} uur geleden +logs.time_day = {0} dag geleden +logs.time_days = {0} dagen geleden +logs.time_week = {0} week geleden +logs.time_weeks = {0} weken geleden +logs.type_member_join = Toetreding +logs.type_member_leave = Vertrek +logs.type_member_kick = Schop +logs.type_member_promote = Promotie +logs.type_member_demote = Degradatie +logs.type_claim = Claim +logs.type_unclaim = Unclaim +logs.type_overclaim = Overclaim +logs.type_home_set = Basis Ingesteld +logs.type_relation_ally = Bondgenoot +logs.type_relation_enemy = Vijand +logs.type_relation_neutral = Neutraal +logs.type_leader_transfer = Overdracht +logs.type_settings_change = Instellingen +logs.type_power_change = Kracht +logs.type_economy = Economie +logs.type_admin_power = Admin Kracht + +# Logberichtsjablonen (i18n voor activiteitenloginhoud) +# Speleracties +logs.msg_faction_created = {0} heeft de factie aangemaakt +logs.msg_member_joined = {0} is toegetreden tot de factie +logs.msg_member_left = {0} heeft de factie verlaten +logs.msg_member_kicked = {0} is geschopt +logs.msg_member_promoted = {0} gepromoveerd tot {1} +logs.msg_member_demoted = {0} gedegradeerd naar {1} +logs.msg_leader_transferred = Leiderschap overgedragen aan {0} +logs.msg_leader_left_transfer = {0} vertrokken, {1} is nu leider +logs.msg_relation_set = {0} ingesteld als {1} +# Territorium +logs.msg_claimed = Gebied geclaimd op {0}, {1} in {2} +logs.msg_unclaimed = Gebied vrijgegeven op {0}, {1} in {2} +logs.msg_overclaim_lost = Gebied verloren op {0}, {1} aan {2} +logs.msg_overclaim_taken = Gebied overgenomen op {0}, {1} van {2} +logs.msg_all_unclaimed = Al het territorium vrijgegeven +logs.msg_claim_removed_world = Claim in '{0}' verwijderd (wereld staat claimen niet toe) +logs.msg_claims_lost_upkeep = {0} claim(s) verloren door onderhoud (gemiste betalingen: {1}) +logs.msg_claims_removed_inactive = {0} claims verwijderd wegens inactiviteit ({1} dagen) +# Basis +logs.msg_home_set = Basis ingesteld +logs.msg_home_cleared = Basis gewist +logs.msg_home_cleared_world = Basis in '{0}' gewist (wereld staat claimen niet toe) +# Instellingen +logs.msg_renamed = Hernoemd van '{0}' naar '{1}' +logs.msg_set_open = Factie op open gezet +logs.msg_set_closed = Factie op alleen uitnodiging gezet +logs.msg_desc_set = Beschrijving ingesteld +logs.msg_desc_cleared = Beschrijving gewist +logs.msg_color_changed = Kleur gewijzigd naar '{0}' +# Economie +logs.msg_deposit = Storting: {0} (+{1}) +logs.msg_withdrawal = Opname: {0} (-{1}) +logs.msg_upkeep_paid = Onderhoud betaald: {0} ({1} betaalbare gebieden) +logs.msg_upkeep_grace_started = Onderhoud mislukt: uitstelperiode gestart ({0}u) +logs.msg_upkeep_missed = Onderhoud gemist (betaling {0}), uitstel vervalt over {1} +logs.msg_upkeep_manual = Onderhoud handmatig betaald: {0} ({1} betaalbare gebieden, uitstel opgeheven) +# Admin kracht +logs.msg_admin_power_set = Admin heeft kracht van {0} ingesteld op {1} (was {2}) +logs.msg_admin_power_add = Admin heeft {0} kracht toegevoegd aan {1} ({2} -> {3}) +logs.msg_admin_power_remove = Admin heeft {0} kracht verwijderd van {1} ({2} -> {3}) +logs.msg_admin_power_reset = Admin heeft kracht van {0} gereset naar {1} (was {2}) +logs.msg_admin_power_adjusted = Admin heeft kracht van {0} aangepast met {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin heeft max kracht van {0} ingesteld op {1} (was {2}) +logs.msg_admin_maxpower_reset = Admin heeft max kracht van {0} gereset naar globale standaard ({1}) +logs.msg_admin_powerloss_enabled = Admin heeft krachtverlies ingeschakeld voor {0} +logs.msg_admin_powerloss_disabled = Admin heeft krachtverlies uitgeschakeld voor {0} +logs.msg_admin_decay_enabled = Admin heeft claimverval-uitzondering ingeschakeld voor {0} +logs.msg_admin_decay_disabled = Admin heeft claimverval-uitzondering uitgeschakeld voor {0} +logs.msg_admin_kd_reset = Admin heeft K/D gereset voor {0} +logs.msg_admin_power_set_all = Admin heeft kracht van alle {0} leden ingesteld op {1} +logs.msg_admin_power_add_all = Admin heeft {0} kracht toegevoegd aan alle {1} leden +logs.msg_admin_power_remove_all = Admin heeft {0} kracht verwijderd van alle {1} leden +logs.msg_admin_power_reset_all = Admin heeft kracht gereset voor alle {0} leden +logs.msg_admin_power_adjusted_all = Admin heeft kracht van alle {0} leden aangepast met {1} +# Admin factie +logs.msg_admin_kicked = [Admin] {0} is geschopt +logs.msg_admin_role_set = [Admin] Rol van {0} ingesteld op {1} +logs.msg_admin_leader_kick = [Admin] Leiderschap overgedragen van {0} naar {1} (admin kick) +logs.msg_admin_econ_added = Admin heeft toegevoegd: {0} (saldo: {1}) +logs.msg_admin_econ_deducted = Admin heeft afgetrokken: {0} (saldo: {1}) +logs.msg_admin_econ_set = Admin heeft saldo ingesteld op {0} (was {1}) +# Import +logs.msg_left_import = {0} vertrokken (geimporteerd naar andere factie) +logs.msg_leader_import_transfer = {0} werd leider (vorige leider geimporteerd naar andere factie) +logs.msg_imported_from = Factie geimporteerd van {0} + +# ========== Chatpagina ========== +chat.title = Factiechat +chat.tab_faction = Factie +chat.tab_ally = Bondgenoot +chat.send_btn = Versturen +chat.placeholder = Typ een bericht... +chat.no_messages = Nog geen berichten. +chat.no_ally_permission = Je hebt geen toestemming voor bondgenotenchat. +chat.no_permission = Geen toestemming. +chat.faction_gone = Je factie bestaat niet meer. +chat.time_now = nu +chat.time_minutes = {0}m +chat.time_hours = {0}u + +# ========== Uitnodigingenpagina ========== +invites.title = Uitnodigingen +invites.tab_outgoing = Uitgaand +invites.tab_requests = Verzoeken +invites.prev_btn = < Vorige +invites.next_btn = Volgende > +invites.invite_count = {0} uitnodigingen +invites.request_count = {0} verzoeken +invites.invited_by = Uitgenodigd door: {0} +invites.no_message = Geen bericht +invites.expires = Verloopt: {0} +invites.type_outgoing = Uitgaand +invites.type_request = Verzoek +invites.invited_by_label = Uitgenodigd door: +invites.empty_outgoing = Geen uitgaande uitnodigingen. Gebruik /f invite om iemand uit te nodigen. +invites.empty_requests = Geen toetredingsverzoeken. Spelers kunnen verzoeken met /f request. +invites.invalid_player = Ongeldige speler. +invites.cancelled_invite = Uitnodiging aan {0} geannuleerd. +invites.player_joined = {0} is toegetreden tot de factie! +invites.faction_full = Factie is vol. Kan verzoek niet accepteren. +invites.add_failed = Speler toevoegen aan factie mislukt. +invites.request_expired = Verzoek niet gevonden of verlopen. +invites.request_declined = Toetredingsverzoek van {0} afgewezen. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}u +invites.label_message = Bericht: +invites.btn_cancel = Annuleren +invites.btn_accept = Accepteren +invites.btn_decline = Afwijzen + +# ========== Kaartpagina ========== +map.title = Gebiedskaart +map.action_hint = Linksklik: Claimen | Rechtsklik: Unclaimen +map.legend_your = Jouw Territorium +map.legend_ally = Bondgenootterritorium +map.legend_enemy = Vijandelijk Territorium +map.legend_other = Andere Factie +map.legend_wilderness = Wildernis +map.legend_safe = SafeZone +map.legend_war = WarZone +map.legend_you = Je bent hier +map.position = Jouw Positie: Chunk ({0}, {1}) +map.legend_protected = Beschermd +map.claim_stats = Gebieden: {0}/{1} ({2} Beschikbaar) +map.overclaimed = OVERGENOMEN door {0}! +map.power_display = Kracht: {0}/{1} +map.join_to_claim = Sluit je aan bij een factie om te claimen +map.claim_success = Gebied geclaimd op ({0}, {1})! +map.claim_not_in_faction = Je moet in een factie zitten om territorium te claimen. +map.claim_not_officer = Alleen officieren en leiders kunnen territorium claimen. +map.claim_already_yours = Je bezit dit gebied al. +map.claim_already_claimed = Dit gebied is al geclaimd door een andere factie. +map.claim_not_adjacent = Je kunt alleen gebieden claimen die grenzen aan je territorium. +map.claim_max = Je hebt het maximale aantal claims bereikt. +map.claim_world_not_allowed = Claimen is niet toegestaan in deze wereld. +map.claim_orbisguard = Dit gebied wordt beschermd door OrbisGuard. +map.claim_failed = Gebied claimen mislukt. +map.unclaim_success = Gebied vrijgegeven op ({0}, {1}). +map.unclaim_not_in_faction = Je moet in een factie zitten. +map.unclaim_not_officer = Alleen officieren en leiders kunnen territorium vrijgeven. +map.unclaim_not_claimed = Dit gebied is niet geclaimd. +map.unclaim_not_yours = Dit gebied behoort toe aan een andere factie. +map.unclaim_home = Kan het gebied met je factiebasis niet vrijgeven. +map.unclaim_failed = Gebied vrijgeven mislukt. +map.overclaim_success = Vijandelijk gebied overgenomen op ({0}, {1})! +map.overclaim_not_in_faction = Je moet in een factie zitten. +map.overclaim_not_officer = Alleen officieren en leiders kunnen gebieden overnemen. +map.overclaim_already_yours = Je bezit dit gebied al. +map.overclaim_ally = Je kunt bondgenootterritorium niet overnemen. +map.overclaim_has_power = Deze factie heeft genoeg kracht om hun territorium te verdedigen. +map.overclaim_max = Je hebt het maximale aantal claims bereikt. +map.overclaim_failed = Overnemen mislukt. +# ========== Factie Aanmaken Pagina ========== +create.title = Maak Jouw Factie +create.section_preview = Voorbeeld +create.section_basic_info = Basisinfo +create.section_details = Details +create.name_prefix = Naam: +create.faction_name_label = Factienaam * +create.tag_label = TAG (2-4 tekens, automatisch indien leeg) +create.desc_label = Beschrijving (Optioneel) +create.recruitment_label = Werving +create.section_faction_color = Factiekleur +create.section_combat = Gevecht +create.create_btn = Factie Aanmaken +create.preview_name = Jouw Factienaam +create.leader_prefix = Leider: {0} +create.enter_name = Voer een factienaam in. +create.name_too_short = Factienaam moet minstens {0} tekens lang zijn. +create.name_too_long = Factienaam mag niet meer dan {0} tekens bevatten. +create.name_taken = Er bestaat al een factie met deze naam. +create.tag_length = Factietag moet {0}-{1} tekens lang zijn. +create.tag_format = Factietag mag alleen letters en cijfers bevatten. +create.desc_too_long = Beschrijving mag niet meer dan {0} tekens bevatten. +create.created = Factie {0} succesvol aangemaakt! +create.created_no_dashboard = Factie aangemaakt maar kon dashboard niet openen. +create.invalid_name = Ongeldige factienaam. +create.create_failed = Kon factie niet aanmaken. + +# ========== Nieuwe Speler Pagina's ========== +newplayer.browse_title = Facties Bladeren +newplayer.invites_title = Uitnodigingen & Verzoeken +newplayer.map_title = Gebiedskaart +newplayer.view_only_badge = Alleen Bekijken +newplayer.legend_label = Legenda: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Factie +newplayer.legend_wilderness = Wildernis +newplayer.search_label = Zoeken: +newplayer.sort_label = Sorteren: +newplayer.prev_btn = < Vorige +newplayer.next_btn = Volgende > +newplayer.pending_count = {0} in afwachting +newplayer.received_header = ONTVANGEN UITNODIGINGEN ({0}) +newplayer.requests_header = JOUW VERZOEKEN ({0}) +newplayer.no_invites = Geen uitnodigingen. Blader door facties om er een te vinden! +newplayer.no_requests = Geen openstaande verzoeken. +newplayer.invited_by = Uitgenodigd door: {0} +newplayer.member_count = {0} leden +newplayer.power_count = {0} kracht +newplayer.claim_count = {0} gebieden +newplayer.awaiting_review = In afwachting van beoordeling +newplayer.expires_in = Verloopt over {0}u +newplayer.time_just_now = zojuist +newplayer.time_minutes = {0} min geleden +newplayer.time_hours = {0}u geleden +newplayer.time_days = {0}d geleden +newplayer.invalid_faction = Ongeldige factie. +newplayer.invite_expired = Deze uitnodiging is verlopen of ingetrokken. +newplayer.faction_gone = Factie bestaat niet meer. +newplayer.joined = Je bent toegetreden tot {0}! +newplayer.faction_full = Deze factie is vol. +newplayer.join_failed = Kon niet toetreden tot factie. +newplayer.invite_declined = Uitnodiging afgewezen. +newplayer.request_cancelled = Verzoek om toe te treden tot {0} geannuleerd. +newplayer.faction_count = {0} facties +newplayer.browse_subtitle = Vind je nieuwe thuis! +newplayer.sort_power = Kracht +newplayer.sort_name = Naam +newplayer.sort_members = Leden +newplayer.btn_accept = Accepteren +newplayer.btn_pending = In Afwachting +newplayer.btn_join = Toetreden +newplayer.btn_request = Verzoek +newplayer.invite_only_msg = Deze factie is alleen op uitnodiging. +newplayer.welcome_hint = Welkom! Gebruik /f om het factiemenu te openen. +newplayer.faction_open_hint = Deze factie is open! Klik op TOETREDEN. +newplayer.already_requested = Je hebt al een openstaand verzoek bij deze factie. +newplayer.has_invite_hint = Je hebt een uitnodiging van deze factie! Klik op ACCEPTEREN. +newplayer.request_sent = Toetredingsverzoek verstuurd naar {0}! +newplayer.officer_review = Een officier zal je verzoek beoordelen. +newplayer.map_hint = Alleen Bekijken - Sluit je aan bij een factie om territorium te claimen! + +# Spelerinstellingen +nav.player_settings = Speler +player_settings.title = Spelerinstellingen +player_settings.language_section = Taal +player_settings.auto_detect = Automatisch detecteren vanuit client +player_settings.auto_detect_desc = Gebruikt de taalinstelling van je spelclient +player_settings.language_label = Taal +player_settings.notifications_section = Meldingen +player_settings.territory_alerts = Gebiedsmeldingen +player_settings.territory_alerts_desc = Toon meldingen bij het betreden/verlaten van territoria +player_settings.death_announcements = Sterfgevalmeldingen +player_settings.death_announcements_desc = Ontvang meldingen over sterflocaties van factieleden +player_settings.power_notifications = Krachtwijzigingen +player_settings.power_notifications_desc = Toon berichten wanneer je kracht verandert +player_settings.language_changed = Taal gewijzigd naar {0} +player_settings.pref_enabled = {0} ingeschakeld +player_settings.pref_disabled = {0} uitgeschakeld + +# ========== Hulppagina's ========== +help.center_title = Helpcentrum +help.getting_started_title = Aan de Slag +help.what_are_factions_title = Wat Zijn Facties? +help.what_are_factions_1 = Facties zijn door spelers opgerichte groepen die samenwerken +help.what_are_factions_2 = om territorium te claimen, bases te bouwen en te strijden. +help.what_are_factions_bullet_1 = - Beschermd territorium om te bouwen +help.what_are_factions_bullet_2 = - Teamgenoten om mee te spelen +help.what_are_factions_bullet_3 = - Toegang tot factiechat en functies +help.joining_title = Toetreden tot een Factie +help.joining_desc = Er zijn meerdere manieren om bij een factie aan te sluiten: +help.joining_bullet_1 = - Bladeren - Vind open facties en klik op TOETREDEN +help.joining_bullet_2 = - Uitnodigingen - Accepteer uitnodigingen van officieren +help.joining_bullet_3 = - Verzoek - Vraag aan om toe te treden tot besloten facties +help.creating_title = Een Factie Aanmaken +help.creating_desc = Ga naar het tabblad Aanmaken om je eigen factie te starten. +help.creating_bullet_1 = - Nodig leden uit en beheer ze +help.creating_bullet_2 = - Claim en bescherm territorium +help.commands_title = Snelcommando's +help.cmd_f = /f - Factiemenu openen +help.cmd_f_list = /f list - Alle facties weergeven +help.cmd_f_join = /f join - Toetreden tot een open factie +help.cmd_f_create = /f create - Een nieuwe factie aanmaken +help.cmd_f_help = /f help - Volledige commandolijst +help.tip = Tip: Blader door facties om een groep te vinden die bij je past! diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..1f52a97d --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# System konfiguracji + +HyperFactions używa modularnego systemu konfiguracji JSON z 11 plikami konfiguracyjnymi. + +## Komendy konfiguracji administracyjnej + +| Komenda | Opis | +|---------|-------------| +| `/f admin config` | Otwórz wizualny edytor konfiguracji GUI | +| `/f admin reload` | Przeładuj wszystkie pliki konfiguracyjne z dysku | +| `/f admin sync` | Synchronizuj dane frakcji do magazynu | + +## Pliki konfiguracyjne + +| Plik | Zawartość | +|------|----------| +| `factions.json` | Role, moc, zajęcia, walka, relacje | +| `server.json` | Teleportacja, auto-zapis, wiadomości, GUI, uprawnienia | +| `economy.json` | Skarbiec, utrzymanie, ustawienia transakcji | +| `backup.json` | Rotacja i retencja kopii zapasowych | +| `chat.json` | Formatowanie czatu frakcyjnego i sojuszniczego | +| `debug.json` | Kategorie logowania debugowego | +| `faction-permissions.json` | Domyślne uprawnienia dla ról | +| `announcements.json` | Transmisja wydarzeń i powiadomienia terytorialne | +| `gravestones.json` | Ustawienia integracji nagrobków | +| `worldmap.json` | Tryby odświeżania mapy świata | +| `worlds.json` | Nadpisania zachowań dla poszczególnych światów | + +>[!TIP] GUI konfiguracji zapewnia wizualny edytor z opisami dla każdego ustawienia. Zmiany są zapisywane natychmiast, ale niektóre wymagają `/f admin reload`, aby w pełni zadziałać. + +## Lokalizacja konfiguracji + +Wszystkie pliki są przechowywane w: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Ręczne edycje JSON wymagają `/f admin reload`, aby zostały zastosowane. Niepoprawny JSON spowoduje pominięcie pliku z ostrzeżeniem w logu serwera. + +>[!NOTE] Wersja konfiguracji jest śledzona w `server.json`. Plugin automatycznie migruje starsze konfiguracje przy uruchomieniu. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..9001fae6 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Ustawienia per-świat + +HyperFactions obsługuje konfigurację per-świat dla zajmowania, PvP i zachowania ochrony. + +## Komendy światów + +| Komenda | Opis | +|---------|-------------| +| `/f admin world list` | Lista wszystkich nadpisań światów | +| `/f admin world info ` | Pokaż ustawienia dla świata | +| `/f admin world set ` | Ustaw ustawienie | +| `/f admin world reset ` | Resetuj świat do domyślnych | + +## Dostępne ustawienia + +| Ustawienie | Typ | Opis | +|---------|------|-------------| +| claiming_enabled | boolean | Zezwól na zajęcia frakcji w tym świecie | +| pvp_enabled | boolean | Zezwól na walkę PvP w tym świecie | +| power_loss | boolean | Zastosuj utratę mocy przy śmierci | +| build_protection | boolean | Wymuś ochronę budowania na zajęciach | +| explosion_protection | boolean | Chroń zajęcia przed eksplozjami | + +## Biała lista / czarna lista światów + +Kontroluj, które światy pozwalają na funkcje frakcji przez plik konfiguracyjny `worlds.json`: + +- **Tryb białej listy**: Tylko wymienione światy pozwalają na zajmowanie +- **Tryb czarnej listy**: Wszystkie światy pozwalają na zajmowanie oprócz wymienionych + +>[!INFO] Ustawienia światów są przechowywane w `worlds.json` i nadpisują globalne domyślne z `factions.json`. + +## Przykłady + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- przywróć wszystkie domyślne + +>[!TIP] Wyłącz zajmowanie w światach kreatywnych lub lobby, aby skupić system frakcji na rozgrywce survivalowej. + +>[!NOTE] Ustawienia per-świat mają priorytet nad globalną konfiguracją, ale są nadpisywane przez flagi stref w danym świecie. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..1afda30c --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Zarządzanie skarbcem + +Komendy administracyjne do zarządzania skarbcami frakcji. Wymaga uprawnienia `hyperfactions.admin.economy`. + +## Komendy skarbca + +| Komenda | Opis | +|---------|-------------| +| `/f admin economy balance ` | Wyświetl saldo skarbca frakcji | +| `/f admin economy set ` | Ustaw dokładne saldo | +| `/f admin economy add ` | Dodaj fundusze do skarbca | +| `/f admin economy take ` | Usuń fundusze ze skarbca | +| `/f admin economy reset ` | Resetuj skarbiec do zera | + +## Przykłady + +- `/f admin economy balance Vikings` -- sprawdź saldo +- `/f admin economy set Vikings 5000` -- ustaw na 5000 +- `/f admin economy add Vikings 1000` -- wpłać 1000 +- `/f admin economy take Vikings 500` -- wypłać 500 +- `/f admin economy reset Vikings` -- wyzeruj saldo + +>[!TIP] Użyj `/f admin info `, aby zobaczyć pełny przegląd ekonomii, w tym historię transakcji obok salda skarbca. + +## Przypadki użycia + +| Scenariusz | Komenda | +|----------|---------| +| Dystrybucja nagród za wydarzenie | `economy add ` | +| Kara za złamanie regulaminu | `economy take ` | +| Reset ekonomii po wipe | `economy reset ` | +| Kompensacja za błędy | `economy add ` | + +>[!WARNING] Zmiany w skarbcu są rejestrowane w historii transakcji frakcji. Modyfikacje administracyjne są zapisywane z nazwą administratora dla odpowiedzialności. + +>[!NOTE] Wszystkie komendy ekonomii administracyjnej działają nawet gdy moduł ekonomii jest wyłączony w konfiguracji. Dane są przechowywane niezależnie od statusu modułu. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..d7f49262 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Zarządzanie utrzymaniem + +Utrzymanie frakcji obciąża frakcje okresowo na podstawie ich terytorium i liczby członków. + +## Kontrole administracyjne + +Ustawienia utrzymania są zarządzane przez plik konfiguracji ekonomii lub GUI konfiguracji administracyjnej. + +`/f admin config` +Otwórz edytor konfiguracji i przejdź do ustawień ekonomii, aby dostosować wartości utrzymania. + +## Domyślne ustawienia utrzymania + +| Ustawienie | Domyślnie | Opis | +|---------|---------|-------------| +| Utrzymanie włączone | false | Główny przełącznik systemu | +| Interwał utrzymania | 24h | Jak często pobierane jest utrzymanie | +| Koszt za zajęcie | 5.0 | Koszt za zajęty chunk na cykl | +| Koszt za członka | 0.0 | Koszt za członka na cykl | +| Okres karencji | 72h | Nowe frakcje są zwolnione | +| Rozwiązanie przy bankructwie | false | Automatyczne rozwiązanie jeśli nie może zapłacić | + +## Monitorowanie utrzymania + +Użyj `/f admin info `, aby zobaczyć: +- Aktualne saldo skarbca +- Szacowany koszt utrzymania za cykl +- Czas do następnego pobrania utrzymania +- Czy frakcja stać na utrzymanie + +>[!TIP] Przeglądaj statystyki ekonomii wszystkich frakcji z panelu administracyjnego, aby zidentyfikować frakcje zagrożone bankructwem przed uruchomieniem utrzymania. + +>[!INFO] Konfiguracja utrzymania jest przechowywana w `economy.json`. Zmiany dokonane przez GUI konfiguracji wchodzą w życie po przeładowaniu komendą `/f admin reload`. + +## Formuła utrzymania + +**Łączne utrzymanie** = (zajęte chunki x koszt za zajęcie) + (liczba członków x koszt za członka) + +>[!WARNING] Włączenie utrzymania na serwerze z istniejącymi frakcjami może spowodować niespodziewane bankructwa. Rozważ ustawienie okresu karencji lub wcześniejsze ogłoszenie zmiany. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..3a378d8a --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Wymuszone rozwiązanie + +Administratorzy mogą wymusić rozwiązanie dowolnej frakcji, niezależnie od woli lidera. + +## Komenda + +`/f admin disband ` +Wymusza rozwiązanie nazwanej frakcji. Przed wykonaniem akcji pojawi się monit o potwierdzenie. + +**Uprawnienie**: `hyperfactions.admin.disband` + +>[!WARNING] Rozwiązanie frakcji jest **nieodwracalne**. Wszystkie zajęcia są zwalniane, wszyscy członkowie są usuwani, a frakcja przestaje istnieć. Najpierw utwórz kopię zapasową. + +## Konsekwencje + +Gdy frakcja zostaje rozwiązana: + +| Efekt | Opis | +|--------|-------------| +| **Zajęcia** | Całe terytorium jest natychmiast zwalniane | +| **Członkowie** | Wszyscy gracze są usuwani ze składu | +| **Relacje** | Wszystkie sojusze i wrogości są czyszczone | +| **Skarbiec** | Obsługiwany zgodnie z ustawieniami konfiguracji ekonomii | +| **Baza** | Baza frakcji jest usuwana | +| **Czat** | Historia czatu frakcji jest usuwana | + +## Najlepsze praktyki + +1. Zawsze wpisz `/f admin backup create` przed rozwiązaniem +2. Powiadom członków frakcji, gdy to możliwe +3. Udokumentuj powód dla rejestrów serwera +4. Sprawdź `/f admin info `, aby przejrzeć przed podjęciem akcji + +>[!TIP] Jeśli problem dotyczy konkretnego członka, rozważ użycie GUI administracyjnego frakcji do przekazania przywództwa zamiast rozwiązywania całej frakcji. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..a118c896 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Zarządzanie frakcjami + +Administratorzy mogą przeglądać i modyfikować dowolną frakcję na serwerze przez panel administracyjny lub komendy. + +## Przeglądanie frakcji + +`/f admin factions` +Otwiera przeglądarkę frakcji administracyjną. Wyświetla wszystkie frakcje z liczbą członków, poziomami mocy i terytorium. + +`/f admin info ` +Otwiera panel informacji administracyjnych dla konkretnej frakcji z pełnymi szczegółami i opcjami zarządzania. + +## Modyfikowanie ustawień frakcji + +Z uprawnieniem `hyperfactions.admin.modify` możesz: + +- **Zmienić nazwę** frakcji, aby rozwiązać konflikty +- **Ustawić kolor**, aby naprawić problemy z wyświetlaniem +- **Przełączyć otwartą/zamkniętą**, aby nadpisać politykę dołączania +- **Edytować opis** w celach moderacyjnych + +>[!TIP] Użyj `/f admin who `, aby sprawdzić, do której frakcji należy dany gracz i wyświetlić jego szczegóły. + +## Przeglądanie członków i relacji + +Panel informacji administracyjnych pokazuje: + +| Sekcja | Szczegóły | +|---------|---------| +| **Członkowie** | Pełny skład z rolami i ostatnią aktywnością | +| **Relacje** | Wszystkie statusy sojuszy, wrogości i neutralności | +| **Terytorium** | Zajęte chunki i bilans mocy | +| **Ekonomia** | Saldo skarbca i log transakcji | + +>[!NOTE] Komendy inspekcji administracyjnej nie powiadamiają przeglądanej frakcji. Tylko modyfikacje wywołują alerty. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..6ede43a6 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# System kopii zapasowych + +HyperFactions zawiera automatyczne i ręczne kopie zapasowe z rotacją GFS (Grandfather-Father-Son). + +## Komendy kopii zapasowych + +| Komenda | Opis | +|---------|-------------| +| `/f admin backup create` | Utwórz ręczną kopię zapasową teraz | +| `/f admin backup list` | Lista wszystkich dostępnych kopii zapasowych | +| `/f admin backup restore ` | Przywróć z kopii zapasowej | +| `/f admin backup delete ` | Usuń konkretną kopię zapasową | + +**Uprawnienie**: `hyperfactions.admin.backup` + +## Domyślna rotacja GFS + +| Typ | Retencja | Opis | +|------|-----------|-------------| +| Godzinowe | 24 | Ostatnie 24 godzinne migawki | +| Dzienne | 7 | Ostatnie 7 dziennych migawek | +| Tygodniowe | 4 | Ostatnie 4 tygodniowe migawki | +| Ręczne | 10 | Ręcznie utworzone kopie zapasowe | +| Przy wyłączeniu | 5 | Tworzone przy zatrzymaniu serwera | + +>[!INFO] Kopie zapasowe przy wyłączeniu są domyślnie włączone (`onShutdown=true`). Przechwytują najnowszy stan przed zatrzymaniem serwera. + +## Zawartość kopii zapasowej + +Każde archiwum ZIP kopii zapasowej zawiera: +- Wszystkie pliki danych frakcji +- Dane mocy graczy +- Definicje stref +- Historię czatu i dane ekonomii +- Dane zaproszeń i próśb o dołączenie +- Pliki konfiguracyjne + +>[!WARNING] **Przywracanie kopii zapasowej jest destrukcyjne.** Zastępuje wszystkie aktualne dane zawartością kopii zapasowej. Wszelkie zmiany dokonane po utworzeniu kopii zapasowej zostaną utracone. Zawsze twórz świeżą kopię zapasową przed przywracaniem. + +## Najlepsze praktyki + +1. Utwórz ręczną kopię zapasową przed ważnymi akcjami administracyjnymi +2. Przejrzyj retencję kopii zapasowych w `backup.json` +3. Przetestuj przywracanie na serwerze testowym +4. Utrzymuj kopie zapasowe przy wyłączeniu włączone dla odzyskiwania po awariach diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..0ff91cca --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Import danych + +Importuj dane frakcji z innych pluginów, aby zmigrować swój serwer na HyperFactions. + +## Komenda importu + +`/f admin import [path] [flags]` + +**Uprawnienie**: `hyperfactions.admin.use` + +## Obsługiwane źródła + +| Źródło | Opis | +|--------|-------------| +| `elbaphfactions` | Import z danych ElbaphFactions | +| `hyfactions` | Import z danych HyFactions v1 | + +## Flagi importu + +| Flaga | Opis | +|------|-------------| +| `--dry-run` | Waliduj dane bez importowania czegokolwiek | +| `--overwrite` | Nadpisz istniejące frakcje o tej samej nazwie | +| `--no-zones` | Pomiń dane stref podczas importu | +| `--no-power` | Pomiń dane mocy podczas importu | + +>[!TIP] Zawsze uruchom najpierw z `--dry-run`, aby zobaczyć podgląd tego, co zostanie zaimportowane i wykryć problemy z danymi przed zatwierdzeniem zmian. + +## Proces importu + +1. Kopia zapasowa przed importem jest tworzona automatycznie +2. Mapowania nazw graczy są ładowane +3. Frakcje, zajęcia i strefy są konwertowane +4. Dane są walidowane i zapisywane + +## Przykłady + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Użycie `--overwrite` **zastąpi** każdą istniejącą frakcję, która dzieli nazwę z importowaną frakcją. Dane członków i zajęcia zostaną nadpisane. Uruchom najpierw z `--dry-run`, aby zidentyfikować konflikty. + +>[!NOTE] Niektóre dane specyficzne dla źródła (np. działki robocze, działki rolnicze) nie mają odpowiednika w HyperFactions i zostaną zalogowane jako ostrzeżenia podczas importu. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..164a112d --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Sprawdzanie aktualizacji + +HyperFactions może sprawdzać nowe wersje i zarządzać zależnością HyperProtect-Mixin. + +## Komendy aktualizacji + +| Komenda | Opis | +|---------|-------------| +| `/f admin update` | Sprawdź aktualizacje HyperFactions | +| `/f admin update mixin` | Sprawdź/pobierz HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Przełącz automatyczne pobieranie | +| `/f admin version` | Pokaż aktualną wersję i informacje o buildzie | + +## Kanały wydań + +| Kanał | Opis | +|---------|-------------| +| **Stable** | Zalecany dla serwerów produkcyjnych | +| **Pre-release** | Wczesny dostęp do nadchodzących funkcji | + +>[!INFO] Sprawdzanie aktualizacji jedynie powiadamia o nowych wersjach. **Nie** instaluje automatycznie aktualizacji samego HyperFactions. + +## HyperProtect-Mixin + +HyperProtect-Mixin to zalecany mixin ochrony, który włącza zaawansowane flagi stref (eksplozje, rozprzestrzenianie ognia, zachowanie ekwipunku, itp.). + +- `/f admin update mixin` sprawdza najnowszą wersję +i pobiera ją, jeśli nowsza wersja jest dostępna +- Automatyczne pobieranie można włączać i wyłączać dla każdego serwera + +>[!TIP] Po pobraniu nowej wersji mixina wymagany jest restart serwera, aby zmiany zadziałały. + +## Procedura wycofania + +Jeśli aktualizacja powoduje problemy: + +1. Zatrzymaj serwer +2. Zastąp plik JAR pluginu poprzednią wersją +3. Uruchom serwer +4. Zweryfikuj funkcjonalność komendą `/f admin version` + +>[!WARNING] Obniżenie wersji może wymagać resetu migracji konfiguracji. Zawsze utrzymuj kopie zapasowe przed aktualizacją. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..ff9d1134 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_overview/getting_started.md @@ -0,0 +1,40 @@ +--- +id: admin_getting_started +--- +# Pierwsze kroki jako administrator + +Witaj w administracji HyperFactions. Ten poradnik opisuje twoje pierwsze kroki po zainstalowaniu pluginu. + +## Otwieranie panelu administracyjnego + +`/f admin` +Otwiera GUI panelu administracyjnego z dostępem do wszystkich narzędzi zarządzania, edytorów stref i ustawień serwera. + +>[!INFO] Potrzebujesz uprawnienia **hyperfactions.admin.use** lub statusu OP, aby uzyskać dostęp do komend administracyjnych. + +## Wymagania + +- **Z pluginem uprawnień**: Nadaj `hyperfactions.admin.use` +- **Bez pluginu uprawnień**: Gracz musi być operatorem serwera (`adminRequiresOp=true` domyślnie) + +## Pierwsze kroki po instalacji + +1. Wpisz `/f admin`, aby zweryfikować swój dostęp +2. Otwórz **Konfigurację**, aby przejrzeć domyślne ustawienia frakcji +3. Utwórz **SafeZone** na spawnie komendą `/f admin safezone Spawn` +4. Opcjonalnie utwórz **WarZone** dla aren PvP +5. Przejrzyj ustawienia **kopii zapasowych**, aby zapewnić bezpieczeństwo danych + +## Możliwości administracyjne + +| Obszar | Co możesz zrobić | +|------|----------------| +| Frakcje | Przeglądaj, modyfikuj lub wymuś rozwiązanie dowolnej frakcji | +| Strefy | Twórz SafeZone i WarZone z niestandardowymi flagami | +| Moc | Nadpisuj wartości mocy graczy/frakcji | +| Ekonomia | Zarządzaj skarbcami frakcji i utrzymaniem | +| Konfiguracja | Edytuj ustawienia na żywo przez GUI lub przeładuj z dysku | +| Kopie zapasowe | Twórz, przywracaj i zarządzaj kopiami zapasowymi danych | +| Importy | Migruj dane z innych pluginów frakcji | + +>[!TIP] Użyj `/f admin --text`, aby uzyskać wynik tekstowy na czacie zamiast GUI -- przydatne dla konsoli lub automatyzacji. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..400c8e1d --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Uprawnienia administracyjne + +Wszystkie funkcje administracyjne są chronione węzłami uprawnień w przestrzeni nazw `hyperfactions.admin`. + +## Węzły uprawnień + +| Uprawnienie | Opis | +|-----------|-------------| +| `hyperfactions.admin.*` | Nadaje **wszystkie** uprawnienia administracyjne | +| `hyperfactions.admin.use` | Dostęp do panelu `/f admin` | +| `hyperfactions.admin.reload` | Przeładowanie plików konfiguracyjnych | +| `hyperfactions.admin.debug` | Przełączanie kategorii logowania debugowego | +| `hyperfactions.admin.zones` | Tworzenie, edycja i usuwanie stref | +| `hyperfactions.admin.disband` | Wymuszone rozwiązanie dowolnej frakcji | +| `hyperfactions.admin.modify` | Modyfikacja ustawień dowolnej frakcji | +| `hyperfactions.admin.bypass.limits` | Pomijanie limitów zajęć i mocy | +| `hyperfactions.admin.backup` | Tworzenie i przywracanie kopii zapasowych | +| `hyperfactions.admin.power` | Nadpisywanie wartości mocy graczy | +| `hyperfactions.admin.economy` | Zarządzanie skarbcami frakcji | + +## Zachowanie awaryjne + +Gdy **nie jest zainstalowany żaden plugin uprawnień**, uprawnienia administracyjne przechodzą na status operatora serwera (OP). Kontroluje to `adminRequiresOp` w konfiguracji serwera (domyślnie: `true`). + +>[!NOTE] Wieloznacznik `hyperfactions.admin.*` nadaje każde uprawnienie administracyjne. Używaj indywidualnych węzłów dla szczegółowej kontroli nad swoim zespołem. + +## Kolejność rozwiązywania uprawnień + +1. **VaultUnlocked** (najwyższy priorytet) +2. **HyperPerms** (jeśli dostępny) +3. **LuckPerms** (jeśli dostępny) +4. **Sprawdzenie OP** dla węzłów administracyjnych (awaryjnie) + +>[!WARNING] Bez pluginu uprawnień i z wyłączonym `adminRequiresOp`, komendy administracyjne są **otwarte dla wszystkich graczy**. Zawsze używaj pluginu uprawnień na serwerze produkcyjnym. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..2456b381 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Komendy administracyjne mocy + +Nadpisywanie wartości mocy graczy i frakcji. Wszystkie komendy wymagają uprawnienia `hyperfactions.admin.power`. + +## Komendy mocy gracza + +| Komenda | Opis | +|---------|-------------| +| `/f admin power set ` | Ustaw dokładną wartość mocy | +| `/f admin power add ` | Dodaj moc graczowi | +| `/f admin power remove ` | Odejmij moc graczowi | +| `/f admin power reset ` | Resetuj do domyślnej mocy startowej | +| `/f admin power info ` | Wyświetl szczegółowy podgląd mocy | + +## Jak moc wpływa na frakcje + +Łączna moc frakcji to suma indywidualnej mocy wszystkich jej członków. Zajęcia terytorialne wymagają wystarczającej łącznej mocy do utrzymania. + +| Scenariusz | Efekt | +|----------|--------| +| Moc ustawiona wyżej | Frakcja może zajmować więcej terytorium | +| Moc ustawiona niżej | Frakcja może stać się podatna na przejęcie | +| Reset mocy | Przywraca gracza do domyślnej wartości startowej | + +>[!WARNING] Obniżenie mocy gracza może spowodować utratę terytorium przez jego frakcję, jeśli łączna moc spadnie poniżej liczby zajętych chunków. + +## Przykłady + +- `/f admin power set Steve 50` -- ustaw na dokładnie 50 +- `/f admin power add Steve 10` -- zwiększ o 10 +- `/f admin power remove Steve 5` -- zmniejsz o 5 +- `/f admin power reset Steve` -- wróć do domyślnej +- `/f admin power info Steve` -- pokaż pełny podgląd + +>[!TIP] Użyj `/f admin power info `, aby zobaczyć aktualną moc, maksymalną moc i wszelkie aktywne nadpisania przed wprowadzeniem zmian. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..535229c9 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Nadpisania mocy + +Specjalne komendy mocy, które zmieniają zachowanie mocy dla konkretnych graczy lub frakcji. + +## Komendy nadpisań + +| Komenda | Opis | +|---------|-------------| +| `/f admin power setmax ` | Ustaw niestandardowy maksymalny limit mocy | +| `/f admin power noloss ` | Przełącz odporność na karę mocy za śmierć | +| `/f admin power nodecay ` | Przełącz odporność na zanikanie mocy offline | +| `/f admin power info ` | Wyświetl wszystkie nadpisania i szczegóły mocy | + +## Niestandardowa maksymalna moc + +`/f admin power setmax ` +Ustawia osobisty limit maksymalnej mocy dla gracza, nadpisując domyślną wartość serwera. + +>[!INFO] Ustawienie niestandardowego maksimum **nie** zmienia aktualnej mocy. Zmienia jedynie pułap. Gracz wciąż musi zdobywać moc do nowego limitu. + +## Tryb bez utraty + +`/f admin power noloss ` +Przełącza odporność na utratę mocy przy śmierci. Gdy włączony, gracz **nie** traci mocy przy śmierci. + +Przydatne dla: +- Okresów ochrony nowych graczy +- Uczestników wydarzeń +- Członków ekipy + +## Tryb bez zanikania + +`/f admin power nodecay ` +Przełącza odporność na zanikanie mocy offline. Gdy włączony, moc gracza **nie** zmniejsza się będąc offline. + +Przydatne dla: +- Graczy na dłuższej przerwie +- Członków VIP +- Ochrony sezonowej + +## Informacje o mocy + +`/f admin power info ` +Pokazuje kompletny podgląd: + +- Aktualna moc i maksymalna moc +- Aktywne nadpisania (noloss, nodecay, niestandardowe maksimum) +- Czas ostatniej śmierci i utracona moc +- Procentowy wkład we frakcję + +>[!TIP] Wszystkie nadpisania mocy zachowują się po restartach serwera i są zapisywane w pliku danych gracza. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..659f9a4b --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Opis komend administracyjnych + +Kompletna lista wszystkich podkomend `/f admin` ze składnią i wymaganymi uprawnieniami. + +## Panel i ogólne + +| Komenda | Uprawnienie | +|---------|-----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Zarządzanie frakcjami + +| Komenda | Uprawnienie | +|---------|-----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Zarządzanie strefami + +| Komenda | Uprawnienie | +|---------|-----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Moc i ekonomia + +| Komenda | Uprawnienie | +|---------|-----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Konserwacja + +| Komenda | Uprawnienie | +|---------|-----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Wszystkie węzły uprawnień mają prefiks `hyperfactions.` (np. `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..29888500 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Integracje pluginów + +HyperFactions integruje się z kilkoma zewnętrznymi pluginami poprzez miękkie zależności. Wszystkie integracje są opcjonalne i działają poprawnie, gdy plugin jest niedostępny. + +## Sprawdzanie statusu integracji + +`/f admin version` +Pokazuje aktualną wersję i wykryte integracje. + +`/f admin integration` +Otwiera panel zarządzania integracjami ze szczegółowym statusem każdego wykrytego pluginu. + +## Tabela integracji + +| Plugin | Typ | Opis | +|--------|------|-------------| +| **HyperPerms** | Uprawnienia | Pełny system uprawnień z grupami, dziedziczeniem i kontekstem | +| **LuckPerms** | Uprawnienia | Alternatywny dostawca uprawnień | +| **VaultUnlocked** | Uprawnienia/Ekonomia | Most uprawnień i ekonomii | +| **HyperProtect-Mixin** | Ochrona | Włącza zaawansowane flagi stref (eksplozje, ogień, zachowanie ekwipunku) | +| **OrbisGuard-Mixins** | Ochrona | Alternatywny mixin do egzekwowania flag stref | +| **PlaceholderAPI** | Placeholdery | 49 placeholderów frakcji dla innych pluginów | +| **WiFlow PlaceholderAPI** | Placeholdery | Alternatywny dostawca placeholderów | +| **GravestonePlugin** | Śmierć | Kontrola dostępu do nagrobków w strefach | +| **HyperEssentials** | Funkcje | Flagi stref dla domów, warpów i kitów | +| **KyuubiSoft Core** | Framework | Integracja z biblioteką bazową | +| **Sentry** | Monitoring | Śledzenie błędów i diagnostyka | + +## Priorytet dostawcy uprawnień + +1. **VaultUnlocked** (najwyższy priorytet) +2. **HyperPerms** +3. **LuckPerms** +4. **Awaryjnie OP** (jeśli nie znaleziono dostawcy) + +>[!INFO] Integracje są wykrywane raz przy uruchomieniu za pomocą refleksji. Wyniki są cachowane na sesję. Restart serwera jest wymagany po dodaniu lub usunięciu zintegrowanego pluginu. + +>[!TIP] Użyj `/f admin debug toggle integration`, aby włączyć szczegółowe logowanie integracji do rozwiązywania problemów. + +>[!NOTE] HyperProtect-Mixin to **zalecany** mixin ochrony. Bez niego 15 flag stref nie będzie miało efektu. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..4501883f --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Podstawy stref + +Strefy to kontrolowane przez administratorów terytoria z niestandardowymi zasadami, które nadpisują normalną ochronę terytorialną frakcji. + +## Typy stref + +- **SafeZone** -- Brak PvP, brak budowania, brak obrażeń. +Idealne dla stref odrodzenia i hubów handlowych. +- **WarZone** -- PvP zawsze włączone, brak budowania. +Idealne dla aren i spornych stref walki. + +## Tworzenie stref + +`/f admin safezone ` +Tworzy SafeZone i zajmuje twój obecny chunk. + +`/f admin warzone ` +Tworzy WarZone i zajmuje twój obecny chunk. + +Po utworzeniu stań na dodatkowych chunkach i użyj `/f admin zone claim `, aby rozszerzyć strefę. + +## Zarządzanie chunkami stref + +`/f admin zone claim ` +Dodaj obecny chunk do nazwanej strefy. + +`/f admin zone unclaim ` +Usuń obecny chunk ze strefy. + +`/f admin zone radius ` +Zajmij kwadrat chunków wokół twojej pozycji. + +## Usuwanie stref + +`/f admin removezone ` +Trwale usuwa strefę i zwalnia wszystkie jej zajęte chunki. + +>[!WARNING] Usunięcie strefy natychmiast zwalnia wszystkie jej chunki. Nie można tego cofnąć bez przywrócenia kopii zapasowej. + +>[!INFO] Zasady stref **zawsze nadpisują** zasady terytoriów frakcji. SafeZone na wrogim terenie wciąż jest bezpieczna. diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..593dc49a --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Opis komend stref + +Kompletna lista wszystkich komend zarządzania strefami. Wszystkie wymagają uprawnienia `hyperfactions.admin.zones`. + +## Szybkie tworzenie + +| Komenda | Opis | +|---------|-------------| +| `/f admin safezone ` | Utwórz SafeZone na obecnym chunku | +| `/f admin warzone ` | Utwórz WarZone na obecnym chunku | +| `/f admin removezone ` | Usuń strefę i zwolnij chunki | + +## Zarządzanie strefami + +| Komenda | Opis | +|---------|-------------| +| `/f admin zone create ` | Utwórz strefę (safezone/warzone) | +| `/f admin zone delete ` | Usuń strefę | +| `/f admin zone claim ` | Dodaj obecny chunk do strefy | +| `/f admin zone unclaim ` | Usuń obecny chunk ze strefy | +| `/f admin zone radius ` | Zajmij kwadratowy promień chunków | +| `/f admin zone list` | Lista wszystkich stref z liczbą chunków | +| `/f admin zone notify ` | Przełącz wiadomości wejścia/wyjścia | +| `/f admin zone title upper/lower ` | Ustaw tekst tytułu strefy | +| `/f admin zone properties ` | Otwórz GUI właściwości strefy | + +## Zarządzanie flagami + +| Komenda | Opis | +|---------|-------------| +| `/f admin zoneflag ` | Ustaw konkretną flagę | + +>[!TIP] Użyj **GUI właściwości** strefy dla wizualnego edytora z przełącznikami dla każdej flagi, zorganizowanymi według kategorii. + +## Przykłady + +- `/f admin safezone Spawn` -- utwórz ochronę spawnu +- `/f admin zone radius Spawn 3` -- rozszerz do 7x7 chunków +- `/f admin zoneflag Spawn door_use true` -- zezwól na drzwi +- `/f admin zone notify Spawn true` -- pokaż wiadomości wejścia diff --git a/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..e068cee8 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Flagi stref + +Strefy obsługują **47 flag boolowskich** w 10 kategoriach. Każda flaga kontroluje konkretne zachowanie wewnątrz strefy. + +## Przegląd kategorii flag + +| Kategoria | Liczba | Kluczowe flagi | +|----------|-------|-----------| +| Walka | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Obrażenia | 4 | fall_damage, explosion_damage, fire_spread | +| Śmierć | 2 | keep_inventory, power_loss | +| Budowanie | 4 | build_allowed, block_place, hammer_use | +| Interakcja | 13 | door_use, container_use, bench_use, npc_tame | +| Transport | 3 | teleporter_use, portal_use, mount_entry | +| Przedmioty | 4 | item_drop, item_pickup, invincible_items | +| Pojawianie mobów | 5 | mob_spawning, hostile/passive/neutral | +| Czyszczenie mobów | 4 | mob_clear, hostile/passive/neutral clear | +| Integracja | 5 | gravestone_access, show_on_map, essentials_homes | + +## Wartości domyślne (SafeZone vs WarZone) + +| Flaga | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Niektóre flagi wymagają **HyperProtect-Mixin** do działania (np. keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Bez mixina te flagi nie mają efektu, nawet gdy są włączone. + +## Ustawianie flag + +`/f admin zoneflag ` + +>[!TIP] Użyj `/f admin zone properties ` dla wizualnego edytora przełączników pogrupowanych według kategorii. diff --git a/src/main/resources/Server/Languages/pl-PL/help/combat/death.md b/src/main/resources/Server/Languages/pl-PL/help/combat/death.md new file mode 100644 index 00000000..c33b6802 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Śmierć i odzyskiwanie + +Śmierć niesie realne konsekwencje we frakcjach. Każda śmierć kosztuje cię osobistą moc, osłabiając zdolność twojej frakcji do utrzymania terytorium. + +## Utrata mocy + +Każda śmierć kosztuje -1.0 mocy z twojego osobistego stanu. To obniża łączną moc frakcji. + +| Zdarzenie | Zmiana mocy | +|-------|-------------| +| Śmierć (dowolna przyczyna) | -1.0 | +| Regeneracja online | +0.1 na minutę | +| Wylogowanie w walce | -1.0 (zabity) | + +>[!NOTE] To są wartości domyślne. Administrator serwera mógł skonfigurować inne ustawienia. + +## Przykładowe scenariusze + +*5 członków po 10.0 mocy każdy = 50 łącznie, 20 zajęć.* +*Jeden członek ginie dwukrotnie: 8.0 mocy, łącznie we frakcji 48.* +*Trzech członków ginie po razie: łącznie spada do 47.* + +>[!WARNING] Jeśli moc twojej frakcji spadnie poniżej liczby zajęć, wrogowie mogą przejąć twoje terytorium. + +## Odzyskiwanie + +Moc regeneruje się z prędkością 0.1 na minutę będąc online. Odzyskanie 1.0 utraconej mocy zajmuje około 10 minut. Wielokrotne śmierci się kumulują, więc unikaj powtarzanych walk. + +--- + +## Wszystkie rodzaje śmierci + +Utrata mocy dotyczy wszystkich śmierci: PvP, zabójstw przez moby, obrażeń od upadku, utonięcia i każdej innej przyczyny. Nie ma bezpiecznego sposobu na śmierć. + +>[!TIP] Ustaw bazę frakcji komendą /f sethome, aby członkowie mogli szybko się przegrupować po śmierci. diff --git a/src/main/resources/Server/Languages/pl-PL/help/combat/protection.md b/src/main/resources/Server/Languages/pl-PL/help/combat/protection.md new file mode 100644 index 00000000..cdd645d8 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Ochrona terytorialna + +Zajęte terytorium zapewnia kilka warstw obrony dla budowli i zasobów twojej frakcji. + +## Ochrona bloków + +Tylko członkowie frakcji mogą stawiać lub niszczyć bloki na twoim terytorium. Wrogowie i neutralni nie mogą modyfikować niczego. + +## Ochrona pojemników + +Skrzynie, beczki i inne pojemniki są zabezpieczone. Tylko członkowie twojej frakcji mogą otwierać lub wchodzić w interakcje z magazynami na zajętych chunkach. + +## Alerty wejścia + +Gdy nie-członek wejdzie na twoje zajęte terytorium, online'owi członkowie frakcji otrzymują powiadomienie z nazwą i lokalizacją intruza. + +--- + +## Dostęp sojuszników + +Sojusznicy domyślnie nie mogą budować ani niszczyć bloków na twoim terytorium. Obrażenia sojusznicze są również wyłączone, więc sojuszniczy gracze nie mogą się nawzajem ranić. + +>[!INFO] Terytorium chroni bloki, nie graczy. PvP na twoim własnym terytorium zależy od relacji atakującego z twoją frakcją. + +>[!TIP] Utrzymuj swoje zajęcia połączone i unikaj izolowanych chunków, które trudniej bronić. diff --git a/src/main/resources/Server/Languages/pl-PL/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/pl-PL/help/combat/spawn_protection.md new file mode 100644 index 00000000..703844b6 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Ochrona spawnu + +Po odrodzeniu się ze śmierci otrzymujesz tymczasową ochronę, aby zapobiec campingowi na spawnie. + +## Jak to działa + +- Ochrona trwa 5 sekund po odrodzeniu +- Nie możesz otrzymywać obrażeń w tym okresie +- Wskaźnik wizualny pokazuje twój status ochrony + +## Zakończenie ochrony + +Ochrona spawnu kończy się wcześniej, jeśli: + +- Zaatakujesz innego gracza lub istotę +- Ruszysz się z pozycji odrodzenia + +To zapobiega nadużyciom. Nie możesz atakować innych będąc nietykalnym. Gdy podejmiesz jakąkolwiek akcję, ochrona spada i obowiązują normalne zasady walki. + +--- + +>[!NOTE] To są wartości domyślne. Administrator serwera mógł skonfigurować inne ustawienia. + +>[!TIP] Wykorzystaj czas ochrony na ocenę sytuacji przed ruszeniem się. diff --git a/src/main/resources/Server/Languages/pl-PL/help/combat/tagging.md b/src/main/resources/Server/Languages/pl-PL/help/combat/tagging.md new file mode 100644 index 00000000..d868b327 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Oznaczenie bojowe + +Gdy atakujesz lub zostajesz zaatakowany przez innego gracza, otrzymujesz oznaczenie bojowe na 15 sekund. + +## Podczas oznaczenia + +- Brak teleportacji /f home lub /f stuck +- Brak serwerowych komend teleportacji +- Oznaczenie resetuje się z każdą nową akcją bojową +- Timer wyświetla pozostały czas oznaczenia + +--- + +## Kara za wylogowanie + +>[!WARNING] Wylogowanie się podczas oznaczenia bojowego zabija twoją postać i tracisz 1.0 mocy. + +Twoje przedmioty wypadają w miejscu rozłączenia i wrogowie mogą je zebrać. Zawsze czekaj na wygaśnięcie oznaczenia. + +## Jak działa timer + +Timer oznaczenia bojowego pojawia się na ekranie, gdy wejdziesz w walkę. Każde nowe trafienie resetuje go do 15 sekund. Gdy osiągnie zero, wszystkie ograniczenia zostają zniesione. + +>[!NOTE] To są wartości domyślne. Administrator serwera mógł skonfigurować inne ustawienia. + +>[!TIP] Wycofaj się i przeczekaj timer, jeśli potrzebujesz się teleportować. diff --git a/src/main/resources/Server/Languages/pl-PL/help/combat/zones.md b/src/main/resources/Server/Languages/pl-PL/help/combat/zones.md new file mode 100644 index 00000000..353cfe5d --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Strefy specjalne + +Administratorzy mogą wyznaczać obszary ze specjalnymi zasadami, które nadpisują normalną ochronę terytorialną frakcji. + +## SafeZone + +Brak obrażeń PvP, brak niszczenia bloków przez nie-administratorów. Idealne dla stref odrodzenia, hubów handlowych i miejsc wydarzeń. Gracze nie mogą tu zostać skrzywdzeni. + +## WarZone + +PvP jest zawsze włączone. Brak ochrony bloków. Otwarte strefy walki, gdzie wszystko jest dozwolone. Nie otrzymujesz korzyści z ochrony terytorialnej w WarZone. + +--- + +## Porównanie stref + +| Cecha | SafeZone | WarZone | Teren frakcji | +|---------|----------|---------|--------------| +| PvP | Wyłączone | Zawsze włączone | Zależne od relacji | +| Niszczenie bloków | Wyłączone | Dozwolone | Tylko członkowie | +| Pojemniki | Chronione | Otwarte | Tylko członkowie | +| Idealne do | Spawn/Handel | Areny | Bazy | + +>[!NOTE] Zasady stref zawsze nadpisują zasady terytoriów frakcji. Zajęty chunk wewnątrz WarZone podlega zasadom WarZone. + +>[!TIP] Sprawdź mapę terytoriów komendą /f map, aby zobaczyć granice stref. diff --git a/src/main/resources/Server/Languages/pl-PL/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/pl-PL/help/diplomacy/alliances.md new file mode 100644 index 00000000..60bafee3 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Zawieranie sojuszy + +Sojusze to wzajemne porozumienia między dwoma frakcjami, które zapewniają ochronę i korzyści ze współpracy. + +--- + +## Jak zawrzeć sojusz + +`/f ally ` + +Wysyła propozycję sojuszu do docelowej frakcji. Sojusz wchodzi w życie dopiero gdy obie strony się zgodzą. Oficer lub Lider z drugiej frakcji musi również wpisać tę samą komendę, celując w twoją frakcję, aby potwierdzić. + +## Jak zerwać sojusz + +`/f neutral ` + +Każda strona może jednostronnie zakończyć sojusz, resetując relację do neutralnej. + +--- + +## Korzyści z sojuszu + +| Korzyść | Szczegóły | +|---------|---------| +| Brak ognia przyjacielskiego | Sojuszniczy gracze nie mogą się nawzajem ranić | +| Wspólna widoczność na mapie | Terytorium sojusznicze wyświetla się na niebiesko na mapie | +| Interakcja z terytorium | Sojusznicy mogą używać drzwi, siedzeń i transportu na twoim terytorium | +| Czat sojuszniczy | Przełącz na tryb czatu sojuszniczego do komunikacji międzyfrakcyjnej | +| Ochrona przed przejęciem | Sojusznicy nie mogą przejmować nawzajem swoich terytoriów | + +>[!NOTE] Twoja frakcja może mieć jednocześnie do 10 sojuszy. Wybieraj sojuszników mądrze. + +--- + +## Etykieta sojuszu + +>[!TIP] Komunikacja to klucz. Przed wysłaniem propozycji sojuszu rozważ skontaktowanie się z liderem drugiej frakcji, aby omówić warunki. Silny sojusz opiera się na wzajemnych korzyściach, nie tylko na wygodzie. + +- Sojusze działają w obie strony -- jeśli korzystasz z ochrony, twoi sojusznicy oczekują tego samego +- Zerwanie sojuszu podczas wojny może zaszkodzić reputacji twojej frakcji +- Sojusznicze frakcje mogą koordynować zajęcia terytoriów, aby tworzyć obronne granice diff --git a/src/main/resources/Server/Languages/pl-PL/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/pl-PL/help/diplomacy/enemies.md new file mode 100644 index 00000000..6568a6d7 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Wrogie frakcje + +Ogłoszenie wroga to jednostronna akcja, która natychmiast włącza PvP i agresję terytorialną wobec docelowej frakcji. Nie wymaga zgody drugiej strony. + +--- + +## Ogłaszanie wroga + +`/f enemy ` + +Natychmiast oznacza docelową frakcję jako twojego wroga. Działa od razu -- potwierdzenie z drugiej strony nie jest potrzebne. Wymaga rangi Oficera lub wyższej. + +## Resetowanie do neutralnego + +`/f neutral ` + +Kończy status wroga i resetuje relację do neutralnej. Również wymaga Oficera+ i działa natychmiast. + +--- + +## Co włącza status wroga + +| Efekt | Szczegóły | +|--------|---------| +| PvP na terytorium | Pełne PvP jest włączone na terytoriach obu frakcji | +| Przejmowanie | Możesz przejmować ich chunki, jeśli mają deficyt mocy | +| Oznaczenie na mapie | Wrogie terytorium wyświetla się na czerwono na mapie | +| Brak ochrony | Standardowa ochrona terytorialna nie zapobiega wrogim walkom PvP | + +>[!WARNING] Ogłoszenie wroga to poważna decyzja. Ich członkowie mogą również walczyć z tobą na twoim własnym terytorium po ogłoszeniu. + +--- + +## Rozważania strategiczne + +- Deklaracje wrogości są jednostronne -- możesz ogłosić bez ich zgody, ale oni również widzą cię jako wrogiego +- Przed ogłoszeniem sprawdź moc celu komendą /f info. Jeśli są silni, to ty możesz stracić terytorium +- Osłabiaj wrogów powtarzanymi walkami, aby wyczerpać ich moc, a potem przejmuj ich teren +- Nie ma limitu na liczbę wrogów, ale walka na wielu frontach jest ryzykowna + +>[!TIP] Użyj /f neutral, aby deeskalować konflikty. Czasem strategiczny pokój jest cenniejszy niż kontynuowanie wojny. + +>[!NOTE] Jeśli jesteś w sojuszu z frakcją i ogłosisz ją wrogiem, sojusz zostanie najpierw zerwany. diff --git a/src/main/resources/Server/Languages/pl-PL/help/diplomacy/relations.md b/src/main/resources/Server/Languages/pl-PL/help/diplomacy/relations.md new file mode 100644 index 00000000..c4056446 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Relacje frakcji + +Każda para frakcji ma relację dyplomatyczną, która określa, jak ze sobą współdziałają. Istnieją trzy stany: Sojusznik, Wróg i Neutralny. + +--- + +## Porównanie relacji + +| Efekt | Sojusznik | Neutralny | Wróg | +|--------|------|---------|-------| +| PvP na terytorium | Wyłączone | Standardowe zasady | Włączone | +| Ochrona terytorialna | Wzajemna ochrona | Standardowa ochrona | Można przejmować po osłabieniu | +| Ogień przyjacielski | Wyłączony | Nie dotyczy | Włączony wszędzie | +| Kolor na mapie | Niebieski | Szary | Czerwony | +| Jak ustawić | Wzajemna zgoda | Stan domyślny | Jednostronna deklaracja | +| Dostęp do czatu | Kanał czatu sojuszniczego | Brak | Brak | + +--- + +## Przeglądanie relacji + +`/f relations` + +Pokazuje wszystkie twoje aktualne sojusze, wrogów i oczekujące propozycje sojuszy. + +## Jak działają relacje + +- Neutralny to domyślny stan między wszystkimi frakcjami. Obowiązują standardowe zasady serwera. +- Sojusz wymaga zgody obu frakcji. Każda strona może go zerwać jednostronnie. +- Wróg jest deklarowany jednostronnie. Nie potrzeba zgody -- druga frakcja jest natychmiast oznaczona jako twój wróg. + +>[!INFO] Relacjami zarządzają Oficerowie i Liderzy. Członkowie mogą przeglądać relacje, ale nie mogą ich zmieniać. + +>[!TIP] Używaj /f relations regularnie, aby śledzić sytuację dyplomatyczną. Wiedza o tym, kim są twoi wrogowie, pomaga przygotować się na konflikty terytorialne. diff --git a/src/main/resources/Server/Languages/pl-PL/help/economy/commands.md b/src/main/resources/Server/Languages/pl-PL/help/economy/commands.md new file mode 100644 index 00000000..6d1ab267 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Komendy ekonomii + +Szybka ściągawka wszystkich komend ekonomii frakcji. + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f balance | Sprawdź stan skarbca | Każdy | +| /f deposit (kwota) | Wpłać do skarbca | Każdy | +| /f withdraw (kwota) | Wypłać ze skarbca | Oficer+ | +| /f money transfer (frakcja) (kwota) | Przelej do innej frakcji | Oficer+ | +| /f money log [strona] | Sprawdź historię transakcji | Oficer+ | + +--- + +## Aliasy komend + +- /f balance może być też używane jako /f bal +- /f deposit i /f withdraw akceptują kwoty dziesiętne + +## Wymagania ról + +Komendy wypłat i przelewów są ograniczone do Oficerów i Liderów. Wszystkie inne komendy ekonomiczne są dostępne dla każdego członka frakcji. + +>[!TIP] Używaj /f money log do przeglądania ostatnich wpłat, wypłat i przelewów ze znacznikami czasu. diff --git a/src/main/resources/Server/Languages/pl-PL/help/economy/funds.md b/src/main/resources/Server/Languages/pl-PL/help/economy/funds.md new file mode 100644 index 00000000..29e208df --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Zarządzanie funduszami + +Członkowie frakcji współpracują, aby utrzymać skarbiec zasilony poprzez wpłaty, wypłaty i przelewy. + +## Wpłacanie + +Każdy członek może wpłacić osobiste fundusze do skarbca frakcji. + +`/f deposit ` +Wpłać ze swojego osobistego salda do skarbca. + +## Wypłacanie + +Oficerowie i Lider mogą wypłacać fundusze z powrotem na swoje osobiste saldo. + +`/f withdraw ` +Wypłać ze skarbca na swoje saldo. (Oficer+) + +## Przelewanie + +Oficerowie mogą przelewać fundusze bezpośrednio między skarbcami frakcji w ramach umów handlowych lub dyplomacji. + +`/f money transfer ` +Wyślij fundusze do skarbca innej frakcji. (Oficer+) + +--- + +## Opłaty + +| Transakcja | Opłata | +|------------|-----| +| Wpłata | 0% | +| Wypłata | 0% | +| Przelew | 0% | + +>[!INFO] Stawki opłat są konfigurowalne przez serwer i mogą różnić się od domyślnych wartości pokazanych powyżej. + +>[!TIP] Wszystkie transakcje są rejestrowane. Używaj /f money log do przeglądania ostatniej aktywności. diff --git a/src/main/resources/Server/Languages/pl-PL/help/economy/treasury.md b/src/main/resources/Server/Languages/pl-PL/help/economy/treasury.md new file mode 100644 index 00000000..c0f87ec6 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Skarbiec frakcji + +Każda frakcja ma wspólny skarbiec, który służy jako bank frakcji. Fundusze są wykorzystywane na koszty utrzymania, konserwację terytoriów i operacje frakcji. + +## Saldo początkowe + +Nowe frakcje zaczynają z 0 w skarbcu. Członkowie muszą wpłacać fundusze, aby gromadzić rezerwy. + +## Kto może zarządzać + +- Każdy członek może wpłacać fundusze +- Oficerowie i Lider mogą wypłacać i przelewać +- Lider ma pełną kontrolę nad skarbcem + +--- + +`/f balance` +Sprawdź aktualne saldo skarbca twojej frakcji. Dostępne również jako /f bal. + +>[!TIP] Wpłacaj regularnie, aby utrzymać frakcję z funduszami. Koszty utrzymania terytorium mogą szybko opróżnić pusty skarbiec. + +>[!INFO] Wszystkie transakcje skarbcowe są rejestrowane i mogą być przeglądane przez oficerów. diff --git a/src/main/resources/Server/Languages/pl-PL/help/economy/upkeep.md b/src/main/resources/Server/Languages/pl-PL/help/economy/upkeep.md new file mode 100644 index 00000000..849b13ac --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Utrzymanie terytorium + +Frakcje muszą płacić bieżące koszty utrzymania swoich zajętych terytoriów. Zapobiega to gromadzeniu ziem i utrzymuje mapę dynamiczną. + +## Koszty utrzymania + +| Ustawienie | Domyślnie | +|---------|---------| +| Koszt za chunk | 2.0 za cykl | +| Interwał płatności | Co 24 godziny | +| Darmowe chunki | 3 (bez kosztu) | +| Tryb skalowania | Stawka stała | + +>[!NOTE] To są wartości domyślne. Administrator serwera mógł skonfigurować inne ustawienia. + +Twoje pierwsze 3 chunki są darmowe. Powyżej tego, każdy dodatkowy zajęty chunk kosztuje 2.0 za cykl płatności. + +## Automatyczna płatność + +Automatyczna płatność jest domyślnie włączona. System automatycznie potrąca koszty utrzymania ze skarbca w każdym interwale. Nie wymaga ręcznej akcji. + +--- + +## Okres karencji + +Jeśli twój skarbiec nie pokrywa kosztów utrzymania, rozpoczyna się 48-godzinny okres karencji. Ostrzeżenie jest wysyłane 6 godzin przed rozpoczęciem utraty zajęć. + +>[!WARNING] Jeśli koszty utrzymania pozostaną nieopłacone po okresie karencji, twoja frakcja traci 1 zajęcie na cykl, dopóki koszty nie zostaną pokryte lub wszystkie dodatkowe zajęcia nie zostaną utracone. + +## Przykład + +*Frakcja z 8 zajęciami płaci za 5 chunków (8 minus 3 darmowe). Przy 2.0 za chunk, to 10.0 za cykl.* + +>[!TIP] Utrzymuj skarbiec zasilony powyżej kosztu utrzymania. Używaj /f balance, aby sprawdzić rezerwy. diff --git a/src/main/resources/Server/Languages/pl-PL/help/power_land/claiming.md b/src/main/resources/Server/Languages/pl-PL/help/power_land/claiming.md new file mode 100644 index 00000000..1a4b988d --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Zajmowanie terytorium + +Zajęcie chunka chroni go pod kontrolą twojej frakcji. Tylko członkowie frakcji mogą budować, niszczyć i korzystać z pojemników na zajętym terytorium. + +--- + +## Jak zajmować + +`/f claim` + +Stań na chunku, który chcesz zająć i wpisz tę komendę. Chunk jest natychmiast chroniony. Wymaga rangi Oficera lub wyższej. + +## Jak oddawać + +`/f unclaim` + +Oddaje chunk, na którym stoisz, z powrotem na pustkowia. Również wymaga Oficera+. + +--- + +## Zasady zajmowania + +| Zasada | Domyślnie | +|------|---------| +| Koszt mocy za zajęcie | 2.0 mocy | +| Maksymalna liczba zajęć | 100 na frakcję | +| Tylko przyległe | Nie (możesz zajmować gdziekolwiek) | + +>[!NOTE] To są wartości domyślne. Administrator serwera mógł skonfigurować inne ustawienia. + +>[!INFO] Każde zajęcie kosztuje 2.0 mocy w utrzymaniu. Frakcja z 50 łącznej mocy może bezpiecznie utrzymać do 25 zajęć. + +--- + +## Co zapewnia ochrona + +Na zajętym terytorium domyślnie obowiązuje: + +- Obcy nie mogą niszczyć, stawiać ani wchodzić w interakcje z blokami +- Sojusznicy mogą używać drzwi, siedzeń i transportu, ale nie mogą niszczyć ani stawiać bloków +- Członkowie i Oficerowie mają pełny dostęp do budowania, niszczenia i korzystania ze wszystkiego +- Dostęp do pojemników (skrzynie, skrzynki) jest ograniczony tylko do członków + +>[!TIP] Możesz też zajmować bezpośrednio z mapy terytoriów. Otwórz /f map i kliknij na niezajęte chunki, aby je zająć. + +>[!WARNING] Nie rozszerzaj się nadmiernie. Jeśli twoja frakcja straci moc przez śmierci, zajęcia przekraczające budżet mocy staną się podatne na przejęcie. diff --git a/src/main/resources/Server/Languages/pl-PL/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/pl-PL/help/power_land/losing_territory.md new file mode 100644 index 00000000..820a1802 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Tracenie terytorium + +Gdy łączna moc frakcji spadnie poniżej kosztu jej zajęć, staje się ona podatna na rajdy. Wrogowie mogą przejmować chunki spod twoich nóg. + +--- + +## Jak działa przejmowanie + +`/f overclaim` + +Oficer lub Lider z wrogiej frakcji staje na twoim zajętym chunku i wpisuje tę komendę. Jeśli twoja frakcja ma deficyt mocy, chunk przechodzi pod ich kontrolę. + +## Matematyka + +Każde zajęcie kosztuje 2.0 mocy w utrzymaniu. Jeśli twoja łączna moc spadnie poniżej tego progu, chunki z deficytu są podatne na przejęcie. + +>[!NOTE] To są wartości domyślne. Administrator serwera mógł skonfigurować inne ustawienia. + +>[!WARNING] Przejęcie jest trwałe. Gdy wróg zabierze chunk, musisz go odzyskać (lub przejąć z powrotem, jeśli osłabną). + +--- + +## Przykładowy scenariusz + +| Czynnik | Wartość | +|--------|-------| +| Członkowie | 5 graczy | +| Moc na członka | 10 każdy (startowa) | +| Łączna moc | 50 | +| Zajęcia | 30 chunków | +| Wymagana moc (30 x 2.0) | 60 | +| Deficyt | brakuje 10 mocy | + +W tym przykładzie frakcja jest podatna na rajdy od samego początku. Wrogowie mogą przejąć do 5 chunków (10 deficytu / 2.0 na zajęcie) zanim frakcja osiągnie równowagę. + +--- + +## Jak zapobiegać przejęciu + +- Nie rozszerzaj się nadmiernie -- zawsze utrzymuj łączną moc powyżej kosztu zajęć z zapasem +- Bądź aktywny -- moc regeneruje się tylko będąc online (+0.1/min) +- Unikaj niepotrzebnych śmierci -- każda śmierć kosztuje 1.0 mocy +- Rekrutuj więcej członków -- więcej graczy oznacza więcej łącznej mocy +- Oddawaj nieużywane chunki -- zwolnij moc komendą /f unclaim + +>[!TIP] Regularnie sprawdzaj status mocy komendą /f power. Jeśli twoja łączna moc jest blisko kosztu zajęć, rozważ oddanie mniej ważnych chunków przed wojną. diff --git a/src/main/resources/Server/Languages/pl-PL/help/power_land/territory_map.md b/src/main/resources/Server/Languages/pl-PL/help/power_land/territory_map.md new file mode 100644 index 00000000..ef4708d0 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# Mapa terytoriów + +Mapa terytoriów daje ci widok z lotu ptaka na zajęte chunki w twojej okolicy, pokazując które frakcje kontrolują teren wokół ciebie. + +--- + +## Otwieranie mapy + +`/f map` + +Otwiera GUI mapy terytoriów wycentrowane na twojej aktualnej lokalizacji. + +--- + +## Legenda kolorów + +| Kolor | Znaczenie | +|-------|---------| +| [#55FF55] Kolor twojej frakcji | Terytorium zajęte przez twoją frakcję | +| [#5555FF] Niebieski | Terytorium sojuszniczej frakcji | +| [#FF5555] Czerwony | Terytorium wrogiej frakcji | +| [#AAAAAA] Szary | Terytorium neutralnej frakcji | +| [#333333] Ciemny | Pustkowia (niezajęty teren) | +| [#FFAA00] Złoty | Strefy specjalne (SafeZone, WarZone) | + +>[!INFO] Kolor twojej frakcji na mapie odpowiada kolorowi ustawionemu w ustawieniach frakcji. Sojusznicy i wrogowie używają stałych kolorów dla łatwej identyfikacji. + +--- + +## Kliknij, aby zająć + +Mapa służy nie tylko do oglądania -- możesz z nią wchodzić w interakcje. + +- Kliknij niezajęty chunk, aby go zająć (wymaga rangi Oficer+ i wystarczającej mocy) +- Kliknij zajęty chunk, aby zobaczyć, która frakcja jest jego właścicielem +- Przewijaj lub przesuwaj, aby eksplorować okolicę + +>[!TIP] Mapa to najłatwiejszy sposób na planowanie rozszerzania terytorium. Szukaj niezajętych obszarów blisko twojej bazy i zajmuj strategicznie, aby stworzyć ciągłą granicę. + +>[!NOTE] Mapa pokazuje stały obszar wokół twojej pozycji. Przesuń się w inne miejsce i otwórz ją ponownie, aby zobaczyć inne części świata. diff --git a/src/main/resources/Server/Languages/pl-PL/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/pl-PL/help/power_land/understanding_power.md new file mode 100644 index 00000000..832e916b --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Zrozumienie mocy + +Moc to podstawowy zasób, który określa, ile terytorium może utrzymać twoja frakcja. Każdy gracz ma osobistą moc, która wlicza się do łącznej mocy frakcji. + +--- + +## Domyślne wartości mocy + +| Ustawienie | Wartość | +|---------|-------| +| Maksymalna moc na gracza | 20 | +| Moc startowa | 10 | +| Kara za śmierć | -1.0 za śmierć | +| Nagroda za zabójstwo | 0.0 | +| Tempo regeneracji | +0.1 na minutę (będąc online) | +| Koszt mocy na zajęcie | 2.0 | +| Wylogowanie podczas oznaczenia | -1.0 dodatkowo | + +>[!NOTE] To są wartości domyślne. Administrator serwera mógł skonfigurować inne ustawienia. + +## Jak to działa + +Łączna moc twojej frakcji to suma osobistej mocy wszystkich członków. Wymagana moc to liczba zajęć pomnożona przez 2.0. Dopóki łączna moc pozostaje powyżej wymaganej mocy, twoje terytorium jest bezpieczne. + +>[!INFO] Moc regeneruje się pasywnie z prędkością 0.1 na minutę, gdy jesteś online. W tym tempie odzyskanie 1.0 mocy zajmuje około 10 minut. + +--- + +## Sprawdzanie mocy + +`/f power` + +Pokazuje twoją osobistą moc, łączną moc frakcji i ile jest potrzebne do utrzymania obecnych zajęć. + +## Strefa zagrożenia + +Jeśli łączna moc spadnie poniżej wymaganej ilości dla twoich zajęć, twoja frakcja staje się podatna. Wrogowie mogą przejąć twoje chunki. + +>[!WARNING] Wiele śmierci w krótkim okresie może szybko się nawarstwiać. Jeśli masz 5 członków po 10 mocy każdy (50 łącznie) i 20 zajęć (40 potrzebne), zaledwie 5 śmierci w twoim zespole obniży moc do 45 -- wciąż bezpiecznie. Ale 11 śmierci da wam 39, poniżej progu 40. + +>[!TIP] Utrzymuj zapas mocy. Nie zajmuj każdego chunka, na jaki cię stać -- zostaw margines na kilka śmierci bez stawania się podatnym na rajdy. diff --git a/src/main/resources/Server/Languages/pl-PL/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/pl-PL/help/quick_ref/all_commands.md new file mode 100644 index 00000000..adebaa2f --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Wszystkie komendy + +## Podstawowe + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f | Otwórz menu frakcji | Każdy | +| /f help | Otwórz centrum pomocy | Każdy | +| /f create (nazwa) | Utwórz frakcję | Każdy | +| /f disband | Usuń swoją frakcję | Lider | +| /f leave | Opuść swoją frakcję | Każdy | + +## Członkostwo + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f invite (gracz) | Zaproś gracza | Oficer+ | +| /f accept [frakcja] | Przyjmij zaproszenie | Każdy | +| /f request (frakcja) | Poproś o dołączenie | Każdy | +| /f kick (gracz) | Usuń członka | Oficer+ | +| /f promote (gracz) | Awansuj na Oficera | Lider | +| /f demote (gracz) | Degraduj na Członka | Lider | +| /f transfer (gracz) | Przekaż przywództwo | Lider | + +## Terytorium + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f claim | Zajmij obecny chunk | Oficer+ | +| /f unclaim | Oddaj obecny chunk | Oficer+ | +| /f overclaim | Przejmij osłabiony chunk | Oficer+ | +| /f map | Otwórz mapę terytoriów | Każdy | + +## Teleportacja + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f home | Teleportuj do bazy frakcji | Każdy | +| /f sethome | Ustaw bazę frakcji | Oficer+ | +| /f delhome | Usuń bazę frakcji | Oficer+ | +| /f stuck | Ucieknij z wrogiego terytorium | Każdy | + +## Informacje + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f info [frakcja] | Szczegóły frakcji | Każdy | +| /f list | Przeglądaj wszystkie frakcje | Każdy | +| /f members | Wyświetl skład | Każdy | +| /f who [gracz] | Info o graczu | Każdy | +| /f power [gracz] | Sprawdź poziomy mocy | Każdy | +| /f invites | Zarządzaj zaproszeniami/prośbami | Każdy | +| /f relations | Wyświetl relacje dyplomatyczne | Każdy | + +## Dyplomacja + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f ally (frakcja) | Zaproponuj sojusz | Oficer+ | +| /f enemy (frakcja) | Ogłoś wroga | Oficer+ | +| /f neutral (frakcja) | Resetuj do neutralnego | Oficer+ | + +## Ustawienia + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f settings | Otwórz GUI ustawień | Oficer+ | +| /f rename (nazwa) | Zmień nazwę frakcji | Lider | +| /f desc [tekst] | Ustaw opis | Oficer+ | +| /f color (kod) | Ustaw kolor frakcji | Oficer+ | +| /f open | Zezwól każdemu na dołączenie | Lider | +| /f close | Wymagaj zaproszenia | Lider | + +## Ekonomia + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f balance | Sprawdź skarbiec | Każdy | +| /f deposit (kwota) | Wpłać fundusze | Każdy | +| /f withdraw (kwota) | Wypłać fundusze | Oficer+ | +| /f money transfer (frakcja) (kwota) | Przelej fundusze | Oficer+ | +| /f money log [strona] | Historia transakcji | Oficer+ | + +## Czat + +| Komenda | Opis | Rola | +|---------|-------------|------| +| /f c | Przełącz tryb czatu | Każdy | +| /f c f | Ustaw czat frakcyjny | Każdy | +| /f c a | Ustaw czat sojuszniczy | Każdy | +| /f c off | Ustaw czat publiczny | Każdy | diff --git a/src/main/resources/Server/Languages/pl-PL/help/welcome/getting_started.md b/src/main/resources/Server/Languages/pl-PL/help/welcome/getting_started.md new file mode 100644 index 00000000..54b7dcc9 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Pierwsze kroki + +Witaj w HyperFactions! Oto jak zacząć grę w kilku prostych krokach. + +--- + +## Krok 1: Otwórz menu frakcji + +Wpisz /f, aby otworzyć główne GUI frakcji. To twoje centrum dowodzenia -- przeglądanie frakcji, tworzenie własnej i zarządzanie zaproszeniami. + +## Krok 2: Wybierz swoją drogę + +| Opcja | Jak to zrobić | +|--------|-----| +| Przeglądaj otwarte frakcje | Kliknij Przeglądaj w menu i naciśnij Dołącz przy dowolnej otwartej frakcji. | +| Przyjmij zaproszenie | Sprawdź zakładkę Zaproszenia. Jeśli ktoś cię zaprosił, kliknij Akceptuj. | +| Stwórz własną | Kliknij Utwórz frakcję, wybierz nazwę i zostań Liderem. | + +## Krok 3: Poznaj swoją frakcję + +Gdy dołączysz do frakcji, zobaczysz Panel frakcji z listą członków, mapą terytoriów, relacjami i ustawieniami. + +>[!TIP] Jeśli dopiero zaczynasz, spróbuj najpierw dołączyć do istniejącej frakcji. Szybciej nauczysz się zasad z doświadczonymi graczami wokół siebie. + +--- + +## Podstawowe komendy na start + +- /f -- Otwiera GUI frakcji +- /f home -- Teleportuje do bazy twojej frakcji +- /f c -- Przełącza tryb czatu między Normalnym, Frakcyjnym i Sojuszniczym +- /f map -- Wyświetla mapę terytoriów wokół ciebie + +>[!TIP] Możesz też wpisać /f help na czacie, aby w każdej chwili zobaczyć szybki spis komend. diff --git a/src/main/resources/Server/Languages/pl-PL/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/pl-PL/help/welcome/quick_tips.md new file mode 100644 index 00000000..f7abf04a --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Szybkie porady + +Przydatne wskazówki podzielone na kategorie, które pomogą ci się rozwinąć. + +--- + +## Terytorium + +- Zajmij teren wokół swojej bazy jak najwcześniej komendą `/f claim` -- niezajęte budowle **nie mają ochrony** +- Każde zajęcie kosztuje **2.0 mocy** w utrzymaniu, więc nie rozszerzaj się ponad możliwości swoich członków +- Używaj `/f map` do rozpoznania pobliskich terenów i szukania bezpiecznych miejsc do budowy +- Oddawaj chunki, których już nie potrzebujesz, komendą `/f unclaim`, aby zwolnić moc + +## Walka + +- Śmierć kosztuje **1.0 mocy** -- unikaj niepotrzebnych walk, gdy twoja frakcja jest blisko limitu zajęć +- Po odrodzeniu masz **5 sekund ochrony spawnu** +- Oznaczenie bojowe trwa **15 sekund** -- wylogowanie się podczas oznaczenia kosztuje dodatkową moc +- Ogień przyjacielski jest domyślnie **wyłączony** między członkami frakcji i sojusznikami + +>[!WARNING] Wylogowanie się podczas oznaczenia bojowego powoduje dodatkową utratę mocy (1.0 za wylogowanie). Zostań i walcz albo najpierw ucieknij. + +## Społeczność + +- Używaj `/f c` do przełączania trybów czatu, aby rozmowy frakcyjne pozostały prywatne +- Zapraszaj zaufanych graczy komendą `/f invite ` -- zaproszenia wygasają po **5 minutach** +- Twórz sojusze komendą `/f ally `, aby uzyskać wzajemną ochronę i wspólną widoczność na mapie +- Sprawdzaj `/f relations`, aby zobaczyć pełny status dyplomatyczny + +## Ekonomia + +>[!TIP] Jeśli serwer ma włączoną ekonomię, twoja frakcja może gromadzić skarbiec. Członkowie mogą wpłacać, ale tylko Oficerowie i Liderzy mogą wypłacać lub przekazywać fundusze. + +- Wpłacaj fundusze przez GUI skarbca, aby wzmocnić swoją frakcję +- Bogatsza frakcja może pozwolić sobie na więcej zajęć i szybciej wracać do formy po porażkach + +## Ogólne + +- Wpisz `/f` w dowolnym momencie, aby otworzyć panel frakcji -- wszystko jest dostępne stamtąd +- Awansuj aktywnych członków na Oficerów, aby mogli pomagać w zajmowaniu i zarządzaniu terytorium +- Utrzymuj swoją frakcję aktywną -- moc regeneruje się tylko wtedy, gdy gracze są **online** diff --git a/src/main/resources/Server/Languages/pl-PL/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/pl-PL/help/welcome/what_are_factions.md new file mode 100644 index 00000000..997f0398 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Czym są frakcje? + +Frakcje to prowadzone przez graczy drużyny, które zajmują terytorium, budują bazy i rywalizują o dominację. Gdy dołączysz do frakcji lub ją utworzysz, zyskujesz dostęp do chronionego terenu, wspólnej bazy, prywatnego czatu i narzędzi dyplomatycznych. + +>[!TIP] We frakcjach chodzi o pracę zespołową. Im więcej aktywnych członków masz, tym silniejsza staje się twoja frakcja. + +--- + +## Podstawowe mechaniki + +| Mechanika | Opis | +|----------|-------------| +| Moc | Każdy gracz generuje moc z czasem (maks. 20). Łączna moc twojej frakcji określa, ile terenu możesz utrzymać. | +| Zajęcia | Zajęte chunki są chronione -- tylko członkowie mogą budować, niszczyć i otwierać pojemniki na ich terenie. Każde zajęcie kosztuje 2.0 mocy w utrzymaniu. | +| Relacje | Frakcje mogą tworzyć sojusze dla wzajemnej ochrony lub ogłaszać wrogów, aby umożliwić PvP i agresję terytorialną. | +| Role | Trzy rangi -- Lider, Oficer, Członek -- każda z innymi uprawnieniami. | + +--- + +## Jak działa siła + +Siła twojej frakcji pochodzi od jej członków. Każdy gracz zaczyna z 10 mocy i regeneruje do 20 będąc online. Śmierć kosztuje moc. Jeśli łączna moc frakcji spadnie poniżej kosztu zajęć, wrogowie mogą przejąć twoje terytorium. + +>[!WARNING] Pojedyncza śmierć kosztuje 1.0 mocy. Wiele śmierci w krótkim czasie może sprawić, że twoja frakcja stanie się podatna na przejęcie terenu. + +--- + +## Dyplomacja w skrócie + +- **Sojusznicy** -- Wzajemne porozumienia, które zapobiegają ogniowi przyjacielskiemu i chronią wzajemne terytorium +- **Wrogowie** -- Jednostronne deklaracje, które włączają PvP na terenie drugiej frakcji i pozwalają na przejmowanie terenu +- **Neutralni** -- Domyślny stan między wszystkimi frakcjami ze standardowymi zasadami + +>[!INFO] Wszystkim tym możesz zarządzać przez GUI w grze, wpisując `/f`, lub przez komendy czatu. diff --git a/src/main/resources/Server/Languages/pl-PL/help/your_faction/creating.md b/src/main/resources/Server/Languages/pl-PL/help/your_faction/creating.md new file mode 100644 index 00000000..60f6fb81 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Tworzenie frakcji + +Założenie własnej frakcji czyni cię Liderem z pełną kontrolą nad ustawieniami, członkami i terytorium. + +--- + +## Jak utworzyć + +`/f create ` + +Tworzy twoją frakcję i natychmiast otwiera Panel frakcji, gdzie możesz zacząć zapraszać członków, zajmować teren i konfigurować ustawienia. + +## Zasady nazewnictwa + +| Zasada | Wymóg | +|------|------------| +| Długość | Od 3 do 24 znaków | +| Znaki | Tylko litery, cyfry i spacje | +| Unikalność | Dwie frakcje nie mogą mieć tej samej nazwy | + +>[!WARNING] Wybierz nazwę ostrożnie. Zmiana nazwy później wymaga uprawnień Lidera i może mieć czas odnowienia. + +--- + +## Co dzieje się po utworzeniu + +- Zostajesz Liderem (najwyższa ranga) +- Twoja frakcja zaczyna z 0 zajęciami i twoją osobistą mocą (domyślnie 10) +- Panel frakcji otwiera się automatycznie +- Możesz natychmiast zapraszać graczy, zajmować terytorium i ustawić bazę frakcji + +>[!INFO] Jeśli serwer ma włączoną integrację ekonomiczną, utworzenie frakcji może kosztować pieniądze. Koszt utworzenia jest ustalany przez administratora serwera. + +>[!TIP] Po utworzeniu, twoje pierwsze priorytety powinny być: zaproś znajomych, znajdź lokalizację na bazę i zajmij ją. diff --git a/src/main/resources/Server/Languages/pl-PL/help/your_faction/joining.md b/src/main/resources/Server/Languages/pl-PL/help/your_faction/joining.md new file mode 100644 index 00000000..71235417 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Dołączanie do frakcji + +Istnieją trzy sposoby dołączenia do istniejącej frakcji, w zależności od jej konfiguracji. + +--- + +## Porównanie metod + +| Metoda | Jak to zrobić | Wymagane | +|--------|-----|----------| +| Przeglądaj i dołącz | Otwórz /f, kliknij Przeglądaj, kliknij Dołącz | Frakcja ustawiona jako otwarta | +| Przyjmij zaproszenie | Sprawdź zakładkę Zaproszenia w menu /f | Aktywne zaproszenie | +| Poproś o dołączenie | Użyj /f request, czekaj na zatwierdzenie | Zatwierdzenie przez Oficera lub Lidera | + +--- + +## Szczegóły zaproszeń + +- Zaproszenia są wysyłane przez Oficerów lub Liderów +- Zaproszenia wygasają po 5 minutach -- akceptuj szybko +- Sprawdzaj oczekujące zaproszenia w zakładce Zaproszenia w menu frakcji +- Akceptuj przez GUI lub /f accept + +## Prośby o dołączenie + +- Użyj /f request, aby poprosić o członkostwo w zamkniętej frakcji +- Prośby wygasają po 24 godzinach, jeśli nie zostaną rozpatrzone +- Oficerowie i Liderzy mogą zatwierdzać lub odrzucać prośby z panelu frakcji + +>[!TIP] Nie wiesz, do której frakcji dołączyć? Użyj zakładki Przeglądaj w /f, aby zobaczyć opisy frakcji, liczbę członków i czy są otwarte czy tylko na zaproszenie. + +>[!NOTE] Każda frakcja może mieć domyślnie do 50 członków. Jeśli frakcja jest pełna, musisz poczekać na zwolnienie miejsca. diff --git a/src/main/resources/Server/Languages/pl-PL/help/your_faction/managing.md b/src/main/resources/Server/Languages/pl-PL/help/your_faction/managing.md new file mode 100644 index 00000000..5d3d3032 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Zarządzanie członkami + +Oficerowie i Liderzy wspólnie odpowiadają za zarządzanie składem frakcji. Oto kluczowe komendy i kto może ich używać. + +--- + +## Komendy + +| Komenda | Opis | Wymagana rola | +|---------|-------------|---------------| +| `/f invite ` | Wysyła zaproszenie do dołączenia (wygasa po 5 min) | Oficer+ | +| `/f kick ` | Usuwa członka z frakcji | Oficer+ (patrz uwaga) | +| `/f promote ` | Awansuje Członka na Oficera | Tylko Lider | +| `/f demote ` | Degraduje Oficera na Członka | Tylko Lider | +| `/f transfer ` | Przekazuje własność frakcji | Tylko Lider | + +>[!NOTE] Oficerowie mogą wyrzucać tylko Członków. Aby usunąć innego Oficera, Lider musi go najpierw zdegradować lub wyrzucić bezpośrednio. + +--- + +## Zaproszenia + +- Zaproszenia wygasają po 5 minutach, jeśli nie zostaną zaakceptowane +- Zaproszony gracz widzi je w zakładce Zaproszenia po otwarciu /f +- Nie ma limitu na liczbę wysłanych zaproszeń jednocześnie +- Twoja frakcja może mieć łącznie do 50 członków + +## Awanse i degradacje + +- Tylko Lider może awansować lub degradować +- /f promote podnosi Członka do rangi Oficera +- /f demote obniża Oficera z powrotem do Członka + +## Przekazywanie przywództwa + +>[!WARNING] Przekazanie przywództwa jest nieodwracalne. Zostaniesz zdegradowany do Oficera, a wybrany gracz stanie się nowym Liderem. Upewnij się, że mu w pełni ufasz. + +`/f transfer ` + +Wybrany gracz musi być aktualnym członkiem twojej frakcji. diff --git a/src/main/resources/Server/Languages/pl-PL/help/your_faction/roles.md b/src/main/resources/Server/Languages/pl-PL/help/your_faction/roles.md new file mode 100644 index 00000000..da3f1e07 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Role i rangi + +Każda frakcja ma trzy role w ścisłej hierarchii. Wyższe role dziedziczą wszystkie uprawnienia ról niższych. + +--- + +## Podział uprawnień + +| Akcja | Lider | Oficer | Członek | +|--------|--------|---------|--------| +| Budowanie na terytorium | Tak | Tak | Tak | +| Korzystanie z bazy frakcji | Tak | Tak | Tak | +| Czat frakcyjny i sojuszniczy | Tak | Tak | Tak | +| Zapraszanie graczy | Tak | Tak | Nie | +| Wyrzucanie członków | Tak | Tak (tylko Członków) | Nie | +| Zajmowanie / oddawanie terenu | Tak | Tak | Nie | +| Przejmowanie wrogiego terytorium | Tak | Tak | Nie | +| Ustawianie bazy frakcji | Tak | Tak | Nie | +| Usuwanie bazy frakcji | Tak | Tak | Nie | +| Zarządzanie relacjami (sojusz/wrogość) | Tak | Tak | Nie | +| Przeglądanie logów frakcji | Tak | Tak | Nie | +| Awansowanie do Oficera | Tak | Nie | Nie | +| Degradowanie Oficera | Tak | Nie | Nie | +| Zmiana nazwy frakcji | Tak | Nie | Nie | +| Ustawianie opisu / tagu / koloru | Tak | Nie | Nie | +| Otwieranie / zamykanie frakcji | Tak | Nie | Nie | +| Dostęp do ustawień frakcji | Tak | Nie | Nie | +| Przekazywanie przywództwa | Tak | Nie | Nie | +| Rozwiązywanie frakcji | Tak | Nie | Nie | + +>[!NOTE] Oficerowie mogą wyrzucać Członków, ale nie mogą wyrzucać innych Oficerów. Tylko Lider może usuwać Oficerów. + +--- + +## Szczegóły ról + +- Lider -- Jeden na frakcję. Ma pełną kontrolę nad wszystkimi ustawieniami, członkami i terytorium. Może przekazać własność innemu członkowi. +- Oficer -- Zaufani członkowie pomagający zarządzać frakcją. Mogą zapraszać, wyrzucać członków, zajmować teren i prowadzić dyplomację. +- Członek -- Domyślna rola po dołączeniu. Może budować na terytorium, korzystać z bazy frakcji i uczestniczyć w czacie frakcyjnym. + +>[!TIP] Awansuj swoich najbardziej aktywnych i zaufanych członków na Oficerów, aby pomagali zarządzać terytorium i rekrutować nowych graczy. diff --git a/src/main/resources/Server/Languages/pl-PL/hyperfactions.lang b/src/main/resources/Server/Languages/pl-PL/hyperfactions.lang new file mode 100644 index 00000000..092800e7 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Polskie tłumaczenie +# Format: key = value (or key = "quoted value") +# Note: Keys are auto-prefixed with "hyperfactions." by Hytale's I18nModule +# Placeholders: {0}, {1}, etc. + +# ========== Ogólne ========== +common.no_permission = Nie masz uprawnień, aby to zrobić. +common.not_in_faction = Nie należysz do żadnej frakcji. +common.already_in_faction = Już należysz do frakcji. +common.player_not_found = Nie znaleziono gracza. +common.faction_not_found = Nie znaleziono frakcji. +common.player_not_online = Ten gracz nie jest online. +common.must_be_leader = Tylko przywódca frakcji może to zrobić. +common.must_be_officer = Musisz być Oficerem lub Przywódcą, aby to zrobić. +common.combat_tagged = Nie możesz tego zrobić podczas walki. +common.cancel = Anuluj +common.confirm = Potwierdź +common.save = Zapisz +common.close = Zamknij +common.clear = Wyczyść +common.back = Wstecz +common.leave = Opuść +common.transfer = Przekaż +common.disband = Rozwiąż +common.world_fallback = świat +common.yes = Tak +common.no = Nie +common.loading = Ładowanie... +common.online = Online +common.offline = Offline +common.enabled = Włączone +common.disabled = Wyłączone +common.none = Brak +common.page = Strona {0} z {1} +common.unknown = Nieznane +common.error_generic = Coś poszło nie tak. Spróbuj ponownie. +common.gui_fallback = Nie udało się otworzyć GUI. Użyj /f help, aby zobaczyć komendy. +common.admin_prefix = [Admin] +common.location_error = Nie udało się określić Twojej lokalizacji. +common.world_error = Nie udało się określić Twojego świata. +common.invalid_id = Nieprawidłowy identyfikator frakcji. +common.na = N/D + +# ========== Komendy - Tworzenie ========== +cmd.create.no_permission = Nie masz uprawnień do tworzenia frakcji. +cmd.create.usage = Użycie: /f create +cmd.create.success = Frakcja '{0}' została utworzona! +cmd.create.already_in_named = Już należysz do {0}. +cmd.create.use_leave_first = Użyj /f leave, jeśli chcesz utworzyć nową frakcję. +cmd.create.name_taken = Ta nazwa frakcji jest już zajęta. +cmd.create.name_too_short = Nazwa frakcji jest za krótka. +cmd.create.name_too_long = Nazwa frakcji jest za długa. +cmd.create.failed = Nie udało się utworzyć frakcji. + +# ========== Komendy - Rozwiązywanie ========== +cmd.disband.no_permission = Nie masz uprawnień do rozwiązywania frakcji. +cmd.disband.not_leader = Tylko przywódca frakcji może ją rozwiązać. +cmd.disband.confirm_prompt = Czy na pewno chcesz rozwiązać swoją frakcję? +cmd.disband.confirm_instruction = Wpisz /f disband --text ponownie w ciągu {0} sekund, aby potwierdzić. +cmd.disband.success = Twoja frakcja została rozwiązana. +cmd.disband.failed = Nie udało się rozwiązać frakcji. +cmd.disband.cancelled = Poprzednie potwierdzenie anulowane. Wpisz ponownie, aby potwierdzić rozwiązanie. + +# ========== Komendy - Zmiana nazwy ========== +cmd.rename.no_permission = Nie masz uprawnień. +cmd.rename.not_leader = Tylko przywódca może zmienić nazwę frakcji. +cmd.rename.usage = Użycie: /f rename +cmd.rename.too_short = Nazwa jest za krótka (min. {0} znaków). +cmd.rename.too_long = Nazwa jest za długa (maks. {0} znaków). +cmd.rename.name_taken = Ta nazwa jest już zajęta. +cmd.rename.success = Nazwa frakcji zmieniona na {0}! +cmd.rename.broadcast = {0} zmienił(a) nazwę frakcji na {1} + +# ========== Komendy - Opis ========== +cmd.desc.no_permission = Nie masz uprawnień. +cmd.desc.not_officer = Musisz być oficerem, aby ustawić opis. +cmd.desc.set = Opis frakcji ustawiony! +cmd.desc.cleared = Opis frakcji wyczyszczony. + +# ========== Komendy - Otwarta / Zamknięta ========== +cmd.open.no_permission = Nie masz uprawnień. +cmd.open.not_leader = Tylko przywódca może zmienić to ustawienie. +cmd.open.already_open = Twoja frakcja jest już otwarta. +cmd.open.success = Twoja frakcja jest teraz otwarta! Każdy może dołączyć komendą /f join. +cmd.open.broadcast = {0} otworzył(a) frakcję na publiczne dołączanie. +cmd.close.no_permission = Nie masz uprawnień. +cmd.close.not_leader = Tylko przywódca może zmienić to ustawienie. +cmd.close.already_closed = Twoja frakcja jest już zamknięta. +cmd.close.success = Twoja frakcja jest teraz tylko na zaproszenia. +cmd.close.broadcast = {0} zamknął(a) frakcję — tylko na zaproszenia. + +# ========== Komendy - Kolor ========== +cmd.color.no_permission = Nie masz uprawnień. +cmd.color.not_officer = Musisz być oficerem, aby zmienić kolor. +cmd.color.colors_disabled = Kolory frakcji są wyłączone. +cmd.color.usage = Użycie: /f color +cmd.color.usage_hint = Prawidłowe kody: 0-9, a-f lub #RRGGBB hex +cmd.color.invalid = Nieprawidłowy kolor. Użyj 0-9, a-f lub #RRGGBB. +cmd.color.success = Kolor frakcji zaktualizowany! + +# ========== Komendy - Zajmowanie terenu ========== +cmd.claim.no_permission = Nie masz uprawnień do zajmowania terenu. +cmd.claim.already_yours = Twoja frakcja już posiada ten chunk. +cmd.claim.cannot_claim_ally = Nie możesz zająć terenu sojusznika. +cmd.claim.already_claimed_hint = Ten chunk jest zajęty. Użyj /f overclaim, jeśli frakcja jest podatna na najazd. +cmd.claim.success = Zajęto chunk na {0}, {1}! +cmd.claim.not_officer = Musisz być oficerem, aby zajmować teren. +cmd.claim.already_claimed = Ten chunk jest już zajęty. +cmd.claim.max_claims = Twoja frakcja osiągnęła maksymalną liczbę terenów. Zdobądź więcej mocy! +cmd.claim.not_adjacent = Musisz zajmować teren przylegający do istniejącego terytorium. +cmd.claim.world_not_allowed = Zajmowanie terenu jest niedozwolone w tym świecie. +cmd.claim.orbisguard = Ten obszar jest chroniony przez OrbisGuard. +cmd.claim.zone_protected = Ten chunk znajduje się w strefie bezpiecznej lub wojennej. +cmd.claim.insufficient_power = Twoja frakcja nie ma wystarczająco mocy, aby zająć więcej terenu. +cmd.claim.failed = Nie udało się zająć chunka. + +# ========== Komendy - Zaproszenia ========== +cmd.invite.no_permission = Nie masz uprawnień do zapraszania graczy. +cmd.invite.not_officer = Musisz być oficerem, aby zapraszać graczy. +cmd.invite.usage = Użycie: /f invite +cmd.invite.player_not_found = Gracz '{0}' nie został znaleziony lub jest offline. +cmd.invite.target_in_faction = Ten gracz już należy do frakcji. +cmd.invite.sent = Zaproszono {0} do Twojej frakcji. +cmd.invite.received = Otrzymałeś zaproszenie do frakcji {0}! +cmd.invite.accept_hint = Wpisz /f accept {0}, aby dołączyć. + +# ========== Komendy - Akceptacja / Dołączanie ========== +cmd.join.no_permission = Nie masz uprawnień do dołączania do frakcji. +cmd.join.already_in_named = Już należysz do {0}. +cmd.join.use_leave_hint = Użyj /f leave, jeśli chcesz dołączyć do innej frakcji. +cmd.join.no_invites = Nie masz żadnych oczekujących zaproszeń. +cmd.join.faction_not_found = Frakcja '{0}' nie została znaleziona. +cmd.join.not_invited = Nie masz zaproszenia od tej frakcji. +cmd.join.faction_gone = Ta frakcja już nie istnieje. +cmd.join.success = Dołączyłeś do {0}! +cmd.join.broadcast = {0} dołączył(a) do frakcji! +cmd.join.faction_full = Ta frakcja jest pełna. +cmd.join.failed = Nie udało się dołączyć do frakcji. + +# ========== Komendy - Wyrzucanie ========== +cmd.kick.no_permission = Nie masz uprawnień do wyrzucania członków. +cmd.kick.usage = Użycie: /f kick +cmd.kick.not_in_your_faction = Gracz '{0}' nie jest w Twojej frakcji. +cmd.kick.success = Wyrzucono {0} z frakcji. +cmd.kick.broadcast = {0} został(a) wyrzucony(a) z frakcji. +cmd.kick.kicked = Zostałeś wyrzucony z frakcji. +cmd.kick.cannot_kick_higher = Nie masz uprawnień, aby wyrzucić tego gracza. +cmd.kick.cannot_kick_leader = Nie możesz wyrzucić przywódcy frakcji. +cmd.kick.failed = Nie udało się wyrzucić gracza. + +# ========== Komendy - Opuszczanie ========== +cmd.leave.no_permission = Nie masz uprawnień do opuszczenia frakcji. +cmd.leave.confirm_prompt = Czy na pewno chcesz opuścić swoją frakcję? +cmd.leave.confirm_instruction = Wpisz /f leave --text ponownie w ciągu {0} sekund, aby potwierdzić. +cmd.leave.success = Opuściłeś swoją frakcję. +cmd.leave.broadcast = {0} opuścił(a) frakcję. +cmd.leave.failed = Nie udało się opuścić frakcji. +cmd.leave.cancelled = Poprzednie potwierdzenie anulowane. Wpisz ponownie, aby potwierdzić opuszczenie. + +# ========== Komendy - Awans / Degradacja / Przekazanie ========== +cmd.rank.promote_no_permission = Nie masz uprawnień do awansowania członków. +cmd.rank.promote_usage = Użycie: /f promote +cmd.rank.promoted = Awansowano {0} na {1}! +cmd.rank.promote_broadcast = {0} został(a) awansowany(a) na {1}! +cmd.rank.already_highest = Nie można awansować wyżej. Użyj /f transfer, aby zmienić przywódcę. +cmd.rank.promote_failed = Nie udało się awansować gracza. +cmd.rank.demote_no_permission = Nie masz uprawnień do degradowania członków. +cmd.rank.demote_usage = Użycie: /f demote +cmd.rank.demoted = Zdegradowano {0} do {1}. +cmd.rank.demote_broadcast = {0} został(a) zdegradowany(a) do {1}. +cmd.rank.already_lowest = Ten gracz jest już Członkiem. +cmd.rank.demote_failed = Nie udało się zdegradować gracza. +cmd.rank.transfer_no_permission = Nie masz uprawnień do przekazania przywództwa. +cmd.rank.transfer_usage = Użycie: /f transfer +cmd.rank.player_not_in_faction = Nie znaleziono gracza w Twojej frakcji. +cmd.rank.transfer_confirm = Czy na pewno chcesz przekazać przywództwo graczowi {0}? +cmd.rank.transfer_confirm_instruction = Wpisz /f transfer {0} --text ponownie w ciągu {1} sekund, aby potwierdzić. +cmd.rank.transferred = Przywództwo przekazane graczowi {0}! +cmd.rank.transfer_broadcast = {0} jest teraz przywódcą frakcji! +cmd.rank.transfer_failed = Nie udało się przekazać przywództwa. +cmd.rank.transfer_cancelled = Poprzednie potwierdzenie anulowane. Wpisz ponownie, aby potwierdzić przekazanie. + +# ========== Komendy - Zrzeczenie się terenu ========== +cmd.unclaim.no_permission = Nie masz uprawnień do zrzekania się terenu. +cmd.unclaim.success = Zrzeczono się chunka na {0}, {1}. +cmd.unclaim.not_officer = Musisz być oficerem, aby zrzec się terenu. +cmd.unclaim.chunk_not_claimed = Ten chunk nie jest zajęty. +cmd.unclaim.not_your_claim = Twoja frakcja nie posiada tego chunka. +cmd.unclaim.cannot_unclaim_home = Nie można zrzec się chunka z domem frakcji. +cmd.unclaim.would_disconnect = Nie można zrzec się — rozłączyłoby to Twoje terytorium. +cmd.unclaim.failed = Nie udało się zrzec chunka. + +# ========== Komendy - Przejęcie terenu ========== +cmd.overclaim.no_permission = Nie masz uprawnień do przejmowania terenu. +cmd.overclaim.success = Przejęto terytorium wroga! +cmd.overclaim.not_officer = Musisz być oficerem, aby przejmować teren. +cmd.overclaim.not_claimed = Ten chunk nie jest zajęty. Użyj /f claim. +cmd.overclaim.own_chunk = Twoja frakcja już posiada ten chunk. +cmd.overclaim.ally = Nie możesz przejąć terenu sojusznika. +cmd.overclaim.target_has_power = Ta frakcja wciąż ma wystarczająco mocy. +cmd.overclaim.failed = Nie udało się przejąć terenu. + +# ========== Komendy - Utknięcie ========== +cmd.stuck.no_permission = Nie masz uprawnień do użycia /f stuck. +cmd.stuck.not_stuck = Nie utknąłeś — to jest dzicz. +cmd.stuck.combat_tagged = Nie możesz użyć /f stuck podczas walki! +cmd.stuck.no_safe = Nie udało się znaleźć bezpiecznej lokalizacji. +cmd.stuck.teleporting = Teleportacja do bezpiecznego miejsca za {0} sekund. Nie ruszaj się! + +# ========== Komendy - Dom ========== +cmd.home.no_permission = Nie masz uprawnień do teleportacji do domu frakcji. +cmd.home.no_home = Twoja frakcja nie ma ustawionego domu. +cmd.home.combat_tagged = Nie możesz się teleportować podczas walki! +cmd.home.teleported = Przeteleportowano do domu frakcji! + +# ========== Komendy - Ustawianie domu ========== +cmd.sethome.no_permission = Nie masz uprawnień do ustawienia domu frakcji. +cmd.sethome.world_not_allowed = Nie można ustawić domu w tym świecie. +cmd.sethome.not_in_territory = Dom można ustawić tylko na terytorium frakcji. +cmd.sethome.set = Dom frakcji ustawiony! +cmd.sethome.broadcast = {0} ustawił(a) dom frakcji. +cmd.sethome.not_officer = Musisz być oficerem, aby ustawić dom. +cmd.sethome.failed = Nie udało się ustawić domu. + +# ========== Komendy - Usuwanie domu ========== +cmd.delhome.no_permission = Nie masz uprawnień do usunięcia domu frakcji. +cmd.delhome.no_home = Twoja frakcja nie ma ustawionego domu. +cmd.delhome.deleted = Dom frakcji usunięty! +cmd.delhome.broadcast = {0} usunął/usunęła dom frakcji. +cmd.delhome.not_officer = Musisz być oficerem, aby usunąć dom. +cmd.delhome.failed = Nie udało się usunąć domu. + +# ========== Komendy - Relacje (Sojusznik/Wróg/Neutralny/Relacje) ========== +cmd.relation.ally_no_permission = Nie masz uprawnień do zarządzania sojuszami. +cmd.relation.ally_usage = Użycie: /f ally +cmd.relation.ally_sent = Prośba o sojusz wysłana do {0}! +cmd.relation.ally_formed = Jesteście teraz sojusznikami z {0}! +cmd.relation.already_ally = Jesteście już sprzymierzeni z tą frakcją. +cmd.relation.ally_failed = Nie udało się wysłać prośby o sojusz. +cmd.relation.enemy_no_permission = Nie masz uprawnień do ogłaszania wrogów. +cmd.relation.enemy_usage = Użycie: /f enemy +cmd.relation.enemy_declared = {0} jest teraz Twoim wrogiem! +cmd.relation.already_enemy = Jesteście już wrogami z tą frakcją. +cmd.relation.max_enemies = Osiągnąłeś maksymalną liczbę wrogów. +cmd.relation.enemy_failed = Nie udało się ustawić wroga. +cmd.relation.neutral_no_permission = Nie masz uprawnień do ustawiania neutralnych relacji. +cmd.relation.neutral_usage = Użycie: /f neutral +cmd.relation.neutral_set = Twoja frakcja jest teraz neutralna wobec {0}. +cmd.relation.already_neutral = Jesteście już neutralni wobec tej frakcji. +cmd.relation.neutral_failed = Nie udało się ustawić neutralności. +cmd.relation.cannot_self = Nie możesz zawrzeć sojuszu z samym sobą. +cmd.relation.max_allies = Osiągnąłeś maksymalną liczbę sojuszników. +cmd.relation.view_no_permission = Nie masz uprawnień do przeglądania relacji. +cmd.relation.header = === Relacje frakcji === +cmd.relation.allies_count = Sojusznicy ({0}): +cmd.relation.enemies_count = Wrogowie ({0}): +cmd.relation.list_entry = - {0} + +# ========== Komendy - Czat ========== +cmd.chat.usage = Użycie: /f c [f|a|off] +cmd.chat.no_permission = Nie masz uprawnień do tego trybu czatu. +cmd.chat.mode_set = Tryb czatu ustawiony na {0} + +# ========== Komendy - Zaproszenia ========== +cmd.invites.not_officer = Musisz być oficerem, aby zarządzać zaproszeniami. +cmd.invites.header = === Zaproszenia frakcji === +cmd.invites.no_pending = Brak oczekujących zaproszeń lub próśb. +cmd.invites.outgoing = Wysłane zaproszenia: +cmd.invites.outgoing_entry = {0} (zaproszony przez {1}) +cmd.invites.requests = Prośby o dołączenie: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Twoje zaproszenia === +cmd.invites.no_invites = Nie masz żadnych oczekujących zaproszeń. +cmd.invites.invite_entry = {0} - Użyj /f accept {1} + +# ========== Komendy - Prośba o dołączenie ========== +cmd.request.no_permission = Nie masz uprawnień do składania próśb o członkostwo. +cmd.request.already_in_named = Już należysz do {0}. +cmd.request.use_leave_hint = Użyj /f leave, jeśli chcesz dołączyć do innej frakcji. +cmd.request.usage = Użycie: /f request [wiadomość] +cmd.request.faction_open = Ta frakcja jest otwarta! Użyj /f accept {0}, aby dołączyć bezpośrednio. +cmd.request.already_requested = Masz już oczekującą prośbę do tej frakcji. +cmd.request.has_invite = Masz zaproszenie od tej frakcji! Użyj /f accept {0}, aby dołączyć. +cmd.request.sent = Wysłano prośbę o dołączenie do {0}! +cmd.request.your_message = Twoja wiadomość: "{0}" +cmd.request.officer_review = Oficer rozpatrzy Twoją prośbę. +cmd.request.officer_notify = {0} poprosił(a) o dołączenie do Twojej frakcji! +cmd.request.officer_review_hint = Użyj /f gui > Zaproszenia, aby sprawdzić. + +# ========== Komendy - Informacje ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = Nie masz uprawnień do przeglądania informacji o frakcji. +cmd.info.faction_not_found = Frakcja '{0}' nie została znaleziona. +cmd.info.not_in_faction_hint = Nie należysz do frakcji. Użyj /f info +cmd.info.leader = Przywódca: {0} +cmd.info.members = Członkowie: {0}/{1} +cmd.info.power = Moc: {0} +cmd.info.claims = Tereny: {0} +cmd.info.raidable = PODATNA NA NAJAZD! +cmd.info.allies = Sojusznicy: {0} +cmd.info.enemies = Wrogowie: {0} +cmd.info.they_consider = Oni uważają Cię za: {0} +cmd.info.you_consider = Ty uważasz ich za: {0} +cmd.info.members_no_permission = Nie masz uprawnień do przeglądania członków frakcji. +cmd.info.members_header = === Członkowie {0} ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = Nie masz uprawnień do przeglądania listy frakcji. +cmd.info.list_empty = Nie ma żadnych frakcji. +cmd.info.list_header = === Frakcje ({0}) === +cmd.info.list_entry = {0} - {1} członków, {2} mocy +cmd.info.list_entry_raidable = {0} - {1} członków, {2} mocy [PODATNA NA NAJAZD] +cmd.info.help_no_permission = Nie masz uprawnień do przeglądania pomocy. +cmd.info.who_no_permission = Nie masz uprawnień do przeglądania informacji o graczu. +cmd.info.who_faction = Frakcja: {0} +cmd.info.who_role = Ranga: {0} +cmd.info.who_joined = Dołączył: {0} +cmd.info.who_faction_none = Frakcja: Brak +cmd.info.who_power = Moc: {0} +cmd.info.who_status = Status: {0} +cmd.info.who_last_seen = Ostatnio widziany: {0} +cmd.info.map_no_permission = Nie masz uprawnień do przeglądania mapy. +cmd.info.map_header = === Mapa terytorium === +cmd.info.map_legend = Legenda: +Twoje /Własne /Sojusznik /Wróg -Dzicz +cmd.info.map_gui_hint = Użyj /f gui, aby otworzyć interaktywną mapę + +# ========== Komendy - Moc ========== +cmd.power.personal = Moc osobista: {0}/{1} +cmd.power.faction = Moc frakcji: {0}/{1} +cmd.power.death_loss = Strata przy śmierci: {0} +cmd.power.regen = Szybkość regeneracji: {0}/godz. +cmd.power.no_permission = Nie masz uprawnień do przeglądania informacji o mocy. +cmd.power.header = Moc gracza {0}: +cmd.power.current = Aktualna: {0} + +# ========== Komendy - Ekonomia ========== +cmd.economy.balance = Saldo: {0} +cmd.economy.deposited = Wpłacono {0} do skarbca frakcji. +cmd.economy.withdrawn = Wypłacono {0} ze skarbca frakcji. +cmd.economy.transferred = Przelano {0} do {1}. +cmd.economy.insufficient = Niewystarczające środki w skarbcu frakcji. +cmd.economy.invalid_amount = Nieprawidłowa kwota: {0} +cmd.economy.economy_disabled = Ekonomia jest wyłączona. +cmd.economy.balance_no_permission = Nie masz uprawnień do przeglądania sald. +cmd.economy.treasury_unavailable = Skarbiec jest niedostępny. +cmd.economy.balance_display = Skarbiec {0}: {1} +cmd.economy.deposit_no_permission = Nie masz uprawnień do wpłacania. +cmd.economy.deposit_faction_denied = Nie masz uprawnień frakcyjnych do wpłacania. +cmd.economy.deposit_usage = Użycie: /f deposit +cmd.economy.amount_positive = Kwota musi być dodatnia. +cmd.economy.wallet_insufficient = Nie masz wystarczająco pieniędzy. Portfel: {0} +cmd.economy.wallet_withdraw_failed = Nie udało się pobrać środków z portfela. +cmd.economy.deposit_failed = Nie udało się wpłacić do skarbca frakcji. Pieniądze zwrócone. +cmd.economy.withdraw_no_permission = Nie masz uprawnień do wypłacania. +cmd.economy.withdraw_faction_denied = Nie masz uprawnień frakcyjnych do wypłacania. +cmd.economy.withdraw_usage = Użycie: /f withdraw +cmd.economy.withdraw_limit_denied = Wypłata odrzucona: {0} +cmd.economy.wallet_deposit_failed = Uwaga: Nie udało się wpłacić do Twojego portfela. Skontaktuj się z administratorem. +cmd.economy.withdraw_limit_exceeded = Wypłata odrzucona: przekroczono limit. +cmd.economy.withdraw_failed = Wypłata nieudana: {0} +cmd.economy.transfer_no_permission = Nie masz uprawnień do przelewów. +cmd.economy.transfer_faction_denied = Nie masz uprawnień frakcyjnych do przelewów. +cmd.economy.transfer_usage = Użycie: /f money transfer +cmd.economy.transfer_self = Nie można przelać do własnej frakcji. +cmd.economy.transfer_limit_denied = Przelew odrzucony: {0} +cmd.economy.transfer_limit_exceeded = Przelew odrzucony: przekroczono limit. +cmd.economy.transfer_failed = Przelew nieudany: {0} +cmd.economy.log_no_permission = Nie masz uprawnień do przeglądania dziennika transakcji. +cmd.economy.log_header = Dziennik transakcji (strona {0}/{1}) +cmd.economy.log_empty = Nie znaleziono transakcji. +cmd.economy.money_help_header = Komendy skarbca: +cmd.economy.money_help_balance = /f money balance [frakcja] - Sprawdź saldo +cmd.economy.money_help_deposit = /f money deposit - Wpłać do skarbca +cmd.economy.money_help_withdraw = /f money withdraw - Wypłać ze skarbca +cmd.economy.money_help_transfer = /f money transfer - Przelew między frakcjami +cmd.economy.money_help_log = /f money log [strona] [typ] - Historia transakcji + +# ========== Ochrona - Frazy dotyczące akcji ========== +protection.action.generic = Nie możesz tego zrobić +protection.action.build = Nie możesz budować ani niszczyć bloków +protection.action.interact = Nie możesz z tym interagować +protection.action.door = Nie możesz używać drzwi +protection.action.container = Nie możesz otwierać pojemników +protection.action.bench = Nie możesz używać stacji rzemieślniczych +protection.action.processing = Nie możesz używać stacji przetwórczych +protection.action.seat = Nie możesz używać siedzeń +protection.action.light = Nie możesz przełączać świateł +protection.action.teleporter = Nie możesz używać teleporterów +protection.action.crate = Nie możesz używać skrzyń +protection.action.tame = Nie możesz oswajać stworzeń +protection.action.npc = Nie możesz interagować z NPC +protection.action.mount = Nie możesz dosiadać stworzeń +protection.action.pve = Nie możesz zadawać obrażeń stworzeniom +protection.action.item_drop = Nie możesz upuszczać przedmiotów +protection.action.item_pickup = Nie możesz podnosić przedmiotów + +# ========== Ochrona - Powody odmowy ========== +protection.denied.safezone = {0} w SafeZone. +protection.denied.warzone = {0} w WarZone. +protection.denied.enemy_claim = {0} na terytorium wroga. +protection.denied.claimed = {0} na zajętym terytorium. +protection.denied.here = {0} tutaj. +protection.denied.zone = {0} w tej strefie. +protection.denied.faction_perm = {0} tutaj. (Uprawnienie frakcji: {1}) +protection.denied.ally_territory = {0} tutaj. (Terytorium sojusznika) +protection.denied.error = Błąd ochrony — akcja zablokowana dla bezpieczeństwa. + +# ========== Ochrona - PvP ========== +protection.pvp.safezone = PvP jest wyłączone w SafeZone. +protection.pvp.same_faction = Nie możesz atakować członków frakcji. +protection.pvp.ally = Nie możesz atakować sojuszników. +protection.pvp.spawn_protected = Ten gracz ma ochronę po odrodzeniu. +protection.pvp.territory_disabled = PvP jest wyłączone na tym terytorium. +protection.pvp.generic = Nie możesz zaatakować tego gracza. + +# ========== Ochrona - Obrażenia od istot ========== +protection.mob_damage_disabled = Obrażenia od mobów są wyłączone w tej strefie. +protection.pve_damage_disabled = Obrażenia PvE są wyłączone w tej strefie. +protection.pve_territory_denied = Nie możesz zadawać obrażeń mobom na tym terytorium. + +# ========== Ochrona - Oznaczenie bojowe ========== +protection.combat_tag_command = Nie możesz użyć tej komendy podczas oznaczenia bojowego. + +# ========== Ogłoszenia serwera ========== +# Transmitowane do wszystkich graczy online przy ważnych wydarzeniach frakcji. +# {0}, {1} = wartości dynamiczne (nazwy frakcji, nazwy graczy) +server_announce.faction_created = {0} założył(a) frakcję {1}! +server_announce.faction_disbanded = Frakcja {0} została rozwiązana! +server_announce.leadership_transfer = {0} jest teraz przywódcą {1}! +server_announce.overclaim = {0} przejął(ęła) terytorium od {1}! +server_announce.war_declared = {0} wypowiedział(a) wojnę {1}! +server_announce.alliance_formed = {0} i {1} są teraz sojusznikami! +server_announce.alliance_broken = {0} i {1} nie są już sojusznikami! + +# ========== System teleportacji ========== +teleport.cooldown_wait = Musisz poczekać {0} przed ponowną teleportacją. +teleport.warmup_start = Teleportacja do domu frakcji za {0} sekund... +teleport.combat_cancelled = Teleportacja anulowana — jesteś w walce! +teleport.success_default = Przeteleportowano do domu frakcji! +teleport.no_home = Twoja frakcja nie ma ustawionego domu. +teleport.world_not_found = Nie znaleziono świata. +teleport.failed = Teleportacja nieudana. +teleport.countdown = Teleportacja za {0} sekund... +teleport.countdown_one = Teleportacja za 1 sekundę... +teleport.moved_cancelled = Teleportacja anulowana — ruszyłeś się! +teleport.damage_cancelled = Teleportacja anulowana — otrzymałeś obrażenia! +teleport.mount_teleport_blocked = Nie możesz teleportować się do tej strefy na wierzchowcu. +teleport.mount_entry_blocked = Nie możesz wejść do tej strefy na wierzchowcu. + +# ========== Wyświetlanie czatu ========== +chat.display.public = Publiczny +chat.display.faction = Frakcja +chat.display.ally = Sojusznik diff --git a/src/main/resources/Server/Languages/pl-PL/hyperfactions_admin.lang b/src/main/resources/Server/Languages/pl-PL/hyperfactions_admin.lang new file mode 100644 index 00000000..cc9395c8 --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Polskie tłumaczenie +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_admin." by Hytale's I18nModule + +# ========== Pasek nawigacji admina ========== +nav.dashboard = Pulpit +nav.actions = Akcje +nav.factions = Frakcje +nav.players = Gracze +nav.economy = Ekonomia +nav.zones = Strefy +nav.config = Konfiguracja +nav.backups = Kopie zapasowe +nav.log = Dziennik +nav.updates = Aktualizacje +nav.help = Pomoc +nav.version = Wersja + +# ========== Wspólne etykiety admina ========== +common.faction_not_found = Nie znaleziono frakcji +common.no_faction = Brak frakcji +common.not_set = Nie ustawiono +common.on = Wł. +common.off = Wył. +common.enable = Włącz +common.disable = Wyłącz +common.none_paren = (Brak) +common.invalid_faction = Nieprawidłowa frakcja. +common.leader_prefix = Przywódca: {0} +common.members_suffix = {0} członków +common.claims_suffix = {0} terenów +common.factions_suffix = {0} frakcji +common.players_suffix = {0} graczy +common.chunks_suffix = {0} chunków +common.entries_suffix = {0} wpisów +common.found_suffix = {0} znaleziono +common.power_format = {0}/{1} mocy +common.raidable = Podatna na najazd +common.protected = Chroniona +common.no_description = Brak opisu. +common.officers_more = +{0} więcej +common.custom_max = (niestandardowe maks.) +common.default_max = (domyślne maks.) +common.now = Teraz +common.ago_suffix = {0} temu +common.just_now = przed chwilą +common.no_membership_history = Brak historii członkostwa + +# ========== Pulpit admina ========== +dashboard.factions_prefix = Frakcje: {0} +dashboard.members_prefix = Łączna liczba członków: {0} +dashboard.claims_prefix = Łączna liczba terenów: {0} + +# ========== Akcje admina ========== +actions.confirm_reset = Potwierdzić reset? +actions.confirm_trigger = Potwierdzić uruchomienie? +actions.kd_reset = Zresetowano Z/Ś dla {0} graczy. +actions.kd_reset_failed = Nie udało się zresetować Z/Ś: {0} +actions.upkeep_unavailable = Procesor utrzymania jest niedostępny. +actions.upkeep_triggered = Pobór utrzymania uruchomiony. +actions.upkeep_failed = Utrzymanie nieudane: {0} + +# ========== Rozwiązywanie przez admina ========== +disband.faction_gone = Frakcja już nie istnieje. +disband.success = Frakcja '{0}' została rozwiązana. +disband.failed = Nie udało się rozwiązać: {0} +disband.no_leader = Frakcja nie ma przywódcy, nie można rozwiązać. + +# ========== Usuwanie wszystkich terenów przez admina ========== +unclaim.removed = [Admin] Usunięto {0} terenów z {1}. +unclaim.no_claims = {0} nie miała terenów do usunięcia. + +# ========== Lista frakcji admina ========== +factions.home_not_set = Nie ustawiony +factions.teleported = Przeteleportowano do domu {0}. +factions.no_home = Frakcja nie ma ustawionego domu. +factions.world_not_found = Nie znaleziono docelowego świata. + +# ========== Informacje o frakcji admina ========== +info.faction_gone = Ta frakcja już nie istnieje. + +# ========== Członkowie frakcji admina ========== +members.sort_role = Ranga +members.sort_online = Online +members.sort_name = Nazwa +members.sort_power = Moc +members.promoted = [Admin] Awansowano {0} na {1}. +members.demoted = [Admin] Zdegradowano {0} do {1}. +members.kicked = [Admin] Wyrzucono {0} z frakcji. + +# ========== Relacje frakcji admina ========== +relations.allies_header = SOJUSZNICY ({0}) +relations.enemies_header = WROGOWIE ({0}) +relations.no_allies = Brak sojuszników. +relations.no_enemies = Brak wrogów. +relations.neutral_count = {0} neutralnych frakcji +relations.since_today = Od: dzisiaj +relations.since_one_day = Od: 1 dzień temu +relations.since_days = Od: {0} dni temu +relations.set_ally = [Admin] Ustawiono wzajemny sojusz z {0}. +relations.set_enemy = Ustawiono wzajemną wrogość z {0}. +relations.set_neutral = [Admin] Ustawiono wzajemną neutralność z {0}. + +# ========== Ustawienia frakcji admina ========== +settings.locked = To ustawienie jest zablokowane przez konfigurację serwera. +settings.perm_toggled = Ustawiono {0} na {1}. +settings.color_changed = Ustawiono kolor frakcji na {0}. +settings.recruitment_set = Ustawiono rekrutację na {0}. +settings.no_home = [Admin] Ta frakcja nie ma ustawionego domu. +settings.home_cleared = Usunięto dom frakcji {0}. + +# ========== Etykiety sortowania ========== +sort.power = Moc +sort.name = Nazwa +sort.members = Członkowie +sort.balance = Saldo + +# ========== Gracze admina ========== +players.sort_last_online = Ostatnio online +players.sort_faction = Frakcja +players.sort_online = Online +players.not_online = Gracz nie jest online. +players.world_not_found = Nie znaleziono docelowego świata. +players.teleported = [Admin] Przeteleportowano do {0}. + +# ========== Informacje o graczu admina ========== +playerinfo.disband_faction = Rozwiąż frakcję +playerinfo.kick_leader = Wyrzuć przywódcę +playerinfo.enter_valid_number = Wprowadź prawidłową liczbę. +playerinfo.enter_valid_positive = Wprowadź prawidłową dodatnią liczbę. +playerinfo.faction_gone = Frakcja już nie istnieje. +playerinfo.kd_reset = Zresetowano Z/Ś dla {0}. +playerinfo.kicked_success = Wyrzucono {0} z {1}. +playerinfo.kicked_leader = Wyrzucono przywódcę {0}. Przywództwo przekazane graczowi {1}. +playerinfo.disbanded_kick = [Admin] Frakcja '{0}' rozwiązana (wyrzucono ostatniego członka). + +# ========== Ekonomia admina ========== +economy.no_data = Brak frakcji z danymi ekonomicznymi. +economy.amount_zero = Kwota nie może wynosić zero. +economy.enter_amount = Wprowadź kwotę. +economy.invalid_number = Nieprawidłowa liczba: {0} +economy.error = Wystąpił błąd. +economy.balance_negative = Saldo nie może być ujemne. +economy.failed = Niepowodzenie: {0} +economy.bulk_complete = Zbiorcza korekta zakończona: {0} {1} dla {2} frakcji. +economy.bulk_failures = ({0} nieudanych) + +# ========== Strefy admina ========== +zones.not_found = Nie znaleziono strefy. +zones.invalid_id = Nieprawidłowy identyfikator strefy. +zones.deleted = Strefa {0} usunięta. +zones.delete_failed = Nie udało się usunąć strefy: {0} +zones.no_chunks = Brak chunków +zones.chunks_suffix = {0} ({1} chunków) + +# ========== Kreator tworzenia stref ========== +wizard.enter_name = Wprowadź nazwę strefy. +wizard.name_too_short = Nazwa strefy musi mieć co najmniej {0} znaków. +wizard.name_too_long = Nazwa strefy nie może przekraczać {0} znaków. +wizard.name_taken = Strefa o tej nazwie już istnieje. +wizard.radius_range = Promień musi być między 1 a {0}. +wizard.create_failed = Nie udało się utworzyć strefy: {0} +wizard.created_not_found = Strefa utworzona, ale nie udało się jej znaleźć. +wizard.created = Utworzono {0} '{1}'! +wizard.chunk_claimed = Zajęto chunk ({0}, {1}). +wizard.chunk_failed = Nie udało się zająć bieżącego chunka: {0} +wizard.radius_claimed = Zajęto {0} chunków w promieniu {1} od {2}. +wizard.radius_no_claims = Nie udało się zająć żadnych chunków (obszar może być zajęty). +wizard.no_claims = Strefa utworzona bez terenów. +wizard.chunks_preview = ~{0} chunków + +# ========== Zmiana nazwy strefy ========== +zone_rename.zone_gone = Strefa już nie istnieje. +zone_rename.enter_name = Wprowadź nazwę strefy. +zone_rename.too_short = Nazwa strefy musi mieć co najmniej {0} znak. +zone_rename.too_long = Nazwa strefy nie może przekraczać {0} znaków. +zone_rename.same_name = To już jest nazwa tej strefy. +zone_rename.renamed = [Admin] Zmieniono nazwę strefy z {0} na {1}! +zone_rename.name_taken = Strefa o tej nazwie już istnieje. +zone_rename.invalid_name = Nieprawidłowa nazwa strefy. +zone_rename.rename_failed = Nie udało się zmienić nazwy strefy: {0} + +# ========== Zmiana typu strefy ========== +zone_type.zone_gone = Strefa już nie istnieje. +zone_type.changed = [Admin] Zmieniono {0} z {1} na {2} ({3}). +zone_type.failed = Nie udało się zmienić typu strefy: {0} +zone_type.flags_reset = flagi zresetowane +zone_type.flags_kept = flagi zachowane + +# ========== Flagi integracji stref ========== +zone_int.zone_not_found = Nie znaleziono strefy +zone_int.no_plugin = (brak wtyczki) +zone_int.default = (domyślne) +zone_int.custom = (niestandardowe) + +# Etykiety interfejsu flag integracji +gui.zint_cat_gravestones = Nagrobki +gui.zint_gravestones_desc = Gdy WŁ., nie-właściciele mogą plądrować groby. Właściciele zawsze mogą. +gui.zint_cat_world_map = Mapa świata +gui.zint_world_map_desc = Nadpisz ukrywanie na mapie dla graczy w tej strefie. Gdy włączone, wybierz kto widzi graczy w tej strefie. +gui.zint_visibility_label = Poziom widoczności: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Przywróć domyślne +gui.zint_back_to_flags = Powrót do flag +gui.zint_map_vis_faction = Tylko frakcja +gui.zint_map_vis_ally = Frakcja + Sojusznicy +gui.zint_map_vis_all = Wszyscy gracze + +# ========== Dziennik aktywności ========== +log.all_types = Wszystkie typy +log.no_logs = Brak logów aktywności pasujących do filtrów. + +# ========== Strona wersji ========== +version.active = Aktywny +version.not_found = Nie znaleziono +version.not_detected = Nie wykryto +version.not_installed = Nie zainstalowano +version.active_version = Aktywny (v{0}) +version.active_compatible = Aktywny (kompatybilny) +version.active_claims_only = Aktywny (tylko tereny) +version.installed_no_perm = Zainstalowany (brak dostawcy uprawnień) +version.active_provider = Aktywny ({0}) + +# ========== Strona główna admina ========== +main.reload_hint = Użyj /f reload, aby przeładować konfigurację. +main.unclaim_hint = Użyj /f admin unclaim {0}, aby usunąć wszystkie {1} chunków. + +# ========== Flagi/Ustawienia stref ========== +zflags.invalid_flag = Nieprawidłowa flaga. +zflags.zone_not_found = Nie znaleziono strefy. +zflags.conflict = (konflikt) +zflags.mixin = (mixin) +zflags.reset_int = Przywróć flagi integracji do domyślnych. +zflags.reset_all = Przywróć wszystkie flagi do domyślnych. +zflags.reset_failed = Nie udało się zresetować flag: {0} +zflags.back_to_settings = Powrót do ustawień + +# Etykiety interfejsu ustawień stref +gui.zset_cat_combat = Walka +gui.zset_cat_damage = Obrażenia +gui.zset_cat_death = Śmierć +gui.zset_cat_building = Budowanie +gui.zset_cat_interaction = Interakcja +gui.zset_cat_transport = Transport +gui.zset_cat_items = Przedmioty +gui.zset_cat_spawning = Pojawianie się mobów +gui.zset_cat_mob_clear = Czyszczenie mobów +gui.zset_children_hint = (podrzędne obowiązują tylko gdy nadrzędne jest WŁ.) +gui.zset_reset_defaults = Przywróć domyślne +gui.zset_integration_flags = Flagi integracji +gui.zset_back_to_zones = Powrót do stref +gui.zset_chunks = {0} chunków + +# Nazwy wyświetlane flag stref +gui.zflag_pvp_enabled = PvP włączone +gui.zflag_friendly_fire = Ogień przyjacielski +gui.zflag_friendly_fire_faction = Obrażenia frakcji +gui.zflag_friendly_fire_ally = Obrażenia sojusznika +gui.zflag_projectile_damage = Obrażenia od pocisków +gui.zflag_mob_damage = Obrażenia od mobów +gui.zflag_pve_damage = Obrażenia mobom +gui.zflag_fall_damage = Obrażenia od upadku +gui.zflag_environmental_damage = Obrażenia środowiskowe +gui.zflag_explosion_damage = Obrażenia od eksplozji +gui.zflag_fire_spread = Rozprzestrzenianie ognia +gui.zflag_keep_inventory = Zachowaj ekwipunek +gui.zflag_power_loss = Utrata mocy +gui.zflag_build_allowed = Budowanie dozwolone +gui.zflag_block_place = Stawianie bloków +gui.zflag_hammer_use = Użycie młotka +gui.zflag_builder_tools_use = Narzędzia budowniczego +gui.zflag_block_interact = Interakcja z blokami +gui.zflag_door_use = Użycie drzwi +gui.zflag_container_use = Użycie pojemników +gui.zflag_bench_use = Użycie stacji +gui.zflag_processing_use = Użycie przetwórni +gui.zflag_seat_use = Użycie siedzeń +gui.zflag_mount_use = Użycie wierzchowców +gui.zflag_light_use = Użycie świateł +gui.zflag_npc_use = Interakcja z NPC +gui.zflag_crate_pickup = Podnoszenie skrzyń +gui.zflag_crate_place = Stawianie skrzyń +gui.zflag_npc_tame = Oswajanie NPC +gui.zflag_npc_interact = Interakcja z NPC +gui.zflag_teleporter_use = Użycie teleporterów +gui.zflag_portal_use = Użycie portali +gui.zflag_mount_entry = Wejście na wierzchowca +gui.zflag_item_drop = Upuszczanie przedmiotów +gui.zflag_item_pickup = Automatyczne podnoszenie +gui.zflag_item_pickup_manual = Podnoszenie klawiszem F +gui.zflag_invincible_items = Niezniszczalne przedmioty +gui.zflag_mob_spawning = Pojawianie się mobów +gui.zflag_hostile_mob_spawning = Wrogie moby +gui.zflag_passive_mob_spawning = Przyjazne moby +gui.zflag_neutral_mob_spawning = Neutralne moby +gui.zflag_npc_spawning = Pojawianie się NPC +gui.zflag_mob_clear = Czyszczenie mobów +gui.zflag_hostile_mob_clear = Czyszczenie wrogich mobów +gui.zflag_passive_mob_clear = Czyszczenie przyjaznych mobów +gui.zflag_neutral_mob_clear = Czyszczenie neutralnych mobów +gui.zflag_gravestone_access = Plądrowanie grobów +gui.zflag_show_on_map = Pokaż na mapie +gui.zflag_essentials_homes = Użycie domów +gui.zflag_essentials_warps = Użycie warpów +gui.zflag_essentials_kits = Odbieranie zestawów + +# ========== Właściwości stref ========== +zprop.current_custom = Aktualna: "{0}" (niestandardowa) +zprop.current_default = Aktualna: "{0}" (domyślna) +zprop.pvp_disabled = PvP wyłączone +zprop.pvp_enabled = PvP włączone +zprop.name_empty = Nazwa nie może być pusta. +zprop.renamed = Zmieniono nazwę strefy na "{0}". +zprop.name_taken = Strefa o tej nazwie już istnieje. +zprop.name_invalid = Nieprawidłowa nazwa (maks. 32 znaki). +zprop.rename_failed = Nie udało się zmienić nazwy: {0} +zprop.upper_empty = Górny tytuł nie może być pusty. Użyj Wyczyść, aby zresetować. +zprop.upper_set = Górny tytuł ustawiony. +zprop.upper_reset = Górny tytuł przywrócony do domyślnego. +zprop.lower_empty = Dolny tytuł nie może być pusty. Użyj Wyczyść, aby zresetować. +zprop.lower_set = Dolny tytuł ustawiony. +zprop.lower_reset = Dolny tytuł przywrócony do domyślnego. + +# ========== Relacje - dodatkowe ========== +relations.failed = Niepowodzenie: {0} + +# ========== Członkowie - dodatkowe ========== +members.never = Nigdy +members.teleported = [Admin] Przeteleportowano do {0}. + +# ========== Informacje o graczu - dodatkowe ========== +playerinfo.records = {0} wpisów +playerinfo.joined_date = Dołączył: {0} +playerinfo.current = Aktualna +playerinfo.left_date = Odszedł: {0} + +# ========== Mapa stref ========== +map.world_warning = UWAGA: Jesteś w '{0}' — strefa jest w '{1}' +map.position = Twoja pozycja: Chunk ({0}, {1}) +map.zone_gone = Strefa już nie istnieje. +map.claimed = Zajęto chunk ({0}, {1}) dla {2}. +map.claim_failed = Nie udało się zająć chunka: {0} +map.unclaimed = Zrzeczono się chunka ({0}, {1}) z {2}. +map.unclaim_failed = Nie udało się zrzec chunka: {0} +map.chunk_belongs = Ten chunk należy do {0}. +map.chunk_faction = Ten chunk jest zajęty przez frakcję. +map.chunk_protected = Ten chunk jest w chronionym regionie. +map.another_zone = inna strefa + +# ========== Klucze etykiet GUI (lokalizacja tekstu .ui) ========== + +# Tytuły stron +gui.title_dashboard = Pulpit admina +gui.title_main = Admin frakcji +gui.title_actions = Admin: Akcje serwera +gui.title_factions = Zarządzanie frakcjami +gui.title_players = Zarządzanie graczami +gui.title_economy = Admin: Ekonomia serwera +gui.title_zones = Zarządzanie strefami +gui.title_backups = Kopie zapasowe +gui.title_config = Konfiguracja +gui.title_help = Pomoc admina +gui.title_updates = Aktualizacje +gui.title_version = Wersja i integracje +gui.title_activity_log = Admin: Dziennik aktywności +gui.title_player_info = Admin: Informacje o graczu +gui.title_faction_info = Admin: Informacje o frakcji +gui.title_faction_settings = Admin: Ustawienia frakcji +gui.title_faction_members = Admin: Członkowie +gui.title_faction_relations = Admin: Relacje +gui.title_zone_map = Edytor mapy stref +gui.title_zone_settings = Admin: Ustawienia strefy +gui.title_zone_properties = Admin: Właściwości strefy +gui.title_bulk_economy = Zbiorcza korekta skarbca +gui.title_economy_adjust = Admin: Ekonomia + +# Etykiety pulpitu +gui.dash_server_stats = Statystyki serwera +gui.dash_factions = Frakcje +gui.dash_total_members = Łącznie członków +gui.dash_total_claims = Łącznie terenów +gui.dash_zones = Strefy +gui.dash_safe_war = bezpieczne / wojenne +gui.dash_total_power = Łączna moc +gui.dash_avg_power = Średnia moc/frakcja +gui.dash_total_economy = Łączna ekonomia +gui.dash_wealthiest = Najbogatsza +gui.dash_avg_balance = Średnie saldo +gui.dash_protection_bypass = Ominięcie ochrony: + +# Wspólne przyciski i etykiety +gui.search = Szukaj: +gui.sort = Sortuj: +gui.prev = < Poprz. +gui.next = Nast. > +gui.back = Wstecz +gui.done = Gotowe +gui.cancel = Anuluj +gui.apply = Zastosuj +gui.set = Ustaw +gui.reset = Resetuj +gui.coming_soon = Wkrótce +gui.zones_btn = Strefy +gui.reload_btn = Przeładuj +gui.all = Wszystko +gui.safe = Bezpieczna +gui.war = Wojenna +gui.create_zone = + Utwórz + +# Etykiety strony akcji +gui.act_combat_stats = Statystyki walki +gui.act_combat_desc = Zresetuj zabójstwa i śmierci dla WSZYSTKICH graczy na serwerze. Ta akcja nie może być cofnięta. +gui.act_reset_kd = Resetuj wszystkie Z/Ś +gui.act_economy = Ekonomia +gui.act_economy_desc = Dodaj lub usuń pieniądze ze WSZYSTKICH skarbców frakcji naraz. +gui.act_bulk_adjust = Zbiorcze dodawanie/usuwanie +gui.act_upkeep_collection = Pobór utrzymania +gui.act_upkeep_desc = Ręcznie uruchom pobór utrzymania dla wszystkich frakcji natychmiast, niezależnie od zaplanowanego harmonogramu. +gui.act_trigger_upkeep = Uruchom utrzymanie + +# Etykiety stron zastępczych +gui.backup_heading = Zarządzanie kopiami zapasowymi +gui.backup_desc1 = Tworzenie, przywracanie i zarządzanie kopiami danych frakcji. +gui.backup_desc2 = Automatyczne kopie zapasowe zapisywane są w folderze data/backups. +gui.config_heading = Edytor konfiguracji +gui.config_desc1 = Konfiguruj ustawienia HyperFactions bezpośrednio z GUI. +gui.config_desc2 = Na razie użyj /f reload, aby przeładować zmiany konfiguracji. +gui.help_heading = Dokumentacja admina +gui.help_desc1 = Przeglądaj dokumentację admina i opis komend. +gui.help_desc2 = Po pomoc odwiedź wiki HyperFactions. +gui.updates_heading = Centrum aktualizacji +gui.updates_desc1 = Sprawdzaj nowe wersje i przeglądaj dzienniki zmian. +gui.updates_desc2 = Odwiedź stronę HyperFactions, aby uzyskać najnowsze aktualizacje. + +# Etykiety strony wersji +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Serwer Hytale +gui.ver_java = Java +gui.ver_permissions = UPRAWNIENIA +gui.ver_placeholders = ZMIENNE +gui.ver_economy_section = EKONOMIA +gui.ver_protection = OCHRONA +gui.ver_disabled = Wyłączone + +# Nagłówki kolumn (wspólne dla stron) +gui.col_faction = Frakcja +gui.col_balance = Saldo +gui.col_members = Członkowie +gui.col_actions = Akcje +gui.col_time = Czas +gui.col_type = Typ +gui.col_message = Wiadomość + +# Etykiety strony ekonomii +gui.econ_total_balance = Łączne saldo +gui.econ_factions = Frakcje +gui.econ_avg_balance = Średnie saldo +gui.econ_in_grace = W karencji +gui.econ_collected = Pobrane (24h) +gui.econ_next_collection = Następny pobór +gui.econ_no_data = Brak frakcji z danymi ekonomicznymi. + +# Etykiety dziennika aktywności +gui.log_type = Typ: +gui.log_time = Czas: +gui.log_player = Gracz: +gui.log_no_logs = Brak logów aktywności pasujących do filtrów. + +# Etykiety informacji o graczu +gui.plr_first_joined = Pierwszy raz dołączył: +gui.plr_last_online = Ostatnio online: +gui.plr_uuid = UUID: +gui.plr_faction = Frakcja: +gui.plr_role = Ranga: +gui.plr_view_faction = Pokaż frakcję +gui.plr_power = Moc +gui.plr_max_power = Maks. moc +gui.plr_set_power = Ustaw +gui.plr_reset_power = Resetuj +gui.plr_set_max = Ustaw +gui.plr_reset_max = Resetuj +gui.plr_no_power_loss = Bez utraty mocy +gui.plr_no_claim_decay = Bez rozpadu terenów +gui.plr_kills = Zabójstwa +gui.plr_deaths = Śmierci +gui.plr_kdr = Współczynnik Z/Ś +gui.plr_reset_kd = Resetuj Z/Ś +gui.plr_kick = Wyrzuć +gui.plr_membership_history = Historia członkostwa +gui.plr_no_faction_label = Nie należy do frakcji +gui.plr_power_management = Zarządzanie mocą +gui.plr_combat_stats = Statystyki walki +gui.plr_bypass_flags = Flagi ominięcia +gui.plr_admin_controls = Kontrolki admina +gui.plr_kd_subtitle = Z / Ś +gui.plr_max_prefix = Maks.: +gui.plr_view = Pokaż +gui.plr_kick_from_faction = Wyrzuć z frakcji +gui.plr_set_max_btn = Ustaw maks. +gui.plr_combat = Walka +gui.plr_reason_active = AKTYWNY +gui.plr_reason_left = ODSZEDŁ +gui.plr_reason_kicked = WYRZUCONY +gui.plr_reason_disbanded = ROZWIĄZANA + +# Etykiety wpisów członków +gui.mem_label_power = Moc: +gui.mem_label_joined = Dołączył: +gui.mem_label_last_death = Ostatnia śmierć: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Informacje +gui.mem_btn_teleport = Teleportuj +gui.mem_btn_promote = Awansuj +gui.mem_btn_demote = Degraduj +gui.mem_btn_kick = Wyrzuć +gui.econ_not_enabled = System ekonomiczny nie jest włączony. +gui.info_more = +{0} więcej +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7d +gui.log_time_all = Wszystko +gui.shape_circular = kołowy +gui.shape_square = kwadratowy +gui.nav_title = Panel admina +gui.econ_btn_adjust = Korekta +gui.econ_btn_info = Informacje + +# Etykiety informacji o frakcji +gui.fac_description = Opis +gui.fac_power = Moc +gui.fac_claims = Tereny +gui.fac_members = Członkowie +gui.fac_recruitment = Rekrutacja +gui.fac_founded = Założona +gui.fac_allies = Sojusznicy +gui.fac_enemies = Wrogowie +gui.fac_raidable = Status podatności na najazd +gui.fac_treasury = Skarbiec +gui.fac_leader = Przywódca +gui.fac_officers = Oficerowie +gui.fac_view_members = Pokaż członków +gui.fac_view_relations = Pokaż relacje +gui.fac_view_settings = Ustawienia +gui.fac_disband = Rozwiąż frakcję +gui.fac_power_management = Zarządzanie mocą +gui.fac_reset_all_power = Resetuj całą moc +gui.fac_econ_adjust = Korekta salda +gui.fac_econ_view_log = Pokaż dziennik transakcji +gui.fac_current_max = aktualna / maks. +gui.fac_claimed_max = zajęte / maks. +gui.fac_relations = Relacje +gui.fac_ally_enemy = sojusznik / wróg +gui.fac_status = Status +gui.fac_info = Informacje +gui.fac_treasury_balance = saldo skarbca +gui.fac_leadership = Przywództwo +gui.fac_leader_label = Przywódca: +gui.fac_officers_label = Oficerowie: +gui.fac_econ_mgmt = Zarządzanie ekonomią +gui.fac_danger_zone = Strefa zagrożenia +gui.fac_view_treasury = Pokaż skarbiec + +# Etykiety ustawień frakcji +gui.set_editing = Edycja: +gui.set_general = Ustawienia ogólne +gui.set_name = Nazwa +gui.set_tag = Tag +gui.set_description = Opis +gui.set_recruitment = Rekrutacja +gui.set_home = Lokalizacja domu +gui.set_clear_home = Wyczyść dom +gui.set_disband_faction = Rozwiąż frakcję +gui.set_faction_color = Kolor frakcji +gui.set_admin_override = [Nadpisanie admina] +gui.set_territory_perms = Uprawnienia terytorialne +gui.set_mob_spawning = Pojawianie się mobów +gui.set_faction_settings = Ustawienia frakcji +gui.set_name_label = Nazwa: +gui.set_tag_label = Tag: +gui.set_desc_label = Opis: +gui.set_edit = Edytuj +gui.set_status_label = Status: +gui.set_location_label = Lokalizacja: +gui.set_danger_zone = Strefa zagrożenia +gui.set_irreversible = Ta akcja jest nieodwracalna. +gui.set_lock_hint = Niektóre opcje mogą być zablokowane przez serwer i nie przyjmą zmian. +gui.set_appearance = Wygląd +gui.set_color_label = Kolor: +gui.set_mob_sub = (podrzędne wyłączone gdy główne jest wyłączone) +gui.set_back_to_info = Powrót do informacji +gui.set_col_out = Obcy +gui.set_col_ally = Sojusz. +gui.set_col_mem = Człon. +gui.set_col_off = Ofi. +gui.set_cat_building = BUDOWANIE +gui.set_cat_interaction = INTERAKCJA +gui.set_cat_interact_sub = (podrzędne wyłączone gdy Wszystko jest wyłączone) +gui.set_cat_other = INNE +gui.set_perm_break = Niszczenie +gui.set_perm_place = Stawianie +gui.set_perm_all = Wszystko +gui.set_perm_door = Drzwi +gui.set_perm_chest = Skrzynia +gui.set_perm_bench = Stacja +gui.set_perm_processing = Przetwarzanie +gui.set_perm_seat = Siedzenie +gui.set_perm_transport = Transport +gui.set_perm_crate_use = Skrzynie +gui.set_perm_npc_tame = Oswajanie NPC +gui.set_perm_pve_damage = Obrażenia PvE +gui.set_perm_mob_spawning = Pojawianie się mobów +gui.set_perm_hostile = Wrogie moby +gui.set_perm_passive = Przyjazne moby +gui.set_perm_neutral = Neutralne moby +gui.set_perm_pvp = PvP na terytorium +gui.set_perm_officers_edit = Oficerowie mogą edytować + +# Etykiety relacji frakcji +gui.rel_subtitle = Zarządzaj relacjami frakcji (pomija zatwierdzanie) +gui.rel_set_new = Ustaw nową relację +gui.rel_btn_ally = Sojusznik +gui.rel_btn_neutral = Neutralny +gui.rel_btn_enemy = Wróg + +# Etykiety strony stref +gui.zone_sort_name = Nazwa +gui.zone_sort_type = Typ +gui.zone_sort_chunks = Chunki +gui.zone_sort_world = Świat +gui.zone_count_format = {0} {1}stref ({2} chunków) + +# Etykiety mapy stref +gui.map_zone_chunk = Chunk strefy +gui.map_empty = Pusty +gui.map_other_zone = Inna strefa +gui.map_faction_claim = Teren frakcji +gui.map_protected = Chroniony +gui.map_your_pos = Twoja pozycja +gui.map_click_hint = Kliknij, aby zajmować/zrzekać się chunków +gui.map_legend_zone_safe = Ta strefa (Bezpieczna) +gui.map_legend_zone_war = Ta strefa (Wojenna) +gui.map_legend_other_safe = Inna SafeZone +gui.map_legend_other_war = Inna WarZone +gui.map_legend_faction = Teren frakcji +gui.map_legend_unclaimed = Niezajęty +gui.map_legend_you_here = Jesteś tutaj +gui.map_action_hint = Lewy klik: Zajmij dla strefy | Prawy klik: Zrzecz się ze strefy +gui.map_done = Gotowe + +# Etykiety właściwości stref +gui.zprop_general = Ogólne +gui.zprop_zone_name = Nazwa strefy +gui.zprop_zone_type = Typ strefy +gui.zprop_change_type = Zmień typ +gui.zprop_notifications = Powiadomienia +gui.zprop_show_entry = Pokaż powiadomienie o wejściu +gui.zprop_upper_title = Górny tytuł +gui.zprop_upper_desc = Górny tytuł (mały tekst nad nazwą strefy) +gui.zprop_lower_title = Dolny tytuł +gui.zprop_lower_desc = Dolny tytuł (duży tekst nazwy strefy) +gui.zprop_edit_flags = Edytuj flagi +gui.zprop_back_to_zones = Powrót do stref +gui.save = Zapisz +gui.clear = Wyczyść + +# Etykiety zbiorczej ekonomii +gui.bulk_header = Korekta wszystkich skarbców frakcji +gui.bulk_factions_label = Frakcje: +gui.bulk_total_label = Łączne saldo: +gui.bulk_amount_hint = Kwota (dodatnia, aby dodać; ujemna, aby usunąć): +gui.bulk_hint = Zostanie zastosowane do każdej frakcji ze skarbcem +gui.bulk_warning_msg = Uwaga: Ta akcja dotyczy WSZYSTKICH frakcji i nie może być cofnięta. +gui.bulk_apply_all = Zastosuj do wszystkich +gui.bulk_operation = Operacja +gui.bulk_add = Dodaj +gui.bulk_remove = Usuń +gui.bulk_amount = Kwota +gui.bulk_warning = Dotyczy WSZYSTKICH skarbców frakcji. +gui.bulk_preview = Podgląd + +# Etykiety korekty ekonomii +gui.ecadj_header = Korekta salda skarbca +gui.ecadj_faction_label = Frakcja: +gui.ecadj_current_balance = Aktualne saldo: +gui.ecadj_amount_hint = Kwota (dodatnia, aby dodać; ujemna, aby odjąć): +gui.ecadj_preview_hint = Wprowadź liczbę, aby zobaczyć podgląd zmiany +gui.ecadj_adjustment = Korekta: +gui.ecadj_set_balance = Ustaw saldo +gui.ecadj_confirm = Potwierdź +/- +gui.ecadj_operation = Operacja +gui.ecadj_add = Dodaj +gui.ecadj_remove = Usuń +gui.ecadj_set_to = Ustaw na +gui.ecadj_amount = Kwota +gui.ecadj_new_balance = Nowe saldo: + +# Etykiety integracji strony wersji +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale natywne +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Hooki mixinów +gui.ver_gravestones = Nagrobki +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Skarbiec + +# Etykiety okna potwierdzenia usuwania terenów +gui.unclaim_title = Usuń wszystkie tereny +gui.unclaim_confirm_msg1 = Czy na pewno chcesz usunąć wszystkie +gui.unclaim_confirm_msg2 = z +gui.unclaim_warning = Ta akcja nie może być cofnięta! +gui.unclaim_all = Usuń wszystkie + +# Etykiety okna zmiany nazwy strefy +gui.zren_title = Zmień nazwę strefy +gui.zren_current = Aktualna: +gui.zren_new_name = Nowa nazwa: + +# Etykiety okna zmiany typu strefy +gui.ztype_title = Zmień typ strefy +gui.ztype_zone_label = Strefa: +gui.ztype_current = Aktualny: +gui.ztype_will_become = zmieni się na +gui.ztype_new = Nowy: +gui.ztype_warning1 = Różne typy stref mają różne domyślne wartości flag. +gui.ztype_warning2 = Wybierz sposób obsługi istniejących ustawień flag: +gui.ztype_keep_desc = Zachowaj niestandardowe nadpisania +gui.ztype_keep_flags = Zachowaj flagi +gui.ztype_reset_desc = Użyj domyślnych nowego typu +gui.ztype_reset_flags = Resetuj flagi + +# Etykiety kreatora tworzenia stref +gui.czw_title = Utwórz strefę +gui.czw_back = < Wstecz +gui.czw_create = Utwórz strefę +gui.czw_zone_type = Typ strefy +gui.czw_safe_desc = Chroniona, bez PvP +gui.czw_war_desc = Bojowa, PvP włączone +gui.czw_zone_name = Nazwa strefy +gui.czw_name_desc = Wprowadź unikalną nazwę strefy +gui.czw_claim_method = Metoda zajmowania +gui.czw_method_none_desc = Utwórz pustą strefę +gui.czw_method_none = Bez terenów +gui.czw_method_single_desc = Twój aktualny chunk +gui.czw_method_single = Pojedynczy chunk +gui.czw_method_circle_desc = Okrągły obszar +gui.czw_method_circle = Promień koła +gui.czw_method_square_desc = Kwadratowy obszar +gui.czw_method_square = Promień kwadratu +gui.czw_method_map_desc = Interaktywny edytor chunków +gui.czw_method_map = Użyj mapy terenów +gui.czw_radius = Promień +gui.czw_custom_radius = Niestandardowy (1-50): +gui.czw_flags = Flagi +gui.czw_flags_defaults_desc = Na podstawie typu strefy +gui.czw_flags_defaults = Użyj domyślnych +gui.czw_flags_customize_desc = Otwórz ustawienia po +gui.czw_flags_customize = Dostosuj + +# ========== Etykiety wpisów (wpisy list frakcji/graczy/stref) ========== + +# Etykiety wpisów frakcji +gui.fac_entry_power = moc +gui.fac_entry_claims = tereny +gui.fac_entry_members = członkowie +gui.fac_entry_created = Utworzona: +gui.fac_entry_home = Dom: +gui.fac_entry_tp_home = Teleportuj do domu +gui.fac_entry_view_info = Informacje +gui.fac_entry_members_btn = Członkowie +gui.fac_entry_settings = Ustawienia +gui.fac_entry_unclaim_all = Usuń wszystkie tereny +gui.fac_entry_disband = Rozwiąż + +# Etykiety wpisów graczy +gui.plr_entry_role = Ranga: +gui.plr_entry_joined = Dołączył: +gui.plr_entry_last_online = Ostatnio online: +gui.plr_entry_kdr = Z/Ś/W: +gui.plr_entry_power = Moc: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Informacje +gui.plr_entry_teleport = Teleportuj +gui.plr_entry_na = N/D +gui.plr_entry_unknown = Nieznane +gui.plr_entry_ago = {0} temu + +# Etykiety wpisów stref +gui.zone_entry_world = Świat: +gui.zone_entry_chunks = Chunki: +gui.zone_entry_bounds = Granice: +gui.zone_entry_created = Utworzona: +gui.zone_entry_edit_map = Edytuj mapę +gui.zone_entry_flags = Flagi +gui.zone_entry_settings = Ustawienia +gui.zone_entry_delete = Usuń diff --git a/src/main/resources/Server/Languages/pl-PL/hyperfactions_gui.lang b/src/main/resources/Server/Languages/pl-PL/hyperfactions_gui.lang new file mode 100644 index 00000000..14e74dcc --- /dev/null +++ b/src/main/resources/Server/Languages/pl-PL/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Polskie tłumaczenie +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_gui." by Hytale's I18nModule + +# ========== Pasek nawigacji ========== +nav.dashboard = Pulpit +nav.chat = Czat +nav.members = Członkowie +nav.invites = Zaproszenia +nav.browser = Przeglądaj +nav.map = Mapa +nav.leaderboard = Ranking +nav.relations = Relacje +nav.treasury = Skarbiec +nav.settings = Ustawienia +nav.logs = Dziennik +nav.help = Pomoc +nav.admin = Admin +nav.create = Utwórz + +# ========== Nazwy kategorii pomocy ========== +help.category.welcome = Witaj +help.category.your_faction = Twoja frakcja +help.category.power_land = Moc i tereny +help.category.diplomacy = Dyplomacja +help.category.combat = Walka i bezpieczeństwo +help.category.economy = Ekonomia +help.category.quick_ref = Szybka ściągawka + +# ========== Nazwy kategorii pomocy admina ========== +help.category.admin_overview = Przegląd +help.category.admin_factions = Frakcje +help.category.admin_zones = Strefy +help.category.admin_power = Moc +help.category.admin_economy = Ekonomia +help.category.admin_config = Konfiguracja +help.category.admin_maintenance = Konserwacja +help.category.admin_reference = Referencje + +# ========== Menu główne ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Moja frakcja +main_menu.section_get_started = Rozpocznij +main_menu.section_territory = Terytorium +main_menu.section_browse = Przeglądaj +main_menu.section_admin = Admin +main_menu.claim_hint = Użyj /f claim, aby zająć terytorium. + +# ========== Strona informacji o frakcji ========== +faction_info.title = Informacje o frakcji +faction_info.no_description = Brak opisu. +faction_info.status_open = Otwarta +faction_info.status_invite_only = Tylko na zaproszenie +faction_info.status_raidable = Podatna na najazd +faction_info.status_protected = Chroniona +faction_info.officers_more = +{0} więcej +faction_info.power_header = Moc +faction_info.claims_header = Tereny +faction_info.members_header = Członkowie +faction_info.relations_header = Relacje +faction_info.status_header = Status +faction_info.treasury_header = Skarbiec +faction_info.current_max = aktualna / maks. +faction_info.claimed_max = zajęte / maks. +faction_info.ally_enemy = sojusznik / wróg +faction_info.faction_balance = saldo frakcji +faction_info.leader_label = Przywódca: +faction_info.officers_label = Oficerowie: +faction_info.view_members_btn = Członkowie +faction_info.relations_btn = Relacje +faction_info.back_btn = Wstecz + +# ========== Okno zmiany nazwy ========== +rename.title = Zmiana nazwy frakcji +rename.current_label = Aktualna: +rename.new_name_label = Nowa nazwa: +rename.no_permission = Nie masz uprawnień do zmiany nazwy frakcji. +rename.enter_name = Wprowadź nazwę frakcji. +rename.too_short = Nazwa frakcji musi mieć co najmniej {0} znaków. +rename.too_long = Nazwa frakcji nie może przekraczać {0} znaków. +rename.same_name = To już jest nazwa Twojej frakcji. +rename.name_taken = Frakcja o tej nazwie już istnieje. +rename.success = Nazwa frakcji zmieniona z {0} na {1}! + +# ========== Okno opisu ========== +desc.title = Edycja opisu +desc.current_label = Aktualny: +desc.new_desc_label = Nowy opis: +desc.no_permission = Nie masz uprawnień do edycji opisu. +desc.display_none = (Brak) +desc.cleared = Opis frakcji wyczyszczony. +desc.updated = Opis frakcji zaktualizowany! + +# ========== Okno tagu ========== +tag.title = Edycja tagu +tag.current_label = Aktualny: +tag.instructions = Tag (1-5 znaków, tylko litery i cyfry): +tag.help_text = Tagi wyświetlają się na czacie i na mapie +tag.no_permission = Nie masz uprawnień do edycji tagu. +tag.display_none = (Brak) +tag.cleared = Tag frakcji wyczyszczony. +tag.too_short = Tag musi mieć co najmniej {0} znak. +tag.too_long = Tag nie może przekraczać {0} znaków. +tag.invalid_format = Tag może zawierać tylko litery i cyfry. +tag.same_tag = To już jest tag Twojej frakcji. +tag.tag_taken = Frakcja z takim tagiem już istnieje. +tag.success = Tag frakcji ustawiony na [{0}]! + +# ========== Strona pulpitu ========== +dashboard.title = Pulpit frakcji +dashboard.power_label = Moc +dashboard.land_label = Tereny +dashboard.members_label = Członkowie +dashboard.online_label = Online +dashboard.allies_label = Sojusznicy +dashboard.enemies_label = Wrogowie +dashboard.relations_label = Relacje +dashboard.ally_enemy_label = sojusznik / wróg +dashboard.status_label = Status +dashboard.invites_label = Zaproszenia +dashboard.sent_requests_label = wysłane / prośby +dashboard.treasury_label = Skarbiec +dashboard.upkeep_label = Utrzymanie +dashboard.per_cycle = za cykl +dashboard.your_wallet = Twój portfel +dashboard.personal_balance = saldo osobiste +dashboard.quick_actions = Szybkie akcje +dashboard.teleport_label = Teleportacja +dashboard.territory_label = Terytorium +dashboard.channel_label = Kanał +dashboard.membership_label = Członkostwo +dashboard.recent_activity = Ostatnia aktywność +dashboard.view_all = Pokaż wszystko +dashboard.income_24h = Przychód (24h) +dashboard.deposits_transfers_in = wpłaty, przelewy przychodzące +dashboard.expenses_24h = Wydatki (24h) +dashboard.withdrawals_transfers_out = wypłaty, przelewy wychodzące +dashboard.faction_gone = Twoja frakcja już nie istnieje. +dashboard.available = {0} dostępnych +dashboard.at_risk = Zagrożona! +dashboard.online_count = {0} online +dashboard.status_invite = Zaproszenie +dashboard.in_grace = OKRES KARENCJI +dashboard.billable_chunks = {0} płatnych chunków +dashboard.btn_home = Dom +dashboard.btn_set_home = Ustaw dom +dashboard.btn_claim = Zajmij +dashboard.chat_prefix = Czat: {0} +dashboard.btn_leave = Opuść +dashboard.no_activity = Brak ostatniej aktywności. +dashboard.time_now = teraz +dashboard.time_minutes = {0}m temu +dashboard.time_hours = {0}h temu +dashboard.time_days = {0}d temu +dashboard.no_home_hint = Twoja frakcja nie ma domu. Poproś oficera o jego ustawienie. +dashboard.chat_mode_set = Tryb czatu: {0} +dashboard.claim_success = Zajęto chunk na ({0}, {1}) +dashboard.upkeep_in = za {0} + +# ========== Strona główna frakcji ========== +main.no_faction = Brak frakcji +main.joined = Dołączyłeś do frakcji! +main.join_failed = Nie udało się dołączyć do frakcji: {0} +main.invite_declined = Zaproszenie odrzucone. +main.cooldown = Teleportacja na odnowieniu! Pozostało {0}s. +main.world_not_found = Nie można teleportować — nie znaleziono świata. +main.leave_failed = Nie udało się opuścić: {0} + +# ========== Wspólne etykiety GUI ========== +common.faction_count = {0} frakcji +common.leader_label = Przywódca: {0} +common.sort_power = Moc +common.sort_members = Członkowie +common.page_format = {0}/{1} +common.own_faction = (Ty) +common.search = Szukaj: +common.sort = Sortuj: +common.prev = < Poprz. +common.next = Nast. > +common.treasury_not_available = Skarbiec jest niedostępny. + +# ========== Strona członków ========== +members.title = Członkowie +members.search_label = Szukaj: +members.sort_label = Sortuj: +members.prev_btn = < Poprz. +members.next_btn = Nast. > +members.count = {0} członków +members.sort_role = Ranga +members.sort_last_online = Ostatnio online +members.just_now = przed chwilą +members.ago = {0} temu +members.never = Nigdy +members.member_not_found = Nie znaleziono członka. +members.promoted = Awansowano {0} na {1}. +members.promote_failed = Nie udało się awansować: {0} +members.demoted = Zdegradowano {0} do {1}. +members.demote_failed = Nie udało się zdegradować: {0} +members.kicked = Wyrzucono {0} z frakcji. +members.kick_failed = Nie udało się wyrzucić: {0} +members.label_power = Moc: +members.label_joined = Dołączył: +members.label_last_death = Ostatnia śmierć: +members.btn_promote = Awansuj +members.btn_demote = Degraduj +members.btn_kick = Wyrzuć +members.btn_make_leader = Mianuj przywódcą +members.btn_profile = Profil +members.self_label = (Ty) + +# ========== Strona przeglądarki ========== +browser.title = Przeglądaj frakcje +browser.search_label = Szukaj: +browser.sort_label = Sortuj: +browser.prev_btn = < Poprz. +browser.next_btn = Nast. > +browser.sort_name = Nazwa +browser.invalid_faction = Nieprawidłowa frakcja. +browser.label_power = moc +browser.label_claims = tereny +browser.label_members = członkowie +browser.label_recruitment = Rekrutacja: +browser.label_created = Utworzona: +browser.label_description = Opis: +browser.view_info_btn = Informacje +browser.label_leader = Przywódca: +browser.no_description = Brak opisu + +# ========== Strona rankingu ========== +leaderboard.title = Ranking frakcji +leaderboard.rank_by = Sortuj wg: +leaderboard.col_rank = # +leaderboard.col_faction = Frakcja +leaderboard.col_claims = Tereny +leaderboard.col_members = Członkowie +leaderboard.prev_btn = < Poprz. +leaderboard.next_btn = Nast. > +leaderboard.sort_kd = Z/Ś +leaderboard.sort_territory = Terytorium +leaderboard.sort_balance = Saldo + +# ========== Strona informacji o graczu ========== +playerinfo.title = Informacje o graczu +playerinfo.first_joined_label = Pierwszy raz dołączył: +playerinfo.last_online_label = Ostatnio online: +playerinfo.faction_label = Frakcja: +playerinfo.role_label = Ranga: +playerinfo.joined_label_static = Dołączył: +playerinfo.not_in_faction = Nie należy do frakcji +playerinfo.power_header = Moc +playerinfo.current_max = aktualna / maks. +playerinfo.combat_header = Walka +playerinfo.kills_deaths = zabójstwa / śmierci +playerinfo.kdr_header = Współczynnik Z/Ś +playerinfo.membership_history = Historia członkostwa +playerinfo.view_faction_btn = Pokaż frakcję +playerinfo.back_btn = Wstecz +playerinfo.now = Teraz +playerinfo.history_count = {0} wpisów +playerinfo.joined_label = Dołączył: {0} +playerinfo.current = Aktualna +playerinfo.left_label = Odszedł: {0} +playerinfo.no_history = Brak historii członkostwa +playerinfo.faction_gone = Frakcja już nie istnieje. +playerinfo.reason_active = AKTYWNY +playerinfo.reason_left = ODSZEDŁ +playerinfo.reason_kicked = WYRZUCONY +playerinfo.reason_disbanded = ROZWIĄZANA + +# ========== Strona relacji ========== +relations.title = Relacje +relations.tab_relations = Relacje +relations.tab_pending = Oczekujące +relations.set_relation_btn = + Ustaw relację +relations.prev_btn = < Poprz. +relations.next_btn = Nast. > +relations.relation_count = {0} relacji +relations.request_count = {0} próśb +relations.type_ally = Sojusznik +relations.type_enemy = Wróg +relations.type_incoming = Przychodzące +relations.type_outgoing = Wychodzące +relations.incoming_request = Prośba przychodząca +relations.outgoing_request = Prośba wychodząca +relations.empty_relations = Brak relacji. +relations.empty_relations_hint = Brak relacji. Kliknij + USTAW RELACJĘ, aby dodać sojuszników lub wrogów. +relations.empty_pending = Brak oczekujących próśb o sojusz. +relations.today = Dzisiaj +relations.one_day_ago = 1 dzień temu +relations.days_ago = {0} dni temu +relations.now_neutral = Jesteście teraz neutralni wobec {0}. +relations.now_enemies = Jesteście teraz wrogami z {0}! +relations.request_sent = Prośba o sojusz wysłana do {0}. +relations.now_allied = Jesteście teraz sojusznikami z {0}! +relations.request_declined = Prośba o sojusz od {0} odrzucona. +relations.request_cancelled = Prośba o sojusz do {0} anulowana. +relations.failed = Niepowodzenie: {0} +relations.search_hint = Wyszukaj frakcję, aby ustawić relację +relations.no_results = Nie znaleziono frakcji pasujących do '{0}' +relations.power_display = {0} mocy +relations.member_count = {0} członków +relations.label_members = członkowie +relations.label_power = moc +relations.label_since = Od: +relations.label_claims = Tereny: +relations.label_direction = Kierunek: +relations.btn_view = Pokaż +relations.btn_neutral = Neutralny +relations.btn_enemy = Wróg +relations.btn_ally = Sojusznik +relations.btn_accept = Akceptuj +relations.btn_decline = Odrzuć +relations.btn_cancel = Anuluj + +# ========== Strona ustawień ========== +settings.title = Ustawienia frakcji +settings.general = Ogólne +settings.name_label = Nazwa: +settings.tag_label = Tag: +settings.desc_label = Opis: +settings.edit_btn = Edytuj +settings.recruitment = Rekrutacja +settings.status_label = Status: +settings.home_location = Lokalizacja domu +settings.location_label = Lokalizacja: +settings.set_home_btn = Ustaw dom +settings.teleport_btn = Teleportuj +settings.delete_btn = Usuń +settings.optional_features = Opcjonalne funkcje +settings.configure_modules = Konfiguruj opcjonalne moduły. +settings.modules_btn = Moduły +settings.danger_zone = Strefa zagrożenia +settings.irreversible = Ta akcja jest nieodwracalna. +settings.disband_btn = Rozwiąż frakcję +settings.lock_hint = Niektóre opcje mogą być zablokowane przez serwer i nie przyjmą zmian. +settings.territory_permissions = Uprawnienia terytorialne +settings.col_out = Obcy +settings.col_ally = Sojusz. +settings.col_mem = Człon. +settings.col_off = Ofi. +settings.cat_building = BUDOWANIE +settings.perm_break = Niszczenie +settings.perm_place = Stawianie +settings.cat_interaction = INTERAKCJA +settings.interaction_hint = (podrzędne wyłączone gdy Wszystko jest wyłączone) +settings.perm_all = Wszystko +settings.perm_door = Drzwi +settings.perm_chest = Skrzynia +settings.perm_bench = Stacja +settings.perm_processing = Przetwarzanie +settings.perm_seat = Siedzenie +settings.perm_transport = Transport +settings.cat_other = INNE +settings.perm_crate = Skrzynie +settings.perm_npc_tame = Oswajanie NPC +settings.perm_pve = Obrażenia PvE +settings.appearance = Wygląd +settings.color_label = Kolor: +settings.mob_spawning = Pojawianie się mobów +settings.mob_spawning_hint = (podrzędne wyłączone gdy główne jest wyłączone) +settings.mob_spawning_label = Pojawianie się mobów +settings.hostile_mobs = Wrogie moby +settings.passive_mobs = Przyjazne moby +settings.neutral_mobs = Neutralne moby +settings.faction_settings = Ustawienia frakcji +settings.pvp_in_territory = PvP na terytorium +settings.officers_can_edit = Oficerowie mogą edytować +settings.leader_only = Tylko przywódca +settings.officers_only = Tylko oficerowie i przywódca mogą zmieniać ustawienia frakcji. +settings.display_none = (Brak) +settings.home_not_set = Nie ustawiony +settings.no_permission = Nie masz uprawnień do zmiany ustawień. +settings.only_leader_disband = Tylko przywódca może rozwiązać frakcję. +settings.perm_locked = To ustawienie jest zablokowane przez serwer. +settings.no_perm_edit = Nie masz uprawnień do edycji uprawnień terytorialnych. +settings.only_leader_officers = Tylko przywódca może zmieniać dostęp oficerów. +settings.pvp_enabled = Włączone +settings.pvp_disabled = Wyłączone +settings.not_in_territory = Musisz być na terytorium frakcji, aby ustawić dom. +settings.home_set = Dom frakcji ustawiony na Twoją aktualną lokalizację! +settings.recruitment_set = Rekrutacja ustawiona na {0}. +settings.home_no_set = Twoja frakcja nie ma ustawionego domu. +settings.home_deleted = Dom frakcji usunięty! + +# ========== Strona modułów ========== +modules.title = Moduły frakcji +modules.description = Opcjonalne funkcje wzbogacające Twoją frakcję +modules.configure_btn = Konfiguruj +modules.back_btn = < Powrót do ustawień +modules.treasury_name = Skarbiec +modules.treasury_desc = Bank frakcji i system ekonomiczny +modules.raids_name = Najazdy +modules.raids_desc = Zaplanowane bitwy frakcyjne +modules.levels_name = Poziomy +modules.levels_desc = Postęp frakcji i doświadczenie +modules.war_name = Wojna +modules.war_desc = Formalne wypowiedzenia wojny +modules.coming_soon = Wkrótce +modules.active = Aktywny +modules.view_treasury = Pokaż skarbiec +modules.unavailable = Niedostępny +modules.no_economy = Nie wykryto wtyczki ekonomicznej +modules.disabled = Wyłączony +modules.economy_not_available = Funkcje ekonomiczne nie są dostępne na tym serwerze + +# ========== Strona skarbca ========== +treasury.title = Skarbiec frakcji +treasury.balance_label = Saldo +treasury.income_24h = Przychód (24h) +treasury.deposits_transfers_in = wpłaty, przelewy przychodzące +treasury.expenses_24h = Wydatki (24h) +treasury.withdrawals_transfers_out = wypłaty, przelewy wychodzące +treasury.maintenance = UTRZYMANIE +treasury.runway_label = Rezerwa: +treasury.add_funds = Dodaj środki +treasury.deposit_btn = Wpłać +treasury.take_funds = Pobierz środki +treasury.withdraw_btn = Wypłać +treasury.send_to_faction = Wyślij do frakcji +treasury.transfer_btn = Przelej +treasury.treasury_config = Ustawienia skarbca +treasury.settings_btn = Ustawienia +treasury.recent_transactions = Ostatnie transakcje +treasury.no_transactions = Brak transakcji +treasury.col_date = Data +treasury.col_type = Typ +treasury.col_by = Przez +treasury.col_amount = Kwota +treasury.col_details = Szczegóły +treasury.pay_now_btn = Zapłać teraz +treasury.cost_7d = 7d: +treasury.cost_14d = 14d: +treasury.cost_30d = 30d: +treasury.settings_title = Ustawienia skarbca +treasury.officer_permissions = UPRAWNIENIA OFICERÓW +treasury.allow_withdraw = Zezwól oficerom na wypłaty +treasury.allow_transfer = Zezwól oficerom na przelewy +treasury.limits_section = LIMITY WYPŁAT I PRZELEWÓW +treasury.max_per_withdrawal = Maks. na wypłatę: +treasury.max_withdrawals_per = Maks. wypłat w okresie: +treasury.max_per_transfer = Maks. na przelew: +treasury.max_transfers_per = Maks. przelewów w okresie: +treasury.limit_period = Okres limitu (godziny): +treasury.no_limit_hint = Ustaw 0, aby nie było limitu +treasury.upkeep_settings = USTAWIENIA UTRZYMANIA +treasury.auto_pay_upkeep = Automatycznie opłacaj utrzymanie ze skarbca +treasury.back_btn = Wstecz +treasury.upkeep_cost_format = {0} co {1}h +treasury.upkeep_time_left = pozostało {0} +treasury.wallet_label = Twój portfel: {0} +treasury.treasury_label = Saldo skarbca: {0} +treasury.chunks_detail = {0} darmowych + {1} płatnych chunków +treasury.cost_label = Koszt: {0} +treasury.pending = Oczekujące +treasury.auto_pay_on = Automatyczna płatność: WŁ. +treasury.auto_pay_off = Automatyczna płatność: WYŁ. +treasury.runway_90_plus = 90+ dni +treasury.runway_days = {0} dni +treasury.runway_day = {0} dzień +treasury.runway_less_day = < 1 dzień +treasury.runway_no_funds = Brak środków +treasury.grace_expires = Okres karencji wygasa za: {0} +treasury.missed_payments = Pominięte płatności: {0} +treasury.pay_to_clear = Zapłać {0}, aby wyczyścić okres karencji +treasury.system = System +treasury.type_deposit = Wpłata +treasury.type_withdrawal = Wypłata +treasury.type_transfer_in = Przelew przychodzący +treasury.type_transfer_out = Przelew wychodzący +treasury.type_player_transfer = Przelew gracza +treasury.type_upkeep = Utrzymanie +treasury.type_tax = Pobór podatku +treasury.type_war_cost = Koszt wojny +treasury.type_raid_cost = Koszt najazdu +treasury.type_spoils = Łupy +treasury.type_admin = Korekta admina +treasury.deposit_title = Wpłata do skarbca +treasury.withdraw_title = Wypłata ze skarbca +treasury.fee_label = Opłata ({0}%) +treasury.confirm_deposit = Potwierdź wpłatę +treasury.confirm_withdrawal = Potwierdź wypłatę +treasury.from_wallet = {0} z portfela +treasury.to_wallet = {0} do portfela +treasury.enter_valid_amount = Wprowadź prawidłową dodatnią kwotę. +treasury.insufficient_wallet = Niewystarczające środki w portfelu. Potrzeba {0}, posiadasz {1}. +treasury.wallet_withdraw_failed = Nie udało się pobrać środków z portfela. +treasury.deposit_failed_returned = Wpłata nieudana. Pieniądze zwrócone. +treasury.deposited = Wpłacono {0} do skarbca. +treasury.deposited_fee = Wpłacono {0} do skarbca. (opłata: {1}) +treasury.no_withdraw_permission = Nie masz uprawnień do wypłacania. +treasury.withdraw_denied = Wypłata odrzucona: {0} +treasury.insufficient_treasury = Niewystarczające środki w skarbcu. +treasury.withdraw_limit = Przekroczono limit wypłat. +treasury.withdraw_failed = Wypłata nieudana: {0} +treasury.wallet_deposit_warn = Uwaga: Nie udało się wpłacić do portfela. Skontaktuj się z administratorem. +treasury.withdrew = Wypłacono {0} ze skarbca. +treasury.withdrew_fee = Wypłacono {0} ze skarbca. (opłata: {1}, otrzymano: {2}) +treasury.search_hint = Wyszukaj gracza lub frakcję +treasury.no_results = Brak wyników dla '{0}' +treasury.tag_player = [Gracz] +treasury.tag_faction = [Frakcja] +treasury.source_online = Online +treasury.source_offline = Offline +treasury.source_player_db = Gracz Hytale +treasury.no_transfer_permission = Nie masz uprawnień do przelewów. +treasury.transfer_denied = Przelew odrzucony: {0} +treasury.invalid_target_faction = Nieprawidłowa frakcja docelowa. +treasury.target_faction_gone = Frakcja docelowa już nie istnieje. +treasury.transfer_failed = Przelew nieudany: {0} +treasury.transfer_failed_returned = Przelew nieudany. Środki zwrócone. +treasury.transferred = Przelano {0} do {1}. +treasury.invalid_target_player = Nieprawidłowy gracz docelowy. +treasury.player_transfer_failed = Nie udało się wpłacić do portfela gracza. Przelew wycofany. +treasury.leader_only_perms = Tylko przywódca może zmieniać uprawnienia skarbca. +treasury.leader_only_upkeep = Tylko przywódca może zmieniać ustawienia utrzymania. +treasury.invalid_limit = Nieprawidłowa liczba w polach limitu. Użyj 0 dla braku limitu. + +# ========== Strony potwierdzeń ========== +confirm.disband_title = Rozwiązanie frakcji +confirm.disband_prompt = Czy na pewno chcesz rozwiązać +confirm.disband_warning = Ta akcja nie może być cofnięta! +confirm.leave_title = Opuszczenie frakcji +confirm.leave_prompt = Czy na pewno chcesz opuścić +confirm.leave_warning = Stracisz dostęp do terytorium frakcji. +confirm.leader_leave_title = Opuszczenie jako przywódca +confirm.leader_leave_prompt = Opuszczasz +confirm.transfer_title = Przekazanie przywództwa +confirm.transfer_prompt = Czy na pewno chcesz przekazać przywództwo graczowi +confirm.transfer_warning = Staniesz się Oficerem. +confirm.disband_not_leader = Tylko przywódca może rozwiązać frakcję. +confirm.disbanded = Frakcja '{0}' została rozwiązana. +confirm.disband_failed = Nie udało się rozwiązać frakcji. +confirm.succession_title = Przywództwo zostanie przekazane: +confirm.no_members_warning = UWAGA: Brak innych członków! +confirm.will_disband = Opuszczenie spowoduje trwałe rozwiązanie frakcji. +confirm.not_in_faction = Nie należysz do tej frakcji. +confirm.not_leader_anymore = Nie jesteś już przywódcą. +confirm.no_successor = Brak następcy. Użyj rozwiązania. +confirm.transfer_failed = Nie udało się przekazać przywództwa: {0} +confirm.leader_left = Przywództwo przekazane graczowi {0}. Opuściłeś {1}. +confirm.leave_failed = Nie udało się opuścić frakcji: {0} +confirm.leader_cannot_leave = Przywódca nie może opuścić frakcji. Przekaż przywództwo lub rozwiąż frakcję. +confirm.left_faction = Opuściłeś {0}. +confirm.faction_gone = Frakcja już nie istnieje. +confirm.not_leader_transfer = Tylko przywódca może przekazać przywództwo. +confirm.leadership_transferred = Przywództwo przekazane graczowi {0}. + +# ========== Strona dziennika aktywności ========== +logs.title = {0} - Dziennik aktywności +logs.entry_count = {0} wpisów +logs.filter_label = Filtr: +logs.col_time = Czas +logs.col_type = Typ +logs.col_message = Wiadomość +logs.prev_btn = < Poprz. +logs.next_btn = Nast. > +logs.all_types = Wszystkie typy +logs.no_logs_type = Brak logów tego typu. +logs.no_logs = Brak logów aktywności. +logs.time_just_now = przed chwilą +logs.time_minute = {0} minutę temu +logs.time_minutes = {0} minut temu +logs.time_hour = {0} godzinę temu +logs.time_hours = {0} godzin temu +logs.time_day = {0} dzień temu +logs.time_days = {0} dni temu +logs.time_week = {0} tydzień temu +logs.time_weeks = {0} tygodni temu +logs.type_member_join = Dołączenie +logs.type_member_leave = Odejście +logs.type_member_kick = Wyrzucenie +logs.type_member_promote = Awans +logs.type_member_demote = Degradacja +logs.type_claim = Zajęcie +logs.type_unclaim = Zrzeczenie +logs.type_overclaim = Przejęcie +logs.type_home_set = Ustawienie domu +logs.type_relation_ally = Sojusznik +logs.type_relation_enemy = Wróg +logs.type_relation_neutral = Neutralny +logs.type_leader_transfer = Przekazanie +logs.type_settings_change = Ustawienia +logs.type_power_change = Moc +logs.type_economy = Ekonomia +logs.type_admin_power = Moc (Admin) + +# Szablony wiadomości dziennika (i18n dla treści logów aktywności) +# Akcje graczy +logs.msg_faction_created = {0} utworzył(a) frakcję +logs.msg_member_joined = {0} dołączył(a) do frakcji +logs.msg_member_left = {0} opuścił(a) frakcję +logs.msg_member_kicked = {0} został(a) wyrzucony(a) +logs.msg_member_promoted = {0} awansowany(a) na {1} +logs.msg_member_demoted = {0} zdegradowany(a) do {1} +logs.msg_leader_transferred = Przywództwo przekazane graczowi {0} +logs.msg_leader_left_transfer = {0} odszedł/odeszła, {1} jest teraz przywódcą +logs.msg_relation_set = Ustawiono {0} jako {1} +# Terytorium +logs.msg_claimed = Zajęto chunk na {0}, {1} w {2} +logs.msg_unclaimed = Zrzeczono się chunka na {0}, {1} w {2} +logs.msg_overclaim_lost = Utracono chunk na {0}, {1} na rzecz {2} +logs.msg_overclaim_taken = Przejęto chunk na {0}, {1} od {2} +logs.msg_all_unclaimed = Zrzeczono się całego terytorium +logs.msg_claim_removed_world = Teren w '{0}' usunięty (świat nie zezwala na zajmowanie) +logs.msg_claims_lost_upkeep = Utracono {0} teren(ów) z powodu utrzymania (pominięto {1} płatności) +logs.msg_claims_removed_inactive = {0} terenów usunięto z powodu nieaktywności ({1} dni) +# Dom +logs.msg_home_set = Dom ustawiony +logs.msg_home_cleared = Dom usunięty +logs.msg_home_cleared_world = Dom w '{0}' usunięty (świat nie zezwala na zajmowanie) +# Ustawienia +logs.msg_renamed = Zmieniono nazwę z '{0}' na '{1}' +logs.msg_set_open = Frakcja ustawiona jako otwarta +logs.msg_set_closed = Frakcja ustawiona jako tylko na zaproszenie +logs.msg_desc_set = Opis ustawiony +logs.msg_desc_cleared = Opis wyczyszczony +logs.msg_color_changed = Kolor zmieniony na '{0}' +# Ekonomia +logs.msg_deposit = Wpłata: {0} (+{1}) +logs.msg_withdrawal = Wypłata: {0} (-{1}) +logs.msg_upkeep_paid = Utrzymanie opłacone: {0} ({1} płatnych chunków) +logs.msg_upkeep_grace_started = Utrzymanie nieopłacone: rozpoczęto okres karencji ({0}h) +logs.msg_upkeep_missed = Utrzymanie pominięte (płatność {0}), karencja wygasa za {1} +logs.msg_upkeep_manual = Utrzymanie opłacone ręcznie: {0} ({1} płatnych chunków, karencja wyczyszczona) +# Moc admina +logs.msg_admin_power_set = Admin ustawił moc {0} na {1} (było {2}) +logs.msg_admin_power_add = Admin dodał {0} mocy graczowi {1} ({2} -> {3}) +logs.msg_admin_power_remove = Admin zabrał {0} mocy graczowi {1} ({2} -> {3}) +logs.msg_admin_power_reset = Admin zresetował moc {0} do {1} (było {2}) +logs.msg_admin_power_adjusted = Admin dostosował moc {0} o {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin ustawił maks. moc {0} na {1} (było {2}) +logs.msg_admin_maxpower_reset = Admin zresetował maks. moc {0} do domyślnej wartości ({1}) +logs.msg_admin_powerloss_enabled = Admin włączył utratę mocy dla {0} +logs.msg_admin_powerloss_disabled = Admin wyłączył utratę mocy dla {0} +logs.msg_admin_decay_enabled = Admin włączył zwolnienie z rozpadu terenów dla {0} +logs.msg_admin_decay_disabled = Admin wyłączył zwolnienie z rozpadu terenów dla {0} +logs.msg_admin_kd_reset = Admin zresetował Z/Ś dla {0} +logs.msg_admin_power_set_all = Admin ustawił moc wszystkich {0} członków na {1} +logs.msg_admin_power_add_all = Admin dodał {0} mocy wszystkim {1} członkom +logs.msg_admin_power_remove_all = Admin zabrał {0} mocy wszystkim {1} członkom +logs.msg_admin_power_reset_all = Admin zresetował moc wszystkich {0} członków +logs.msg_admin_power_adjusted_all = Admin dostosował moc wszystkich {0} członków o {1} +# Admin frakcji +logs.msg_admin_kicked = [Admin] {0} został(a) wyrzucony(a) +logs.msg_admin_role_set = [Admin] Ranga {0} ustawiona na {1} +logs.msg_admin_leader_kick = [Admin] Przywództwo przekazane z {0} na {1} (wyrzucenie admina) +logs.msg_admin_econ_added = Admin dodał: {0} (saldo: {1}) +logs.msg_admin_econ_deducted = Admin odjął: {0} (saldo: {1}) +logs.msg_admin_econ_set = Admin ustawił saldo na {0} (było {1}) +# Import +logs.msg_left_import = {0} odszedł/odeszła (zaimportowano do innej frakcji) +logs.msg_leader_import_transfer = {0} został przywódcą (poprzedni przywódca zaimportowany do innej frakcji) +logs.msg_imported_from = Frakcja zaimportowana z {0} + +# ========== Strona czatu ========== +chat.title = Czat frakcji +chat.tab_faction = Frakcja +chat.tab_ally = Sojusznik +chat.send_btn = Wyślij +chat.placeholder = Wpisz wiadomość... +chat.no_messages = Brak wiadomości. +chat.no_ally_permission = Nie masz uprawnień do czatu sojuszniczego. +chat.no_permission = Brak uprawnień. +chat.faction_gone = Twoja frakcja już nie istnieje. +chat.time_now = teraz +chat.time_minutes = {0}m +chat.time_hours = {0}h + +# ========== Strona zaproszeń ========== +invites.title = Zaproszenia +invites.tab_outgoing = Wysłane +invites.tab_requests = Prośby +invites.prev_btn = < Poprz. +invites.next_btn = Nast. > +invites.invite_count = {0} zaproszeń +invites.request_count = {0} próśb +invites.invited_by = Zaprosił: {0} +invites.no_message = Brak wiadomości +invites.expires = Wygasa: {0} +invites.type_outgoing = Wysłane +invites.type_request = Prośba +invites.invited_by_label = Zaprosił: +invites.empty_outgoing = Brak wysłanych zaproszeń. Użyj /f invite , aby kogoś zaprosić. +invites.empty_requests = Brak próśb o dołączenie. Gracze mogą prosić o dołączenie komendą /f request. +invites.invalid_player = Nieprawidłowy gracz. +invites.cancelled_invite = Anulowano zaproszenie dla {0}. +invites.player_joined = {0} dołączył(a) do frakcji! +invites.faction_full = Frakcja jest pełna. Nie można przyjąć prośby. +invites.add_failed = Nie udało się dodać gracza do frakcji. +invites.request_expired = Prośba nie została znaleziona lub wygasła. +invites.request_declined = Odrzucono prośbę o dołączenie od {0}. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}h +invites.label_message = Wiadomość: +invites.btn_cancel = Anuluj +invites.btn_accept = Akceptuj +invites.btn_decline = Odrzuć + +# ========== Strona mapy ========== +map.title = Mapa terytorium +map.action_hint = Lewy klik: Zajmij | Prawy klik: Zrzecz się +map.legend_your = Twoje terytorium +map.legend_ally = Terytorium sojusznika +map.legend_enemy = Terytorium wroga +map.legend_other = Inna frakcja +map.legend_wilderness = Dzicz +map.legend_safe = Strefa bezpieczna +map.legend_war = Strefa wojenna +map.legend_you = Jesteś tutaj +map.position = Twoja pozycja: Chunk ({0}, {1}) +map.legend_protected = Chronione +map.claim_stats = Tereny: {0}/{1} ({2} dostępnych) +map.overclaimed = PRZEJĘTE przez {0}! +map.power_display = Moc: {0}/{1} +map.join_to_claim = Dołącz do frakcji, aby zajmować teren +map.claim_success = Zajęto chunk na ({0}, {1})! +map.claim_not_in_faction = Musisz należeć do frakcji, aby zajmować teren. +map.claim_not_officer = Tylko oficerowie i przywódca mogą zajmować teren. +map.claim_already_yours = Już posiadasz ten chunk. +map.claim_already_claimed = Ten chunk jest już zajęty przez inną frakcję. +map.claim_not_adjacent = Możesz zajmować tylko chunki przylegające do Twojego terytorium. +map.claim_max = Osiągnąłeś maksymalny limit terenów. +map.claim_world_not_allowed = Zajmowanie terenu jest niedozwolone w tym świecie. +map.claim_orbisguard = Ten obszar jest chroniony przez OrbisGuard. +map.claim_failed = Nie udało się zająć chunka. +map.unclaim_success = Zrzeczono się chunka na ({0}, {1}). +map.unclaim_not_in_faction = Musisz należeć do frakcji. +map.unclaim_not_officer = Tylko oficerowie i przywódca mogą zrzekać się terenu. +map.unclaim_not_claimed = Ten chunk nie jest zajęty. +map.unclaim_not_yours = Ten chunk należy do innej frakcji. +map.unclaim_home = Nie można zrzec się chunka z domem frakcji. +map.unclaim_failed = Nie udało się zrzec chunka. +map.overclaim_success = Przejęto wrogi chunk na ({0}, {1})! +map.overclaim_not_in_faction = Musisz należeć do frakcji. +map.overclaim_not_officer = Tylko oficerowie i przywódca mogą przejmować teren. +map.overclaim_already_yours = Już posiadasz ten chunk. +map.overclaim_ally = Nie możesz przejąć terytorium sojusznika. +map.overclaim_has_power = Ta frakcja ma wystarczająco mocy, aby obronić swoje terytorium. +map.overclaim_max = Osiągnąłeś maksymalny limit terenów. +map.overclaim_failed = Nie udało się przejąć chunka. +# ========== Strona tworzenia frakcji ========== +create.title = Utwórz swoją frakcję +create.section_preview = Podgląd +create.section_basic_info = Podstawowe informacje +create.section_details = Szczegóły +create.name_prefix = Nazwa: +create.faction_name_label = Nazwa frakcji * +create.tag_label = TAG (2-4 znaki, auto jeśli puste) +create.desc_label = Opis (opcjonalny) +create.recruitment_label = Rekrutacja +create.section_faction_color = Kolor frakcji +create.section_combat = Walka +create.create_btn = Utwórz frakcję +create.preview_name = Nazwa Twojej frakcji +create.leader_prefix = Przywódca: {0} +create.enter_name = Wprowadź nazwę frakcji. +create.name_too_short = Nazwa frakcji musi mieć co najmniej {0} znaków. +create.name_too_long = Nazwa frakcji nie może przekraczać {0} znaków. +create.name_taken = Frakcja o tej nazwie już istnieje. +create.tag_length = Tag frakcji musi mieć od {0} do {1} znaków. +create.tag_format = Tag frakcji może zawierać tylko litery i cyfry. +create.desc_too_long = Opis nie może przekraczać {0} znaków. +create.created = Frakcja {0} utworzona pomyślnie! +create.created_no_dashboard = Frakcja utworzona, ale nie udało się otworzyć pulpitu. +create.invalid_name = Nieprawidłowa nazwa frakcji. +create.create_failed = Nie udało się utworzyć frakcji. + +# ========== Strony nowego gracza ========== +newplayer.browse_title = Przeglądaj frakcje +newplayer.invites_title = Zaproszenia i prośby +newplayer.map_title = Mapa terytorium +newplayer.view_only_badge = Tryb podglądu +newplayer.legend_label = Legenda: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Frakcja +newplayer.legend_wilderness = Dzicz +newplayer.search_label = Szukaj: +newplayer.sort_label = Sortuj: +newplayer.prev_btn = < Poprz. +newplayer.next_btn = Nast. > +newplayer.pending_count = {0} oczekujących +newplayer.received_header = OTRZYMANE ZAPROSZENIA ({0}) +newplayer.requests_header = TWOJE PROŚBY ({0}) +newplayer.no_invites = Brak zaproszeń. Przeglądaj frakcje, aby znaleźć odpowiednią! +newplayer.no_requests = Brak oczekujących próśb. +newplayer.invited_by = Zaprosił: {0} +newplayer.member_count = {0} członków +newplayer.power_count = {0} mocy +newplayer.claim_count = {0} terenów +newplayer.awaiting_review = Oczekuje na rozpatrzenie +newplayer.expires_in = Wygasa za {0}h +newplayer.time_just_now = przed chwilą +newplayer.time_minutes = {0} min temu +newplayer.time_hours = {0}h temu +newplayer.time_days = {0}d temu +newplayer.invalid_faction = Nieprawidłowa frakcja. +newplayer.invite_expired = To zaproszenie wygasło lub zostało cofnięte. +newplayer.faction_gone = Frakcja już nie istnieje. +newplayer.joined = Dołączyłeś do {0}! +newplayer.faction_full = Ta frakcja jest pełna. +newplayer.join_failed = Nie udało się dołączyć do frakcji. +newplayer.invite_declined = Zaproszenie odrzucone. +newplayer.request_cancelled = Anulowano prośbę o dołączenie do {0}. +newplayer.faction_count = {0} frakcji +newplayer.browse_subtitle = Znajdź swój nowy dom! +newplayer.sort_power = Moc +newplayer.sort_name = Nazwa +newplayer.sort_members = Członkowie +newplayer.btn_accept = Akceptuj +newplayer.btn_pending = Oczekujące +newplayer.btn_join = Dołącz +newplayer.btn_request = Poproś +newplayer.invite_only_msg = Ta frakcja przyjmuje tylko na zaproszenie. +newplayer.welcome_hint = Witaj! Użyj /f, aby otworzyć menu frakcji. +newplayer.faction_open_hint = Ta frakcja jest otwarta! Kliknij DOŁĄCZ. +newplayer.already_requested = Masz już oczekującą prośbę do tej frakcji. +newplayer.has_invite_hint = Masz zaproszenie od tej frakcji! Kliknij AKCEPTUJ. +newplayer.request_sent = Prośba o dołączenie wysłana do {0}! +newplayer.officer_review = Oficer rozpatrzy Twoją prośbę. +newplayer.map_hint = Tryb podglądu — Dołącz do frakcji, aby zajmować teren! + +# Ustawienia gracza +nav.player_settings = Gracz +player_settings.title = Ustawienia gracza +player_settings.language_section = Język +player_settings.auto_detect = Automatyczne wykrywanie z klienta +player_settings.auto_detect_desc = Używa ustawień języka Twojego klienta gry +player_settings.language_label = Język +player_settings.notifications_section = Powiadomienia +player_settings.territory_alerts = Alerty terytorialne +player_settings.territory_alerts_desc = Pokaż powiadomienia przy wchodzeniu/opuszczaniu terytoriów +player_settings.death_announcements = Ogłoszenia o śmierci +player_settings.death_announcements_desc = Otrzymuj ogłoszenia o lokalizacji śmierci członków frakcji +player_settings.power_notifications = Zmiany mocy +player_settings.power_notifications_desc = Pokaż wiadomości przy zmianach Twojej mocy +player_settings.language_changed = Język zmieniony na {0} +player_settings.pref_enabled = {0} włączone +player_settings.pref_disabled = {0} wyłączone + +# ========== Strony pomocy ========== +help.center_title = Centrum pomocy +help.getting_started_title = Pierwsze kroki +help.what_are_factions_title = Czym są frakcje? +help.what_are_factions_1 = Frakcje to grupy tworzone przez graczy, które współpracują, +help.what_are_factions_2 = aby zajmować terytorium, budować bazy i rywalizować. +help.what_are_factions_bullet_1 = - Chronione terytorium do budowania +help.what_are_factions_bullet_2 = - Członkowie drużyny do wspólnej gry +help.what_are_factions_bullet_3 = - Dostęp do czatu frakcji i funkcji +help.joining_title = Dołączanie do frakcji +help.joining_desc = Istnieje kilka sposobów dołączenia do frakcji: +help.joining_bullet_1 = - Przeglądaj — Znajdź otwarte frakcje i kliknij DOŁĄCZ +help.joining_bullet_2 = - Zaproszenia — Akceptuj zaproszenia od oficerów +help.joining_bullet_3 = - Prośba — Poproś o dołączenie do frakcji na zaproszenie +help.creating_title = Tworzenie frakcji +help.creating_desc = Przejdź do zakładki Utwórz, aby założyć własną frakcję. +help.creating_bullet_1 = - Zapraszaj i zarządzaj członkami +help.creating_bullet_2 = - Zajmuj i chroń terytorium +help.commands_title = Szybkie komendy +help.cmd_f = /f - Otwórz menu frakcji +help.cmd_f_list = /f list - Lista wszystkich frakcji +help.cmd_f_join = /f join - Dołącz do otwartej frakcji +help.cmd_f_create = /f create - Utwórz nową frakcję +help.cmd_f_help = /f help - Pełna lista komend +help.tip = Wskazówka: Przeglądaj frakcje, aby znaleźć grupę pasującą do Ciebie! diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..4a2915a2 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Sistema de Configuração + +HyperFactions usa um sistema de configuração modular em JSON com 11 arquivos de configuração. + +## Comandos de Configuração Admin + +| Comando | Descrição | +|---------|-----------| +| `/f admin config` | Abrir a GUI do editor visual de configuração | +| `/f admin reload` | Recarregar todos os arquivos de configuração do disco | +| `/f admin sync` | Sincronizar dados de facção com o armazenamento | + +## Arquivos de Configuração + +| Arquivo | Conteúdo | +|---------|----------| +| `factions.json` | Cargos, poder, reivindicações, combate, relações | +| `server.json` | Teleporte, salvamento automático, mensagens, GUI, permissões | +| `economy.json` | Tesouro, manutenção, configurações de transação | +| `backup.json` | Rotação e retenção de backups | +| `chat.json` | Formatação de chat de facção e aliados | +| `debug.json` | Categorias de log de debug | +| `faction-permissions.json` | Padrões de permissão por cargo | +| `announcements.json` | Transmissões de eventos e notificações de território | +| `gravestones.json` | Configurações de integração com lápides | +| `worldmap.json` | Modos de atualização do mapa do mundo | +| `worlds.json` | Sobrescritas de comportamento por mundo | + +>[!TIP] A GUI de configuração fornece um editor visual com descrições para cada configuração. Alterações são salvas imediatamente, mas algumas requerem `/f admin reload` para entrar em pleno efeito. + +## Localização das Configurações + +Todos os arquivos são armazenados em: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Edições manuais em JSON requerem `/f admin reload` para serem aplicadas. JSON inválido fará com que o arquivo seja ignorado com um aviso no log do servidor. + +>[!NOTE] A versão da configuração é rastreada em `server.json`. O plugin migra automaticamente configurações antigas na inicialização. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..eea4ae15 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Configurações por Mundo + +HyperFactions suporta configuração por mundo para reivindicação, PvP e comportamento de proteção. + +## Comandos de Mundo + +| Comando | Descrição | +|---------|-----------| +| `/f admin world list` | Listar todas as sobrescritas de mundo | +| `/f admin world info ` | Mostrar configurações de um mundo | +| `/f admin world set ` | Definir uma configuração | +| `/f admin world reset ` | Resetar mundo para os padrões | + +## Configurações Disponíveis + +| Configuração | Tipo | Descrição | +|--------------|------|-----------| +| claiming_enabled | boolean | Permitir reivindicações de facção neste mundo | +| pvp_enabled | boolean | Permitir combate PvP neste mundo | +| power_loss | boolean | Aplicar perda de poder ao morrer | +| build_protection | boolean | Aplicar proteção de construção em reivindicações | +| explosion_protection | boolean | Proteger reivindicações de explosões | + +## Whitelist / Blacklist de Mundos + +Controle quais mundos permitem recursos de facção através do arquivo de configuração `worlds.json`: + +- **Modo whitelist**: Apenas mundos listados permitem reivindicação +- **Modo blacklist**: Todos os mundos permitem reivindicação exceto os listados + +>[!INFO] Configurações de mundo são armazenadas em `worlds.json` e sobrescrevem os padrões globais de `factions.json`. + +## Exemplos + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- restaurar todos os padrões + +>[!TIP] Desative reivindicação em mundos criativos ou de lobby para manter o sistema de facções focado na jogabilidade de sobrevivência. + +>[!NOTE] Configurações por mundo têm prioridade sobre a configuração global, mas são sobrescritas por flags de zona dentro daquele mundo. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..cc226a88 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Gerenciamento do Tesouro + +Comandos de admin para gerenciar tesouros de facção. Requer a permissão `hyperfactions.admin.economy`. + +## Comandos do Tesouro + +| Comando | Descrição | +|---------|-----------| +| `/f admin economy balance ` | Ver saldo do tesouro da facção | +| `/f admin economy set ` | Definir saldo exato | +| `/f admin economy add ` | Adicionar fundos ao tesouro | +| `/f admin economy take ` | Remover fundos do tesouro | +| `/f admin economy reset ` | Resetar tesouro para zero | + +## Exemplos + +- `/f admin economy balance Vikings` -- verificar saldo +- `/f admin economy set Vikings 5000` -- definir para 5000 +- `/f admin economy add Vikings 1000` -- depositar 1000 +- `/f admin economy take Vikings 500` -- sacar 500 +- `/f admin economy reset Vikings` -- zerar saldo + +>[!TIP] Use `/f admin info ` para ver a visão geral completa da economia incluindo histórico de transações junto com o saldo do tesouro. + +## Casos de Uso + +| Cenário | Comando | +|---------|---------| +| Distribuição de prêmio de evento | `economy add ` | +| Penalidade por violação de regra | `economy take ` | +| Reset de economia após wipe | `economy reset ` | +| Compensação por bugs | `economy add ` | + +>[!WARNING] Alterações no tesouro são registradas no histórico de transações da facção. Modificações de admin são registradas com o nome do admin para prestação de contas. + +>[!NOTE] Todos os comandos de admin de economia funcionam mesmo quando o módulo de economia está desativado na configuração. Os dados são armazenados independentemente do status do módulo. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..d673b421 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Gerenciamento de Manutenção + +A manutenção de facção cobra das facções periodicamente com base em seu território e número de membros. + +## Controles de Admin + +As configurações de manutenção são gerenciadas através do arquivo de configuração de economia ou pela GUI de configuração do admin. + +`/f admin config` +Abra o editor de configuração e navegue até as configurações de economia para ajustar os valores de manutenção. + +## Configurações Padrão de Manutenção + +| Configuração | Padrão | Descrição | +|--------------|--------|-----------| +| Manutenção ativada | false | Botão mestre do sistema | +| Intervalo de manutenção | 24h | Frequência da cobrança | +| Custo por reivindicação | 5.0 | Custo por chunk reivindicado por ciclo | +| Custo por membro | 0.0 | Custo por membro por ciclo | +| Período de carência | 72h | Facções novas são isentas | +| Dissolver se falida | false | Dissolução automática se não puder pagar | + +## Monitorando a Manutenção + +Use `/f admin info ` para ver: +- Saldo atual do tesouro +- Custo estimado de manutenção por ciclo +- Tempo até a próxima cobrança de manutenção +- Se a facção pode arcar com a manutenção + +>[!TIP] Revise as estatísticas de economia de todas as facções pelo painel de admin para identificar facções em risco de falência antes que a manutenção seja cobrada. + +>[!INFO] A configuração de manutenção é armazenada em `economy.json`. Alterações feitas pela GUI de configuração entram em vigor após recarregar com `/f admin reload`. + +## Fórmula de Manutenção + +**Manutenção total** = (chunks reivindicados x custo por reivindicação) + (número de membros x custo por membro) + +>[!WARNING] Ativar a manutenção em um servidor com facções existentes pode causar falências inesperadas. Considere definir um período de carência ou anunciar a mudança com antecedência. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..d1c830ea --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Dissolução Forçada + +Admins podem dissolver forçadamente qualquer facção, independentemente da vontade do líder. + +## Comando + +`/f admin disband ` +Dissolve forçadamente a facção nomeada. Uma confirmação aparecerá antes da ação ser executada. + +**Permissão**: `hyperfactions.admin.disband` + +>[!WARNING] Dissolver uma facção é **irreversível**. Todas as reivindicações são liberadas, todos os membros são removidos, e a facção deixa de existir. Crie um backup antes. + +## Consequências + +Quando uma facção é dissolvida: + +| Efeito | Descrição | +|--------|-----------| +| **Reivindicações** | Todo o território é liberado imediatamente | +| **Membros** | Todos os jogadores são removidos da lista | +| **Relações** | Todas as alianças e inimizades são removidas | +| **Tesouro** | Tratado conforme configurações de economia | +| **Base** | A base da facção é excluída | +| **Chat** | O histórico de chat da facção é removido | + +## Boas Práticas + +1. Sempre execute `/f admin backup create` antes de dissolver +2. Notifique os membros da facção quando possível +3. Documente o motivo para os registros do servidor +4. Verifique `/f admin info ` para revisar antes de agir + +>[!TIP] Se o problema é com um membro específico, considere usar a GUI de admin de facções para transferir a liderança em vez de dissolver a facção inteira. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..6b0a6673 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Gerenciando Facções + +Admins podem inspecionar e modificar qualquer facção no servidor através do painel ou comandos. + +## Navegando por Facções + +`/f admin factions` +Abre o navegador de facções do admin. Veja todas as facções com contagem de membros, níveis de poder e território. + +`/f admin info ` +Abre o painel de informações do admin para uma facção específica com todos os detalhes e opções de gerenciamento. + +## Modificando Configurações da Facção + +Com a permissão `hyperfactions.admin.modify`, você pode: + +- **Renomear** uma facção para resolver conflitos +- **Definir cor** para corrigir problemas de exibição +- **Alternar aberta/fechada** para sobrescrever a política de entrada +- **Editar descrição** para fins de moderação + +>[!TIP] Use `/f admin who ` para descobrir a qual facção um jogador específico pertence e ver seus detalhes. + +## Visualizando Membros e Relações + +O painel de informações do admin mostra: + +| Seção | Detalhes | +|-------|----------| +| **Membros** | Lista completa com cargos e última vez visto | +| **Relações** | Todas as posições de aliado, inimigo e neutro | +| **Território** | Chunks reivindicados e balanço de poder | +| **Economia** | Saldo do tesouro e log de transações | + +>[!NOTE] Comandos de inspeção de admin não notificam a facção sendo visualizada. Apenas modificações disparam alertas. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..407c054a --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Sistema de Backup + +HyperFactions inclui backups automáticos e manuais com rotação GFS (Avô-Pai-Filho). + +## Comandos de Backup + +| Comando | Descrição | +|---------|-----------| +| `/f admin backup create` | Criar um backup manual agora | +| `/f admin backup list` | Listar todos os backups disponíveis | +| `/f admin backup restore ` | Restaurar a partir de um backup | +| `/f admin backup delete ` | Excluir um backup específico | + +**Permissão**: `hyperfactions.admin.backup` + +## Padrões de Rotação GFS + +| Tipo | Retenção | Descrição | +|------|----------|-----------| +| Por hora | 24 | Últimos 24 snapshots por hora | +| Diário | 7 | Últimos 7 snapshots diários | +| Semanal | 4 | Últimos 4 snapshots semanais | +| Manual | 10 | Backups criados manualmente | +| Desligamento | 5 | Criados ao parar o servidor | + +>[!INFO] Backups de desligamento são ativados por padrão (`onShutdown=true`). Eles capturam o estado mais recente antes do servidor parar. + +## Conteúdo do Backup + +Cada arquivo ZIP de backup contém: +- Todos os arquivos de dados de facção +- Dados de poder dos jogadores +- Definições de zonas +- Histórico de chat e dados de economia +- Dados de convites e solicitações de entrada +- Arquivos de configuração + +>[!WARNING] **Restaurar um backup é destrutivo.** Ele substitui todos os dados atuais pelo conteúdo do backup. Quaisquer alterações feitas após a criação do backup serão perdidas. Sempre crie um backup novo antes de restaurar. + +## Boas Práticas + +1. Crie um backup manual antes de ações importantes de admin +2. Revise a retenção de backups em `backup.json` +3. Teste a restauração em um servidor de testes primeiro +4. Mantenha backups de desligamento ativados para recuperação de falhas diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..fb39bfb6 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Importação de Dados + +Importe dados de facção de outros plugins para migrar seu servidor para o HyperFactions. + +## Comando de Importação + +`/f admin import [path] [flags]` + +**Permissão**: `hyperfactions.admin.use` + +## Fontes Suportadas + +| Fonte | Descrição | +|-------|-----------| +| `elbaphfactions` | Importar dados do ElbaphFactions | +| `hyfactions` | Importar dados do HyFactions v1 | + +## Flags de Importação + +| Flag | Descrição | +|------|-----------| +| `--dry-run` | Validar dados sem importar nada | +| `--overwrite` | Sobrescrever facções existentes com o mesmo nome | +| `--no-zones` | Pular dados de zona durante a importação | +| `--no-power` | Pular dados de poder durante a importação | + +>[!TIP] Sempre execute com `--dry-run` primeiro para pré-visualizar o que será importado e detectar problemas nos dados antes de confirmar as alterações. + +## Processo de Importação + +1. Um backup pré-importação é criado automaticamente +2. Mapeamentos de nomes de jogadores são carregados +3. Facções, reivindicações e zonas são convertidas +4. Os dados são validados e salvos + +## Exemplos + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Usar `--overwrite` irá **substituir** qualquer facção existente que compartilhe um nome com uma facção importada. Dados de membros e reivindicações serão sobrescritos. Execute com `--dry-run` primeiro para identificar conflitos. + +>[!NOTE] Alguns dados específicos da fonte (ex.: worker plots, farm plots) não têm equivalente no HyperFactions e serão registrados como avisos durante a importação. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..67a8be5a --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Verificação de Atualizações + +HyperFactions pode verificar por novas versões e gerenciar a dependência HyperProtect-Mixin. + +## Comandos de Atualização + +| Comando | Descrição | +|---------|-----------| +| `/f admin update` | Verificar atualizações do HyperFactions | +| `/f admin update mixin` | Verificar/baixar HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Alternar download automático | +| `/f admin version` | Mostrar versão atual e informações de build | + +## Canais de Lançamento + +| Canal | Descrição | +|-------|-----------| +| **Stable** | Recomendado para servidores de produção | +| **Pre-release** | Acesso antecipado a recursos futuros | + +>[!INFO] O verificador de atualizações apenas notifica sobre novas versões. Ele **não** instala atualizações do HyperFactions automaticamente. + +## HyperProtect-Mixin + +HyperProtect-Mixin é o mixin de proteção recomendado que habilita flags avançadas de zona (explosões, propagação de fogo, manter inventário, etc.). + +- `/f admin update mixin` verifica a versão mais recente +e baixa se uma versão mais nova estiver disponível +- O download automático pode ser ativado ou desativado por servidor + +>[!TIP] Após baixar uma nova versão do mixin, é necessário reiniciar o servidor para que as alterações entrem em vigor. + +## Procedimento de Rollback + +Se uma atualização causar problemas: + +1. Pare o servidor +2. Substitua o JAR do plugin pela versão anterior +3. Inicie o servidor +4. Verifique o funcionamento com `/f admin version` + +>[!WARNING] Fazer downgrade pode requerer um reset de migração de configuração. Sempre mantenha backups antes de atualizar. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..94b9ef17 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Primeiros Passos como Admin + +Bem-vindo à administração do HyperFactions. Este guia cobre seus primeiros passos após instalar o plugin. + +## Abrindo o Painel de Admin + +`/f admin` +Abre a GUI do painel de administração com acesso a todas as ferramentas de gerenciamento, editores de zona e configurações do servidor. + +>[!INFO] Você precisa da permissão **hyperfactions.admin.use** ou status de OP para acessar comandos de admin. + +## Requisitos + +- **Com um plugin de permissões**: Conceda `hyperfactions.admin.use` +- **Sem um plugin de permissões**: O jogador deve ser um +operador do servidor (`adminRequiresOp=true` por padrão) + +## Primeiros Passos Após a Instalação + +1. Execute `/f admin` para verificar seu acesso +2. Abra **Config** para revisar as configurações padrão de facção +3. Crie uma **SafeZone** no spawn com `/f admin safezone Spawn` +4. Opcionalmente crie **WarZones** para arenas de PvP +5. Revise as configurações de **Backup** para garantir a segurança dos dados + +## Capacidades de Admin + +| Área | O Que Você Pode Fazer | +|------|-----------------------| +| Facções | Inspecionar, modificar ou dissolver forçadamente qualquer facção | +| Zonas | Criar SafeZones e WarZones com flags personalizadas | +| Poder | Sobrescrever valores de poder de jogador/facção | +| Economia | Gerenciar tesouros de facção e manutenção | +| Config | Editar configurações ao vivo pela GUI ou recarregar do disco | +| Backups | Criar, restaurar e gerenciar backups de dados | +| Importações | Migrar dados de outros plugins de facção | + +>[!TIP] Use `/f admin --text` para obter saída baseada em chat ao invés da GUI, útil para console ou automação. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..78641939 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Permissões de Admin + +Todas as funcionalidades de admin são protegidas por nós de permissão no namespace `hyperfactions.admin`. + +## Nós de Permissão + +| Permissão | Descrição | +|-----------|-----------| +| `hyperfactions.admin.*` | Concede **todas** as permissões de admin | +| `hyperfactions.admin.use` | Acessar o painel `/f admin` | +| `hyperfactions.admin.reload` | Recarregar arquivos de configuração | +| `hyperfactions.admin.debug` | Alternar categorias de log de debug | +| `hyperfactions.admin.zones` | Criar, editar e excluir zonas | +| `hyperfactions.admin.disband` | Dissolver forçadamente qualquer facção | +| `hyperfactions.admin.modify` | Modificar configurações de qualquer facção | +| `hyperfactions.admin.bypass.limits` | Ignorar limites de reivindicação e poder | +| `hyperfactions.admin.backup` | Criar e restaurar backups | +| `hyperfactions.admin.power` | Sobrescrever valores de poder dos jogadores | +| `hyperfactions.admin.economy` | Gerenciar tesouros de facção | + +## Comportamento de Fallback + +Quando **nenhum plugin de permissões** está instalado, as permissões de admin recorrem ao status de operador do servidor (OP). Isso é controlado por `adminRequiresOp` na configuração do servidor (padrão: `true`). + +>[!NOTE] O curinga `hyperfactions.admin.*` concede todas as permissões de admin. Use nós individuais para controle granular sobre sua equipe de staff. + +## Ordem de Resolução de Permissões + +1. Provedor **VaultUnlocked** (se disponível) +2. Provedor **HyperPerms** (se disponível) +3. Provedor **LuckPerms** (se disponível) +4. **Verificação de OP** para nós de admin (fallback) + +>[!WARNING] Sem um plugin de permissões e com `adminRequiresOp` desativado, comandos de admin ficam **abertos para todos os jogadores**. Sempre use um plugin de permissões em produção. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..d0961b07 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Comandos Admin de Poder + +Sobrescreva valores de poder de jogadores e facções. Todos os comandos requerem a permissão `hyperfactions.admin.power`. + +## Comandos de Poder do Jogador + +| Comando | Descrição | +|---------|-----------| +| `/f admin power set ` | Definir valor exato de poder | +| `/f admin power add ` | Adicionar poder ao jogador | +| `/f admin power remove ` | Remover poder do jogador | +| `/f admin power reset ` | Resetar para o poder inicial padrão | +| `/f admin power info ` | Ver detalhamento completo de poder | + +## Como o Poder Afeta as Facções + +O poder total de uma facção é a soma do poder individual de todos os seus membros. Reivindicações de território requerem poder total suficiente para serem mantidas. + +| Cenário | Efeito | +|---------|--------| +| Poder definido mais alto | Facção pode reivindicar mais território | +| Poder definido mais baixo | Facção pode ficar vulnerável a tomadas | +| Poder resetado | Retorna o jogador ao valor inicial padrão | + +>[!WARNING] Reduzir o poder de um jogador pode fazer sua facção perder território se o poder total cair abaixo do número de chunks reivindicados. + +## Exemplos + +- `/f admin power set Steve 50` -- definir para exatamente 50 +- `/f admin power add Steve 10` -- aumentar em 10 +- `/f admin power remove Steve 5` -- diminuir em 5 +- `/f admin power reset Steve` -- voltar ao padrão +- `/f admin power info Steve` -- mostrar detalhamento completo + +>[!TIP] Use `/f admin power info ` para ver o poder atual, poder máximo e quaisquer sobrescritas ativas antes de fazer alterações. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..606d4b62 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Sobrescritas de Poder + +Comandos especiais de poder que alteram o comportamento do poder para jogadores ou facções específicos. + +## Comandos de Sobrescrita + +| Comando | Descrição | +|---------|-----------| +| `/f admin power setmax ` | Definir limite máximo de poder personalizado | +| `/f admin power noloss ` | Alternar imunidade à penalidade de morte | +| `/f admin power nodecay ` | Alternar imunidade ao decaimento de poder offline | +| `/f admin power info ` | Ver todas as sobrescritas e detalhes de poder | + +## Poder Máximo Personalizado + +`/f admin power setmax ` +Define um limite máximo de poder pessoal para o jogador, sobrescrevendo o padrão do servidor. + +>[!INFO] Definir um máximo personalizado **não** altera o poder atual. Apenas muda o teto. O jogador ainda precisa ganhar poder até o novo limite. + +## Modo Sem Perda + +`/f admin power noloss ` +Alterna a imunidade à perda de poder por morte. Quando ativado, o jogador **não** perderá poder ao morrer. + +Útil para: +- Períodos de proteção para novos jogadores +- Participantes de eventos +- Membros do staff + +## Modo Sem Decaimento + +`/f admin power nodecay ` +Alterna a imunidade ao decaimento de poder offline. Quando ativado, o poder do jogador **não** diminuirá enquanto offline. + +Útil para: +- Jogadores em ausência prolongada +- Membros VIP +- Proteção sazonal + +## Informações de Poder + +`/f admin power info ` +Mostra um detalhamento completo: + +- Poder atual e poder máximo +- Sobrescritas ativas (noloss, nodecay, máximo personalizado) +- Hora da última morte e poder perdido +- Percentual de contribuição para a facção + +>[!TIP] Todas as sobrescritas de poder persistem entre reinícios do servidor e são armazenadas no arquivo de dados do jogador. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..abf3dac9 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Referência de Comandos Admin + +Lista completa de todos os subcomandos `/f admin` com sintaxe e permissões necessárias. + +## Painel e Geral + +| Comando | Permissão | +|---------|-----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Gerenciamento de Facções + +| Comando | Permissão | +|---------|-----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Gerenciamento de Zonas + +| Comando | Permissão | +|---------|-----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Poder e Economia + +| Comando | Permissão | +|---------|-----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Manutenção + +| Comando | Permissão | +|---------|-----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Todos os nós de permissão são prefixados com `hyperfactions.` (ex.: `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..30ecdad3 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Integrações com Plugins + +HyperFactions se integra com vários plugins externos através de dependências opcionais. Todas as integrações são opcionais e falham graciosamente se não estiverem disponíveis. + +## Verificando o Status das Integrações + +`/f admin version` +Mostra a versão atual e integrações detectadas. + +`/f admin integration` +Abre o painel de gerenciamento de integrações com status detalhado para cada plugin detectado. + +## Tabela de Integrações + +| Plugin | Tipo | Descrição | +|--------|------|-----------| +| **HyperPerms** | Permissões | Sistema completo de permissões com grupos, herança e contexto | +| **LuckPerms** | Permissões | Provedor alternativo de permissões | +| **VaultUnlocked** | Permissões/Economia | Ponte de permissões e economia | +| **HyperProtect-Mixin** | Proteção | Habilita flags avançadas de zona (explosões, fogo, manter inventário) | +| **OrbisGuard-Mixins** | Proteção | Mixin alternativo para aplicação de flags de zona | +| **PlaceholderAPI** | Placeholders | 49 placeholders de facção para outros plugins | +| **WiFlow PlaceholderAPI** | Placeholders | Provedor alternativo de placeholders | +| **GravestonePlugin** | Morte | Controle de acesso a lápides em zonas | +| **HyperEssentials** | Recursos | Flags de zona para homes, warps e kits | +| **KyuubiSoft Core** | Framework | Integração com biblioteca core | +| **Sentry** | Monitoramento | Rastreamento de erros e diagnósticos | + +## Prioridade do Provedor de Permissões + +1. **VaultUnlocked** (prioridade mais alta) +2. **HyperPerms** +3. **LuckPerms** +4. **Fallback de OP** (se nenhum provedor encontrado) + +>[!INFO] As integrações são detectadas uma vez na inicialização usando reflexão. Os resultados são cacheados para a sessão. É necessário reiniciar o servidor após adicionar ou remover um plugin integrado. + +>[!TIP] Use `/f admin debug toggle integration` para habilitar log detalhado de integração para solução de problemas. + +>[!NOTE] HyperProtect-Mixin é o mixin de proteção **recomendado**. Sem ele, 15 flags de zona não terão efeito. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..4a533a48 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Conceitos Básicos de Zonas + +Zonas são territórios controlados por admins com regras personalizadas que substituem a proteção normal de facção. + +## Tipos de Zona + +- **SafeZone** -- Sem PvP, sem construção, sem dano. +Ideal para áreas de spawn e centros de comércio. +- **WarZone** -- PvP sempre ativado, sem construção. +Ideal para arenas e áreas de batalha disputadas. + +## Criando Zonas + +`/f admin safezone ` +Cria uma SafeZone e reivindica seu chunk atual. + +`/f admin warzone ` +Cria uma WarZone e reivindica seu chunk atual. + +Após a criação, fique em chunks adicionais e use `/f admin zone claim ` para expandir a zona. + +## Gerenciando Chunks da Zona + +`/f admin zone claim ` +Adiciona o chunk atual à zona nomeada. + +`/f admin zone unclaim ` +Remove o chunk atual da zona nomeada. + +`/f admin zone radius ` +Reivindica um quadrado de chunks ao redor da sua posição. + +## Excluindo Zonas + +`/f admin removezone ` +Exclui permanentemente a zona e libera todos os seus chunks reivindicados. + +>[!WARNING] Excluir uma zona libera todos os seus chunks instantaneamente. Isso não pode ser desfeito sem uma restauração de backup. + +>[!INFO] Regras de zona **sempre substituem** regras de território de facção. Uma SafeZone dentro de terreno inimigo ainda é segura. diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..bd1bcf06 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Referência de Comandos de Zona + +Referência completa de todos os comandos de gerenciamento de zona. Todos requerem a permissão `hyperfactions.admin.zones`. + +## Criação Rápida + +| Comando | Descrição | +|---------|-----------| +| `/f admin safezone ` | Criar uma SafeZone no chunk atual | +| `/f admin warzone ` | Criar uma WarZone no chunk atual | +| `/f admin removezone ` | Excluir uma zona e liberar chunks | + +## Gerenciamento de Zona + +| Comando | Descrição | +|---------|-----------| +| `/f admin zone create ` | Criar uma zona (safezone/warzone) | +| `/f admin zone delete ` | Excluir uma zona | +| `/f admin zone claim ` | Adicionar chunk atual à zona | +| `/f admin zone unclaim ` | Remover chunk atual da zona | +| `/f admin zone radius ` | Reivindicar raio quadrado de chunks | +| `/f admin zone list` | Listar todas as zonas com contagem de chunks | +| `/f admin zone notify ` | Alternar mensagens de entrada/saída | +| `/f admin zone title upper/lower ` | Definir texto do título da zona | +| `/f admin zone properties ` | Abrir GUI de propriedades da zona | + +## Gerenciamento de Flags + +| Comando | Descrição | +|---------|-----------| +| `/f admin zoneflag ` | Definir uma flag específica | + +>[!TIP] Use a **GUI de propriedades** da zona para um editor visual com toggles para cada flag, organizados por categoria. + +## Exemplos + +- `/f admin safezone Spawn` -- criar proteção de spawn +- `/f admin zone radius Spawn 3` -- expandir para 7x7 chunks +- `/f admin zoneflag Spawn door_use true` -- permitir portas +- `/f admin zone notify Spawn true` -- mostrar mensagens de entrada diff --git a/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..49418905 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Flags de Zona + +Zonas suportam **47 flags booleanas** em 10 categorias. Cada flag controla um comportamento específico dentro da zona. + +## Visão Geral das Categorias de Flags + +| Categoria | Quantidade | Flags Principais | +|-----------|------------|------------------| +| Combate | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Dano | 4 | fall_damage, explosion_damage, fire_spread | +| Morte | 2 | keep_inventory, power_loss | +| Construção | 4 | build_allowed, block_place, hammer_use | +| Interação | 13 | door_use, container_use, bench_use, npc_tame | +| Transporte | 3 | teleporter_use, portal_use, mount_entry | +| Itens | 4 | item_drop, item_pickup, invincible_items | +| Spawn de Mobs | 5 | mob_spawning, hostile/passive/neutral | +| Limpeza de Mobs | 4 | mob_clear, hostile/passive/neutral clear | +| Integração | 5 | gravestone_access, show_on_map, essentials_homes | + +## Valores Padrão (SafeZone vs WarZone) + +| Flag | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Algumas flags requerem **HyperProtect-Mixin** para funcionar (ex.: keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Sem o mixin, essas flags não têm efeito mesmo quando ativadas. + +## Definindo Flags + +`/f admin zoneflag ` + +>[!TIP] Use `/f admin zone properties ` para um editor visual com toggles agrupados por categoria. diff --git a/src/main/resources/Server/Languages/pt-BR/help/combat/death.md b/src/main/resources/Server/Languages/pt-BR/help/combat/death.md new file mode 100644 index 00000000..a26ee59f --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Morte e Recuperação + +Morrer tem consequências reais em facções. Cada morte custa poder pessoal, enfraquecendo a capacidade da sua facção de manter território. + +## Perda de Poder + +Cada morte custa -1.0 de poder do seu total pessoal. Isso reduz o poder combinado da facção. + +| Evento | Alteração de Poder | +|--------|-------------------| +| Morte (qualquer causa) | -1.0 | +| Regeneração online | +0.1 por minuto | +| Desconexão em combate | -1.0 (morto) | + +>[!NOTE] Estes são valores padrão. O administrador do seu servidor pode ter configurado valores diferentes. + +## Cenários de Exemplo + +*5 membros com 10.0 de poder cada = 50 total, 20 reivindicações.* +*Um membro morre duas vezes: 8.0 de poder, total da facção 48.* +*Três membros morrem uma vez cada: total cai para 47.* + +>[!WARNING] Se o poder da sua facção cair abaixo da contagem de reivindicações, inimigos podem tomar seu território. + +## Recuperação + +O poder regenera a 0.1 por minuto enquanto online. Recuperar 1.0 de poder perdido leva cerca de 10 minutos. Múltiplas mortes acumulam, então evite lutas repetidas. + +--- + +## Todos os Tipos de Morte + +A perda de poder se aplica a todas as mortes: PvP, mobs, dano de queda, afogamento e qualquer outra causa. Não existe maneira segura de morrer. + +>[!TIP] Defina uma base da facção com /f sethome para que membros possam se reagrupar rapidamente após morrer. diff --git a/src/main/resources/Server/Languages/pt-BR/help/combat/protection.md b/src/main/resources/Server/Languages/pt-BR/help/combat/protection.md new file mode 100644 index 00000000..8b9e9b82 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Proteção Territorial + +Território reivindicado oferece várias camadas de defesa para as construções e recursos da sua facção. + +## Proteção de Blocos + +Apenas membros da facção podem colocar ou destruir blocos no seu território. Inimigos e neutros são impedidos de modificar qualquer coisa. + +## Proteção de Contêineres + +Baús, barris e outros contêineres estão protegidos. Apenas os membros da sua facção podem abrir ou interagir com armazenamento em chunks reivindicados. + +## Alertas de Entrada + +Quando um não-membro entra no seu território reivindicado, membros online da facção recebem uma notificação com o nome e localização do intruso. + +--- + +## Acesso de Aliados + +Aliados não podem construir ou destruir blocos no seu território por padrão. Dano entre aliados também é desativado, então jogadores aliados não podem se machucar. + +>[!INFO] O território protege blocos, não jogadores. PvP no seu próprio território depende da relação do atacante com sua facção. + +>[!TIP] Mantenha suas reivindicações conectadas e evite chunks isolados que são mais difíceis de defender. diff --git a/src/main/resources/Server/Languages/pt-BR/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/pt-BR/help/combat/spawn_protection.md new file mode 100644 index 00000000..b95ae7cd --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Proteção de Spawn + +Após renascer de uma morte, você recebe proteção temporária para evitar spawn camping. + +## Como Funciona + +- A proteção dura 5 segundos após renascer +- Você não pode receber dano durante este período +- Um indicador visual mostra seu status de proteção + +## A Proteção é Cancelada + +A proteção de spawn termina antecipadamente se você: + +- Atacar outro jogador ou entidade +- Se mover da sua posição de spawn + +Isso previne abuso. Você não pode atacar outros enquanto invulnerável. Uma vez que tomar qualquer ação, a proteção cai e as regras normais de combate se aplicam. + +--- + +>[!NOTE] Estes são valores padrão. O administrador do seu servidor pode ter configurado valores diferentes. + +>[!TIP] Use seu tempo de proteção para avaliar a situação antes de se mover. diff --git a/src/main/resources/Server/Languages/pt-BR/help/combat/tagging.md b/src/main/resources/Server/Languages/pt-BR/help/combat/tagging.md new file mode 100644 index 00000000..f5cb11ef --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Marcação de Combate + +Quando você ataca ou é atacado por outro jogador, você fica marcado por combate por 15 segundos. + +## Enquanto Marcado + +- Sem teleportes /f home ou /f stuck +- Sem comandos de teleporte do servidor +- A marcação reseta a cada nova ação de combate +- Um temporizador exibe a duração restante da marcação + +--- + +## Penalidade por Desconexão + +>[!WARNING] Desconectar enquanto marcado por combate mata seu personagem e você perde 1.0 de poder. + +Seus itens caem onde você desconectou e inimigos podem saqueá-los. Sempre espere a marcação expirar. + +## Como o Temporizador Funciona + +O temporizador de marcação de combate aparece na tela quando você entra em combate. Cada novo golpe o reseta para 15 segundos. Quando chega a zero, todas as restrições são removidas. + +>[!NOTE] Estes são valores padrão. O administrador do seu servidor pode ter configurado valores diferentes. + +>[!TIP] Desengaje e espere o temporizador acabar se precisar teleportar. diff --git a/src/main/resources/Server/Languages/pt-BR/help/combat/zones.md b/src/main/resources/Server/Languages/pt-BR/help/combat/zones.md new file mode 100644 index 00000000..376e1dfb --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Zonas Especiais + +Administradores podem designar áreas com regras especiais que substituem a proteção normal de território de facção. + +## SafeZone + +Sem dano PvP, sem destruição de blocos por não-admins. Ideal para áreas de spawn, centros de comércio e áreas de preparação para eventos. Jogadores não podem ser feridos aqui. + +## WarZone + +PvP sempre ativado. Sem proteção de blocos. Áreas de batalha aberta onde vale tudo. Você não recebe benefícios de proteção territorial em uma WarZone. + +--- + +## Comparação de Zonas + +| Recurso | SafeZone | WarZone | Terreno de Facção | +|---------|----------|---------|-------------------| +| PvP | Desativado | Sempre Ligado | Baseado em relação | +| Destruir Blocos | Desativado | Permitido | Apenas Membros | +| Contêineres | Protegidos | Abertos | Apenas Membros | +| Melhor Para | Spawn/Comércio | Arenas | Bases | + +>[!NOTE] Regras de zona sempre substituem regras de território de facção. Um chunk reivindicado dentro de uma WarZone segue as regras da WarZone. + +>[!TIP] Verifique seu mapa de território com /f map para ver os limites das zonas. diff --git a/src/main/resources/Server/Languages/pt-BR/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/pt-BR/help/diplomacy/alliances.md new file mode 100644 index 00000000..c56d8266 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Formando Alianças + +Alianças são acordos mútuos entre duas facções que oferecem benefícios de proteção e cooperação. + +--- + +## Como Formar uma Aliança + +`/f ally ` + +Envia um pedido de aliança para a facção alvo. A aliança só entra em vigor quando ambos os lados concordarem. Um Oficial ou Líder da outra facção também deve executar o mesmo comando mirando sua facção para confirmar. + +## Como Romper uma Aliança + +`/f neutral ` + +Qualquer um dos lados pode encerrar unilateralmente uma aliança resetando a relação para neutro. + +--- + +## Benefícios da Aliança + +| Benefício | Detalhes | +|-----------|----------| +| Sem fogo amigo | Jogadores aliados não podem causar dano uns aos outros | +| Visibilidade compartilhada no mapa | Território aliado aparece em azul no mapa de território | +| Interação no território | Aliados podem usar portas, assentos e transporte no seu território | +| Chat de aliados | Alterne para o modo de chat de aliados para comunicação entre facções | +| Proteção contra tomadas | Aliados não podem tomar o território um do outro | + +>[!NOTE] Sua facção pode ter até 10 alianças ao mesmo tempo. Escolha seus aliados com sabedoria. + +--- + +## Etiqueta de Aliança + +>[!TIP] Comunicação é fundamental. Antes de enviar um pedido de aliança, considere entrar em contato com o líder da outra facção para discutir termos. Uma aliança forte é construída sobre benefício mútuo, não apenas conveniência. + +- Alianças funcionam nos dois sentidos -- se você se beneficia da proteção, seus aliados esperam o mesmo +- Romper uma aliança durante guerra pode prejudicar a reputação da sua facção +- Facções aliadas podem coordenar reivindicações de território para criar fronteiras defensáveis diff --git a/src/main/resources/Server/Languages/pt-BR/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/pt-BR/help/diplomacy/enemies.md new file mode 100644 index 00000000..0b3bb47b --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Facções Inimigas + +Declarar um inimigo é uma ação unilateral que imediatamente habilita PvP e agressão territorial contra a facção alvo. Nenhum acordo é necessário. + +--- + +## Declarando um Inimigo + +`/f enemy ` + +Marca instantaneamente a facção alvo como sua inimiga. Isso entra em vigor imediatamente -- nenhuma confirmação do outro lado é necessária. Requer cargo de Oficial ou superior. + +## Resetando para Neutro + +`/f neutral ` + +Encerra o status de inimigo e reseta a relação para neutro. Também requer Oficial+ e entra em vigor imediatamente. + +--- + +## O Que o Status de Inimigo Habilita + +| Efeito | Detalhes | +|--------|----------| +| PvP no território | PvP completo é habilitado no território de ambas as facções | +| Tomada de território | Você pode tomar chunks deles se estiverem em déficit de poder | +| Marcação no mapa | Território inimigo aparece em vermelho no mapa de território | +| Sem proteção | A proteção padrão de território não impede PvP inimigo | + +>[!WARNING] Declarar um inimigo é uma decisão séria. Os membros deles também podem lutar com você no seu próprio território após a declaração. + +--- + +## Considerações Estratégicas + +- Declarações de inimizade são unilaterais -- você pode declarar sem o consentimento deles, mas eles também passam a te ver como hostil +- Antes de declarar, verifique o poder do alvo com /f info. Se eles forem fortes, você pode perder território em vez de ganhar +- Enfraqueça inimigos através de combate repetido para drenar o poder deles, depois tome seu terreno +- Não há limite de quantos inimigos você pode ter, mas lutar em múltiplas frentes é arriscado + +>[!TIP] Use /f neutral para desescalar conflitos. Às vezes uma paz estratégica é mais valiosa do que guerra contínua. + +>[!NOTE] Se você estiver aliado a uma facção e declará-la como inimiga, a aliança é rompida primeiro. diff --git a/src/main/resources/Server/Languages/pt-BR/help/diplomacy/relations.md b/src/main/resources/Server/Languages/pt-BR/help/diplomacy/relations.md new file mode 100644 index 00000000..d11e6dbb --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Relações entre Facções + +Cada par de facções tem uma relação diplomática que determina como elas interagem. Existem três estados: Aliado, Inimigo e Neutro. + +--- + +## Comparação de Relações + +| Efeito | Aliado | Neutro | Inimigo | +|--------|--------|--------|---------| +| PvP no território | Desativado | Regras padrão | Ativado | +| Proteção territorial | Proteção mútua | Proteção padrão | Pode tomar se enfraquecido | +| Fogo amigo | Desativado | N/A | Ativado em todo lugar | +| Cor no mapa | Azul | Cinza | Vermelho | +| Como definir | Acordo mútuo | Estado padrão | Declaração unilateral | +| Acesso ao chat | Canal de chat de aliados | Nenhum | Nenhum | + +--- + +## Visualizando Relações + +`/f relations` + +Mostra todas as suas alianças atuais, inimigos e quaisquer pedidos de aliança pendentes. + +## Como as Relações Funcionam + +- Neutro é o estado padrão entre todas as facções. Regras normais do servidor se aplicam. +- Aliança requer que ambas as facções concordem. Qualquer lado pode rompê-la unilateralmente. +- Inimigo é declarado unilateralmente. Nenhum acordo necessário -- a outra facção é imediatamente marcada como sua inimiga. + +>[!INFO] Relações são gerenciadas por Oficiais e Líderes. Membros podem visualizar relações mas não podem alterá-las. + +>[!TIP] Use /f relations regularmente para acompanhar o cenário diplomático. Saber quem são seus inimigos ajuda a se preparar para conflitos territoriais. diff --git a/src/main/resources/Server/Languages/pt-BR/help/economy/commands.md b/src/main/resources/Server/Languages/pt-BR/help/economy/commands.md new file mode 100644 index 00000000..62e531e0 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Comandos de Economia + +Referência rápida de todos os comandos de economia de facção. + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f balance | Ver saldo do tesouro | Qualquer | +| /f deposit (amount) | Depositar no tesouro | Qualquer | +| /f withdraw (amount) | Sacar do tesouro | Oficial+ | +| /f money transfer (faction) (amount) | Transferir para outra facção | Oficial+ | +| /f money log [page] | Ver histórico de transações | Oficial+ | + +--- + +## Aliases de Comandos + +- /f balance também pode ser usado como /f bal +- /f deposit e /f withdraw aceitam valores decimais + +## Requisitos de Cargo + +Comandos de saque e transferência são restritos a Oficiais e Líderes. Todos os outros comandos de economia estão disponíveis para qualquer membro da facção. + +>[!TIP] Use /f money log para revisar depósitos, saques e transferências recentes com data e hora. diff --git a/src/main/resources/Server/Languages/pt-BR/help/economy/funds.md b/src/main/resources/Server/Languages/pt-BR/help/economy/funds.md new file mode 100644 index 00000000..ab85b343 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Gerenciando Fundos + +Membros da facção trabalham juntos para manter o tesouro abastecido através de depósitos, saques e transferências. + +## Depositando + +Qualquer membro pode depositar fundos pessoais no tesouro da facção. + +`/f deposit ` +Deposita do seu saldo pessoal para o tesouro. + +## Sacando + +Oficiais e o Líder podem sacar fundos de volta para o saldo pessoal. + +`/f withdraw ` +Saca do tesouro para o seu saldo. (Oficial+) + +## Transferindo + +Oficiais podem transferir fundos diretamente entre tesouros de facções para acordos comerciais ou diplomacia. + +`/f money transfer ` +Envia fundos para o tesouro de outra facção. (Oficial+) + +--- + +## Taxas + +| Transação | Taxa | +|-----------|------| +| Depósito | 0% | +| Saque | 0% | +| Transferência | 0% | + +>[!INFO] As taxas são configuráveis pelo servidor e podem diferir dos valores padrão mostrados acima. + +>[!TIP] Todas as transações são registradas. Use /f money log para revisar atividades recentes. diff --git a/src/main/resources/Server/Languages/pt-BR/help/economy/treasury.md b/src/main/resources/Server/Languages/pt-BR/help/economy/treasury.md new file mode 100644 index 00000000..a057706a --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Tesouro da Facção + +Toda facção tem um tesouro compartilhado que serve como o banco da facção. Os fundos são usados para custos de manutenção, manutenção de território e operações da facção. + +## Saldo Inicial + +Facções novas começam com 0 no tesouro. Membros devem depositar fundos para acumular reservas. + +## Quem Pode Gerenciar + +- Qualquer membro pode depositar fundos +- Oficiais e Líder podem sacar e transferir +- O Líder tem controle total do tesouro + +--- + +`/f balance` +Verifica o saldo atual do tesouro da sua facção. Também disponível como /f bal. + +>[!TIP] Contribua regularmente para manter sua facção financiada. Custos de manutenção territorial podem esvaziar um tesouro vazio rapidamente. + +>[!INFO] Todas as transações do tesouro são registradas e podem ser revisadas por oficiais. diff --git a/src/main/resources/Server/Languages/pt-BR/help/economy/upkeep.md b/src/main/resources/Server/Languages/pt-BR/help/economy/upkeep.md new file mode 100644 index 00000000..fb53c805 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Manutenção Territorial + +Facções devem pagar manutenção contínua para manter seu território reivindicado. Isso impede acúmulo de terras e mantém o mapa dinâmico. + +## Custos de Manutenção + +| Configuração | Padrão | +|--------------|--------| +| Custo por chunk | 2.0 por ciclo | +| Intervalo de pagamento | A cada 24 horas | +| Chunks gratuitos | 3 (sem custo) | +| Modo de escala | Taxa fixa | + +>[!NOTE] Estes são valores padrão. O administrador do seu servidor pode ter configurado valores diferentes. + +Seus primeiros 3 chunks são gratuitos. Além disso, cada chunk reivindicado adicional custa 2.0 por ciclo de pagamento. + +## Pagamento Automático + +O pagamento automático é ativado por padrão. O sistema deduz automaticamente a manutenção do seu tesouro a cada intervalo. Nenhuma ação manual necessária. + +--- + +## Período de Carência + +Se o seu tesouro não puder cobrir a manutenção, um período de carência de 48 horas começa. Um aviso é enviado 6 horas antes das reivindicações começarem a ser perdidas. + +>[!WARNING] Se a manutenção permanecer não paga após o período de carência, sua facção perde 1 reivindicação por ciclo até que os custos sejam cobertos ou todas as reivindicações extras tenham acabado. + +## Exemplo + +*Uma facção com 8 reivindicações paga por 5 chunks (8 menos 3 gratuitos). A 2.0 por chunk, isso dá 10.0 por ciclo.* + +>[!TIP] Mantenha seu tesouro acima do custo de manutenção. Use /f balance para verificar suas reservas. diff --git a/src/main/resources/Server/Languages/pt-BR/help/power_land/claiming.md b/src/main/resources/Server/Languages/pt-BR/help/power_land/claiming.md new file mode 100644 index 00000000..9fbf2c04 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Reivindicando Território + +Reivindicar um chunk o protege sob o controle da sua facção. Apenas membros da facção podem construir, destruir ou acessar contêineres dentro de território reivindicado. + +--- + +## Como Reivindicar + +`/f claim` + +Fique no chunk que deseja reivindicar e execute este comando. O chunk é protegido imediatamente. Requer cargo de Oficial ou superior. + +## Como Liberar + +`/f unclaim` + +Libera o chunk em que você está de volta para a natureza. Também requer Oficial+. + +--- + +## Regras de Reivindicação + +| Regra | Padrão | +|-------|--------| +| Custo de poder por reivindicação | 2.0 de poder | +| Máximo de reivindicações | 100 por facção | +| Apenas adjacente | Não (você pode reivindicar em qualquer lugar) | + +>[!NOTE] Estes são valores padrão. O administrador do seu servidor pode ter configurado valores diferentes. + +>[!INFO] Cada reivindicação custa 2.0 de poder para manter. Uma facção com 50 de poder total pode manter até 25 reivindicações com segurança. + +--- + +## O Que a Proteção Oferece + +Dentro de território reivindicado, o seguinte é aplicado por padrão: + +- Não-membros não podem destruir, colocar ou interagir com blocos +- Aliados podem usar portas, assentos e transporte, mas não podem destruir ou colocar blocos +- Membros e Oficiais têm acesso total para construir, destruir e usar tudo +- Acesso a contêineres (baús, caixas) é restrito apenas a membros + +>[!TIP] Você também pode reivindicar diretamente pelo mapa de território. Abra /f map e clique em chunks não reivindicados para reivindicá-los. + +>[!WARNING] Não expanda demais. Se sua facção perder poder por mortes, reivindicações além do seu orçamento de poder ficam vulneráveis a tomadas de território. diff --git a/src/main/resources/Server/Languages/pt-BR/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/pt-BR/help/power_land/losing_territory.md new file mode 100644 index 00000000..a876e016 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Perdendo Território + +Quando o poder total de uma facção cai abaixo do custo das suas reivindicações, ela se torna vulnerável. Inimigos podem tomar chunks diretamente de você. + +--- + +## Como Funciona a Tomada de Território + +`/f overclaim` + +Um Oficial ou Líder de uma facção inimiga fica no seu chunk reivindicado e executa este comando. Se sua facção estiver em déficit de poder, o chunk é transferido para a facção deles. + +## A Matemática + +Cada reivindicação custa 2.0 de poder para manter. Se o seu poder total cair abaixo desse limite, os chunks em déficit ficam vulneráveis. + +>[!NOTE] Estes são valores padrão. O administrador do seu servidor pode ter configurado valores diferentes. + +>[!WARNING] A tomada de território é permanente. Uma vez que um inimigo toma um chunk, você precisa reivindicá-lo novamente (ou tomá-lo de volta se eles enfraquecerem). + +--- + +## Cenário de Exemplo + +| Fator | Valor | +|-------|-------| +| Membros | 5 jogadores | +| Poder por membro | 10 cada (inicial) | +| Poder total | 50 | +| Reivindicações | 30 chunks | +| Poder necessário (30 x 2.0) | 60 | +| Déficit | 10 de poder faltando | + +Neste exemplo, a facção já está vulnerável desde o início. Inimigos poderiam tomar até 5 chunks (10 de déficit / 2.0 por reivindicação) antes que a facção atinja o equilíbrio. + +--- + +## Como Prevenir Tomadas de Território + +- Não expanda demais -- sempre mantenha o poder total acima do custo das reivindicações com uma margem +- Fique ativo -- poder só regenera enquanto online (+0.1/min) +- Evite mortes desnecessárias -- cada morte custa 1.0 de poder +- Recrute mais membros -- mais jogadores significa mais poder total +- Libere chunks não utilizados -- libere poder com /f unclaim + +>[!TIP] Verifique seu status de poder regularmente com /f power. Se seu poder total estiver próximo do custo das reivindicações, considere liberar chunks menos importantes antes de uma guerra. diff --git a/src/main/resources/Server/Languages/pt-BR/help/power_land/territory_map.md b/src/main/resources/Server/Languages/pt-BR/help/power_land/territory_map.md new file mode 100644 index 00000000..540be293 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# O Mapa de Território + +O mapa de território oferece uma visão aérea dos chunks reivindicados na sua região, mostrando quais facções controlam o terreno ao seu redor. + +--- + +## Abrindo o Mapa + +`/f map` + +Abre a GUI do mapa de território centralizada na sua localização atual. + +--- + +## Legenda de Cores + +| Cor | Significado | +|-----|-------------| +| [#55FF55] Cor da sua facção | Território reivindicado pela sua facção | +| [#5555FF] Azul | Território de facção aliada | +| [#FF5555] Vermelho | Território de facção inimiga | +| [#AAAAAA] Cinza | Território de facção neutra | +| [#333333] Escuro | Natureza (terreno não reivindicado) | +| [#FFAA00] Dourado | Zonas especiais (SafeZone, WarZone) | + +>[!INFO] A cor da sua facção no mapa corresponde à cor que você definiu nas configurações de cor da facção. Aliados e inimigos usam cores fixas para fácil identificação. + +--- + +## Clique para Reivindicar + +O mapa não serve apenas para visualizar -- você pode interagir com ele diretamente. + +- Clique em um chunk não reivindicado para reivindicá-lo (requer cargo de Oficial+ e poder suficiente) +- Clique em um chunk reivindicado para ver qual facção é dona +- Use scroll ou arraste para explorar a área ao seu redor + +>[!TIP] O mapa é a maneira mais fácil de planejar a expansão do seu território. Procure áreas não reivindicadas perto da sua base e reivindique estrategicamente para criar uma fronteira contígua. + +>[!NOTE] O mapa mostra uma área fixa ao redor da sua posição. Mova-se para um local diferente e reabra-o para ver outras partes do mundo. diff --git a/src/main/resources/Server/Languages/pt-BR/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/pt-BR/help/power_land/understanding_power.md new file mode 100644 index 00000000..af7b5303 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Entendendo o Poder + +Poder é o recurso principal que determina quanto território sua facção pode manter. Cada jogador tem poder pessoal que contribui para o total da facção. + +--- + +## Valores Padrão de Poder + +| Configuração | Valor | +|--------------|-------| +| Poder máximo por jogador | 20 | +| Poder inicial | 10 | +| Penalidade por morte | -1.0 por morte | +| Recompensa por abate | 0.0 | +| Taxa de regeneração | +0.1 por minuto (enquanto online) | +| Custo de poder por reivindicação | 2.0 | +| Desconexão enquanto marcado | -1.0 adicional | + +>[!NOTE] Estes são valores padrão. O administrador do seu servidor pode ter configurado valores diferentes. + +## Como Funciona + +O poder total da sua facção é a soma do poder pessoal de cada membro. O poder necessário é o número de reivindicações multiplicado por 2.0. Enquanto o poder total ficar acima do poder necessário, seu território está seguro. + +>[!INFO] O poder regenera passivamente a 0.1 por minuto enquanto você estiver online. Nessa taxa, recuperar 1.0 de poder leva cerca de 10 minutos. + +--- + +## Verificando Seu Poder + +`/f power` + +Mostra seu poder pessoal, o poder total da sua facção e quanto é necessário para manter as reivindicações atuais. + +## A Zona de Perigo + +Se o poder total cair abaixo da quantidade necessária para suas reivindicações, sua facção fica vulnerável. Inimigos podem tomar seus chunks. + +>[!WARNING] Múltiplas mortes em um curto período podem escalar rapidamente. Se você tem 5 membros cada um com 10 de poder (50 total) e 20 reivindicações (40 necessários), apenas 5 mortes na equipe reduzem para 45 -- ainda seguro. Mas 11 mortes colocam em 39, abaixo do limite de 40. + +>[!TIP] Mantenha uma margem de poder. Não reivindique cada chunk que puder pagar -- deixe espaço para algumas mortes sem ficar vulnerável. diff --git a/src/main/resources/Server/Languages/pt-BR/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/pt-BR/help/quick_ref/all_commands.md new file mode 100644 index 00000000..d76261da --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Todos os Comandos + +## Principal + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f | Abrir menu de facções | Qualquer | +| /f help | Abrir central de ajuda | Qualquer | +| /f create (name) | Criar uma facção | Qualquer | +| /f disband | Dissolver sua facção | Líder | +| /f leave | Sair da sua facção | Qualquer | + +## Membros + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f invite (player) | Convidar um jogador | Oficial+ | +| /f accept [faction] | Aceitar um convite | Qualquer | +| /f request (faction) | Solicitar entrada | Qualquer | +| /f kick (player) | Remover um membro | Oficial+ | +| /f promote (player) | Promover a Oficial | Líder | +| /f demote (player) | Rebaixar a Membro | Líder | +| /f transfer (player) | Transferir liderança | Líder | + +## Território + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f claim | Reivindicar chunk atual | Oficial+ | +| /f unclaim | Liberar chunk atual | Oficial+ | +| /f overclaim | Tomar chunk enfraquecido | Oficial+ | +| /f map | Abrir mapa de território | Qualquer | + +## Teleporte + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f home | Teleportar para base da facção | Qualquer | +| /f sethome | Definir base da facção | Oficial+ | +| /f delhome | Excluir base da facção | Oficial+ | +| /f stuck | Escapar de território inimigo | Qualquer | + +## Informações + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f info [faction] | Ver detalhes da facção | Qualquer | +| /f list | Explorar todas as facções | Qualquer | +| /f members | Ver lista de membros | Qualquer | +| /f who [player] | Ver info do jogador | Qualquer | +| /f power [player] | Verificar níveis de poder | Qualquer | +| /f invites | Gerenciar convites/solicitações | Qualquer | +| /f relations | Ver relações diplomáticas | Qualquer | + +## Diplomacia + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f ally (faction) | Solicitar aliança | Oficial+ | +| /f enemy (faction) | Declarar inimigo | Oficial+ | +| /f neutral (faction) | Resetar para neutro | Oficial+ | + +## Configurações + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f settings | Abrir GUI de configurações | Oficial+ | +| /f rename (name) | Renomear facção | Líder | +| /f desc [text] | Definir descrição | Oficial+ | +| /f color (code) | Definir cor da facção | Oficial+ | +| /f open | Permitir entrada de qualquer um | Líder | +| /f close | Exigir convite | Líder | + +## Economia + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f balance | Ver tesouro | Qualquer | +| /f deposit (amount) | Depositar fundos | Qualquer | +| /f withdraw (amount) | Sacar fundos | Oficial+ | +| /f money transfer (faction) (amt) | Transferir fundos | Oficial+ | +| /f money log [page] | Histórico de transações | Oficial+ | + +## Chat + +| Comando | Descrição | Cargo | +|---------|-----------|-------| +| /f c | Alternar modo de chat | Qualquer | +| /f c f | Definir chat de facção | Qualquer | +| /f c a | Definir chat de aliados | Qualquer | +| /f c off | Definir chat público | Qualquer | diff --git a/src/main/resources/Server/Languages/pt-BR/help/welcome/getting_started.md b/src/main/resources/Server/Languages/pt-BR/help/welcome/getting_started.md new file mode 100644 index 00000000..9421b5fb --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Primeiros Passos + +Bem-vindo ao HyperFactions! Veja como começar a jogar em poucos passos. + +--- + +## Passo 1: Abra o Menu de Facções + +Digite /f para abrir a GUI principal de facções. Este é o seu centro para tudo -- navegar por facções, criar a sua própria e gerenciar convites. + +## Passo 2: Escolha Seu Caminho + +| Opção | Como | +|-------|------| +| Explorar facções abertas | Clique em Explorar no menu e aperte Entrar em qualquer facção aberta. | +| Aceitar um convite | Verifique a aba Convites. Se alguém te convidou, clique em Aceitar. | +| Criar a sua própria | Clique em Criar Facção, escolha um nome, e você será o Líder. | + +## Passo 3: Explore Sua Facção + +Uma vez que estiver em uma facção, você verá o Painel da Facção com sua lista de membros, mapa de território, relações e configurações. + +>[!TIP] Se você é novato, tente entrar em uma facção existente primeiro. Você vai aprender mais rápido com membros experientes ao seu redor. + +--- + +## Comandos Essenciais + +- /f -- Abre a GUI de facções +- /f home -- Teleporta para a base da sua facção +- /f c -- Alterna o modo de chat entre Normal, Facção e Aliados +- /f map -- Visualiza o mapa de territórios ao seu redor + +>[!TIP] Você também pode digitar /f help no chat para uma referência rápida de comandos a qualquer momento. diff --git a/src/main/resources/Server/Languages/pt-BR/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/pt-BR/help/welcome/quick_tips.md new file mode 100644 index 00000000..38194991 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Dicas Rápidas + +Conselhos úteis organizados por categoria para ajudar você a prosperar. + +--- + +## Território + +- Reivindique terrenos ao redor da sua base cedo com `/f claim` -- construções em áreas não reivindicadas **não têm proteção** +- Cada reivindicação custa **2.0 de poder** para manter, então não expanda demais além do que seus membros podem sustentar +- Use `/f map` para explorar reivindicações próximas e encontrar locais seguros para construir +- Libere chunks que não precisa mais com `/f unclaim` para liberar poder + +## Combate + +- Morrer custa **1.0 de poder** -- evite lutas desnecessárias quando sua facção estiver perto do limite de reivindicações +- Você tem **5 segundos de proteção de spawn** após renascer +- O marcador de combate dura **15 segundos** -- desconectar enquanto marcado custa poder extra +- Fogo amigo é **desativado** entre membros da facção e aliados por padrão + +>[!WARNING] Desconectar enquanto marcado por combate causa perda adicional de poder (1.0 por desconexão). Fique e lute ou escape primeiro. + +## Social + +- Use `/f c` para alternar entre modos de chat para que conversas da facção fiquem privadas +- Convide jogadores confiáveis com `/f invite ` -- convites expiram após **5 minutos** +- Forme alianças com `/f ally ` para proteção mútua e visibilidade compartilhada no mapa +- Verifique `/f relations` para ver seu status diplomático completo + +## Economia + +>[!TIP] Se o servidor tiver economia habilitada, sua facção pode acumular um tesouro. Membros podem depositar, mas apenas Oficiais e Líderes podem sacar ou transferir fundos. + +- Deposite fundos pela GUI do tesouro para fortalecer sua facção +- Uma facção mais rica pode arcar com mais reivindicações e se recuperar de reveses mais rápido + +## Geral + +- Digite `/f` a qualquer momento para abrir o painel da sua facção -- tudo é acessível por lá +- Promova membros ativos a Oficial para que possam ajudar a reivindicar e gerenciar território +- Mantenha sua facção ativa -- poder só regenera enquanto jogadores estão **online** diff --git a/src/main/resources/Server/Languages/pt-BR/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/pt-BR/help/welcome/what_are_factions.md new file mode 100644 index 00000000..84239612 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# O Que São Facções? + +Facções são equipes criadas por jogadores que reivindicam território, constroem bases e competem por dominância. Quando você entra ou cria uma facção, ganha acesso a terrenos protegidos, uma base compartilhada, chat privado e ferramentas diplomáticas. + +>[!TIP] Facções é tudo sobre trabalho em equipe. Quanto mais membros ativos você tiver, mais forte sua facção se torna. + +--- + +## Mecânicas Principais + +| Mecânica | O Que Faz | +|----------|-----------| +| Poder | Cada jogador gera poder ao longo do tempo (máx. 20). O poder total da sua facção determina quanto terreno você pode manter. | +| Reivindicações | Chunks reivindicados são protegidos -- apenas membros podem construir, destruir ou abrir contêineres dentro deles. Cada reivindicação custa 2.0 de poder para manter. | +| Relações | Facções podem formar alianças para proteção mútua ou declarar inimigos para habilitar PvP e agressão territorial. | +| Cargos | Três patentes -- Líder, Oficial, Membro -- cada uma com diferentes capacidades. | + +--- + +## Como a Força Funciona + +A força da sua facção vem dos seus membros. Cada jogador começa com 10 de poder e regenera até 20 enquanto estiver online. Morrer custa poder. Se o poder total da facção cair abaixo do custo das suas reivindicações, inimigos podem tomar seu território. + +>[!WARNING] Uma única morte custa 1.0 de poder. Múltiplas mortes em um curto período podem deixar sua facção vulnerável a tomadas de território. + +--- + +## Diplomacia Resumida + +- **Aliados** -- Acordos mútuos que impedem fogo amigo e protegem o território um do outro +- **Inimigos** -- Declarações unilaterais que habilitam PvP no território de cada um e permitem tomadas de território +- **Neutros** -- O estado padrão entre todas as facções com regras normais + +>[!INFO] Você pode gerenciar tudo isso pela GUI dentro do jogo digitando `/f` ou por comandos no chat. diff --git a/src/main/resources/Server/Languages/pt-BR/help/your_faction/creating.md b/src/main/resources/Server/Languages/pt-BR/help/your_faction/creating.md new file mode 100644 index 00000000..f7a7e17a --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Criando uma Facção + +Criar sua própria facção faz de você o Líder com controle total sobre configurações, membros e território. + +--- + +## Como Criar + +`/f create ` + +Isso cria sua facção e imediatamente abre o Painel da Facção onde você pode começar a convidar membros, reivindicar terrenos e ajustar configurações. + +## Regras de Nome + +| Regra | Requisito | +|-------|-----------| +| Tamanho | Entre 3 e 24 caracteres | +| Caracteres | Apenas letras, números e espaços | +| Exclusividade | Duas facções não podem ter o mesmo nome | + +>[!WARNING] Escolha seu nome com cuidado. Renomear depois requer permissões de Líder e pode ter um tempo de espera. + +--- + +## O Que Acontece ao Criar + +- Você se torna o Líder (cargo mais alto) +- Sua facção começa com 0 reivindicações e seu poder pessoal (10 por padrão) +- O painel da facção abre automaticamente +- Você pode imediatamente convidar jogadores, reivindicar território e definir uma base da facção + +>[!INFO] Se o servidor tiver integração com economia habilitada, criar uma facção pode custar dinheiro. O custo de criação é definido pelo administrador do servidor. + +>[!TIP] Após criar, suas primeiras prioridades devem ser: convidar amigos, encontrar um local para a base e reivindicá-lo. diff --git a/src/main/resources/Server/Languages/pt-BR/help/your_faction/joining.md b/src/main/resources/Server/Languages/pt-BR/help/your_faction/joining.md new file mode 100644 index 00000000..09ce60c7 --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Entrando em uma Facção + +Existem três maneiras de entrar em uma facção existente, dependendo de como ela está configurada. + +--- + +## Comparação de Métodos + +| Método | Como | Requer | +|--------|------|--------| +| Explorar e Entrar | Abra /f, clique em Explorar, clique em Entrar | Facção configurada como aberta | +| Aceitar Convite | Verifique a aba Convites no menu /f | Convite ativo | +| Solicitar Entrada | Use /f request, aguarde aprovação | Aprovação de Oficial ou Líder | + +--- + +## Detalhes do Convite + +- Convites são enviados por Oficiais ou Líderes +- Convites expiram após 5 minutos -- aceite rapidamente +- Veja seus convites pendentes na aba Convites do menu de facções +- Aceite pela GUI ou com /f accept + +## Solicitações de Entrada + +- Use /f request para solicitar entrada em uma facção fechada +- Solicitações expiram após 24 horas se não forem respondidas +- Oficiais e Líderes podem aprovar ou negar solicitações pelo painel da facção + +>[!TIP] Não sabe qual facção entrar? Use a aba Explorar no /f para ver descrições, número de membros e se são abertas ou apenas por convite. + +>[!NOTE] Cada facção pode ter até 50 membros por padrão. Se uma facção estiver cheia, você precisará esperar uma vaga abrir. diff --git a/src/main/resources/Server/Languages/pt-BR/help/your_faction/managing.md b/src/main/resources/Server/Languages/pt-BR/help/your_faction/managing.md new file mode 100644 index 00000000..d34d17ac --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Gerenciando Membros + +Oficiais e Líderes compartilham a responsabilidade de gerenciar o quadro de membros da facção. Aqui estão os principais comandos e quem pode usá-los. + +--- + +## Comandos + +| Comando | O Que Faz | Cargo Necessário | +|---------|-----------|------------------| +| `/f invite ` | Envia um convite de entrada (expira em 5 min) | Oficial+ | +| `/f kick ` | Remove um membro da facção | Oficial+ (veja nota) | +| `/f promote ` | Promove um Membro a Oficial | Apenas Líder | +| `/f demote ` | Rebaixa um Oficial a Membro | Apenas Líder | +| `/f transfer ` | Transfere a liderança da facção | Apenas Líder | + +>[!NOTE] Oficiais só podem expulsar Membros. Para remover outro Oficial, o Líder deve rebaixá-lo primeiro ou expulsá-lo diretamente. + +--- + +## Convites + +- Convites expiram após 5 minutos se não forem aceitos +- O jogador convidado vê o convite na aba Convites ao abrir /f +- Não há limite de quantos convites você pode enviar de uma vez +- Sua facção pode ter até 50 membros no total + +## Promoções e Rebaixamentos + +- Apenas o Líder pode promover ou rebaixar +- /f promote eleva um Membro a Oficial +- /f demote rebaixa um Oficial de volta a Membro + +## Transferência de Liderança + +>[!WARNING] Transferir a liderança é irreversível. Você será rebaixado a Oficial e o jogador escolhido se torna o novo Líder. Tenha certeza de que confia nele completamente. + +`/f transfer ` + +O jogador alvo deve ser um membro atual da sua facção. diff --git a/src/main/resources/Server/Languages/pt-BR/help/your_faction/roles.md b/src/main/resources/Server/Languages/pt-BR/help/your_faction/roles.md new file mode 100644 index 00000000..4e9c40fa --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Cargos e Patentes + +Toda facção possui três cargos em uma hierarquia rígida. Cargos superiores herdam todas as capacidades dos cargos abaixo deles. + +--- + +## Detalhamento de Permissões + +| Ação | Líder | Oficial | Membro | +|------|-------|---------|--------| +| Construir no território | Sim | Sim | Sim | +| Usar base da facção | Sim | Sim | Sim | +| Chat de facção e aliados | Sim | Sim | Sim | +| Convidar jogadores | Sim | Sim | Não | +| Expulsar membros | Sim | Sim (apenas Membros) | Não | +| Reivindicar / liberar terreno | Sim | Sim | Não | +| Tomar território inimigo | Sim | Sim | Não | +| Definir base da facção | Sim | Sim | Não | +| Excluir base da facção | Sim | Sim | Não | +| Gerenciar relações (aliança/inimigo) | Sim | Sim | Não | +| Ver registros da facção | Sim | Sim | Não | +| Promover a Oficial | Sim | Não | Não | +| Rebaixar de Oficial | Sim | Não | Não | +| Renomear facção | Sim | Não | Não | +| Definir descrição / tag / cor | Sim | Não | Não | +| Abrir / fechar facção | Sim | Não | Não | +| Acessar configurações da facção | Sim | Não | Não | +| Transferir liderança | Sim | Não | Não | +| Dissolver facção | Sim | Não | Não | + +>[!NOTE] Oficiais podem expulsar Membros, mas não podem expulsar outros Oficiais. Apenas o Líder pode remover Oficiais. + +--- + +## Detalhes dos Cargos + +- Líder -- Um por facção. Tem controle total sobre todas as configurações, membros e território. Pode transferir a liderança para outro membro. +- Oficial -- Membros de confiança que ajudam a gerenciar a facção. Podem convidar, expulsar membros, reivindicar terrenos e cuidar da diplomacia. +- Membro -- O cargo padrão ao entrar. Pode construir no território, usar a base da facção e participar do chat da facção. + +>[!TIP] Promova seus membros mais ativos e confiáveis a Oficial para que possam ajudar a gerenciar o território e recrutar novos jogadores. diff --git a/src/main/resources/Server/Languages/pt-BR/hyperfactions.lang b/src/main/resources/Server/Languages/pt-BR/hyperfactions.lang new file mode 100644 index 00000000..a318ba5d --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Traduções para Português Brasileiro +# Formato: chave = valor (ou chave = "valor entre aspas") +# Nota: As chaves são automaticamente prefixadas com "hyperfactions." pelo I18nModule do Hytale +# Marcadores: {0}, {1}, etc. + +# ========== Comum ========== +common.no_permission = Você não tem permissão para fazer isso. +common.not_in_faction = Você não está em uma facção. +common.already_in_faction = Você já está em uma facção. +common.player_not_found = Jogador não encontrado. +common.faction_not_found = Facção não encontrada. +common.player_not_online = Esse jogador não está online. +common.must_be_leader = Apenas o líder da facção pode fazer isso. +common.must_be_officer = Você precisa ser Oficial ou Líder para fazer isso. +common.combat_tagged = Você não pode fazer isso durante combate. +common.cancel = Cancelar +common.confirm = Confirmar +common.save = Salvar +common.close = Fechar +common.clear = Limpar +common.back = Voltar +common.leave = Sair +common.transfer = Transferir +common.disband = Dissolver +common.world_fallback = mundo +common.yes = Sim +common.no = Não +common.loading = Carregando... +common.online = Online +common.offline = Offline +common.enabled = Ativado +common.disabled = Desativado +common.none = Nenhum +common.page = Página {0} de {1} +common.unknown = Desconhecido +common.error_generic = Algo deu errado. Tente novamente. +common.gui_fallback = Não foi possível acessar a interface. Use /f help para ver os comandos. +common.admin_prefix = [Admin] +common.location_error = Não foi possível determinar sua localização. +common.world_error = Não foi possível determinar seu mundo. +common.invalid_id = ID de facção inválido. +common.na = N/D + +# ========== Comandos - Criar ========== +cmd.create.no_permission = Você não tem permissão para criar facções. +cmd.create.usage = Uso: /f create +cmd.create.success = Facção '{0}' criada! +cmd.create.already_in_named = Você já está em {0}. +cmd.create.use_leave_first = Use /f leave primeiro se quiser criar uma nova facção. +cmd.create.name_taken = Esse nome de facção já está em uso. +cmd.create.name_too_short = O nome da facção é muito curto. +cmd.create.name_too_long = O nome da facção é muito longo. +cmd.create.failed = Falha ao criar a facção. + +# ========== Comandos - Dissolver ========== +cmd.disband.no_permission = Você não tem permissão para dissolver facções. +cmd.disband.not_leader = Apenas o líder da facção pode dissolvê-la. +cmd.disband.confirm_prompt = Tem certeza de que deseja dissolver sua facção? +cmd.disband.confirm_instruction = Digite /f disband --text novamente dentro de {0} segundos para confirmar. +cmd.disband.success = Sua facção foi dissolvida. +cmd.disband.failed = Falha ao dissolver a facção. +cmd.disband.cancelled = Confirmação anterior cancelada. Digite novamente para confirmar a dissolução. + +# ========== Comandos - Renomear ========== +cmd.rename.no_permission = Você não tem permissão. +cmd.rename.not_leader = Apenas o líder pode renomear a facção. +cmd.rename.usage = Uso: /f rename +cmd.rename.too_short = O nome é muito curto (mín. {0} caracteres). +cmd.rename.too_long = O nome é muito longo (máx. {0} caracteres). +cmd.rename.name_taken = Esse nome já está em uso. +cmd.rename.success = Facção renomeada para {0}! +cmd.rename.broadcast = {0} renomeou a facção para {1} + +# ========== Comandos - Descrição ========== +cmd.desc.no_permission = Você não tem permissão. +cmd.desc.not_officer = Você precisa ser oficial para definir a descrição. +cmd.desc.set = Descrição da facção definida! +cmd.desc.cleared = Descrição da facção removida. + +# ========== Comandos - Abrir / Fechar ========== +cmd.open.no_permission = Você não tem permissão. +cmd.open.not_leader = Apenas o líder pode alterar essa configuração. +cmd.open.already_open = Sua facção já está aberta. +cmd.open.success = Sua facção agora está aberta! Qualquer um pode entrar com /f join. +cmd.open.broadcast = {0} abriu a facção para entrada pública. +cmd.close.no_permission = Você não tem permissão. +cmd.close.not_leader = Apenas o líder pode alterar essa configuração. +cmd.close.already_closed = Sua facção já está fechada. +cmd.close.success = Sua facção agora é apenas por convite. +cmd.close.broadcast = {0} fechou a facção para apenas convite. + +# ========== Comandos - Cor ========== +cmd.color.no_permission = Você não tem permissão. +cmd.color.not_officer = Você precisa ser oficial para alterar a cor. +cmd.color.colors_disabled = Cores de facção estão desativadas. +cmd.color.usage = Uso: /f color +cmd.color.usage_hint = Códigos válidos: 0-9, a-f ou #RRGGBB hex +cmd.color.invalid = Cor inválida. Use 0-9, a-f, ou #RRGGBB. +cmd.color.success = Cor da facção atualizada! + +# ========== Comandos - Reivindicar ========== +cmd.claim.no_permission = Você não tem permissão para reivindicar território. +cmd.claim.already_yours = Sua facção já possui este chunk. +cmd.claim.cannot_claim_ally = Você não pode reivindicar território aliado. +cmd.claim.already_claimed_hint = Este chunk já está reivindicado. Use /f overclaim se eles estiverem vulneráveis. +cmd.claim.success = Chunk reivindicado em {0}, {1}! +cmd.claim.not_officer = Você precisa ser oficial para reivindicar território. +cmd.claim.already_claimed = Este chunk já está reivindicado. +cmd.claim.max_claims = Sua facção atingiu o máximo de reivindicações. Consiga mais poder! +cmd.claim.not_adjacent = Você deve reivindicar adjacente ao território existente. +cmd.claim.world_not_allowed = Reivindicações não são permitidas neste mundo. +cmd.claim.orbisguard = Esta área é protegida pelo OrbisGuard. +cmd.claim.zone_protected = Este chunk está em uma SafeZone ou WarZone. +cmd.claim.insufficient_power = Sua facção não tem poder suficiente para reivindicar mais território. +cmd.claim.failed = Falha ao reivindicar chunk. + +# ========== Comandos - Convidar ========== +cmd.invite.no_permission = Você não tem permissão para convidar jogadores. +cmd.invite.not_officer = Você precisa ser oficial para convidar jogadores. +cmd.invite.usage = Uso: /f invite +cmd.invite.player_not_found = Jogador '{0}' não encontrado ou offline. +cmd.invite.target_in_faction = Esse jogador já está em uma facção. +cmd.invite.sent = {0} convidado para sua facção. +cmd.invite.received = Você foi convidado para entrar em {0}! +cmd.invite.accept_hint = Digite /f accept {0} para entrar. + +# ========== Comandos - Aceitar / Entrar ========== +cmd.join.no_permission = Você não tem permissão para entrar em facções. +cmd.join.already_in_named = Você já está em {0}. +cmd.join.use_leave_hint = Use /f leave primeiro se quiser entrar em outra facção. +cmd.join.no_invites = Você não tem convites pendentes. +cmd.join.faction_not_found = Facção '{0}' não encontrada. +cmd.join.not_invited = Você não tem convite dessa facção. +cmd.join.faction_gone = Essa facção não existe mais. +cmd.join.success = Você entrou em {0}! +cmd.join.broadcast = {0} entrou na facção! +cmd.join.faction_full = Essa facção está cheia. +cmd.join.failed = Falha ao entrar na facção. + +# ========== Comandos - Expulsar ========== +cmd.kick.no_permission = Você não tem permissão para expulsar membros. +cmd.kick.usage = Uso: /f kick +cmd.kick.not_in_your_faction = O jogador '{0}' não está na sua facção. +cmd.kick.success = {0} expulso da facção. +cmd.kick.broadcast = {0} foi expulso da facção. +cmd.kick.kicked = Você foi expulso da facção. +cmd.kick.cannot_kick_higher = Você não tem permissão para expulsar esse jogador. +cmd.kick.cannot_kick_leader = Você não pode expulsar o líder da facção. +cmd.kick.failed = Falha ao expulsar jogador. + +# ========== Comandos - Sair ========== +cmd.leave.no_permission = Você não tem permissão para sair de facções. +cmd.leave.confirm_prompt = Tem certeza de que deseja sair da sua facção? +cmd.leave.confirm_instruction = Digite /f leave --text novamente dentro de {0} segundos para confirmar. +cmd.leave.success = Você saiu da sua facção. +cmd.leave.broadcast = {0} saiu da facção. +cmd.leave.failed = Falha ao sair da facção. +cmd.leave.cancelled = Confirmação anterior cancelada. Digite novamente para confirmar a saída. + +# ========== Comandos - Promover / Rebaixar / Transferir ========== +cmd.rank.promote_no_permission = Você não tem permissão para promover membros. +cmd.rank.promote_usage = Uso: /f promote +cmd.rank.promoted = {0} promovido a {1}! +cmd.rank.promote_broadcast = {0} foi promovido a {1}! +cmd.rank.already_highest = Não é possível promover mais. Use /f transfer para mudar o líder. +cmd.rank.promote_failed = Falha ao promover jogador. +cmd.rank.demote_no_permission = Você não tem permissão para rebaixar membros. +cmd.rank.demote_usage = Uso: /f demote +cmd.rank.demoted = {0} rebaixado a {1}. +cmd.rank.demote_broadcast = {0} foi rebaixado a {1}. +cmd.rank.already_lowest = Esse jogador já é Membro. +cmd.rank.demote_failed = Falha ao rebaixar jogador. +cmd.rank.transfer_no_permission = Você não tem permissão para transferir a liderança. +cmd.rank.transfer_usage = Uso: /f transfer +cmd.rank.player_not_in_faction = Jogador não encontrado na sua facção. +cmd.rank.transfer_confirm = Tem certeza de que deseja transferir a liderança para {0}? +cmd.rank.transfer_confirm_instruction = Digite /f transfer {0} --text novamente dentro de {1} segundos para confirmar. +cmd.rank.transferred = Liderança transferida para {0}! +cmd.rank.transfer_broadcast = {0} agora é o líder da facção! +cmd.rank.transfer_failed = Falha ao transferir a liderança. +cmd.rank.transfer_cancelled = Confirmação anterior cancelada. Digite novamente para confirmar a transferência. + +# ========== Comandos - Desreivindicar ========== +cmd.unclaim.no_permission = Você não tem permissão para desreivindicar território. +cmd.unclaim.success = Chunk desreivindicado em {0}, {1}. +cmd.unclaim.not_officer = Você precisa ser oficial para desreivindicar território. +cmd.unclaim.chunk_not_claimed = Este chunk não está reivindicado. +cmd.unclaim.not_your_claim = Sua facção não possui este chunk. +cmd.unclaim.cannot_unclaim_home = Não é possível desreivindicar o chunk com a base da facção. +cmd.unclaim.would_disconnect = Não é possível desreivindicar — isso desconectaria seu território. +cmd.unclaim.failed = Falha ao desreivindicar chunk. + +# ========== Comandos - Conquistar ========== +cmd.overclaim.no_permission = Você não tem permissão para conquistar território. +cmd.overclaim.success = Território inimigo conquistado! +cmd.overclaim.not_officer = Você precisa ser oficial para conquistar território. +cmd.overclaim.not_claimed = Este chunk não está reivindicado. Use /f claim. +cmd.overclaim.own_chunk = Sua facção já possui este chunk. +cmd.overclaim.ally = Você não pode conquistar território aliado. +cmd.overclaim.target_has_power = Essa facção ainda tem poder suficiente. +cmd.overclaim.failed = Falha ao conquistar território. + +# ========== Comandos - Preso ========== +cmd.stuck.no_permission = Você não tem permissão para usar /f stuck. +cmd.stuck.not_stuck = Você não está preso - aqui é território selvagem. +cmd.stuck.combat_tagged = Você não pode usar /f stuck durante combate! +cmd.stuck.no_safe = Não foi possível encontrar um local seguro. +cmd.stuck.teleporting = Teletransportando para segurança em {0} segundos. Não se mova! + +# ========== Comandos - Base ========== +cmd.home.no_permission = Você não tem permissão para teleportar à base da facção. +cmd.home.no_home = Sua facção não tem uma base definida. +cmd.home.combat_tagged = Você não pode teleportar durante combate! +cmd.home.teleported = Teleportado para a base da facção! + +# ========== Comandos - Definir Base ========== +cmd.sethome.no_permission = Você não tem permissão para definir a base da facção. +cmd.sethome.world_not_allowed = Não é possível definir a base neste mundo. +cmd.sethome.not_in_territory = Você só pode definir a base no território da sua facção. +cmd.sethome.set = Base da facção definida! +cmd.sethome.broadcast = {0} definiu a base da facção. +cmd.sethome.not_officer = Você precisa ser oficial para definir a base. +cmd.sethome.failed = Falha ao definir a base. + +# ========== Comandos - Excluir Base ========== +cmd.delhome.no_permission = Você não tem permissão para excluir a base da facção. +cmd.delhome.no_home = Sua facção não tem uma base definida. +cmd.delhome.deleted = Base da facção excluída! +cmd.delhome.broadcast = {0} excluiu a base da facção. +cmd.delhome.not_officer = Você precisa ser oficial para excluir a base. +cmd.delhome.failed = Falha ao excluir a base. + +# ========== Comandos - Relação (Aliado/Inimigo/Neutro/Relações) ========== +cmd.relation.ally_no_permission = Você não tem permissão para gerenciar alianças. +cmd.relation.ally_usage = Uso: /f ally +cmd.relation.ally_sent = Pedido de aliança enviado para {0}! +cmd.relation.ally_formed = Agora vocês são aliados de {0}! +cmd.relation.already_ally = Vocês já são aliados dessa facção. +cmd.relation.ally_failed = Falha ao enviar pedido de aliança. +cmd.relation.enemy_no_permission = Você não tem permissão para declarar inimigos. +cmd.relation.enemy_usage = Uso: /f enemy +cmd.relation.enemy_declared = {0} agora é seu inimigo! +cmd.relation.already_enemy = Vocês já são inimigos dessa facção. +cmd.relation.max_enemies = Você atingiu o número máximo de inimigos. +cmd.relation.enemy_failed = Falha ao definir inimigo. +cmd.relation.neutral_no_permission = Você não tem permissão para definir relações neutras. +cmd.relation.neutral_usage = Uso: /f neutral +cmd.relation.neutral_set = Sua facção agora é neutra com {0}. +cmd.relation.already_neutral = Vocês já são neutros com essa facção. +cmd.relation.neutral_failed = Falha ao definir neutro. +cmd.relation.cannot_self = Você não pode se aliar consigo mesmo. +cmd.relation.max_allies = Você atingiu o número máximo de aliados. +cmd.relation.view_no_permission = Você não tem permissão para ver relações. +cmd.relation.header = === Relações da Facção === +cmd.relation.allies_count = Aliados ({0}): +cmd.relation.enemies_count = Inimigos ({0}): +cmd.relation.list_entry = - {0} + +# ========== Comandos - Chat ========== +cmd.chat.usage = Uso: /f c [f|a|off] +cmd.chat.no_permission = Você não tem permissão para esse modo de chat. +cmd.chat.mode_set = Modo de chat definido para {0} + +# ========== Comandos - Convites ========== +cmd.invites.not_officer = Você precisa ser oficial para gerenciar convites. +cmd.invites.header = === Convites da Facção === +cmd.invites.no_pending = Nenhum convite ou solicitação pendente. +cmd.invites.outgoing = Convites Enviados: +cmd.invites.outgoing_entry = {0} (convidado por {1}) +cmd.invites.requests = Solicitações de Entrada: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Seus Convites === +cmd.invites.no_invites = Você não tem convites pendentes. +cmd.invites.invite_entry = {0} - Use /f accept {1} + +# ========== Comandos - Solicitação ========== +cmd.request.no_permission = Você não tem permissão para solicitar entrada em facções. +cmd.request.already_in_named = Você já está em {0}. +cmd.request.use_leave_hint = Use /f leave primeiro se quiser entrar em outra facção. +cmd.request.usage = Uso: /f request [mensagem] +cmd.request.faction_open = Essa facção está aberta! Use /f accept {0} para entrar diretamente. +cmd.request.already_requested = Você já tem uma solicitação pendente para essa facção. +cmd.request.has_invite = Você foi convidado para essa facção! Use /f accept {0} para entrar. +cmd.request.sent = Solicitação de entrada enviada para {0}! +cmd.request.your_message = Sua mensagem: "{0}" +cmd.request.officer_review = Um oficial irá analisar sua solicitação. +cmd.request.officer_notify = {0} solicitou entrada na sua facção! +cmd.request.officer_review_hint = Use /f gui > Convites para analisar. + +# ========== Comandos - Informações ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = Você não tem permissão para ver informações da facção. +cmd.info.faction_not_found = Facção '{0}' não encontrada. +cmd.info.not_in_faction_hint = Você não está em uma facção. Use /f info +cmd.info.leader = Líder: {0} +cmd.info.members = Membros: {0}/{1} +cmd.info.power = Poder: {0} +cmd.info.claims = Reivindicações: {0} +cmd.info.raidable = VULNERÁVEL! +cmd.info.allies = Aliados: {0} +cmd.info.enemies = Inimigos: {0} +cmd.info.they_consider = Eles consideram você: {0} +cmd.info.you_consider = Você os considera: {0} +cmd.info.members_no_permission = Você não tem permissão para ver membros da facção. +cmd.info.members_header = === Membros de {0} ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = Você não tem permissão para ver a lista de facções. +cmd.info.list_empty = Não há facções. +cmd.info.list_header = === Facções ({0}) === +cmd.info.list_entry = {0} - {1} membros, {2} poder +cmd.info.list_entry_raidable = {0} - {1} membros, {2} poder [VULNERÁVEL] +cmd.info.help_no_permission = Você não tem permissão para ver a ajuda. +cmd.info.who_no_permission = Você não tem permissão para ver informações do jogador. +cmd.info.who_faction = Facção: {0} +cmd.info.who_role = Cargo: {0} +cmd.info.who_joined = Entrou: {0} +cmd.info.who_faction_none = Facção: Nenhuma +cmd.info.who_power = Poder: {0} +cmd.info.who_status = Status: {0} +cmd.info.who_last_seen = Visto por último: {0} +cmd.info.map_no_permission = Você não tem permissão para ver o mapa. +cmd.info.map_header = === Mapa de Território === +cmd.info.map_legend = Legenda: +Você /Próprio /Aliado /Inimigo -Selvagem +cmd.info.map_gui_hint = Use /f gui para mapa interativo + +# ========== Comandos - Poder ========== +cmd.power.personal = Poder Pessoal: {0}/{1} +cmd.power.faction = Poder da Facção: {0}/{1} +cmd.power.death_loss = Perda por Morte: {0} +cmd.power.regen = Taxa de Regeneração: {0}/hr +cmd.power.no_permission = Você não tem permissão para ver informações de poder. +cmd.power.header = Poder de {0}: +cmd.power.current = Atual: {0} + +# ========== Comandos - Economia ========== +cmd.economy.balance = Saldo: {0} +cmd.economy.deposited = Depositou {0} na tesouraria da facção. +cmd.economy.withdrawn = Sacou {0} da tesouraria da facção. +cmd.economy.transferred = Transferiu {0} para {1}. +cmd.economy.insufficient = Fundos insuficientes na tesouraria da facção. +cmd.economy.invalid_amount = Valor inválido: {0} +cmd.economy.economy_disabled = A economia está desativada. +cmd.economy.balance_no_permission = Você não tem permissão para ver saldos. +cmd.economy.treasury_unavailable = A tesouraria não está disponível. +cmd.economy.balance_display = Tesouraria de {0}: {1} +cmd.economy.deposit_no_permission = Você não tem permissão para depositar. +cmd.economy.deposit_faction_denied = Você não tem permissão da facção para depositar. +cmd.economy.deposit_usage = Uso: /f deposit +cmd.economy.amount_positive = O valor deve ser positivo. +cmd.economy.wallet_insufficient = Você não tem dinheiro suficiente. Carteira: {0} +cmd.economy.wallet_withdraw_failed = Falha ao sacar da sua carteira. +cmd.economy.deposit_failed = Falha ao depositar na tesouraria da facção. Dinheiro devolvido. +cmd.economy.withdraw_no_permission = Você não tem permissão para sacar. +cmd.economy.withdraw_faction_denied = Você não tem permissão da facção para sacar. +cmd.economy.withdraw_usage = Uso: /f withdraw +cmd.economy.withdraw_limit_denied = Saque negado: {0} +cmd.economy.wallet_deposit_failed = Aviso: Falha ao depositar na sua carteira. Contate um admin. +cmd.economy.withdraw_limit_exceeded = Saque negado: limite excedido. +cmd.economy.withdraw_failed = Saque falhou: {0} +cmd.economy.transfer_no_permission = Você não tem permissão para transferir. +cmd.economy.transfer_faction_denied = Você não tem permissão da facção para transferir. +cmd.economy.transfer_usage = Uso: /f money transfer +cmd.economy.transfer_self = Não é possível transferir para sua própria facção. +cmd.economy.transfer_limit_denied = Transferência negada: {0} +cmd.economy.transfer_limit_exceeded = Transferência negada: limite excedido. +cmd.economy.transfer_failed = Transferência falhou: {0} +cmd.economy.log_no_permission = Você não tem permissão para ver o histórico de transações. +cmd.economy.log_header = Histórico de Transações (página {0}/{1}) +cmd.economy.log_empty = Nenhuma transação encontrada. +cmd.economy.money_help_header = Comandos da Tesouraria: +cmd.economy.money_help_balance = /f money balance [facção] - Ver saldo +cmd.economy.money_help_deposit = /f money deposit - Depositar na tesouraria +cmd.economy.money_help_withdraw = /f money withdraw - Sacar da tesouraria +cmd.economy.money_help_transfer = /f money transfer - Transferir entre facções +cmd.economy.money_help_log = /f money log [página] [tipo] - Ver histórico de transações + +# ========== Proteção - Frases de Ação ========== +protection.action.generic = Você não pode fazer isso +protection.action.build = Você não pode construir ou destruir blocos +protection.action.interact = Você não pode interagir com isso +protection.action.door = Você não pode usar portas +protection.action.container = Você não pode abrir contêineres +protection.action.bench = Você não pode usar estações de criação +protection.action.processing = Você não pode usar estações de processamento +protection.action.seat = Você não pode usar assentos +protection.action.light = Você não pode alternar luzes +protection.action.teleporter = Você não pode usar teletransportadores +protection.action.crate = Você não pode usar caixotes +protection.action.tame = Você não pode domesticar criaturas +protection.action.npc = Você não pode interagir com NPCs +protection.action.mount = Você não pode montar criaturas +protection.action.pve = Você não pode causar dano a criaturas +protection.action.item_drop = Você não pode largar itens +protection.action.item_pickup = Você não pode pegar itens + +# ========== Proteção - Motivos de Negação ========== +protection.denied.safezone = {0} em uma SafeZone. +protection.denied.warzone = {0} em uma WarZone. +protection.denied.enemy_claim = {0} em território inimigo. +protection.denied.claimed = {0} em território reivindicado. +protection.denied.here = {0} aqui. +protection.denied.zone = {0} nesta zona. +protection.denied.faction_perm = {0} aqui. (Permissão da facção: {1}) +protection.denied.ally_territory = {0} aqui. (Território aliado) +protection.denied.error = Erro de proteção — ação bloqueada por segurança. + +# ========== Proteção - PvP ========== +protection.pvp.safezone = PvP está desativado em SafeZones. +protection.pvp.same_faction = Você não pode atacar membros da facção. +protection.pvp.ally = Você não pode atacar aliados. +protection.pvp.spawn_protected = Esse jogador tem proteção de spawn. +protection.pvp.territory_disabled = PvP está desativado neste território. +protection.pvp.generic = Você não pode atacar este jogador. + +# ========== Proteção - Dano a Entidades ========== +protection.mob_damage_disabled = Dano de mobs está desativado nesta zona. +protection.pve_damage_disabled = Dano PvE está desativado nesta zona. +protection.pve_territory_denied = Você não pode causar dano a mobs neste território. + +# ========== Proteção - Marca de Combate ========== +protection.combat_tag_command = Você não pode usar esse comando durante combate. + +# ========== Anúncios do Servidor ========== +# Estes são transmitidos para todos os jogadores online em eventos significativos de facção. +# {0}, {1} = valores dinâmicos (nomes de facções, nomes de jogadores) +server_announce.faction_created = {0} fundou a facção {1}! +server_announce.faction_disbanded = A facção {0} foi dissolvida! +server_announce.leadership_transfer = {0} agora é o líder de {1}! +server_announce.overclaim = {0} conquistou território de {1}! +server_announce.war_declared = {0} declarou guerra contra {1}! +server_announce.alliance_formed = {0} e {1} agora são aliados! +server_announce.alliance_broken = {0} e {1} não são mais aliados! + +# ========== Sistema de Teletransporte ========== +teleport.cooldown_wait = Você deve esperar {0} antes de teleportar novamente. +teleport.warmup_start = Teletransportando para a base da facção em {0} segundos... +teleport.combat_cancelled = Teletransporte cancelado - você está em combate! +teleport.success_default = Teleportado para a base da facção! +teleport.no_home = Sua facção não tem uma base definida. +teleport.world_not_found = Mundo não encontrado. +teleport.failed = Teletransporte falhou. +teleport.countdown = Teletransportando em {0} segundos... +teleport.countdown_one = Teletransportando em 1 segundo... +teleport.moved_cancelled = Teletransporte cancelado - você se moveu! +teleport.damage_cancelled = Teletransporte cancelado - você recebeu dano! +teleport.mount_teleport_blocked = Você não pode teleportar para essa zona enquanto montado. +teleport.mount_entry_blocked = Você não pode entrar nesta zona enquanto montado. + +# ========== Exibição do Chat ========== +chat.display.public = Público +chat.display.faction = Facção +chat.display.ally = Aliado diff --git a/src/main/resources/Server/Languages/pt-BR/hyperfactions_admin.lang b/src/main/resources/Server/Languages/pt-BR/hyperfactions_admin.lang new file mode 100644 index 00000000..3188d15f --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Traduções para Português Brasileiro +# Formato: chave = valor +# Nota: As chaves são automaticamente prefixadas com "hyperfactions_admin." pelo I18nModule do Hytale + +# ========== Barra de Navegação Admin ========== +nav.dashboard = Painel +nav.actions = Ações +nav.factions = Facções +nav.players = Jogadores +nav.economy = Economia +nav.zones = Zonas +nav.config = Config +nav.backups = Backups +nav.log = Registro +nav.updates = Atualizações +nav.help = Ajuda +nav.version = Versão + +# ========== Rótulos Comuns Admin ========== +common.faction_not_found = Facção Não Encontrada +common.no_faction = Sem Facção +common.not_set = Não definido +common.on = Ligado +common.off = Desligado +common.enable = Ativar +common.disable = Desativar +common.none_paren = (Nenhum) +common.invalid_faction = Facção inválida. +common.leader_prefix = Líder: {0} +common.members_suffix = {0} membros +common.claims_suffix = {0} reivindicações +common.factions_suffix = {0} facções +common.players_suffix = {0} jogadores +common.chunks_suffix = {0} chunks +common.entries_suffix = {0} entradas +common.found_suffix = {0} encontrados +common.power_format = {0}/{1} poder +common.raidable = Vulnerável +common.protected = Protegida +common.no_description = Sem descrição definida. +common.officers_more = +{0} mais +common.custom_max = (máx personalizado) +common.default_max = (máx padrão) +common.now = Agora +common.ago_suffix = {0} atrás +common.just_now = agora mesmo +common.no_membership_history = Sem histórico de filiação + +# ========== Painel Admin ========== +dashboard.factions_prefix = Facções: {0} +dashboard.members_prefix = Total de Membros: {0} +dashboard.claims_prefix = Total de Reivindicações: {0} + +# ========== Ações Admin ========== +actions.confirm_reset = Confirmar Reset? +actions.confirm_trigger = Confirmar Execução? +actions.kd_reset = K/D resetado para {0} jogadores. +actions.kd_reset_failed = Falha ao resetar K/D: {0} +actions.upkeep_unavailable = O processador de manutenção não está disponível. +actions.upkeep_triggered = Cobrança de manutenção executada. +actions.upkeep_failed = Manutenção falhou: {0} + +# ========== Dissolver Admin ========== +disband.faction_gone = A facção não existe mais. +disband.success = Facção '{0}' foi dissolvida. +disband.failed = Falha ao dissolver: {0} +disband.no_leader = A facção não tem líder, não é possível dissolver. + +# ========== Desreivindicar Tudo Admin ========== +unclaim.removed = [Admin] Removidas {0} reivindicações de {1}. +unclaim.no_claims = {0} não tinha reivindicações para remover. + +# ========== Lista de Facções Admin ========== +factions.home_not_set = Não definida +factions.teleported = Teleportado para a base de {0}. +factions.no_home = A facção não tem base definida. +factions.world_not_found = Mundo alvo não encontrado. + +# ========== Info da Facção Admin ========== +info.faction_gone = Esta facção não existe mais. + +# ========== Membros da Facção Admin ========== +members.sort_role = Cargo +members.sort_online = Online +members.sort_name = Nome +members.sort_power = Poder +members.promoted = [Admin] {0} promovido a {1}. +members.demoted = [Admin] {0} rebaixado a {1}. +members.kicked = [Admin] {0} expulso da facção. + +# ========== Relações da Facção Admin ========== +relations.allies_header = ALIADOS ({0}) +relations.enemies_header = INIMIGOS ({0}) +relations.no_allies = Sem aliados. +relations.no_enemies = Sem inimigos. +relations.neutral_count = {0} facções neutras +relations.since_today = Desde: hoje +relations.since_one_day = Desde: 1 dia atrás +relations.since_days = Desde: {0} dias atrás +relations.set_ally = [Admin] Status de aliança mútua definido com {0}. +relations.set_enemy = Status de inimizade mútua definido com {0}. +relations.set_neutral = [Admin] Status neutro mútuo definido com {0}. + +# ========== Configurações da Facção Admin ========== +settings.locked = Esta configuração está bloqueada pela configuração do servidor. +settings.perm_toggled = {0} definido como {1}. +settings.color_changed = Cor da facção definida como {0}. +settings.recruitment_set = Recrutamento definido como {0}. +settings.no_home = [Admin] Esta facção não tem base definida. +settings.home_cleared = Base da facção removida para {0}. + +# ========== Rótulos do Menu de Ordenação ========== +sort.power = Poder +sort.name = Nome +sort.members = Membros +sort.balance = Saldo + +# ========== Jogadores Admin ========== +players.sort_last_online = Último Online +players.sort_faction = Facção +players.sort_online = Online +players.not_online = O jogador não está online. +players.world_not_found = Mundo alvo não encontrado. +players.teleported = [Admin] Teleportado para {0}. + +# ========== Info do Jogador Admin ========== +playerinfo.disband_faction = Dissolver Facção +playerinfo.kick_leader = Expulsar Líder +playerinfo.enter_valid_number = Insira um número válido. +playerinfo.enter_valid_positive = Insira um número positivo válido. +playerinfo.faction_gone = A facção não existe mais. +playerinfo.kd_reset = K/D resetado para {0}. +playerinfo.kicked_success = {0} expulso de {1}. +playerinfo.kicked_leader = Líder {0} expulso. Liderança transferida para {1}. +playerinfo.disbanded_kick = [Admin] Facção '{0}' dissolvida (último membro expulso). + +# ========== Economia Admin ========== +economy.no_data = Nenhuma facção com dados de economia. +economy.amount_zero = O valor não pode ser zero. +economy.enter_amount = Por favor, insira um valor. +economy.invalid_number = Número inválido: {0} +economy.error = Ocorreu um erro. +economy.balance_negative = O saldo não pode ser negativo. +economy.failed = Falhou: {0} +economy.bulk_complete = Ajuste em massa concluído: {0} {1} para {2} facções. +economy.bulk_failures = ({0} falharam) + +# ========== Zonas Admin ========== +zones.not_found = Zona não encontrada. +zones.invalid_id = ID de zona inválido. +zones.deleted = Zona {0} excluída. +zones.delete_failed = Falha ao excluir zona: {0} +zones.no_chunks = Sem chunks +zones.chunks_suffix = {0} ({1} chunks) + +# ========== Assistente de Criação de Zona ========== +wizard.enter_name = Por favor, insira um nome para a zona. +wizard.name_too_short = O nome da zona deve ter pelo menos {0} caracteres. +wizard.name_too_long = O nome da zona não pode exceder {0} caracteres. +wizard.name_taken = Uma zona com este nome já existe. +wizard.radius_range = O raio deve estar entre 1 e {0}. +wizard.create_failed = Não foi possível criar a zona: {0} +wizard.created_not_found = Zona criada mas não pôde ser encontrada. +wizard.created = {0} '{1}' criada! +wizard.chunk_claimed = Chunk reivindicado ({0}, {1}). +wizard.chunk_failed = Não foi possível reivindicar o chunk atual: {0} +wizard.radius_claimed = {0} chunks reivindicados em um raio de {1} de {2}. +wizard.radius_no_claims = Nenhum chunk pôde ser reivindicado (área pode estar ocupada). +wizard.no_claims = Zona criada sem reivindicações. +wizard.chunks_preview = ~{0} chunks + +# ========== Renomear Zona ========== +zone_rename.zone_gone = A zona não existe mais. +zone_rename.enter_name = Por favor, insira um nome para a zona. +zone_rename.too_short = O nome da zona deve ter pelo menos {0} caractere. +zone_rename.too_long = O nome da zona não pode exceder {0} caracteres. +zone_rename.same_name = Esse já é o nome desta zona. +zone_rename.renamed = [Admin] Zona renomeada de {0} para {1}! +zone_rename.name_taken = Uma zona com esse nome já existe. +zone_rename.invalid_name = Nome de zona inválido. +zone_rename.rename_failed = Falha ao renomear zona: {0} + +# ========== Alterar Tipo de Zona ========== +zone_type.zone_gone = A zona não existe mais. +zone_type.changed = [Admin] {0} alterada de {1} para {2} ({3}). +zone_type.failed = Falha ao alterar tipo da zona: {0} +zone_type.flags_reset = flags resetadas +zone_type.flags_kept = flags mantidas + +# ========== Flags de Integração de Zona ========== +zone_int.zone_not_found = Zona Não Encontrada +zone_int.no_plugin = (sem plugin) +zone_int.default = (padrão) +zone_int.custom = (personalizado) + +# Rótulos de interface das flags de integração +gui.zint_cat_gravestones = Lápides +gui.zint_gravestones_desc = Quando LIGADO, não-donos podem saquear lápides. Donos sempre podem. +gui.zint_cat_world_map = Mapa do Mundo +gui.zint_world_map_desc = Sobrescrever ocultação do mapa para jogadores nesta zona. Quando ativado, selecione quem pode ver jogadores nesta zona. +gui.zint_visibility_label = Nível de Visibilidade: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Restaurar Padrões +gui.zint_back_to_flags = Voltar às Flags +gui.zint_map_vis_faction = Apenas Facção +gui.zint_map_vis_ally = Facção + Aliados +gui.zint_map_vis_all = Todos os Jogadores + +# ========== Registro de Atividades ========== +log.all_types = Todos os Tipos +log.no_logs = Nenhum registro de atividade corresponde aos filtros. + +# ========== Página de Versão ========== +version.active = Ativo +version.not_found = Não Encontrado +version.not_detected = Não Detectado +version.not_installed = Não Instalado +version.active_version = Ativo (v{0}) +version.active_compatible = Ativo (compatível) +version.active_claims_only = Ativo (apenas reivindicações) +version.installed_no_perm = Instalado (sem provedor de permissão) +version.active_provider = Ativo ({0}) + +# ========== Página Principal Admin ========== +main.reload_hint = Use /f reload para recarregar a configuração. +main.unclaim_hint = Use /f admin unclaim {0} para desreivindicar todos os {1} chunks. + +# ========== Flags/Configurações de Zona ========== +zflags.invalid_flag = Flag inválida. +zflags.zone_not_found = Zona não encontrada. +zflags.conflict = (conflito) +zflags.mixin = (mixin) +zflags.reset_int = Restaurar flags de integração para os padrões. +zflags.reset_all = Restaurar todas as flags para os padrões. +zflags.reset_failed = Falha ao restaurar flags: {0} +zflags.back_to_settings = Voltar às Configurações + +# Rótulos de interface das configurações de zona +gui.zset_cat_combat = Combate +gui.zset_cat_damage = Dano +gui.zset_cat_death = Morte +gui.zset_cat_building = Construção +gui.zset_cat_interaction = Interação +gui.zset_cat_transport = Transporte +gui.zset_cat_items = Itens +gui.zset_cat_spawning = Geração de Mobs +gui.zset_cat_mob_clear = Limpeza de Mobs +gui.zset_children_hint = (filhos só se aplicam quando o pai está LIGADO) +gui.zset_reset_defaults = Restaurar Padrões +gui.zset_integration_flags = Flags de Integração +gui.zset_back_to_zones = Voltar às Zonas +gui.zset_chunks = {0} chunks + +# Nomes de Exibição das Flags de Zona +gui.zflag_pvp_enabled = PvP Ativado +gui.zflag_friendly_fire = Fogo Amigo +gui.zflag_friendly_fire_faction = Dano de Facção +gui.zflag_friendly_fire_ally = Dano de Aliado +gui.zflag_projectile_damage = Dano de Projétil +gui.zflag_mob_damage = Receber Dano de Mob +gui.zflag_pve_damage = Causar Dano a Mob +gui.zflag_fall_damage = Dano de Queda +gui.zflag_environmental_damage = Dano Amb. +gui.zflag_explosion_damage = Dano de Explosão +gui.zflag_fire_spread = Propagação de Fogo +gui.zflag_keep_inventory = Manter Inventário +gui.zflag_power_loss = Perda de Poder +gui.zflag_build_allowed = Construção Permitida +gui.zflag_block_place = Colocação de Blocos +gui.zflag_hammer_use = Uso de Martelo +gui.zflag_builder_tools_use = Ferramentas de Construção +gui.zflag_block_interact = Interação com Blocos +gui.zflag_door_use = Uso de Portas +gui.zflag_container_use = Uso de Contêineres +gui.zflag_bench_use = Uso de Bancadas +gui.zflag_processing_use = Uso de Processamento +gui.zflag_seat_use = Uso de Assentos +gui.zflag_mount_use = Uso de Montarias +gui.zflag_light_use = Uso de Luzes +gui.zflag_npc_use = Interação com NPCs +gui.zflag_crate_pickup = Pegar Caixote +gui.zflag_crate_place = Colocar Caixote +gui.zflag_npc_tame = Domesticar NPC +gui.zflag_npc_interact = Interagir com NPC +gui.zflag_teleporter_use = Uso de Teletransportador +gui.zflag_portal_use = Uso de Portal +gui.zflag_mount_entry = Entrada de Montaria +gui.zflag_item_drop = Largar Item +gui.zflag_item_pickup = Coleta Automática +gui.zflag_item_pickup_manual = Coleta por Tecla F +gui.zflag_invincible_items = Itens Invencíveis +gui.zflag_mob_spawning = Geração de Mobs +gui.zflag_hostile_mob_spawning = Mobs Hostis +gui.zflag_passive_mob_spawning = Mobs Passivos +gui.zflag_neutral_mob_spawning = Mobs Neutros +gui.zflag_npc_spawning = Geração de NPCs +gui.zflag_mob_clear = Limpeza de Mobs +gui.zflag_hostile_mob_clear = Limpar Mobs Hostis +gui.zflag_passive_mob_clear = Limpar Mobs Passivos +gui.zflag_neutral_mob_clear = Limpar Mobs Neutros +gui.zflag_gravestone_access = Outros Saqueiam Lápides +gui.zflag_show_on_map = Mostrar no Mapa +gui.zflag_essentials_homes = Uso de Base +gui.zflag_essentials_warps = Uso de Warp +gui.zflag_essentials_kits = Resgatar Kit + +# ========== Propriedades da Zona ========== +zprop.current_custom = Atual: "{0}" (personalizado) +zprop.current_default = Atual: "{0}" (padrão) +zprop.pvp_disabled = PvP Desativado +zprop.pvp_enabled = PvP Ativado +zprop.name_empty = O nome não pode estar vazio. +zprop.renamed = Zona renomeada para "{0}". +zprop.name_taken = Uma zona com esse nome já existe. +zprop.name_invalid = Nome inválido (máx 32 caracteres). +zprop.rename_failed = Falha ao renomear: {0} +zprop.upper_empty = O título superior não pode estar vazio. Use Limpar para restaurar. +zprop.upper_set = Título superior definido. +zprop.upper_reset = Título superior restaurado ao padrão. +zprop.lower_empty = O título inferior não pode estar vazio. Use Limpar para restaurar. +zprop.lower_set = Título inferior definido. +zprop.lower_reset = Título inferior restaurado ao padrão. + +# ========== Relações Adicional ========== +relations.failed = Falhou: {0} + +# ========== Membros Adicional ========== +members.never = Nunca +members.teleported = [Admin] Teleportado para {0}. + +# ========== Info do Jogador Adicional ========== +playerinfo.records = {0} registros +playerinfo.joined_date = Entrou: {0} +playerinfo.current = Atual +playerinfo.left_date = Saiu: {0} + +# ========== Mapa da Zona ========== +map.world_warning = AVISO: Você está em '{0}' - a zona está em '{1}' +map.position = Sua Posição: Chunk ({0}, {1}) +map.zone_gone = A zona não existe mais. +map.claimed = Chunk reivindicado ({0}, {1}) para {2}. +map.claim_failed = Falha ao reivindicar chunk: {0} +map.unclaimed = Chunk desreivindicado ({0}, {1}) de {2}. +map.unclaim_failed = Falha ao desreivindicar chunk: {0} +map.chunk_belongs = Este chunk pertence a {0}. +map.chunk_faction = Este chunk está reivindicado por uma facção. +map.chunk_protected = Este chunk está em uma região protegida. +map.another_zone = outra zona + +# ========== Chaves de Rótulos da Interface (para localização de texto fixo em .ui) ========== + +# Títulos de Páginas +gui.title_dashboard = Painel Admin +gui.title_main = Admin de Facções +gui.title_actions = Admin: Ações do Servidor +gui.title_factions = Gerenciamento de Facções +gui.title_players = Gerenciamento de Jogadores +gui.title_economy = Admin: Economia do Servidor +gui.title_zones = Gerenciamento de Zonas +gui.title_backups = Backups +gui.title_config = Configuração +gui.title_help = Ajuda Admin +gui.title_updates = Atualizações +gui.title_version = Versão e Integrações +gui.title_activity_log = Admin: Registro de Atividades +gui.title_player_info = Admin: Info do Jogador +gui.title_faction_info = Admin: Info da Facção +gui.title_faction_settings = Admin: Config da Facção +gui.title_faction_members = Admin: Membros +gui.title_faction_relations = Admin: Relações +gui.title_zone_map = Editor de Mapa de Zona +gui.title_zone_settings = Admin: Config da Zona +gui.title_zone_properties = Admin: Propriedades da Zona +gui.title_bulk_economy = Ajuste em Massa da Tesouraria +gui.title_economy_adjust = Admin: Economia + +# Rótulos do painel +gui.dash_server_stats = Estatísticas do Servidor +gui.dash_factions = Facções +gui.dash_total_members = Total de Membros +gui.dash_total_claims = Total de Reivindicações +gui.dash_zones = Zonas +gui.dash_safe_war = segura / guerra +gui.dash_total_power = Poder Total +gui.dash_avg_power = Poder Médio/Facção +gui.dash_total_economy = Economia Total +gui.dash_wealthiest = Mais Rica +gui.dash_avg_balance = Saldo Médio +gui.dash_protection_bypass = Ignorar Proteção: + +# Botões e rótulos comuns +gui.search = Buscar: +gui.sort = Ordenar: +gui.prev = < Anterior +gui.next = Próximo > +gui.back = Voltar +gui.done = Concluído +gui.cancel = Cancelar +gui.apply = Aplicar +gui.set = Definir +gui.reset = Resetar +gui.coming_soon = Em Breve +gui.zones_btn = Zonas +gui.reload_btn = Recarregar +gui.all = Todos +gui.safe = Segura +gui.war = Guerra +gui.create_zone = + Criar + +# Rótulos da página de ações +gui.act_combat_stats = Estatísticas de Combate +gui.act_combat_desc = Resetar abates e mortes de TODOS os jogadores no servidor. Esta ação não pode ser desfeita. +gui.act_reset_kd = Resetar Todos os K/D +gui.act_economy = Economia +gui.act_economy_desc = Adicionar ou remover dinheiro de TODAS as tesourarias de facção de uma vez. +gui.act_bulk_adjust = Ajuste em Massa +gui.act_upkeep_collection = Cobrança de Manutenção +gui.act_upkeep_desc = Executar manualmente a cobrança de manutenção para todas as facções agora, independente do temporizador agendado. +gui.act_trigger_upkeep = Executar Manutenção + +# Rótulos de páginas de marcação +gui.backup_heading = Gerenciamento de Backups +gui.backup_desc1 = Criar, restaurar e gerenciar backups de dados de facção. +gui.backup_desc2 = Backups automáticos são salvos na pasta data/backups. +gui.config_heading = Editor de Configuração +gui.config_desc1 = Configurar o HyperFactions diretamente pela interface. +gui.config_desc2 = Por enquanto, use /f reload para recarregar alterações de configuração. +gui.help_heading = Documentação Admin +gui.help_desc1 = Ver documentação admin e referência de comandos. +gui.help_desc2 = Para ajuda, visite a wiki do HyperFactions. +gui.updates_heading = Central de Atualizações +gui.updates_desc1 = Verificar novas versões e ver changelogs. +gui.updates_desc2 = Visite a página do HyperFactions para as últimas atualizações. + +# Rótulos da página de versão +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Hytale Server +gui.ver_java = Java +gui.ver_permissions = PERMISSÕES +gui.ver_placeholders = PLACEHOLDERS +gui.ver_economy_section = ECONOMIA +gui.ver_protection = PROTEÇÃO +gui.ver_disabled = Desativado + +# Cabeçalhos de colunas (compartilhados entre páginas) +gui.col_faction = Facção +gui.col_balance = Saldo +gui.col_members = Membros +gui.col_actions = Ações +gui.col_time = Hora +gui.col_type = Tipo +gui.col_message = Mensagem + +# Rótulos da página de economia +gui.econ_total_balance = Saldo Total +gui.econ_factions = Facções +gui.econ_avg_balance = Saldo Médio +gui.econ_in_grace = Em Carência +gui.econ_collected = Coletado (24h) +gui.econ_next_collection = Próxima Cobrança +gui.econ_no_data = Nenhuma facção com dados de economia. + +# Rótulos do registro de atividades +gui.log_type = Tipo: +gui.log_time = Hora: +gui.log_player = Jogador: +gui.log_no_logs = Nenhum registro de atividade corresponde aos filtros. + +# Rótulos de info do jogador +gui.plr_first_joined = Primeiro acesso: +gui.plr_last_online = Último online: +gui.plr_uuid = UUID: +gui.plr_faction = Facção: +gui.plr_role = Cargo: +gui.plr_view_faction = Ver Facção +gui.plr_power = Poder +gui.plr_max_power = Poder Máximo +gui.plr_set_power = Definir +gui.plr_reset_power = Resetar +gui.plr_set_max = Definir +gui.plr_reset_max = Resetar +gui.plr_no_power_loss = Sem Perda de Poder +gui.plr_no_claim_decay = Sem Decaimento de Reivindicação +gui.plr_kills = Abates +gui.plr_deaths = Mortes +gui.plr_kdr = Razão K/D +gui.plr_reset_kd = Resetar K/D +gui.plr_kick = Expulsar +gui.plr_membership_history = Histórico de Filiação +gui.plr_no_faction_label = Não está em uma facção +gui.plr_power_management = Gerenciamento de Poder +gui.plr_combat_stats = Estatísticas de Combate +gui.plr_bypass_flags = Flags de Bypass +gui.plr_admin_controls = Controles Admin +gui.plr_kd_subtitle = K / D +gui.plr_max_prefix = Máx: +gui.plr_view = Ver +gui.plr_kick_from_faction = Expulsar da Facção +gui.plr_set_max_btn = Definir Máx +gui.plr_combat = Combate +gui.plr_reason_active = ATIVO +gui.plr_reason_left = SAIU +gui.plr_reason_kicked = EXPULSO +gui.plr_reason_disbanded = DISSOLVIDA + +# Rótulos de entrada de membro +gui.mem_label_power = Poder: +gui.mem_label_joined = Entrou: +gui.mem_label_last_death = Última Morte: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Info +gui.mem_btn_teleport = Teleportar +gui.mem_btn_promote = Promover +gui.mem_btn_demote = Rebaixar +gui.mem_btn_kick = Expulsar +gui.econ_not_enabled = O sistema de economia não está ativado. +gui.info_more = +{0} mais +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7d +gui.log_time_all = Todos +gui.shape_circular = circular +gui.shape_square = quadrado +gui.nav_title = Painel Admin +gui.econ_btn_adjust = Ajustar +gui.econ_btn_info = Info + +# Rótulos de info da facção +gui.fac_description = Descrição +gui.fac_power = Poder +gui.fac_claims = Reivindicações +gui.fac_members = Membros +gui.fac_recruitment = Recrutamento +gui.fac_founded = Fundada +gui.fac_allies = Aliados +gui.fac_enemies = Inimigos +gui.fac_raidable = Status de Vulnerabilidade +gui.fac_treasury = Tesouraria +gui.fac_leader = Líder +gui.fac_officers = Oficiais +gui.fac_view_members = Ver Membros +gui.fac_view_relations = Ver Relações +gui.fac_view_settings = Configurações +gui.fac_disband = Dissolver Facção +gui.fac_power_management = Gerenciamento de Poder +gui.fac_reset_all_power = Resetar Todo o Poder +gui.fac_econ_adjust = Ajustar Saldo +gui.fac_econ_view_log = Ver Histórico de Transações +gui.fac_current_max = atual / máx +gui.fac_claimed_max = reivindicado / máx +gui.fac_relations = Relações +gui.fac_ally_enemy = aliado / inimigo +gui.fac_status = Status +gui.fac_info = Info +gui.fac_treasury_balance = saldo da tesouraria +gui.fac_leadership = Liderança +gui.fac_leader_label = Líder: +gui.fac_officers_label = Oficiais: +gui.fac_econ_mgmt = Gerenciamento Econômico +gui.fac_danger_zone = Zona de Perigo +gui.fac_view_treasury = Ver Tesouraria + +# Rótulos de configurações da facção +gui.set_editing = Editando: +gui.set_general = Configurações Gerais +gui.set_name = Nome +gui.set_tag = Tag +gui.set_description = Descrição +gui.set_recruitment = Recrutamento +gui.set_home = Localização da Base +gui.set_clear_home = Limpar Base +gui.set_disband_faction = Dissolver Facção +gui.set_faction_color = Cor da Facção +gui.set_admin_override = [Admin Override] +gui.set_territory_perms = Permissões de Território +gui.set_mob_spawning = Geração de Mobs +gui.set_faction_settings = Configurações da Facção +gui.set_name_label = Nome: +gui.set_tag_label = Tag: +gui.set_desc_label = Desc: +gui.set_edit = Editar +gui.set_status_label = Status: +gui.set_location_label = Localização: +gui.set_danger_zone = Zona de Perigo +gui.set_irreversible = Esta ação é irreversível. +gui.set_lock_hint = Algumas opções podem estar bloqueadas pelo servidor e não aceitarão alterações. +gui.set_appearance = Aparência +gui.set_color_label = Cor: +gui.set_mob_sub = (filhos desativados quando o principal está desligado) +gui.set_back_to_info = Voltar à Info +gui.set_col_out = Ext +gui.set_col_ally = Ali +gui.set_col_mem = Mem +gui.set_col_off = Ofi +gui.set_cat_building = CONSTRUÇÃO +gui.set_cat_interaction = INTERAÇÃO +gui.set_cat_interact_sub = (filhos desativados quando Todos está desligado) +gui.set_cat_other = OUTROS +gui.set_perm_break = Destruir +gui.set_perm_place = Colocar +gui.set_perm_all = Todos +gui.set_perm_door = Porta +gui.set_perm_chest = Baú +gui.set_perm_bench = Bancada +gui.set_perm_processing = Processamento +gui.set_perm_seat = Assento +gui.set_perm_transport = Transporte +gui.set_perm_crate_use = Uso de Caixote +gui.set_perm_npc_tame = Domesticar NPC +gui.set_perm_pve_damage = Dano PvE +gui.set_perm_mob_spawning = Geração de Mobs +gui.set_perm_hostile = Mobs Hostis +gui.set_perm_passive = Mobs Passivos +gui.set_perm_neutral = Mobs Neutros +gui.set_perm_pvp = PvP no Território +gui.set_perm_officers_edit = Oficiais podem editar + +# Rótulos de relações da facção +gui.rel_subtitle = Gerenciar relações da facção (ignora aprovação) +gui.rel_set_new = Definir Nova Relação +gui.rel_btn_ally = Aliado +gui.rel_btn_neutral = Neutro +gui.rel_btn_enemy = Inimigo + +# Rótulos da página de zonas +gui.zone_sort_name = Nome +gui.zone_sort_type = Tipo +gui.zone_sort_chunks = Chunks +gui.zone_sort_world = Mundo +gui.zone_count_format = {0} {1}zonas ({2} chunks) + +# Rótulos do mapa de zona +gui.map_zone_chunk = Chunk da Zona +gui.map_empty = Vazio +gui.map_other_zone = Outra Zona +gui.map_faction_claim = Reivindicação de Facção +gui.map_protected = Protegido +gui.map_your_pos = Sua Posição +gui.map_click_hint = Clique para reivindicar/desreivindicar chunks +gui.map_legend_zone_safe = Esta Zona (Segura) +gui.map_legend_zone_war = Esta Zona (Guerra) +gui.map_legend_other_safe = Outra SafeZone +gui.map_legend_other_war = Outra WarZone +gui.map_legend_faction = Reivindicação de Facção +gui.map_legend_unclaimed = Não Reivindicado +gui.map_legend_you_here = Você está aqui +gui.map_action_hint = Clique esquerdo: Reivindicar para zona | Clique direito: Desreivindicar da zona +gui.map_done = Concluído + +# Rótulos de propriedades da zona +gui.zprop_general = Geral +gui.zprop_zone_name = Nome da Zona +gui.zprop_zone_type = Tipo da Zona +gui.zprop_change_type = Alterar Tipo +gui.zprop_notifications = Notificações +gui.zprop_show_entry = Mostrar Notificação de Entrada +gui.zprop_upper_title = Título Superior +gui.zprop_upper_desc = Título Superior (texto pequeno acima do nome da zona) +gui.zprop_lower_title = Título Inferior +gui.zprop_lower_desc = Título Inferior (texto grande do nome da zona) +gui.zprop_edit_flags = Editar Flags +gui.zprop_back_to_zones = Voltar às Zonas +gui.save = Salvar +gui.clear = Limpar + +# Rótulos de economia em massa +gui.bulk_header = Ajustar Todas as Tesourarias de Facção +gui.bulk_factions_label = Facções: +gui.bulk_total_label = Saldo Total: +gui.bulk_amount_hint = Valor (positivo para adicionar, negativo para remover): +gui.bulk_hint = Isso será aplicado a cada facção com tesouraria +gui.bulk_warning_msg = Aviso: Esta ação afeta TODAS as facções e não pode ser desfeita. +gui.bulk_apply_all = Aplicar a Todas +gui.bulk_operation = Operação +gui.bulk_add = Adicionar +gui.bulk_remove = Remover +gui.bulk_amount = Valor +gui.bulk_warning = Isso afetará TODAS as tesourarias de facção. +gui.bulk_preview = Prévia + +# Rótulos de ajuste econômico +gui.ecadj_header = Ajustar Saldo da Tesouraria +gui.ecadj_faction_label = Facção: +gui.ecadj_current_balance = Saldo Atual: +gui.ecadj_amount_hint = Valor (positivo para adicionar, negativo para deduzir): +gui.ecadj_preview_hint = Insira um número para ver a prévia da alteração +gui.ecadj_adjustment = Ajuste: +gui.ecadj_set_balance = Definir Saldo +gui.ecadj_confirm = Confirmar +/- +gui.ecadj_operation = Operação +gui.ecadj_add = Adicionar +gui.ecadj_remove = Remover +gui.ecadj_set_to = Definir Como +gui.ecadj_amount = Valor +gui.ecadj_new_balance = Novo Saldo: + +# Rótulos de integração da página de versão +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Nativo +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Lápides +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Tesouraria + +# Rótulos do modal de desreivindicar tudo +gui.unclaim_title = Desreivindicar Todo o Território +gui.unclaim_confirm_msg1 = Tem certeza de que deseja desreivindicar todo +gui.unclaim_confirm_msg2 = de +gui.unclaim_warning = Esta ação não pode ser desfeita! +gui.unclaim_all = Desreivindicar Tudo + +# Rótulos do modal de renomear zona +gui.zren_title = Renomear Zona +gui.zren_current = Atual: +gui.zren_new_name = Novo Nome: + +# Rótulos do modal de alterar tipo de zona +gui.ztype_title = Alterar Tipo de Zona +gui.ztype_zone_label = Zona: +gui.ztype_current = Atual: +gui.ztype_will_become = se tornará +gui.ztype_new = Novo: +gui.ztype_warning1 = Diferentes tipos de zona têm diferentes valores padrão de flags. +gui.ztype_warning2 = Escolha como lidar com as configurações de flags existentes: +gui.ztype_keep_desc = Manter personalizações +gui.ztype_keep_flags = Manter Flags +gui.ztype_reset_desc = Usar padrões do novo tipo +gui.ztype_reset_flags = Resetar Flags + +# Rótulos do assistente de criação de zona +gui.czw_title = Criar Zona +gui.czw_back = < Voltar +gui.czw_create = Criar Zona +gui.czw_zone_type = Tipo de Zona +gui.czw_safe_desc = Protegida, sem PvP +gui.czw_war_desc = Combate, PvP ativado +gui.czw_zone_name = Nome da Zona +gui.czw_name_desc = Insira um nome único para a zona +gui.czw_claim_method = Método de Reivindicação +gui.czw_method_none_desc = Criar zona vazia +gui.czw_method_none = Sem reivindicações +gui.czw_method_single_desc = Seu chunk atual +gui.czw_method_single = Chunk único +gui.czw_method_circle_desc = Área circular +gui.czw_method_circle = Raio circular +gui.czw_method_square_desc = Área quadrada +gui.czw_method_square = Raio quadrado +gui.czw_method_map_desc = Editor interativo de chunks +gui.czw_method_map = Usar mapa de reivindicação +gui.czw_radius = Raio +gui.czw_custom_radius = Personalizado (1-50): +gui.czw_flags = Flags +gui.czw_flags_defaults_desc = Baseado no tipo de zona +gui.czw_flags_defaults = Usar padrões +gui.czw_flags_customize_desc = Abrir configurações depois +gui.czw_flags_customize = Personalizar + +# ========== Rótulos de Entrada (Entradas de lista de Facção/Jogador/Zona) ========== + +# Rótulos de entrada de facção +gui.fac_entry_power = poder +gui.fac_entry_claims = reivindicações +gui.fac_entry_members = membros +gui.fac_entry_created = Criada: +gui.fac_entry_home = Base: +gui.fac_entry_tp_home = TP Base +gui.fac_entry_view_info = Ver Info +gui.fac_entry_members_btn = Membros +gui.fac_entry_settings = Configurações +gui.fac_entry_unclaim_all = Desreivindicar Tudo +gui.fac_entry_disband = Dissolver + +# Rótulos de entrada de jogador +gui.plr_entry_role = Cargo: +gui.plr_entry_joined = Entrou: +gui.plr_entry_last_online = Último Online: +gui.plr_entry_kdr = K/D/R: +gui.plr_entry_power = Poder: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Info +gui.plr_entry_teleport = Teleportar +gui.plr_entry_na = N/D +gui.plr_entry_unknown = Desconhecido +gui.plr_entry_ago = {0} atrás + +# Rótulos de entrada de zona +gui.zone_entry_world = Mundo: +gui.zone_entry_chunks = Chunks: +gui.zone_entry_bounds = Limites: +gui.zone_entry_created = Criada: +gui.zone_entry_edit_map = Editar Mapa +gui.zone_entry_flags = Flags +gui.zone_entry_settings = Configurações +gui.zone_entry_delete = Excluir diff --git a/src/main/resources/Server/Languages/pt-BR/hyperfactions_gui.lang b/src/main/resources/Server/Languages/pt-BR/hyperfactions_gui.lang new file mode 100644 index 00000000..310ab4dd --- /dev/null +++ b/src/main/resources/Server/Languages/pt-BR/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Traduções para Português Brasileiro +# Formato: chave = valor +# Nota: As chaves são automaticamente prefixadas com "hyperfactions_gui." pelo I18nModule do Hytale + +# ========== Barra de Navegação ========== +nav.dashboard = Painel +nav.chat = Chat +nav.members = Membros +nav.invites = Convites +nav.browser = Explorar +nav.map = Mapa +nav.leaderboard = Ranking +nav.relations = Relações +nav.treasury = Tesouraria +nav.settings = Configurações +nav.logs = Registros +nav.help = Ajuda +nav.admin = Admin +nav.create = Criar + +# ========== Nomes de Categorias de Ajuda ========== +help.category.welcome = Bem-vindo +help.category.your_faction = Sua Facção +help.category.power_land = Poder e Território +help.category.diplomacy = Diplomacia +help.category.combat = Combate e Segurança +help.category.economy = Economia +help.category.quick_ref = Referência Rápida + +# ========== Nomes de Categorias de Ajuda Admin ========== +help.category.admin_overview = Visão Geral +help.category.admin_factions = Facções +help.category.admin_zones = Zonas +help.category.admin_power = Poder +help.category.admin_economy = Economia +help.category.admin_config = Configuração +help.category.admin_maintenance = Manutenção +help.category.admin_reference = Referência + +# ========== Menu Principal ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Minha Facção +main_menu.section_get_started = Começar +main_menu.section_territory = Território +main_menu.section_browse = Explorar +main_menu.section_admin = Admin +main_menu.claim_hint = Use /f claim para reivindicar território. + +# ========== Página de Informações da Facção ========== +faction_info.title = Info da Facção +faction_info.no_description = Sem descrição definida. +faction_info.status_open = Aberta +faction_info.status_invite_only = Apenas Convite +faction_info.status_raidable = Vulnerável +faction_info.status_protected = Protegida +faction_info.officers_more = +{0} mais +faction_info.power_header = Poder +faction_info.claims_header = Reivindicações +faction_info.members_header = Membros +faction_info.relations_header = Relações +faction_info.status_header = Status +faction_info.treasury_header = Tesouraria +faction_info.current_max = atual / máx +faction_info.claimed_max = reivindicado / máx +faction_info.ally_enemy = aliado / inimigo +faction_info.faction_balance = saldo da facção +faction_info.leader_label = Líder: +faction_info.officers_label = Oficiais: +faction_info.view_members_btn = Ver Membros +faction_info.relations_btn = Relações +faction_info.back_btn = Voltar + +# ========== Modal de Renomear ========== +rename.title = Renomear Facção +rename.current_label = Atual: +rename.new_name_label = Novo Nome: +rename.no_permission = Você não tem permissão para renomear a facção. +rename.enter_name = Por favor, insira um nome para a facção. +rename.too_short = O nome da facção deve ter pelo menos {0} caracteres. +rename.too_long = O nome da facção não pode exceder {0} caracteres. +rename.same_name = Esse já é o nome da sua facção. +rename.name_taken = Uma facção com esse nome já existe. +rename.success = Facção renomeada de {0} para {1}! + +# ========== Modal de Descrição ========== +desc.title = Editar Descrição +desc.current_label = Atual: +desc.new_desc_label = Nova Descrição: +desc.no_permission = Você não tem permissão para editar a descrição. +desc.display_none = (Nenhuma) +desc.cleared = Descrição da facção removida. +desc.updated = Descrição da facção atualizada! + +# ========== Modal de Tag ========== +tag.title = Editar Tag +tag.current_label = Atual: +tag.instructions = Tag (1-5 caracteres, apenas letras e números): +tag.help_text = Tags aparecem no chat e no mapa +tag.no_permission = Você não tem permissão para editar a tag. +tag.display_none = (Nenhuma) +tag.cleared = Tag da facção removida. +tag.too_short = A tag deve ter pelo menos {0} caractere. +tag.too_long = A tag não pode exceder {0} caracteres. +tag.invalid_format = A tag só pode conter letras e números. +tag.same_tag = Essa já é a tag da sua facção. +tag.tag_taken = Uma facção com essa tag já existe. +tag.success = Tag da facção definida como [{0}]! + +# ========== Página do Painel ========== +dashboard.title = Painel da Facção +dashboard.power_label = Poder +dashboard.land_label = Reivindicações +dashboard.members_label = Membros +dashboard.online_label = Online +dashboard.allies_label = Aliados +dashboard.enemies_label = Inimigos +dashboard.relations_label = Relações +dashboard.ally_enemy_label = aliado / inimigo +dashboard.status_label = Status +dashboard.invites_label = Convites +dashboard.sent_requests_label = enviados / solicitações +dashboard.treasury_label = Tesouraria +dashboard.upkeep_label = Manutenção +dashboard.per_cycle = por ciclo +dashboard.your_wallet = Sua Carteira +dashboard.personal_balance = saldo pessoal +dashboard.quick_actions = Ações Rápidas +dashboard.teleport_label = Teleportar +dashboard.territory_label = Território +dashboard.channel_label = Canal +dashboard.membership_label = Filiação +dashboard.recent_activity = Atividade Recente +dashboard.view_all = Ver Tudo +dashboard.income_24h = Receita (24h) +dashboard.deposits_transfers_in = depósitos, transferências recebidas +dashboard.expenses_24h = Despesas (24h) +dashboard.withdrawals_transfers_out = saques, transferências enviadas +dashboard.faction_gone = Sua facção não existe mais. +dashboard.available = {0} disponíveis +dashboard.at_risk = Em Risco! +dashboard.online_count = {0} online +dashboard.status_invite = Convite +dashboard.in_grace = EM CARÊNCIA +dashboard.billable_chunks = {0} chunks cobráveis +dashboard.btn_home = Base +dashboard.btn_set_home = Definir Base +dashboard.btn_claim = Reivindicar +dashboard.chat_prefix = Chat: {0} +dashboard.btn_leave = Sair +dashboard.no_activity = Nenhuma atividade recente. +dashboard.time_now = agora +dashboard.time_minutes = {0}m atrás +dashboard.time_hours = {0}h atrás +dashboard.time_days = {0}d atrás +dashboard.no_home_hint = Sua facção não tem base definida. Peça a um oficial para definir uma. +dashboard.chat_mode_set = Modo de chat: {0} +dashboard.claim_success = Chunk reivindicado em ({0}, {1}) +dashboard.upkeep_in = em {0} + +# ========== Página Principal da Facção ========== +main.no_faction = Sem Facção +main.joined = Você entrou na facção! +main.join_failed = Falha ao entrar na facção: {0} +main.invite_declined = Convite recusado. +main.cooldown = Teleporte em recarga! {0}s restantes. +main.world_not_found = Não foi possível teleportar - mundo não encontrado. +main.leave_failed = Falha ao sair: {0} + +# ========== Rótulos Compartilhados da Interface ========== +common.faction_count = {0} facções +common.leader_label = Líder: {0} +common.sort_power = Poder +common.sort_members = Membros +common.page_format = {0}/{1} +common.own_faction = (Você) +common.search = Buscar: +common.sort = Ordenar: +common.prev = < Anterior +common.next = Próximo > +common.treasury_not_available = A tesouraria não está disponível. + +# ========== Página de Membros ========== +members.title = Membros +members.search_label = Buscar: +members.sort_label = Ordenar: +members.prev_btn = < Anterior +members.next_btn = Próximo > +members.count = {0} membros +members.sort_role = Cargo +members.sort_last_online = Último Online +members.just_now = agora mesmo +members.ago = {0} atrás +members.never = Nunca +members.member_not_found = Membro não encontrado. +members.promoted = {0} promovido a {1}. +members.promote_failed = Falha ao promover: {0} +members.demoted = {0} rebaixado a {1}. +members.demote_failed = Falha ao rebaixar: {0} +members.kicked = {0} expulso da facção. +members.kick_failed = Falha ao expulsar: {0} +members.label_power = Poder: +members.label_joined = Entrou: +members.label_last_death = Última Morte: +members.btn_promote = Promover +members.btn_demote = Rebaixar +members.btn_kick = Expulsar +members.btn_make_leader = Tornar Líder +members.btn_profile = Perfil +members.self_label = (Você) + +# ========== Página de Exploração ========== +browser.title = Explorar Facções +browser.search_label = Buscar: +browser.sort_label = Ordenar: +browser.prev_btn = < Anterior +browser.next_btn = Próximo > +browser.sort_name = Nome +browser.invalid_faction = Facção inválida. +browser.label_power = poder +browser.label_claims = reivindicações +browser.label_members = membros +browser.label_recruitment = Recrutamento: +browser.label_created = Criada: +browser.label_description = Descrição: +browser.view_info_btn = Ver Info +browser.label_leader = Líder: +browser.no_description = Sem descrição definida + +# ========== Página do Ranking ========== +leaderboard.title = Ranking de Facções +leaderboard.rank_by = Classificar por: +leaderboard.col_rank = # +leaderboard.col_faction = Facção +leaderboard.col_claims = Reivindicações +leaderboard.col_members = Membros +leaderboard.prev_btn = < Anterior +leaderboard.next_btn = Próximo > +leaderboard.sort_kd = K/D +leaderboard.sort_territory = Território +leaderboard.sort_balance = Saldo + +# ========== Página de Info do Jogador ========== +playerinfo.title = Info do Jogador +playerinfo.first_joined_label = Primeiro acesso: +playerinfo.last_online_label = Último online: +playerinfo.faction_label = Facção: +playerinfo.role_label = Cargo: +playerinfo.joined_label_static = Entrou: +playerinfo.not_in_faction = Não está em uma facção +playerinfo.power_header = Poder +playerinfo.current_max = atual / máx +playerinfo.combat_header = Combate +playerinfo.kills_deaths = abates / mortes +playerinfo.kdr_header = Razão K/D +playerinfo.membership_history = Histórico de Filiação +playerinfo.view_faction_btn = Ver Facção +playerinfo.back_btn = Voltar +playerinfo.now = Agora +playerinfo.history_count = {0} registros +playerinfo.joined_label = Entrou: {0} +playerinfo.current = Atual +playerinfo.left_label = Saiu: {0} +playerinfo.no_history = Sem histórico de filiação +playerinfo.faction_gone = A facção não existe mais. +playerinfo.reason_active = ATIVO +playerinfo.reason_left = SAIU +playerinfo.reason_kicked = EXPULSO +playerinfo.reason_disbanded = DISSOLVIDA + +# ========== Página de Relações ========== +relations.title = Relações +relations.tab_relations = Relações +relations.tab_pending = Pendentes +relations.set_relation_btn = + Definir Relação +relations.prev_btn = < Anterior +relations.next_btn = Próximo > +relations.relation_count = {0} relações +relations.request_count = {0} solicitações +relations.type_ally = Aliado +relations.type_enemy = Inimigo +relations.type_incoming = Recebida +relations.type_outgoing = Enviada +relations.incoming_request = Solicitação recebida +relations.outgoing_request = Solicitação enviada +relations.empty_relations = Sem relações ainda. +relations.empty_relations_hint = Sem relações ainda. Clique em + DEFINIR RELAÇÃO para adicionar aliados ou inimigos. +relations.empty_pending = Nenhuma solicitação de aliança pendente. +relations.today = Hoje +relations.one_day_ago = 1 dia atrás +relations.days_ago = {0} dias atrás +relations.now_neutral = Agora neutro com {0}. +relations.now_enemies = Agora inimigos de {0}! +relations.request_sent = Solicitação de aliança enviada para {0}. +relations.now_allied = Agora aliados de {0}! +relations.request_declined = Solicitação de aliança de {0} recusada. +relations.request_cancelled = Solicitação de aliança para {0} cancelada. +relations.failed = Falha: {0} +relations.search_hint = Busque uma facção para definir relação +relations.no_results = Nenhuma facção encontrada para '{0}' +relations.power_display = {0} poder +relations.member_count = {0} membros +relations.label_members = membros +relations.label_power = poder +relations.label_since = Desde: +relations.label_claims = Reivindicações: +relations.label_direction = Direção: +relations.btn_view = Ver +relations.btn_neutral = Neutro +relations.btn_enemy = Inimigo +relations.btn_ally = Aliado +relations.btn_accept = Aceitar +relations.btn_decline = Recusar +relations.btn_cancel = Cancelar + +# ========== Página de Configurações ========== +settings.title = Configurações da Facção +settings.general = Geral +settings.name_label = Nome: +settings.tag_label = Tag: +settings.desc_label = Desc: +settings.edit_btn = Editar +settings.recruitment = Recrutamento +settings.status_label = Status: +settings.home_location = Localização da Base +settings.location_label = Localização: +settings.set_home_btn = Definir Base +settings.teleport_btn = Teleportar +settings.delete_btn = Excluir +settings.optional_features = Recursos Opcionais +settings.configure_modules = Configurar módulos opcionais. +settings.modules_btn = Módulos +settings.danger_zone = Zona de Perigo +settings.irreversible = Esta ação é irreversível. +settings.disband_btn = Dissolver Facção +settings.lock_hint = Algumas opções podem estar bloqueadas pelo servidor e não aceitarão alterações. +settings.territory_permissions = Permissões de Território +settings.col_out = Ext +settings.col_ally = Ali +settings.col_mem = Mem +settings.col_off = Ofi +settings.cat_building = CONSTRUÇÃO +settings.perm_break = Destruir +settings.perm_place = Colocar +settings.cat_interaction = INTERAÇÃO +settings.interaction_hint = (filhos desativados quando Todos está desligado) +settings.perm_all = Todos +settings.perm_door = Porta +settings.perm_chest = Baú +settings.perm_bench = Bancada +settings.perm_processing = Processamento +settings.perm_seat = Assento +settings.perm_transport = Transporte +settings.cat_other = OUTROS +settings.perm_crate = Uso de Caixote +settings.perm_npc_tame = Domesticar NPC +settings.perm_pve = Dano PvE +settings.appearance = Aparência +settings.color_label = Cor: +settings.mob_spawning = Geração de Mobs +settings.mob_spawning_hint = (filhos desativados quando o principal está desligado) +settings.mob_spawning_label = Geração de Mobs +settings.hostile_mobs = Mobs Hostis +settings.passive_mobs = Mobs Passivos +settings.neutral_mobs = Mobs Neutros +settings.faction_settings = Configurações da Facção +settings.pvp_in_territory = PvP no Território +settings.officers_can_edit = Oficiais podem editar +settings.leader_only = Apenas o líder +settings.officers_only = Apenas oficiais e líderes podem alterar as configurações da facção. +settings.display_none = (Nenhuma) +settings.home_not_set = Não definida +settings.no_permission = Você não tem permissão para alterar as configurações. +settings.only_leader_disband = Apenas o líder pode dissolver a facção. +settings.perm_locked = Esta configuração está bloqueada pelo servidor. +settings.no_perm_edit = Você não tem permissão para editar permissões de território. +settings.only_leader_officers = Apenas o líder pode alterar o acesso dos oficiais. +settings.pvp_enabled = Ativado +settings.pvp_disabled = Desativado +settings.not_in_territory = Você deve estar no território da sua facção para definir a base. +settings.home_set = Base da facção definida na sua localização atual! +settings.recruitment_set = Recrutamento definido como {0}. +settings.home_no_set = Sua facção não tem uma base definida. +settings.home_deleted = Base da facção excluída! + +# ========== Página de Módulos ========== +modules.title = Módulos da Facção +modules.description = Recursos opcionais para melhorar sua facção +modules.configure_btn = Configurar +modules.back_btn = < Voltar às Configurações +modules.treasury_name = Tesouraria +modules.treasury_desc = Banco da facção e sistema econômico +modules.raids_name = Raides +modules.raids_desc = Batalhas agendadas entre facções +modules.levels_name = Níveis +modules.levels_desc = Progressão da facção e XP +modules.war_name = Guerra +modules.war_desc = Declarações formais de guerra +modules.coming_soon = Em Breve +modules.active = Ativo +modules.view_treasury = Ver Tesouraria +modules.unavailable = Indisponível +modules.no_economy = Nenhum plugin de economia detectado +modules.disabled = Desativado +modules.economy_not_available = Recursos de economia não estão disponíveis neste servidor + +# ========== Página da Tesouraria ========== +treasury.title = Tesouraria da Facção +treasury.balance_label = Saldo +treasury.income_24h = Receita (24h) +treasury.deposits_transfers_in = depósitos, transferências recebidas +treasury.expenses_24h = Despesas (24h) +treasury.withdrawals_transfers_out = saques, transferências enviadas +treasury.maintenance = MANUTENÇÃO +treasury.runway_label = Reserva: +treasury.add_funds = Adicionar fundos +treasury.deposit_btn = Depositar +treasury.take_funds = Retirar fundos +treasury.withdraw_btn = Sacar +treasury.send_to_faction = Enviar para facção +treasury.transfer_btn = Transferir +treasury.treasury_config = Config da tesouraria +treasury.settings_btn = Configurações +treasury.recent_transactions = Transações Recentes +treasury.no_transactions = Nenhuma transação ainda +treasury.col_date = Data +treasury.col_type = Tipo +treasury.col_by = Por +treasury.col_amount = Valor +treasury.col_details = Detalhes +treasury.pay_now_btn = Pagar Agora +treasury.cost_7d = 7d: +treasury.cost_14d = 14d: +treasury.cost_30d = 30d: +treasury.settings_title = Configurações da Tesouraria +treasury.officer_permissions = PERMISSÕES DE OFICIAIS +treasury.allow_withdraw = Permitir que Oficiais Saquem +treasury.allow_transfer = Permitir que Oficiais Transfiram +treasury.limits_section = LIMITES DE SAQUE E TRANSFERÊNCIA +treasury.max_per_withdrawal = Máximo por saque: +treasury.max_withdrawals_per = Máximo de saques por período: +treasury.max_per_transfer = Máximo por transferência: +treasury.max_transfers_per = Máximo de transferências por período: +treasury.limit_period = Período limite (horas): +treasury.no_limit_hint = Defina 0 para sem limite +treasury.upkeep_settings = CONFIGURAÇÕES DE MANUTENÇÃO +treasury.auto_pay_upkeep = Pagar manutenção automaticamente da tesouraria +treasury.back_btn = Voltar +treasury.upkeep_cost_format = {0} a cada {1}h +treasury.upkeep_time_left = {0} restante +treasury.wallet_label = Sua carteira: {0} +treasury.treasury_label = Saldo da tesouraria: {0} +treasury.chunks_detail = {0} gratuitos + {1} chunks cobráveis +treasury.cost_label = Custo: {0} +treasury.pending = Pendente +treasury.auto_pay_on = Pagamento automático: LIGADO +treasury.auto_pay_off = Pagamento automático: DESLIGADO +treasury.runway_90_plus = 90+ dias +treasury.runway_days = {0} dias +treasury.runway_day = {0} dia +treasury.runway_less_day = < 1 dia +treasury.runway_no_funds = Sem fundos +treasury.grace_expires = Carência expira em: {0} +treasury.missed_payments = Pagamentos perdidos: {0} +treasury.pay_to_clear = Pague {0} para encerrar a carência +treasury.system = Sistema +treasury.type_deposit = Depósito +treasury.type_withdrawal = Saque +treasury.type_transfer_in = Transferência Recebida +treasury.type_transfer_out = Transferência Enviada +treasury.type_player_transfer = Transferência de Jogador +treasury.type_upkeep = Manutenção +treasury.type_tax = Cobrança de Imposto +treasury.type_war_cost = Custo de Guerra +treasury.type_raid_cost = Custo de Raide +treasury.type_spoils = Espólios +treasury.type_admin = Ajuste Admin +treasury.deposit_title = Depositar na Tesouraria +treasury.withdraw_title = Sacar da Tesouraria +treasury.fee_label = Taxa ({0}%) +treasury.confirm_deposit = Confirmar Depósito +treasury.confirm_withdrawal = Confirmar Saque +treasury.from_wallet = {0} da carteira +treasury.to_wallet = {0} para carteira +treasury.enter_valid_amount = Insira um valor positivo válido. +treasury.insufficient_wallet = Fundos insuficientes na carteira. Necessário {0}, disponível {1}. +treasury.wallet_withdraw_failed = Falha ao sacar da sua carteira. +treasury.deposit_failed_returned = Falha ao depositar. Dinheiro devolvido. +treasury.deposited = Depositou {0} na tesouraria. +treasury.deposited_fee = Depositou {0} na tesouraria. (taxa: {1}) +treasury.no_withdraw_permission = Você não tem permissão para sacar. +treasury.withdraw_denied = Saque negado: {0} +treasury.insufficient_treasury = Fundos insuficientes na tesouraria. +treasury.withdraw_limit = Limite de saque excedido. +treasury.withdraw_failed = Saque falhou: {0} +treasury.wallet_deposit_warn = Aviso: Falha ao depositar na sua carteira. Contate um admin. +treasury.withdrew = Sacou {0} da tesouraria. +treasury.withdrew_fee = Sacou {0} da tesouraria. (taxa: {1}, recebido: {2}) +treasury.search_hint = Buscar por jogador ou facção +treasury.no_results = Nenhum resultado para '{0}' +treasury.tag_player = [Jogador] +treasury.tag_faction = [Facção] +treasury.source_online = Online +treasury.source_offline = Offline +treasury.source_player_db = Jogador Hytale +treasury.no_transfer_permission = Você não tem permissão para transferir. +treasury.transfer_denied = Transferência negada: {0} +treasury.invalid_target_faction = Facção alvo inválida. +treasury.target_faction_gone = A facção alvo não existe mais. +treasury.transfer_failed = Transferência falhou: {0} +treasury.transfer_failed_returned = Transferência falhou. Fundos devolvidos. +treasury.transferred = Transferiu {0} para {1}. +treasury.invalid_target_player = Jogador alvo inválido. +treasury.player_transfer_failed = Falha ao depositar na carteira do jogador. Transferência revertida. +treasury.leader_only_perms = Apenas o líder pode alterar permissões da tesouraria. +treasury.leader_only_upkeep = Apenas o líder pode alterar configurações de manutenção. +treasury.invalid_limit = Número inválido nos campos de limite. Use 0 para ilimitado. + +# ========== Páginas de Confirmação ========== +confirm.disband_title = Dissolver Facção +confirm.disband_prompt = Tem certeza de que deseja dissolver +confirm.disband_warning = Esta ação não pode ser desfeita! +confirm.leave_title = Sair da Facção +confirm.leave_prompt = Tem certeza de que deseja sair de +confirm.leave_warning = Você perderá acesso ao território da facção. +confirm.leader_leave_title = Sair como Líder +confirm.leader_leave_prompt = Você está saindo de +confirm.transfer_title = Transferir Liderança +confirm.transfer_prompt = Tem certeza de que deseja transferir a liderança para +confirm.transfer_warning = Você se tornará Oficial. +confirm.disband_not_leader = Apenas o líder pode dissolver a facção. +confirm.disbanded = Facção '{0}' foi dissolvida. +confirm.disband_failed = Falha ao dissolver a facção. +confirm.succession_title = A liderança será transferida para: +confirm.no_members_warning = AVISO: Nenhum outro membro! +confirm.will_disband = Sair irá dissolver a facção permanentemente. +confirm.not_in_faction = Você não está nesta facção. +confirm.not_leader_anymore = Você não é mais o líder. +confirm.no_successor = Nenhum sucessor disponível. Use dissolver no lugar. +confirm.transfer_failed = Falha ao transferir liderança: {0} +confirm.leader_left = Liderança transferida para {0}. Você saiu de {1}. +confirm.leave_failed = Falha ao sair da facção: {0} +confirm.leader_cannot_leave = Líderes não podem sair. Transfira a liderança ou dissolva a facção. +confirm.left_faction = Você saiu de {0}. +confirm.faction_gone = A facção não existe mais. +confirm.not_leader_transfer = Apenas o líder pode transferir a liderança. +confirm.leadership_transferred = Liderança transferida para {0}. + +# ========== Página de Visualização de Registros ========== +logs.title = {0} - Registro de Atividades +logs.entry_count = {0} entradas +logs.filter_label = Filtrar: +logs.col_time = Hora +logs.col_type = Tipo +logs.col_message = Mensagem +logs.prev_btn = < Anterior +logs.next_btn = Próximo > +logs.all_types = Todos os Tipos +logs.no_logs_type = Nenhum registro deste tipo. +logs.no_logs = Nenhum registro de atividade ainda. +logs.time_just_now = agora mesmo +logs.time_minute = {0} minuto atrás +logs.time_minutes = {0} minutos atrás +logs.time_hour = {0} hora atrás +logs.time_hours = {0} horas atrás +logs.time_day = {0} dia atrás +logs.time_days = {0} dias atrás +logs.time_week = {0} semana atrás +logs.time_weeks = {0} semanas atrás +logs.type_member_join = Entrada +logs.type_member_leave = Saída +logs.type_member_kick = Expulsão +logs.type_member_promote = Promoção +logs.type_member_demote = Rebaixamento +logs.type_claim = Reivindicação +logs.type_unclaim = Desreivindicação +logs.type_overclaim = Conquista +logs.type_home_set = Base Definida +logs.type_relation_ally = Aliado +logs.type_relation_enemy = Inimigo +logs.type_relation_neutral = Neutro +logs.type_leader_transfer = Transferência +logs.type_settings_change = Configurações +logs.type_power_change = Poder +logs.type_economy = Economia +logs.type_admin_power = Poder Admin + +# Modelos de mensagens de registro (i18n para conteúdo do registro de atividades) +# Ações de jogadores +logs.msg_faction_created = {0} criou a facção +logs.msg_member_joined = {0} entrou na facção +logs.msg_member_left = {0} saiu da facção +logs.msg_member_kicked = {0} foi expulso +logs.msg_member_promoted = {0} promovido a {1} +logs.msg_member_demoted = {0} rebaixado a {1} +logs.msg_leader_transferred = Liderança transferida para {0} +logs.msg_leader_left_transfer = {0} saiu, {1} agora é líder +logs.msg_relation_set = Definiu {0} como {1} +# Território +logs.msg_claimed = Chunk reivindicado em {0}, {1} em {2} +logs.msg_unclaimed = Chunk desreivindicado em {0}, {1} em {2} +logs.msg_overclaim_lost = Chunk perdido em {0}, {1} para {2} +logs.msg_overclaim_taken = Chunk conquistado em {0}, {1} de {2} +logs.msg_all_unclaimed = Todo o território desreivindicado +logs.msg_claim_removed_world = Reivindicação em '{0}' removida (mundo não permite reivindicações) +logs.msg_claims_lost_upkeep = Perdeu {0} reivindicação(ões) por manutenção (perdeu {1} pagamentos) +logs.msg_claims_removed_inactive = {0} reivindicações removidas por inatividade ({1} dias) +# Base +logs.msg_home_set = Base definida +logs.msg_home_cleared = Base removida +logs.msg_home_cleared_world = Base em '{0}' removida (mundo não permite reivindicações) +# Configurações +logs.msg_renamed = Renomeada de '{0}' para '{1}' +logs.msg_set_open = Facção definida como aberta +logs.msg_set_closed = Facção definida como apenas convite +logs.msg_desc_set = Descrição definida +logs.msg_desc_cleared = Descrição removida +logs.msg_color_changed = Cor alterada para '{0}' +# Economia +logs.msg_deposit = Depósito: {0} (+{1}) +logs.msg_withdrawal = Saque: {0} (-{1}) +logs.msg_upkeep_paid = Manutenção paga: {0} ({1} chunks cobráveis) +logs.msg_upkeep_grace_started = Manutenção falhou: período de carência iniciado ({0}h) +logs.msg_upkeep_missed = Manutenção perdida (pagamento {0}), carência expira em {1} +logs.msg_upkeep_manual = Manutenção paga manualmente: {0} ({1} chunks cobráveis, carência encerrada) +# Poder admin +logs.msg_admin_power_set = Admin definiu o poder de {0} para {1} (era {2}) +logs.msg_admin_power_add = Admin adicionou {0} poder a {1} ({2} -> {3}) +logs.msg_admin_power_remove = Admin removeu {0} poder de {1} ({2} -> {3}) +logs.msg_admin_power_reset = Admin resetou o poder de {0} para {1} (era {2}) +logs.msg_admin_power_adjusted = Admin ajustou o poder de {0} em {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Admin definiu o poder máximo de {0} para {1} (era {2}) +logs.msg_admin_maxpower_reset = Admin resetou o poder máximo de {0} para o padrão global ({1}) +logs.msg_admin_powerloss_enabled = Admin ativou perda de poder para {0} +logs.msg_admin_powerloss_disabled = Admin desativou perda de poder para {0} +logs.msg_admin_decay_enabled = Admin ativou isenção de decaimento de reivindicações para {0} +logs.msg_admin_decay_disabled = Admin desativou isenção de decaimento de reivindicações para {0} +logs.msg_admin_kd_reset = Admin resetou K/D de {0} +logs.msg_admin_power_set_all = Admin definiu o poder de todos os {0} membros para {1} +logs.msg_admin_power_add_all = Admin adicionou {0} poder a todos os {1} membros +logs.msg_admin_power_remove_all = Admin removeu {0} poder de todos os {1} membros +logs.msg_admin_power_reset_all = Admin resetou o poder de todos os {0} membros +logs.msg_admin_power_adjusted_all = Admin ajustou o poder de todos os {0} membros em {1} +# Admin facção +logs.msg_admin_kicked = [Admin] {0} foi expulso +logs.msg_admin_role_set = [Admin] Cargo de {0} definido como {1} +logs.msg_admin_leader_kick = [Admin] Liderança transferida de {0} para {1} (expulsão admin) +logs.msg_admin_econ_added = Admin adicionou: {0} (saldo: {1}) +logs.msg_admin_econ_deducted = Admin deduziu: {0} (saldo: {1}) +logs.msg_admin_econ_set = Admin definiu o saldo para {0} (era {1}) +# Importação +logs.msg_left_import = {0} saiu (importado para outra facção) +logs.msg_leader_import_transfer = {0} se tornou líder (líder anterior importado para outra facção) +logs.msg_imported_from = Facção importada de {0} + +# ========== Página de Chat ========== +chat.title = Chat da Facção +chat.tab_faction = Facção +chat.tab_ally = Aliado +chat.send_btn = Enviar +chat.placeholder = Digite uma mensagem... +chat.no_messages = Nenhuma mensagem ainda. +chat.no_ally_permission = Você não tem permissão para o chat de aliados. +chat.no_permission = Sem permissão. +chat.faction_gone = Sua facção não existe mais. +chat.time_now = agora +chat.time_minutes = {0}m +chat.time_hours = {0}h + +# ========== Página de Convites ========== +invites.title = Convites +invites.tab_outgoing = Enviados +invites.tab_requests = Solicitações +invites.prev_btn = < Anterior +invites.next_btn = Próximo > +invites.invite_count = {0} convites +invites.request_count = {0} solicitações +invites.invited_by = Convidado por: {0} +invites.no_message = Sem mensagem +invites.expires = Expira: {0} +invites.type_outgoing = Enviado +invites.type_request = Solicitação +invites.invited_by_label = Convidado por: +invites.empty_outgoing = Nenhum convite enviado. Use /f invite para convidar alguém. +invites.empty_requests = Nenhuma solicitação de entrada. Jogadores podem solicitar entrada com /f request. +invites.invalid_player = Jogador inválido. +invites.cancelled_invite = Convite para {0} cancelado. +invites.player_joined = {0} entrou na facção! +invites.faction_full = A facção está cheia. Não é possível aceitar a solicitação. +invites.add_failed = Falha ao adicionar jogador à facção. +invites.request_expired = Solicitação não encontrada ou expirada. +invites.request_declined = Solicitação de entrada de {0} recusada. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}h +invites.label_message = Mensagem: +invites.btn_cancel = Cancelar +invites.btn_accept = Aceitar +invites.btn_decline = Recusar + +# ========== Página do Mapa ========== +map.title = Mapa de Território +map.action_hint = Clique esquerdo: Reivindicar | Clique direito: Desreivindicar +map.legend_your = Seu Território +map.legend_ally = Território Aliado +map.legend_enemy = Território Inimigo +map.legend_other = Outra Facção +map.legend_wilderness = Selvagem +map.legend_safe = Safe Zone +map.legend_war = War Zone +map.legend_you = Você está aqui +map.position = Sua Posição: Chunk ({0}, {1}) +map.legend_protected = Protegido +map.claim_stats = Reivindicações: {0}/{1} ({2} Disponíveis) +map.overclaimed = CONQUISTADO por {0}! +map.power_display = Poder: {0}/{1} +map.join_to_claim = Entre em uma facção para reivindicar +map.claim_success = Chunk reivindicado em ({0}, {1})! +map.claim_not_in_faction = Você precisa estar em uma facção para reivindicar território. +map.claim_not_officer = Apenas oficiais e líderes podem reivindicar território. +map.claim_already_yours = Você já possui este chunk. +map.claim_already_claimed = Este chunk já está reivindicado por outra facção. +map.claim_not_adjacent = Você só pode reivindicar chunks adjacentes ao seu território. +map.claim_max = Você atingiu o limite máximo de reivindicações. +map.claim_world_not_allowed = Reivindicações não são permitidas neste mundo. +map.claim_orbisguard = Esta área é protegida pelo OrbisGuard. +map.claim_failed = Falha ao reivindicar chunk. +map.unclaim_success = Chunk desreivindicado em ({0}, {1}). +map.unclaim_not_in_faction = Você precisa estar em uma facção. +map.unclaim_not_officer = Apenas oficiais e líderes podem desreivindicar território. +map.unclaim_not_claimed = Este chunk não está reivindicado. +map.unclaim_not_yours = Este chunk pertence a outra facção. +map.unclaim_home = Não é possível desreivindicar o chunk que contém a base da facção. +map.unclaim_failed = Falha ao desreivindicar chunk. +map.overclaim_success = Chunk inimigo conquistado em ({0}, {1})! +map.overclaim_not_in_faction = Você precisa estar em uma facção. +map.overclaim_not_officer = Apenas oficiais e líderes podem conquistar território. +map.overclaim_already_yours = Você já possui este chunk. +map.overclaim_ally = Você não pode conquistar território aliado. +map.overclaim_has_power = Esta facção tem poder suficiente para defender seu território. +map.overclaim_max = Você atingiu o limite máximo de reivindicações. +map.overclaim_failed = Falha ao conquistar chunk. +# ========== Página de Criação de Facção ========== +create.title = Crie Sua Facção +create.section_preview = Prévia +create.section_basic_info = Informações Básicas +create.section_details = Detalhes +create.name_prefix = Nome: +create.faction_name_label = Nome da Facção * +create.tag_label = TAG (2-4 caracteres, automática se vazio) +create.desc_label = Descrição (Opcional) +create.recruitment_label = Recrutamento +create.section_faction_color = Cor da Facção +create.section_combat = Combate +create.create_btn = Criar Facção +create.preview_name = Nome da Sua Facção +create.leader_prefix = Líder: {0} +create.enter_name = Por favor, insira um nome para a facção. +create.name_too_short = O nome da facção deve ter pelo menos {0} caracteres. +create.name_too_long = O nome da facção não pode exceder {0} caracteres. +create.name_taken = Uma facção com este nome já existe. +create.tag_length = A tag da facção deve ter {0}-{1} caracteres. +create.tag_format = A tag da facção só pode conter letras e números. +create.desc_too_long = A descrição não pode exceder {0} caracteres. +create.created = Facção {0} criada com sucesso! +create.created_no_dashboard = Facção criada mas não foi possível abrir o painel. +create.invalid_name = Nome de facção inválido. +create.create_failed = Não foi possível criar a facção. + +# ========== Páginas de Novo Jogador ========== +newplayer.browse_title = Explorar Facções +newplayer.invites_title = Convites e Solicitações +newplayer.map_title = Mapa de Território +newplayer.view_only_badge = Modo Visualização +newplayer.legend_label = Legenda: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Facção +newplayer.legend_wilderness = Selvagem +newplayer.search_label = Buscar: +newplayer.sort_label = Ordenar: +newplayer.prev_btn = < Anterior +newplayer.next_btn = Próximo > +newplayer.pending_count = {0} pendentes +newplayer.received_header = CONVITES RECEBIDOS ({0}) +newplayer.requests_header = SUAS SOLICITAÇÕES ({0}) +newplayer.no_invites = Sem convites. Explore as facções para encontrar uma! +newplayer.no_requests = Nenhuma solicitação pendente. +newplayer.invited_by = Convidado por: {0} +newplayer.member_count = {0} membros +newplayer.power_count = {0} poder +newplayer.claim_count = {0} reivindicações +newplayer.awaiting_review = Aguardando análise +newplayer.expires_in = Expira em {0}h +newplayer.time_just_now = agora mesmo +newplayer.time_minutes = {0} min atrás +newplayer.time_hours = {0}h atrás +newplayer.time_days = {0}d atrás +newplayer.invalid_faction = Facção inválida. +newplayer.invite_expired = Este convite expirou ou foi revogado. +newplayer.faction_gone = A facção não existe mais. +newplayer.joined = Você entrou em {0}! +newplayer.faction_full = Esta facção está cheia. +newplayer.join_failed = Não foi possível entrar na facção. +newplayer.invite_declined = Convite recusado. +newplayer.request_cancelled = Solicitação para entrar em {0} cancelada. +newplayer.faction_count = {0} facções +newplayer.browse_subtitle = Encontre seu novo lar! +newplayer.sort_power = Poder +newplayer.sort_name = Nome +newplayer.sort_members = Membros +newplayer.btn_accept = Aceitar +newplayer.btn_pending = Pendente +newplayer.btn_join = Entrar +newplayer.btn_request = Solicitar +newplayer.invite_only_msg = Esta facção é apenas por convite. +newplayer.welcome_hint = Bem-vindo! Use /f para abrir o menu de facções. +newplayer.faction_open_hint = Esta facção está aberta! Clique em ENTRAR. +newplayer.already_requested = Você já tem uma solicitação pendente para esta facção. +newplayer.has_invite_hint = Você tem um convite desta facção! Clique em ACEITAR. +newplayer.request_sent = Solicitação de entrada enviada para {0}! +newplayer.officer_review = Um oficial irá analisar sua solicitação. +newplayer.map_hint = Modo Visualização - Entre em uma facção para reivindicar território! + +# Configurações do Jogador +nav.player_settings = Jogador +player_settings.title = Configurações do Jogador +player_settings.language_section = Idioma +player_settings.auto_detect = Detectar automaticamente do cliente +player_settings.auto_detect_desc = Usa a configuração de idioma do seu cliente de jogo +player_settings.language_label = Idioma +player_settings.notifications_section = Notificações +player_settings.territory_alerts = Alertas de Território +player_settings.territory_alerts_desc = Mostrar notificações ao entrar/sair de territórios +player_settings.death_announcements = Anúncios de Morte +player_settings.death_announcements_desc = Receber anúncios de localização de morte de membros da facção +player_settings.power_notifications = Alterações de Poder +player_settings.power_notifications_desc = Mostrar mensagens quando seu poder muda +player_settings.language_changed = Idioma alterado para {0} +player_settings.pref_enabled = {0} ativado +player_settings.pref_disabled = {0} desativado + +# ========== Páginas de Ajuda ========== +help.center_title = Central de Ajuda +help.getting_started_title = Primeiros Passos +help.what_are_factions_title = O Que São Facções? +help.what_are_factions_1 = Facções são grupos criados por jogadores que trabalham juntos +help.what_are_factions_2 = para reivindicar território, construir bases e competir. +help.what_are_factions_bullet_1 = - Território protegido para construção +help.what_are_factions_bullet_2 = - Companheiros de equipe para jogar +help.what_are_factions_bullet_3 = - Acesso ao chat da facção e recursos +help.joining_title = Entrando em uma Facção +help.joining_desc = Existem várias maneiras de entrar em uma facção: +help.joining_bullet_1 = - Explorar - Encontre facções abertas e clique ENTRAR +help.joining_bullet_2 = - Convites - Aceite convites de oficiais +help.joining_bullet_3 = - Solicitar - Peça para entrar em facções por convite +help.creating_title = Criando uma Facção +help.creating_desc = Vá à aba Criar para iniciar sua própria facção. +help.creating_bullet_1 = - Convide e gerencie membros +help.creating_bullet_2 = - Reivindique e proteja território +help.commands_title = Comandos Rápidos +help.cmd_f = /f - Abrir menu de facções +help.cmd_f_list = /f list - Listar todas as facções +help.cmd_f_join = /f join - Entrar em uma facção aberta +help.cmd_f_create = /f create - Criar uma nova facção +help.cmd_f_help = /f help - Lista completa de comandos +help.tip = Dica: Explore as facções para encontrar um grupo ideal para você! diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..a5a33a96 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Система конфигурации + +HyperFactions использует модульную систему конфигурации JSON с 11 файлами конфигурации. + +## Админ-команды конфигурации + +| Команда | Описание | +|---------|----------| +| `/f admin config` | Открыть визуальный редактор конфигурации | +| `/f admin reload` | Перезагрузить все файлы конфигурации с диска | +| `/f admin sync` | Синхронизировать данные фракций в хранилище | + +## Файлы конфигурации + +| Файл | Содержимое | +|------|-----------| +| `factions.json` | Роли, сила, захваты, бой, отношения | +| `server.json` | Телепортация, автосохранение, сообщения, интерфейс, права | +| `economy.json` | Казна, содержание, настройки транзакций | +| `backup.json` | Ротация и хранение резервных копий | +| `chat.json` | Форматирование чата фракции и союзников | +| `debug.json` | Категории отладочного логирования | +| `faction-permissions.json` | Права по умолчанию для каждой роли | +| `announcements.json` | Оповещения о событиях и территории | +| `gravestones.json` | Настройки интеграции с надгробиями | +| `worldmap.json` | Режимы обновления карты мира | +| `worlds.json` | Переопределения поведения по мирам | + +>[!TIP] Меню конфигурации предоставляет визуальный редактор с описаниями для каждой настройки. Изменения сохраняются сразу, но некоторые требуют `/f admin reload` для полного вступления в силу. + +## Расположение конфигурации + +Все файлы хранятся в: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Ручные правки JSON требуют `/f admin reload` для применения. Невалидный JSON приведёт к пропуску файла с предупреждением в логе сервера. + +>[!NOTE] Версия конфигурации отслеживается в `server.json`. Плагин автоматически мигрирует старые конфигурации при запуске. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..86c96462 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Настройки по мирам + +HyperFactions поддерживает конфигурацию по мирам для захватов, PvP и поведения защиты. + +## Команды миров + +| Команда | Описание | +|---------|----------| +| `/f admin world list` | Список всех переопределений по мирам | +| `/f admin world info ` | Показать настройки для мира | +| `/f admin world set ` | Установить настройку | +| `/f admin world reset ` | Сбросить мир к значениям по умолчанию | + +## Доступные настройки + +| Настройка | Тип | Описание | +|-----------|-----|----------| +| claiming_enabled | boolean | Разрешить захваты фракций в этом мире | +| pvp_enabled | boolean | Разрешить PvP-бой в этом мире | +| power_loss | boolean | Применять потерю силы при смерти | +| build_protection | boolean | Применять защиту построек на захватах | +| explosion_protection | boolean | Защищать захваты от взрывов | + +## Белый / чёрный список миров + +Управляй, какие миры позволяют функции фракций, через файл конфигурации `worlds.json`: + +- **Режим белого списка**: Только перечисленные миры позволяют захваты +- **Режим чёрного списка**: Все миры позволяют захваты, кроме перечисленных + +>[!INFO] Настройки миров хранятся в `worlds.json` и переопределяют глобальные значения из `factions.json`. + +## Примеры + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- восстановить все значения по умолчанию + +>[!TIP] Отключай захваты в творческих или лобби мирах, чтобы система фракций была сосредоточена на выживании. + +>[!NOTE] Настройки по мирам имеют приоритет над глобальной конфигурацией, но переопределяются флагами зон внутри этого мира. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..1adcdd14 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Управление казной + +Админ-команды для управления казнами фракций. Требуется право `hyperfactions.admin.economy`. + +## Команды казны + +| Команда | Описание | +|---------|----------| +| `/f admin economy balance ` | Просмотр баланса казны фракции | +| `/f admin economy set ` | Установить точный баланс | +| `/f admin economy add ` | Добавить средства в казну | +| `/f admin economy take ` | Снять средства из казны | +| `/f admin economy reset ` | Сбросить казну до нуля | + +## Примеры + +- `/f admin economy balance Vikings` -- проверить баланс +- `/f admin economy set Vikings 5000` -- установить 5000 +- `/f admin economy add Vikings 1000` -- внести 1000 +- `/f admin economy take Vikings 500` -- снять 500 +- `/f admin economy reset Vikings` -- обнулить баланс + +>[!TIP] Используй `/f admin info `, чтобы увидеть полный обзор экономики, включая историю транзакций вместе с балансом казны. + +## Случаи использования + +| Сценарий | Команда | +|----------|---------| +| Распределение призов за мероприятие | `economy add ` | +| Штраф за нарушение правил | `economy take ` | +| Сброс экономики после вайпа | `economy reset ` | +| Компенсация за баги | `economy add ` | + +>[!WARNING] Изменения казны записываются в историю транзакций фракции. Действия администратора фиксируются с именем админа для подотчётности. + +>[!NOTE] Все админ-команды экономики работают даже когда модуль экономики отключён в конфигурации. Данные хранятся независимо от статуса модуля. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..31a2c582 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Управление содержанием + +Содержание фракций взимает с фракций плату периодически на основе их территории и количества участников. + +## Элементы управления администратора + +Настройки содержания управляются через файл конфигурации экономики или меню конфигурации администратора. + +`/f admin config` +Открой редактор конфигурации и перейди к настройкам экономики для корректировки значений содержания. + +## Настройки содержания по умолчанию + +| Настройка | По умолчанию | Описание | +|-----------|-------------|----------| +| Содержание включено | false | Главный переключатель системы | +| Интервал содержания | 24ч | Как часто взимается содержание | +| Стоимость за захват | 5.0 | Стоимость за захваченный чанк за цикл | +| Стоимость за участника | 0.0 | Стоимость за участника за цикл | +| Льготный период | 72ч | Новые фракции освобождены | +| Расформирование при банкротстве | false | Автоматическое расформирование, если нечем платить | + +## Мониторинг содержания + +Используй `/f admin info `, чтобы увидеть: +- Текущий баланс казны +- Расчётную стоимость содержания за цикл +- Время до следующего списания содержания +- Может ли фракция оплатить содержание + +>[!TIP] Просматривай статистику экономики по всем фракциям из панели администратора, чтобы выявить фракции на грани банкротства до срабатывания содержания. + +>[!INFO] Конфигурация содержания хранится в `economy.json`. Изменения через меню конфигурации вступают в силу после перезагрузки с помощью `/f admin reload`. + +## Формула содержания + +**Общее содержание** = (захваченные чанки x стоимость за захват) + (количество участников x стоимость за участника) + +>[!WARNING] Включение содержания на сервере с существующими фракциями может привести к неожиданным банкротствам. Рассмотри установку льготного периода или объявление изменения заранее. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..cbd20bcb --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Принудительное расформирование + +Администраторы могут принудительно расформировать любую фракцию, независимо от желания лидера. + +## Команда + +`/f admin disband ` +Принудительно расформировать указанную фракцию. Перед выполнением появится запрос подтверждения. + +**Право**: `hyperfactions.admin.disband` + +>[!WARNING] Расформирование фракции **необратимо**. Все захваты освобождаются, все участники исключаются, и фракция перестаёт существовать. Сначала создай резервную копию. + +## Последствия + +При расформировании фракции: + +| Эффект | Описание | +|--------|----------| +| **Захваты** | Вся территория освобождается немедленно | +| **Участники** | Все игроки исключаются из состава | +| **Отношения** | Все союзы и вражды сбрасываются | +| **Казна** | Обрабатывается согласно настройкам экономики | +| **Дом** | Дом фракции удаляется | +| **Чат** | История чата фракции удаляется | + +## Лучшие практики + +1. Всегда выполняй `/f admin backup create` перед расформированием +2. Уведомляй участников фракции по возможности +3. Документируй причину для записей сервера +4. Проверь `/f admin info ` перед действием + +>[!TIP] Если проблема связана с конкретным участником, рассмотри использование меню управления фракциями для передачи лидерства вместо расформирования всей фракции. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..b3ff6c6c --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Управление фракциями + +Администраторы могут просматривать и изменять любую фракцию на сервере через панель управления или команды. + +## Обзор фракций + +`/f admin factions` +Открывает браузер фракций администратора. Просмотр всех фракций с количеством участников, уровнями силы и территорией. + +`/f admin info ` +Открывает информационную панель администратора для конкретной фракции с полными данными и опциями управления. + +## Изменение настроек фракции + +С правом `hyperfactions.admin.modify` ты можешь: + +- **Переименовать** фракцию для разрешения конфликтов +- **Задать цвет** для исправления проблем отображения +- **Переключить открытость/закрытость** для изменения политики вступления +- **Редактировать описание** для целей модерации + +>[!TIP] Используй `/f admin who `, чтобы узнать, к какой фракции принадлежит конкретный игрок, и просмотреть его данные. + +## Просмотр участников и отношений + +Информационная панель администратора показывает: + +| Раздел | Подробности | +|--------|-------------| +| **Участники** | Полный состав с ролями и временем последнего визита | +| **Отношения** | Все союзные, вражеские и нейтральные связи | +| **Территория** | Захваченные чанки и баланс силы | +| **Экономика** | Баланс казны и журнал транзакций | + +>[!NOTE] Команды инспекции администратора не уведомляют просматриваемую фракцию. Только изменения вызывают оповещения. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..c9d86bd1 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Система резервного копирования + +HyperFactions включает автоматическое и ручное резервное копирование с ротацией GFS (дед-отец-сын). + +## Команды резервного копирования + +| Команда | Описание | +|---------|----------| +| `/f admin backup create` | Создать резервную копию вручную | +| `/f admin backup list` | Список всех доступных резервных копий | +| `/f admin backup restore ` | Восстановить из резервной копии | +| `/f admin backup delete ` | Удалить конкретную резервную копию | + +**Право**: `hyperfactions.admin.backup` + +## Ротация GFS по умолчанию + +| Тип | Хранение | Описание | +|-----|----------|----------| +| Ежечасные | 24 | Последние 24 ежечасных снимка | +| Ежедневные | 7 | Последние 7 ежедневных снимков | +| Еженедельные | 4 | Последние 4 еженедельных снимка | +| Ручные | 10 | Созданные вручную резервные копии | +| При выключении | 5 | Создаются при остановке сервера | + +>[!INFO] Резервные копии при выключении включены по умолчанию (`onShutdown=true`). Они фиксируют последнее состояние перед остановкой сервера. + +## Содержимое резервной копии + +Каждый ZIP-архив резервной копии содержит: +- Все файлы данных фракций +- Данные силы игроков +- Определения зон +- Историю чата и данные экономики +- Данные приглашений и запросов на вступление +- Файлы конфигурации + +>[!WARNING] **Восстановление резервной копии -- деструктивная операция.** Оно заменяет все текущие данные содержимым резервной копии. Любые изменения, сделанные после создания копии, будут потеряны. Всегда создавай свежую резервную копию перед восстановлением. + +## Лучшие практики + +1. Создавай ручную резервную копию перед крупными административными действиями +2. Проверяй настройки хранения в `backup.json` +3. Тестируй восстановление сначала на тестовом сервере +4. Держи включёнными резервные копии при выключении для восстановления после сбоев diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..16e6c124 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Импорт данных + +Импортируй данные фракций из других плагинов для миграции сервера на HyperFactions. + +## Команда импорта + +`/f admin import [path] [flags]` + +**Право**: `hyperfactions.admin.use` + +## Поддерживаемые источники + +| Источник | Описание | +|----------|----------| +| `elbaphfactions` | Импорт из данных ElbaphFactions | +| `hyfactions` | Импорт из данных HyFactions v1 | + +## Флаги импорта + +| Флаг | Описание | +|------|----------| +| `--dry-run` | Проверить данные без фактического импорта | +| `--overwrite` | Перезаписать существующие фракции с тем же именем | +| `--no-zones` | Пропустить данные зон при импорте | +| `--no-power` | Пропустить данные силы при импорте | + +>[!TIP] Всегда сначала запускай с `--dry-run`, чтобы предварительно просмотреть, что будет импортировано, и выявить проблемы с данными перед фиксацией изменений. + +## Процесс импорта + +1. Автоматически создаётся резервная копия перед импортом +2. Загружаются маппинги имён игроков +3. Конвертируются фракции, захваты и зоны +4. Данные валидируются и сохраняются + +## Примеры + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Использование `--overwrite` **заменит** любую существующую фракцию с таким же именем, как у импортируемой. Данные участников и захваты будут перезаписаны. Сначала выполни `--dry-run` для выявления конфликтов. + +>[!NOTE] Некоторые данные, специфичные для источника (например, рабочие участки, фермерские участки), не имеют аналогов в HyperFactions и будут записаны как предупреждения при импорте. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..67a1e2b2 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Проверка обновлений + +HyperFactions может проверять наличие новых версий и управлять зависимостью HyperProtect-Mixin. + +## Команды обновления + +| Команда | Описание | +|---------|----------| +| `/f admin update` | Проверить обновления HyperFactions | +| `/f admin update mixin` | Проверить/скачать HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | Переключить автозагрузку | +| `/f admin version` | Показать текущую версию и информацию о сборке | + +## Каналы выпуска + +| Канал | Описание | +|-------|----------| +| **Stable** | Рекомендуется для продакшн-серверов | +| **Pre-release** | Ранний доступ к предстоящим функциям | + +>[!INFO] Проверка обновлений только уведомляет о новых версиях. Она **не** устанавливает обновления HyperFactions автоматически. + +## HyperProtect-Mixin + +HyperProtect-Mixin -- рекомендованный миксин защиты, включающий расширенные флаги зон (взрывы, распространение огня, сохранение инвентаря и т.д.). + +- `/f admin update mixin` проверяет последнюю версию +и скачивает её, если доступна более новая +- Автозагрузку можно включить или выключить для каждого сервера + +>[!TIP] После скачивания новой версии миксина требуется перезапуск сервера для вступления изменений в силу. + +## Процедура отката + +Если обновление вызвало проблемы: + +1. Останови сервер +2. Замени JAR плагина на предыдущую версию +3. Запусти сервер +4. Проверь работоспособность с помощью `/f admin version` + +>[!WARNING] Понижение версии может потребовать сброса миграции конфигурации. Всегда храни резервные копии перед обновлением. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..39987f92 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_overview/getting_started.md @@ -0,0 +1,41 @@ +--- +id: admin_getting_started +--- +# Начало работы администратора + +Добро пожаловать в администрирование HyperFactions. Это руководство описывает первые шаги после установки плагина. + +## Открытие панели администратора + +`/f admin` +Открывает панель администратора с доступом ко всем инструментам управления, редакторам зон и настройкам сервера. + +>[!INFO] Тебе нужно право **hyperfactions.admin.use** или статус OP для доступа к админ-командам. + +## Требования + +- **С плагином прав**: Выдай `hyperfactions.admin.use` +- **Без плагина прав**: Игрок должен быть +оператором сервера (`adminRequiresOp=true` по умолчанию) + +## Первые шаги после установки + +1. Выполни `/f admin` для проверки доступа +2. Открой **Config** для просмотра настроек фракций по умолчанию +3. Создай **SafeZone** на спавне с помощью `/f admin safezone Spawn` +4. По желанию создай **WarZone** для PvP-арен +5. Проверь настройки **Backup** для обеспечения сохранности данных + +## Возможности администратора + +| Область | Что можно делать | +|---------|-----------------| +| Фракции | Просматривать, изменять или принудительно расформировать любую фракцию | +| Зоны | Создавать SafeZone и WarZone с настраиваемыми флагами | +| Сила | Переопределять значения силы игроков/фракций | +| Экономика | Управлять казнами фракций и содержанием | +| Конфигурация | Редактировать настройки через меню или перезагружать с диска | +| Резервные копии | Создавать, восстанавливать и управлять резервными копиями данных | +| Импорт | Переносить данные из других плагинов фракций | + +>[!TIP] Используй `/f admin --text` для получения текстового вывода в чат вместо меню -- полезно для консоли или автоматизации. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..3a489177 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Права администратора + +Все функции администратора защищены узлами прав в пространстве имён `hyperfactions.admin`. + +## Узлы прав + +| Право | Описание | +|-------|----------| +| `hyperfactions.admin.*` | Выдаёт **все** права администратора | +| `hyperfactions.admin.use` | Доступ к панели `/f admin` | +| `hyperfactions.admin.reload` | Перезагрузка файлов конфигурации | +| `hyperfactions.admin.debug` | Переключение категорий отладочного логирования | +| `hyperfactions.admin.zones` | Создание, редактирование и удаление зон | +| `hyperfactions.admin.disband` | Принудительное расформирование любой фракции | +| `hyperfactions.admin.modify` | Изменение настроек любой фракции | +| `hyperfactions.admin.bypass.limits` | Обход лимитов захватов и силы | +| `hyperfactions.admin.backup` | Создание и восстановление резервных копий | +| `hyperfactions.admin.power` | Переопределение значений силы игроков | +| `hyperfactions.admin.economy` | Управление казнами фракций | + +## Поведение при отсутствии плагина + +Когда **плагин прав не установлен**, права администратора определяются по статусу оператора сервера (OP). Это контролируется параметром `adminRequiresOp` в конфигурации сервера (по умолчанию: `true`). + +>[!NOTE] Подстановочный знак `hyperfactions.admin.*` выдаёт все права администратора. Используй отдельные узлы для детального контроля над командой модераторов. + +## Порядок определения прав + +1. Провайдер **VaultUnlocked** (если доступен) +2. Провайдер **HyperPerms** (если доступен) +3. Провайдер **LuckPerms** (если доступен) +4. Проверка **OP** для админ-узлов (запасной вариант) + +>[!WARNING] Без плагина прав и с отключённым `adminRequiresOp` админ-команды **доступны всем игрокам**. Всегда используй плагин прав в продакшене. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..0bebc33f --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Админ-команды силы + +Переопределение значений силы игроков и фракций. Все команды требуют право `hyperfactions.admin.power`. + +## Команды силы игрока + +| Команда | Описание | +|---------|----------| +| `/f admin power set ` | Установить точное значение силы | +| `/f admin power add ` | Добавить силу игроку | +| `/f admin power remove ` | Убрать силу у игрока | +| `/f admin power reset ` | Сбросить до начального значения | +| `/f admin power info ` | Просмотр детальной информации о силе | + +## Как сила влияет на фракции + +Общая сила фракции -- это сумма индивидуальной силы всех участников. Захваты территории требуют достаточной общей силы для поддержания. + +| Сценарий | Эффект | +|----------|--------| +| Сила увеличена | Фракция может захватить больше территории | +| Сила уменьшена | Фракция может стать уязвимой для перезахвата | +| Сила сброшена | Возвращает игроку начальное значение | + +>[!WARNING] Снижение силы игрока может привести к потере территории его фракцией, если общая сила упадёт ниже количества захваченных чанков. + +## Примеры + +- `/f admin power set Steve 50` -- установить ровно 50 +- `/f admin power add Steve 10` -- увеличить на 10 +- `/f admin power remove Steve 5` -- уменьшить на 5 +- `/f admin power reset Steve` -- вернуть к значению по умолчанию +- `/f admin power info Steve` -- показать полную информацию + +>[!TIP] Используй `/f admin power info `, чтобы увидеть текущую силу, максимальную силу и активные переопределения перед внесением изменений. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..62084baf --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Переопределения силы + +Специальные команды силы, изменяющие поведение силы для конкретных игроков или фракций. + +## Команды переопределения + +| Команда | Описание | +|---------|----------| +| `/f admin power setmax ` | Установить свой лимит максимальной силы | +| `/f admin power noloss ` | Переключить иммунитет к потере силы при смерти | +| `/f admin power nodecay ` | Переключить иммунитет к затуханию силы офлайн | +| `/f admin power info ` | Просмотр всех переопределений и данных силы | + +## Свой максимум силы + +`/f admin power setmax ` +Устанавливает персональный потолок максимальной силы для игрока, переопределяя серверное значение по умолчанию. + +>[!INFO] Установка своего максимума **не** изменяет текущую силу. Она лишь меняет потолок. Игрок должен ещё заработать силу до нового лимита. + +## Режим без потерь + +`/f admin power noloss ` +Переключает иммунитет к потере силы при смерти. Когда включён, игрок **не** будет терять силу при смерти. + +Полезно для: +- Периодов защиты новых игроков +- Участников мероприятий +- Персонала сервера + +## Режим без затухания + +`/f admin power nodecay ` +Переключает иммунитет к затуханию силы офлайн. Когда включён, сила игрока **не** будет уменьшаться, пока он офлайн. + +Полезно для: +- Игроков в длительном отпуске +- VIP-участников +- Сезонной защиты + +## Информация о силе + +`/f admin power info ` +Показывает полный отчёт: + +- Текущая сила и максимальная сила +- Активные переопределения (noloss, nodecay, свой максимум) +- Время последней смерти и потерянная сила +- Процент вклада во фракцию + +>[!TIP] Все переопределения силы сохраняются между перезапусками сервера и хранятся в файле данных игрока. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..13dc400b --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Справочник админ-команд + +Полный список всех подкоманд `/f admin` с синтаксисом и необходимыми правами. + +## Панель управления и общее + +| Команда | Право | +|---------|-------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Управление фракциями + +| Команда | Право | +|---------|-------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Управление зонами + +| Команда | Право | +|---------|-------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Сила и экономика + +| Команда | Право | +|---------|-------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Обслуживание + +| Команда | Право | +|---------|-------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Все узлы прав имеют префикс `hyperfactions.` (например, `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..f09b57af --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Интеграции плагинов + +HyperFactions интегрируется с несколькими внешними плагинами через мягкие зависимости. Все интеграции опциональны и корректно работают при их отсутствии. + +## Проверка статуса интеграций + +`/f admin version` +Показывает текущую версию и обнаруженные интеграции. + +`/f admin integration` +Открывает панель управления интеграциями с детальным статусом каждого обнаруженного плагина. + +## Таблица интеграций + +| Плагин | Тип | Описание | +|--------|-----|----------| +| **HyperPerms** | Права | Полная система прав с группами, наследованием и контекстом | +| **LuckPerms** | Права | Альтернативный провайдер прав | +| **VaultUnlocked** | Права/Экономика | Мост для прав и экономики | +| **HyperProtect-Mixin** | Защита | Включает расширенные флаги зон (взрывы, огонь, сохранение инвентаря) | +| **OrbisGuard-Mixins** | Защита | Альтернативный миксин для применения флагов зон | +| **PlaceholderAPI** | Плейсхолдеры | 49 плейсхолдеров фракций для других плагинов | +| **WiFlow PlaceholderAPI** | Плейсхолдеры | Альтернативный провайдер плейсхолдеров | +| **GravestonePlugin** | Смерть | Контроль доступа к надгробиям в зонах | +| **HyperEssentials** | Функции | Флаги зон для домов, варпов и китов | +| **KyuubiSoft Core** | Фреймворк | Интеграция с основной библиотекой | +| **Sentry** | Мониторинг | Отслеживание ошибок и диагностика | + +## Приоритет провайдера прав + +1. **VaultUnlocked** (наивысший приоритет) +2. **HyperPerms** +3. **LuckPerms** +4. **OP-проверка** (если провайдер не найден) + +>[!INFO] Интеграции обнаруживаются один раз при запуске с помощью рефлексии. Результаты кешируются на сессию. Перезапуск сервера требуется после добавления или удаления интегрированного плагина. + +>[!TIP] Используй `/f admin debug toggle integration` для включения детального логирования интеграций при устранении неполадок. + +>[!NOTE] HyperProtect-Mixin -- **рекомендованный** миксин защиты. Без него 15 флагов зон не будут действовать. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..aeff0005 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Основы зон + +Зоны -- это контролируемые администратором территории с особыми правилами, которые переопределяют обычную защиту территории фракций. + +## Типы зон + +- **SafeZone** -- Нет PvP, нет строительства, нет урона. +Идеально для зон спавна и торговых хабов. +- **WarZone** -- PvP всегда включён, нет строительства. +Идеально для арен и спорных боевых зон. + +## Создание зон + +`/f admin safezone ` +Создаёт SafeZone и захватывает текущий чанк. + +`/f admin warzone ` +Создаёт WarZone и захватывает текущий чанк. + +После создания встань в дополнительные чанки и используй `/f admin zone claim ` для расширения зоны. + +## Управление чанками зоны + +`/f admin zone claim ` +Добавить текущий чанк в указанную зону. + +`/f admin zone unclaim ` +Убрать текущий чанк из указанной зоны. + +`/f admin zone radius ` +Захватить квадрат чанков вокруг твоей позиции. + +## Удаление зон + +`/f admin removezone ` +Полностью удаляет зону и освобождает все её захваченные чанки. + +>[!WARNING] Удаление зоны мгновенно освобождает все её чанки. Это нельзя отменить без восстановления из резервной копии. + +>[!INFO] Правила зон **всегда переопределяют** правила территории фракций. SafeZone внутри вражеской земли всё равно безопасна. diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..9c49a9f3 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Справочник команд зон + +Полный справочник по всем командам управления зонами. Все требуют право `hyperfactions.admin.zones`. + +## Быстрое создание + +| Команда | Описание | +|---------|----------| +| `/f admin safezone ` | Создать SafeZone в текущем чанке | +| `/f admin warzone ` | Создать WarZone в текущем чанке | +| `/f admin removezone ` | Удалить зону и освободить чанки | + +## Управление зонами + +| Команда | Описание | +|---------|----------| +| `/f admin zone create ` | Создать зону (safezone/warzone) | +| `/f admin zone delete ` | Удалить зону | +| `/f admin zone claim ` | Добавить текущий чанк в зону | +| `/f admin zone unclaim ` | Убрать текущий чанк из зоны | +| `/f admin zone radius ` | Захватить квадратный радиус чанков | +| `/f admin zone list` | Список всех зон с количеством чанков | +| `/f admin zone notify ` | Переключить сообщения входа/выхода | +| `/f admin zone title upper/lower ` | Задать текст заголовка зоны | +| `/f admin zone properties ` | Открыть меню свойств зоны | + +## Управление флагами + +| Команда | Описание | +|---------|----------| +| `/f admin zoneflag ` | Установить конкретный флаг | + +>[!TIP] Используй меню **свойств зоны** для визуального редактора с переключателями для каждого флага, сгруппированными по категориям. + +## Примеры + +- `/f admin safezone Spawn` -- создать защиту спавна +- `/f admin zone radius Spawn 3` -- расширить до 7x7 чанков +- `/f admin zoneflag Spawn door_use true` -- разрешить двери +- `/f admin zone notify Spawn true` -- показывать сообщения при входе diff --git a/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..f6b03612 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Флаги зон + +Зоны поддерживают **47 булевых флагов** в 10 категориях. Каждый флаг контролирует конкретное поведение внутри зоны. + +## Обзор категорий флагов + +| Категория | Кол-во | Ключевые флаги | +|-----------|--------|----------------| +| Бой | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Урон | 4 | fall_damage, explosion_damage, fire_spread | +| Смерть | 2 | keep_inventory, power_loss | +| Строительство | 4 | build_allowed, block_place, hammer_use | +| Взаимодействие | 13 | door_use, container_use, bench_use, npc_tame | +| Транспорт | 3 | teleporter_use, portal_use, mount_entry | +| Предметы | 4 | item_drop, item_pickup, invincible_items | +| Спавн мобов | 5 | mob_spawning, hostile/passive/neutral | +| Очистка мобов | 4 | mob_clear, hostile/passive/neutral clear | +| Интеграция | 5 | gravestone_access, show_on_map, essentials_homes | + +## Значения по умолчанию (SafeZone vs WarZone) + +| Флаг | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Некоторые флаги требуют **HyperProtect-Mixin** для работы (например, keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Без миксина эти флаги не действуют, даже если включены. + +## Установка флагов + +`/f admin zoneflag ` + +>[!TIP] Используй `/f admin zone properties ` для визуального редактора переключателей, сгруппированных по категориям. diff --git a/src/main/resources/Server/Languages/ru-RU/help/combat/death.md b/src/main/resources/Server/Languages/ru-RU/help/combat/death.md new file mode 100644 index 00000000..e8298da8 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Смерть и восстановление + +Смерть несёт реальные последствия во фракциях. Каждая смерть отнимает личную силу, ослабляя способность фракции удерживать территорию. + +## Потеря силы + +Каждая смерть стоит -1.0 силы от твоей личной силы. Это снижает общую силу фракции. + +| Событие | Изменение силы | +|---------|---------------| +| Смерть (любая причина) | -1.0 | +| Восстановление онлайн | +0.1 в минуту | +| Выход из боя | -1.0 (гибель) | + +>[!NOTE] Это значения по умолчанию. Администратор сервера мог настроить другие параметры. + +## Примеры сценариев + +*5 участников по 10.0 силы = 50 всего, 20 захватов.* +*Один участник умирает дважды: 8.0 силы, общая фракции 48.* +*Три участника умирают по разу: общая падает до 47.* + +>[!WARNING] Если сила фракции упадёт ниже количества захватов, враги смогут перезахватить твою территорию. + +## Восстановление + +Сила восстанавливается со скоростью 0.1 в минуту, пока ты онлайн. Восстановление 1.0 потерянной силы занимает около 10 минут. Множественные смерти суммируются, так что избегай повторных боёв. + +--- + +## Все типы смерти + +Потеря силы применяется ко всем смертям: PvP, убийства мобами, урон от падения, утопление и любая другая причина. Безопасного способа умереть нет. + +>[!TIP] Установи дом фракции с помощью /f sethome, чтобы участники могли быстро перегруппироваться после гибели. diff --git a/src/main/resources/Server/Languages/ru-RU/help/combat/protection.md b/src/main/resources/Server/Languages/ru-RU/help/combat/protection.md new file mode 100644 index 00000000..f837a80d --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Защита территории + +Захваченная территория обеспечивает несколько уровней защиты для построек и ресурсов твоей фракции. + +## Защита блоков + +Только участники фракции могут ставить или ломать блоки на твоей территории. Враги и нейтралы не могут ничего изменять. + +## Защита контейнеров + +Сундуки, бочки и другие контейнеры защищены. Только участники твоей фракции могут открывать или взаимодействовать с хранилищами на захваченных чанках. + +## Оповещения о вторжении + +Когда посторонний входит на твою захваченную территорию, онлайн-участники фракции получают уведомление с именем и местоположением нарушителя. + +--- + +## Доступ союзников + +Союзники не могут строить или ломать блоки на твоей территории по умолчанию. Урон между союзниками также отключён, так что союзные игроки не могут навредить друг другу. + +>[!INFO] Территория защищает блоки, а не игроков. PvP на твоей собственной территории зависит от отношения атакующего к твоей фракции. + +>[!TIP] Держи свои захваты связанными и избегай изолированных чанков, которые сложнее защищать. diff --git a/src/main/resources/Server/Languages/ru-RU/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/ru-RU/help/combat/spawn_protection.md new file mode 100644 index 00000000..f66a514b --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Защита при возрождении + +После возрождения от смерти ты получаешь временную защиту для предотвращения кемпинга на точке спавна. + +## Как это работает + +- Защита длится 5 секунд после возрождения +- Ты не можешь получать урон в этот период +- Визуальный индикатор показывает твой защищённый статус + +## Снятие защиты + +Защита при возрождении снимается досрочно, если ты: + +- Атакуешь другого игрока или существо +- Сдвинешься с точки возрождения + +Это предотвращает злоупотребления. Ты не можешь атаковать других, пока неуязвим. Как только ты совершишь любое действие, защита спадёт и вступят в силу обычные правила боя. + +--- + +>[!NOTE] Это значения по умолчанию. Администратор сервера мог настроить другие параметры. + +>[!TIP] Используй время защиты, чтобы оценить ситуацию, прежде чем двигаться. diff --git a/src/main/resources/Server/Languages/ru-RU/help/combat/tagging.md b/src/main/resources/Server/Languages/ru-RU/help/combat/tagging.md new file mode 100644 index 00000000..bafee26f --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Боевая метка + +Когда ты атакуешь или тебя атакует другой игрок, ты получаешь боевую метку на 15 секунд. + +## Пока ты помечен + +- Нельзя использовать /f home или /f stuck для телепортации +- Нельзя использовать серверные команды телепортации +- Метка сбрасывается с каждым новым боевым действием +- Таймер отображает оставшееся время метки + +--- + +## Штраф за выход + +>[!WARNING] Выход из игры с боевой меткой убивает твоего персонажа, и ты теряешь 1.0 силы. + +Твои вещи выпадут там, где ты отключился, и враги смогут их подобрать. Всегда жди, пока метка истечёт. + +## Как работает таймер + +Таймер боевой метки появляется на экране, когда ты вступаешь в бой. Каждый новый удар сбрасывает его на 15 секунд. Как только он достигнет нуля, все ограничения снимаются. + +>[!NOTE] Это значения по умолчанию. Администратор сервера мог настроить другие параметры. + +>[!TIP] Выйди из боя и переждай таймер, если тебе нужно телепортироваться. diff --git a/src/main/resources/Server/Languages/ru-RU/help/combat/zones.md b/src/main/resources/Server/Languages/ru-RU/help/combat/zones.md new file mode 100644 index 00000000..030a5fc5 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Специальные зоны + +Администраторы могут назначать области с особыми правилами, которые переопределяют обычную защиту территории фракций. + +## SafeZone + +Нет PvP-урона, нет разрушения блоков не-администраторами. Идеально подходит для зон спавна, торговых хабов и площадок для мероприятий. Здесь игрокам нельзя навредить. + +## WarZone + +PvP всегда включён. Защита блоков не действует. Открытые боевые зоны, где всё разрешено. В WarZone ты не получаешь преимуществ защиты территории. + +--- + +## Сравнение зон + +| Особенность | SafeZone | WarZone | Земля фракции | +|-------------|----------|---------|---------------| +| PvP | Отключён | Всегда вкл. | Зависит от отношений | +| Разрушение блоков | Отключено | Разрешено | Только участники | +| Контейнеры | Защищены | Открыты | Только участники | +| Лучше всего для | Спавн/Торговля | Арены | Базы | + +>[!NOTE] Правила зон всегда переопределяют правила территории фракций. Захваченный чанк внутри WarZone подчиняется правилам WarZone. + +>[!TIP] Проверь карту территорий с помощью /f map, чтобы увидеть границы зон. diff --git a/src/main/resources/Server/Languages/ru-RU/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/ru-RU/help/diplomacy/alliances.md new file mode 100644 index 00000000..04e54738 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Заключение союзов + +Союзы -- это взаимные соглашения между двумя фракциями, обеспечивающие защиту и преимущества сотрудничества. + +--- + +## Как заключить союз + +`/f ally ` + +Отправляет запрос на союз целевой фракции. Союз вступает в силу только когда обе стороны согласятся. Офицер или Лидер другой фракции тоже должен выполнить эту команду, указав твою фракцию, для подтверждения. + +## Как разорвать союз + +`/f neutral ` + +Любая сторона может в одностороннем порядке разорвать союз, сбросив отношения до нейтральных. + +--- + +## Преимущества союза + +| Преимущество | Подробности | +|-------------|-------------| +| Нет огня по своим | Союзные игроки не могут наносить урон друг другу | +| Общая видимость на карте | Территория союзников отображается синим на карте территорий | +| Взаимодействие на территории | Союзники могут использовать двери, сиденья и транспорт на твоей территории | +| Союзный чат | Переключись на режим союзного чата для общения между фракциями | +| Защита от перезахвата | Союзники не могут перезахватывать территорию друг друга | + +>[!NOTE] Твоя фракция может иметь до 10 союзов одновременно. Выбирай союзников с умом. + +--- + +## Этикет союзов + +>[!TIP] Общение -- это ключ. Прежде чем отправлять запрос на союз, свяжись с лидером другой фракции, чтобы обсудить условия. Крепкий союз строится на взаимной выгоде, а не просто на удобстве. + +- Союзы работают в обе стороны -- если ты пользуешься защитой, твои союзники ожидают того же +- Разрыв союза во время войны может навредить репутации твоей фракции +- Союзные фракции могут координировать захваты территорий для создания оборонительных границ diff --git a/src/main/resources/Server/Languages/ru-RU/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/ru-RU/help/diplomacy/enemies.md new file mode 100644 index 00000000..611d1987 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Вражеские фракции + +Объявление врага -- это одностороннее действие, которое немедленно включает PvP и территориальную агрессию против целевой фракции. Согласие не требуется. + +--- + +## Объявление врага + +`/f enemy ` + +Мгновенно отмечает целевую фракцию как твоего врага. Вступает в силу немедленно -- подтверждение другой стороны не нужно. Требуется ранг Офицера или выше. + +## Сброс до нейтрального + +`/f neutral ` + +Снимает вражеский статус и сбрасывает отношения до нейтральных. Также требуется Офицер+ и вступает в силу немедленно. + +--- + +## Что даёт вражеский статус + +| Эффект | Подробности | +|--------|-------------| +| PvP на территории | Полный PvP включён на территории обеих фракций | +| Перезахват | Ты можешь перезахватывать их чанки, если они в дефиците силы | +| Отметка на карте | Вражеская территория отображается красным на карте территорий | +| Нет защиты | Стандартная защита территории не предотвращает вражеский PvP | + +>[!WARNING] Объявление врага -- серьёзное решение. Их участники тоже смогут сражаться с тобой на твоей собственной территории после объявления. + +--- + +## Стратегические соображения + +- Объявления врага односторонние -- ты можешь объявить без их согласия, но они тоже будут видеть тебя как враждебного +- Перед объявлением проверь силу цели с помощью /f info. Если они сильны, ты можешь потерять территорию вместо них +- Ослабляй врагов повторными боями, чтобы истощить их силу, затем перезахватывай их землю +- Количество врагов не ограничено, но воевать на нескольких фронтах рискованно + +>[!TIP] Используй /f neutral для деэскалации конфликтов. Иногда стратегический мир ценнее продолжения войны. + +>[!NOTE] Если ты в союзе с фракцией и объявляешь её врагом, союз разрывается первым. diff --git a/src/main/resources/Server/Languages/ru-RU/help/diplomacy/relations.md b/src/main/resources/Server/Languages/ru-RU/help/diplomacy/relations.md new file mode 100644 index 00000000..1c91cfba --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Отношения фракций + +Каждая пара фракций имеет дипломатические отношения, определяющие правила взаимодействия. Есть три состояния: Союзник, Враг и Нейтрал. + +--- + +## Сравнение отношений + +| Эффект | Союзник | Нейтрал | Враг | +|--------|---------|---------|------| +| PvP на территории | Отключён | Стандартные правила | Включён | +| Защита территории | Взаимная защита | Стандартная защита | Перезахват при ослаблении | +| Огонь по своим | Отключён | Н/Д | Включён везде | +| Цвет на карте | Синий | Серый | Красный | +| Как установить | Взаимное соглашение | Состояние по умолчанию | Одностороннее объявление | +| Доступ к чату | Союзный канал чата | Нет | Нет | + +--- + +## Просмотр отношений + +`/f relations` + +Показывает все текущие союзы, врагов и ожидающие запросы на союз. + +## Как работают отношения + +- Нейтрал -- состояние по умолчанию между всеми фракциями. Действуют стандартные правила сервера. +- Союз требует согласия обеих фракций. Любая сторона может разорвать его в одностороннем порядке. +- Враг объявляется односторонне. Согласие не нужно -- другая фракция немедленно отмечается как твой враг. + +>[!INFO] Отношениями управляют Офицеры и Лидеры. Участники могут просматривать отношения, но не изменять их. + +>[!TIP] Используй /f relations регулярно, чтобы отслеживать дипломатическую обстановку. Знание своих врагов помогает подготовиться к территориальным конфликтам. diff --git a/src/main/resources/Server/Languages/ru-RU/help/economy/commands.md b/src/main/resources/Server/Languages/ru-RU/help/economy/commands.md new file mode 100644 index 00000000..388e5175 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Команды экономики + +Краткий справочник по всем командам экономики фракции. + +| Команда | Описание | Роль | +|---------|----------|------| +| /f balance | Просмотр баланса казны | Любой | +| /f deposit (amount) | Внести в казну | Любой | +| /f withdraw (amount) | Снять из казны | Офицер+ | +| /f money transfer (faction) (amount) | Перевести другой фракции | Офицер+ | +| /f money log [page] | Просмотр истории транзакций | Офицер+ | + +--- + +## Псевдонимы команд + +- /f balance также доступна как /f bal +- /f deposit и /f withdraw принимают дробные суммы + +## Требования к роли + +Команды снятия и перевода доступны только Офицерам и Лидерам. Все остальные команды экономики доступны любому участнику фракции. + +>[!TIP] Используй /f money log для просмотра недавних внесений, снятий и переводов с отметками времени. diff --git a/src/main/resources/Server/Languages/ru-RU/help/economy/funds.md b/src/main/resources/Server/Languages/ru-RU/help/economy/funds.md new file mode 100644 index 00000000..b1b18622 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Управление средствами + +Участники фракции работают вместе, чтобы поддерживать казну через внесения, снятия и переводы. + +## Внесение + +Любой участник может внести личные средства в казну фракции. + +`/f deposit ` +Внести со своего личного баланса в казну. + +## Снятие + +Офицеры и Лидер могут снимать средства обратно на свой личный баланс. + +`/f withdraw ` +Снять из казны на свой баланс. (Офицер+) + +## Перевод + +Офицеры могут переводить средства напрямую между казнами фракций для торговых сделок или дипломатии. + +`/f money transfer ` +Отправить средства в казну другой фракции. (Офицер+) + +--- + +## Комиссии + +| Транзакция | Комиссия | +|-----------|----------| +| Внесение | 0% | +| Снятие | 0% | +| Перевод | 0% | + +>[!INFO] Размеры комиссий настраиваются сервером и могут отличаться от значений по умолчанию, показанных выше. + +>[!TIP] Все транзакции записываются. Используй /f money log для просмотра недавней активности. diff --git a/src/main/resources/Server/Languages/ru-RU/help/economy/treasury.md b/src/main/resources/Server/Languages/ru-RU/help/economy/treasury.md new file mode 100644 index 00000000..70bdfd54 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Казна фракции + +У каждой фракции есть общая казна, которая служит банком фракции. Средства используются для оплаты содержания, обслуживания территории и операций фракции. + +## Начальный баланс + +Новые фракции начинают с 0 в казне. Участники должны вносить средства для накопления резервов. + +## Кто может управлять + +- Любой участник может вносить средства +- Офицеры и Лидер могут снимать и переводить +- Лидер имеет полный контроль над казной + +--- + +`/f balance` +Проверить текущий баланс казны фракции. Также доступно как /f bal. + +>[!TIP] Вноси средства регулярно, чтобы поддерживать фракцию на плаву. Расходы на содержание территории могут быстро опустошить пустую казну. + +>[!INFO] Все транзакции казны записываются и могут быть просмотрены офицерами. diff --git a/src/main/resources/Server/Languages/ru-RU/help/economy/upkeep.md b/src/main/resources/Server/Languages/ru-RU/help/economy/upkeep.md new file mode 100644 index 00000000..eaa31895 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Содержание территории + +Фракции должны платить постоянное содержание за свою захваченную территорию. Это предотвращает накопление земли и поддерживает карту динамичной. + +## Стоимость содержания + +| Настройка | По умолчанию | +|-----------|-------------| +| Стоимость за чанк | 2.0 за цикл | +| Интервал оплаты | Каждые 24 часа | +| Бесплатные чанки | 3 (без стоимости) | +| Режим масштабирования | Фиксированная ставка | + +>[!NOTE] Это значения по умолчанию. Администратор сервера мог настроить другие параметры. + +Первые 3 чанка бесплатны. Сверх этого каждый дополнительный захваченный чанк стоит 2.0 за платёжный цикл. + +## Автоплатёж + +Автоплатёж включён по умолчанию. Система автоматически списывает содержание из казны в каждый интервал. Никаких ручных действий не требуется. + +--- + +## Льготный период + +Если казна не может покрыть содержание, начинается 48-часовой льготный период. Предупреждение отправляется за 6 часов до начала потери захватов. + +>[!WARNING] Если содержание остаётся неоплаченным после льготного периода, фракция теряет 1 захват за цикл, пока расходы не будут покрыты или все лишние захваты не будут потеряны. + +## Пример + +*Фракция с 8 захватами платит за 5 чанков (8 минус 3 бесплатных). При 2.0 за чанк это 10.0 за цикл.* + +>[!TIP] Поддерживай казну выше стоимости содержания. Используй /f balance для проверки резервов. diff --git a/src/main/resources/Server/Languages/ru-RU/help/power_land/claiming.md b/src/main/resources/Server/Languages/ru-RU/help/power_land/claiming.md new file mode 100644 index 00000000..dc7aacce --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Захват территории + +Захват чанка ставит его под контроль твоей фракции. Только участники фракции могут строить, ломать или открывать контейнеры на захваченной территории. + +--- + +## Как захватить + +`/f claim` + +Встань в чанк, который хочешь захватить, и введи эту команду. Чанк сразу же станет защищённым. Требуется ранг Офицера или выше. + +## Как освободить + +`/f unclaim` + +Освобождает чанк, в котором ты стоишь, обратно в дикую местность. Также требуется Офицер+. + +--- + +## Правила захвата + +| Правило | По умолчанию | +|---------|-------------| +| Стоимость силы на захват | 2.0 силы | +| Максимум захватов | 100 на фракцию | +| Только смежные | Нет (можно захватывать где угодно) | + +>[!NOTE] Это значения по умолчанию. Администратор сервера мог настроить другие параметры. + +>[!INFO] Каждый захват стоит 2.0 силы на содержание. Фракция с 50 общей силы может безопасно удерживать до 25 захватов. + +--- + +## Что даёт защита + +На захваченной территории по умолчанию действуют следующие правила: + +- Посторонние не могут ломать, ставить или взаимодействовать с блоками +- Союзники могут использовать двери, сиденья и транспорт, но не могут ломать или ставить блоки +- Участники и Офицеры имеют полный доступ к строительству, разрушению и использованию всего +- Доступ к контейнерам (сундуки, ящики) ограничен только участниками + +>[!TIP] Ты также можешь захватывать прямо с карты территорий. Открой /f map и нажми на незахваченные чанки, чтобы захватить их. + +>[!WARNING] Не расширяйся чрезмерно. Если фракция потеряет силу из-за смертей, захваты сверх бюджета силы станут уязвимыми для перезахвата. diff --git a/src/main/resources/Server/Languages/ru-RU/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/ru-RU/help/power_land/losing_territory.md new file mode 100644 index 00000000..c35a6a7b --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Потеря территории + +Когда общая сила фракции падает ниже стоимости её захватов, она становится уязвимой для рейда. Враги могут перезахватить чанки прямо из-под тебя. + +--- + +## Как работает перезахват + +`/f overclaim` + +Офицер или Лидер вражеской фракции встаёт в твой захваченный чанк и вводит эту команду. Если твоя фракция в дефиците силы, чанк переходит к их фракции. + +## Математика + +Каждый захват стоит 2.0 силы на содержание. Если общая сила падает ниже этого порога, чанки в дефиците становятся уязвимыми. + +>[!NOTE] Это значения по умолчанию. Администратор сервера мог настроить другие параметры. + +>[!WARNING] Перезахват необратим. Как только враг забирает чанк, тебе нужно захватить его заново (или перезахватить обратно, если они ослабнут). + +--- + +## Пример сценария + +| Фактор | Значение | +|--------|----------| +| Участники | 5 игроков | +| Сила на участника | 10 у каждого (начальная) | +| Общая сила | 50 | +| Захваты | 30 чанков | +| Необходимая сила (30 x 2.0) | 60 | +| Дефицит | Не хватает 10 силы | + +В этом примере фракция уязвима для рейда с самого начала. Враги могут перезахватить до 5 чанков (10 дефицита / 2.0 за захват) до достижения равновесия. + +--- + +## Как предотвратить перезахват + +- Не расширяйся чрезмерно -- всегда держи общую силу выше стоимости захватов с запасом +- Будь активен -- сила восстанавливается только когда ты онлайн (+0.1/мин) +- Избегай ненужных смертей -- каждая смерть стоит 1.0 силы +- Набирай больше участников -- больше игроков значит больше общей силы +- Освобождай неиспользуемые чанки -- высвобождай силу с помощью /f unclaim + +>[!TIP] Проверяй свой статус силы регулярно с помощью /f power. Если общая сила близка к стоимости захватов, подумай об освобождении менее важных чанков перед войной. diff --git a/src/main/resources/Server/Languages/ru-RU/help/power_land/territory_map.md b/src/main/resources/Server/Languages/ru-RU/help/power_land/territory_map.md new file mode 100644 index 00000000..df05f9dc --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# Карта территорий + +Карта территорий даёт тебе вид сверху на захваченные чанки в твоём районе, показывая, какие фракции контролируют землю вокруг тебя. + +--- + +## Открытие карты + +`/f map` + +Открывает меню карты территорий с центром на твоём текущем местоположении. + +--- + +## Цветовая легенда + +| Цвет | Значение | +|------|----------| +| [#55FF55] Цвет твоей фракции | Территория, захваченная твоей фракцией | +| [#5555FF] Синий | Территория союзной фракции | +| [#FF5555] Красный | Территория вражеской фракции | +| [#AAAAAA] Серый | Территория нейтральной фракции | +| [#333333] Тёмный | Дикая местность (незахваченная земля) | +| [#FFAA00] Золотой | Специальные зоны (SafeZone, WarZone) | + +>[!INFO] Цвет твоей фракции на карте соответствует цвету, установленному в настройках фракции. Союзники и враги используют фиксированные цвета для удобства распознавания. + +--- + +## Нажми для захвата + +Карта не только для просмотра -- ты можешь взаимодействовать с ней напрямую. + +- Нажми на незахваченный чанк, чтобы захватить его (требуется ранг Офицер+ и достаточно силы) +- Нажми на захваченный чанк, чтобы узнать, какая фракция им владеет +- Прокручивай или перемещайся для исследования окрестностей + +>[!TIP] Карта -- самый удобный способ планировать расширение территории. Ищи незахваченные участки рядом с базой и захватывай стратегически, чтобы создать непрерывную границу. + +>[!NOTE] Карта показывает фиксированную область вокруг твоей позиции. Перемести персонажа в другое место и открой карту снова, чтобы увидеть другие части мира. diff --git a/src/main/resources/Server/Languages/ru-RU/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/ru-RU/help/power_land/understanding_power.md new file mode 100644 index 00000000..ff766cbf --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Понимание силы + +Сила -- это основной ресурс, определяющий, сколько территории может удерживать твоя фракция. У каждого игрока есть личная сила, которая вносит вклад в общую силу фракции. + +--- + +## Значения силы по умолчанию + +| Настройка | Значение | +|-----------|----------| +| Максимальная сила на игрока | 20 | +| Начальная сила | 10 | +| Штраф за смерть | -1.0 за смерть | +| Награда за убийство | 0.0 | +| Скорость восстановления | +0.1 в минуту (пока онлайн) | +| Стоимость силы на захват | 2.0 | +| Выход с боевой меткой | -1.0 дополнительно | + +>[!NOTE] Это значения по умолчанию. Администратор сервера мог настроить другие параметры. + +## Как это работает + +Общая сила твоей фракции -- это сумма личной силы всех участников. Необходимая сила -- это количество захватов, умноженное на 2.0. Пока общая сила остаётся выше необходимой, твоя территория в безопасности. + +>[!INFO] Сила восстанавливается пассивно со скоростью 0.1 в минуту, пока ты онлайн. При такой скорости восстановление 1.0 силы занимает около 10 минут. + +--- + +## Проверка силы + +`/f power` + +Показывает твою личную силу, общую силу фракции и сколько нужно для поддержания текущих захватов. + +## Опасная зона + +Если общая сила упадёт ниже необходимой для твоих захватов, фракция становится уязвимой. Враги смогут перезахватить твои чанки. + +>[!WARNING] Несколько смертей за короткий период могут быстро привести к лавинному эффекту. Если у тебя 5 участников по 10 силы (50 всего) и 20 захватов (нужно 40), всего 5 смертей в команде снижают силу до 45 -- ещё безопасно. Но 11 смертей опускают до 39, ниже порога в 40. + +>[!TIP] Держи запас силы. Не захватывай каждый чанк, который можешь себе позволить -- оставляй место для нескольких смертей, чтобы не стать уязвимым для рейда. diff --git a/src/main/resources/Server/Languages/ru-RU/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/ru-RU/help/quick_ref/all_commands.md new file mode 100644 index 00000000..ed952f93 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Все команды + +## Основные + +| Команда | Описание | Роль | +|---------|----------|------| +| /f | Открыть меню фракции | Любой | +| /f help | Открыть справочный центр | Любой | +| /f create (name) | Создать фракцию | Любой | +| /f disband | Расформировать фракцию | Лидер | +| /f leave | Покинуть фракцию | Любой | + +## Членство + +| Команда | Описание | Роль | +|---------|----------|------| +| /f invite (player) | Пригласить игрока | Офицер+ | +| /f accept [faction] | Принять приглашение | Любой | +| /f request (faction) | Запросить вступление | Любой | +| /f kick (player) | Исключить участника | Офицер+ | +| /f promote (player) | Повысить до Офицера | Лидер | +| /f demote (player) | Понизить до Участника | Лидер | +| /f transfer (player) | Передать лидерство | Лидер | + +## Территория + +| Команда | Описание | Роль | +|---------|----------|------| +| /f claim | Захватить текущий чанк | Офицер+ | +| /f unclaim | Освободить текущий чанк | Офицер+ | +| /f overclaim | Перезахватить ослабленный чанк | Офицер+ | +| /f map | Открыть карту территорий | Любой | + +## Телепортация + +| Команда | Описание | Роль | +|---------|----------|------| +| /f home | Телепортироваться домой | Любой | +| /f sethome | Установить дом фракции | Офицер+ | +| /f delhome | Удалить дом фракции | Офицер+ | +| /f stuck | Выбраться с вражеской территории | Любой | + +## Информация + +| Команда | Описание | Роль | +|---------|----------|------| +| /f info [faction] | Просмотр данных фракции | Любой | +| /f list | Обзор всех фракций | Любой | +| /f members | Просмотр состава | Любой | +| /f who [player] | Просмотр информации об игроке | Любой | +| /f power [player] | Проверка уровня силы | Любой | +| /f invites | Управление приглашениями/запросами | Любой | +| /f relations | Просмотр дипломатических отношений | Любой | + +## Дипломатия + +| Команда | Описание | Роль | +|---------|----------|------| +| /f ally (faction) | Запросить союз | Офицер+ | +| /f enemy (faction) | Объявить врага | Офицер+ | +| /f neutral (faction) | Сбросить до нейтрала | Офицер+ | + +## Настройки + +| Команда | Описание | Роль | +|---------|----------|------| +| /f settings | Открыть меню настроек | Офицер+ | +| /f rename (name) | Переименовать фракцию | Лидер | +| /f desc [text] | Задать описание | Офицер+ | +| /f color (code) | Задать цвет фракции | Офицер+ | +| /f open | Разрешить вступление всем | Лидер | +| /f close | Требовать приглашение | Лидер | + +## Экономика + +| Команда | Описание | Роль | +|---------|----------|------| +| /f balance | Просмотр казны | Любой | +| /f deposit (amount) | Внести средства | Любой | +| /f withdraw (amount) | Снять средства | Офицер+ | +| /f money transfer (faction) (amt) | Перевести средства | Офицер+ | +| /f money log [page] | История транзакций | Офицер+ | + +## Чат + +| Команда | Описание | Роль | +|---------|----------|------| +| /f c | Переключить режим чата | Любой | +| /f c f | Чат фракции | Любой | +| /f c a | Союзный чат | Любой | +| /f c off | Публичный чат | Любой | diff --git a/src/main/resources/Server/Languages/ru-RU/help/welcome/getting_started.md b/src/main/resources/Server/Languages/ru-RU/help/welcome/getting_started.md new file mode 100644 index 00000000..22068902 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Начало работы + +Добро пожаловать в HyperFactions! Вот как начать играть всего за несколько шагов. + +--- + +## Шаг 1: Открой меню фракции + +Набери /f, чтобы открыть главное меню фракций. Это твой центр управления -- просмотр фракций, создание собственной и управление приглашениями. + +## Шаг 2: Выбери свой путь + +| Вариант | Как сделать | +|---------|-------------| +| Найти открытые фракции | Нажми "Обзор" в меню и выбери "Вступить" в любую открытую фракцию. | +| Принять приглашение | Проверь вкладку "Приглашения". Если тебя пригласили, нажми "Принять". | +| Создать свою | Нажми "Создать фракцию", выбери название, и ты станешь Лидером. | + +## Шаг 3: Исследуй свою фракцию + +Когда ты вступишь во фракцию, ты увидишь Панель фракции с составом участников, картой территорий, отношениями и настройками. + +>[!TIP] Если ты новичок, попробуй сначала вступить в существующую фракцию. С опытными игроками рядом ты быстрее разберёшься. + +--- + +## Основные первые команды + +- /f -- Открывает меню фракции +- /f home -- Телепортация на базу фракции +- /f c -- Переключение режима чата между Обычным, Фракционным и Союзным +- /f map -- Просмотр карты территорий вокруг тебя + +>[!TIP] Ты также можешь набрать /f help в чате для быстрой справки по командам в любой момент. diff --git a/src/main/resources/Server/Languages/ru-RU/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/ru-RU/help/welcome/quick_tips.md new file mode 100644 index 00000000..c141d34c --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Полезные советы + +Удобные подсказки по категориям, которые помогут тебе преуспеть. + +--- + +## Территория + +- Захватывай землю вокруг базы заранее с помощью `/f claim` -- незахваченные постройки **не защищены** +- Каждый захват стоит **2.0 силы** на содержание, так что не расширяйся сверх того, что твои участники могут поддерживать +- Используй `/f map` для разведки ближайших захватов и поиска безопасных мест для строительства +- Освобождай ненужные чанки с помощью `/f unclaim`, чтобы высвободить силу + +## Бой + +- Смерть стоит **1.0 силы** -- избегай ненужных драк, когда фракция близка к лимиту захватов +- После возрождения у тебя есть **5 секунд защиты** +- Боевая метка длится **15 секунд** -- выход из игры с меткой стоит дополнительной силы +- Огонь по своим **отключён** между участниками фракции и союзниками по умолчанию + +>[!WARNING] Выход из игры с боевой меткой приводит к дополнительной потере силы (1.0 за выход). Оставайся и сражайся или сначала убеги. + +## Общение + +- Используй `/f c` для переключения режимов чата, чтобы разговоры фракции оставались приватными +- Приглашай проверенных игроков с помощью `/f invite ` -- приглашения истекают через **5 минут** +- Заключай союзы с помощью `/f ally ` для взаимной защиты и видимости на карте +- Проверяй `/f relations`, чтобы видеть полный дипломатический статус + +## Экономика + +>[!TIP] Если на сервере включена экономика, у твоей фракции может быть казна. Участники могут вносить средства, но только Офицеры и Лидеры могут снимать или переводить деньги. + +- Вноси средства через меню казны, чтобы укрепить свою фракцию +- Более богатая фракция может позволить себе больше захватов и быстрее восстанавливаться после неудач + +## Общее + +- Набери `/f` в любой момент, чтобы открыть панель фракции -- всё доступно оттуда +- Повышай активных участников до Офицера, чтобы они помогали захватывать и управлять территорией +- Поддерживай фракцию активной -- сила восстанавливается только когда игроки **онлайн** diff --git a/src/main/resources/Server/Languages/ru-RU/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/ru-RU/help/welcome/what_are_factions.md new file mode 100644 index 00000000..e48e76d2 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Что такое фракции? + +Фракции -- это команды игроков, которые захватывают территории, строят базы и соревнуются за господство. Когда ты вступаешь или создаёшь фракцию, ты получаешь доступ к защищённой земле, общему дому, приватному чату и дипломатическим инструментам. + +>[!TIP] Фракции -- это прежде всего командная игра. Чем больше активных участников, тем сильнее твоя фракция. + +--- + +## Основные механики + +| Механика | Что она делает | +|----------|---------------| +| Сила | Каждый игрок генерирует силу со временем (макс. 20). Общая сила фракции определяет, сколько земли можно удерживать. | +| Захваты | Захваченные чанки защищены -- только участники могут строить, ломать или открывать контейнеры внутри них. Каждый захват стоит 2.0 силы на содержание. | +| Отношения | Фракции могут заключать союзы для взаимной защиты или объявлять врагов для включения PvP и территориальной агрессии. | +| Роли | Три ранга -- Лидер, Офицер, Участник -- каждый с разными возможностями. | + +--- + +## Как работает мощь + +Сила твоей фракции зависит от её участников. Каждый игрок начинает с 10 силы и восстанавливает до 20, пока онлайн. Смерть отнимает силу. Если общая сила фракции упадёт ниже стоимости захватов, враги смогут перезахватить твою территорию. + +>[!WARNING] Одна смерть стоит 1.0 силы. Несколько смертей за короткое время могут сделать твою фракцию уязвимой для перезахвата. + +--- + +## Дипломатия в двух словах + +- **Союзники** -- Взаимные соглашения, которые предотвращают огонь по своим и защищают территории друг друга +- **Враги** -- Односторонние объявления, которые включают PvP на территории друг друга и позволяют перезахват +- **Нейтралы** -- Состояние по умолчанию между всеми фракциями со стандартными правилами + +>[!INFO] Всем этим можно управлять через игровое меню, набрав `/f`, или через команды чата. diff --git a/src/main/resources/Server/Languages/ru-RU/help/your_faction/creating.md b/src/main/resources/Server/Languages/ru-RU/help/your_faction/creating.md new file mode 100644 index 00000000..37ec9728 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Создание фракции + +Создание собственной фракции делает тебя Лидером с полным контролем над настройками, участниками и территорией. + +--- + +## Как создать + +`/f create ` + +Это создаёт твою фракцию и сразу открывает Панель фракции, где ты можешь начать приглашать участников, захватывать землю и настраивать параметры. + +## Правила названия + +| Правило | Требование | +|---------|------------| +| Длина | От 3 до 24 символов | +| Символы | Только буквы, цифры и пробелы | +| Уникальность | Две фракции не могут иметь одинаковое название | + +>[!WARNING] Выбирай название тщательно. Переименование позже требует прав Лидера и может иметь кулдаун. + +--- + +## Что происходит при создании + +- Ты становишься Лидером (высший ранг) +- Твоя фракция начинает с 0 захватов и твоей личной силой (10 по умолчанию) +- Панель фракции открывается автоматически +- Ты можешь сразу приглашать игроков, захватывать территорию и устанавливать дом фракции + +>[!INFO] Если на сервере включена интеграция экономики, создание фракции может стоить денег. Стоимость создания устанавливается администратором сервера. + +>[!TIP] После создания твои первые приоритеты: пригласить друзей, найти место для базы и захватить его. diff --git a/src/main/resources/Server/Languages/ru-RU/help/your_faction/joining.md b/src/main/resources/Server/Languages/ru-RU/help/your_faction/joining.md new file mode 100644 index 00000000..0b237780 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Вступление во фракцию + +Есть три способа вступить в существующую фракцию, в зависимости от её настроек. + +--- + +## Сравнение способов + +| Способ | Как | Требуется | +|--------|-----|-----------| +| Обзор и вступление | Открой /f, нажми "Обзор", нажми "Вступить" | Фракция открыта | +| Принять приглашение | Проверь вкладку "Приглашения" в меню /f | Активное приглашение | +| Запрос на вступление | Используй /f request, жди одобрения | Одобрение Офицера или Лидера | + +--- + +## Подробности о приглашениях + +- Приглашения отправляются Офицерами или Лидерами +- Приглашения истекают через 5 минут -- принимай быстро +- Просмотри ожидающие приглашения во вкладке "Приглашения" в меню фракции +- Прими через меню или командой /f accept + +## Запросы на вступление + +- Используй /f request, чтобы запросить членство в закрытой фракции +- Запросы истекают через 24 часа, если по ним не приняты меры +- Офицеры и Лидеры могут одобрить или отклонить запросы из панели фракции + +>[!TIP] Не уверен, к какой фракции присоединиться? Используй вкладку "Обзор" в /f, чтобы увидеть описания фракций, количество участников и открыты ли они для вступления. + +>[!NOTE] Каждая фракция может вмещать до 50 участников по умолчанию. Если фракция полна, придётся подождать, пока освободится место. diff --git a/src/main/resources/Server/Languages/ru-RU/help/your_faction/managing.md b/src/main/resources/Server/Languages/ru-RU/help/your_faction/managing.md new file mode 100644 index 00000000..390b75e5 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Управление участниками + +Офицеры и Лидеры совместно отвечают за управление составом фракции. Вот основные команды и кто может их использовать. + +--- + +## Команды + +| Команда | Что делает | Необходимая роль | +|---------|-----------|-----------------| +| `/f invite ` | Отправляет приглашение (истекает через 5 мин) | Офицер+ | +| `/f kick ` | Исключает участника из фракции | Офицер+ (см. примечание) | +| `/f promote ` | Повышает Участника до Офицера | Только Лидер | +| `/f demote ` | Понижает Офицера до Участника | Только Лидер | +| `/f transfer ` | Передаёт владение фракцией | Только Лидер | + +>[!NOTE] Офицеры могут исключать только Участников. Чтобы исключить другого Офицера, Лидер должен сначала понизить его или исключить напрямую. + +--- + +## Приглашения + +- Приглашения истекают через 5 минут, если не приняты +- Приглашённый игрок видит приглашение во вкладке "Приглашения" при открытии /f +- Количество одновременных приглашений не ограничено +- Фракция может вмещать до 50 участников + +## Повышения и понижения + +- Только Лидер может повышать или понижать +- /f promote повышает Участника до Офицера +- /f demote понижает Офицера до Участника + +## Передача лидерства + +>[!WARNING] Передача лидерства необратима. Ты будешь понижен до Офицера, а выбранный игрок станет новым Лидером. Убедись, что полностью ему доверяешь. + +`/f transfer ` + +Целевой игрок должен быть текущим участником твоей фракции. diff --git a/src/main/resources/Server/Languages/ru-RU/help/your_faction/roles.md b/src/main/resources/Server/Languages/ru-RU/help/your_faction/roles.md new file mode 100644 index 00000000..cf2b7b9f --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Роли и ранги + +В каждой фракции есть три роли в строгой иерархии. Более высокие роли наследуют все возможности нижестоящих. + +--- + +## Таблица прав + +| Действие | Лидер | Офицер | Участник | +|----------|-------|--------|----------| +| Строить на территории | Да | Да | Да | +| Использовать дом фракции | Да | Да | Да | +| Чат фракции и союзников | Да | Да | Да | +| Приглашать игроков | Да | Да | Нет | +| Исключать участников | Да | Да (только Участников) | Нет | +| Захватывать / освобождать землю | Да | Да | Нет | +| Перезахватывать вражескую территорию | Да | Да | Нет | +| Устанавливать дом фракции | Да | Да | Нет | +| Удалять дом фракции | Да | Да | Нет | +| Управлять отношениями (союз/враг) | Да | Да | Нет | +| Просматривать логи фракции | Да | Да | Нет | +| Повышать до Офицера | Да | Нет | Нет | +| Понижать из Офицера | Да | Нет | Нет | +| Переименовывать фракцию | Да | Нет | Нет | +| Задавать описание / тег / цвет | Да | Нет | Нет | +| Открывать / закрывать фракцию | Да | Нет | Нет | +| Доступ к настройкам фракции | Да | Нет | Нет | +| Передавать лидерство | Да | Нет | Нет | +| Расформировать фракцию | Да | Нет | Нет | + +>[!NOTE] Офицеры могут исключать Участников, но не других Офицеров. Только Лидер может исключать Офицеров. + +--- + +## Описание ролей + +- Лидер -- Один на фракцию. Имеет полный контроль над настройками, участниками и территорией. Может передать владение другому участнику. +- Офицер -- Доверенные участники, помогающие управлять фракцией. Могут приглашать, исключать участников, захватывать землю и вести дипломатию. +- Участник -- Роль по умолчанию при вступлении. Может строить на территории, использовать дом фракции и участвовать в чате фракции. + +>[!TIP] Повышай самых активных и надёжных участников до Офицера, чтобы они помогали управлять территорией и набирать новых игроков. diff --git a/src/main/resources/Server/Languages/ru-RU/hyperfactions.lang b/src/main/resources/Server/Languages/ru-RU/hyperfactions.lang new file mode 100644 index 00000000..8c78ced0 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Russian Translations +# Format: key = value (or key = "quoted value") +# Note: Keys are auto-prefixed with "hyperfactions." by Hytale's I18nModule +# Placeholders: {0}, {1}, etc. + +# ========== Общее ========== +common.no_permission = У вас нет прав на это действие. +common.not_in_faction = Вы не состоите во фракции. +common.already_in_faction = Вы уже состоите во фракции. +common.player_not_found = Игрок не найден. +common.faction_not_found = Фракция не найдена. +common.player_not_online = Этот игрок не в сети. +common.must_be_leader = Только Лидер фракции может это сделать. +common.must_be_officer = Вы должны быть Офицером или Лидером для этого действия. +common.combat_tagged = Вы не можете сделать это во время боя. +common.cancel = Отмена +common.confirm = Подтвердить +common.save = Сохранить +common.close = Закрыть +common.clear = Очистить +common.back = Назад +common.leave = Покинуть +common.transfer = Передать +common.disband = Распустить +common.world_fallback = мир +common.yes = Да +common.no = Нет +common.loading = Загрузка... +common.online = В сети +common.offline = Не в сети +common.enabled = Включено +common.disabled = Отключено +common.none = Нет +common.page = Страница {0} из {1} +common.unknown = Неизвестно +common.error_generic = Произошла ошибка. Пожалуйста, попробуйте ещё раз. +common.gui_fallback = Не удалось открыть интерфейс. Используйте /f help для списка команд. +common.admin_prefix = [Admin] +common.location_error = Не удалось определить ваше местоположение. +common.world_error = Не удалось определить ваш мир. +common.invalid_id = Недопустимый ID фракции. +common.na = Н/Д + +# ========== Команды - Создание ========== +cmd.create.no_permission = У вас нет прав на создание фракций. +cmd.create.usage = Использование: /f create <название> +cmd.create.success = Фракция '{0}' создана! +cmd.create.already_in_named = Вы уже состоите в {0}. +cmd.create.use_leave_first = Сначала используйте /f leave, если хотите создать новую фракцию. +cmd.create.name_taken = Это название фракции уже занято. +cmd.create.name_too_short = Название фракции слишком короткое. +cmd.create.name_too_long = Название фракции слишком длинное. +cmd.create.failed = Не удалось создать фракцию. + +# ========== Команды - Роспуск ========== +cmd.disband.no_permission = У вас нет прав на роспуск фракций. +cmd.disband.not_leader = Только Лидер фракции может её распустить. +cmd.disband.confirm_prompt = Вы уверены, что хотите распустить свою фракцию? +cmd.disband.confirm_instruction = Введите /f disband --text ещё раз в течение {0} секунд для подтверждения. +cmd.disband.success = Ваша фракция была распущена. +cmd.disband.failed = Не удалось распустить фракцию. +cmd.disband.cancelled = Предыдущее подтверждение отменено. Введите снова для подтверждения роспуска. + +# ========== Команды - Переименование ========== +cmd.rename.no_permission = У вас нет прав. +cmd.rename.not_leader = Только Лидер может переименовать фракцию. +cmd.rename.usage = Использование: /f rename <название> +cmd.rename.too_short = Название слишком короткое (мин. {0} символов). +cmd.rename.too_long = Название слишком длинное (макс. {0} символов). +cmd.rename.name_taken = Это название уже занято. +cmd.rename.success = Фракция переименована в {0}! +cmd.rename.broadcast = {0} переименовал(а) фракцию в {1} + +# ========== Команды - Описание ========== +cmd.desc.no_permission = У вас нет прав. +cmd.desc.not_officer = Вы должны быть Офицером, чтобы задать описание. +cmd.desc.set = Описание фракции установлено! +cmd.desc.cleared = Описание фракции очищено. + +# ========== Команды - Открыть / Закрыть ========== +cmd.open.no_permission = У вас нет прав. +cmd.open.not_leader = Только Лидер может изменить эту настройку. +cmd.open.already_open = Ваша фракция уже открыта. +cmd.open.success = Ваша фракция теперь открыта! Любой может вступить командой /f join. +cmd.open.broadcast = {0} открыл(а) фракцию для свободного вступления. +cmd.close.no_permission = У вас нет прав. +cmd.close.not_leader = Только Лидер может изменить эту настройку. +cmd.close.already_closed = Ваша фракция уже закрыта. +cmd.close.success = Ваша фракция теперь доступна только по приглашению. +cmd.close.broadcast = {0} закрыл(а) фракцию (только по приглашению). + +# ========== Команды - Цвет ========== +cmd.color.no_permission = У вас нет прав. +cmd.color.not_officer = Вы должны быть Офицером, чтобы изменить цвет. +cmd.color.colors_disabled = Цвета фракций отключены. +cmd.color.usage = Использование: /f color <код|#hex> +cmd.color.usage_hint = Допустимые коды: 0-9, a-f или #RRGGBB hex +cmd.color.invalid = Недопустимый цвет. Используйте 0-9, a-f или #RRGGBB. +cmd.color.success = Цвет фракции обновлён! + +# ========== Команды - Захват территории ========== +cmd.claim.no_permission = У вас нет прав на захват территории. +cmd.claim.already_yours = Ваша фракция уже владеет этим чанком. +cmd.claim.cannot_claim_ally = Вы не можете захватить территорию союзника. +cmd.claim.already_claimed_hint = Этот чанк захвачен. Используйте /f overclaim, если фракция уязвима для рейда. +cmd.claim.success = Чанк захвачен в {0}, {1}! +cmd.claim.not_officer = Вы должны быть Офицером, чтобы захватывать территорию. +cmd.claim.already_claimed = Этот чанк уже захвачен. +cmd.claim.max_claims = Ваша фракция достигла предела территорий. Получите больше Силы! +cmd.claim.not_adjacent = Вы можете захватывать только территории, смежные с вашими. +cmd.claim.world_not_allowed = Захват территории в этом мире запрещён. +cmd.claim.orbisguard = Эта область защищена OrbisGuard. +cmd.claim.zone_protected = Этот чанк находится в SafeZone или WarZone. +cmd.claim.insufficient_power = У вашей фракции недостаточно Силы для захвата новых территорий. +cmd.claim.failed = Не удалось захватить чанк. + +# ========== Команды - Приглашение ========== +cmd.invite.no_permission = У вас нет прав приглашать игроков. +cmd.invite.not_officer = Вы должны быть Офицером, чтобы приглашать игроков. +cmd.invite.usage = Использование: /f invite <игрок> +cmd.invite.player_not_found = Игрок '{0}' не найден или не в сети. +cmd.invite.target_in_faction = Этот игрок уже состоит во фракции. +cmd.invite.sent = Приглашение отправлено {0} в вашу фракцию. +cmd.invite.received = Вы получили приглашение вступить в {0}! +cmd.invite.accept_hint = Введите /f accept {0}, чтобы вступить. + +# ========== Команды - Принять / Вступить ========== +cmd.join.no_permission = У вас нет прав на вступление во фракции. +cmd.join.already_in_named = Вы уже состоите в {0}. +cmd.join.use_leave_hint = Сначала используйте /f leave, если хотите вступить в другую фракцию. +cmd.join.no_invites = У вас нет ожидающих приглашений. +cmd.join.faction_not_found = Фракция '{0}' не найдена. +cmd.join.not_invited = У вас нет приглашения от этой фракции. +cmd.join.faction_gone = Эта фракция больше не существует. +cmd.join.success = Вы вступили в {0}! +cmd.join.broadcast = {0} вступил(а) во фракцию! +cmd.join.faction_full = Эта фракция заполнена. +cmd.join.failed = Не удалось вступить во фракцию. + +# ========== Команды - Исключение ========== +cmd.kick.no_permission = У вас нет прав исключать участников. +cmd.kick.usage = Использование: /f kick <игрок> +cmd.kick.not_in_your_faction = Игрок '{0}' не состоит в вашей фракции. +cmd.kick.success = {0} исключён(а) из фракции. +cmd.kick.broadcast = {0} был(а) исключён(а) из фракции. +cmd.kick.kicked = Вы были исключены из фракции. +cmd.kick.cannot_kick_higher = У вас нет прав исключить этого игрока. +cmd.kick.cannot_kick_leader = Вы не можете исключить Лидера фракции. +cmd.kick.failed = Не удалось исключить игрока. + +# ========== Команды - Покинуть ========== +cmd.leave.no_permission = У вас нет прав покидать фракции. +cmd.leave.confirm_prompt = Вы уверены, что хотите покинуть свою фракцию? +cmd.leave.confirm_instruction = Введите /f leave --text ещё раз в течение {0} секунд для подтверждения. +cmd.leave.success = Вы покинули свою фракцию. +cmd.leave.broadcast = {0} покинул(а) фракцию. +cmd.leave.failed = Не удалось покинуть фракцию. +cmd.leave.cancelled = Предыдущее подтверждение отменено. Введите снова для подтверждения выхода. + +# ========== Команды - Повышение / Понижение / Передача ========== +cmd.rank.promote_no_permission = У вас нет прав повышать участников. +cmd.rank.promote_usage = Использование: /f promote <игрок> +cmd.rank.promoted = {0} повышен(а) до {1}! +cmd.rank.promote_broadcast = {0} повышен(а) до {1}! +cmd.rank.already_highest = Дальнейшее повышение невозможно. Используйте /f transfer для смены Лидера. +cmd.rank.promote_failed = Не удалось повысить игрока. +cmd.rank.demote_no_permission = У вас нет прав понижать участников. +cmd.rank.demote_usage = Использование: /f demote <игрок> +cmd.rank.demoted = {0} понижен(а) до {1}. +cmd.rank.demote_broadcast = {0} понижен(а) до {1}. +cmd.rank.already_lowest = Этот игрок уже является Участником. +cmd.rank.demote_failed = Не удалось понизить игрока. +cmd.rank.transfer_no_permission = У вас нет прав на передачу лидерства. +cmd.rank.transfer_usage = Использование: /f transfer <игрок> +cmd.rank.player_not_in_faction = Игрок не найден в вашей фракции. +cmd.rank.transfer_confirm = Вы уверены, что хотите передать лидерство {0}? +cmd.rank.transfer_confirm_instruction = Введите /f transfer {0} --text ещё раз в течение {1} секунд для подтверждения. +cmd.rank.transferred = Лидерство передано {0}! +cmd.rank.transfer_broadcast = {0} теперь Лидер фракции! +cmd.rank.transfer_failed = Не удалось передать лидерство. +cmd.rank.transfer_cancelled = Предыдущее подтверждение отменено. Введите снова для подтверждения передачи. + +# ========== Команды - Отказ от территории ========== +cmd.unclaim.no_permission = У вас нет прав на отказ от территории. +cmd.unclaim.success = Чанк освобождён в {0}, {1}. +cmd.unclaim.not_officer = Вы должны быть Офицером, чтобы освобождать территорию. +cmd.unclaim.chunk_not_claimed = Этот чанк не захвачен. +cmd.unclaim.not_your_claim = Ваша фракция не владеет этим чанком. +cmd.unclaim.cannot_unclaim_home = Нельзя освободить чанк с домом фракции. +cmd.unclaim.would_disconnect = Нельзя освободить — это разъединит вашу территорию. +cmd.unclaim.failed = Не удалось освободить чанк. + +# ========== Команды - Перезахват ========== +cmd.overclaim.no_permission = У вас нет прав на перезахват территории. +cmd.overclaim.success = Вражеская территория перезахвачена! +cmd.overclaim.not_officer = Вы должны быть Офицером для перезахвата. +cmd.overclaim.not_claimed = Этот чанк не захвачен. Используйте /f claim. +cmd.overclaim.own_chunk = Ваша фракция уже владеет этим чанком. +cmd.overclaim.ally = Вы не можете перезахватить территорию союзника. +cmd.overclaim.target_has_power = У этой фракции ещё достаточно Силы. +cmd.overclaim.failed = Не удалось выполнить перезахват. + +# ========== Команды - Застрял ========== +cmd.stuck.no_permission = У вас нет прав использовать /f stuck. +cmd.stuck.not_stuck = Вы не застряли — это дикая местность. +cmd.stuck.combat_tagged = Вы не можете использовать /f stuck во время боя! +cmd.stuck.no_safe = Не удалось найти безопасное место. +cmd.stuck.teleporting = Телепортация в безопасное место через {0} секунд. Не двигайтесь! + +# ========== Команды - Дом ========== +cmd.home.no_permission = У вас нет прав на телепортацию к дому фракции. +cmd.home.no_home = У вашей фракции не установлен дом. +cmd.home.combat_tagged = Вы не можете телепортироваться во время боя! +cmd.home.teleported = Телепортация к дому фракции выполнена! + +# ========== Команды - Установить дом ========== +cmd.sethome.no_permission = У вас нет прав на установку дома фракции. +cmd.sethome.world_not_allowed = Нельзя установить дом в этом мире. +cmd.sethome.not_in_territory = Вы можете установить дом только на территории вашей фракции. +cmd.sethome.set = Дом фракции установлен! +cmd.sethome.broadcast = {0} установил(а) дом фракции. +cmd.sethome.not_officer = Вы должны быть Офицером, чтобы установить дом. +cmd.sethome.failed = Не удалось установить дом. + +# ========== Команды - Удалить дом ========== +cmd.delhome.no_permission = У вас нет прав на удаление дома фракции. +cmd.delhome.no_home = У вашей фракции не установлен дом. +cmd.delhome.deleted = Дом фракции удалён! +cmd.delhome.broadcast = {0} удалил(а) дом фракции. +cmd.delhome.not_officer = Вы должны быть Офицером, чтобы удалить дом. +cmd.delhome.failed = Не удалось удалить дом. + +# ========== Команды - Отношения (Союзник/Враг/Нейтралитет/Отношения) ========== +cmd.relation.ally_no_permission = У вас нет прав на управление союзами. +cmd.relation.ally_usage = Использование: /f ally <фракция> +cmd.relation.ally_sent = Запрос на союз отправлен {0}! +cmd.relation.ally_formed = Вы теперь союзники с {0}! +cmd.relation.already_ally = Вы уже в союзе с этой фракцией. +cmd.relation.ally_failed = Не удалось отправить запрос на союз. +cmd.relation.enemy_no_permission = У вас нет прав объявлять врагов. +cmd.relation.enemy_usage = Использование: /f enemy <фракция> +cmd.relation.enemy_declared = {0} теперь ваш Враг! +cmd.relation.already_enemy = Вы уже враждуете с этой фракцией. +cmd.relation.max_enemies = Вы достигли максимального числа врагов. +cmd.relation.enemy_failed = Не удалось установить вражду. +cmd.relation.neutral_no_permission = У вас нет прав на установку нейтральных отношений. +cmd.relation.neutral_usage = Использование: /f neutral <фракция> +cmd.relation.neutral_set = Ваша фракция теперь нейтральна с {0}. +cmd.relation.already_neutral = Вы уже нейтральны с этой фракцией. +cmd.relation.neutral_failed = Не удалось установить нейтралитет. +cmd.relation.cannot_self = Вы не можете заключить союз с самим собой. +cmd.relation.max_allies = Вы достигли максимального числа союзников. +cmd.relation.view_no_permission = У вас нет прав на просмотр отношений. +cmd.relation.header = === Отношения фракции === +cmd.relation.allies_count = Союзники ({0}): +cmd.relation.enemies_count = Враги ({0}): +cmd.relation.list_entry = - {0} + +# ========== Команды - Чат ========== +cmd.chat.usage = Использование: /f c [f|a|off] +cmd.chat.no_permission = У вас нет прав на этот режим чата. +cmd.chat.mode_set = Режим чата установлен: {0} + +# ========== Команды - Приглашения ========== +cmd.invites.not_officer = Вы должны быть Офицером для управления приглашениями. +cmd.invites.header = === Приглашения фракции === +cmd.invites.no_pending = Нет ожидающих приглашений или заявок. +cmd.invites.outgoing = Исходящие приглашения: +cmd.invites.outgoing_entry = {0} (приглашён(а) {1}) +cmd.invites.requests = Заявки на вступление: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Ваши приглашения === +cmd.invites.no_invites = У вас нет ожидающих приглашений. +cmd.invites.invite_entry = {0} - Используйте /f accept {1} + +# ========== Команды - Заявка ========== +cmd.request.no_permission = У вас нет прав на подачу заявки во фракцию. +cmd.request.already_in_named = Вы уже состоите в {0}. +cmd.request.use_leave_hint = Сначала используйте /f leave, если хотите вступить в другую фракцию. +cmd.request.usage = Использование: /f request <фракция> [сообщение] +cmd.request.faction_open = Эта фракция открыта! Используйте /f accept {0}, чтобы вступить напрямую. +cmd.request.already_requested = Вы уже подали заявку в эту фракцию. +cmd.request.has_invite = Вы приглашены в эту фракцию! Используйте /f accept {0}, чтобы вступить. +cmd.request.sent = Заявка на вступление отправлена в {0}! +cmd.request.your_message = Ваше сообщение: "{0}" +cmd.request.officer_review = Офицер рассмотрит вашу заявку. +cmd.request.officer_notify = {0} подал(а) заявку на вступление в вашу фракцию! +cmd.request.officer_review_hint = Используйте /f gui > Приглашения для просмотра. + +# ========== Команды - Информация ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = У вас нет прав на просмотр информации о фракции. +cmd.info.faction_not_found = Фракция '{0}' не найдена. +cmd.info.not_in_faction_hint = Вы не состоите во фракции. Используйте /f info <фракция> +cmd.info.leader = Лидер: {0} +cmd.info.members = Участники: {0}/{1} +cmd.info.power = Сила: {0} +cmd.info.claims = Территории: {0} +cmd.info.raidable = УЯЗВИМА ДЛЯ РЕЙДА! +cmd.info.allies = Союзники: {0} +cmd.info.enemies = Враги: {0} +cmd.info.they_consider = Они считают вас: {0} +cmd.info.you_consider = Вы считаете их: {0} +cmd.info.members_no_permission = У вас нет прав на просмотр участников фракции. +cmd.info.members_header = === Участники {0} ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = У вас нет прав на просмотр списка фракций. +cmd.info.list_empty = Фракций нет. +cmd.info.list_header = === Фракции ({0}) === +cmd.info.list_entry = {0} - {1} участников, {2} Силы +cmd.info.list_entry_raidable = {0} - {1} участников, {2} Силы [УЯЗВИМА] +cmd.info.help_no_permission = У вас нет прав на просмотр справки. +cmd.info.who_no_permission = У вас нет прав на просмотр информации об игроке. +cmd.info.who_faction = Фракция: {0} +cmd.info.who_role = Роль: {0} +cmd.info.who_joined = Вступил(а): {0} +cmd.info.who_faction_none = Фракция: Нет +cmd.info.who_power = Сила: {0} +cmd.info.who_status = Статус: {0} +cmd.info.who_last_seen = Последний вход: {0} +cmd.info.map_no_permission = У вас нет прав на просмотр карты. +cmd.info.map_header = === Карта территорий === +cmd.info.map_legend = Обозначения: +Вы /Свои /Союзник /Враг -Дикие +cmd.info.map_gui_hint = Используйте /f gui для интерактивной карты + +# ========== Команды - Сила ========== +cmd.power.personal = Личная Сила: {0}/{1} +cmd.power.faction = Сила фракции: {0}/{1} +cmd.power.death_loss = Потеря при смерти: {0} +cmd.power.regen = Скорость восстановления: {0}/час +cmd.power.no_permission = У вас нет прав на просмотр информации о Силе. +cmd.power.header = Сила {0}: +cmd.power.current = Текущая: {0} + +# ========== Команды - Экономика ========== +cmd.economy.balance = Баланс: {0} +cmd.economy.deposited = Внесено {0} в Казну фракции. +cmd.economy.withdrawn = Выведено {0} из Казны фракции. +cmd.economy.transferred = Переведено {0} в {1}. +cmd.economy.insufficient = Недостаточно средств в Казне фракции. +cmd.economy.invalid_amount = Недопустимая сумма: {0} +cmd.economy.economy_disabled = Экономика отключена. +cmd.economy.balance_no_permission = У вас нет прав на просмотр баланса. +cmd.economy.treasury_unavailable = Казна недоступна. +cmd.economy.balance_display = Казна {0}: {1} +cmd.economy.deposit_no_permission = У вас нет прав на внесение средств. +cmd.economy.deposit_faction_denied = У вас нет прав фракции на внесение средств. +cmd.economy.deposit_usage = Использование: /f deposit <сумма> +cmd.economy.amount_positive = Сумма должна быть положительной. +cmd.economy.wallet_insufficient = У вас недостаточно средств. Кошелёк: {0} +cmd.economy.wallet_withdraw_failed = Не удалось списать средства из вашего кошелька. +cmd.economy.deposit_failed = Не удалось внести средства в Казну фракции. Деньги возвращены. +cmd.economy.withdraw_no_permission = У вас нет прав на вывод средств. +cmd.economy.withdraw_faction_denied = У вас нет прав фракции на вывод средств. +cmd.economy.withdraw_usage = Использование: /f withdraw <сумма> +cmd.economy.withdraw_limit_denied = Вывод отклонён: {0} +cmd.economy.wallet_deposit_failed = Внимание: Не удалось зачислить средства в ваш кошелёк. Обратитесь к администратору. +cmd.economy.withdraw_limit_exceeded = Вывод отклонён: превышен лимит. +cmd.economy.withdraw_failed = Ошибка вывода: {0} +cmd.economy.transfer_no_permission = У вас нет прав на перевод. +cmd.economy.transfer_faction_denied = У вас нет прав фракции на перевод. +cmd.economy.transfer_usage = Использование: /f money transfer <фракция> <сумма> +cmd.economy.transfer_self = Нельзя перевести средства своей фракции. +cmd.economy.transfer_limit_denied = Перевод отклонён: {0} +cmd.economy.transfer_limit_exceeded = Перевод отклонён: превышен лимит. +cmd.economy.transfer_failed = Ошибка перевода: {0} +cmd.economy.log_no_permission = У вас нет прав на просмотр журнала транзакций. +cmd.economy.log_header = Журнал транзакций (страница {0}/{1}) +cmd.economy.log_empty = Транзакции не найдены. +cmd.economy.money_help_header = Команды Казны: +cmd.economy.money_help_balance = /f money balance [фракция] - Просмотр баланса +cmd.economy.money_help_deposit = /f money deposit <сумма> - Внести в Казну +cmd.economy.money_help_withdraw = /f money withdraw <сумма> - Вывести из Казны +cmd.economy.money_help_transfer = /f money transfer <фракция> <сумма> - Перевод между фракциями +cmd.economy.money_help_log = /f money log [страница] [тип] - Просмотр истории транзакций + +# ========== Защита - Описания действий ========== +protection.action.generic = Вы не можете этого сделать +protection.action.build = Вы не можете строить или разрушать блоки +protection.action.interact = Вы не можете взаимодействовать с этим +protection.action.door = Вы не можете использовать двери +protection.action.container = Вы не можете открывать контейнеры +protection.action.bench = Вы не можете использовать верстаки +protection.action.processing = Вы не можете использовать перерабатывающие станции +protection.action.seat = Вы не можете использовать сиденья +protection.action.light = Вы не можете переключать свет +protection.action.teleporter = Вы не можете использовать телепортеры +protection.action.crate = Вы не можете использовать ящики +protection.action.tame = Вы не можете приручать существ +protection.action.npc = Вы не можете взаимодействовать с NPC +protection.action.mount = Вы не можете оседлать существ +protection.action.pve = Вы не можете наносить урон существам +protection.action.item_drop = Вы не можете выбрасывать предметы +protection.action.item_pickup = Вы не можете подбирать предметы + +# ========== Защита - Причины отказа ========== +protection.denied.safezone = {0} в SafeZone. +protection.denied.warzone = {0} в WarZone. +protection.denied.enemy_claim = {0} на вражеской территории. +protection.denied.claimed = {0} на захваченной территории. +protection.denied.here = {0} здесь. +protection.denied.zone = {0} в этой зоне. +protection.denied.faction_perm = {0} здесь. (Право фракции: {1}) +protection.denied.ally_territory = {0} здесь. (Территория союзника) +protection.denied.error = Ошибка защиты — действие заблокировано в целях безопасности. + +# ========== Защита - PvP ========== +protection.pvp.safezone = PvP отключено в SafeZone. +protection.pvp.same_faction = Вы не можете атаковать членов своей фракции. +protection.pvp.ally = Вы не можете атаковать союзников. +protection.pvp.spawn_protected = У этого игрока защита после возрождения. +protection.pvp.territory_disabled = PvP отключено на этой территории. +protection.pvp.generic = Вы не можете атаковать этого игрока. + +# ========== Защита - Урон от существ ========== +protection.mob_damage_disabled = Урон от мобов отключён в этой зоне. +protection.pve_damage_disabled = PvE-урон отключён в этой зоне. +protection.pve_territory_denied = Вы не можете наносить урон мобам на этой территории. + +# ========== Защита - Боевая метка ========== +protection.combat_tag_command = Вы не можете использовать эту команду во время боя. + +# ========== Серверные объявления ========== +# Транслируются всем онлайн-игрокам при значимых событиях фракций. +# {0}, {1} = динамические значения (названия фракций, имена игроков) +server_announce.faction_created = {0} основал(а) фракцию {1}! +server_announce.faction_disbanded = Фракция {0} была распущена! +server_announce.leadership_transfer = {0} теперь Лидер фракции {1}! +server_announce.overclaim = {0} перезахватил(а) территорию у {1}! +server_announce.war_declared = {0} объявил(а) войну {1}! +server_announce.alliance_formed = {0} и {1} теперь союзники! +server_announce.alliance_broken = {0} и {1} больше не союзники! + +# ========== Система телепортации ========== +teleport.cooldown_wait = Подождите {0} перед следующей телепортацией. +teleport.warmup_start = Телепортация к дому фракции через {0} секунд... +teleport.combat_cancelled = Телепортация отменена — вы в бою! +teleport.success_default = Телепортация к дому фракции выполнена! +teleport.no_home = У вашей фракции не установлен дом. +teleport.world_not_found = Мир не найден. +teleport.failed = Телепортация не удалась. +teleport.countdown = Телепортация через {0} секунд... +teleport.countdown_one = Телепортация через 1 секунду... +teleport.moved_cancelled = Телепортация отменена — вы двинулись! +teleport.damage_cancelled = Телепортация отменена — вы получили урон! +teleport.mount_teleport_blocked = Вы не можете телепортироваться в эту зону верхом. +teleport.mount_entry_blocked = Вы не можете войти в эту зону верхом. + +# ========== Отображение чата ========== +chat.display.public = Общий +chat.display.faction = Фракция +chat.display.ally = Союзник diff --git a/src/main/resources/Server/Languages/ru-RU/hyperfactions_admin.lang b/src/main/resources/Server/Languages/ru-RU/hyperfactions_admin.lang new file mode 100644 index 00000000..e766a7a1 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Russian Translations +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_admin." by Hytale's I18nModule + +# ========== Навигация панели администратора ========== +nav.dashboard = Обзор +nav.actions = Действия +nav.factions = Фракции +nav.players = Игроки +nav.economy = Экономика +nav.zones = Зоны +nav.config = Конфигурация +nav.backups = Резервные копии +nav.log = Журнал +nav.updates = Обновления +nav.help = Справка +nav.version = Версия + +# ========== Общие метки администратора ========== +common.faction_not_found = Фракция не найдена +common.no_faction = Нет фракции +common.not_set = Не задано +common.on = Вкл +common.off = Выкл +common.enable = Включить +common.disable = Отключить +common.none_paren = (Нет) +common.invalid_faction = Недопустимая фракция. +common.leader_prefix = Лидер: {0} +common.members_suffix = {0} участников +common.claims_suffix = {0} территорий +common.factions_suffix = {0} фракций +common.players_suffix = {0} игроков +common.chunks_suffix = {0} чанков +common.entries_suffix = {0} записей +common.found_suffix = {0} найдено +common.power_format = {0}/{1} Силы +common.raidable = Уязвима для рейда +common.protected = Защищена +common.no_description = Описание не задано. +common.officers_more = +{0} ещё +common.custom_max = (пользовательский макс.) +common.default_max = (макс. по умолчанию) +common.now = Сейчас +common.ago_suffix = {0} назад +common.just_now = только что +common.no_membership_history = Нет истории членства + +# ========== Панель управления администратора ========== +dashboard.factions_prefix = Фракции: {0} +dashboard.members_prefix = Всего участников: {0} +dashboard.claims_prefix = Всего территорий: {0} + +# ========== Действия администратора ========== +actions.confirm_reset = Подтвердить сброс? +actions.confirm_trigger = Подтвердить запуск? +actions.kd_reset = У/С сброшены для {0} игроков. +actions.kd_reset_failed = Не удалось сбросить У/С: {0} +actions.upkeep_unavailable = Обработчик содержания недоступен. +actions.upkeep_triggered = Сбор содержания запущен. +actions.upkeep_failed = Ошибка содержания: {0} + +# ========== Роспуск администратором ========== +disband.faction_gone = Фракция больше не существует. +disband.success = Фракция '{0}' была распущена. +disband.failed = Не удалось распустить: {0} +disband.no_leader = У фракции нет Лидера, роспуск невозможен. + +# ========== Снятие всех территорий администратором ========== +unclaim.removed = [Admin] Удалено {0} территорий у {1}. +unclaim.no_claims = У {0} нет территорий для удаления. + +# ========== Список фракций администратора ========== +factions.home_not_set = Не задано +factions.teleported = Телепортация к дому {0} выполнена. +factions.no_home = У фракции не установлен дом. +factions.world_not_found = Целевой мир не найден. + +# ========== Информация о фракции (администратор) ========== +info.faction_gone = Эта фракция больше не существует. + +# ========== Участники фракции (администратор) ========== +members.sort_role = Роль +members.sort_online = В сети +members.sort_name = Имя +members.sort_power = Сила +members.promoted = [Admin] {0} повышен(а) до {1}. +members.demoted = [Admin] {0} понижен(а) до {1}. +members.kicked = [Admin] {0} исключён(а) из фракции. + +# ========== Отношения фракции (администратор) ========== +relations.allies_header = СОЮЗНИКИ ({0}) +relations.enemies_header = ВРАГИ ({0}) +relations.no_allies = Нет союзников. +relations.no_enemies = Нет врагов. +relations.neutral_count = {0} нейтральных фракций +relations.since_today = С: сегодня +relations.since_one_day = С: 1 день назад +relations.since_days = С: {0} дней назад +relations.set_ally = [Admin] Установлен взаимный союз с {0}. +relations.set_enemy = Установлена взаимная вражда с {0}. +relations.set_neutral = [Admin] Установлен взаимный нейтралитет с {0}. + +# ========== Настройки фракции (администратор) ========== +settings.locked = Этот параметр заблокирован конфигурацией сервера. +settings.perm_toggled = {0} установлено на {1}. +settings.color_changed = Цвет фракции изменён на {0}. +settings.recruitment_set = Набор установлен: {0}. +settings.no_home = [Admin] У этой фракции не установлен дом. +settings.home_cleared = Дом фракции {0} удалён. + +# ========== Метки сортировки ========== +sort.power = Сила +sort.name = Название +sort.members = Участники +sort.balance = Баланс + +# ========== Игроки (администратор) ========== +players.sort_last_online = Последний вход +players.sort_faction = Фракция +players.sort_online = В сети +players.not_online = Игрок не в сети. +players.world_not_found = Целевой мир не найден. +players.teleported = [Admin] Телепортация к {0} выполнена. + +# ========== Информация об игроке (администратор) ========== +playerinfo.disband_faction = Распустить фракцию +playerinfo.kick_leader = Исключить Лидера +playerinfo.enter_valid_number = Введите допустимое число. +playerinfo.enter_valid_positive = Введите допустимое положительное число. +playerinfo.faction_gone = Фракция больше не существует. +playerinfo.kd_reset = У/С сброшены для {0}. +playerinfo.kicked_success = {0} исключён(а) из {1}. +playerinfo.kicked_leader = Лидер {0} исключён. Лидерство передано {1}. +playerinfo.disbanded_kick = [Admin] Фракция '{0}' распущена (исключён последний участник). + +# ========== Экономика (администратор) ========== +economy.no_data = Нет фракций с экономическими данными. +economy.amount_zero = Сумма не может быть нулевой. +economy.enter_amount = Пожалуйста, введите сумму. +economy.invalid_number = Недопустимое число: {0} +economy.error = Произошла ошибка. +economy.balance_negative = Баланс не может быть отрицательным. +economy.failed = Ошибка: {0} +economy.bulk_complete = Массовая корректировка завершена: {0} {1} для {2} фракций. +economy.bulk_failures = ({0} неудачных) + +# ========== Зоны (администратор) ========== +zones.not_found = Зона не найдена. +zones.invalid_id = Недопустимый ID зоны. +zones.deleted = Зона {0} удалена. +zones.delete_failed = Не удалось удалить зону: {0} +zones.no_chunks = Нет чанков +zones.chunks_suffix = {0} ({1} чанков) + +# ========== Мастер создания зон ========== +wizard.enter_name = Пожалуйста, введите название зоны. +wizard.name_too_short = Название зоны должно содержать не менее {0} символов. +wizard.name_too_long = Название зоны не может превышать {0} символов. +wizard.name_taken = Зона с таким названием уже существует. +wizard.radius_range = Радиус должен быть от 1 до {0}. +wizard.create_failed = Не удалось создать зону: {0} +wizard.created_not_found = Зона создана, но не найдена. +wizard.created = Создана {0} '{1}'! +wizard.chunk_claimed = Чанк захвачен ({0}, {1}). +wizard.chunk_failed = Не удалось захватить текущий чанк: {0} +wizard.radius_claimed = Захвачено {0} чанков в радиусе {1} от {2}. +wizard.radius_no_claims = Не удалось захватить чанки (область может быть занята). +wizard.no_claims = Зона создана без территорий. +wizard.chunks_preview = ~{0} чанков + +# ========== Переименование зоны ========== +zone_rename.zone_gone = Зона больше не существует. +zone_rename.enter_name = Пожалуйста, введите название зоны. +zone_rename.too_short = Название зоны должно содержать не менее {0} символов. +zone_rename.too_long = Название зоны не может превышать {0} символов. +zone_rename.same_name = Это уже текущее название зоны. +zone_rename.renamed = [Admin] Зона переименована из {0} в {1}! +zone_rename.name_taken = Зона с таким названием уже существует. +zone_rename.invalid_name = Недопустимое название зоны. +zone_rename.rename_failed = Не удалось переименовать зону: {0} + +# ========== Смена типа зоны ========== +zone_type.zone_gone = Зона больше не существует. +zone_type.changed = [Admin] {0} изменена с {1} на {2} ({3}). +zone_type.failed = Не удалось сменить тип зоны: {0} +zone_type.flags_reset = флаги сброшены +zone_type.flags_kept = флаги сохранены + +# ========== Флаги интеграции зон ========== +zone_int.zone_not_found = Зона не найдена +zone_int.no_plugin = (нет плагина) +zone_int.default = (по умолчанию) +zone_int.custom = (пользовательское) + +# Метки интерфейса флагов интеграции +gui.zint_cat_gravestones = Надгробия +gui.zint_gravestones_desc = Когда ВКЛ, не-владельцы могут обыскивать могилы. Владельцы всегда могут. +gui.zint_cat_world_map = Карта мира +gui.zint_world_map_desc = Переопределить скрытие на карте для игроков в этой зоне. При включении выберите, кто может видеть игроков в этой зоне. +gui.zint_visibility_label = Уровень видимости: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = Сбросить по умолчанию +gui.zint_back_to_flags = Назад к флагам +gui.zint_map_vis_faction = Только фракция +gui.zint_map_vis_ally = Фракция + Союзники +gui.zint_map_vis_all = Все игроки + +# ========== Журнал активности ========== +log.all_types = Все типы +log.no_logs = Нет записей, соответствующих фильтрам. + +# ========== Страница версии ========== +version.active = Активен +version.not_found = Не найден +version.not_detected = Не обнаружен +version.not_installed = Не установлен +version.active_version = Активен (v{0}) +version.active_compatible = Активен (совместим) +version.active_claims_only = Активен (только территории) +version.installed_no_perm = Установлен (нет поставщика прав) +version.active_provider = Активен ({0}) + +# ========== Главная страница администратора ========== +main.reload_hint = Используйте /f reload для перезагрузки конфигурации. +main.unclaim_hint = Используйте /f admin unclaim {0} для освобождения всех {1} чанков. + +# ========== Флаги/Настройки зон ========== +zflags.invalid_flag = Недопустимый флаг. +zflags.zone_not_found = Зона не найдена. +zflags.conflict = (конфликт) +zflags.mixin = (миксин) +zflags.reset_int = Сброс флагов интеграции по умолчанию. +zflags.reset_all = Сброс всех флагов по умолчанию. +zflags.reset_failed = Не удалось сбросить флаги: {0} +zflags.back_to_settings = Назад к настройкам + +# Метки интерфейса настроек зон +gui.zset_cat_combat = Бой +gui.zset_cat_damage = Урон +gui.zset_cat_death = Смерть +gui.zset_cat_building = Строительство +gui.zset_cat_interaction = Взаимодействие +gui.zset_cat_transport = Транспорт +gui.zset_cat_items = Предметы +gui.zset_cat_spawning = Спавн мобов +gui.zset_cat_mob_clear = Очистка мобов +gui.zset_children_hint = (дочерние применяются, только когда родительский ВКЛ) +gui.zset_reset_defaults = Сбросить по умолчанию +gui.zset_integration_flags = Флаги интеграции +gui.zset_back_to_zones = Назад к зонам +gui.zset_chunks = {0} чанков + +# Отображаемые названия флагов зон +gui.zflag_pvp_enabled = PvP включено +gui.zflag_friendly_fire = Дружественный огонь +gui.zflag_friendly_fire_faction = Урон по фракции +gui.zflag_friendly_fire_ally = Урон по союзникам +gui.zflag_projectile_damage = Урон от снарядов +gui.zflag_mob_damage = Получать урон от мобов +gui.zflag_pve_damage = Наносить урон мобам +gui.zflag_fall_damage = Урон от падения +gui.zflag_environmental_damage = Урон от окружения +gui.zflag_explosion_damage = Урон от взрыва +gui.zflag_fire_spread = Распространение огня +gui.zflag_keep_inventory = Сохранение инвентаря +gui.zflag_power_loss = Потеря Силы +gui.zflag_build_allowed = Строительство разрешено +gui.zflag_block_place = Размещение блоков +gui.zflag_hammer_use = Использование молотка +gui.zflag_builder_tools_use = Инструменты строителя +gui.zflag_block_interact = Взаимодействие с блоками +gui.zflag_door_use = Использование дверей +gui.zflag_container_use = Использование контейнеров +gui.zflag_bench_use = Использование верстаков +gui.zflag_processing_use = Использование переработки +gui.zflag_seat_use = Использование сидений +gui.zflag_mount_use = Использование верхового животного +gui.zflag_light_use = Использование освещения +gui.zflag_npc_use = Взаимодействие с NPC +gui.zflag_crate_pickup = Подбор ящиков +gui.zflag_crate_place = Размещение ящиков +gui.zflag_npc_tame = Приручение NPC +gui.zflag_npc_interact = Взаимодействие с NPC +gui.zflag_teleporter_use = Использование телепортеров +gui.zflag_portal_use = Использование порталов +gui.zflag_mount_entry = Посадка верхом +gui.zflag_item_drop = Выброс предметов +gui.zflag_item_pickup = Автоподбор +gui.zflag_item_pickup_manual = Подбор клавишей F +gui.zflag_invincible_items = Неуязвимые предметы +gui.zflag_mob_spawning = Спавн мобов +gui.zflag_hostile_mob_spawning = Враждебные мобы +gui.zflag_passive_mob_spawning = Мирные мобы +gui.zflag_neutral_mob_spawning = Нейтральные мобы +gui.zflag_npc_spawning = Спавн NPC +gui.zflag_mob_clear = Очистка мобов +gui.zflag_hostile_mob_clear = Очистка враждебных мобов +gui.zflag_passive_mob_clear = Очистка мирных мобов +gui.zflag_neutral_mob_clear = Очистка нейтральных мобов +gui.zflag_gravestone_access = Обыск чужих могил +gui.zflag_show_on_map = Показывать на карте +gui.zflag_essentials_homes = Использование домов +gui.zflag_essentials_warps = Использование варпов +gui.zflag_essentials_kits = Получение наборов + +# ========== Свойства зон ========== +zprop.current_custom = Текущее: "{0}" (пользовательское) +zprop.current_default = Текущее: "{0}" (по умолчанию) +zprop.pvp_disabled = PvP отключено +zprop.pvp_enabled = PvP включено +zprop.name_empty = Название не может быть пустым. +zprop.renamed = Зона переименована в "{0}". +zprop.name_taken = Зона с таким названием уже существует. +zprop.name_invalid = Недопустимое название (макс. 32 символа). +zprop.rename_failed = Не удалось переименовать: {0} +zprop.upper_empty = Верхний заголовок не может быть пустым. Используйте «Очистить» для сброса. +zprop.upper_set = Верхний заголовок установлен. +zprop.upper_reset = Верхний заголовок сброшен по умолчанию. +zprop.lower_empty = Нижний заголовок не может быть пустым. Используйте «Очистить» для сброса. +zprop.lower_set = Нижний заголовок установлен. +zprop.lower_reset = Нижний заголовок сброшен по умолчанию. + +# ========== Дополнительные отношения ========== +relations.failed = Ошибка: {0} + +# ========== Дополнительные участники ========== +members.never = Никогда +members.teleported = [Admin] Телепортация к {0} выполнена. + +# ========== Дополнительная информация об игроке ========== +playerinfo.records = {0} записей +playerinfo.joined_date = Вступил(а): {0} +playerinfo.current = Текущая +playerinfo.left_date = Покинул(а): {0} + +# ========== Карта зон ========== +map.world_warning = ВНИМАНИЕ: Вы находитесь в '{0}' — зона в '{1}' +map.position = Ваша позиция: Чанк ({0}, {1}) +map.zone_gone = Зона больше не существует. +map.claimed = Чанк захвачен ({0}, {1}) для {2}. +map.claim_failed = Не удалось захватить чанк: {0} +map.unclaimed = Чанк освобождён ({0}, {1}) у {2}. +map.unclaim_failed = Не удалось освободить чанк: {0} +map.chunk_belongs = Этот чанк принадлежит {0}. +map.chunk_faction = Этот чанк захвачен фракцией. +map.chunk_protected = Этот чанк находится в защищённой области. +map.another_zone = другая зона + +# ========== Ключи меток интерфейса (для локализации текстов .ui) ========== + +# Заголовки страниц +gui.title_dashboard = Панель управления администратора +gui.title_main = Администрирование фракций +gui.title_actions = Админ: Серверные действия +gui.title_factions = Управление фракциями +gui.title_players = Управление игроками +gui.title_economy = Админ: Серверная экономика +gui.title_zones = Управление зонами +gui.title_backups = Резервные копии +gui.title_config = Конфигурация +gui.title_help = Справка администратора +gui.title_updates = Обновления +gui.title_version = Версия и интеграции +gui.title_activity_log = Админ: Журнал активности +gui.title_player_info = Админ: Информация об игроке +gui.title_faction_info = Админ: Информация о фракции +gui.title_faction_settings = Админ: Настройки фракции +gui.title_faction_members = Админ: Участники +gui.title_faction_relations = Админ: Отношения +gui.title_zone_map = Редактор карты зон +gui.title_zone_settings = Админ: Настройки зоны +gui.title_zone_properties = Админ: Свойства зоны +gui.title_bulk_economy = Массовая корректировка Казны +gui.title_economy_adjust = Админ: Экономика + +# Метки панели управления +gui.dash_server_stats = Статистика сервера +gui.dash_factions = Фракции +gui.dash_total_members = Всего участников +gui.dash_total_claims = Всего территорий +gui.dash_zones = Зоны +gui.dash_safe_war = безопасные / военные +gui.dash_total_power = Общая Сила +gui.dash_avg_power = Средн. Сила/Фракция +gui.dash_total_economy = Общая экономика +gui.dash_wealthiest = Богатейшая +gui.dash_avg_balance = Средн. баланс +gui.dash_protection_bypass = Обход защиты: + +# Общие кнопки и метки +gui.search = Поиск: +gui.sort = Сортировка: +gui.prev = < Назад +gui.next = Далее > +gui.back = Назад +gui.done = Готово +gui.cancel = Отмена +gui.apply = Применить +gui.set = Установить +gui.reset = Сбросить +gui.coming_soon = Скоро +gui.zones_btn = Зоны +gui.reload_btn = Перезагрузить +gui.all = Все +gui.safe = Безопасные +gui.war = Военные +gui.create_zone = + Создать + +# Метки страницы действий +gui.act_combat_stats = Боевая статистика +gui.act_combat_desc = Сбросить убийства и смерти для ВСЕХ игроков на сервере. Это действие нельзя отменить. +gui.act_reset_kd = Сбросить все У/С +gui.act_economy = Экономика +gui.act_economy_desc = Добавить или снять средства со ВСЕХ казначейств фракций сразу. +gui.act_bulk_adjust = Массовое добавление/снятие +gui.act_upkeep_collection = Сбор содержания +gui.act_upkeep_desc = Вручную запустить сбор содержания для всех фракций, независимо от таймера. +gui.act_trigger_upkeep = Запустить содержание + +# Метки заглушек страниц +gui.backup_heading = Управление резервными копиями +gui.backup_desc1 = Создание, восстановление и управление резервными копиями данных фракций. +gui.backup_desc2 = Автоматические копии сохраняются в папку data/backups. +gui.config_heading = Редактор конфигурации +gui.config_desc1 = Настройка параметров HyperFactions прямо из интерфейса. +gui.config_desc2 = Пока используйте /f reload для перезагрузки изменений конфигурации. +gui.help_heading = Документация администратора +gui.help_desc1 = Просмотр документации и справочника команд. +gui.help_desc2 = Для помощи посетите вики HyperFactions. +gui.updates_heading = Центр обновлений +gui.updates_desc1 = Проверка новых версий и просмотр списка изменений. +gui.updates_desc2 = Посетите страницу HyperFactions для последних обновлений. + +# Метки страницы версии +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Hytale Server +gui.ver_java = Java +gui.ver_permissions = ПРАВА +gui.ver_placeholders = ПЛЕЙСХОЛДЕРЫ +gui.ver_economy_section = ЭКОНОМИКА +gui.ver_protection = ЗАЩИТА +gui.ver_disabled = Отключено + +# Заголовки столбцов (общие для страниц) +gui.col_faction = Фракция +gui.col_balance = Баланс +gui.col_members = Участники +gui.col_actions = Действия +gui.col_time = Время +gui.col_type = Тип +gui.col_message = Сообщение + +# Метки страницы экономики +gui.econ_total_balance = Общий баланс +gui.econ_factions = Фракции +gui.econ_avg_balance = Средн. баланс +gui.econ_in_grace = В льготном периоде +gui.econ_collected = Собрано (24 ч) +gui.econ_next_collection = Следующий сбор +gui.econ_no_data = Нет фракций с экономическими данными. + +# Метки журнала активности +gui.log_type = Тип: +gui.log_time = Время: +gui.log_player = Игрок: +gui.log_no_logs = Нет записей, соответствующих фильтрам. + +# Метки информации об игроке +gui.plr_first_joined = Первый вход: +gui.plr_last_online = Последний вход: +gui.plr_uuid = UUID: +gui.plr_faction = Фракция: +gui.plr_role = Роль: +gui.plr_view_faction = Открыть фракцию +gui.plr_power = Сила +gui.plr_max_power = Макс. Сила +gui.plr_set_power = Установить +gui.plr_reset_power = Сбросить +gui.plr_set_max = Установить +gui.plr_reset_max = Сбросить +gui.plr_no_power_loss = Без потери Силы +gui.plr_no_claim_decay = Без распада территорий +gui.plr_kills = Убийства +gui.plr_deaths = Смерти +gui.plr_kdr = Соотношение У/С +gui.plr_reset_kd = Сбросить У/С +gui.plr_kick = Исключить +gui.plr_membership_history = История членства +gui.plr_no_faction_label = Не состоит во фракции +gui.plr_power_management = Управление Силой +gui.plr_combat_stats = Боевая статистика +gui.plr_bypass_flags = Флаги обхода +gui.plr_admin_controls = Управление администратора +gui.plr_kd_subtitle = У / С +gui.plr_max_prefix = Макс.: +gui.plr_view = Просмотр +gui.plr_kick_from_faction = Исключить из фракции +gui.plr_set_max_btn = Установить макс. +gui.plr_combat = Бой +gui.plr_reason_active = АКТИВЕН +gui.plr_reason_left = ПОКИНУЛ +gui.plr_reason_kicked = ИСКЛЮЧЁН +gui.plr_reason_disbanded = РАСПУЩЕНА + +# Метки записи участника +gui.mem_label_power = Сила: +gui.mem_label_joined = Вступил(а): +gui.mem_label_last_death = Последняя смерть: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Инфо +gui.mem_btn_teleport = Телепорт +gui.mem_btn_promote = Повысить +gui.mem_btn_demote = Понизить +gui.mem_btn_kick = Исключить +gui.econ_not_enabled = Система экономики не включена. +gui.info_more = +{0} ещё +gui.log_time_1h = 1 ч. +gui.log_time_24h = 24 ч. +gui.log_time_7d = 7 д. +gui.log_time_all = Все +gui.shape_circular = круглая +gui.shape_square = квадратная +gui.nav_title = Панель администратора +gui.econ_btn_adjust = Корректировать +gui.econ_btn_info = Инфо + +# Метки информации о фракции +gui.fac_description = Описание +gui.fac_power = Сила +gui.fac_claims = Территории +gui.fac_members = Участники +gui.fac_recruitment = Набор +gui.fac_founded = Основана +gui.fac_allies = Союзники +gui.fac_enemies = Враги +gui.fac_raidable = Уязвимость для рейда +gui.fac_treasury = Казна +gui.fac_leader = Лидер +gui.fac_officers = Офицеры +gui.fac_view_members = Просмотр участников +gui.fac_view_relations = Просмотр отношений +gui.fac_view_settings = Настройки +gui.fac_disband = Распустить фракцию +gui.fac_power_management = Управление Силой +gui.fac_reset_all_power = Сбросить Силу всем +gui.fac_econ_adjust = Корректировать баланс +gui.fac_econ_view_log = Просмотр журнала транзакций +gui.fac_current_max = текущая / макс. +gui.fac_claimed_max = занято / макс. +gui.fac_relations = Отношения +gui.fac_ally_enemy = союзники / враги +gui.fac_status = Статус +gui.fac_info = Инфо +gui.fac_treasury_balance = баланс Казны +gui.fac_leadership = Руководство +gui.fac_leader_label = Лидер: +gui.fac_officers_label = Офицеры: +gui.fac_econ_mgmt = Управление экономикой +gui.fac_danger_zone = Опасная зона +gui.fac_view_treasury = Открыть Казну + +# Метки настроек фракции +gui.set_editing = Редактирование: +gui.set_general = Общие настройки +gui.set_name = Название +gui.set_tag = Тег +gui.set_description = Описание +gui.set_recruitment = Набор +gui.set_home = Расположение дома +gui.set_clear_home = Удалить дом +gui.set_disband_faction = Распустить фракцию +gui.set_faction_color = Цвет фракции +gui.set_admin_override = [Переопределение администратора] +gui.set_territory_perms = Права на территории +gui.set_mob_spawning = Спавн мобов +gui.set_faction_settings = Настройки фракции +gui.set_name_label = Название: +gui.set_tag_label = Тег: +gui.set_desc_label = Описание: +gui.set_edit = Изменить +gui.set_status_label = Статус: +gui.set_location_label = Координаты: +gui.set_danger_zone = Опасная зона +gui.set_irreversible = Это действие необратимо. +gui.set_lock_hint = Некоторые параметры могут быть заблокированы сервером и не примут изменения. +gui.set_appearance = Внешний вид +gui.set_color_label = Цвет: +gui.set_mob_sub = (дочерние отключены, когда основной выключен) +gui.set_back_to_info = Назад к информации +gui.set_col_out = Чужие +gui.set_col_ally = Союзн. +gui.set_col_mem = Участн. +gui.set_col_off = Офиц. +gui.set_cat_building = СТРОИТЕЛЬСТВО +gui.set_cat_interaction = ВЗАИМОДЕЙСТВИЕ +gui.set_cat_interact_sub = (дочерние отключены, когда «Все» выключено) +gui.set_cat_other = ПРОЧЕЕ +gui.set_perm_break = Разрушение +gui.set_perm_place = Размещение +gui.set_perm_all = Все +gui.set_perm_door = Двери +gui.set_perm_chest = Сундуки +gui.set_perm_bench = Верстаки +gui.set_perm_processing = Переработка +gui.set_perm_seat = Сиденья +gui.set_perm_transport = Транспорт +gui.set_perm_crate_use = Ящики +gui.set_perm_npc_tame = Приручение NPC +gui.set_perm_pve_damage = PvE-урон +gui.set_perm_mob_spawning = Спавн мобов +gui.set_perm_hostile = Враждебные мобы +gui.set_perm_passive = Мирные мобы +gui.set_perm_neutral = Нейтральные мобы +gui.set_perm_pvp = PvP на территории +gui.set_perm_officers_edit = Офицеры могут редактировать + +# Метки отношений фракции +gui.rel_subtitle = Управление отношениями фракции (в обход утверждения) +gui.rel_set_new = Установить новое отношение +gui.rel_btn_ally = Союзник +gui.rel_btn_neutral = Нейтралитет +gui.rel_btn_enemy = Враг + +# Метки страницы зон +gui.zone_sort_name = Название +gui.zone_sort_type = Тип +gui.zone_sort_chunks = Чанки +gui.zone_sort_world = Мир +gui.zone_count_format = {0} {1}зон ({2} чанков) + +# Метки карты зон +gui.map_zone_chunk = Чанк зоны +gui.map_empty = Пусто +gui.map_other_zone = Другая зона +gui.map_faction_claim = Территория фракции +gui.map_protected = Защищённый +gui.map_your_pos = Ваша позиция +gui.map_click_hint = Нажмите для захвата/освобождения чанков +gui.map_legend_zone_safe = Эта зона (Безопасная) +gui.map_legend_zone_war = Эта зона (Военная) +gui.map_legend_other_safe = Другая SafeZone +gui.map_legend_other_war = Другая WarZone +gui.map_legend_faction = Территория фракции +gui.map_legend_unclaimed = Свободный +gui.map_legend_you_here = Вы здесь +gui.map_action_hint = ЛКМ: Захватить для зоны | ПКМ: Освободить из зоны +gui.map_done = Готово + +# Метки свойств зон +gui.zprop_general = Общие +gui.zprop_zone_name = Название зоны +gui.zprop_zone_type = Тип зоны +gui.zprop_change_type = Сменить тип +gui.zprop_notifications = Уведомления +gui.zprop_show_entry = Показывать уведомление при входе +gui.zprop_upper_title = Верхний заголовок +gui.zprop_upper_desc = Верхний заголовок (мелкий текст над названием зоны) +gui.zprop_lower_title = Нижний заголовок +gui.zprop_lower_desc = Нижний заголовок (крупный текст с названием зоны) +gui.zprop_edit_flags = Редактировать флаги +gui.zprop_back_to_zones = Назад к зонам +gui.save = Сохранить +gui.clear = Очистить + +# Метки массовой экономики +gui.bulk_header = Корректировка всех казначейств фракций +gui.bulk_factions_label = Фракции: +gui.bulk_total_label = Общий баланс: +gui.bulk_amount_hint = Сумма (положительная для добавления, отрицательная для снятия): +gui.bulk_hint = Это будет применено к каждой фракции с Казной +gui.bulk_warning_msg = Внимание: Это действие затрагивает ВСЕ фракции и не может быть отменено. +gui.bulk_apply_all = Применить ко всем +gui.bulk_operation = Операция +gui.bulk_add = Добавить +gui.bulk_remove = Снять +gui.bulk_amount = Сумма +gui.bulk_warning = Это затронет ВСЕ казначейства фракций. +gui.bulk_preview = Предпросмотр + +# Метки корректировки экономики +gui.ecadj_header = Корректировка баланса Казны +gui.ecadj_faction_label = Фракция: +gui.ecadj_current_balance = Текущий баланс: +gui.ecadj_amount_hint = Сумма (положительная для добавления, отрицательная для списания): +gui.ecadj_preview_hint = Введите число для предпросмотра изменения +gui.ecadj_adjustment = Корректировка: +gui.ecadj_set_balance = Установить баланс +gui.ecadj_confirm = Подтвердить +/- +gui.ecadj_operation = Операция +gui.ecadj_add = Добавить +gui.ecadj_remove = Снять +gui.ecadj_set_to = Установить на +gui.ecadj_amount = Сумма +gui.ecadj_new_balance = Новый баланс: + +# Метки интеграций на странице версии +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Native +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Gravestones +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Казна + +# Метки окна подтверждения снятия всех территорий +gui.unclaim_title = Снять все территории +gui.unclaim_confirm_msg1 = Вы уверены, что хотите освободить все +gui.unclaim_confirm_msg2 = у +gui.unclaim_warning = Это действие нельзя отменить! +gui.unclaim_all = Освободить все + +# Метки окна переименования зоны +gui.zren_title = Переименовать зону +gui.zren_current = Текущее: +gui.zren_new_name = Новое название: + +# Метки окна смены типа зоны +gui.ztype_title = Сменить тип зоны +gui.ztype_zone_label = Зона: +gui.ztype_current = Текущий: +gui.ztype_will_become = станет +gui.ztype_new = Новый: +gui.ztype_warning1 = Разные типы зон имеют разные значения флагов по умолчанию. +gui.ztype_warning2 = Выберите, как обработать существующие настройки флагов: +gui.ztype_keep_desc = Сохранить пользовательские переопределения +gui.ztype_keep_flags = Сохранить флаги +gui.ztype_reset_desc = Использовать значения нового типа по умолчанию +gui.ztype_reset_flags = Сбросить флаги + +# Метки мастера создания зон +gui.czw_title = Создать зону +gui.czw_back = < Назад +gui.czw_create = Создать зону +gui.czw_zone_type = Тип зоны +gui.czw_safe_desc = Защищённая, без PvP +gui.czw_war_desc = Боевая, PvP включено +gui.czw_zone_name = Название зоны +gui.czw_name_desc = Введите уникальное название для зоны +gui.czw_claim_method = Метод захвата +gui.czw_method_none_desc = Создать пустую зону +gui.czw_method_none = Без территорий +gui.czw_method_single_desc = Ваш текущий чанк +gui.czw_method_single = Один чанк +gui.czw_method_circle_desc = Круглая область +gui.czw_method_circle = Круговой радиус +gui.czw_method_square_desc = Квадратная область +gui.czw_method_square = Квадратный радиус +gui.czw_method_map_desc = Интерактивный редактор чанков +gui.czw_method_map = Использовать карту +gui.czw_radius = Радиус +gui.czw_custom_radius = Произвольный (1-50): +gui.czw_flags = Флаги +gui.czw_flags_defaults_desc = На основе типа зоны +gui.czw_flags_defaults = По умолчанию +gui.czw_flags_customize_desc = Открыть настройки после +gui.czw_flags_customize = Настроить + +# ========== Метки записей (списки фракций/игроков/зон) ========== + +# Метки записи фракции +gui.fac_entry_power = Сила +gui.fac_entry_claims = территории +gui.fac_entry_members = участники +gui.fac_entry_created = Создана: +gui.fac_entry_home = Дом: +gui.fac_entry_tp_home = ТП к дому +gui.fac_entry_view_info = Подробнее +gui.fac_entry_members_btn = Участники +gui.fac_entry_settings = Настройки +gui.fac_entry_unclaim_all = Освободить все +gui.fac_entry_disband = Распустить + +# Метки записи игрока +gui.plr_entry_role = Роль: +gui.plr_entry_joined = Вступил(а): +gui.plr_entry_last_online = Последний вход: +gui.plr_entry_kdr = У/С/Р: +gui.plr_entry_power = Сила: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Инфо +gui.plr_entry_teleport = Телепорт +gui.plr_entry_na = Н/Д +gui.plr_entry_unknown = Неизвестно +gui.plr_entry_ago = {0} назад + +# Метки записи зоны +gui.zone_entry_world = Мир: +gui.zone_entry_chunks = Чанки: +gui.zone_entry_bounds = Границы: +gui.zone_entry_created = Создана: +gui.zone_entry_edit_map = Редактировать карту +gui.zone_entry_flags = Флаги +gui.zone_entry_settings = Настройки +gui.zone_entry_delete = Удалить diff --git a/src/main/resources/Server/Languages/ru-RU/hyperfactions_gui.lang b/src/main/resources/Server/Languages/ru-RU/hyperfactions_gui.lang new file mode 100644 index 00000000..fbb48362 --- /dev/null +++ b/src/main/resources/Server/Languages/ru-RU/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Russian Translations +# Format: key = value +# Note: Keys are auto-prefixed with "hyperfactions_gui." by Hytale's I18nModule + +# ========== Панель навигации ========== +nav.dashboard = Обзор +nav.chat = Чат +nav.members = Участники +nav.invites = Приглашения +nav.browser = Обзор фракций +nav.map = Карта +nav.leaderboard = Рейтинг +nav.relations = Отношения +nav.treasury = Казна +nav.settings = Настройки +nav.logs = Журнал +nav.help = Справка +nav.admin = Админ +nav.create = Создать + +# ========== Названия категорий справки ========== +help.category.welcome = Добро пожаловать +help.category.your_faction = Ваша фракция +help.category.power_land = Сила и территория +help.category.diplomacy = Дипломатия +help.category.combat = Бой и безопасность +help.category.economy = Экономика +help.category.quick_ref = Краткий справочник + +# ========== Названия категорий справки администратора ========== +help.category.admin_overview = Обзор +help.category.admin_factions = Фракции +help.category.admin_zones = Зоны +help.category.admin_power = Сила +help.category.admin_economy = Экономика +help.category.admin_config = Конфигурация +help.category.admin_maintenance = Обслуживание +help.category.admin_reference = Справочник + +# ========== Главное меню ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Моя фракция +main_menu.section_get_started = Начало работы +main_menu.section_territory = Территория +main_menu.section_browse = Обзор +main_menu.section_admin = Админ +main_menu.claim_hint = Используйте /f claim для захвата территории. + +# ========== Страница информации о фракции ========== +faction_info.title = Информация о фракции +faction_info.no_description = Описание не задано. +faction_info.status_open = Открытая +faction_info.status_invite_only = Только по приглашению +faction_info.status_raidable = Уязвима для рейда +faction_info.status_protected = Защищена +faction_info.officers_more = +{0} ещё +faction_info.power_header = Сила +faction_info.claims_header = Территории +faction_info.members_header = Участники +faction_info.relations_header = Отношения +faction_info.status_header = Статус +faction_info.treasury_header = Казна +faction_info.current_max = текущая / макс. +faction_info.claimed_max = занято / макс. +faction_info.ally_enemy = союзники / враги +faction_info.faction_balance = баланс фракции +faction_info.leader_label = Лидер: +faction_info.officers_label = Офицеры: +faction_info.view_members_btn = Участники +faction_info.relations_btn = Отношения +faction_info.back_btn = Назад + +# ========== Окно переименования ========== +rename.title = Переименовать фракцию +rename.current_label = Текущее: +rename.new_name_label = Новое название: +rename.no_permission = У вас нет прав на переименование фракции. +rename.enter_name = Пожалуйста, введите название фракции. +rename.too_short = Название фракции должно содержать не менее {0} символов. +rename.too_long = Название фракции не может превышать {0} символов. +rename.same_name = Это уже текущее название вашей фракции. +rename.name_taken = Фракция с таким названием уже существует. +rename.success = Фракция переименована из {0} в {1}! + +# ========== Окно описания ========== +desc.title = Редактировать описание +desc.current_label = Текущее: +desc.new_desc_label = Новое описание: +desc.no_permission = У вас нет прав на редактирование описания. +desc.display_none = (Нет) +desc.cleared = Описание фракции очищено. +desc.updated = Описание фракции обновлено! + +# ========== Окно тега ========== +tag.title = Редактировать тег +tag.current_label = Текущий: +tag.instructions = Тег (1-5 символов, только буквы и цифры): +tag.help_text = Теги отображаются в чате и на карте +tag.no_permission = У вас нет прав на редактирование тега. +tag.display_none = (Нет) +tag.cleared = Тег фракции очищен. +tag.too_short = Тег должен содержать не менее {0} символов. +tag.too_long = Тег не может превышать {0} символов. +tag.invalid_format = Тег может содержать только буквы и цифры. +tag.same_tag = Это уже текущий тег вашей фракции. +tag.tag_taken = Фракция с таким тегом уже существует. +tag.success = Тег фракции установлен: [{0}]! + +# ========== Страница панели управления ========== +dashboard.title = Панель управления фракцией +dashboard.power_label = Сила +dashboard.land_label = Территории +dashboard.members_label = Участники +dashboard.online_label = В сети +dashboard.allies_label = Союзники +dashboard.enemies_label = Враги +dashboard.relations_label = Отношения +dashboard.ally_enemy_label = союзники / враги +dashboard.status_label = Статус +dashboard.invites_label = Приглашения +dashboard.sent_requests_label = отправлено / заявки +dashboard.treasury_label = Казна +dashboard.upkeep_label = Содержание +dashboard.per_cycle = за цикл +dashboard.your_wallet = Ваш кошелёк +dashboard.personal_balance = личный баланс +dashboard.quick_actions = Быстрые действия +dashboard.teleport_label = Телепорт +dashboard.territory_label = Территория +dashboard.channel_label = Канал +dashboard.membership_label = Членство +dashboard.recent_activity = Последняя активность +dashboard.view_all = Показать все +dashboard.income_24h = Доход (24 ч) +dashboard.deposits_transfers_in = вклады, входящие переводы +dashboard.expenses_24h = Расходы (24 ч) +dashboard.withdrawals_transfers_out = выводы, исходящие переводы +dashboard.faction_gone = Ваша фракция больше не существует. +dashboard.available = {0} доступно +dashboard.at_risk = Под угрозой! +dashboard.online_count = {0} в сети +dashboard.status_invite = По приглашению +dashboard.in_grace = ЛЬГОТНЫЙ ПЕРИОД +dashboard.billable_chunks = {0} оплачиваемых чанков +dashboard.btn_home = Дом +dashboard.btn_set_home = Установить дом +dashboard.btn_claim = Захватить +dashboard.chat_prefix = Чат: {0} +dashboard.btn_leave = Покинуть +dashboard.no_activity = Нет последней активности. +dashboard.time_now = сейчас +dashboard.time_minutes = {0} мин. назад +dashboard.time_hours = {0} ч. назад +dashboard.time_days = {0} д. назад +dashboard.no_home_hint = У вашей фракции не установлен дом. Попросите Офицера установить его. +dashboard.chat_mode_set = Режим чата: {0} +dashboard.claim_success = Чанк захвачен в ({0}, {1}) +dashboard.upkeep_in = через {0} + +# ========== Главная страница фракции ========== +main.no_faction = Нет фракции +main.joined = Вы вступили во фракцию! +main.join_failed = Не удалось вступить во фракцию: {0} +main.invite_declined = Приглашение отклонено. +main.cooldown = Телепортация на перезарядке! Осталось {0} сек. +main.world_not_found = Невозможно телепортироваться — мир не найден. +main.leave_failed = Не удалось покинуть: {0} + +# ========== Общие элементы интерфейса ========== +common.faction_count = {0} фракций +common.leader_label = Лидер: {0} +common.sort_power = Сила +common.sort_members = Участники +common.page_format = {0}/{1} +common.own_faction = (Вы) +common.search = Поиск: +common.sort = Сортировка: +common.prev = < Назад +common.next = Далее > +common.treasury_not_available = Казна недоступна. + +# ========== Страница участников ========== +members.title = Участники +members.search_label = Поиск: +members.sort_label = Сортировка: +members.prev_btn = < Назад +members.next_btn = Далее > +members.count = {0} участников +members.sort_role = Роль +members.sort_last_online = Последний вход +members.just_now = только что +members.ago = {0} назад +members.never = Никогда +members.member_not_found = Участник не найден. +members.promoted = {0} повышен(а) до {1}. +members.promote_failed = Не удалось повысить: {0} +members.demoted = {0} понижен(а) до {1}. +members.demote_failed = Не удалось понизить: {0} +members.kicked = {0} исключён(а) из фракции. +members.kick_failed = Не удалось исключить: {0} +members.label_power = Сила: +members.label_joined = Вступил(а): +members.label_last_death = Последняя смерть: +members.btn_promote = Повысить +members.btn_demote = Понизить +members.btn_kick = Исключить +members.btn_make_leader = Назначить Лидером +members.btn_profile = Профиль +members.self_label = (Вы) + +# ========== Страница обзора фракций ========== +browser.title = Обзор фракций +browser.search_label = Поиск: +browser.sort_label = Сортировка: +browser.prev_btn = < Назад +browser.next_btn = Далее > +browser.sort_name = Название +browser.invalid_faction = Недопустимая фракция. +browser.label_power = Сила +browser.label_claims = территории +browser.label_members = участники +browser.label_recruitment = Набор: +browser.label_created = Создана: +browser.label_description = Описание: +browser.view_info_btn = Подробнее +browser.label_leader = Лидер: +browser.no_description = Описание не задано + +# ========== Страница рейтинга ========== +leaderboard.title = Рейтинг фракций +leaderboard.rank_by = Ранжировать по: +leaderboard.col_rank = # +leaderboard.col_faction = Фракция +leaderboard.col_claims = Территории +leaderboard.col_members = Участники +leaderboard.prev_btn = < Назад +leaderboard.next_btn = Далее > +leaderboard.sort_kd = У/С +leaderboard.sort_territory = Территория +leaderboard.sort_balance = Баланс + +# ========== Страница информации об игроке ========== +playerinfo.title = Информация об игроке +playerinfo.first_joined_label = Первый вход: +playerinfo.last_online_label = Последний вход: +playerinfo.faction_label = Фракция: +playerinfo.role_label = Роль: +playerinfo.joined_label_static = Вступил(а): +playerinfo.not_in_faction = Не состоит во фракции +playerinfo.power_header = Сила +playerinfo.current_max = текущая / макс. +playerinfo.combat_header = Бой +playerinfo.kills_deaths = убийства / смерти +playerinfo.kdr_header = Соотношение У/С +playerinfo.membership_history = История членства +playerinfo.view_faction_btn = Фракция +playerinfo.back_btn = Назад +playerinfo.now = Сейчас +playerinfo.history_count = {0} записей +playerinfo.joined_label = Вступил(а): {0} +playerinfo.current = Текущая +playerinfo.left_label = Покинул(а): {0} +playerinfo.no_history = Нет истории членства +playerinfo.faction_gone = Фракция больше не существует. +playerinfo.reason_active = АКТИВЕН +playerinfo.reason_left = ПОКИНУЛ +playerinfo.reason_kicked = ИСКЛЮЧЁН +playerinfo.reason_disbanded = РАСПУЩЕНА + +# ========== Страница отношений ========== +relations.title = Отношения +relations.tab_relations = Отношения +relations.tab_pending = Ожидающие +relations.set_relation_btn = + Установить отношение +relations.prev_btn = < Назад +relations.next_btn = Далее > +relations.relation_count = {0} отношений +relations.request_count = {0} запросов +relations.type_ally = Союзник +relations.type_enemy = Враг +relations.type_incoming = Входящий +relations.type_outgoing = Исходящий +relations.incoming_request = Входящий запрос +relations.outgoing_request = Исходящий запрос +relations.empty_relations = Отношений пока нет. +relations.empty_relations_hint = Отношений пока нет. Нажмите + УСТАНОВИТЬ ОТНОШЕНИЕ, чтобы добавить союзников или врагов. +relations.empty_pending = Нет ожидающих запросов на союз. +relations.today = Сегодня +relations.one_day_ago = 1 день назад +relations.days_ago = {0} дней назад +relations.now_neutral = Теперь нейтральные отношения с {0}. +relations.now_enemies = Теперь враждуете с {0}! +relations.request_sent = Запрос на союз отправлен {0}. +relations.now_allied = Теперь в союзе с {0}! +relations.request_declined = Запрос на союз от {0} отклонён. +relations.request_cancelled = Запрос на союз к {0} отменён. +relations.failed = Ошибка: {0} +relations.search_hint = Найдите фракцию для установки отношений +relations.no_results = Фракций, соответствующих '{0}', не найдено +relations.power_display = {0} Силы +relations.member_count = {0} участников +relations.label_members = участники +relations.label_power = Сила +relations.label_since = С: +relations.label_claims = Территории: +relations.label_direction = Направление: +relations.btn_view = Просмотр +relations.btn_neutral = Нейтралитет +relations.btn_enemy = Враг +relations.btn_ally = Союзник +relations.btn_accept = Принять +relations.btn_decline = Отклонить +relations.btn_cancel = Отменить + +# ========== Страница настроек ========== +settings.title = Настройки фракции +settings.general = Общие +settings.name_label = Название: +settings.tag_label = Тег: +settings.desc_label = Описание: +settings.edit_btn = Изменить +settings.recruitment = Набор +settings.status_label = Статус: +settings.home_location = Расположение дома +settings.location_label = Координаты: +settings.set_home_btn = Установить дом +settings.teleport_btn = Телепорт +settings.delete_btn = Удалить +settings.optional_features = Дополнительные функции +settings.configure_modules = Настройка дополнительных модулей. +settings.modules_btn = Модули +settings.danger_zone = Опасная зона +settings.irreversible = Это действие необратимо. +settings.disband_btn = Распустить фракцию +settings.lock_hint = Некоторые параметры могут быть заблокированы сервером и не примут изменения. +settings.territory_permissions = Права на территории +settings.col_out = Чужие +settings.col_ally = Союзн. +settings.col_mem = Участн. +settings.col_off = Офиц. +settings.cat_building = СТРОИТЕЛЬСТВО +settings.perm_break = Разрушение +settings.perm_place = Размещение +settings.cat_interaction = ВЗАИМОДЕЙСТВИЕ +settings.interaction_hint = (дочерние элементы отключены, когда «Все» выключено) +settings.perm_all = Все +settings.perm_door = Двери +settings.perm_chest = Сундуки +settings.perm_bench = Верстаки +settings.perm_processing = Переработка +settings.perm_seat = Сиденья +settings.perm_transport = Транспорт +settings.cat_other = ПРОЧЕЕ +settings.perm_crate = Ящики +settings.perm_npc_tame = Приручение NPC +settings.perm_pve = PvE-урон +settings.appearance = Внешний вид +settings.color_label = Цвет: +settings.mob_spawning = Спавн мобов +settings.mob_spawning_hint = (дочерние элементы отключены, когда основной выключен) +settings.mob_spawning_label = Спавн мобов +settings.hostile_mobs = Враждебные мобы +settings.passive_mobs = Мирные мобы +settings.neutral_mobs = Нейтральные мобы +settings.faction_settings = Настройки фракции +settings.pvp_in_territory = PvP на территории +settings.officers_can_edit = Офицеры могут редактировать +settings.leader_only = Только Лидер +settings.officers_only = Только Офицеры и Лидер могут изменять настройки фракции. +settings.display_none = (Нет) +settings.home_not_set = Не установлен +settings.no_permission = У вас нет прав на изменение настроек. +settings.only_leader_disband = Только Лидер может распустить фракцию. +settings.perm_locked = Этот параметр заблокирован сервером. +settings.no_perm_edit = У вас нет прав на редактирование прав территории. +settings.only_leader_officers = Только Лидер может изменять доступ Офицеров. +settings.pvp_enabled = Включено +settings.pvp_disabled = Отключено +settings.not_in_territory = Вы должны находиться на территории своей фракции, чтобы установить дом. +settings.home_set = Дом фракции установлен в вашем текущем местоположении! +settings.recruitment_set = Набор установлен: {0}. +settings.home_no_set = У вашей фракции не установлен дом. +settings.home_deleted = Дом фракции удалён! + +# ========== Страница модулей ========== +modules.title = Модули фракции +modules.description = Дополнительные функции для улучшения вашей фракции +modules.configure_btn = Настроить +modules.back_btn = < Назад к настройкам +modules.treasury_name = Казна +modules.treasury_desc = Банк и экономика фракции +modules.raids_name = Рейды +modules.raids_desc = Плановые битвы фракций +modules.levels_name = Уровни +modules.levels_desc = Прогресс и опыт фракции +modules.war_name = Война +modules.war_desc = Официальные объявления войны +modules.coming_soon = Скоро +modules.active = Активен +modules.view_treasury = Открыть Казну +modules.unavailable = Недоступно +modules.no_economy = Плагин экономики не обнаружен +modules.disabled = Отключено +modules.economy_not_available = Экономические функции недоступны на этом сервере + +# ========== Страница Казны ========== +treasury.title = Казна фракции +treasury.balance_label = Баланс +treasury.income_24h = Доход (24 ч) +treasury.deposits_transfers_in = вклады, входящие переводы +treasury.expenses_24h = Расходы (24 ч) +treasury.withdrawals_transfers_out = выводы, исходящие переводы +treasury.maintenance = СОДЕРЖАНИЕ +treasury.runway_label = Запас средств: +treasury.add_funds = Внести средства +treasury.deposit_btn = Внести +treasury.take_funds = Вывести средства +treasury.withdraw_btn = Вывести +treasury.send_to_faction = Перевести фракции +treasury.transfer_btn = Перевести +treasury.treasury_config = Настройки Казны +treasury.settings_btn = Настройки +treasury.recent_transactions = Последние транзакции +treasury.no_transactions = Транзакций пока нет +treasury.col_date = Дата +treasury.col_type = Тип +treasury.col_by = Кем +treasury.col_amount = Сумма +treasury.col_details = Подробности +treasury.pay_now_btn = Оплатить сейчас +treasury.cost_7d = 7 д.: +treasury.cost_14d = 14 д.: +treasury.cost_30d = 30 д.: +treasury.settings_title = Настройки Казны +treasury.officer_permissions = ПРАВА ОФИЦЕРОВ +treasury.allow_withdraw = Разрешить Офицерам выводить средства +treasury.allow_transfer = Разрешить Офицерам переводить средства +treasury.limits_section = ЛИМИТЫ ВЫВОДА И ПЕРЕВОДА +treasury.max_per_withdrawal = Макс. за один вывод: +treasury.max_withdrawals_per = Макс. выводов за период: +treasury.max_per_transfer = Макс. за один перевод: +treasury.max_transfers_per = Макс. переводов за период: +treasury.limit_period = Период лимита (часы): +treasury.no_limit_hint = Установите 0 для снятия лимита +treasury.upkeep_settings = НАСТРОЙКИ СОДЕРЖАНИЯ +treasury.auto_pay_upkeep = Автооплата содержания из Казны +treasury.back_btn = Назад +treasury.upkeep_cost_format = {0} каждые {1} ч. +treasury.upkeep_time_left = осталось {0} +treasury.wallet_label = Ваш кошелёк: {0} +treasury.treasury_label = Баланс Казны: {0} +treasury.chunks_detail = {0} бесплатных + {1} оплачиваемых чанков +treasury.cost_label = Стоимость: {0} +treasury.pending = Ожидание +treasury.auto_pay_on = Автооплата: ВКЛ +treasury.auto_pay_off = Автооплата: ВЫКЛ +treasury.runway_90_plus = 90+ дней +treasury.runway_days = {0} дней +treasury.runway_day = {0} день +treasury.runway_less_day = < 1 дня +treasury.runway_no_funds = Нет средств +treasury.grace_expires = Льготный период истекает через: {0} +treasury.missed_payments = Пропущено платежей: {0} +treasury.pay_to_clear = Оплатите {0} для снятия льготного периода +treasury.system = Система +treasury.type_deposit = Вклад +treasury.type_withdrawal = Вывод +treasury.type_transfer_in = Входящий перевод +treasury.type_transfer_out = Исходящий перевод +treasury.type_player_transfer = Перевод игроку +treasury.type_upkeep = Содержание +treasury.type_tax = Сбор налогов +treasury.type_war_cost = Затраты на войну +treasury.type_raid_cost = Затраты на рейд +treasury.type_spoils = Трофеи +treasury.type_admin = Корректировка администратором +treasury.deposit_title = Внести в Казну +treasury.withdraw_title = Вывести из Казны +treasury.fee_label = Комиссия ({0}%) +treasury.confirm_deposit = Подтвердить вклад +treasury.confirm_withdrawal = Подтвердить вывод +treasury.from_wallet = {0} из кошелька +treasury.to_wallet = {0} в кошелёк +treasury.enter_valid_amount = Введите допустимую положительную сумму. +treasury.insufficient_wallet = Недостаточно средств в кошельке. Нужно {0}, есть {1}. +treasury.wallet_withdraw_failed = Не удалось списать средства из вашего кошелька. +treasury.deposit_failed_returned = Не удалось внести средства. Деньги возвращены. +treasury.deposited = Внесено {0} в Казну. +treasury.deposited_fee = Внесено {0} в Казну. (комиссия: {1}) +treasury.no_withdraw_permission = У вас нет прав на вывод средств. +treasury.withdraw_denied = Вывод отклонён: {0} +treasury.insufficient_treasury = Недостаточно средств в Казне. +treasury.withdraw_limit = Превышен лимит вывода. +treasury.withdraw_failed = Ошибка вывода: {0} +treasury.wallet_deposit_warn = Внимание: Не удалось зачислить средства в ваш кошелёк. Обратитесь к администратору. +treasury.withdrew = Выведено {0} из Казны. +treasury.withdrew_fee = Выведено {0} из Казны. (комиссия: {1}, получено: {2}) +treasury.search_hint = Найдите игрока или фракцию +treasury.no_results = Нет результатов для '{0}' +treasury.tag_player = [Игрок] +treasury.tag_faction = [Фракция] +treasury.source_online = В сети +treasury.source_offline = Не в сети +treasury.source_player_db = Игрок Hytale +treasury.no_transfer_permission = У вас нет прав на перевод. +treasury.transfer_denied = Перевод отклонён: {0} +treasury.invalid_target_faction = Недопустимая целевая фракция. +treasury.target_faction_gone = Целевая фракция больше не существует. +treasury.transfer_failed = Ошибка перевода: {0} +treasury.transfer_failed_returned = Перевод не удался. Средства возвращены. +treasury.transferred = Переведено {0} в {1}. +treasury.invalid_target_player = Недопустимый целевой игрок. +treasury.player_transfer_failed = Не удалось зачислить средства в кошелёк игрока. Перевод отменён. +treasury.leader_only_perms = Только Лидер может изменять права Казны. +treasury.leader_only_upkeep = Только Лидер может изменять настройки содержания. +treasury.invalid_limit = Недопустимое число в полях лимитов. Используйте 0 для снятия ограничений. + +# ========== Страницы подтверждения ========== +confirm.disband_title = Распустить фракцию +confirm.disband_prompt = Вы уверены, что хотите распустить +confirm.disband_warning = Это действие нельзя отменить! +confirm.leave_title = Покинуть фракцию +confirm.leave_prompt = Вы уверены, что хотите покинуть +confirm.leave_warning = Вы потеряете доступ к территории фракции. +confirm.leader_leave_title = Покинуть как Лидер +confirm.leader_leave_prompt = Вы покидаете +confirm.transfer_title = Передача лидерства +confirm.transfer_prompt = Вы уверены, что хотите передать лидерство +confirm.transfer_warning = Вы станете Офицером. +confirm.disband_not_leader = Только Лидер может распустить фракцию. +confirm.disbanded = Фракция '{0}' была распущена. +confirm.disband_failed = Не удалось распустить фракцию. +confirm.succession_title = Лидерство будет передано: +confirm.no_members_warning = ВНИМАНИЕ: Нет других участников! +confirm.will_disband = Уход приведёт к окончательному роспуску фракции. +confirm.not_in_faction = Вы не состоите в этой фракции. +confirm.not_leader_anymore = Вы больше не Лидер. +confirm.no_successor = Нет доступного преемника. Используйте роспуск. +confirm.transfer_failed = Не удалось передать лидерство: {0} +confirm.leader_left = Лидерство передано {0}. Вы покинули {1}. +confirm.leave_failed = Не удалось покинуть фракцию: {0} +confirm.leader_cannot_leave = Лидеры не могут покинуть фракцию. Передайте лидерство или распустите фракцию. +confirm.left_faction = Вы покинули {0}. +confirm.faction_gone = Фракция больше не существует. +confirm.not_leader_transfer = Только Лидер может передать лидерство. +confirm.leadership_transferred = Лидерство передано {0}. + +# ========== Страница журнала активности ========== +logs.title = {0} - Журнал активности +logs.entry_count = {0} записей +logs.filter_label = Фильтр: +logs.col_time = Время +logs.col_type = Тип +logs.col_message = Сообщение +logs.prev_btn = < Назад +logs.next_btn = Далее > +logs.all_types = Все типы +logs.no_logs_type = Нет записей этого типа. +logs.no_logs = Журнал активности пуст. +logs.time_just_now = только что +logs.time_minute = {0} минуту назад +logs.time_minutes = {0} минут назад +logs.time_hour = {0} час назад +logs.time_hours = {0} часов назад +logs.time_day = {0} день назад +logs.time_days = {0} дней назад +logs.time_week = {0} неделю назад +logs.time_weeks = {0} недель назад +logs.type_member_join = Вступление +logs.type_member_leave = Выход +logs.type_member_kick = Исключение +logs.type_member_promote = Повышение +logs.type_member_demote = Понижение +logs.type_claim = Захват +logs.type_unclaim = Освобождение +logs.type_overclaim = Перезахват +logs.type_home_set = Установка дома +logs.type_relation_ally = Союзник +logs.type_relation_enemy = Враг +logs.type_relation_neutral = Нейтралитет +logs.type_leader_transfer = Передача +logs.type_settings_change = Настройки +logs.type_power_change = Сила +logs.type_economy = Экономика +logs.type_admin_power = Админ (Сила) + +# Шаблоны сообщений журнала (i18n для содержимого журнала активности) +# Действия игроков +logs.msg_faction_created = {0} создал(а) фракцию +logs.msg_member_joined = {0} вступил(а) во фракцию +logs.msg_member_left = {0} покинул(а) фракцию +logs.msg_member_kicked = {0} был(а) исключён(а) +logs.msg_member_promoted = {0} повышен(а) до {1} +logs.msg_member_demoted = {0} понижен(а) до {1} +logs.msg_leader_transferred = Лидерство передано {0} +logs.msg_leader_left_transfer = {0} покинул(а), {1} теперь Лидер +logs.msg_relation_set = Установлены отношения с {0} как {1} +# Территория +logs.msg_claimed = Захвачен чанк в {0}, {1} в {2} +logs.msg_unclaimed = Освобождён чанк в {0}, {1} в {2} +logs.msg_overclaim_lost = Потерян чанк в {0}, {1} в пользу {2} +logs.msg_overclaim_taken = Перезахвачен чанк в {0}, {1} у {2} +logs.msg_all_unclaimed = Все территории освобождены +logs.msg_claim_removed_world = Территория в '{0}' удалена (мир запрещает захват) +logs.msg_claims_lost_upkeep = Потеряно {0} территорий из-за содержания (пропущено {1} платежей) +logs.msg_claims_removed_inactive = {0} территорий удалено из-за неактивности ({1} дней) +# Дом +logs.msg_home_set = Дом установлен +logs.msg_home_cleared = Дом удалён +logs.msg_home_cleared_world = Дом в '{0}' удалён (мир запрещает захват) +# Настройки +logs.msg_renamed = Переименовано из '{0}' в '{1}' +logs.msg_set_open = Фракция открыта для вступления +logs.msg_set_closed = Фракция закрыта (только по приглашению) +logs.msg_desc_set = Описание установлено +logs.msg_desc_cleared = Описание очищено +logs.msg_color_changed = Цвет изменён на '{0}' +# Экономика +logs.msg_deposit = Вклад: {0} (+{1}) +logs.msg_withdrawal = Вывод: {0} (-{1}) +logs.msg_upkeep_paid = Содержание оплачено: {0} ({1} оплачиваемых чанков) +logs.msg_upkeep_grace_started = Оплата содержания не удалась: начат льготный период ({0} ч.) +logs.msg_upkeep_missed = Содержание не оплачено (платёж {0}), льготный период истекает через {1} +logs.msg_upkeep_manual = Содержание оплачено вручную: {0} ({1} оплачиваемых чанков, льготный период снят) +# Админ (Сила) +logs.msg_admin_power_set = Админ установил Силу {0} на {1} (было {2}) +logs.msg_admin_power_add = Админ добавил {0} Силы для {1} ({2} -> {3}) +logs.msg_admin_power_remove = Админ убрал {0} Силы у {1} ({2} -> {3}) +logs.msg_admin_power_reset = Админ сбросил Силу {0} до {1} (было {2}) +logs.msg_admin_power_adjusted = Админ изменил Силу {0} на {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Админ установил макс. Силу {0} на {1} (было {2}) +logs.msg_admin_maxpower_reset = Админ сбросил макс. Силу {0} до глобального значения ({1}) +logs.msg_admin_powerloss_enabled = Админ включил потерю Силы для {0} +logs.msg_admin_powerloss_disabled = Админ отключил потерю Силы для {0} +logs.msg_admin_decay_enabled = Админ включил исключение из распада территорий для {0} +logs.msg_admin_decay_disabled = Админ отключил исключение из распада территорий для {0} +logs.msg_admin_kd_reset = Админ сбросил У/С для {0} +logs.msg_admin_power_set_all = Админ установил Силу всех {0} участников на {1} +logs.msg_admin_power_add_all = Админ добавил {0} Силы всем {1} участникам +logs.msg_admin_power_remove_all = Админ убрал {0} Силы у всех {1} участников +logs.msg_admin_power_reset_all = Админ сбросил Силу всех {0} участников +logs.msg_admin_power_adjusted_all = Админ изменил Силу всех {0} участников на {1} +# Админ (фракция) +logs.msg_admin_kicked = [Admin] {0} был(а) исключён(а) +logs.msg_admin_role_set = [Admin] Роль {0} установлена на {1} +logs.msg_admin_leader_kick = [Admin] Лидерство передано от {0} к {1} (исключение администратором) +logs.msg_admin_econ_added = Админ добавил: {0} (баланс: {1}) +logs.msg_admin_econ_deducted = Админ списал: {0} (баланс: {1}) +logs.msg_admin_econ_set = Админ установил баланс на {0} (было {1}) +# Импорт +logs.msg_left_import = {0} покинул(а) (импортирован(а) в другую фракцию) +logs.msg_leader_import_transfer = {0} стал(а) Лидером (предыдущий Лидер импортирован в другую фракцию) +logs.msg_imported_from = Фракция импортирована из {0} + +# ========== Страница чата ========== +chat.title = Чат фракции +chat.tab_faction = Фракция +chat.tab_ally = Союзник +chat.send_btn = Отправить +chat.placeholder = Введите сообщение... +chat.no_messages = Сообщений пока нет. +chat.no_ally_permission = У вас нет прав на чат союзников. +chat.no_permission = Нет доступа. +chat.faction_gone = Ваша фракция больше не существует. +chat.time_now = сейчас +chat.time_minutes = {0} мин. +chat.time_hours = {0} ч. + +# ========== Страница приглашений ========== +invites.title = Приглашения +invites.tab_outgoing = Исходящие +invites.tab_requests = Заявки +invites.prev_btn = < Назад +invites.next_btn = Далее > +invites.invite_count = {0} приглашений +invites.request_count = {0} заявок +invites.invited_by = Пригласил(а): {0} +invites.no_message = Нет сообщения +invites.expires = Истекает: {0} +invites.type_outgoing = Исходящее +invites.type_request = Заявка +invites.invited_by_label = Пригласил(а): +invites.empty_outgoing = Нет исходящих приглашений. Используйте /f invite <игрок>, чтобы пригласить кого-нибудь. +invites.empty_requests = Нет заявок на вступление. Игроки могут подать заявку командой /f request. +invites.invalid_player = Недопустимый игрок. +invites.cancelled_invite = Приглашение для {0} отменено. +invites.player_joined = {0} вступил(а) во фракцию! +invites.faction_full = Фракция заполнена. Невозможно принять заявку. +invites.add_failed = Не удалось добавить игрока во фракцию. +invites.request_expired = Заявка не найдена или истекла. +invites.request_declined = Заявка от {0} отклонена. +invites.time_seconds = {0} сек. +invites.time_minutes = {0} мин. +invites.time_hours = {0} ч. +invites.label_message = Сообщение: +invites.btn_cancel = Отменить +invites.btn_accept = Принять +invites.btn_decline = Отклонить + +# ========== Страница карты ========== +map.title = Карта территорий +map.action_hint = ЛКМ: Захватить | ПКМ: Освободить +map.legend_your = Ваша территория +map.legend_ally = Территория союзника +map.legend_enemy = Вражеская территория +map.legend_other = Другая фракция +map.legend_wilderness = Дикая местность +map.legend_safe = SafeZone +map.legend_war = WarZone +map.legend_you = Вы здесь +map.position = Ваша позиция: Чанк ({0}, {1}) +map.legend_protected = Защищённая +map.claim_stats = Территории: {0}/{1} ({2} доступно) +map.overclaimed = ПЕРЕЗАХВАЧЕНО фракцией {0}! +map.power_display = Сила: {0}/{1} +map.join_to_claim = Вступите во фракцию, чтобы захватывать территории +map.claim_success = Чанк захвачен в ({0}, {1})! +map.claim_not_in_faction = Вы должны состоять во фракции, чтобы захватывать территории. +map.claim_not_officer = Только Офицеры и Лидер могут захватывать территории. +map.claim_already_yours = Вы уже владеете этим чанком. +map.claim_already_claimed = Этот чанк уже захвачен другой фракцией. +map.claim_not_adjacent = Вы можете захватывать только чанки, смежные с вашей территорией. +map.claim_max = Вы достигли предела территорий. +map.claim_world_not_allowed = Захват территории в этом мире запрещён. +map.claim_orbisguard = Эта область защищена OrbisGuard. +map.claim_failed = Не удалось захватить чанк. +map.unclaim_success = Чанк освобождён в ({0}, {1}). +map.unclaim_not_in_faction = Вы должны состоять во фракции. +map.unclaim_not_officer = Только Офицеры и Лидер могут освобождать территории. +map.unclaim_not_claimed = Этот чанк не захвачен. +map.unclaim_not_yours = Этот чанк принадлежит другой фракции. +map.unclaim_home = Нельзя освободить чанк, содержащий дом фракции. +map.unclaim_failed = Не удалось освободить чанк. +map.overclaim_success = Вражеский чанк перезахвачен в ({0}, {1})! +map.overclaim_not_in_faction = Вы должны состоять во фракции. +map.overclaim_not_officer = Только Офицеры и Лидер могут перезахватывать территории. +map.overclaim_already_yours = Вы уже владеете этим чанком. +map.overclaim_ally = Вы не можете перезахватить территорию союзника. +map.overclaim_has_power = У этой фракции достаточно Силы для защиты своей территории. +map.overclaim_max = Вы достигли предела территорий. +map.overclaim_failed = Не удалось выполнить перезахват. +# ========== Страница создания фракции ========== +create.title = Создайте свою фракцию +create.section_preview = Предпросмотр +create.section_basic_info = Основная информация +create.section_details = Подробности +create.name_prefix = Название: +create.faction_name_label = Название фракции * +create.tag_label = ТЕГ (2-4 символа, авто если пусто) +create.desc_label = Описание (необязательно) +create.recruitment_label = Набор +create.section_faction_color = Цвет фракции +create.section_combat = Бой +create.create_btn = Создать фракцию +create.preview_name = Название вашей фракции +create.leader_prefix = Лидер: {0} +create.enter_name = Пожалуйста, введите название фракции. +create.name_too_short = Название фракции должно содержать не менее {0} символов. +create.name_too_long = Название фракции не может превышать {0} символов. +create.name_taken = Фракция с таким названием уже существует. +create.tag_length = Тег фракции должен содержать от {0} до {1} символов. +create.tag_format = Тег фракции может содержать только буквы и цифры. +create.desc_too_long = Описание не может превышать {0} символов. +create.created = Фракция {0} успешно создана! +create.created_no_dashboard = Фракция создана, но не удалось открыть панель управления. +create.invalid_name = Недопустимое название фракции. +create.create_failed = Не удалось создать фракцию. + +# ========== Страницы для новых игроков ========== +newplayer.browse_title = Обзор фракций +newplayer.invites_title = Приглашения и заявки +newplayer.map_title = Карта территорий +newplayer.view_only_badge = Режим просмотра +newplayer.legend_label = Обозначения: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Фракция +newplayer.legend_wilderness = Дикая местность +newplayer.search_label = Поиск: +newplayer.sort_label = Сортировка: +newplayer.prev_btn = < Назад +newplayer.next_btn = Далее > +newplayer.pending_count = {0} ожидающих +newplayer.received_header = ПОЛУЧЕННЫЕ ПРИГЛАШЕНИЯ ({0}) +newplayer.requests_header = ВАШИ ЗАЯВКИ ({0}) +newplayer.no_invites = Нет приглашений. Найдите фракцию в разделе обзора! +newplayer.no_requests = Нет ожидающих заявок. +newplayer.invited_by = Пригласил(а): {0} +newplayer.member_count = {0} участников +newplayer.power_count = {0} Силы +newplayer.claim_count = {0} территорий +newplayer.awaiting_review = Ожидает рассмотрения +newplayer.expires_in = Истекает через {0} ч. +newplayer.time_just_now = только что +newplayer.time_minutes = {0} мин. назад +newplayer.time_hours = {0} ч. назад +newplayer.time_days = {0} д. назад +newplayer.invalid_faction = Недопустимая фракция. +newplayer.invite_expired = Это приглашение истекло или было отозвано. +newplayer.faction_gone = Фракция больше не существует. +newplayer.joined = Вы вступили в {0}! +newplayer.faction_full = Эта фракция заполнена. +newplayer.join_failed = Не удалось вступить во фракцию. +newplayer.invite_declined = Приглашение отклонено. +newplayer.request_cancelled = Заявка на вступление в {0} отменена. +newplayer.faction_count = {0} фракций +newplayer.browse_subtitle = Найдите свой новый дом! +newplayer.sort_power = Сила +newplayer.sort_name = Название +newplayer.sort_members = Участники +newplayer.btn_accept = Принять +newplayer.btn_pending = Ожидание +newplayer.btn_join = Вступить +newplayer.btn_request = Заявка +newplayer.invite_only_msg = Эта фракция доступна только по приглашению. +newplayer.welcome_hint = Добро пожаловать! Используйте /f для открытия меню фракций. +newplayer.faction_open_hint = Эта фракция открыта! Нажмите ВСТУПИТЬ. +newplayer.already_requested = Вы уже подали заявку в эту фракцию. +newplayer.has_invite_hint = У вас есть приглашение от этой фракции! Нажмите ПРИНЯТЬ. +newplayer.request_sent = Заявка на вступление отправлена в {0}! +newplayer.officer_review = Офицер рассмотрит вашу заявку. +newplayer.map_hint = Режим просмотра — Вступите во фракцию, чтобы захватывать территории! + +# Настройки игрока +nav.player_settings = Игрок +player_settings.title = Настройки игрока +player_settings.language_section = Язык +player_settings.auto_detect = Определять автоматически +player_settings.auto_detect_desc = Использует языковые настройки вашего игрового клиента +player_settings.language_label = Язык +player_settings.notifications_section = Уведомления +player_settings.territory_alerts = Оповещения о территории +player_settings.territory_alerts_desc = Показывать уведомления при входе/выходе с территорий +player_settings.death_announcements = Объявления о смертях +player_settings.death_announcements_desc = Получать объявления о местах гибели участников фракции +player_settings.power_notifications = Изменения Силы +player_settings.power_notifications_desc = Показывать сообщения при изменении вашей Силы +player_settings.language_changed = Язык изменён на {0} +player_settings.pref_enabled = {0} включено +player_settings.pref_disabled = {0} отключено + +# ========== Страницы справки ========== +help.center_title = Справочный центр +help.getting_started_title = Начало работы +help.what_are_factions_title = Что такое фракции? +help.what_are_factions_1 = Фракции — это группы игроков, которые объединяются +help.what_are_factions_2 = для захвата территорий, строительства баз и соревнования. +help.what_are_factions_bullet_1 = - Защищённая территория для строительства +help.what_are_factions_bullet_2 = - Товарищи по команде для совместной игры +help.what_are_factions_bullet_3 = - Доступ к чату фракции и функциям +help.joining_title = Вступление во фракцию +help.joining_desc = Есть несколько способов вступить во фракцию: +help.joining_bullet_1 = - Обзор — Найдите открытые фракции и нажмите ВСТУПИТЬ +help.joining_bullet_2 = - Приглашения — Примите приглашения от Офицеров +help.joining_bullet_3 = - Заявка — Подайте заявку в закрытые фракции +help.creating_title = Создание фракции +help.creating_desc = Перейдите на вкладку «Создать», чтобы основать свою фракцию. +help.creating_bullet_1 = - Приглашайте и управляйте участниками +help.creating_bullet_2 = - Захватывайте и защищайте территории +help.commands_title = Быстрые команды +help.cmd_f = /f - Открыть меню фракции +help.cmd_f_list = /f list - Список всех фракций +help.cmd_f_join = /f join <название> - Вступить в открытую фракцию +help.cmd_f_create = /f create <название> - Создать новую фракцию +help.cmd_f_help = /f help - Полный список команд +help.tip = Совет: Просматривайте фракции, чтобы найти подходящую группу! diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_config/configuration.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_config/configuration.md new file mode 100644 index 00000000..1577a3db --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_config/configuration.md @@ -0,0 +1,41 @@ +--- +id: admin_configuration +--- +# Sistema ng Configuration + +Ang HyperFactions ay gumagamit ng modular na JSON config system na may 11 configuration file. + +## Mga Admin Config Command + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin config` | Buksan ang visual config editor GUI | +| `/f admin reload` | Mag-reload ng lahat ng config file mula sa disk | +| `/f admin sync` | I-synchronize ang faction data sa storage | + +## Mga Configuration File + +| File | Nilalaman | +|------|----------| +| `factions.json` | Roles, power, claims, combat, relations | +| `server.json` | Teleport, auto-save, messages, GUI, permissions | +| `economy.json` | Treasury, upkeep, transaction settings | +| `backup.json` | Backup rotation at retention settings | +| `chat.json` | Faction at ally chat formatting | +| `debug.json` | Debug logging categories | +| `faction-permissions.json` | Per-role permission defaults | +| `announcements.json` | Event broadcast at territory notifications | +| `gravestones.json` | Gravestone integration settings | +| `worldmap.json` | World map refresh modes | +| `worlds.json` | Per-world behavior overrides | + +>[!TIP] Ang config GUI ay nagbibigay ng visual editor na may mga paglalarawan para sa bawat setting. Agad na nase-save ang mga pagbabago pero ang ilan ay nangangailangan ng `/f admin reload` para lubos na magkabisa. + +## Lokasyon ng Config + +Lahat ng file ay naka-store sa: +`mods/com.hyperfactions_HyperFactions/config/` + +>[!WARNING] Ang mga manual na JSON edit ay nangangailangan ng `/f admin reload` para ma-apply. Ang invalid na JSON ay magdudulot na ma-skip ang file na may babala sa server log. + +>[!NOTE] Ang config version ay naka-track sa `server.json`. Awtomatikong nag-migrate ang plugin ng mga lumang config sa startup. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_config/world_settings.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_config/world_settings.md new file mode 100644 index 00000000..3c5a2500 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_config/world_settings.md @@ -0,0 +1,45 @@ +--- +id: admin_world_settings +--- +# Mga Per-World Setting + +Ang HyperFactions ay sumusuporta ng per-world configuration para sa claiming, PvP, at protection behavior. + +## Mga World Command + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin world list` | Ilista ang lahat ng world override | +| `/f admin world info ` | Ipakita ang mga setting para sa isang mundo | +| `/f admin world set ` | Mag-set ng setting | +| `/f admin world reset ` | I-reset ang mundo sa mga default | + +## Mga Available na Setting + +| Setting | Uri | Paglalarawan | +|---------|-----|-------------| +| claiming_enabled | boolean | Payagan ang faction claims sa mundong ito | +| pvp_enabled | boolean | Payagan ang PvP combat sa mundong ito | +| power_loss | boolean | I-apply ang power loss sa pagkamatay | +| build_protection | boolean | Ipatupad ang claim build protection | +| explosion_protection | boolean | Protektahan ang mga claim mula sa mga pagsabog | + +## World Whitelist / Blacklist + +Kontrolin kung aling mga mundo ang nagpapahintulot ng faction features sa pamamagitan ng `worlds.json` config file: + +- **Whitelist mode**: Tanging ang mga naka-listang mundo lang ang pwedeng mag-claim +- **Blacklist mode**: Lahat ng mundo ay pwedeng mag-claim maliban sa mga nakalista + +>[!INFO] Ang mga world setting ay naka-store sa `worlds.json` at nag-o-override ng mga global default mula sa `factions.json`. + +## Mga Halimbawa + +- `/f admin world set survival claiming_enabled true` +- `/f admin world set creative claiming_enabled false` +- `/f admin world set pvp_arena pvp_enabled true` +- `/f admin world reset lobby` -- ibalik ang lahat ng default + +>[!TIP] I-disable ang claiming sa mga creative o lobby world para mapanatiling nakapokus ang faction system sa survival gameplay. + +>[!NOTE] Ang mga per-world setting ay mas mataas ang priority kaysa sa global config pero nao-override ng mga zone flag sa loob ng mundong iyon. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_economy/treasury_management.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_economy/treasury_management.md new file mode 100644 index 00000000..cdf94a05 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_economy/treasury_management.md @@ -0,0 +1,39 @@ +--- +id: admin_treasury_management +--- +# Pamamahala ng Treasury + +Mga admin command para sa pamamahala ng mga faction treasury. Nangangailangan ng `hyperfactions.admin.economy` permission. + +## Mga Treasury Command + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin economy balance ` | Tingnan ang faction treasury balance | +| `/f admin economy set ` | I-set ang eksaktong balance | +| `/f admin economy add ` | Magdagdag ng pondo sa treasury | +| `/f admin economy take ` | Magtanggal ng pondo mula sa treasury | +| `/f admin economy reset ` | I-reset ang treasury sa zero | + +## Mga Halimbawa + +- `/f admin economy balance Vikings` -- suriin ang balance +- `/f admin economy set Vikings 5000` -- i-set sa 5000 +- `/f admin economy add Vikings 1000` -- mag-deposit ng 1000 +- `/f admin economy take Vikings 500` -- mag-withdraw ng 500 +- `/f admin economy reset Vikings` -- i-zero out ang balance + +>[!TIP] Gamitin ang `/f admin info ` para makita ang buong economy overview kasama ang transaction history katabi ng treasury balance. + +## Mga Use Case + +| Senaryo | Command | +|---------|---------| +| Pamamahagi ng event prize | `economy add ` | +| Parusa sa paglabag sa patakaran | `economy take ` | +| Economy reset pagkatapos ng wipe | `economy reset ` | +| Kompensasyon para sa mga bug | `economy add ` | + +>[!WARNING] Ang mga pagbabago sa treasury ay naka-log sa transaction history ng faction. Ang mga admin modification ay naitatala kasama ang pangalan ng admin para sa accountability. + +>[!NOTE] Lahat ng economy admin command ay gumagana kahit naka-disable ang economy module sa config. Ang data ay naka-store anuman ang status ng module. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_economy/upkeep_management.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_economy/upkeep_management.md new file mode 100644 index 00000000..c58d5628 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_economy/upkeep_management.md @@ -0,0 +1,42 @@ +--- +id: admin_upkeep_management +--- +# Pamamahala ng Upkeep + +Ang faction upkeep ay nagsisingil sa mga faction nang pana-panahon batay sa kanilang teritoryo at bilang ng miyembro. + +## Mga Admin Control + +Ang mga upkeep setting ay pinamamahalaan sa pamamagitan ng economy config file o ng admin config GUI. + +`/f admin config` +Buksan ang config editor at mag-navigate sa economy settings para ayusin ang mga upkeep value. + +## Mga Default na Upkeep Setting + +| Setting | Default | Paglalarawan | +|---------|---------|-------------| +| Upkeep enabled | false | Master toggle para sa sistema | +| Upkeep interval | 24h | Gaano kadalas sisingilin ang upkeep | +| Per-claim cost | 5.0 | Gastos bawat na-claim na chunk bawat cycle | +| Per-member cost | 0.0 | Gastos bawat miyembro bawat cycle | +| Grace period | 72h | Ang mga bagong faction ay exempt | +| Disband on bankrupt | false | Auto-disband kung hindi makabayad | + +## Pag-monitor ng Upkeep + +Gamitin ang `/f admin info ` para makita ang: +- Kasalukuyang treasury balance +- Tinatantiyang upkeep cost bawat cycle +- Oras bago ang susunod na upkeep charge +- Kung kaya bang bayaran ng faction ang upkeep + +>[!TIP] I-review ang economy statistics sa lahat ng faction mula sa admin dashboard para matukoy ang mga faction na malapit nang ma-bankrupt bago mag-trigger ang upkeep. + +>[!INFO] Ang upkeep configuration ay naka-store sa `economy.json`. Ang mga pagbabagong ginawa sa config GUI ay magkakabisa pagkatapos mag-reload gamit ang `/f admin reload`. + +## Formula ng Upkeep + +**Kabuuang upkeep** = (na-claim na chunk x per-claim cost) + (bilang ng miyembro x per-member cost) + +>[!WARNING] Ang pag-enable ng upkeep sa isang server na may existing faction ay pwedeng magdulot ng mga hindi inaasahang pagkabangkarote. Pag-isipang mag-set ng grace period o mag-anunsyo ng pagbabago nang maaga. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_factions/disbanding.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_factions/disbanding.md new file mode 100644 index 00000000..86409912 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_factions/disbanding.md @@ -0,0 +1,37 @@ +--- +id: admin_disbanding +--- +# Force Disbanding + +Pwedeng puwersahang i-disband ng mga admin ang kahit anong faction, anuman ang gusto ng leader. + +## Command + +`/f admin disband ` +Puwersahang i-disband ang pinangalanang faction. May lalabas na confirmation prompt bago isagawa ang aksyon. + +**Permission**: `hyperfactions.admin.disband` + +>[!WARNING] Ang pag-disband ng faction ay **hindi na pwedeng i-undo**. Lahat ng claim ay mabibigyang-laya, lahat ng miyembro ay tatanggalin, at matitigil ang pag-iral ng faction. Gumawa muna ng backup. + +## Mga Konsekwensya + +Kapag na-disband ang isang faction: + +| Epekto | Paglalarawan | +|--------|-------------| +| **Claims** | Lahat ng teritoryo ay agad na ire-release | +| **Members** | Lahat ng manlalaro ay tatanggalin mula sa roster | +| **Relations** | Lahat ng alyansa at kaaway ay maki-clear | +| **Treasury** | Hahawakan ayon sa economy config settings | +| **Home** | Madi-delete ang faction home | +| **Chat** | Matatanggal ang faction chat history | + +## Mga Best Practice + +1. Palaging patakbuhin ang `/f admin backup create` bago mag-disband +2. I-notify ang mga faction member kung posible +3. I-document ang dahilan para sa server records +4. Suriin ang `/f admin info ` para mag-review bago kumilos + +>[!TIP] Kung ang problema ay sa isang partikular na miyembro, pag-isipang gamitin ang admin factions GUI para ilipat ang leadership sa halip na i-disband ang buong faction. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_factions/managing_factions.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_factions/managing_factions.md new file mode 100644 index 00000000..49206d6d --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_factions/managing_factions.md @@ -0,0 +1,38 @@ +--- +id: admin_managing_factions +--- +# Pamamahala ng mga Faction + +Ang mga admin ay pwedeng mag-inspect at mag-modify ng kahit anong faction sa server sa pamamagitan ng dashboard o mga command. + +## Pag-browse ng mga Faction + +`/f admin factions` +Binubuksan ang admin faction browser. Tingnan ang lahat ng faction na may bilang ng miyembro, power level, at teritoryo. + +`/f admin info ` +Binubuksan ang admin info panel para sa isang partikular na faction na may buong detalye at management options. + +## Pag-modify ng Faction Settings + +Gamit ang `hyperfactions.admin.modify` permission, pwede mong: + +- **I-rename** ang isang faction para malutas ang mga conflict +- **I-set ang kulay** para ayusin ang mga display issue +- **I-toggle ang open/close** para i-override ang join policy +- **I-edit ang description** para sa mga moderation purpose + +>[!TIP] Gamitin ang `/f admin who ` para alamin kung saang faction kabilang ang isang partikular na manlalaro at tingnan ang mga detalye nila. + +## Pagtingin ng mga Miyembro at Relasyon + +Ipinapakita ng admin info panel ang: + +| Seksyon | Mga Detalye | +|---------|-------------| +| **Members** | Buong roster na may mga role at huling nakita | +| **Relations** | Lahat ng ally, enemy, at neutral standing | +| **Territory** | Mga na-claim na chunk at power balance | +| **Economy** | Treasury balance at transaction log | + +>[!NOTE] Ang mga admin inspection command ay hindi nag-notify sa faction na tinitingnan. Ang mga modification lang ang nagti-trigger ng mga alerto. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/backups.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/backups.md new file mode 100644 index 00000000..ef9fcf7c --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/backups.md @@ -0,0 +1,48 @@ +--- +id: admin_backups +--- +# Sistema ng Backup + +Ang HyperFactions ay may kasamang automatic at manual backup na may GFS (Grandfather-Father-Son) rotation. + +## Mga Backup Command + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin backup create` | Gumawa ng manual backup ngayon | +| `/f admin backup list` | Ilista ang lahat ng available na backup | +| `/f admin backup restore ` | Mag-restore mula sa backup | +| `/f admin backup delete ` | Mag-delete ng partikular na backup | + +**Permission**: `hyperfactions.admin.backup` + +## Mga Default ng GFS Rotation + +| Uri | Retention | Paglalarawan | +|-----|-----------|-------------| +| Hourly | 24 | Huling 24 hourly snapshot | +| Daily | 7 | Huling 7 daily snapshot | +| Weekly | 4 | Huling 4 weekly snapshot | +| Manual | 10 | Mga mano-manong ginawang backup | +| Shutdown | 5 | Ginawa sa pag-stop ng server | + +>[!INFO] Ang shutdown backup ay naka-enable bilang default (`onShutdown=true`). Kinukuha nito ang pinakabagong estado bago mag-stop ang server. + +## Nilalaman ng Backup + +Bawat backup ZIP archive ay naglalaman ng: +- Lahat ng faction data file +- Player power data +- Mga zone definition +- Chat history at economy data +- Mga invite at join request data +- Mga configuration file + +>[!WARNING] **Ang pag-restore ng backup ay destructive.** Pinapalitan nito ang lahat ng kasalukuyang data ng nilalaman ng backup. Mawawala ang anumang pagbabago na ginawa pagkatapos gumawa ng backup. Palaging gumawa muna ng sariwang backup bago mag-restore. + +## Mga Best Practice + +1. Gumawa ng manual backup bago ang mga malalaking admin action +2. I-review ang backup retention sa `backup.json` +3. Subukan ang restore sa staging server muna +4. Panatilihing naka-enable ang shutdown backup para sa crash recovery diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/imports.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/imports.md new file mode 100644 index 00000000..45c355b3 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/imports.md @@ -0,0 +1,48 @@ +--- +id: admin_imports +--- +# Pag-import ng Data + +Mag-import ng faction data mula sa ibang plugin para i-migrate ang server mo sa HyperFactions. + +## Import Command + +`/f admin import [path] [flags]` + +**Permission**: `hyperfactions.admin.use` + +## Mga Supported na Source + +| Source | Paglalarawan | +|--------|-------------| +| `elbaphfactions` | Mag-import mula sa ElbaphFactions data | +| `hyfactions` | Mag-import mula sa HyFactions v1 data | + +## Mga Import Flag + +| Flag | Paglalarawan | +|------|-------------| +| `--dry-run` | I-validate ang data nang hindi nag-i-import ng kahit ano | +| `--overwrite` | I-overwrite ang mga existing faction na may parehong pangalan | +| `--no-zones` | Laktawan ang zone data sa pag-import | +| `--no-power` | Laktawan ang power data sa pag-import | + +>[!TIP] Palaging patakbuhin muna gamit ang `--dry-run` para ma-preview kung ano ang ii-import at mahuli ang mga data issue bago mag-commit ng mga pagbabago. + +## Proseso ng Import + +1. Awtomatikong gumagawa ng pre-import backup +2. Lino-load ang mga player name mapping +3. Kino-convert ang mga faction, claim, at zone +4. Vine-validate at sine-save ang data + +## Mga Halimbawa + +- `/f admin import elbaphfactions --dry-run` +- `/f admin import elbaphfactions --overwrite` +- `/f admin import hyfactions --no-zones --no-power` +- `/f admin import elbaphfactions /custom/path` + +>[!WARNING] Ang paggamit ng `--overwrite` ay **magpapalit** ng kahit anong existing faction na may parehong pangalan ng na-import na faction. Mao-overwrite ang member data at mga claim. Patakbuhin muna gamit ang `--dry-run` para matukoy ang mga conflict. + +>[!NOTE] Ang ilang source-specific na data (hal., worker plots, farm plots) ay walang katumbas sa HyperFactions at ilo-log bilang mga babala sa pag-import. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/updates.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/updates.md new file mode 100644 index 00000000..4a054379 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_maintenance/updates.md @@ -0,0 +1,45 @@ +--- +id: admin_updates +--- +# Pagsuri ng Update + +Ang HyperFactions ay pwedeng magsuri ng mga bagong bersyon at pamahalaan ang HyperProtect-Mixin dependency. + +## Mga Update Command + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin update` | Magsuri ng mga HyperFactions update | +| `/f admin update mixin` | Magsuri/mag-download ng HyperProtect-Mixin | +| `/f admin update toggle-mixin-download` | I-toggle ang auto-download | +| `/f admin version` | Ipakita ang kasalukuyang bersyon at build info | + +## Mga Release Channel + +| Channel | Paglalarawan | +|---------|-------------| +| **Stable** | Inirerekomenda para sa mga production server | +| **Pre-release** | Maagang access sa mga paparating na feature | + +>[!INFO] Ang update checker ay nag-notify lang tungkol sa mga bagong bersyon. **Hindi** ito awtomatikong nag-i-install ng mga update sa HyperFactions mismo. + +## HyperProtect-Mixin + +Ang HyperProtect-Mixin ang inirerekomendang protection mixin na nag-e-enable ng mga advanced zone flag (explosions, fire spread, keep inventory, atbp.). + +- Sinusuri ng `/f admin update mixin` ang pinakabagong bersyon +at dini-download ito kung may mas bagong bersyon na available +- Ang auto-download ay pwedeng i-toggle on o off bawat server + +>[!TIP] Pagkatapos mag-download ng bagong mixin version, kailangang mag-restart ng server para magkabisa ang mga pagbabago. + +## Proseso ng Rollback + +Kung may problema ang isang update: + +1. I-stop ang server +2. Palitan ang plugin JAR ng nakaraang bersyon +3. I-start ang server +4. I-verify ang functionality gamit ang `/f admin version` + +>[!WARNING] Ang pag-downgrade ay maaaring mangailangan ng config migration reset. Palaging panatilihin ang mga backup bago mag-update. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_overview/getting_started.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_overview/getting_started.md new file mode 100644 index 00000000..2c8a4207 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_overview/getting_started.md @@ -0,0 +1,40 @@ +--- +id: admin_getting_started +--- +# Pagsisimula bilang Admin + +Maligayang pagdating sa administrasyon ng HyperFactions. Sinasaklaw ng gabay na ito ang mga unang hakbang mo pagkatapos i-install ang plugin. + +## Pagbukas ng Admin Dashboard + +`/f admin` +Binubuksan ang admin dashboard GUI na may access sa lahat ng management tool, zone editor, at server settings. + +>[!INFO] Kailangan mo ng **hyperfactions.admin.use** permission o OP status para ma-access ang mga admin command. + +## Mga Kinakailangan + +- **May permission plugin**: Ibigay ang `hyperfactions.admin.use` +- **Walang permission plugin**: Kailangang server operator ang manlalaro (`adminRequiresOp=true` bilang default) + +## Mga Unang Hakbang Pagkatapos Mag-install + +1. Patakbuhin ang `/f admin` para i-verify ang access mo +2. Buksan ang **Config** para i-review ang default na faction settings +3. Gumawa ng **SafeZone** sa spawn gamit ang `/f admin safezone Spawn` +4. Opsyonal na gumawa ng mga **WarZone** para sa mga PvP arena +5. I-review ang mga **Backup** setting para masiguro ang kaligtasan ng data + +## Mga Kakayahan ng Admin + +| Lugar | Ano ang Pwede Mong Gawin | +|-------|-------------------------| +| Factions | Mag-inspect, mag-modify, o mag-force-disband ng kahit anong faction | +| Zones | Gumawa ng mga SafeZone at WarZone na may custom flags | +| Power | I-override ang player/faction power values | +| Economy | Pamahalaan ang mga faction treasury at upkeep | +| Config | Mag-edit ng settings nang live sa GUI o mag-reload mula sa disk | +| Backups | Gumawa, mag-restore, at mamahala ng mga data backup | +| Imports | Mag-migrate ng data mula sa ibang faction plugin | + +>[!TIP] Gamitin ang `/f admin --text` para makakuha ng chat-based output sa halip na GUI, kapaki-pakinabang para sa console o automation. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_overview/permissions.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_overview/permissions.md new file mode 100644 index 00000000..aeb09753 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_overview/permissions.md @@ -0,0 +1,37 @@ +--- +id: admin_permissions +--- +# Mga Admin Permission + +Lahat ng admin feature ay naka-gate sa likod ng mga permission node sa `hyperfactions.admin` namespace. + +## Mga Permission Node + +| Permission | Paglalarawan | +|-----------|-------------| +| `hyperfactions.admin.*` | Nagbibigay ng **lahat** ng admin permission | +| `hyperfactions.admin.use` | Access sa `/f admin` dashboard | +| `hyperfactions.admin.reload` | Mag-reload ng mga configuration file | +| `hyperfactions.admin.debug` | I-toggle ang mga debug logging category | +| `hyperfactions.admin.zones` | Gumawa, mag-edit, at mag-delete ng mga zone | +| `hyperfactions.admin.disband` | Mag-force-disband ng kahit anong faction | +| `hyperfactions.admin.modify` | Mag-modify ng settings ng kahit anong faction | +| `hyperfactions.admin.bypass.limits` | Mag-bypass ng claim at power limits | +| `hyperfactions.admin.backup` | Gumawa at mag-restore ng mga backup | +| `hyperfactions.admin.power` | Mag-override ng player power values | +| `hyperfactions.admin.economy` | Pamahalaan ang mga faction treasury | + +## Fallback Behavior + +Kapag **walang naka-install na permission plugin**, ang mga admin permission ay bumabalik sa server operator (OP) status. Kontrolado ito ng `adminRequiresOp` sa server config (default: `true`). + +>[!NOTE] Ang `hyperfactions.admin.*` wildcard ay nagbibigay ng bawat admin permission. Gumamit ng individual node para sa granular na kontrol sa staff team mo. + +## Pagkakasunud-sunod ng Permission Resolution + +1. **VaultUnlocked** provider (kung available) +2. **HyperPerms** provider (kung available) +3. **LuckPerms** provider (kung available) +4. **OP check** para sa mga admin node (fallback) + +>[!WARNING] Kapag walang permission plugin at naka-disable ang `adminRequiresOp`, ang mga admin command ay **bukas sa lahat ng manlalaro**. Palaging gumamit ng permission plugin sa production. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_power/power_commands.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_power/power_commands.md new file mode 100644 index 00000000..8939c2bd --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_power/power_commands.md @@ -0,0 +1,38 @@ +--- +id: admin_power_commands +--- +# Mga Power Admin Command + +I-override ang player at faction power values. Lahat ng command ay nangangailangan ng `hyperfactions.admin.power` permission. + +## Mga Player Power Command + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin power set ` | I-set ang eksaktong power value | +| `/f admin power add ` | Magdagdag ng power sa manlalaro | +| `/f admin power remove ` | Magtanggal ng power mula sa manlalaro | +| `/f admin power reset ` | I-reset sa default na starting power | +| `/f admin power info ` | Tingnan ang detalyadong power breakdown | + +## Paano Naaapektuhan ng Power ang mga Faction + +Ang kabuuang power ng faction ay ang suma ng individual power ng lahat ng miyembro nito. Ang mga territory claim ay nangangailangan ng sapat na kabuuang power para ma-maintain. + +| Senaryo | Epekto | +|---------|--------| +| Power na-set na mas mataas | Ang faction ay pwedeng mag-claim ng mas maraming teritoryo | +| Power na-set na mas mababa | Ang faction ay pwedeng maging vulnerable sa overclaim | +| Power na-reset | Binalik ang manlalaro sa default na starting value | + +>[!WARNING] Ang pagbaba ng power ng isang manlalaro ay pwedeng maging sanhi ng pagkawala ng teritoryo ng kanilang faction kung bumaba ang kabuuang power sa ibaba ng bilang ng mga na-claim na chunk. + +## Mga Halimbawa + +- `/f admin power set Steve 50` -- i-set sa eksaktong 50 +- `/f admin power add Steve 10` -- dagdagan ng 10 +- `/f admin power remove Steve 5` -- bawasan ng 5 +- `/f admin power reset Steve` -- ibalik sa default +- `/f admin power info Steve` -- ipakita ang buong breakdown + +>[!TIP] Gamitin ang `/f admin power info ` para makita ang kasalukuyang power, max power, at anumang aktibong override bago gumawa ng mga pagbabago. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_power/power_overrides.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_power/power_overrides.md new file mode 100644 index 00000000..48b297ac --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_power/power_overrides.md @@ -0,0 +1,54 @@ +--- +id: admin_power_overrides +--- +# Mga Power Override + +Mga espesyal na power command na nagbabago kung paano gumagana ang power para sa mga partikular na manlalaro o faction. + +## Mga Override Command + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin power setmax ` | I-set ang custom max power cap | +| `/f admin power noloss ` | I-toggle ang death power penalty immunity | +| `/f admin power nodecay ` | I-toggle ang offline power decay immunity | +| `/f admin power info ` | Tingnan ang lahat ng override at power details | + +## Custom Max Power + +`/f admin power setmax ` +Nagse-set ng personal na maximum power cap para sa manlalaro, na nag-o-override ng server default. + +>[!INFO] Ang pagse-set ng custom max ay **hindi** nagbabago ng kasalukuyang power. Binabago lang nito ang ceiling. Kailangan pa ring kumita ng power ang manlalaro hanggang sa bagong limit. + +## No-Loss Mode + +`/f admin power noloss ` +Tino-toggle ang death power loss immunity. Kapag naka-enable, ang manlalaro ay **hindi** mawawalan ng power sa pagkamatay. + +Kapaki-pakinabang para sa: +- Mga panahon ng proteksyon ng bagong manlalaro +- Mga kalahok sa event +- Mga staff member + +## No-Decay Mode + +`/f admin power nodecay ` +Tino-toggle ang offline power decay immunity. Kapag naka-enable, ang power ng manlalaro ay **hindi** bababa habang offline. + +Kapaki-pakinabang para sa: +- Mga manlalarong matagal na hindi makakapaglaro +- Mga VIP member +- Seasonal protection + +## Power Info + +`/f admin power info ` +Nagpapakita ng kumpletong breakdown: + +- Kasalukuyang power at max power +- Mga aktibong override (noloss, nodecay, custom max) +- Huling oras ng pagkamatay at power na nawala +- Porsyento ng faction contribution + +>[!TIP] Lahat ng power override ay nananatili kahit mag-restart ang server at naka-store sa data file ng manlalaro. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_reference/all_commands.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_reference/all_commands.md new file mode 100644 index 00000000..80a9c7bb --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_reference/all_commands.md @@ -0,0 +1,65 @@ +--- +id: admin_quickref_commands +--- +# Reference ng Admin Command + +Kumpletong listahan ng lahat ng `/f admin` subcommand na may syntax at kinakailangang permission. + +## Dashboard at Pangkalahatan + +| Command | Permission | +|---------|-----------| +| `/f admin` | admin.use | +| `/f admin version` | admin.use | +| `/f admin reload` | admin.reload | +| `/f admin sync` | admin.use | +| `/f admin sentry` | admin.use | + +## Pamamahala ng Faction + +| Command | Permission | +|---------|-----------| +| `/f admin factions` | admin.use | +| `/f admin info ` | admin.use | +| `/f admin who ` | admin.use | +| `/f admin disband ` | admin.disband | +| `/f admin log` | admin.use | + +## Pamamahala ng Zone + +| Command | Permission | +|---------|-----------| +| `/f admin safezone ` | admin.zones | +| `/f admin warzone ` | admin.zones | +| `/f admin removezone ` | admin.zones | +| `/f admin zone create/delete/claim/unclaim` | admin.zones | +| `/f admin zone radius ` | admin.zones | +| `/f admin zone list` | admin.zones | +| `/f admin zone notify ` | admin.zones | +| `/f admin zone title upper/lower ` | admin.zones | +| `/f admin zone properties ` | admin.zones | +| `/f admin zoneflag ` | admin.zones | + +## Power at Ekonomiya + +| Command | Permission | +|---------|-----------| +| `/f admin power set/add/remove/reset [amt]` | admin.power | +| `/f admin power setmax/noloss/nodecay [amt]` | admin.power | +| `/f admin power info ` | admin.power | +| `/f admin economy balance/set/add/take/reset [amt]` | admin.economy | + +## Maintenance + +| Command | Permission | +|---------|-----------| +| `/f admin backup create/list/restore/delete` | admin.backup | +| `/f admin import [flags]` | admin.use | +| `/f admin update` | admin.use | +| `/f admin update mixin` | admin.use | +| `/f admin config` | admin.use | +| `/f admin world list/info/set/reset` | admin.use | +| `/f admin debug toggle ` | admin.debug | +| `/f admin integration` | admin.use | + +>[!NOTE] Lahat ng permission node ay may prefix na `hyperfactions.` (hal., `hyperfactions.admin.use`). diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_reference/integrations.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_reference/integrations.md new file mode 100644 index 00000000..6f95a6b2 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_reference/integrations.md @@ -0,0 +1,43 @@ +--- +id: admin_integrations +--- +# Mga Plugin Integration + +Ang HyperFactions ay nag-i-integrate sa ilang external plugin sa pamamagitan ng mga soft dependency. Lahat ng integration ay opsyonal at gracefully na nagfa-fail kung hindi available. + +## Pagsuri ng Integration Status + +`/f admin version` +Ipinapakita ang kasalukuyang bersyon at mga na-detect na integration. + +`/f admin integration` +Binubuksan ang integration management panel na may detalyadong status para sa bawat na-detect na plugin. + +## Talahanayan ng Integration + +| Plugin | Uri | Paglalarawan | +|--------|-----|-------------| +| **HyperPerms** | Permissions | Buong permission system na may mga grupo, inheritance, at context | +| **LuckPerms** | Permissions | Alternatibong permission provider | +| **VaultUnlocked** | Permissions/Economy | Permission at economy bridge | +| **HyperProtect-Mixin** | Protection | Nag-e-enable ng mga advanced zone flag (explosions, fire, keep inventory) | +| **OrbisGuard-Mixins** | Protection | Alternatibong mixin para sa zone flag enforcement | +| **PlaceholderAPI** | Placeholders | 49 faction placeholder para sa ibang plugin | +| **WiFlow PlaceholderAPI** | Placeholders | Alternatibong placeholder provider | +| **GravestonePlugin** | Death | Gravestone access control sa mga zone | +| **HyperEssentials** | Features | Zone flags para sa homes, warps, at kits | +| **KyuubiSoft Core** | Framework | Core library integration | +| **Sentry** | Monitoring | Error tracking at diagnostics | + +## Priority ng Permission Provider + +1. **VaultUnlocked** (pinakamataas na priority) +2. **HyperPerms** +3. **LuckPerms** +4. **OP fallback** (kung walang nakitang provider) + +>[!INFO] Ang mga integration ay nide-detect nang isang beses sa startup gamit ang reflection. Ang mga resulta ay naka-cache para sa session. Kailangan ng server restart pagkatapos magdagdag o magtanggal ng integrated plugin. + +>[!TIP] Gamitin ang `/f admin debug toggle integration` para mag-enable ng detalyadong integration logging para sa troubleshooting. + +>[!NOTE] Ang HyperProtect-Mixin ang **inirerekomendang** protection mixin. Kung wala ito, 15 zone flag ang walang epekto. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_basics.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_basics.md new file mode 100644 index 00000000..11df95e5 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_basics.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_basics +--- +# Mga Pangunahing Kaalaman sa Zone + +Ang mga zone ay admin-controlled na teritoryo na may custom rules na nag-o-override ng normal na faction protection. + +## Mga Uri ng Zone + +- **SafeZone** -- Walang PvP, walang building, walang damage. +Ideal para sa mga spawn area at trading hub. +- **WarZone** -- Palaging naka-enable ang PvP, walang building. +Ideal para sa mga arena at contested battle area. + +## Paggawa ng mga Zone + +`/f admin safezone ` +Gumagawa ng SafeZone at kini-claim ang kasalukuyan mong chunk. + +`/f admin warzone ` +Gumagawa ng WarZone at kini-claim ang kasalukuyan mong chunk. + +Pagkatapos gumawa, tumayo sa mga karagdagang chunk at gamitin ang `/f admin zone claim ` para palawakin ang zone. + +## Pamamahala ng mga Zone Chunk + +`/f admin zone claim ` +Idagdag ang kasalukuyang chunk sa pinangalanang zone. + +`/f admin zone unclaim ` +Tanggalin ang kasalukuyang chunk mula sa pinangalanang zone. + +`/f admin zone radius ` +Mag-claim ng parisukat na mga chunk sa paligid ng posisyon mo. + +## Pag-delete ng mga Zone + +`/f admin removezone ` +Permanenteng dine-delete ang zone at binibitawan ang lahat ng na-claim na chunk nito. + +>[!WARNING] Ang pag-delete ng zone ay agad na nagbibigyang-laya sa lahat ng chunk nito. Hindi ito pwedeng i-undo nang walang backup restore. + +>[!INFO] Ang mga zone rule ay **palaging nag-o-override** ng faction territory rules. Ang SafeZone sa loob ng enemy land ay ligtas pa rin. diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_commands.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_commands.md new file mode 100644 index 00000000..12aceec6 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_commands.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_commands +--- +# Reference ng Zone Command + +Kumpletong reference para sa lahat ng zone management command. Lahat ay nangangailangan ng `hyperfactions.admin.zones` permission. + +## Mabilis na Paggawa + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin safezone ` | Gumawa ng SafeZone sa kasalukuyang chunk | +| `/f admin warzone ` | Gumawa ng WarZone sa kasalukuyang chunk | +| `/f admin removezone ` | I-delete ang zone at bitawan ang mga chunk | + +## Pamamahala ng Zone + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin zone create ` | Gumawa ng zone (safezone/warzone) | +| `/f admin zone delete ` | I-delete ang zone | +| `/f admin zone claim ` | Idagdag ang kasalukuyang chunk sa zone | +| `/f admin zone unclaim ` | Tanggalin ang kasalukuyang chunk mula sa zone | +| `/f admin zone radius ` | Mag-claim ng parisukat na radius ng mga chunk | +| `/f admin zone list` | Ilista ang lahat ng zone na may bilang ng chunk | +| `/f admin zone notify ` | I-toggle ang entry/leave messages | +| `/f admin zone title upper/lower ` | I-set ang zone title text | +| `/f admin zone properties ` | Buksan ang zone properties GUI | + +## Pamamahala ng Flag + +| Command | Paglalarawan | +|---------|-------------| +| `/f admin zoneflag ` | I-set ang isang partikular na flag | + +>[!TIP] Gamitin ang zone **properties GUI** para sa visual editor na may mga toggle para sa bawat flag, naka-organisa ayon sa kategorya. + +## Mga Halimbawa + +- `/f admin safezone Spawn` -- gumawa ng spawn protection +- `/f admin zone radius Spawn 3` -- palawakin sa 7x7 chunk +- `/f admin zoneflag Spawn door_use true` -- payagan ang mga pinto +- `/f admin zone notify Spawn true` -- ipakita ang entry messages diff --git a/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_flags.md b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_flags.md new file mode 100644 index 00000000..579447fc --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/admin/admin_zones/zone_flags.md @@ -0,0 +1,43 @@ +--- +id: admin_zone_flags +--- +# Mga Zone Flag + +Ang mga zone ay sumusuporta sa **47 boolean flag** sa 10 kategorya. Bawat flag ay nagkokontrol ng partikular na gawi sa loob ng zone. + +## Pangkalahatang-tanaw ng mga Flag Category + +| Kategorya | Bilang | Mga Pangunahing Flag | +|-----------|--------|---------------------| +| Combat | 7 | pvp_enabled, friendly_fire, mob_damage, pve_damage | +| Damage | 4 | fall_damage, explosion_damage, fire_spread | +| Death | 2 | keep_inventory, power_loss | +| Building | 4 | build_allowed, block_place, hammer_use | +| Interaction | 13 | door_use, container_use, bench_use, npc_tame | +| Transport | 3 | teleporter_use, portal_use, mount_entry | +| Items | 4 | item_drop, item_pickup, invincible_items | +| Mob Spawning | 5 | mob_spawning, hostile/passive/neutral | +| Mob Clearing | 4 | mob_clear, hostile/passive/neutral clear | +| Integration | 5 | gravestone_access, show_on_map, essentials_homes | + +## Mga Default na Halaga (SafeZone vs WarZone) + +| Flag | SafeZone | WarZone | +|------|----------|---------| +| pvp_enabled | false | **true** | +| build_allowed | false | false | +| fall_damage | false | **true** | +| keep_inventory | **true** | false | +| power_loss | false | **true** | +| mob_spawning | false | **true** | +| item_drop | false | **true** | +| door_use | **true** | **true** | +| container_use | false | **true** | + +>[!NOTE] Ang ilang flag ay nangangailangan ng **HyperProtect-Mixin** para gumana (hal., keep_inventory, explosion_damage, fire_spread, block_place, npc_tame). Kung wala ang mixin, ang mga flag na ito ay walang epekto kahit naka-enable. + +## Pagse-set ng mga Flag + +`/f admin zoneflag ` + +>[!TIP] Gamitin ang `/f admin zone properties ` para sa visual toggle editor na naka-grupo ayon sa kategorya. diff --git a/src/main/resources/Server/Languages/tl-PH/help/combat/death.md b/src/main/resources/Server/Languages/tl-PH/help/combat/death.md new file mode 100644 index 00000000..ad8935c7 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/combat/death.md @@ -0,0 +1,39 @@ +--- +id: combat_death +commands: home, sethome, stuck +--- +# Pagkamatay at Pagre-recover + +Ang pagkamatay ay may totoong mga konsekwensya sa factions. Bawat pagkamatay ay nagpapalugi sa iyo ng personal power, na nagpapahina sa kakayahan ng faction mong hawakan ang teritoryo. + +## Pagkawala ng Power + +Bawat pagkamatay ay nagkakahalaga ng -1.0 power mula sa iyong personal na kabuuan. Binabawasan nito ang combined power ng faction. + +| Pangyayari | Pagbabago ng Power | +|-----------|-------------------| +| Pagkamatay (kahit anong dahilan) | -1.0 | +| Online regen | +0.1 bawat minuto | +| Combat logout | -1.0 (pinatay) | + +>[!NOTE] Ito ay mga default na halaga. Maaaring iba ang na-configure ng server administrator mo. + +## Mga Halimbawang Senaryo + +*5 miyembro na may 10.0 power bawat isa = 50 kabuuan, 20 claim.* +*Isang miyembro ay namatay ng dalawang beses: 8.0 power, faction total 48.* +*Tatlong miyembro ay namatay nang tig-iisa: bumaba ang kabuuan sa 47.* + +>[!WARNING] Kung bumaba ang faction power mo sa ibaba ng claim count mo, pwedeng mag-overclaim ng teritoryo mo ang mga kaaway. + +## Pagre-recover + +Ang power ay nagre-regenerate sa 0.1 bawat minuto habang online. Ang pagre-recover ng 1.0 na nawala ay tumatagal ng mga 10 minuto. Nagsasama-sama ang mga sunud-sunod na pagkamatay, kaya iwasan ang paulit-ulit na away. + +--- + +## Lahat ng Uri ng Pagkamatay + +Ang power loss ay umaaplay sa lahat ng pagkamatay: PvP, napatay ng mob, pagbagsak, pagkalunod, at kahit anong ibang dahilan. Walang ligtas na paraan para mamatay. + +>[!TIP] Mag-set ng faction home gamit ang /f sethome para mabilis na magsama-sama ulit ang mga miyembro pagkatapos mamatay. diff --git a/src/main/resources/Server/Languages/tl-PH/help/combat/protection.md b/src/main/resources/Server/Languages/tl-PH/help/combat/protection.md new file mode 100644 index 00000000..4bc1ac9b --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/combat/protection.md @@ -0,0 +1,28 @@ +--- +id: combat_protection +--- +# Proteksyon ng Teritoryo + +Ang na-claim na teritoryo ay nagbibigay ng ilang layer ng depensa para sa mga build at resource ng faction mo. + +## Proteksyon ng Block + +Tanging mga faction member lamang ang pwedeng mag-place o mag-break ng mga block sa iyong teritoryo. Ang mga kaaway at neutral ay naka-block mula sa pag-modify ng kahit ano. + +## Proteksyon ng Container + +Ang mga chest, barrel, at ibang container ay secured. Tanging mga faction member mo lamang ang pwedeng mag-bukas o mag-interact sa storage sa mga na-claim na chunk. + +## Mga Alerto sa Pagpasok + +Kapag may non-member na pumasok sa iyong na-claim na teritoryo, ang mga online faction member ay makakatanggap ng notification na may pangalan at lokasyon ng intruder. + +--- + +## Ally Access + +Ang mga ally ay hindi pwedeng mag-build o mag-break ng mga block sa iyong teritoryo bilang default. Ang ally damage ay naka-disable din, kaya hindi pwedeng magkasaktan ang mga allied manlalaro. + +>[!INFO] Ang teritoryo ay nagpoprotekta ng mga block, hindi ng mga manlalaro. Ang PvP sa sarili mong teritoryo ay depende sa relasyon ng attacker sa faction mo. + +>[!TIP] Panatilihing konektado ang mga claim mo at iwasan ang mga isoladong chunk na mas mahirap depensahan. diff --git a/src/main/resources/Server/Languages/tl-PH/help/combat/spawn_protection.md b/src/main/resources/Server/Languages/tl-PH/help/combat/spawn_protection.md new file mode 100644 index 00000000..43fa561e --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/combat/spawn_protection.md @@ -0,0 +1,27 @@ +--- +id: combat_spawn_protection +--- +# Spawn Protection + +Pagkatapos mag-respawn mula sa pagkamatay, makakatanggap ka ng pansamantalang proteksyon para mapigilan ang spawn camping. + +## Paano Ito Gumagana + +- Ang proteksyon ay tumatagal ng 5 segundo pagkatapos mag-respawn +- Hindi ka pwedeng masugatan sa panahong ito +- May visual indicator na nagpapakita ng protected status mo + +## Nawawala ang Proteksyon + +Magtatapos nang maaga ang spawn protection kung: + +- Umatake ka sa ibang manlalaro o entity +- Umalis ka sa iyong spawn position + +Pinipigilan nito ang pang-aabuso. Hindi ka pwedeng umatake ng iba habang invulnerable ka. Kapag gumawa ka ng kahit anong aksyon, mawawala ang proteksyon at ang normal na combat rules ang susundin. + +--- + +>[!NOTE] Ito ay mga default na halaga. Maaaring iba ang na-configure ng server administrator mo. + +>[!TIP] Gamitin ang protection time mo para suriin ang sitwasyon bago gumalaw. diff --git a/src/main/resources/Server/Languages/tl-PH/help/combat/tagging.md b/src/main/resources/Server/Languages/tl-PH/help/combat/tagging.md new file mode 100644 index 00000000..80fde0a7 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/combat/tagging.md @@ -0,0 +1,29 @@ +--- +id: combat_tagging +--- +# Combat Tagging + +Kapag umatake ka o inaatake ka ng ibang manlalaro, nagiging combat tagged ka ng 15 segundo. + +## Habang Naka-tag + +- Walang /f home o /f stuck teleport +- Walang server teleport command +- Nagre-reset ang tag sa bawat bagong combat action +- Ipinapakita ng timer ang natitirang tag duration mo + +--- + +## Parusa sa Logout + +>[!WARNING] Ang pag-logout habang naka-combat tag ay papatay sa character mo at mawawalan ka ng 1.0 power. + +Mahuhulog ang mga item mo kung saan ka nagdisconnect at pwedeng looting ng mga kaaway. Palaging hintaying mag-expire ang tag. + +## Paano Gumagana ang Timer + +Lumilitaw ang combat tag timer sa screen kapag pumasok ka sa labanan. Bawat bagong hit ay nagre-reset nito sa 15 segundo. Kapag naabot ang zero, matatanggal ang lahat ng restriction. + +>[!NOTE] Ito ay mga default na halaga. Maaaring iba ang na-configure ng server administrator mo. + +>[!TIP] Mag-disengage at hintayin ang timer kung kailangan mong mag-teleport. diff --git a/src/main/resources/Server/Languages/tl-PH/help/combat/zones.md b/src/main/resources/Server/Languages/tl-PH/help/combat/zones.md new file mode 100644 index 00000000..39995456 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/combat/zones.md @@ -0,0 +1,29 @@ +--- +id: combat_zones +--- +# Mga Espesyal na Zone + +Ang mga admin ay pwedeng mag-designate ng mga lugar na may espesyal na rules na nag-o-override ng normal na faction territory protection. + +## SafeZone + +Walang PvP damage, walang block breaking ng mga non-admin. Ideal para sa mga spawn area, trading hub, at event staging area. Hindi pwedeng masaktan ang mga manlalaro dito. + +## WarZone + +Palaging naka-enable ang PvP. Walang block protection. Bukas na lugar ng labanan kung saan pwede ang lahat. Walang territory protection benefit na matatanggap mo sa isang WarZone. + +--- + +## Paghahambing ng mga Zone + +| Feature | SafeZone | WarZone | Faction Land | +|---------|----------|---------|--------------| +| PvP | Naka-disable | Palaging Naka-on | Batay sa relasyon | +| Block Break | Naka-disable | Pwede | Mga Miyembro Lamang | +| Mga Container | Protektado | Bukas | Mga Miyembro Lamang | +| Pinakamainam Para Sa | Spawn/Trade | Arena | Mga Base | + +>[!NOTE] Palaging nag-o-override ang zone rules sa faction territory rules. Ang isang na-claim na chunk sa loob ng WarZone ay sumusunod sa WarZone rules. + +>[!TIP] Suriin ang territory map mo gamit ang /f map para makita ang mga hangganan ng zone. diff --git a/src/main/resources/Server/Languages/tl-PH/help/diplomacy/alliances.md b/src/main/resources/Server/Languages/tl-PH/help/diplomacy/alliances.md new file mode 100644 index 00000000..b231612b --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/diplomacy/alliances.md @@ -0,0 +1,45 @@ +--- +id: diplomacy_alliances +commands: ally +--- +# Pagbuo ng mga Alyansa + +Ang mga alyansa ay mutual agreement sa pagitan ng dalawang faction na nagbibigay ng proteksyon at mga benepisyo ng kooperasyon. + +--- + +## Paano Bumuo ng Alyansa + +`/f ally ` + +Nagpapadala ng alliance request sa target na faction. Ang alyansa ay magkakabisa lamang kapag sumang-ayon ang dalawang panig. Ang isang Officer o Leader mula sa kabilang faction ay kailangan ding mag-run ng parehong command na naka-target sa iyong faction para ma-confirm. + +## Paano Sirain ang Alyansa + +`/f neutral ` + +Kahit sinong panig ay pwedeng unilateral na tapusin ang alyansa sa pamamagitan ng pag-reset ng relasyon sa neutral. + +--- + +## Mga Benepisyo ng Alyansa + +| Benepisyo | Mga Detalye | +|-----------|-------------| +| Walang friendly fire | Hindi pwedeng magkasaktan ang mga allied manlalaro | +| Shared map visibility | Ang allied territory ay lumalabas na asul sa territory map | +| Territory interaction | Ang mga ally ay pwedeng gumamit ng mga pinto, upuan, at transport sa iyong teritoryo | +| Ally chat | Mag-cycle sa ally chat mode para sa cross-faction na komunikasyon | +| Overclaim protection | Hindi pwedeng mag-overclaim ng teritoryo ng isa't isa ang mga ally | + +>[!NOTE] Ang faction mo ay pwedeng magkaroon ng hanggang 10 alyansa sa isang pagkakataon. Piliin nang mabuti ang mga ally mo. + +--- + +## Etiketa sa Alyansa + +>[!TIP] Mahalaga ang komunikasyon. Bago magpadala ng alliance request, pag-isipang makipag-ugnayan sa leader ng kabilang faction para mag-usap tungkol sa mga tuntunin. Ang matibay na alyansa ay natatayo sa mutual benefit, hindi lang sa convenience. + +- Ang mga alyansa ay gumagana sa dalawang daan -- kung nakikinabang ka sa proteksyon, inaasahan ng mga ally mo ang pareho +- Ang pagsira ng alyansa habang may giyera ay pwedeng makasira sa reputasyon ng faction mo +- Ang mga allied faction ay pwedeng mag-coordinate ng mga territory claim para gumawa ng depensible na mga hangganan diff --git a/src/main/resources/Server/Languages/tl-PH/help/diplomacy/enemies.md b/src/main/resources/Server/Languages/tl-PH/help/diplomacy/enemies.md new file mode 100644 index 00000000..9167fa21 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/diplomacy/enemies.md @@ -0,0 +1,47 @@ +--- +id: diplomacy_enemies +commands: enemy, neutral +--- +# Mga Enemy Faction + +Ang pagdedeklara ng kaaway ay isang one-way na aksyon na agad na nag-e-enable ng PvP at territorial aggression laban sa target na faction. Hindi kailangan ng kasunduan. + +--- + +## Pagdedeklara ng Kaaway + +`/f enemy ` + +Agad na mina-mark ang target na faction bilang iyong kaaway. Agad itong magkakabisa -- hindi kailangan ng confirmation mula sa kabilang panig. Kailangan ng Officer rank o mas mataas pa. + +## Pag-reset sa Neutral + +`/f neutral ` + +Tinatapos ang enemy status at nire-reset ang relasyon sa neutral. Kailangan din ito ng Officer+ at agad na magkakabisa. + +--- + +## Ano ang Na-enable ng Enemy Status + +| Epekto | Mga Detalye | +|--------|-------------| +| PvP sa teritoryo | Buong PvP ang naka-enable sa teritoryo ng parehong faction | +| Overclaiming | Pwede mong i-overclaim ang mga chunk nila kung nasa power deficit sila | +| Map marking | Ang enemy territory ay lumalabas na pula sa territory map | +| Walang proteksyon | Hindi pinipigilan ng standard territory protection ang enemy PvP | + +>[!WARNING] Ang pagdedeklara ng kaaway ay isang seryosong desisyon. Ang mga miyembro nila ay pwede ring lumaban sa iyo sa sarili mong teritoryo kapag nagdeklara ka. + +--- + +## Mga Estratehikong Pagsasaalang-alang + +- Ang mga deklarasyon ng kaaway ay one-way -- pwede kang magdeklara nang walang pahintulot nila, pero nakikita ka rin nilang hostile +- Bago magdeklara, suriin ang power ng target gamit ang /f info. Kung malakas sila, baka ikaw ang mawalan ng teritoryo +- Pahinain ang mga kaaway sa pamamagitan ng paulit-ulit na labanan para maubos ang power nila, pagkatapos ay i-overclaim ang lupa nila +- Walang limitasyon sa kung ilang kaaway ang pwede mong gawin, pero mapanganib ang paglaban sa maraming prente + +>[!TIP] Gamitin ang /f neutral para mag-de-escalate ng mga gulo. Minsan mas mahalaga ang estratehikong kapayapaan kaysa sa patuloy na giyera. + +>[!NOTE] Kung ikaw ay allied sa isang faction at idedeklara mo sila bilang kaaway, masisira muna ang alyansa. diff --git a/src/main/resources/Server/Languages/tl-PH/help/diplomacy/relations.md b/src/main/resources/Server/Languages/tl-PH/help/diplomacy/relations.md new file mode 100644 index 00000000..2533b9cf --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/diplomacy/relations.md @@ -0,0 +1,38 @@ +--- +id: diplomacy_relations +commands: relations +--- +# Mga Relasyon ng Faction + +Bawat pares ng faction ay may diplomatic relation na nagdedetermina kung paano sila mag-interact. May tatlong estado: Ally, Enemy, at Neutral. + +--- + +## Paghahambing ng mga Relasyon + +| Epekto | Ally | Neutral | Enemy | +|--------|------|---------|-------| +| PvP sa teritoryo | Naka-disable | Standard rules | Naka-enable | +| Territory protection | Mutual protection | Standard protection | Pwedeng mag-overclaim kung humina | +| Friendly fire | Naka-disable | N/A | Naka-enable kahit saan | +| Kulay sa map | Asul | Kulay-abo | Pula | +| Paano i-set | Mutual agreement | Default na estado | One-way na deklarasyon | +| Chat access | Ally chat channel | Wala | Wala | + +--- + +## Pagtingin ng mga Relasyon + +`/f relations` + +Ipinapakita ang lahat ng kasalukuyan mong mga alyansa, kaaway, at anumang pending alliance request. + +## Paano Gumagana ang mga Relasyon + +- Ang Neutral ang default na estado sa pagitan ng lahat ng faction. Standard server rules ang inaapply. +- Ang Alliance ay nangangailangan na sumang-ayon ang dalawang faction. Kahit sinong panig ay pwedeng sirain ito nang unilateral. +- Ang Enemy ay idedeklara nang one-way. Hindi kailangan ng kasunduan -- agad na mina-mark ang kabilang faction bilang iyong kaaway. + +>[!INFO] Ang mga relasyon ay pinapamahalaan ng mga Officer at Leader. Ang mga Member ay pwedeng tumingin ng mga relasyon pero hindi ito pwedeng baguhin. + +>[!TIP] Regular na gamitin ang /f relations para masubaybayan ang diplomatic landscape. Ang pag-alam kung sino ang mga kaaway mo ay tumutulong sa iyo na maghanda para sa mga territorial conflict. diff --git a/src/main/resources/Server/Languages/tl-PH/help/economy/commands.md b/src/main/resources/Server/Languages/tl-PH/help/economy/commands.md new file mode 100644 index 00000000..ce221ab1 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/economy/commands.md @@ -0,0 +1,27 @@ +--- +id: economy_commands +--- +# Mga Command ng Ekonomiya + +Mabilis na reference para sa lahat ng faction economy command. + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f balance | Tingnan ang treasury balance | Kahit sino | +| /f deposit (amount) | Mag-deposit sa treasury | Kahit sino | +| /f withdraw (amount) | Mag-withdraw mula sa treasury | Officer+ | +| /f money transfer (faction) (amount) | Mag-transfer sa ibang faction | Officer+ | +| /f money log [page] | Tingnan ang transaction history | Officer+ | + +--- + +## Mga Command Alias + +- /f balance ay pwede ring gamitin bilang /f bal +- /f deposit at /f withdraw ay tumatanggap ng decimal amount + +## Mga Kinakailangan sa Role + +Ang withdraw at transfer command ay limitado sa mga Officer at Leader. Lahat ng ibang economy command ay available sa kahit sinong faction member. + +>[!TIP] Gamitin ang /f money log para i-review ang mga kamakailang deposit, withdrawal, at transfer na may mga timestamp. diff --git a/src/main/resources/Server/Languages/tl-PH/help/economy/funds.md b/src/main/resources/Server/Languages/tl-PH/help/economy/funds.md new file mode 100644 index 00000000..0b94c3e6 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/economy/funds.md @@ -0,0 +1,42 @@ +--- +id: economy_funds +commands: deposit, withdraw +--- +# Pamamahala ng Pondo + +Ang mga faction member ay nagtutulungan para mapanatiling may pondo ang treasury sa pamamagitan ng mga deposit, withdrawal, at transfer. + +## Pagde-deposit + +Kahit sinong miyembro ay pwedeng mag-deposit ng personal na pondo sa faction treasury. + +`/f deposit ` +Mag-deposit mula sa personal balance mo papunta sa treasury. + +## Pag-withdraw + +Ang mga Officer at ang Leader ay pwedeng mag-withdraw ng pondo pabalik sa kanilang personal na balance. + +`/f withdraw ` +Mag-withdraw mula sa treasury papunta sa balance mo. (Officer+) + +## Pag-transfer + +Ang mga Officer ay pwedeng mag-transfer ng pondo nang direkta sa pagitan ng mga faction treasury para sa mga trade deal o diplomasya. + +`/f money transfer ` +Magpadala ng pondo sa treasury ng ibang faction. (Officer+) + +--- + +## Mga Bayarin + +| Transaksyon | Bayarin | +|------------|---------| +| Deposit | 0% | +| Withdraw | 0% | +| Transfer | 0% | + +>[!INFO] Ang mga rate ng bayarin ay configurable ng server at maaaring magkaiba sa mga default na ipinapakita sa itaas. + +>[!TIP] Lahat ng transaksyon ay naka-log. Gamitin ang /f money log para i-review ang kamakailang aktibidad. diff --git a/src/main/resources/Server/Languages/tl-PH/help/economy/treasury.md b/src/main/resources/Server/Languages/tl-PH/help/economy/treasury.md new file mode 100644 index 00000000..5d56335d --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/economy/treasury.md @@ -0,0 +1,26 @@ +--- +id: economy_treasury +commands: balance +--- +# Faction Treasury + +Bawat faction ay may shared treasury na nagsisilbing bangko ng faction. Ang mga pondo ay ginagamit para sa mga upkeep cost, territory maintenance, at faction operations. + +## Starting Balance + +Ang mga bagong faction ay nagsisimula sa 0 sa kanilang treasury. Kailangan ng mga miyembro na mag-deposit ng pondo para bumuo ng mga reserba. + +## Sino ang Pwedeng Mamahala + +- Kahit sinong miyembro ay pwedeng mag-deposit ng pondo +- Ang mga Officer at Leader ay pwedeng mag-withdraw at mag-transfer +- Ang Leader ay may buong kontrol sa treasury + +--- + +`/f balance` +Suriin ang kasalukuyang treasury balance ng faction mo. Available din bilang /f bal. + +>[!TIP] Mag-ambag nang regular para mapanatiling may pondo ang faction mo. Ang mga territory upkeep cost ay pwedeng mabilis na maubos ang walang laman na treasury. + +>[!INFO] Lahat ng treasury transaction ay naka-log at pwedeng i-review ng mga officer. diff --git a/src/main/resources/Server/Languages/tl-PH/help/economy/upkeep.md b/src/main/resources/Server/Languages/tl-PH/help/economy/upkeep.md new file mode 100644 index 00000000..0077655a --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/economy/upkeep.md @@ -0,0 +1,37 @@ +--- +id: economy_upkeep +--- +# Territory Upkeep + +Kailangang magbayad ng patuloy na upkeep ang mga faction para ma-maintain ang kanilang na-claim na teritoryo. Pinipigilan nito ang land hoarding at pinapanatiling dynamic ang map. + +## Mga Gastos sa Upkeep + +| Setting | Default | +|---------|---------| +| Gastos bawat chunk | 2.0 bawat cycle | +| Pagitan ng bayad | Bawat 24 oras | +| Libreng chunk | 3 (walang gastos) | +| Scaling mode | Flat rate | + +>[!NOTE] Ito ay mga default na halaga. Maaaring iba ang na-configure ng server administrator mo. + +Ang unang 3 chunk mo ay libre. Lagpas doon, bawat karagdagang na-claim na chunk ay nagkakahalaga ng 2.0 bawat payment cycle. + +## Auto-Pay + +Naka-enable ang auto-pay bilang default. Awtomatikong ibinabawas ng sistema ang upkeep mula sa treasury mo sa bawat interval. Walang manual na aksyon ang kailangan. + +--- + +## Grace Period + +Kung hindi kayang bayaran ng treasury mo ang upkeep, magsisimula ang 48-oras na grace period. May ipapadala na babala 6 oras bago magsimulang mawala ang mga claim. + +>[!WARNING] Kung hindi pa rin nababayaran ang upkeep pagkatapos ng grace period, mawawalan ang faction mo ng 1 claim bawat cycle hanggang sa mabayaran ang mga gastos o mawala ang lahat ng extra claim. + +## Halimbawa + +*Ang faction na may 8 claim ay nagbabayad para sa 5 chunk (8 minus 3 libre). Sa 2.0 bawat chunk, iyon ay 10.0 bawat cycle.* + +>[!TIP] Panatilihing may pondo ang treasury mo na mas mataas sa upkeep cost mo. Gamitin ang /f balance para suriin ang mga reserba mo. diff --git a/src/main/resources/Server/Languages/tl-PH/help/power_land/claiming.md b/src/main/resources/Server/Languages/tl-PH/help/power_land/claiming.md new file mode 100644 index 00000000..055d3a1f --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/power_land/claiming.md @@ -0,0 +1,50 @@ +--- +id: power_claiming +commands: claim, unclaim +--- +# Pag-claim ng Teritoryo + +Ang pag-claim ng chunk ay pinoprotektahan ito sa ilalim ng kontrol ng faction mo. Tanging mga faction member lamang ang pwedeng mag-build, mag-break, o mag-access ng mga container sa loob ng na-claim na teritoryo. + +--- + +## Paano Mag-claim + +`/f claim` + +Tumayo sa chunk na gusto mong i-claim at patakbuhin ang command na ito. Agad na mapoprotektahan ang chunk. Kailangan ng Officer rank o mas mataas pa. + +## Paano Mag-unclaim + +`/f unclaim` + +Binibitawan ang chunk kung saan ka nakatayo pabalik sa wilderness. Kailangan din ng Officer+. + +--- + +## Mga Patakaran sa Pag-claim + +| Patakaran | Default | +|-----------|---------| +| Power cost bawat claim | 2.0 power | +| Maximum claims | 100 bawat faction | +| Katabing chunk lang | Hindi (pwede kang mag-claim kahit saan) | + +>[!NOTE] Ito ay mga default na halaga. Maaaring iba ang na-configure ng server administrator mo. + +>[!INFO] Bawat claim ay nagkakahalaga ng 2.0 power para ma-maintain. Ang faction na may 50 kabuuang power ay pwedeng humawak ng hanggang 25 claim nang ligtas. + +--- + +## Ano ang Proteksyon na Ibinibigay + +Sa loob ng na-claim na teritoryo, ang sumusunod ay ipinapatupad bilang default: + +- Hindi pwedeng mag-break, mag-place, o mag-interact sa mga block ang mga outsider +- Ang mga ally ay pwedeng gumamit ng mga pinto, upuan, at transport pero hindi pwedeng mag-break o mag-place ng mga block +- Ang mga Member at Officer ay may buong access para mag-build, mag-break, at gumamit ng lahat +- Ang container access (mga chest, crate) ay limitado sa mga miyembro lamang + +>[!TIP] Pwede ka ring mag-claim nang direkta mula sa territory map. Buksan ang /f map at i-click ang mga unclaimed chunk para i-claim sila. + +>[!WARNING] Huwag mag-over-expand. Kung mawalan ng power ang faction mo dahil sa mga pagkamatay, ang mga claim na lagpas sa power budget mo ay magiging vulnerable sa overclaiming. diff --git a/src/main/resources/Server/Languages/tl-PH/help/power_land/losing_territory.md b/src/main/resources/Server/Languages/tl-PH/help/power_land/losing_territory.md new file mode 100644 index 00000000..7fc1b5c8 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/power_land/losing_territory.md @@ -0,0 +1,50 @@ +--- +id: power_losing +commands: overclaim +--- +# Pagkawala ng Teritoryo + +Kapag ang kabuuang power ng faction ay bumaba sa ibaba ng halaga ng mga claim nito, nagiging raidable ito. Pwedeng mag-overclaim ng mga chunk ang mga kaaway nang direkta mula sa ilalim mo. + +--- + +## Paano Gumagana ang Overclaiming + +`/f overclaim` + +Ang isang Officer o Leader mula sa isang enemy faction ay tumatayo sa iyong na-claim na chunk at pinapatakbo ang command na ito. Kung ang faction mo ay nasa power deficit, ililipat ang chunk sa kanilang faction. + +## Ang Pagkalkula + +Bawat claim ay nagkakahalaga ng 2.0 power para ma-maintain. Kung ang kabuuang power mo ay bumaba sa ibaba ng threshold na iyon, ang mga deficit chunk ay vulnerable. + +>[!NOTE] Ito ay mga default na halaga. Maaaring iba ang na-configure ng server administrator mo. + +>[!WARNING] Ang overclaiming ay permanente. Kapag nakuha na ng kaaway ang isang chunk, kailangan mong i-reclaim ito (o i-overclaim pabalik kung humina sila). + +--- + +## Halimbawang Senaryo + +| Salik | Halaga | +|-------|--------| +| Mga Miyembro | 5 manlalaro | +| Power bawat miyembro | 10 bawat isa (simula) | +| Kabuuang power | 50 | +| Mga Claim | 30 chunk | +| Power na kailangan (30 x 2.0) | 60 | +| Deficit | Kulang ng 10 power | + +Sa halimbawang ito, raidable na ang faction sa simula pa lang. Pwedeng mag-overclaim ang mga kaaway ng hanggang 5 chunk (10 deficit / 2.0 bawat claim) bago maabot ng faction ang equilibrium. + +--- + +## Paano Mapigilan ang Overclaiming + +- Huwag mag-over-expand -- palaging panatilihing mas mataas ang kabuuang power sa halaga ng claim mo na may buffer +- Manatiling aktibo -- ang power ay nagre-regenerate lang habang online (+0.1/min) +- Iwasan ang mga hindi kinakailangang pagkamatay -- bawat pagkamatay ay nagkakahalaga ng 1.0 power +- Mag-recruit ng mas maraming miyembro -- mas maraming manlalaro ay mas maraming kabuuang power +- I-unclaim ang mga hindi ginagamit na chunk -- i-free up ang power gamit ang /f unclaim + +>[!TIP] Regular na suriin ang power status mo gamit ang /f power. Kung malapit na ang kabuuang power mo sa halaga ng claim, pag-isipang i-unclaim ang mga hindi gaanong mahalagang chunk bago mag-giyera. diff --git a/src/main/resources/Server/Languages/tl-PH/help/power_land/territory_map.md b/src/main/resources/Server/Languages/tl-PH/help/power_land/territory_map.md new file mode 100644 index 00000000..82951280 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/power_land/territory_map.md @@ -0,0 +1,44 @@ +--- +id: power_map +commands: map +--- +# Ang Territory Map + +Ang territory map ay nagbibigay sa iyo ng bird's-eye view ng mga na-claim na chunk sa iyong lugar, na nagpapakita kung aling mga faction ang nagkokontrol ng lupa sa paligid mo. + +--- + +## Pagbukas ng Map + +`/f map` + +Binubuksan ang territory map GUI na naka-sentro sa kasalukuyan mong lokasyon. + +--- + +## Gabay sa Kulay + +| Kulay | Kahulugan | +|-------|-----------| +| [#55FF55] Kulay ng faction mo | Teritoryong na-claim ng faction mo | +| [#5555FF] Asul | Teritoryo ng allied faction | +| [#FF5555] Pula | Teritoryo ng enemy faction | +| [#AAAAAA] Kulay-abo | Teritoryo ng neutral faction | +| [#333333] Madilim | Wilderness (hindi na-claim na lupa) | +| [#FFAA00] Ginto | Mga espesyal na zone (safezone, warzone) | + +>[!INFO] Ang kulay ng faction mo sa map ay tumutugma sa kulay na na-set mo sa faction color setting. Ang mga ally at enemy ay gumagamit ng mga fixed na kulay para madaling makilala. + +--- + +## I-click para Mag-claim + +Ang map ay hindi lang para sa pagtingin -- pwede kang direktang mag-interact dito. + +- I-click ang isang unclaimed chunk para i-claim ito (kailangan ng Officer+ rank at sapat na power) +- I-click ang isang na-claim na chunk para makita kung aling faction ang nagmamay-ari nito +- Mag-scroll o mag-pan para i-explore ang lugar sa paligid mo + +>[!TIP] Ang map ang pinakamadaling paraan para planuhin ang pagpapalawak ng teritoryo mo. Maghanap ng mga unclaimed na lugar malapit sa base mo at mag-claim nang estratehiko para gumawa ng magkakasunod na hangganan. + +>[!NOTE] Ang map ay nagpapakita ng isang fixed na lugar sa paligid ng posisyon mo. Lumipat sa ibang lokasyon at buksan ulit ito para makita ang ibang parte ng mundo. diff --git a/src/main/resources/Server/Languages/tl-PH/help/power_land/understanding_power.md b/src/main/resources/Server/Languages/tl-PH/help/power_land/understanding_power.md new file mode 100644 index 00000000..0af2d066 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/power_land/understanding_power.md @@ -0,0 +1,45 @@ +--- +id: power_understanding +commands: power +--- +# Pag-unawa sa Power + +Ang power ang pangunahing resource na nagdedetermina kung gaano karaming teritoryo ang kayang hawakan ng faction mo. Bawat manlalaro ay may personal power na nag-aambag sa kabuuang power ng faction. + +--- + +## Mga Default na Halaga ng Power + +| Setting | Halaga | +|---------|--------| +| Maximum power bawat manlalaro | 20 | +| Starting power | 10 | +| Parusa sa pagkamatay | -1.0 bawat pagkamatay | +| Reward sa pag-patay | 0.0 | +| Regen rate | +0.1 bawat minuto (habang online) | +| Power cost bawat claim | 2.0 | +| Logout habang naka-tag | -1.0 karagdagan | + +>[!NOTE] Ito ay mga default na halaga. Maaaring iba ang na-configure ng server administrator mo. + +## Paano Ito Gumagana + +Ang kabuuang power ng faction mo ay ang suma ng personal power ng bawat miyembro. Ang kinakailangang power ay ang bilang ng mga claim na pinarami ng 2.0. Hangga't nananatiling mas mataas ang kabuuang power kaysa sa kinakailangang power, ligtas ang teritoryo mo. + +>[!INFO] Ang power ay pasibong nagre-regenerate sa 0.1 bawat minuto habang online ka. Sa rate na iyon, ang pagre-recover ng 1.0 power ay tumatagal ng mga 10 minuto. + +--- + +## Pagsuri ng Power Mo + +`/f power` + +Ipinapakita ang personal power mo, ang kabuuang power ng faction mo, at kung magkano ang kailangan para ma-maintain ang kasalukuyang mga claim. + +## Ang Danger Zone + +Kung bumaba ang kabuuang power sa ibaba ng kinakailangang halaga para sa mga claim mo, nagiging vulnerable ang faction mo. Pwedeng mag-overclaim ng mga chunk ang mga kaaway. + +>[!WARNING] Ang sunud-sunod na pagkamatay sa maikling panahon ay pwedeng mabilis na bumigat. Kung mayroon kang 5 miyembro na may 10 power bawat isa (50 kabuuan) at 20 claim (40 kailangan), 5 pagkamatay lang sa team mo ay bumababa sa 45 -- ligtas pa. Pero 11 pagkamatay ay naglalagay sa iyo sa 39, mas mababa sa 40 threshold. + +>[!TIP] Panatilihin ang power buffer. Huwag i-claim ang lahat ng chunk na kaya mong bayaran -- mag-iwan ng puwang para sa ilang pagkamatay nang hindi nagiging raidable. diff --git a/src/main/resources/Server/Languages/tl-PH/help/quick_ref/all_commands.md b/src/main/resources/Server/Languages/tl-PH/help/quick_ref/all_commands.md new file mode 100644 index 00000000..2838a71d --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/quick_ref/all_commands.md @@ -0,0 +1,94 @@ +--- +id: quickref_commands +--- +# Lahat ng Command + +## Core + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f | Buksan ang faction menu | Kahit sino | +| /f help | Buksan ang help center | Kahit sino | +| /f create (name) | Gumawa ng faction | Kahit sino | +| /f disband | I-delete ang faction mo | Leader | +| /f leave | Umalis sa faction mo | Kahit sino | + +## Membership + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f invite (player) | Mag-invite ng manlalaro | Officer+ | +| /f accept [faction] | Tanggapin ang invite | Kahit sino | +| /f request (faction) | Mag-request na sumali | Kahit sino | +| /f kick (player) | Tanggalin ang miyembro | Officer+ | +| /f promote (player) | I-promote sa Officer | Leader | +| /f demote (player) | I-demote sa Member | Leader | +| /f transfer (player) | Ilipat ang leadership | Leader | + +## Teritoryo + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f claim | I-claim ang kasalukuyang chunk | Officer+ | +| /f unclaim | Bitawan ang kasalukuyang chunk | Officer+ | +| /f overclaim | Kunin ang mahinang chunk | Officer+ | +| /f map | Buksan ang territory map | Kahit sino | + +## Teleport + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f home | Mag-teleport sa faction home | Kahit sino | +| /f sethome | I-set ang faction home | Officer+ | +| /f delhome | I-delete ang faction home | Officer+ | +| /f stuck | Tumakas sa enemy territory | Kahit sino | + +## Impormasyon + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f info [faction] | Tingnan ang mga detalye ng faction | Kahit sino | +| /f list | I-browse ang lahat ng faction | Kahit sino | +| /f members | Tingnan ang roster | Kahit sino | +| /f who [player] | Tingnan ang info ng manlalaro | Kahit sino | +| /f power [player] | Suriin ang power level | Kahit sino | +| /f invites | Pamahalaan ang mga invite/request | Kahit sino | +| /f relations | Tingnan ang mga diplomatic relation | Kahit sino | + +## Diplomasya + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f ally (faction) | Mag-request ng alyansa | Officer+ | +| /f enemy (faction) | Magdeklara ng kaaway | Officer+ | +| /f neutral (faction) | I-reset sa neutral | Officer+ | + +## Settings + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f settings | Buksan ang settings GUI | Officer+ | +| /f rename (name) | Palitan ang pangalan ng faction | Leader | +| /f desc [text] | I-set ang description | Officer+ | +| /f color (code) | I-set ang kulay ng faction | Officer+ | +| /f open | Payagang kahit sino sumali | Leader | +| /f close | Kailangang may imbitasyon | Leader | + +## Ekonomiya + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f balance | Tingnan ang treasury | Kahit sino | +| /f deposit (amount) | Mag-deposit ng pondo | Kahit sino | +| /f withdraw (amount) | Mag-withdraw ng pondo | Officer+ | +| /f money transfer (faction) (amt) | Mag-transfer ng pondo | Officer+ | +| /f money log [page] | Transaction history | Officer+ | + +## Chat + +| Command | Paglalarawan | Role | +|---------|-------------|------| +| /f c | I-cycle ang chat mode | Kahit sino | +| /f c f | I-set sa faction chat | Kahit sino | +| /f c a | I-set sa ally chat | Kahit sino | +| /f c off | I-set sa public chat | Kahit sino | diff --git a/src/main/resources/Server/Languages/tl-PH/help/welcome/getting_started.md b/src/main/resources/Server/Languages/tl-PH/help/welcome/getting_started.md new file mode 100644 index 00000000..8e8ed8f3 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/welcome/getting_started.md @@ -0,0 +1,38 @@ +--- +id: welcome_started +commands: gui, menu +--- +# Pagsisimula + +Maligayang pagdating sa HyperFactions! Narito kung paano makakapagsimula ka sa ilang hakbang lang. + +--- + +## Hakbang 1: Buksan ang Faction Menu + +I-type ang /f para buksan ang pangunahing faction GUI. Ito ang sentro ng lahat -- pag-browse ng mga faction, paglikha ng sarili mo, at pamamahala ng mga imbitasyon. + +## Hakbang 2: Pumili ng Landas + +| Opsyon | Paano | +|--------|-------| +| Mag-browse ng bukas na faction | I-click ang Browse sa menu at pindutin ang Join sa kahit anong bukas na faction. | +| Tanggapin ang imbitasyon | Tingnan ang Invites tab. Kung may nag-invite sa iyo, i-click ang Accept. | +| Gumawa ng sarili | I-click ang Create Faction, pumili ng pangalan, at ikaw ang magiging Leader. | + +## Hakbang 3: I-explore ang Faction Mo + +Kapag nasa loob ka na ng faction, makikita mo ang Faction Dashboard na may roster, territory map, relations, at settings. + +>[!TIP] Kung bago ka pa lang, subukan munang sumali sa isang existing faction. Mas mabilis kang matututo kung may kasamang experienced members. + +--- + +## Mga Pangunahing Unang Command + +- /f -- Binubuksan ang faction GUI +- /f home -- Mag-teleport sa home base ng faction mo +- /f c -- I-cycle ang chat mode sa pagitan ng Normal, Faction, at Ally +- /f map -- Tingnan ang territory map sa paligid mo + +>[!TIP] Pwede ka ring mag-type ng /f help sa chat para sa mabilis na command reference kahit kailan. diff --git a/src/main/resources/Server/Languages/tl-PH/help/welcome/quick_tips.md b/src/main/resources/Server/Languages/tl-PH/help/welcome/quick_tips.md new file mode 100644 index 00000000..17929ce9 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/welcome/quick_tips.md @@ -0,0 +1,44 @@ +--- +id: welcome_tips +--- +# Mga Mabilisang Tip + +Mga kapaki-pakinabang na payo na naka-organisa ayon sa kategorya para makatulong sa iyo. + +--- + +## Teritoryo + +- Mag-claim ng lupa sa paligid ng base mo nang maaga gamit ang `/f claim` -- walang **proteksyon** ang mga build na hindi naka-claim +- Bawat claim ay nangangailangan ng **2.0 power** para ma-maintain, kaya huwag mag-over-expand nang higit sa kaya ng mga miyembro mo +- Gamitin ang `/f map` para mag-scout ng mga kalapit na claim at humanap ng ligtas na lugar para mag-build +- I-unclaim ang mga chunk na hindi mo na kailangan gamit ang `/f unclaim` para ma-free up ang power + +## Labanan + +- Ang pagkamatay ay nagkakahalaga ng **1.0 power** -- iwasan ang mga hindi kinakailangang away kapag malapit na ang faction mo sa claim limit +- Mayroon kang **5 segundo ng spawn protection** pagkatapos mag-respawn +- Ang combat tagging ay tumatagal ng **15 segundo** -- ang pag-logout habang naka-tag ay nagdudulot ng dagdag na power loss +- Ang friendly fire ay **naka-disable** sa pagitan ng mga faction member at ally bilang default + +>[!WARNING] Ang pag-logout habang naka-combat tag ay may karagdagang power loss (1.0 bawat logout). Manatili at lumaban o tumakas muna. + +## Sosyal + +- Gamitin ang `/f c` para mag-cycle sa mga chat mode para manatiling pribado ang usapan ng faction +- Mag-invite ng mga pinagkakatiwalaang manlalaro gamit ang `/f invite ` -- nag-e-expire ang mga imbitasyon pagkalipas ng **5 minuto** +- Bumuo ng mga alyansa gamit ang `/f ally ` para sa mutual protection at shared map visibility +- Tingnan ang `/f relations` para makita ang buong diplomatic status mo + +## Ekonomiya + +>[!TIP] Kung naka-enable ang economy sa server, ang faction mo ay maaaring mag-ipon ng treasury. Ang mga miyembro ay pwedeng mag-deposit, pero ang mga Officer at Leader lang ang pwedeng mag-withdraw o mag-transfer ng pondo. + +- Mag-deposit ng pondo gamit ang treasury GUI para palakasin ang faction mo +- Ang mas mayamang faction ay kayang mag-afford ng mas maraming claim at mas mabilis na makaka-recover sa mga setback + +## Pangkalahatan + +- I-type ang `/f` kahit kailan para buksan ang faction dashboard mo -- lahat ay accessible mula doon +- I-promote ang mga aktibong miyembro sa Officer para makatulong sila sa pag-claim at pamamahala ng teritoryo +- Panatilihing aktibo ang faction mo -- ang power ay nagre-regenerate lang habang **online** ang mga manlalaro diff --git a/src/main/resources/Server/Languages/tl-PH/help/welcome/what_are_factions.md b/src/main/resources/Server/Languages/tl-PH/help/welcome/what_are_factions.md new file mode 100644 index 00000000..2b8c18ff --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/welcome/what_are_factions.md @@ -0,0 +1,37 @@ +--- +id: welcome_what +--- +# Ano ang Factions? + +Ang mga faction ay mga team na pinapatakbo ng mga manlalaro na nag-claim ng teritoryo, nagtatayo ng mga base, at nagkukumpitensya para sa dominasyon. Kapag sumali ka o gumawa ng faction, magkakaroon ka ng access sa protected land, shared home, private chat, at mga diplomatic tool. + +>[!TIP] Ang Factions ay tungkol sa teamwork. Mas maraming aktibong miyembro, mas malakas ang faction mo. + +--- + +## Mga Pangunahing Mekanismo + +| Mekanismo | Ano ang Ginagawa | +|-----------|-----------------| +| Power | Bawat manlalaro ay nagge-generate ng power sa paglipas ng panahon (max 20). Ang kabuuang power ng faction mo ang nagdedetermina kung gaano karaming lupa ang pwede mong hawakan. | +| Claims | Ang mga na-claim na chunk ay protektado -- tanging mga miyembro lang ang pwedeng mag-build, mag-break, o mag-bukas ng mga container sa loob nito. Bawat claim ay nagkakahalaga ng 2.0 power para ma-maintain. | +| Relations | Ang mga faction ay pwedeng bumuo ng mga alyansa para sa mutual protection o magdeklara ng mga kaaway para ma-enable ang PvP at territorial aggression. | +| Roles | Tatlong ranggo -- Leader, Officer, Member -- bawat isa ay may iba't ibang kakayahan. | + +--- + +## Paano Gumagana ang Lakas + +Ang lakas ng faction mo ay nanggagaling sa mga miyembro nito. Bawat manlalaro ay nagsisimula sa 10 power at nagre-regenerate hanggang 20 habang online. Ang pagkamatay ay nagpapalugi ng power. Kung ang kabuuang power ng faction ay bumaba sa ibaba ng halaga ng mga claim mo, ang mga kaaway ay pwedeng mag-overclaim sa teritoryo mo. + +>[!WARNING] Ang isang pagkamatay ay nagkakahalaga ng 1.0 power. Ang sunud-sunod na pagkamatay sa maikling panahon ay pwedeng magpahina sa faction mo laban sa overclaiming. + +--- + +## Diplomasya sa Isang Tingin + +- **Allies** -- Mga mutual agreement na pumipigil sa friendly fire at nagpoprotekta sa teritoryo ng isa't isa +- **Enemies** -- Mga one-way na deklarasyon na nag-e-enable ng PvP sa lupa ng isa't isa at nagpapahintulot ng overclaiming +- **Neutral** -- Ang default na estado sa pagitan ng lahat ng faction na may standard rules + +>[!INFO] Maaari mong pamahalaan ang lahat ng ito sa pamamagitan ng in-game GUI sa pag-type ng `/f` o sa pamamagitan ng mga chat command. diff --git a/src/main/resources/Server/Languages/tl-PH/help/your_faction/creating.md b/src/main/resources/Server/Languages/tl-PH/help/your_faction/creating.md new file mode 100644 index 00000000..86cdc752 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/your_faction/creating.md @@ -0,0 +1,38 @@ +--- +id: faction_creating +commands: create +--- +# Paglikha ng Faction + +Ang paggawa ng sarili mong faction ay ginagawa kang Leader na may buong kontrol sa settings, mga miyembro, at teritoryo. + +--- + +## Paano Gumawa + +`/f create ` + +Gagawa ito ng faction mo at agad na magbubukas ng Faction Dashboard kung saan pwede kang magsimulang mag-invite ng mga miyembro, mag-claim ng lupa, at mag-configure ng settings. + +## Mga Patakaran sa Pangalan + +| Patakaran | Kinakailangan | +|-----------|--------------| +| Haba | Sa pagitan ng 3 at 24 na character | +| Mga Character | Mga letra, numero, at espasyo lamang | +| Natatangi | Walang dalawang faction ang pwedeng magkapareho ng pangalan | + +>[!WARNING] Piliin nang mabuti ang pangalan mo. Ang pag-rename sa ibang pagkakataon ay nangangailangan ng Leader permissions at maaaring may cooldown. + +--- + +## Ano ang Mangyayari sa Paglikha + +- Magiging Leader ka (pinakamataas na ranggo) +- Ang faction mo ay magsisimula sa 0 claim at ang personal power mo (10 bilang default) +- Awtomatikong magbubukas ang faction dashboard +- Pwede kang agad mag-invite ng mga manlalaro, mag-claim ng teritoryo, at mag-set ng faction home + +>[!INFO] Kung naka-enable ang economy integration sa server, ang paggawa ng faction ay maaaring may bayad. Ang creation cost ay itinatakda ng server administrator. + +>[!TIP] Pagkatapos gumawa, ang mga unang priority mo ay: mag-invite ng mga kaibigan, humanap ng lokasyon para sa base, at i-claim ito. diff --git a/src/main/resources/Server/Languages/tl-PH/help/your_faction/joining.md b/src/main/resources/Server/Languages/tl-PH/help/your_faction/joining.md new file mode 100644 index 00000000..71eca1ba --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/your_faction/joining.md @@ -0,0 +1,36 @@ +--- +id: faction_joining +commands: accept, join, request +--- +# Pagsali sa Faction + +May tatlong paraan para sumali sa isang existing faction, depende sa kung paano naka-configure ang faction. + +--- + +## Paghahambing ng mga Paraan + +| Paraan | Paano | Kinakailangan | +|--------|-------|---------------| +| Browse at Join | Buksan ang /f, i-click ang Browse, i-click ang Join | Ang faction ay naka-set sa open | +| Tanggapin ang Invite | Tingnan ang Invites tab sa /f menu | Aktibong imbitasyon | +| Mag-request na Sumali | Gamitin ang /f request, maghintay ng approval | Kailangang mag-approve ang Officer o Leader | + +--- + +## Mga Detalye ng Invite + +- Ang mga imbitasyon ay ipinapadala ng mga Officer o Leader +- Nag-e-expire ang mga imbitasyon pagkalipas ng 5 minuto -- tanggapin agad +- Tingnan ang mga pending invite mo sa Invites tab ng faction menu +- Tanggapin gamit ang GUI o /f accept + +## Mga Join Request + +- Gamitin ang /f request para mag-request ng membership sa isang closed faction +- Nag-e-expire ang mga request pagkalipas ng 24 oras kung walang aksyon +- Ang mga Officer at Leader ay pwedeng mag-approve o mag-deny ng mga request mula sa faction dashboard + +>[!TIP] Hindi sigurado kung saan sasali? Gamitin ang Browse tab sa /f para makita ang mga faction description, bilang ng miyembro, at kung open sila o invite-only. + +>[!NOTE] Bawat faction ay pwedeng magkaroon ng hanggang 50 miyembro bilang default. Kung puno na ang faction, kailangan mong maghintay ng bakanteng slot. diff --git a/src/main/resources/Server/Languages/tl-PH/help/your_faction/managing.md b/src/main/resources/Server/Languages/tl-PH/help/your_faction/managing.md new file mode 100644 index 00000000..dbc9701b --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/your_faction/managing.md @@ -0,0 +1,44 @@ +--- +id: faction_managing +commands: invite, kick, promote, demote, transfer +--- +# Pamamahala ng mga Miyembro + +Ang mga Officer at Leader ay magkasamang responsable sa pamamahala ng faction roster. Narito ang mga pangunahing command at kung sino ang pwedeng gumamit. + +--- + +## Mga Command + +| Command | Ano ang Ginagawa | Kinakailangang Role | +|---------|-----------------|---------------------| +| `/f invite ` | Nagpapadala ng join invitation (nag-e-expire sa 5 min) | Officer+ | +| `/f kick ` | Tinatanggal ang isang miyembro mula sa faction | Officer+ (tingnan ang note) | +| `/f promote ` | Pino-promote ang isang Member sa Officer | Leader lamang | +| `/f demote ` | Dine-demote ang isang Officer sa Member | Leader lamang | +| `/f transfer ` | Inilipat ang faction ownership | Leader lamang | + +>[!NOTE] Ang mga Officer ay pwede lang mag-kick ng mga Member. Para tanggalin ang ibang Officer, kailangang i-demote muna sila ng Leader o direktang i-kick. + +--- + +## Mga Imbitasyon + +- Nag-e-expire ang mga imbitasyon pagkalipas ng 5 minuto kung hindi tanggapin +- Makikita ng inimbitahang manlalaro ito sa kanilang Invites tab kapag binuksan ang /f +- Walang limitasyon sa kung ilang imbitasyon ang pwede mong ipadala nang sabay-sabay +- Ang faction mo ay pwedeng magkaroon ng hanggang 50 miyembro sa kabuuan + +## Mga Promotion at Demotion + +- Tanging ang Leader lang ang pwedeng mag-promote o mag-demote +- Ang /f promote ay itinaas ang isang Member sa Officer +- Ang /f demote ay ibinababa ang isang Officer pabalik sa Member + +## Paglipat ng Leadership + +>[!WARNING] Ang paglipat ng leadership ay hindi na pwedeng i-undo. Ide-demote ka sa Officer at ang target na manlalaro ang magiging bagong Leader. Siguraduhing lubos kang nagtitiwala sa kanya. + +`/f transfer ` + +Ang target ay kailangang kasalukuyang miyembro ng faction mo. diff --git a/src/main/resources/Server/Languages/tl-PH/help/your_faction/roles.md b/src/main/resources/Server/Languages/tl-PH/help/your_faction/roles.md new file mode 100644 index 00000000..7cf15ba3 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/help/your_faction/roles.md @@ -0,0 +1,44 @@ +--- +id: faction_roles +--- +# Mga Role at Ranggo + +Bawat faction ay may tatlong role sa mahigpit na hierarchy. Ang mas mataas na role ay nag-inherit ng lahat ng kakayahan ng mga role sa ibaba nila. + +--- + +## Breakdown ng mga Permiso + +| Aksyon | Leader | Officer | Member | +|--------|--------|---------|--------| +| Mag-build sa teritoryo | Oo | Oo | Oo | +| Gamitin ang faction home | Oo | Oo | Oo | +| Faction at ally chat | Oo | Oo | Oo | +| Mag-invite ng mga manlalaro | Oo | Oo | Hindi | +| Mag-kick ng mga miyembro | Oo | Oo (Members lamang) | Hindi | +| Mag-claim / mag-unclaim ng lupa | Oo | Oo | Hindi | +| Mag-overclaim ng enemy territory | Oo | Oo | Hindi | +| Mag-set ng faction home | Oo | Oo | Hindi | +| Mag-delete ng faction home | Oo | Oo | Hindi | +| Mamahala ng relations (ally/enemy) | Oo | Oo | Hindi | +| Tingnan ang faction logs | Oo | Oo | Hindi | +| Mag-promote sa Officer | Oo | Hindi | Hindi | +| Mag-demote mula sa Officer | Oo | Hindi | Hindi | +| Palitan ang pangalan ng faction | Oo | Hindi | Hindi | +| Mag-set ng description / tag / color | Oo | Hindi | Hindi | +| Buksan / isara ang faction | Oo | Hindi | Hindi | +| I-access ang faction settings | Oo | Hindi | Hindi | +| Ilipat ang leadership | Oo | Hindi | Hindi | +| I-disband ang faction | Oo | Hindi | Hindi | + +>[!NOTE] Ang mga Officer ay pwedeng mag-kick ng mga Member pero hindi pwedeng mag-kick ng ibang Officer. Tanging ang Leader lamang ang pwedeng magtanggal ng mga Officer. + +--- + +## Mga Detalye ng Role + +- Leader -- Isa lang bawat faction. May buong kontrol sa lahat ng settings, miyembro, at teritoryo. Pwedeng ilipat ang ownership sa ibang miyembro. +- Officer -- Mga pinagkakatiwalaang miyembro na tumutulong sa pamamahala ng faction. Pwedeng mag-invite, mag-kick ng miyembro, mag-claim ng lupa, at humawak ng diplomasya. +- Member -- Ang default na role kapag sumali. Pwedeng mag-build sa teritoryo, gamitin ang faction home, at sumali sa faction chat. + +>[!TIP] I-promote ang pinaka-aktibo at pinagkakatiwalaang miyembro mo sa Officer para makatulong sila sa pamamahala ng teritoryo at pag-recruit ng bagong mga manlalaro. diff --git a/src/main/resources/Server/Languages/tl-PH/hyperfactions.lang b/src/main/resources/Server/Languages/tl-PH/hyperfactions.lang new file mode 100644 index 00000000..7a248789 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/hyperfactions.lang @@ -0,0 +1,453 @@ +# HyperFactions - Filipino (Tagalog) na mga Salin +# Format: key = value (o key = "quoted value") +# Note: Ang mga key ay awtomatikong may prefix na "hyperfactions." mula sa I18nModule ng Hytale +# Mga Placeholder: {0}, {1}, atbp. + +# ========== Karaniwan ========== +common.no_permission = Wala kang pahintulot na gawin iyan. +common.not_in_faction = Wala ka sa isang paksyon. +common.already_in_faction = Kasapi ka na ng isang paksyon. +common.player_not_found = Hindi nahanap ang manlalaro. +common.faction_not_found = Hindi nahanap ang paksyon. +common.player_not_online = Ang manlalaro ay hindi online. +common.must_be_leader = Tanging ang pinuno ng paksyon lamang ang makakagawa niyan. +common.must_be_officer = Dapat ikaw ay isang Opisyal o Pinuno upang gawin iyan. +common.combat_tagged = Hindi mo magagawa iyan habang may combat tag. +common.cancel = Kanselahin +common.confirm = Kumpirmahin +common.save = I-save +common.close = Isara +common.clear = I-clear +common.back = Bumalik +common.leave = Umalis +common.transfer = Ilipat +common.disband = Buwagin +common.world_fallback = mundo +common.yes = Oo +common.no = Hindi +common.loading = Naglo-load... +common.online = Online +common.offline = Offline +common.enabled = Naka-enable +common.disabled = Naka-disable +common.none = Wala +common.page = Pahina {0} ng {1} +common.unknown = Hindi alam +common.error_generic = May nangyaring mali. Pakisubukan muli. +common.gui_fallback = Hindi ma-access ang GUI. Gamitin ang /f help para sa mga utos. +common.admin_prefix = [Admin] +common.location_error = Hindi matukoy ang iyong lokasyon. +common.world_error = Hindi matukoy ang iyong mundo. +common.invalid_id = Hindi wastong faction ID. +common.na = N/A + +# ========== Mga Utos - Gumawa ========== +cmd.create.no_permission = Wala kang pahintulot na gumawa ng mga paksyon. +cmd.create.usage = Paggamit: /f create +cmd.create.success = Nalikha ang paksyon na '{0}'! +cmd.create.already_in_named = Kasapi ka na ng {0}. +cmd.create.use_leave_first = Gamitin muna ang /f leave kung gusto mong gumawa ng bagong paksyon. +cmd.create.name_taken = Ang pangalan ng paksyon na iyon ay nakuha na. +cmd.create.name_too_short = Masyadong maikli ang pangalan ng paksyon. +cmd.create.name_too_long = Masyadong mahaba ang pangalan ng paksyon. +cmd.create.failed = Nabigo ang paggawa ng paksyon. + +# ========== Mga Utos - Buwagin ========== +cmd.disband.no_permission = Wala kang pahintulot na buwagin ang mga paksyon. +cmd.disband.not_leader = Tanging ang pinuno ng paksyon lamang ang maaaring bumuag. +cmd.disband.confirm_prompt = Sigurado ka bang gusto mong buwagin ang iyong paksyon? +cmd.disband.confirm_instruction = I-type ang /f disband --text muli sa loob ng {0} segundo upang kumpirmahin. +cmd.disband.success = Ang iyong paksyon ay nabuag na. +cmd.disband.failed = Nabigo ang pagbuag ng paksyon. +cmd.disband.cancelled = Kinansela ang nakaraang kumpirmasyon. I-type muli upang kumpirmahin ang pagbuag. + +# ========== Mga Utos - Palitan ang Pangalan ========== +cmd.rename.no_permission = Wala kang pahintulot. +cmd.rename.not_leader = Tanging ang pinuno lamang ang maaaring magpalit ng pangalan ng paksyon. +cmd.rename.usage = Paggamit: /f rename +cmd.rename.too_short = Masyadong maikli ang pangalan (minimum {0} karakter). +cmd.rename.too_long = Masyadong mahaba ang pangalan (maximum {0} karakter). +cmd.rename.name_taken = Ang pangalan na iyon ay nakuha na. +cmd.rename.success = Ang paksyon ay pinalitan ng pangalan sa {0}! +cmd.rename.broadcast = Pinalitan ni {0} ang pangalan ng paksyon sa {1} + +# ========== Mga Utos - Deskripsyon ========== +cmd.desc.no_permission = Wala kang pahintulot. +cmd.desc.not_officer = Dapat ikaw ay isang opisyal upang magtakda ng deskripsyon. +cmd.desc.set = Naitakda na ang deskripsyon ng paksyon! +cmd.desc.cleared = Na-clear na ang deskripsyon ng paksyon. + +# ========== Mga Utos - Buksan / Isara ========== +cmd.open.no_permission = Wala kang pahintulot. +cmd.open.not_leader = Tanging ang pinuno lamang ang maaaring magbago ng setting na ito. +cmd.open.already_open = Bukas na ang iyong paksyon. +cmd.open.success = Bukas na ang iyong paksyon! Kahit sino ay maaaring sumali gamit ang /f join. +cmd.open.broadcast = Binuksan ni {0} ang paksyon para sa malayang pagsali. +cmd.close.no_permission = Wala kang pahintulot. +cmd.close.not_leader = Tanging ang pinuno lamang ang maaaring magbago ng setting na ito. +cmd.close.already_closed = Sarado na ang iyong paksyon. +cmd.close.success = Ang iyong paksyon ay sa pamamagitan na lamang ng imbitasyon. +cmd.close.broadcast = Isinara ni {0} ang paksyon sa pamamagitan lamang ng imbitasyon. + +# ========== Mga Utos - Kulay ========== +cmd.color.no_permission = Wala kang pahintulot. +cmd.color.not_officer = Dapat ikaw ay isang opisyal upang magpalit ng kulay. +cmd.color.colors_disabled = Ang mga kulay ng paksyon ay naka-disable. +cmd.color.usage = Paggamit: /f color +cmd.color.usage_hint = Mga wastong code: 0-9, a-f o #RRGGBB hex +cmd.color.invalid = Hindi wastong kulay. Gamitin ang 0-9, a-f, o #RRGGBB. +cmd.color.success = Na-update na ang kulay ng paksyon! + +# ========== Mga Utos - Claim ========== +cmd.claim.no_permission = Wala kang pahintulot na mag-claim ng teritoryo. +cmd.claim.already_yours = Pagmamay-ari na ng iyong paksyon ang chunk na ito. +cmd.claim.cannot_claim_ally = Hindi mo maaaring i-claim ang teritoryo ng kakampi. +cmd.claim.already_claimed_hint = Ang chunk na ito ay naka-claim na. Gamitin ang /f overclaim kung sila ay raidable. +cmd.claim.success = Na-claim ang chunk sa {0}, {1}! +cmd.claim.not_officer = Dapat ikaw ay isang opisyal upang mag-claim ng lupa. +cmd.claim.already_claimed = Ang chunk na ito ay naka-claim na. +cmd.claim.max_claims = Naabot na ng iyong paksyon ang maximum na claim. Kumuha ng higit pang kapangyarihan! +cmd.claim.not_adjacent = Dapat kang mag-claim na katabi ng umiiral na teritoryo. +cmd.claim.world_not_allowed = Hindi pinapayagan ang pag-claim sa mundong ito. +cmd.claim.orbisguard = Ang lugar na ito ay protektado ng OrbisGuard. +cmd.claim.zone_protected = Ang chunk na ito ay nasa safezone o warzone. +cmd.claim.insufficient_power = Kulang ang kapangyarihan ng iyong paksyon upang mag-claim ng higit pang lupa. +cmd.claim.failed = Nabigo ang pag-claim ng chunk. + +# ========== Mga Utos - Imbitahan ========== +cmd.invite.no_permission = Wala kang pahintulot na mag-imbita ng mga manlalaro. +cmd.invite.not_officer = Dapat ikaw ay isang opisyal upang mag-imbita ng mga manlalaro. +cmd.invite.usage = Paggamit: /f invite +cmd.invite.player_not_found = Hindi nahanap o offline ang manlalaro na si '{0}'. +cmd.invite.target_in_faction = Ang manlalarong iyon ay kasapi na ng isang paksyon. +cmd.invite.sent = Inimbitahan si {0} sa iyong paksyon. +cmd.invite.received = Inimbitahan ka na sumali sa {0}! +cmd.invite.accept_hint = I-type ang /f accept {0} upang sumali. + +# ========== Mga Utos - Tanggapin / Sumali ========== +cmd.join.no_permission = Wala kang pahintulot na sumali sa mga paksyon. +cmd.join.already_in_named = Kasapi ka na ng {0}. +cmd.join.use_leave_hint = Gamitin muna ang /f leave kung gusto mong sumali sa ibang paksyon. +cmd.join.no_invites = Wala kang mga nakabinbing imbitasyon. +cmd.join.faction_not_found = Hindi nahanap ang paksyon na '{0}'. +cmd.join.not_invited = Wala kang imbitasyon mula sa paksyon na iyon. +cmd.join.faction_gone = Ang paksyon na iyon ay wala na. +cmd.join.success = Sumali ka na sa {0}! +cmd.join.broadcast = Sumali na si {0} sa paksyon! +cmd.join.faction_full = Puno na ang paksyon na iyon. +cmd.join.failed = Nabigo ang pagsali sa paksyon. + +# ========== Mga Utos - Paalisin ========== +cmd.kick.no_permission = Wala kang pahintulot na magpaalis ng mga kasapi. +cmd.kick.usage = Paggamit: /f kick +cmd.kick.not_in_your_faction = Ang manlalaro na si '{0}' ay wala sa iyong paksyon. +cmd.kick.success = Pinalayas si {0} mula sa paksyon. +cmd.kick.broadcast = Pinalayas si {0} mula sa paksyon. +cmd.kick.kicked = Pinalayas ka mula sa paksyon. +cmd.kick.cannot_kick_higher = Wala kang pahintulot na paalisin ang manlalarong iyon. +cmd.kick.cannot_kick_leader = Hindi mo maaaring paalisin ang pinuno ng paksyon. +cmd.kick.failed = Nabigo ang pagpaalis ng manlalaro. + +# ========== Mga Utos - Umalis ========== +cmd.leave.no_permission = Wala kang pahintulot na umalis sa mga paksyon. +cmd.leave.confirm_prompt = Sigurado ka bang gusto mong umalis sa iyong paksyon? +cmd.leave.confirm_instruction = I-type ang /f leave --text muli sa loob ng {0} segundo upang kumpirmahin. +cmd.leave.success = Umalis ka na sa iyong paksyon. +cmd.leave.broadcast = Umalis na si {0} sa paksyon. +cmd.leave.failed = Nabigo ang pag-alis sa paksyon. +cmd.leave.cancelled = Kinansela ang nakaraang kumpirmasyon. I-type muli upang kumpirmahin ang pag-alis. + +# ========== Mga Utos - I-promote / I-demote / Ilipat ========== +cmd.rank.promote_no_permission = Wala kang pahintulot na mag-promote ng mga kasapi. +cmd.rank.promote_usage = Paggamit: /f promote +cmd.rank.promoted = Na-promote si {0} sa {1}! +cmd.rank.promote_broadcast = Na-promote si {0} sa {1}! +cmd.rank.already_highest = Hindi na maaaring mag-promote pa. Gamitin ang /f transfer upang palitan ang pinuno. +cmd.rank.promote_failed = Nabigo ang pag-promote ng manlalaro. +cmd.rank.demote_no_permission = Wala kang pahintulot na mag-demote ng mga kasapi. +cmd.rank.demote_usage = Paggamit: /f demote +cmd.rank.demoted = Na-demote si {0} sa {1}. +cmd.rank.demote_broadcast = Na-demote si {0} sa {1}. +cmd.rank.already_lowest = Ang manlalarong iyon ay kasapi na sa pinakamababang ranggo. +cmd.rank.demote_failed = Nabigo ang pag-demote ng manlalaro. +cmd.rank.transfer_no_permission = Wala kang pahintulot na ilipat ang pamumuno. +cmd.rank.transfer_usage = Paggamit: /f transfer +cmd.rank.player_not_in_faction = Hindi nahanap ang manlalaro sa iyong paksyon. +cmd.rank.transfer_confirm = Sigurado ka bang gusto mong ilipat ang pamumuno kay {0}? +cmd.rank.transfer_confirm_instruction = I-type ang /f transfer {0} --text muli sa loob ng {1} segundo upang kumpirmahin. +cmd.rank.transferred = Nailipat na ang pamumuno kay {0}! +cmd.rank.transfer_broadcast = Si {0} na ang pinuno ng paksyon! +cmd.rank.transfer_failed = Nabigo ang paglipat ng pamumuno. +cmd.rank.transfer_cancelled = Kinansela ang nakaraang kumpirmasyon. I-type muli upang kumpirmahin ang paglipat. + +# ========== Mga Utos - I-unclaim ========== +cmd.unclaim.no_permission = Wala kang pahintulot na mag-unclaim ng teritoryo. +cmd.unclaim.success = Na-unclaim ang chunk sa {0}, {1}. +cmd.unclaim.not_officer = Dapat ikaw ay isang opisyal upang mag-unclaim ng lupa. +cmd.unclaim.chunk_not_claimed = Ang chunk na ito ay hindi naka-claim. +cmd.unclaim.not_your_claim = Ang iyong paksyon ay hindi nagmamay-ari ng chunk na ito. +cmd.unclaim.cannot_unclaim_home = Hindi maaaring i-unclaim ang chunk na may faction home. +cmd.unclaim.would_disconnect = Hindi maaaring i-unclaim — maaari nitong ihiwalay ang iyong teritoryo. +cmd.unclaim.failed = Nabigo ang pag-unclaim ng chunk. + +# ========== Mga Utos - Overclaim ========== +cmd.overclaim.no_permission = Wala kang pahintulot na mag-overclaim ng teritoryo. +cmd.overclaim.success = Na-overclaim ang teritoryo ng kalaban! +cmd.overclaim.not_officer = Dapat ikaw ay isang opisyal upang mag-overclaim. +cmd.overclaim.not_claimed = Ang chunk na ito ay hindi naka-claim. Gamitin ang /f claim. +cmd.overclaim.own_chunk = Pagmamay-ari na ng iyong paksyon ang chunk na ito. +cmd.overclaim.ally = Hindi mo maaaring i-overclaim ang teritoryo ng kakampi. +cmd.overclaim.target_has_power = Ang paksyon na ito ay may sapat pa rin na kapangyarihan. +cmd.overclaim.failed = Nabigo ang pag-overclaim. + +# ========== Mga Utos - Stuck ========== +cmd.stuck.no_permission = Wala kang pahintulot na gamitin ang /f stuck. +cmd.stuck.not_stuck = Hindi ka na-stuck - ito ay ilang. +cmd.stuck.combat_tagged = Hindi mo magagamit ang /f stuck habang nasa labanan! +cmd.stuck.no_safe = Hindi mahanap ang ligtas na lokasyon. +cmd.stuck.teleporting = Magta-teleport sa ligtas na lugar sa loob ng {0} segundo. Huwag gumalaw! + +# ========== Mga Utos - Home ========== +cmd.home.no_permission = Wala kang pahintulot na mag-teleport sa faction home. +cmd.home.no_home = Walang home ang iyong paksyon. +cmd.home.combat_tagged = Hindi ka maaaring mag-teleport habang nasa labanan! +cmd.home.teleported = Na-teleport sa faction home! + +# ========== Mga Utos - SetHome ========== +cmd.sethome.no_permission = Wala kang pahintulot na magtakda ng faction home. +cmd.sethome.world_not_allowed = Hindi maaaring magtakda ng home sa mundong ito. +cmd.sethome.not_in_territory = Maaari ka lamang magtakda ng home sa teritoryo ng iyong paksyon. +cmd.sethome.set = Naitakda na ang faction home! +cmd.sethome.broadcast = Itinakda ni {0} ang faction home. +cmd.sethome.not_officer = Dapat ikaw ay isang opisyal upang magtakda ng home. +cmd.sethome.failed = Nabigo ang pagtakda ng home. + +# ========== Mga Utos - DelHome ========== +cmd.delhome.no_permission = Wala kang pahintulot na magtanggal ng faction home. +cmd.delhome.no_home = Walang itinakdang home ang iyong paksyon. +cmd.delhome.deleted = Natanggal na ang faction home! +cmd.delhome.broadcast = Tinanggal ni {0} ang faction home. +cmd.delhome.not_officer = Dapat ikaw ay isang opisyal upang magtanggal ng home. +cmd.delhome.failed = Nabigo ang pagtanggal ng home. + +# ========== Mga Utos - Relasyon (Kakampi/Kalaban/Neutral/Mga Relasyon) ========== +cmd.relation.ally_no_permission = Wala kang pahintulot na mamahala ng mga alyansa. +cmd.relation.ally_usage = Paggamit: /f ally +cmd.relation.ally_sent = Naipadala ang kahilingan ng alyansa sa {0}! +cmd.relation.ally_formed = Kakampi ka na ng {0}! +cmd.relation.already_ally = Kakampi mo na ang paksyon na iyon. +cmd.relation.ally_failed = Nabigo ang pagpapadala ng kahilingan ng alyansa. +cmd.relation.enemy_no_permission = Wala kang pahintulot na magdeklara ng mga kalaban. +cmd.relation.enemy_usage = Paggamit: /f enemy +cmd.relation.enemy_declared = Kalaban mo na ang {0}! +cmd.relation.already_enemy = Kalaban mo na ang paksyon na iyon. +cmd.relation.max_enemies = Naabot mo na ang maximum na bilang ng mga kalaban. +cmd.relation.enemy_failed = Nabigo ang pagtakda ng kalaban. +cmd.relation.neutral_no_permission = Wala kang pahintulot na magtakda ng neutral na relasyon. +cmd.relation.neutral_usage = Paggamit: /f neutral +cmd.relation.neutral_set = Ang iyong paksyon ay neutral na sa {0}. +cmd.relation.already_neutral = Neutral ka na sa paksyon na iyon. +cmd.relation.neutral_failed = Nabigo ang pagtakda ng neutral. +cmd.relation.cannot_self = Hindi mo maaaring makipag-alyansa sa iyong sarili. +cmd.relation.max_allies = Naabot mo na ang maximum na bilang ng mga kakampi. +cmd.relation.view_no_permission = Wala kang pahintulot na tingnan ang mga relasyon. +cmd.relation.header = === Mga Relasyon ng Paksyon === +cmd.relation.allies_count = Mga Kakampi ({0}): +cmd.relation.enemies_count = Mga Kalaban ({0}): +cmd.relation.list_entry = - {0} + +# ========== Mga Utos - Chat ========== +cmd.chat.usage = Paggamit: /f c [f|a|off] +cmd.chat.no_permission = Wala kang pahintulot para sa chat mode na iyon. +cmd.chat.mode_set = Ang chat mode ay naitakda sa {0} + +# ========== Mga Utos - Mga Imbitasyon ========== +cmd.invites.not_officer = Dapat ikaw ay isang opisyal upang mamahala ng mga imbitasyon. +cmd.invites.header = === Mga Imbitasyon ng Paksyon === +cmd.invites.no_pending = Walang nakabinbing imbitasyon o kahilingan. +cmd.invites.outgoing = Mga Papalabas na Imbitasyon: +cmd.invites.outgoing_entry = {0} (inimbitahan ni {1}) +cmd.invites.requests = Mga Kahilingan na Sumali: +cmd.invites.request_entry = {0}{1} +cmd.invites.your_invites_header = === Ang Iyong mga Imbitasyon === +cmd.invites.no_invites = Wala kang mga nakabinbing imbitasyon. +cmd.invites.invite_entry = {0} - Gamitin ang /f accept {1} + +# ========== Mga Utos - Kahilingan ========== +cmd.request.no_permission = Wala kang pahintulot na humiling ng pagsapi sa paksyon. +cmd.request.already_in_named = Kasapi ka na ng {0}. +cmd.request.use_leave_hint = Gamitin muna ang /f leave kung gusto mong sumali sa ibang paksyon. +cmd.request.usage = Paggamit: /f request [mensahe] +cmd.request.faction_open = Bukas ang paksyon na iyon! Gamitin ang /f accept {0} upang direktang sumali. +cmd.request.already_requested = Mayroon ka nang nakabinbing kahilingan sa paksyon na iyon. +cmd.request.has_invite = Inimbitahan ka na ng paksyon na iyon! Gamitin ang /f accept {0} upang sumali. +cmd.request.sent = Naipadala ang kahilingan na sumali sa {0}! +cmd.request.your_message = Ang iyong mensahe: "{0}" +cmd.request.officer_review = Susuriin ng isang opisyal ang iyong kahilingan. +cmd.request.officer_notify = Humiling si {0} na sumali sa iyong paksyon! +cmd.request.officer_review_hint = Gamitin ang /f gui > Invites upang suriin. + +# ========== Mga Utos - Impormasyon ========== +cmd.info.faction_header = === {0} === +cmd.info.player_header = === {0} === +cmd.info.no_permission = Wala kang pahintulot na tingnan ang impormasyon ng paksyon. +cmd.info.faction_not_found = Hindi nahanap ang paksyon na '{0}'. +cmd.info.not_in_faction_hint = Wala ka sa isang paksyon. Gamitin ang /f info +cmd.info.leader = Pinuno: {0} +cmd.info.members = Mga Kasapi: {0}/{1} +cmd.info.power = Kapangyarihan: {0} +cmd.info.claims = Mga Claim: {0} +cmd.info.raidable = RAIDABLE! +cmd.info.allies = Mga Kakampi: {0} +cmd.info.enemies = Mga Kalaban: {0} +cmd.info.they_consider = Itinuturing ka nila bilang: {0} +cmd.info.you_consider = Itinuturing mo sila bilang: {0} +cmd.info.members_no_permission = Wala kang pahintulot na tingnan ang mga kasapi ng paksyon. +cmd.info.members_header = === Mga Kasapi ng {0} ({1}) === +cmd.info.member_online = [Online] +cmd.info.list_no_permission = Wala kang pahintulot na tingnan ang listahan ng mga paksyon. +cmd.info.list_empty = Walang mga paksyon. +cmd.info.list_header = === Mga Paksyon ({0}) === +cmd.info.list_entry = {0} - {1} kasapi, {2} kapangyarihan +cmd.info.list_entry_raidable = {0} - {1} kasapi, {2} kapangyarihan [RAIDABLE] +cmd.info.help_no_permission = Wala kang pahintulot na tingnan ang tulong. +cmd.info.who_no_permission = Wala kang pahintulot na tingnan ang impormasyon ng manlalaro. +cmd.info.who_faction = Paksyon: {0} +cmd.info.who_role = Tungkulin: {0} +cmd.info.who_joined = Sumali: {0} +cmd.info.who_faction_none = Paksyon: Wala +cmd.info.who_power = Kapangyarihan: {0} +cmd.info.who_status = Katayuan: {0} +cmd.info.who_last_seen = Huling nakita: {0} +cmd.info.map_no_permission = Wala kang pahintulot na tingnan ang mapa. +cmd.info.map_header = === Mapa ng Teritoryo === +cmd.info.map_legend = Alamat: +Ikaw /Sarili /Kakampi /Kalaban -Ilang +cmd.info.map_gui_hint = Gamitin ang /f gui para sa interactive na mapa + +# ========== Mga Utos - Kapangyarihan ========== +cmd.power.personal = Personal na Kapangyarihan: {0}/{1} +cmd.power.faction = Kapangyarihan ng Paksyon: {0}/{1} +cmd.power.death_loss = Pagkawala sa Kamatayan: {0} +cmd.power.regen = Bilis ng Pagbawi: {0}/oras +cmd.power.no_permission = Wala kang pahintulot na tingnan ang impormasyon ng kapangyarihan. +cmd.power.header = Kapangyarihan ni {0}: +cmd.power.current = Kasalukuyan: {0} + +# ========== Mga Utos - Ekonomiya ========== +cmd.economy.balance = Balanse: {0} +cmd.economy.deposited = Nagdeposito ng {0} sa kaban ng yaman ng paksyon. +cmd.economy.withdrawn = Nag-withdraw ng {0} mula sa kaban ng yaman ng paksyon. +cmd.economy.transferred = Naglipat ng {0} sa {1}. +cmd.economy.insufficient = Kulang ang pondo sa kaban ng yaman ng paksyon. +cmd.economy.invalid_amount = Hindi wastong halaga: {0} +cmd.economy.economy_disabled = Ang ekonomiya ay naka-disable. +cmd.economy.balance_no_permission = Wala kang pahintulot na tingnan ang mga balanse. +cmd.economy.treasury_unavailable = Hindi magagamit ang kaban ng yaman. +cmd.economy.balance_display = Kaban ng yaman ng {0}: {1} +cmd.economy.deposit_no_permission = Wala kang pahintulot na magdeposito. +cmd.economy.deposit_faction_denied = Wala kang pahintulot sa paksyon upang magdeposito. +cmd.economy.deposit_usage = Paggamit: /f deposit +cmd.economy.amount_positive = Ang halaga ay dapat positibo. +cmd.economy.wallet_insufficient = Kulang ang iyong pera. Wallet: {0} +cmd.economy.wallet_withdraw_failed = Nabigo ang pag-withdraw mula sa iyong wallet. +cmd.economy.deposit_failed = Nabigo ang pagdeposito sa kaban ng yaman ng paksyon. Ibinalik ang pera. +cmd.economy.withdraw_no_permission = Wala kang pahintulot na mag-withdraw. +cmd.economy.withdraw_faction_denied = Wala kang pahintulot sa paksyon upang mag-withdraw. +cmd.economy.withdraw_usage = Paggamit: /f withdraw +cmd.economy.withdraw_limit_denied = Tinanggihan ang pag-withdraw: {0} +cmd.economy.wallet_deposit_failed = Babala: Nabigo ang pagdeposito sa iyong wallet. Kontakin ang admin. +cmd.economy.withdraw_limit_exceeded = Tinanggihan ang pag-withdraw: lumampas sa limitasyon. +cmd.economy.withdraw_failed = Nabigo ang pag-withdraw: {0} +cmd.economy.transfer_no_permission = Wala kang pahintulot na maglipat. +cmd.economy.transfer_faction_denied = Wala kang pahintulot sa paksyon upang maglipat. +cmd.economy.transfer_usage = Paggamit: /f money transfer +cmd.economy.transfer_self = Hindi maaaring maglipat sa sarili mong paksyon. +cmd.economy.transfer_limit_denied = Tinanggihan ang paglipat: {0} +cmd.economy.transfer_limit_exceeded = Tinanggihan ang paglipat: lumampas sa limitasyon. +cmd.economy.transfer_failed = Nabigo ang paglipat: {0} +cmd.economy.log_no_permission = Wala kang pahintulot na tingnan ang talaan ng mga transaksyon. +cmd.economy.log_header = Talaan ng mga Transaksyon (pahina {0}/{1}) +cmd.economy.log_empty = Walang nahanap na mga transaksyon. +cmd.economy.money_help_header = Mga Utos sa Kaban ng Yaman: +cmd.economy.money_help_balance = /f money balance [paksyon] - Tingnan ang balanse +cmd.economy.money_help_deposit = /f money deposit - Magdeposito sa kaban ng yaman +cmd.economy.money_help_withdraw = /f money withdraw - Mag-withdraw mula sa kaban ng yaman +cmd.economy.money_help_transfer = /f money transfer - Maglipat sa pagitan ng mga paksyon +cmd.economy.money_help_log = /f money log [pahina] [uri] - Tingnan ang kasaysayan ng transaksyon + +# ========== Proteksyon - Mga Parirala ng Aksyon ========== +protection.action.generic = Hindi mo magagawa iyan +protection.action.build = Hindi ka maaaring magtayo o magsira ng mga bloke +protection.action.interact = Hindi mo magagamit iyan +protection.action.door = Hindi mo magagamit ang mga pinto +protection.action.container = Hindi mo mabubuksan ang mga lalagyan +protection.action.bench = Hindi mo magagamit ang mga crafting station +protection.action.processing = Hindi mo magagamit ang mga processing station +protection.action.seat = Hindi mo magagamit ang mga upuan +protection.action.light = Hindi mo maaaring i-toggle ang mga ilaw +protection.action.teleporter = Hindi mo magagamit ang mga teleporter +protection.action.crate = Hindi mo magagamit ang mga crate +protection.action.tame = Hindi mo maaaring i-tame ang mga nilalang +protection.action.npc = Hindi ka maaaring makipag-ugnayan sa mga NPC +protection.action.mount = Hindi mo maaaring sakyan ang mga nilalang +protection.action.pve = Hindi mo maaaring saktan ang mga nilalang +protection.action.item_drop = Hindi ka maaaring mag-drop ng mga bagay +protection.action.item_pickup = Hindi ka maaaring pumili ng mga bagay + +# ========== Proteksyon - Mga Dahilan ng Pagtanggi ========== +protection.denied.safezone = {0} sa isang SafeZone. +protection.denied.warzone = {0} sa isang WarZone. +protection.denied.enemy_claim = {0} sa teritoryo ng kalaban. +protection.denied.claimed = {0} sa naka-claim na teritoryo. +protection.denied.here = {0} dito. +protection.denied.zone = {0} sa zone na ito. +protection.denied.faction_perm = {0} dito. (Pahintulot ng paksyon: {1}) +protection.denied.ally_territory = {0} dito. (Teritoryo ng kakampi) +protection.denied.error = Error sa proteksyon — na-block ang aksyon para sa kaligtasan. + +# ========== Proteksyon - PvP ========== +protection.pvp.safezone = Ang PvP ay naka-disable sa mga SafeZone. +protection.pvp.same_faction = Hindi mo maaaring atakehin ang mga kasapi ng paksyon. +protection.pvp.ally = Hindi mo maaaring atakehin ang mga kakampi. +protection.pvp.spawn_protected = Ang manlalarong iyon ay may spawn protection. +protection.pvp.territory_disabled = Ang PvP ay naka-disable sa teritoryong ito. +protection.pvp.generic = Hindi mo maaaring atakehin ang manlalarong ito. + +# ========== Proteksyon - Pinsala sa Entity ========== +protection.mob_damage_disabled = Ang pinsala mula sa mga mob ay naka-disable sa zone na ito. +protection.pve_damage_disabled = Ang PvE na pinsala ay naka-disable sa zone na ito. +protection.pve_territory_denied = Hindi mo maaaring saktan ang mga mob sa teritoryong ito. + +# ========== Proteksyon - Combat Tag ========== +protection.combat_tag_command = Hindi mo magagamit ang utos na iyon habang may combat tag. + +# ========== Mga Anunsyo sa Server ========== +# Ito ay ibinabalita sa lahat ng mga online na manlalaro para sa mga makabuluhang pangyayari sa paksyon. +# {0}, {1} = mga dynamic na halaga (mga pangalan ng paksyon, mga pangalan ng manlalaro) +server_announce.faction_created = Itinatag ni {0} ang paksyon na {1}! +server_announce.faction_disbanded = Ang paksyon na {0} ay nabuag na! +server_announce.leadership_transfer = Si {0} na ang pinuno ng {1}! +server_announce.overclaim = Na-overclaim ni {0} ang teritoryo mula sa {1}! +server_announce.war_declared = Nagdeklara ng digmaan ang {0} laban sa {1}! +server_announce.alliance_formed = Ang {0} at {1} ay mga kakampi na! +server_announce.alliance_broken = Ang {0} at {1} ay hindi na mga kakampi! + +# ========== Sistema ng Teleport ========== +teleport.cooldown_wait = Kailangan mong maghintay ng {0} bago mag-teleport muli. +teleport.warmup_start = Magta-teleport sa faction home sa loob ng {0} segundo... +teleport.combat_cancelled = Kinansela ang teleportation - ikaw ay nasa labanan! +teleport.success_default = Na-teleport sa faction home! +teleport.no_home = Walang home ang iyong paksyon. +teleport.world_not_found = Hindi nahanap ang mundo. +teleport.failed = Nabigo ang teleportation. +teleport.countdown = Magta-teleport sa loob ng {0} segundo... +teleport.countdown_one = Magta-teleport sa loob ng 1 segundo... +teleport.moved_cancelled = Kinansela ang teleportation - gumalaw ka! +teleport.damage_cancelled = Kinansela ang teleportation - tinamaan ka! +teleport.mount_teleport_blocked = Hindi ka maaaring mag-teleport sa zone na iyon habang nakasakay. +teleport.mount_entry_blocked = Hindi ka maaaring pumasok sa zone na ito habang nakasakay. + +# ========== Pagpapakita ng Chat ========== +chat.display.public = Publiko +chat.display.faction = Paksyon +chat.display.ally = Kakampi diff --git a/src/main/resources/Server/Languages/tl-PH/hyperfactions_admin.lang b/src/main/resources/Server/Languages/tl-PH/hyperfactions_admin.lang new file mode 100644 index 00000000..0708fde8 --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/hyperfactions_admin.lang @@ -0,0 +1,801 @@ +# HyperFactions Admin GUI - Filipino (Tagalog) na mga Salin +# Format: key = value +# Note: Ang mga key ay awtomatikong may prefix na "hyperfactions_admin." mula sa I18nModule ng Hytale + +# ========== Admin Navigation Bar ========== +nav.dashboard = Dashboard +nav.actions = Mga Aksyon +nav.factions = Mga Paksyon +nav.players = Mga Manlalaro +nav.economy = Ekonomiya +nav.zones = Mga Zone +nav.config = Config +nav.backups = Mga Backup +nav.log = Talaan +nav.updates = Mga Update +nav.help = Tulong +nav.version = Bersyon + +# ========== Mga Karaniwang Label ng Admin ========== +common.faction_not_found = Hindi Nahanap ang Paksyon +common.no_faction = Walang Paksyon +common.not_set = Hindi pa naitakda +common.on = Bukas +common.off = Sarado +common.enable = I-enable +common.disable = I-disable +common.none_paren = (Wala) +common.invalid_faction = Hindi wastong paksyon. +common.leader_prefix = Pinuno: {0} +common.members_suffix = {0} kasapi +common.claims_suffix = {0} claim +common.factions_suffix = {0} paksyon +common.players_suffix = {0} manlalaro +common.chunks_suffix = {0} chunks +common.entries_suffix = {0} tala +common.found_suffix = {0} nahanap +common.power_format = {0}/{1} kapangyarihan +common.raidable = Raidable +common.protected = Protektado +common.no_description = Walang itinakdang deskripsyon. +common.officers_more = +{0} pa +common.custom_max = (custom max) +common.default_max = (default max) +common.now = Ngayon +common.ago_suffix = {0} nakalipas +common.just_now = ngayon lang +common.no_membership_history = Walang kasaysayan ng pagsapi + +# ========== Admin Dashboard ========== +dashboard.factions_prefix = Mga Paksyon: {0} +dashboard.members_prefix = Kabuuang Kasapi: {0} +dashboard.claims_prefix = Kabuuang Claim: {0} + +# ========== Mga Aksyon ng Admin ========== +actions.confirm_reset = Kumpirmahin ang Reset? +actions.confirm_trigger = Kumpirmahin ang Trigger? +actions.kd_reset = Na-reset ang K/D para sa {0} manlalaro. +actions.kd_reset_failed = Nabigo ang pag-reset ng K/D: {0} +actions.upkeep_unavailable = Hindi magagamit ang upkeep processor. +actions.upkeep_triggered = Na-trigger ang koleksyon ng sustento. +actions.upkeep_failed = Nabigo ang sustento: {0} + +# ========== Admin Buwagin ========== +disband.faction_gone = Wala na ang paksyon. +disband.success = Ang paksyon na '{0}' ay nabuag na. +disband.failed = Nabigo ang pagbuag: {0} +disband.no_leader = Walang pinuno ang paksyon, hindi maaaring buwagin. + +# ========== Admin Unclaim Lahat ========== +unclaim.removed = [Admin] Tinanggal ang {0} claim mula sa {1}. +unclaim.no_claims = Walang claim na tinatanggal ang {0}. + +# ========== Listahan ng mga Paksyon ng Admin ========== +factions.home_not_set = Hindi pa naitakda +factions.teleported = Na-teleport sa home ng {0}. +factions.no_home = Walang itinakdang home ang paksyon. +factions.world_not_found = Hindi nahanap ang target na mundo. + +# ========== Impormasyon ng Paksyon ng Admin ========== +info.faction_gone = Wala na ang paksyon na ito. + +# ========== Mga Kasapi ng Paksyon ng Admin ========== +members.sort_role = Tungkulin +members.sort_online = Online +members.sort_name = Pangalan +members.sort_power = Kapangyarihan +members.promoted = [Admin] Na-promote si {0} sa {1}. +members.demoted = [Admin] Na-demote si {0} sa {1}. +members.kicked = [Admin] Pinalayas si {0} mula sa paksyon. + +# ========== Mga Relasyon ng Paksyon ng Admin ========== +relations.allies_header = MGA KAKAMPI ({0}) +relations.enemies_header = MGA KALABAN ({0}) +relations.no_allies = Walang mga kakampi. +relations.no_enemies = Walang mga kalaban. +relations.neutral_count = {0} neutral na paksyon +relations.since_today = Mula noong: ngayon +relations.since_one_day = Mula noong: 1 araw nakalipas +relations.since_days = Mula noong: {0} araw nakalipas +relations.set_ally = [Admin] Itinakda ang mutual na kakampi status sa {0}. +relations.set_enemy = Itinakda ang mutual na kalaban status sa {0}. +relations.set_neutral = [Admin] Itinakda ang mutual na neutral status sa {0}. + +# ========== Mga Setting ng Paksyon ng Admin ========== +settings.locked = Ang setting na ito ay naka-lock ng konpigurasyon ng server. +settings.perm_toggled = Itinakda ang {0} sa {1}. +settings.color_changed = Itinakda ang kulay ng paksyon sa {0}. +settings.recruitment_set = Itinakda ang recruitment sa {0}. +settings.no_home = [Admin] Walang itinakdang home ang paksyon na ito. +settings.home_cleared = Na-clear ang faction home para sa {0}. + +# ========== Mga Label ng Sort Dropdown ========== +sort.power = Kapangyarihan +sort.name = Pangalan +sort.members = Mga Kasapi +sort.balance = Balanse + +# ========== Mga Manlalaro ng Admin ========== +players.sort_last_online = Huling Online +players.sort_faction = Paksyon +players.sort_online = Online +players.not_online = Ang manlalaro ay hindi online. +players.world_not_found = Hindi nahanap ang target na mundo. +players.teleported = [Admin] Na-teleport kay {0}. + +# ========== Impormasyon ng Manlalaro ng Admin ========== +playerinfo.disband_faction = Buwagin ang Paksyon +playerinfo.kick_leader = Paalisin ang Pinuno +playerinfo.enter_valid_number = Maglagay ng wastong numero. +playerinfo.enter_valid_positive = Maglagay ng wastong positibong numero. +playerinfo.faction_gone = Wala na ang paksyon. +playerinfo.kd_reset = Na-reset ang K/D para kay {0}. +playerinfo.kicked_success = Pinalayas si {0} mula sa {1}. +playerinfo.kicked_leader = Pinalayas ang pinuno na si {0}. Nailipat ang pamumuno kay {1}. +playerinfo.disbanded_kick = [Admin] Ang paksyon na '{0}' ay nabuag (huling kasapi ay pinalayas). + +# ========== Ekonomiya ng Admin ========== +economy.no_data = Walang mga paksyon na may datos ng ekonomiya. +economy.amount_zero = Ang halaga ay hindi maaaring zero. +economy.enter_amount = Pakilagay ng halaga. +economy.invalid_number = Hindi wastong numero: {0} +economy.error = May naganap na error. +economy.balance_negative = Ang balanse ay hindi maaaring negatibo. +economy.failed = Nabigo: {0} +economy.bulk_complete = Nakumpleto ang bulk adjust: {0} {1} sa {2} paksyon. +economy.bulk_failures = ({0} nabigo) + +# ========== Mga Zone ng Admin ========== +zones.not_found = Hindi nahanap ang zone. +zones.invalid_id = Hindi wastong zone ID. +zones.deleted = Natanggal ang zone na {0}. +zones.delete_failed = Nabigo ang pagtanggal ng zone: {0} +zones.no_chunks = Walang chunks +zones.chunks_suffix = {0} ({1} chunks) + +# ========== Wizard ng Paggawa ng Zone ========== +wizard.enter_name = Pakilagay ng pangalan ng zone. +wizard.name_too_short = Ang pangalan ng zone ay dapat hindi bababa sa {0} karakter. +wizard.name_too_long = Ang pangalan ng zone ay hindi maaaring lumampas sa {0} karakter. +wizard.name_taken = Mayroon nang zone na may ganitong pangalan. +wizard.radius_range = Ang radius ay dapat nasa pagitan ng 1 at {0}. +wizard.create_failed = Hindi malikha ang zone: {0} +wizard.created_not_found = Nalikha ang zone ngunit hindi nahanap. +wizard.created = Nalikha ang {0} na '{1}'! +wizard.chunk_claimed = Na-claim ang chunk ({0}, {1}). +wizard.chunk_failed = Hindi ma-claim ang kasalukuyang chunk: {0} +wizard.radius_claimed = Na-claim ang {0} chunks sa {1} radius ng {2}. +wizard.radius_no_claims = Walang chunks na na-claim (maaaring okupado ang lugar). +wizard.no_claims = Nalikha ang zone na walang claim. +wizard.chunks_preview = ~{0} chunks + +# ========== Pagpapalit ng Pangalan ng Zone ========== +zone_rename.zone_gone = Wala na ang zone. +zone_rename.enter_name = Pakilagay ng pangalan ng zone. +zone_rename.too_short = Ang pangalan ng zone ay dapat hindi bababa sa {0} karakter. +zone_rename.too_long = Ang pangalan ng zone ay hindi maaaring lumampas sa {0} karakter. +zone_rename.same_name = Iyan na ang pangalan ng zone na ito. +zone_rename.renamed = [Admin] Pinalitan ang pangalan ng zone mula {0} sa {1}! +zone_rename.name_taken = Mayroon nang zone na may ganitong pangalan. +zone_rename.invalid_name = Hindi wastong pangalan ng zone. +zone_rename.rename_failed = Nabigo ang pagpalit ng pangalan ng zone: {0} + +# ========== Pagpapalit ng Uri ng Zone ========== +zone_type.zone_gone = Wala na ang zone. +zone_type.changed = [Admin] Pinalitan ang {0} mula {1} sa {2} ({3}). +zone_type.failed = Nabigo ang pagpalit ng uri ng zone: {0} +zone_type.flags_reset = na-reset ang mga flag +zone_type.flags_kept = napanatili ang mga flag + +# ========== Mga Integration Flag ng Zone ========== +zone_int.zone_not_found = Hindi Nahanap ang Zone +zone_int.no_plugin = (walang plugin) +zone_int.default = (default) +zone_int.custom = (custom) + +# Mga label ng UI ng integration flags +gui.zint_cat_gravestones = Mga Lapida +gui.zint_gravestones_desc = Kapag BUKAS, ang mga hindi may-ari ay maaaring mag-loot ng mga lapida. Ang mga may-ari ay palaging maaari. +gui.zint_cat_world_map = Mapa ng Mundo +gui.zint_world_map_desc = I-override ang pagtatago sa mapa para sa mga manlalaro sa zone na ito. Kapag naka-enable, piliin kung sino ang makakakita ng mga manlalaro sa zone na ito. +gui.zint_visibility_label = Antas ng Visibility: +gui.zint_cat_essentials = HyperEssentials +gui.zint_reset_defaults = I-reset sa Defaults +gui.zint_back_to_flags = Bumalik sa mga Flag +gui.zint_map_vis_faction = Paksyon Lamang +gui.zint_map_vis_ally = Paksyon + Mga Kakampi +gui.zint_map_vis_all = Lahat ng Manlalaro + +# ========== Talaan ng Aktibidad ========== +log.all_types = Lahat ng Uri +log.no_logs = Walang mga talaan ng aktibidad na tumutugma sa mga filter. + +# ========== Pahina ng Bersyon ========== +version.active = Aktibo +version.not_found = Hindi Nahanap +version.not_detected = Hindi Natukoy +version.not_installed = Hindi Naka-install +version.active_version = Aktibo (v{0}) +version.active_compatible = Aktibo (compatible) +version.active_claims_only = Aktibo (claims lamang) +version.installed_no_perm = Naka-install (walang perm provider) +version.active_provider = Aktibo ({0}) + +# ========== Pangunahing Pahina ng Admin ========== +main.reload_hint = Gamitin ang /f reload upang i-reload ang konpigurasyon. +main.unclaim_hint = Gamitin ang /f admin unclaim {0} upang i-unclaim ang lahat ng {1} chunks. + +# ========== Mga Flag/Setting ng Zone ========== +zflags.invalid_flag = Hindi wastong flag. +zflags.zone_not_found = Hindi nahanap ang zone. +zflags.conflict = (conflict) +zflags.mixin = (mixin) +zflags.reset_int = Na-reset ang mga integration flag sa defaults. +zflags.reset_all = Na-reset ang lahat ng flag sa defaults. +zflags.reset_failed = Nabigo ang pag-reset ng mga flag: {0} +zflags.back_to_settings = Bumalik sa mga Setting + +# Mga label ng UI ng zone settings +gui.zset_cat_combat = Labanan +gui.zset_cat_damage = Pinsala +gui.zset_cat_death = Kamatayan +gui.zset_cat_building = Pagtatayo +gui.zset_cat_interaction = Interaksyon +gui.zset_cat_transport = Transport +gui.zset_cat_items = Mga Bagay +gui.zset_cat_spawning = Pag-spawn ng Mob +gui.zset_cat_mob_clear = Pag-clear ng Mob +gui.zset_children_hint = (mga anak ay nalalapat lamang kapag BUKAS ang parent) +gui.zset_reset_defaults = I-reset sa Defaults +gui.zset_integration_flags = Mga Integration Flag +gui.zset_back_to_zones = Bumalik sa mga Zone +gui.zset_chunks = {0} chunks + +# Mga Display Name ng Zone Flag +gui.zflag_pvp_enabled = PvP Naka-enable +gui.zflag_friendly_fire = Friendly Fire +gui.zflag_friendly_fire_faction = Pinsala ng Paksyon +gui.zflag_friendly_fire_ally = Pinsala ng Kakampi +gui.zflag_projectile_damage = Pinsala ng Projectile +gui.zflag_mob_damage = Tumanggap ng Pinsala mula sa Mob +gui.zflag_pve_damage = Magbigay ng Pinsala sa Mob +gui.zflag_fall_damage = Pinsala sa Pagkahulog +gui.zflag_environmental_damage = Pinsala ng Kapaligiran +gui.zflag_explosion_damage = Pinsala ng Pagsabog +gui.zflag_fire_spread = Pagkalat ng Apoy +gui.zflag_keep_inventory = Panatilihin ang Inventory +gui.zflag_power_loss = Pagkawala ng Kapangyarihan +gui.zflag_build_allowed = Pinapayagan ang Pagtatayo +gui.zflag_block_place = Paglalagay ng Block +gui.zflag_hammer_use = Paggamit ng Hammer +gui.zflag_builder_tools_use = Mga Builder Tool +gui.zflag_block_interact = Interaksyon ng Block +gui.zflag_door_use = Paggamit ng Pinto +gui.zflag_container_use = Paggamit ng Lalagyan +gui.zflag_bench_use = Paggamit ng Bench +gui.zflag_processing_use = Paggamit ng Processing +gui.zflag_seat_use = Paggamit ng Upuan +gui.zflag_mount_use = Paggamit ng Mount +gui.zflag_light_use = Paggamit ng Ilaw +gui.zflag_npc_use = Interaksyon ng NPC +gui.zflag_crate_pickup = Pagpili ng Crate +gui.zflag_crate_place = Paglalagay ng Crate +gui.zflag_npc_tame = Pag-tame ng NPC +gui.zflag_npc_interact = Pakikipag-ugnayan sa NPC +gui.zflag_teleporter_use = Paggamit ng Teleporter +gui.zflag_portal_use = Paggamit ng Portal +gui.zflag_mount_entry = Pagsakay sa Mount +gui.zflag_item_drop = Pag-drop ng Bagay +gui.zflag_item_pickup = Auto Pickup +gui.zflag_item_pickup_manual = F-Key Pickup +gui.zflag_invincible_items = Mga Di-masisira na Bagay +gui.zflag_mob_spawning = Pag-spawn ng Mob +gui.zflag_hostile_mob_spawning = Mga Agresibong Mob +gui.zflag_passive_mob_spawning = Mga Pasibong Mob +gui.zflag_neutral_mob_spawning = Mga Neutral na Mob +gui.zflag_npc_spawning = Pag-spawn ng NPC +gui.zflag_mob_clear = Pag-clear ng Mob +gui.zflag_hostile_mob_clear = I-clear ang mga Agresibong Mob +gui.zflag_passive_mob_clear = I-clear ang mga Pasibong Mob +gui.zflag_neutral_mob_clear = I-clear ang mga Neutral na Mob +gui.zflag_gravestone_access = Iba ang Mag-loot ng Lapida +gui.zflag_show_on_map = Ipakita sa Mapa +gui.zflag_essentials_homes = Paggamit ng Home +gui.zflag_essentials_warps = Paggamit ng Warp +gui.zflag_essentials_kits = Pag-claim ng Kit + +# ========== Mga Katangian ng Zone ========== +zprop.current_custom = Kasalukuyan: "{0}" (custom) +zprop.current_default = Kasalukuyan: "{0}" (default) +zprop.pvp_disabled = PvP Naka-disable +zprop.pvp_enabled = PvP Naka-enable +zprop.name_empty = Ang pangalan ay hindi maaaring walang laman. +zprop.renamed = Ang zone ay pinalitan ng pangalan sa "{0}". +zprop.name_taken = Mayroon nang zone na may ganitong pangalan. +zprop.name_invalid = Hindi wastong pangalan (maximum 32 karakter). +zprop.rename_failed = Nabigo ang pagpalit ng pangalan: {0} +zprop.upper_empty = Ang upper title ay hindi maaaring walang laman. Gamitin ang Clear upang i-reset. +zprop.upper_set = Naitakda ang upper title. +zprop.upper_reset = Na-reset ang upper title sa default. +zprop.lower_empty = Ang lower title ay hindi maaaring walang laman. Gamitin ang Clear upang i-reset. +zprop.lower_set = Naitakda ang lower title. +zprop.lower_reset = Na-reset ang lower title sa default. + +# ========== Karagdagang Relasyon ========== +relations.failed = Nabigo: {0} + +# ========== Karagdagang Kasapi ========== +members.never = Kailanman +members.teleported = [Admin] Na-teleport kay {0}. + +# ========== Karagdagang Impormasyon ng Manlalaro ========== +playerinfo.records = {0} tala +playerinfo.joined_date = Sumali: {0} +playerinfo.current = Kasalukuyan +playerinfo.left_date = Umalis: {0} + +# ========== Mapa ng Zone ========== +map.world_warning = BABALA: Ikaw ay nasa '{0}' - ang zone ay nasa '{1}' +map.position = Iyong Posisyon: Chunk ({0}, {1}) +map.zone_gone = Wala na ang zone. +map.claimed = Na-claim ang chunk ({0}, {1}) para sa {2}. +map.claim_failed = Nabigo ang pag-claim ng chunk: {0} +map.unclaimed = Na-unclaim ang chunk ({0}, {1}) mula sa {2}. +map.unclaim_failed = Nabigo ang pag-unclaim ng chunk: {0} +map.chunk_belongs = Ang chunk na ito ay pag-aari ng {0}. +map.chunk_faction = Ang chunk na ito ay naka-claim ng isang paksyon. +map.chunk_protected = Ang chunk na ito ay nasa protektadong rehiyon. +map.another_zone = ibang zone + +# ========== Mga GUI Label Key (para sa lokalisasyon ng hardcoded text sa .ui) ========== + +# Mga Pamagat ng Pahina +gui.title_dashboard = Admin Dashboard +gui.title_main = Admin ng mga Paksyon +gui.title_actions = Admin: Mga Aksyon sa Server +gui.title_factions = Pamamahala ng Paksyon +gui.title_players = Pamamahala ng Manlalaro +gui.title_economy = Admin: Ekonomiya ng Server +gui.title_zones = Pamamahala ng Zone +gui.title_backups = Mga Backup +gui.title_config = Konpigurasyon +gui.title_help = Tulong ng Admin +gui.title_updates = Mga Update +gui.title_version = Bersyon at mga Integrasyon +gui.title_activity_log = Admin: Talaan ng Aktibidad +gui.title_player_info = Admin: Impormasyon ng Manlalaro +gui.title_faction_info = Admin: Impormasyon ng Paksyon +gui.title_faction_settings = Admin: Mga Setting ng Paksyon +gui.title_faction_members = Admin: Mga Kasapi +gui.title_faction_relations = Admin: Mga Relasyon +gui.title_zone_map = Editor ng Mapa ng Zone +gui.title_zone_settings = Admin: Mga Setting ng Zone +gui.title_zone_properties = Admin: Mga Katangian ng Zone +gui.title_bulk_economy = Bulk na Pagsasaayos ng Kaban ng Yaman +gui.title_economy_adjust = Admin: Ekonomiya + +# Mga label ng Dashboard +gui.dash_server_stats = Mga Estadistika ng Server +gui.dash_factions = Mga Paksyon +gui.dash_total_members = Kabuuang Kasapi +gui.dash_total_claims = Kabuuang Claim +gui.dash_zones = Mga Zone +gui.dash_safe_war = safe / war +gui.dash_total_power = Kabuuang Kapangyarihan +gui.dash_avg_power = Avg na Kapangyarihan/Paksyon +gui.dash_total_economy = Kabuuang Ekonomiya +gui.dash_wealthiest = Pinakamayaman +gui.dash_avg_balance = Avg na Balanse +gui.dash_protection_bypass = Protection Bypass: + +# Mga karaniwang button at label +gui.search = Maghanap: +gui.sort = Ayusin: +gui.prev = < Nakaraang +gui.next = Susunod > +gui.back = Bumalik +gui.done = Tapos +gui.cancel = Kanselahin +gui.apply = Ilapat +gui.set = Itakda +gui.reset = I-reset +gui.coming_soon = Malapit Na +gui.zones_btn = Mga Zone +gui.reload_btn = I-reload +gui.all = Lahat +gui.safe = Safe +gui.war = War +gui.create_zone = + Gumawa + +# Mga label ng pahina ng mga aksyon +gui.act_combat_stats = Mga Estadistika ng Labanan +gui.act_combat_desc = I-reset ang mga patay at kamatayan para sa LAHAT ng manlalaro sa server. Ang aksyon na ito ay hindi na maaaring ibalik. +gui.act_reset_kd = I-reset ang Lahat ng K/D +gui.act_economy = Ekonomiya +gui.act_economy_desc = Magdagdag o magtanggal ng pera mula sa LAHAT ng kaban ng yaman ng paksyon nang sabay-sabay. +gui.act_bulk_adjust = Bulk na Dagdag/Tanggal +gui.act_upkeep_collection = Koleksyon ng Sustento +gui.act_upkeep_desc = Manu-manong i-trigger ang koleksyon ng sustento para sa lahat ng paksyon ngayon din, anuman ang naka-iskedyul na timer. +gui.act_trigger_upkeep = I-trigger ang Sustento + +# Mga label ng placeholder na pahina +gui.backup_heading = Pamamahala ng Backup +gui.backup_desc1 = Gumawa, i-restore, at mamahala ng mga backup ng datos ng paksyon. +gui.backup_desc2 = Ang mga awtomatikong backup ay naka-save sa data/backups folder. +gui.config_heading = Editor ng Konpigurasyon +gui.config_desc1 = I-configure ang mga setting ng HyperFactions nang direkta mula sa GUI. +gui.config_desc2 = Sa ngayon, gamitin ang /f reload upang i-reload ang mga pagbabago sa konpigurasyon. +gui.help_heading = Dokumentasyon ng Admin +gui.help_desc1 = Tingnan ang dokumentasyon ng admin at sanggunian ng mga utos. +gui.help_desc2 = Para sa tulong, bisitahin ang wiki ng HyperFactions. +gui.updates_heading = Sentro ng mga Update +gui.updates_desc1 = Tingnan kung may mga bagong bersyon at tingnan ang mga changelog. +gui.updates_desc2 = Bisitahin ang pahina ng HyperFactions para sa mga pinakabagong update. + +# Mga label ng pahina ng bersyon +gui.ver_hyperfactions = HyperFactions +gui.ver_hytale_server = Hytale Server +gui.ver_java = Java +gui.ver_permissions = MGA PAHINTULOT +gui.ver_placeholders = MGA PLACEHOLDER +gui.ver_economy_section = EKONOMIYA +gui.ver_protection = PROTEKSYON +gui.ver_disabled = Naka-disable + +# Mga header ng column (ginagamit sa iba't ibang pahina) +gui.col_faction = Paksyon +gui.col_balance = Balanse +gui.col_members = Mga Kasapi +gui.col_actions = Mga Aksyon +gui.col_time = Oras +gui.col_type = Uri +gui.col_message = Mensahe + +# Mga label ng pahina ng ekonomiya +gui.econ_total_balance = Kabuuang Balanse +gui.econ_factions = Mga Paksyon +gui.econ_avg_balance = Avg na Balanse +gui.econ_in_grace = Nasa Grace +gui.econ_collected = Nakolekta (24h) +gui.econ_next_collection = Susunod na Koleksyon +gui.econ_no_data = Walang mga paksyon na may datos ng ekonomiya. + +# Mga label ng activity log +gui.log_type = Uri: +gui.log_time = Oras: +gui.log_player = Manlalaro: +gui.log_no_logs = Walang mga talaan ng aktibidad na tumutugma sa mga filter. + +# Mga label ng impormasyon ng manlalaro +gui.plr_first_joined = Unang sumali: +gui.plr_last_online = Huling online: +gui.plr_uuid = UUID: +gui.plr_faction = Paksyon: +gui.plr_role = Tungkulin: +gui.plr_view_faction = Tingnan ang Paksyon +gui.plr_power = Kapangyarihan +gui.plr_max_power = Max na Kapangyarihan +gui.plr_set_power = Itakda +gui.plr_reset_power = I-reset +gui.plr_set_max = Itakda +gui.plr_reset_max = I-reset +gui.plr_no_power_loss = Walang Pagkawala ng Kapangyarihan +gui.plr_no_claim_decay = Walang Claim Decay +gui.plr_kills = Mga Patay +gui.plr_deaths = Mga Kamatayan +gui.plr_kdr = K/D Ratio +gui.plr_reset_kd = I-reset ang K/D +gui.plr_kick = Paalisin +gui.plr_membership_history = Kasaysayan ng Pagsapi +gui.plr_no_faction_label = Wala sa isang paksyon +gui.plr_power_management = Pamamahala ng Kapangyarihan +gui.plr_combat_stats = Mga Estadistika ng Labanan +gui.plr_bypass_flags = Mga Bypass Flag +gui.plr_admin_controls = Mga Kontrol ng Admin +gui.plr_kd_subtitle = K / D +gui.plr_max_prefix = Max: +gui.plr_view = Tingnan +gui.plr_kick_from_faction = Paalisin mula sa Paksyon +gui.plr_set_max_btn = Itakda ang Max +gui.plr_combat = Labanan +gui.plr_reason_active = AKTIBO +gui.plr_reason_left = UMALIS +gui.plr_reason_kicked = PINALAYAS +gui.plr_reason_disbanded = NABUAG + +# Mga label ng entry ng kasapi +gui.mem_label_power = Kapangyarihan: +gui.mem_label_joined = Sumali: +gui.mem_label_last_death = Huling Kamatayan: +gui.mem_label_uuid = UUID: +gui.mem_btn_info = Info +gui.mem_btn_teleport = Teleport +gui.mem_btn_promote = I-promote +gui.mem_btn_demote = I-demote +gui.mem_btn_kick = Paalisin +gui.econ_not_enabled = Ang sistema ng ekonomiya ay hindi naka-enable. +gui.info_more = +{0} pa +gui.log_time_1h = 1h +gui.log_time_24h = 24h +gui.log_time_7d = 7d +gui.log_time_all = Lahat +gui.shape_circular = bilog +gui.shape_square = parisukat +gui.nav_title = Panel ng Admin +gui.econ_btn_adjust = Isaayos +gui.econ_btn_info = Info + +# Mga label ng impormasyon ng paksyon +gui.fac_description = Deskripsyon +gui.fac_power = Kapangyarihan +gui.fac_claims = Mga Claim +gui.fac_members = Mga Kasapi +gui.fac_recruitment = Recruitment +gui.fac_founded = Itinatag +gui.fac_allies = Mga Kakampi +gui.fac_enemies = Mga Kalaban +gui.fac_raidable = Katayuan ng Raidable +gui.fac_treasury = Kaban ng Yaman +gui.fac_leader = Pinuno +gui.fac_officers = Mga Opisyal +gui.fac_view_members = Tingnan ang mga Kasapi +gui.fac_view_relations = Tingnan ang mga Relasyon +gui.fac_view_settings = Mga Setting +gui.fac_disband = Buwagin ang Paksyon +gui.fac_power_management = Pamamahala ng Kapangyarihan +gui.fac_reset_all_power = I-reset ang Lahat ng Kapangyarihan +gui.fac_econ_adjust = Isaayos ang Balanse +gui.fac_econ_view_log = Tingnan ang Talaan ng Transaksyon +gui.fac_current_max = kasalukuyan / maximum +gui.fac_claimed_max = naka-claim / maximum +gui.fac_relations = Mga Relasyon +gui.fac_ally_enemy = kakampi / kalaban +gui.fac_status = Katayuan +gui.fac_info = Info +gui.fac_treasury_balance = balanse ng kaban ng yaman +gui.fac_leadership = Pamumuno +gui.fac_leader_label = Pinuno: +gui.fac_officers_label = Mga Opisyal: +gui.fac_econ_mgmt = Pamamahala ng Ekonomiya +gui.fac_danger_zone = Mapanganib na Zone +gui.fac_view_treasury = Tingnan ang Kaban ng Yaman + +# Mga label ng setting ng paksyon +gui.set_editing = Ine-edit: +gui.set_general = Mga Pangkalahatang Setting +gui.set_name = Pangalan +gui.set_tag = Tag +gui.set_description = Deskripsyon +gui.set_recruitment = Recruitment +gui.set_home = Lokasyon ng Home +gui.set_clear_home = I-clear ang Home +gui.set_disband_faction = Buwagin ang Paksyon +gui.set_faction_color = Kulay ng Paksyon +gui.set_admin_override = [Admin Override] +gui.set_territory_perms = Mga Pahintulot sa Teritoryo +gui.set_mob_spawning = Pag-spawn ng Mob +gui.set_faction_settings = Mga Setting ng Paksyon +gui.set_name_label = Pangalan: +gui.set_tag_label = Tag: +gui.set_desc_label = Desk: +gui.set_edit = I-edit +gui.set_status_label = Katayuan: +gui.set_location_label = Lokasyon: +gui.set_danger_zone = Mapanganib na Zone +gui.set_irreversible = Ang aksyon na ito ay hindi na maaaring ibalik. +gui.set_lock_hint = Ang ilang opsyon ay maaaring naka-lock ng server at hindi tatanggap ng mga pagbabago. +gui.set_appearance = Hitsura +gui.set_color_label = Kulay: +gui.set_mob_sub = (mga anak ay naka-disable kapag naka-off ang master) +gui.set_back_to_info = Bumalik sa Info +gui.set_col_out = Labas +gui.set_col_ally = Kakampi +gui.set_col_mem = Kasapi +gui.set_col_off = Opisyal +gui.set_cat_building = PAGTATAYO +gui.set_cat_interaction = INTERAKSYON +gui.set_cat_interact_sub = (mga anak ay naka-disable kapag naka-off ang Lahat) +gui.set_cat_other = IBA PA +gui.set_perm_break = Sirain +gui.set_perm_place = Ilagay +gui.set_perm_all = Lahat +gui.set_perm_door = Pinto +gui.set_perm_chest = Chest +gui.set_perm_bench = Bench +gui.set_perm_processing = Processing +gui.set_perm_seat = Upuan +gui.set_perm_transport = Transport +gui.set_perm_crate_use = Paggamit ng Crate +gui.set_perm_npc_tame = Pag-tame ng NPC +gui.set_perm_pve_damage = PvE Damage +gui.set_perm_mob_spawning = Pag-spawn ng Mob +gui.set_perm_hostile = Mga Agresibong Mob +gui.set_perm_passive = Mga Pasibong Mob +gui.set_perm_neutral = Mga Neutral na Mob +gui.set_perm_pvp = PvP sa Teritoryo +gui.set_perm_officers_edit = Maaaring mag-edit ang mga opisyal + +# Mga label ng relasyon ng paksyon +gui.rel_subtitle = Pamahalaan ang mga relasyon ng paksyon (nilalampasan ang pag-apruba) +gui.rel_set_new = Magtakda ng Bagong Relasyon +gui.rel_btn_ally = Kakampi +gui.rel_btn_neutral = Neutral +gui.rel_btn_enemy = Kalaban + +# Mga label ng pahina ng zone +gui.zone_sort_name = Pangalan +gui.zone_sort_type = Uri +gui.zone_sort_chunks = Mga Chunk +gui.zone_sort_world = Mundo +gui.zone_count_format = {0} {1}zones ({2} chunks) + +# Mga label ng mapa ng zone +gui.map_zone_chunk = Chunk ng Zone +gui.map_empty = Walang laman +gui.map_other_zone = Ibang Zone +gui.map_faction_claim = Claim ng Paksyon +gui.map_protected = Protektado +gui.map_your_pos = Iyong Posisyon +gui.map_click_hint = I-click upang mag-claim/mag-unclaim ng mga chunk +gui.map_legend_zone_safe = Itong Zone (Safe) +gui.map_legend_zone_war = Itong Zone (War) +gui.map_legend_other_safe = Ibang SafeZone +gui.map_legend_other_war = Ibang WarZone +gui.map_legend_faction = Claim ng Paksyon +gui.map_legend_unclaimed = Hindi naka-claim +gui.map_legend_you_here = Narito ka +gui.map_action_hint = Left-click: I-claim para sa zone | Right-click: I-unclaim mula sa zone +gui.map_done = Tapos + +# Mga label ng katangian ng zone +gui.zprop_general = Pangkalahatan +gui.zprop_zone_name = Pangalan ng Zone +gui.zprop_zone_type = Uri ng Zone +gui.zprop_change_type = Palitan ang Uri +gui.zprop_notifications = Mga Notipikasyon +gui.zprop_show_entry = Ipakita ang Entry Notification +gui.zprop_upper_title = Upper Title +gui.zprop_upper_desc = Upper Title (maliit na teksto sa itaas ng pangalan ng zone) +gui.zprop_lower_title = Lower Title +gui.zprop_lower_desc = Lower Title (malaking teksto ng pangalan ng zone) +gui.zprop_edit_flags = I-edit ang mga Flag +gui.zprop_back_to_zones = Bumalik sa mga Zone +gui.save = I-save +gui.clear = I-clear + +# Mga label ng bulk economy +gui.bulk_header = Isaayos ang Lahat ng Kaban ng Yaman ng Paksyon +gui.bulk_factions_label = Mga Paksyon: +gui.bulk_total_label = Kabuuang Balanse: +gui.bulk_amount_hint = Halaga (positibo upang magdagdag, negatibo upang magtanggal): +gui.bulk_hint = Ito ay ilalapat sa bawat paksyon na may kaban ng yaman +gui.bulk_warning_msg = Babala: Ang aksyon na ito ay nakakaapekto sa LAHAT ng paksyon at hindi na maaaring ibalik. +gui.bulk_apply_all = Ilapat sa Lahat +gui.bulk_operation = Operasyon +gui.bulk_add = Magdagdag +gui.bulk_remove = Magtanggal +gui.bulk_amount = Halaga +gui.bulk_warning = Ito ay makakaapekto sa LAHAT ng kaban ng yaman ng paksyon. +gui.bulk_preview = Preview + +# Mga label ng pagsasaayos ng ekonomiya +gui.ecadj_header = Isaayos ang Balanse ng Kaban ng Yaman +gui.ecadj_faction_label = Paksyon: +gui.ecadj_current_balance = Kasalukuyang Balanse: +gui.ecadj_amount_hint = Halaga (positibo upang magdagdag, negatibo upang ibawas): +gui.ecadj_preview_hint = Maglagay ng numero upang i-preview ang pagbabago +gui.ecadj_adjustment = Pagsasaayos: +gui.ecadj_set_balance = Itakda ang Balanse +gui.ecadj_confirm = Kumpirmahin +/- +gui.ecadj_operation = Operasyon +gui.ecadj_add = Magdagdag +gui.ecadj_remove = Magtanggal +gui.ecadj_set_to = Itakda Sa +gui.ecadj_amount = Halaga +gui.ecadj_new_balance = Bagong Balanse: + +# Mga label ng integrasyon ng pahina ng bersyon +gui.ver_hyperperms = HyperPerms +gui.ver_luckperms = LuckPerms +gui.ver_vault = VaultUnlocked +gui.ver_native = Hytale Native +gui.ver_hyperprotect = HyperProtect +gui.ver_orbisguard_mixins = OrbisGuard Mixins +gui.ver_orbisguard_api = OrbisGuard API +gui.ver_mixin_hooks = Mixin Hooks +gui.ver_gravestones = Mga Lapida +gui.ver_kyuubisoft = KyuubiSoft +gui.ver_placeholder_api = PlaceholderAPI +gui.ver_wiflow_papi = WiFlow PAPI +gui.ver_treasury = Kaban ng Yaman + +# Mga label ng modal ng kumpirmasyon ng unclaim lahat +gui.unclaim_title = I-unclaim ang Lahat ng Teritoryo +gui.unclaim_confirm_msg1 = Sigurado ka bang gusto mong i-unclaim ang lahat ng +gui.unclaim_confirm_msg2 = mula sa +gui.unclaim_warning = Ang aksyon na ito ay hindi na maaaring ibalik! +gui.unclaim_all = I-unclaim Lahat + +# Mga label ng modal ng pagpapalit ng pangalan ng zone +gui.zren_title = Palitan ang Pangalan ng Zone +gui.zren_current = Kasalukuyan: +gui.zren_new_name = Bagong Pangalan: + +# Mga label ng modal ng pagpapalit ng uri ng zone +gui.ztype_title = Palitan ang Uri ng Zone +gui.ztype_zone_label = Zone: +gui.ztype_current = Kasalukuyan: +gui.ztype_will_become = ay magiging +gui.ztype_new = Bago: +gui.ztype_warning1 = Ang iba't ibang uri ng zone ay may iba't ibang default na halaga ng flag. +gui.ztype_warning2 = Piliin kung paano pangasiwaan ang mga umiiral na setting ng flag: +gui.ztype_keep_desc = Panatilihin ang mga custom override +gui.ztype_keep_flags = Panatilihin ang mga Flag +gui.ztype_reset_desc = Gamitin ang mga default ng bagong uri +gui.ztype_reset_flags = I-reset ang mga Flag + +# Mga label ng wizard ng paggawa ng zone +gui.czw_title = Gumawa ng Zone +gui.czw_back = < Bumalik +gui.czw_create = Gumawa ng Zone +gui.czw_zone_type = Uri ng Zone +gui.czw_safe_desc = Protektado, walang PvP +gui.czw_war_desc = Labanan, PvP naka-enable +gui.czw_zone_name = Pangalan ng Zone +gui.czw_name_desc = Maglagay ng natatanging pangalan para sa zone +gui.czw_claim_method = Paraan ng Pag-claim +gui.czw_method_none_desc = Gumawa ng walang laman na zone +gui.czw_method_none = Walang claim +gui.czw_method_single_desc = Ang iyong kasalukuyang chunk +gui.czw_method_single = Isang chunk +gui.czw_method_circle_desc = Bilog na lugar +gui.czw_method_circle = Radius ng bilog +gui.czw_method_square_desc = Parisukat na lugar +gui.czw_method_square = Radius ng parisukat +gui.czw_method_map_desc = Interactive na chunk editor +gui.czw_method_map = Gamitin ang claim map +gui.czw_radius = Radius +gui.czw_custom_radius = Custom (1-50): +gui.czw_flags = Mga Flag +gui.czw_flags_defaults_desc = Batay sa uri ng zone +gui.czw_flags_defaults = Gamitin ang mga default +gui.czw_flags_customize_desc = Buksan ang mga setting pagkatapos +gui.czw_flags_customize = I-customize + +# ========== Mga Label ng Entry (mga listahan ng Paksyon/Manlalaro/Zone) ========== + +# Mga label ng entry ng paksyon +gui.fac_entry_power = kapangyarihan +gui.fac_entry_claims = mga claim +gui.fac_entry_members = mga kasapi +gui.fac_entry_created = Nilikha: +gui.fac_entry_home = Home: +gui.fac_entry_tp_home = TP Home +gui.fac_entry_view_info = Tingnan ang Info +gui.fac_entry_members_btn = Mga Kasapi +gui.fac_entry_settings = Mga Setting +gui.fac_entry_unclaim_all = I-unclaim Lahat +gui.fac_entry_disband = Buwagin + +# Mga label ng entry ng manlalaro +gui.plr_entry_role = Tungkulin: +gui.plr_entry_joined = Sumali: +gui.plr_entry_last_online = Huling Online: +gui.plr_entry_kdr = K/D/R: +gui.plr_entry_power = Kapangyarihan: +gui.plr_entry_uuid = UUID: +gui.plr_entry_info = Info +gui.plr_entry_teleport = Teleport +gui.plr_entry_na = N/A +gui.plr_entry_unknown = Hindi alam +gui.plr_entry_ago = {0} nakalipas + +# Mga label ng entry ng zone +gui.zone_entry_world = Mundo: +gui.zone_entry_chunks = Mga Chunk: +gui.zone_entry_bounds = Hangganan: +gui.zone_entry_created = Nilikha: +gui.zone_entry_edit_map = I-edit ang Mapa +gui.zone_entry_flags = Mga Flag +gui.zone_entry_settings = Mga Setting +gui.zone_entry_delete = Tanggalin diff --git a/src/main/resources/Server/Languages/tl-PH/hyperfactions_gui.lang b/src/main/resources/Server/Languages/tl-PH/hyperfactions_gui.lang new file mode 100644 index 00000000..c9b39c6b --- /dev/null +++ b/src/main/resources/Server/Languages/tl-PH/hyperfactions_gui.lang @@ -0,0 +1,866 @@ +# HyperFactions GUI - Filipino (Tagalog) na mga Salin +# Format: key = value +# Note: Ang mga key ay awtomatikong may prefix na "hyperfactions_gui." mula sa I18nModule ng Hytale + +# ========== Navigation Bar ========== +nav.dashboard = Dashboard +nav.chat = Chat +nav.members = Mga Kasapi +nav.invites = Mga Imbitasyon +nav.browser = Mag-browse +nav.map = Mapa +nav.leaderboard = Leaderboard +nav.relations = Mga Relasyon +nav.treasury = Kaban ng Yaman +nav.settings = Mga Setting +nav.logs = Mga Talaan +nav.help = Tulong +nav.admin = Admin +nav.create = Gumawa + +# ========== Mga Pangalan ng Kategorya ng Tulong ========== +help.category.welcome = Maligayang Pagdating +help.category.your_faction = Ang Iyong Paksyon +help.category.power_land = Kapangyarihan at Lupa +help.category.diplomacy = Diplomasya +help.category.combat = Labanan at Kaligtasan +help.category.economy = Ekonomiya +help.category.quick_ref = Mabilisang Sanggunian + +# ========== Mga Pangalan ng Kategorya ng Admin Help ========== +help.category.admin_overview = Pangkalahatang-tanaw +help.category.admin_factions = Mga Paksyon +help.category.admin_zones = Mga Zone +help.category.admin_power = Kapangyarihan +help.category.admin_economy = Ekonomiya +help.category.admin_config = Konpigurasyon +help.category.admin_maintenance = Pagpapanatili +help.category.admin_reference = Sanggunian + +# ========== Pangunahing Menu ========== +main_menu.title = HyperFactions +main_menu.section_my_faction = Aking Paksyon +main_menu.section_get_started = Magsimula +main_menu.section_territory = Teritoryo +main_menu.section_browse = Mag-browse +main_menu.section_admin = Admin +main_menu.claim_hint = Gamitin ang /f claim upang mag-claim ng teritoryo. + +# ========== Pahina ng Impormasyon ng Paksyon ========== +faction_info.title = Impormasyon ng Paksyon +faction_info.no_description = Walang itinakdang deskripsyon. +faction_info.status_open = Bukas +faction_info.status_invite_only = Sa Imbitasyon Lamang +faction_info.status_raidable = Raidable +faction_info.status_protected = Protektado +faction_info.officers_more = +{0} pa +faction_info.power_header = Kapangyarihan +faction_info.claims_header = Mga Claim +faction_info.members_header = Mga Kasapi +faction_info.relations_header = Mga Relasyon +faction_info.status_header = Katayuan +faction_info.treasury_header = Kaban ng Yaman +faction_info.current_max = kasalukuyan / maximum +faction_info.claimed_max = naka-claim / maximum +faction_info.ally_enemy = kakampi / kalaban +faction_info.faction_balance = balanse ng paksyon +faction_info.leader_label = Pinuno: +faction_info.officers_label = Mga Opisyal: +faction_info.view_members_btn = Tingnan ang mga Kasapi +faction_info.relations_btn = Mga Relasyon +faction_info.back_btn = Bumalik + +# ========== Modal ng Pagpapalit ng Pangalan ========== +rename.title = Palitan ang Pangalan ng Paksyon +rename.current_label = Kasalukuyan: +rename.new_name_label = Bagong Pangalan: +rename.no_permission = Wala kang pahintulot na palitan ang pangalan ng paksyon. +rename.enter_name = Pakilagay ng pangalan ng paksyon. +rename.too_short = Ang pangalan ng paksyon ay dapat hindi bababa sa {0} karakter. +rename.too_long = Ang pangalan ng paksyon ay hindi maaaring lumampas sa {0} karakter. +rename.same_name = Iyan na ang pangalan ng iyong paksyon. +rename.name_taken = Mayroon nang paksyon na may ganitong pangalan. +rename.success = Ang paksyon ay pinalitan ng pangalan mula {0} sa {1}! + +# ========== Modal ng Deskripsyon ========== +desc.title = I-edit ang Deskripsyon +desc.current_label = Kasalukuyan: +desc.new_desc_label = Bagong Deskripsyon: +desc.no_permission = Wala kang pahintulot na i-edit ang deskripsyon. +desc.display_none = (Wala) +desc.cleared = Na-clear na ang deskripsyon ng paksyon. +desc.updated = Na-update na ang deskripsyon ng paksyon! + +# ========== Modal ng Tag ========== +tag.title = I-edit ang Tag +tag.current_label = Kasalukuyan: +tag.instructions = Tag (1-5 karakter, mga letra at numero lamang): +tag.help_text = Ang mga tag ay lumalabas sa chat at sa mapa +tag.no_permission = Wala kang pahintulot na i-edit ang tag. +tag.display_none = (Wala) +tag.cleared = Na-clear na ang tag ng paksyon. +tag.too_short = Ang tag ay dapat hindi bababa sa {0} karakter. +tag.too_long = Ang tag ay hindi maaaring lumampas sa {0} karakter. +tag.invalid_format = Ang tag ay maaari lamang maglaman ng mga letra at numero. +tag.same_tag = Iyan na ang tag ng iyong paksyon. +tag.tag_taken = Mayroon nang paksyon na may ganitong tag. +tag.success = Ang tag ng paksyon ay naitakda sa [{0}]! + +# ========== Pahina ng Dashboard ========== +dashboard.title = Dashboard ng Paksyon +dashboard.power_label = Kapangyarihan +dashboard.land_label = Mga Claim +dashboard.members_label = Mga Kasapi +dashboard.online_label = Online +dashboard.allies_label = Mga Kakampi +dashboard.enemies_label = Mga Kalaban +dashboard.relations_label = Mga Relasyon +dashboard.ally_enemy_label = kakampi / kalaban +dashboard.status_label = Katayuan +dashboard.invites_label = Mga Imbitasyon +dashboard.sent_requests_label = naipadala / mga kahilingan +dashboard.treasury_label = Kaban ng Yaman +dashboard.upkeep_label = Sustento +dashboard.per_cycle = bawat siklo +dashboard.your_wallet = Ang Iyong Wallet +dashboard.personal_balance = personal na balanse +dashboard.quick_actions = Mga Mabilisang Aksyon +dashboard.teleport_label = Teleport +dashboard.territory_label = Teritoryo +dashboard.channel_label = Channel +dashboard.membership_label = Pagsapi +dashboard.recent_activity = Kamakailang Aktibidad +dashboard.view_all = Tingnan Lahat +dashboard.income_24h = Kita (24h) +dashboard.deposits_transfers_in = mga deposito, mga papasok na paglipat +dashboard.expenses_24h = Mga Gastos (24h) +dashboard.withdrawals_transfers_out = mga withdrawal, mga papalabas na paglipat +dashboard.faction_gone = Wala na ang iyong paksyon. +dashboard.available = {0} magagamit +dashboard.at_risk = Nasa Panganib! +dashboard.online_count = {0} online +dashboard.status_invite = Imbitasyon +dashboard.in_grace = SA GRACE +dashboard.billable_chunks = {0} billable chunks +dashboard.btn_home = Home +dashboard.btn_set_home = Itakda ang Home +dashboard.btn_claim = Claim +dashboard.chat_prefix = Chat: {0} +dashboard.btn_leave = Umalis +dashboard.no_activity = Walang kamakailang aktibidad. +dashboard.time_now = ngayon +dashboard.time_minutes = {0}m nakalipas +dashboard.time_hours = {0}h nakalipas +dashboard.time_days = {0}d nakalipas +dashboard.no_home_hint = Walang home ang iyong paksyon. Hilingin sa isang opisyal na magtakda ng isa. +dashboard.chat_mode_set = Chat mode: {0} +dashboard.claim_success = Na-claim ang chunk sa ({0}, {1}) +dashboard.upkeep_in = sa loob ng {0} + +# ========== Pangunahing Pahina ng Paksyon ========== +main.no_faction = Walang Paksyon +main.joined = Sumali ka na sa paksyon! +main.join_failed = Nabigo ang pagsali sa paksyon: {0} +main.invite_declined = Tinanggihan ang imbitasyon. +main.cooldown = Nasa cooldown ang teleport! {0}s ang natitira. +main.world_not_found = Hindi maaaring mag-teleport - hindi nahanap ang mundo. +main.leave_failed = Nabigo ang pag-alis: {0} + +# ========== Mga Ibinahaging Label ng GUI ========== +common.faction_count = {0} mga paksyon +common.leader_label = Pinuno: {0} +common.sort_power = Kapangyarihan +common.sort_members = Mga Kasapi +common.page_format = {0}/{1} +common.own_faction = (Ikaw) +common.search = Maghanap: +common.sort = Ayusin: +common.prev = < Nakaraang +common.next = Susunod > +common.treasury_not_available = Hindi magagamit ang kaban ng yaman. + +# ========== Pahina ng mga Kasapi ========== +members.title = Mga Kasapi +members.search_label = Maghanap: +members.sort_label = Ayusin: +members.prev_btn = < Nakaraang +members.next_btn = Susunod > +members.count = {0} kasapi +members.sort_role = Tungkulin +members.sort_last_online = Huling Online +members.just_now = ngayon lang +members.ago = {0} nakalipas +members.never = Kailanman +members.member_not_found = Hindi nahanap ang kasapi. +members.promoted = Na-promote si {0} sa {1}. +members.promote_failed = Nabigo ang pag-promote: {0} +members.demoted = Na-demote si {0} sa {1}. +members.demote_failed = Nabigo ang pag-demote: {0} +members.kicked = Pinalayas si {0} mula sa paksyon. +members.kick_failed = Nabigo ang pagpaalis: {0} +members.label_power = Kapangyarihan: +members.label_joined = Sumali: +members.label_last_death = Huling Kamatayan: +members.btn_promote = I-promote +members.btn_demote = I-demote +members.btn_kick = Paalisin +members.btn_make_leader = Gawing Pinuno +members.btn_profile = Profile +members.self_label = (Ikaw) + +# ========== Pahina ng Browser ========== +browser.title = Mag-browse ng mga Paksyon +browser.search_label = Maghanap: +browser.sort_label = Ayusin: +browser.prev_btn = < Nakaraang +browser.next_btn = Susunod > +browser.sort_name = Pangalan +browser.invalid_faction = Hindi wastong paksyon. +browser.label_power = kapangyarihan +browser.label_claims = mga claim +browser.label_members = mga kasapi +browser.label_recruitment = Recruitment: +browser.label_created = Nilikha: +browser.label_description = Deskripsyon: +browser.view_info_btn = Tingnan ang Info +browser.label_leader = Pinuno: +browser.no_description = Walang itinakdang deskripsyon + +# ========== Pahina ng Leaderboard ========== +leaderboard.title = Leaderboard ng Paksyon +leaderboard.rank_by = Ranggo ayon sa: +leaderboard.col_rank = # +leaderboard.col_faction = Paksyon +leaderboard.col_claims = Mga Claim +leaderboard.col_members = Mga Kasapi +leaderboard.prev_btn = < Nakaraang +leaderboard.next_btn = Susunod > +leaderboard.sort_kd = K/D +leaderboard.sort_territory = Teritoryo +leaderboard.sort_balance = Balanse + +# ========== Pahina ng Impormasyon ng Manlalaro ========== +playerinfo.title = Impormasyon ng Manlalaro +playerinfo.first_joined_label = Unang sumali: +playerinfo.last_online_label = Huling online: +playerinfo.faction_label = Paksyon: +playerinfo.role_label = Tungkulin: +playerinfo.joined_label_static = Sumali: +playerinfo.not_in_faction = Wala sa isang paksyon +playerinfo.power_header = Kapangyarihan +playerinfo.current_max = kasalukuyan / maximum +playerinfo.combat_header = Labanan +playerinfo.kills_deaths = mga patay / mga kamatayan +playerinfo.kdr_header = K/D Ratio +playerinfo.membership_history = Kasaysayan ng Pagsapi +playerinfo.view_faction_btn = Tingnan ang Paksyon +playerinfo.back_btn = Bumalik +playerinfo.now = Ngayon +playerinfo.history_count = {0} tala +playerinfo.joined_label = Sumali: {0} +playerinfo.current = Kasalukuyan +playerinfo.left_label = Umalis: {0} +playerinfo.no_history = Walang kasaysayan ng pagsapi +playerinfo.faction_gone = Wala na ang paksyon. +playerinfo.reason_active = AKTIBO +playerinfo.reason_left = UMALIS +playerinfo.reason_kicked = PINALAYAS +playerinfo.reason_disbanded = NABUAG + +# ========== Pahina ng mga Relasyon ========== +relations.title = Mga Relasyon +relations.tab_relations = Mga Relasyon +relations.tab_pending = Nakabinbin +relations.set_relation_btn = + Itakda ang Relasyon +relations.prev_btn = < Nakaraang +relations.next_btn = Susunod > +relations.relation_count = {0} relasyon +relations.request_count = {0} kahilingan +relations.type_ally = Kakampi +relations.type_enemy = Kalaban +relations.type_incoming = Papasok +relations.type_outgoing = Papalabas +relations.incoming_request = Papasok na kahilingan +relations.outgoing_request = Papalabas na kahilingan +relations.empty_relations = Wala pang mga relasyon. +relations.empty_relations_hint = Wala pang mga relasyon. I-click ang + ITAKDA ANG RELASYON upang magdagdag ng mga kakampi o kalaban. +relations.empty_pending = Walang nakabinbing kahilingan ng alyansa. +relations.today = Ngayon +relations.one_day_ago = 1 araw nakalipas +relations.days_ago = {0} araw nakalipas +relations.now_neutral = Neutral na sa {0}. +relations.now_enemies = Kalaban na ng {0}! +relations.request_sent = Naipadala ang kahilingan ng alyansa sa {0}. +relations.now_allied = Kakampi na ng {0}! +relations.request_declined = Tinanggihan ang kahilingan ng alyansa mula sa {0}. +relations.request_cancelled = Kinansela ang kahilingan ng alyansa sa {0}. +relations.failed = Nabigo: {0} +relations.search_hint = Maghanap ng paksyon upang itakda ang relasyon +relations.no_results = Walang nahanap na paksyon na tumutugma sa '{0}' +relations.power_display = {0} kapangyarihan +relations.member_count = {0} kasapi +relations.label_members = mga kasapi +relations.label_power = kapangyarihan +relations.label_since = Mula noong: +relations.label_claims = Mga Claim: +relations.label_direction = Direksyon: +relations.btn_view = Tingnan +relations.btn_neutral = Neutral +relations.btn_enemy = Kalaban +relations.btn_ally = Kakampi +relations.btn_accept = Tanggapin +relations.btn_decline = Tanggihan +relations.btn_cancel = Kanselahin + +# ========== Pahina ng mga Setting ========== +settings.title = Mga Setting ng Paksyon +settings.general = Pangkalahatan +settings.name_label = Pangalan: +settings.tag_label = Tag: +settings.desc_label = Desk: +settings.edit_btn = I-edit +settings.recruitment = Recruitment +settings.status_label = Katayuan: +settings.home_location = Lokasyon ng Home +settings.location_label = Lokasyon: +settings.set_home_btn = Itakda ang Home +settings.teleport_btn = Teleport +settings.delete_btn = Tanggalin +settings.optional_features = Mga Opsyonal na Feature +settings.configure_modules = I-configure ang mga opsyonal na module. +settings.modules_btn = Mga Module +settings.danger_zone = Mapanganib na Zone +settings.irreversible = Ang aksyon na ito ay hindi na maaaring ibalik. +settings.disband_btn = Buwagin ang Paksyon +settings.lock_hint = Ang ilang opsyon ay maaaring naka-lock ng server at hindi tatanggap ng mga pagbabago. +settings.territory_permissions = Mga Pahintulot sa Teritoryo +settings.col_out = Labas +settings.col_ally = Kakampi +settings.col_mem = Kasapi +settings.col_off = Opisyal +settings.cat_building = PAGTATAYO +settings.perm_break = Sirain +settings.perm_place = Ilagay +settings.cat_interaction = INTERAKSYON +settings.interaction_hint = (mga anak ay naka-disable kapag naka-off ang Lahat) +settings.perm_all = Lahat +settings.perm_door = Pinto +settings.perm_chest = Chest +settings.perm_bench = Bench +settings.perm_processing = Processing +settings.perm_seat = Upuan +settings.perm_transport = Transport +settings.cat_other = IBA PA +settings.perm_crate = Paggamit ng Crate +settings.perm_npc_tame = Pag-tame ng NPC +settings.perm_pve = PvE Damage +settings.appearance = Hitsura +settings.color_label = Kulay: +settings.mob_spawning = Pag-spawn ng Mob +settings.mob_spawning_hint = (mga anak ay naka-disable kapag naka-off ang master) +settings.mob_spawning_label = Pag-spawn ng Mob +settings.hostile_mobs = Mga Agresibong Mob +settings.passive_mobs = Mga Pasibong Mob +settings.neutral_mobs = Mga Neutral na Mob +settings.faction_settings = Mga Setting ng Paksyon +settings.pvp_in_territory = PvP sa Teritoryo +settings.officers_can_edit = Maaaring mag-edit ang mga opisyal +settings.leader_only = Pinuno lamang +settings.officers_only = Tanging mga opisyal at pinuno lamang ang maaaring magbago ng mga setting ng paksyon. +settings.display_none = (Wala) +settings.home_not_set = Hindi pa naitakda +settings.no_permission = Wala kang pahintulot na baguhin ang mga setting. +settings.only_leader_disband = Tanging ang pinuno lamang ang maaaring bumuag ng paksyon. +settings.perm_locked = Ang setting na ito ay naka-lock ng server. +settings.no_perm_edit = Wala kang pahintulot na i-edit ang mga pahintulot sa teritoryo. +settings.only_leader_officers = Tanging ang pinuno lamang ang maaaring magbago ng access ng opisyal. +settings.pvp_enabled = Naka-enable +settings.pvp_disabled = Naka-disable +settings.not_in_territory = Dapat ikaw ay nasa teritoryo ng iyong paksyon upang magtakda ng home. +settings.home_set = Ang faction home ay naitakda sa iyong kasalukuyang lokasyon! +settings.recruitment_set = Ang recruitment ay naitakda sa {0}. +settings.home_no_set = Walang itinakdang home ang iyong paksyon. +settings.home_deleted = Natanggal na ang faction home! + +# ========== Pahina ng mga Module ========== +modules.title = Mga Module ng Paksyon +modules.description = Mga opsyonal na feature upang pahusayin ang iyong paksyon +modules.configure_btn = I-configure +modules.back_btn = < Bumalik sa mga Setting +modules.treasury_name = Kaban ng Yaman +modules.treasury_desc = Sistema ng bangko at ekonomiya ng paksyon +modules.raids_name = Mga Raid +modules.raids_desc = Mga naka-iskedyul na labanan ng paksyon +modules.levels_name = Mga Antas +modules.levels_desc = Pag-unlad at XP ng paksyon +modules.war_name = Digmaan +modules.war_desc = Pormal na deklarasyon ng digmaan +modules.coming_soon = Malapit Na +modules.active = Aktibo +modules.view_treasury = Tingnan ang Kaban ng Yaman +modules.unavailable = Hindi Magagamit +modules.no_economy = Walang nakitang economy plugin +modules.disabled = Naka-disable +modules.economy_not_available = Ang mga feature ng ekonomiya ay hindi magagamit sa server na ito + +# ========== Pahina ng Kaban ng Yaman ========== +treasury.title = Kaban ng Yaman ng Paksyon +treasury.balance_label = Balanse +treasury.income_24h = Kita (24h) +treasury.deposits_transfers_in = mga deposito, mga papasok na paglipat +treasury.expenses_24h = Mga Gastos (24h) +treasury.withdrawals_transfers_out = mga withdrawal, mga papalabas na paglipat +treasury.maintenance = PAGPAPANATILI +treasury.runway_label = Runway: +treasury.add_funds = Magdagdag ng pondo +treasury.deposit_btn = Magdeposito +treasury.take_funds = Kumuha ng pondo +treasury.withdraw_btn = Mag-withdraw +treasury.send_to_faction = Ipadala sa paksyon +treasury.transfer_btn = Ilipat +treasury.treasury_config = Konpigurasyon ng kaban ng yaman +treasury.settings_btn = Mga Setting +treasury.recent_transactions = Mga Kamakailang Transaksyon +treasury.no_transactions = Wala pang mga transaksyon +treasury.col_date = Petsa +treasury.col_type = Uri +treasury.col_by = Ni +treasury.col_amount = Halaga +treasury.col_details = Mga Detalye +treasury.pay_now_btn = Magbayad Ngayon +treasury.cost_7d = 7d: +treasury.cost_14d = 14d: +treasury.cost_30d = 30d: +treasury.settings_title = Mga Setting ng Kaban ng Yaman +treasury.officer_permissions = MGA PAHINTULOT NG OPISYAL +treasury.allow_withdraw = Payagan ang mga Opisyal na Mag-withdraw +treasury.allow_transfer = Payagan ang mga Opisyal na Maglipat +treasury.limits_section = MGA LIMITASYON SA WITHDRAWAL AT PAGLIPAT +treasury.max_per_withdrawal = Maximum bawat withdrawal: +treasury.max_withdrawals_per = Maximum na withdrawal bawat period: +treasury.max_per_transfer = Maximum bawat paglipat: +treasury.max_transfers_per = Maximum na paglipat bawat period: +treasury.limit_period = Period ng limitasyon (oras): +treasury.no_limit_hint = Itakda sa 0 para walang limitasyon +treasury.upkeep_settings = MGA SETTING NG SUSTENTO +treasury.auto_pay_upkeep = Awtomatikong magbayad ng sustento mula sa kaban ng yaman +treasury.back_btn = Bumalik +treasury.upkeep_cost_format = {0} bawat {1}h +treasury.upkeep_time_left = {0} na lang +treasury.wallet_label = Ang iyong wallet: {0} +treasury.treasury_label = Balanse ng kaban ng yaman: {0} +treasury.chunks_detail = {0} libre + {1} billable chunks +treasury.cost_label = Halaga: {0} +treasury.pending = Nakabinbin +treasury.auto_pay_on = Auto-pay: BUKAS +treasury.auto_pay_off = Auto-pay: SARADO +treasury.runway_90_plus = 90+ araw +treasury.runway_days = {0} araw +treasury.runway_day = {0} araw +treasury.runway_less_day = < 1 araw +treasury.runway_no_funds = Walang pondo +treasury.grace_expires = Ang grace ay mag-e-expire sa: {0} +treasury.missed_payments = Mga napalampas na bayad: {0} +treasury.pay_to_clear = Magbayad ng {0} upang i-clear ang grace +treasury.system = Sistema +treasury.type_deposit = Deposito +treasury.type_withdrawal = Withdrawal +treasury.type_transfer_in = Papasok na Paglipat +treasury.type_transfer_out = Papalabas na Paglipat +treasury.type_player_transfer = Paglipat ng Manlalaro +treasury.type_upkeep = Sustento +treasury.type_tax = Koleksyon ng Buwis +treasury.type_war_cost = Gastos sa Digmaan +treasury.type_raid_cost = Gastos sa Raid +treasury.type_spoils = Mga Nakuha +treasury.type_admin = Pagsasaayos ng Admin +treasury.deposit_title = Magdeposito sa Kaban ng Yaman +treasury.withdraw_title = Mag-withdraw mula sa Kaban ng Yaman +treasury.fee_label = Bayarin ({0}%) +treasury.confirm_deposit = Kumpirmahin ang Deposito +treasury.confirm_withdrawal = Kumpirmahin ang Withdrawal +treasury.from_wallet = {0} mula sa wallet +treasury.to_wallet = {0} papunta sa wallet +treasury.enter_valid_amount = Maglagay ng wastong positibong halaga. +treasury.insufficient_wallet = Kulang ang pondo sa wallet. Kailangan ng {0}, mayroon ng {1}. +treasury.wallet_withdraw_failed = Nabigo ang pag-withdraw mula sa iyong wallet. +treasury.deposit_failed_returned = Nabigo ang pagdeposito. Ibinalik ang pera. +treasury.deposited = Nagdeposito ng {0} sa kaban ng yaman. +treasury.deposited_fee = Nagdeposito ng {0} sa kaban ng yaman. (bayarin: {1}) +treasury.no_withdraw_permission = Wala kang pahintulot na mag-withdraw. +treasury.withdraw_denied = Tinanggihan ang withdrawal: {0} +treasury.insufficient_treasury = Kulang ang pondo sa kaban ng yaman. +treasury.withdraw_limit = Lumampas sa limitasyon ng withdrawal. +treasury.withdraw_failed = Nabigo ang withdrawal: {0} +treasury.wallet_deposit_warn = Babala: Nabigo ang pagdeposito sa iyong wallet. Kontakin ang admin. +treasury.withdrew = Nag-withdraw ng {0} mula sa kaban ng yaman. +treasury.withdrew_fee = Nag-withdraw ng {0} mula sa kaban ng yaman. (bayarin: {1}, natanggap: {2}) +treasury.search_hint = Maghanap ng manlalaro o paksyon +treasury.no_results = Walang resulta para sa '{0}' +treasury.tag_player = [Manlalaro] +treasury.tag_faction = [Paksyon] +treasury.source_online = Online +treasury.source_offline = Offline +treasury.source_player_db = Manlalaro ng Hytale +treasury.no_transfer_permission = Wala kang pahintulot na maglipat. +treasury.transfer_denied = Tinanggihan ang paglipat: {0} +treasury.invalid_target_faction = Hindi wastong target na paksyon. +treasury.target_faction_gone = Wala na ang target na paksyon. +treasury.transfer_failed = Nabigo ang paglipat: {0} +treasury.transfer_failed_returned = Nabigo ang paglipat. Ibinalik ang pondo. +treasury.transferred = Naglipat ng {0} sa {1}. +treasury.invalid_target_player = Hindi wastong target na manlalaro. +treasury.player_transfer_failed = Nabigo ang pagdeposito sa wallet ng manlalaro. Ibinalik ang paglipat. +treasury.leader_only_perms = Tanging ang pinuno lamang ang maaaring magbago ng mga pahintulot sa kaban ng yaman. +treasury.leader_only_upkeep = Tanging ang pinuno lamang ang maaaring magbago ng mga setting ng sustento. +treasury.invalid_limit = Hindi wastong numero sa mga field ng limitasyon. Gamitin ang 0 para walang limitasyon. + +# ========== Mga Pahina ng Kumpirmasyon ========== +confirm.disband_title = Buwagin ang Paksyon +confirm.disband_prompt = Sigurado ka bang gusto mong buwagin ang +confirm.disband_warning = Ang aksyon na ito ay hindi na maaaring ibalik! +confirm.leave_title = Umalis sa Paksyon +confirm.leave_prompt = Sigurado ka bang gusto mong umalis sa +confirm.leave_warning = Mawawala ang iyong access sa teritoryo ng paksyon. +confirm.leader_leave_title = Umalis bilang Pinuno +confirm.leader_leave_prompt = Umaalis ka sa +confirm.transfer_title = Ilipat ang Pamumuno +confirm.transfer_prompt = Sigurado ka bang gusto mong ilipat ang pamumuno kay +confirm.transfer_warning = Ikaw ay magiging Opisyal. +confirm.disband_not_leader = Tanging ang pinuno lamang ang maaaring bumuag ng paksyon. +confirm.disbanded = Ang paksyon na '{0}' ay nabuag na. +confirm.disband_failed = Nabigo ang pagbuag ng paksyon. +confirm.succession_title = Ang pamumuno ay ililipat sa: +confirm.no_members_warning = BABALA: Walang ibang kasapi! +confirm.will_disband = Ang pag-alis ay permanenteng bubuwag sa paksyon. +confirm.not_in_faction = Wala ka sa paksyon na ito. +confirm.not_leader_anymore = Hindi ka na ang pinuno. +confirm.no_successor = Walang magpapalit. Gamitin na lang ang buwagin. +confirm.transfer_failed = Nabigo ang paglipat ng pamumuno: {0} +confirm.leader_left = Ang pamumuno ay nailipat kay {0}. Umalis ka na sa {1}. +confirm.leave_failed = Nabigo ang pag-alis sa paksyon: {0} +confirm.leader_cannot_leave = Ang mga pinuno ay hindi maaaring umalis. Ilipat ang pamumuno o buwagin ang paksyon. +confirm.left_faction = Umalis ka na sa {0}. +confirm.faction_gone = Wala na ang paksyon. +confirm.not_leader_transfer = Tanging ang pinuno lamang ang maaaring maglipat ng pamumuno. +confirm.leadership_transferred = Nailipat ang pamumuno kay {0}. + +# ========== Pahina ng Tagatingin ng mga Talaan ========== +logs.title = {0} - Mga Talaan ng Aktibidad +logs.entry_count = {0} tala +logs.filter_label = I-filter: +logs.col_time = Oras +logs.col_type = Uri +logs.col_message = Mensahe +logs.prev_btn = < Nakaraang +logs.next_btn = Susunod > +logs.all_types = Lahat ng Uri +logs.no_logs_type = Walang mga talaan ng ganitong uri. +logs.no_logs = Wala pang mga talaan ng aktibidad. +logs.time_just_now = ngayon lang +logs.time_minute = {0} minuto nakalipas +logs.time_minutes = {0} minuto nakalipas +logs.time_hour = {0} oras nakalipas +logs.time_hours = {0} oras nakalipas +logs.time_day = {0} araw nakalipas +logs.time_days = {0} araw nakalipas +logs.time_week = {0} linggo nakalipas +logs.time_weeks = {0} linggo nakalipas +logs.type_member_join = Sumali +logs.type_member_leave = Umalis +logs.type_member_kick = Paalis +logs.type_member_promote = Promote +logs.type_member_demote = Demote +logs.type_claim = Claim +logs.type_unclaim = Unclaim +logs.type_overclaim = Overclaim +logs.type_home_set = Home Naitakda +logs.type_relation_ally = Kakampi +logs.type_relation_enemy = Kalaban +logs.type_relation_neutral = Neutral +logs.type_leader_transfer = Paglipat +logs.type_settings_change = Mga Setting +logs.type_power_change = Kapangyarihan +logs.type_economy = Ekonomiya +logs.type_admin_power = Admin Power + +# Mga template ng mensahe sa log (i18n para sa nilalaman ng activity log) +# Mga aksyon ng manlalaro +logs.msg_faction_created = Nilikha ni {0} ang paksyon +logs.msg_member_joined = Sumali si {0} sa paksyon +logs.msg_member_left = Umalis si {0} sa paksyon +logs.msg_member_kicked = Pinalayas si {0} +logs.msg_member_promoted = Na-promote si {0} sa {1} +logs.msg_member_demoted = Na-demote si {0} sa {1} +logs.msg_leader_transferred = Nailipat ang pamumuno kay {0} +logs.msg_leader_left_transfer = Umalis si {0}, si {1} na ang pinuno +logs.msg_relation_set = Itinakda ang {0} bilang {1} +# Teritoryo +logs.msg_claimed = Na-claim ang chunk sa {0}, {1} sa {2} +logs.msg_unclaimed = Na-unclaim ang chunk sa {0}, {1} sa {2} +logs.msg_overclaim_lost = Nawala ang chunk sa {0}, {1} sa {2} +logs.msg_overclaim_taken = Na-overclaim ang chunk sa {0}, {1} mula sa {2} +logs.msg_all_unclaimed = Lahat ng teritoryo ay na-unclaim +logs.msg_claim_removed_world = Ang claim sa '{0}' ay tinanggal (hindi pinapayagan ng mundo ang pag-claim) +logs.msg_claims_lost_upkeep = Nawala ang {0} claim dahil sa sustento (napalampasan ang {1} bayad) +logs.msg_claims_removed_inactive = {0} claim ang tinanggal dahil sa kawalan ng aktibidad ({1} araw) +# Home +logs.msg_home_set = Naitakda ang home +logs.msg_home_cleared = Na-clear ang home +logs.msg_home_cleared_world = Ang home sa '{0}' ay na-clear (hindi pinapayagan ng mundo ang pag-claim) +# Mga Setting +logs.msg_renamed = Pinalitan ang pangalan mula '{0}' sa '{1}' +logs.msg_set_open = Ang paksyon ay itinakda sa bukas +logs.msg_set_closed = Ang paksyon ay itinakda sa imbitasyon lamang +logs.msg_desc_set = Naitakda ang deskripsyon +logs.msg_desc_cleared = Na-clear ang deskripsyon +logs.msg_color_changed = Pinalitan ang kulay sa '{0}' +# Ekonomiya +logs.msg_deposit = Deposito: {0} (+{1}) +logs.msg_withdrawal = Withdrawal: {0} (-{1}) +logs.msg_upkeep_paid = Naibayad ang sustento: {0} ({1} billable chunks) +logs.msg_upkeep_grace_started = Nabigo ang sustento: nagsimula ang grace period ({0}h) +logs.msg_upkeep_missed = Napalampasan ang sustento (bayad {0}), ang grace ay mag-e-expire sa {1} +logs.msg_upkeep_manual = Naibayad ang sustento nang mano-mano: {0} ({1} billable chunks, na-clear ang grace) +# Admin power +logs.msg_admin_power_set = Itinakda ng Admin ang kapangyarihan ni {0} sa {1} (dating {2}) +logs.msg_admin_power_add = Nagdagdag ang Admin ng {0} kapangyarihan kay {1} ({2} -> {3}) +logs.msg_admin_power_remove = Tinanggal ng Admin ang {0} kapangyarihan mula kay {1} ({2} -> {3}) +logs.msg_admin_power_reset = Na-reset ng Admin ang kapangyarihan ni {0} sa {1} (dating {2}) +logs.msg_admin_power_adjusted = In-adjust ng Admin ang kapangyarihan ni {0} ng {1} ({2} -> {3}) +logs.msg_admin_maxpower_set = Itinakda ng Admin ang max power ni {0} sa {1} (dating {2}) +logs.msg_admin_maxpower_reset = Na-reset ng Admin ang max power ni {0} sa global default ({1}) +logs.msg_admin_powerloss_enabled = In-enable ng Admin ang power loss para kay {0} +logs.msg_admin_powerloss_disabled = In-disable ng Admin ang power loss para kay {0} +logs.msg_admin_decay_enabled = In-enable ng Admin ang claim decay exemption para kay {0} +logs.msg_admin_decay_disabled = In-disable ng Admin ang claim decay exemption para kay {0} +logs.msg_admin_kd_reset = Na-reset ng Admin ang K/D para kay {0} +logs.msg_admin_power_set_all = Itinakda ng Admin ang kapangyarihan ng lahat ng {0} kasapi sa {1} +logs.msg_admin_power_add_all = Nagdagdag ang Admin ng {0} kapangyarihan sa lahat ng {1} kasapi +logs.msg_admin_power_remove_all = Tinanggal ng Admin ang {0} kapangyarihan mula sa lahat ng {1} kasapi +logs.msg_admin_power_reset_all = Na-reset ng Admin ang kapangyarihan ng lahat ng {0} kasapi +logs.msg_admin_power_adjusted_all = In-adjust ng Admin ang kapangyarihan ng lahat ng {0} kasapi ng {1} +# Admin faction +logs.msg_admin_kicked = [Admin] Pinalayas si {0} +logs.msg_admin_role_set = [Admin] Itinakda ang tungkulin ni {0} sa {1} +logs.msg_admin_leader_kick = [Admin] Nailipat ang pamumuno mula kay {0} kay {1} (admin kick) +logs.msg_admin_econ_added = Idinagdag ng Admin: {0} (balanse: {1}) +logs.msg_admin_econ_deducted = Ibinawas ng Admin: {0} (balanse: {1}) +logs.msg_admin_econ_set = Itinakda ng Admin ang balanse sa {0} (dating {1}) +# Import +logs.msg_left_import = Umalis si {0} (na-import sa ibang paksyon) +logs.msg_leader_import_transfer = Si {0} ay naging pinuno (ang dating pinuno ay na-import sa ibang paksyon) +logs.msg_imported_from = Ang paksyon ay na-import mula sa {0} + +# ========== Pahina ng Chat ========== +chat.title = Chat ng Paksyon +chat.tab_faction = Paksyon +chat.tab_ally = Kakampi +chat.send_btn = Ipadala +chat.placeholder = Mag-type ng mensahe... +chat.no_messages = Wala pang mga mensahe. +chat.no_ally_permission = Wala kang pahintulot para sa ally chat. +chat.no_permission = Walang pahintulot. +chat.faction_gone = Wala na ang iyong paksyon. +chat.time_now = ngayon +chat.time_minutes = {0}m +chat.time_hours = {0}h + +# ========== Pahina ng mga Imbitasyon ========== +invites.title = Mga Imbitasyon +invites.tab_outgoing = Papalabas +invites.tab_requests = Mga Kahilingan +invites.prev_btn = < Nakaraang +invites.next_btn = Susunod > +invites.invite_count = {0} imbitasyon +invites.request_count = {0} kahilingan +invites.invited_by = Inimbitahan ni: {0} +invites.no_message = Walang mensahe +invites.expires = Mag-e-expire: {0} +invites.type_outgoing = Papalabas +invites.type_request = Kahilingan +invites.invited_by_label = Inimbitahan ni: +invites.empty_outgoing = Walang papalabas na imbitasyon. Gamitin ang /f invite upang mag-imbita. +invites.empty_requests = Walang mga kahilingan na sumali. Ang mga manlalaro ay maaaring humiling na sumali gamit ang /f request. +invites.invalid_player = Hindi wastong manlalaro. +invites.cancelled_invite = Kinansela ang imbitasyon kay {0}. +invites.player_joined = Sumali na si {0} sa paksyon! +invites.faction_full = Puno na ang paksyon. Hindi maaaring tanggapin ang kahilingan. +invites.add_failed = Nabigo ang pagdagdag ng manlalaro sa paksyon. +invites.request_expired = Hindi nahanap o nag-expire na ang kahilingan. +invites.request_declined = Tinanggihan ang kahilingan na sumali mula kay {0}. +invites.time_seconds = {0}s +invites.time_minutes = {0}m +invites.time_hours = {0}h +invites.label_message = Mensahe: +invites.btn_cancel = Kanselahin +invites.btn_accept = Tanggapin +invites.btn_decline = Tanggihan + +# ========== Pahina ng Mapa ========== +map.title = Mapa ng Teritoryo +map.action_hint = Left-click: Claim | Right-click: Unclaim +map.legend_your = Iyong Teritoryo +map.legend_ally = Teritoryo ng Kakampi +map.legend_enemy = Teritoryo ng Kalaban +map.legend_other = Ibang Paksyon +map.legend_wilderness = Ilang +map.legend_safe = Safe Zone +map.legend_war = War Zone +map.legend_you = Narito Ka +map.position = Iyong Posisyon: Chunk ({0}, {1}) +map.legend_protected = Protektado +map.claim_stats = Mga Claim: {0}/{1} ({2} Magagamit) +map.overclaimed = NA-OVERCLAIM ng {0}! +map.power_display = Kapangyarihan: {0}/{1} +map.join_to_claim = Sumali sa isang paksyon upang mag-claim +map.claim_success = Na-claim ang chunk sa ({0}, {1})! +map.claim_not_in_faction = Dapat ikaw ay nasa isang paksyon upang mag-claim ng teritoryo. +map.claim_not_officer = Tanging mga opisyal at pinuno lamang ang maaaring mag-claim ng teritoryo. +map.claim_already_yours = Pagmamay-ari mo na ang chunk na ito. +map.claim_already_claimed = Ang chunk na ito ay naka-claim na ng ibang paksyon. +map.claim_not_adjacent = Maaari ka lamang mag-claim ng mga chunk na katabi ng iyong teritoryo. +map.claim_max = Naabot mo na ang maximum na claim limit. +map.claim_world_not_allowed = Hindi pinapayagan ang pag-claim sa mundong ito. +map.claim_orbisguard = Ang lugar na ito ay protektado ng OrbisGuard. +map.claim_failed = Nabigo ang pag-claim ng chunk. +map.unclaim_success = Na-unclaim ang chunk sa ({0}, {1}). +map.unclaim_not_in_faction = Dapat ikaw ay nasa isang paksyon. +map.unclaim_not_officer = Tanging mga opisyal at pinuno lamang ang maaaring mag-unclaim ng teritoryo. +map.unclaim_not_claimed = Ang chunk na ito ay hindi naka-claim. +map.unclaim_not_yours = Ang chunk na ito ay pag-aari ng ibang paksyon. +map.unclaim_home = Hindi maaaring i-unclaim ang chunk na naglalaman ng iyong faction home. +map.unclaim_failed = Nabigo ang pag-unclaim ng chunk. +map.overclaim_success = Na-overclaim ang chunk ng kalaban sa ({0}, {1})! +map.overclaim_not_in_faction = Dapat ikaw ay nasa isang paksyon. +map.overclaim_not_officer = Tanging mga opisyal at pinuno lamang ang maaaring mag-overclaim ng teritoryo. +map.overclaim_already_yours = Pagmamay-ari mo na ang chunk na ito. +map.overclaim_ally = Hindi mo maaaring i-overclaim ang teritoryo ng kakampi. +map.overclaim_has_power = Ang paksyon na ito ay may sapat na kapangyarihan upang ipagtanggol ang kanilang teritoryo. +map.overclaim_max = Naabot mo na ang maximum na claim limit. +map.overclaim_failed = Nabigo ang pag-overclaim ng chunk. +# ========== Pahina ng Paggawa ng Paksyon ========== +create.title = Gumawa ng Iyong Paksyon +create.section_preview = Preview +create.section_basic_info = Pangunahing Impormasyon +create.section_details = Mga Detalye +create.name_prefix = Pangalan: +create.faction_name_label = Pangalan ng Paksyon * +create.tag_label = TAG (2-4 karakter, awtomatiko kung walang laman) +create.desc_label = Deskripsyon (Opsyonal) +create.recruitment_label = Recruitment +create.section_faction_color = Kulay ng Paksyon +create.section_combat = Labanan +create.create_btn = Gumawa ng Paksyon +create.preview_name = Pangalan ng Iyong Paksyon +create.leader_prefix = Pinuno: {0} +create.enter_name = Pakilagay ng pangalan ng paksyon. +create.name_too_short = Ang pangalan ng paksyon ay dapat hindi bababa sa {0} karakter. +create.name_too_long = Ang pangalan ng paksyon ay hindi maaaring lumampas sa {0} karakter. +create.name_taken = Mayroon nang paksyon na may ganitong pangalan. +create.tag_length = Ang tag ng paksyon ay dapat {0}-{1} karakter. +create.tag_format = Ang tag ng paksyon ay maaari lamang maglaman ng mga letra at numero. +create.desc_too_long = Ang deskripsyon ay hindi maaaring lumampas sa {0} karakter. +create.created = Matagumpay na nalikha ang paksyon na {0}! +create.created_no_dashboard = Nalikha ang paksyon ngunit hindi mabuksan ang dashboard. +create.invalid_name = Hindi wastong pangalan ng paksyon. +create.create_failed = Hindi malikha ang paksyon. + +# ========== Mga Pahina para sa Bagong Manlalaro ========== +newplayer.browse_title = Mag-browse ng mga Paksyon +newplayer.invites_title = Mga Imbitasyon at Kahilingan +newplayer.map_title = Mapa ng Teritoryo +newplayer.view_only_badge = Tingnan Lamang +newplayer.legend_label = Alamat: +newplayer.legend_safezone = SafeZone +newplayer.legend_warzone = WarZone +newplayer.legend_faction = Paksyon +newplayer.legend_wilderness = Ilang +newplayer.search_label = Maghanap: +newplayer.sort_label = Ayusin: +newplayer.prev_btn = < Nakaraang +newplayer.next_btn = Susunod > +newplayer.pending_count = {0} nakabinbin +newplayer.received_header = MGA NATANGGAP NA IMBITASYON ({0}) +newplayer.requests_header = MGA KAHILINGAN MO ({0}) +newplayer.no_invites = Walang imbitasyon. Mag-browse ng mga paksyon upang makahanap ng isa! +newplayer.no_requests = Walang nakabinbing kahilingan. +newplayer.invited_by = Inimbitahan ni: {0} +newplayer.member_count = {0} kasapi +newplayer.power_count = {0} kapangyarihan +newplayer.claim_count = {0} claim +newplayer.awaiting_review = Hinihintay ang pagsusuri +newplayer.expires_in = Mag-e-expire sa {0}h +newplayer.time_just_now = ngayon lang +newplayer.time_minutes = {0} min nakalipas +newplayer.time_hours = {0}h nakalipas +newplayer.time_days = {0}d nakalipas +newplayer.invalid_faction = Hindi wastong paksyon. +newplayer.invite_expired = Ang imbitasyong ito ay nag-expire na o binawi. +newplayer.faction_gone = Wala na ang paksyon. +newplayer.joined = Sumali ka na sa {0}! +newplayer.faction_full = Puno na ang paksyon na ito. +newplayer.join_failed = Hindi makasali sa paksyon. +newplayer.invite_declined = Tinanggihan ang imbitasyon. +newplayer.request_cancelled = Kinansela ang kahilingan na sumali sa {0}. +newplayer.faction_count = {0} mga paksyon +newplayer.browse_subtitle = Hanapin ang iyong bagong tahanan! +newplayer.sort_power = Kapangyarihan +newplayer.sort_name = Pangalan +newplayer.sort_members = Mga Kasapi +newplayer.btn_accept = Tanggapin +newplayer.btn_pending = Nakabinbin +newplayer.btn_join = Sumali +newplayer.btn_request = Humiling +newplayer.invite_only_msg = Ang paksyon na ito ay sa imbitasyon lamang. +newplayer.welcome_hint = Maligayang pagdating! Gamitin ang /f upang buksan ang menu ng paksyon. +newplayer.faction_open_hint = Bukas ang paksyon na ito! I-click ang SUMALI sa halip. +newplayer.already_requested = Mayroon ka nang nakabinbing kahilingan sa paksyon na ito. +newplayer.has_invite_hint = May imbitasyon ka mula sa paksyon na ito! I-click ang TANGGAPIN sa halip. +newplayer.request_sent = Naipadala ang kahilingan na sumali sa {0}! +newplayer.officer_review = Susuriin ng isang opisyal ang iyong kahilingan. +newplayer.map_hint = Tingnan Lamang - Sumali sa isang paksyon upang mag-claim ng teritoryo! + +# Mga Setting ng Manlalaro +nav.player_settings = Manlalaro +player_settings.title = Mga Setting ng Manlalaro +player_settings.language_section = Wika +player_settings.auto_detect = Awtomatikong tuklasin mula sa client +player_settings.auto_detect_desc = Ginagamit ang setting ng wika ng iyong game client +player_settings.language_label = Wika +player_settings.notifications_section = Mga Notipikasyon +player_settings.territory_alerts = Mga Alerto sa Teritoryo +player_settings.territory_alerts_desc = Magpakita ng mga notipikasyon kapag pumapasok/umaalis sa mga teritoryo +player_settings.death_announcements = Mga Broadcast ng Kamatayan +player_settings.death_announcements_desc = Tumanggap ng mga anunsyo ng lokasyon ng kamatayan ng kasapi ng paksyon +player_settings.power_notifications = Mga Pagbabago sa Kapangyarihan +player_settings.power_notifications_desc = Magpakita ng mga mensahe kapag nagbabago ang iyong kapangyarihan +player_settings.language_changed = Ang wika ay pinalitan sa {0} +player_settings.pref_enabled = Na-enable ang {0} +player_settings.pref_disabled = Na-disable ang {0} + +# ========== Mga Pahina ng Tulong ========== +help.center_title = Sentro ng Tulong +help.getting_started_title = Pagsisimula +help.what_are_factions_title = Ano ang mga Paksyon? +help.what_are_factions_1 = Ang mga paksyon ay mga grupong ginawa ng manlalaro na nagtutulungan +help.what_are_factions_2 = upang mag-claim ng teritoryo, magtayo ng mga base, at makipagkompetensya. +help.what_are_factions_bullet_1 = - Protektadong teritoryo para sa pagtatayo +help.what_are_factions_bullet_2 = - Mga kakampi na makakalaro +help.what_are_factions_bullet_3 = - Access sa faction chat at mga feature +help.joining_title = Pagsali sa isang Paksyon +help.joining_desc = Mayroong ilang paraan upang sumali sa isang paksyon: +help.joining_bullet_1 = - Browse - Maghanap ng bukas na paksyon at i-click ang SUMALI +help.joining_bullet_2 = - Imbitasyon - Tanggapin ang mga imbitasyon mula sa mga opisyal +help.joining_bullet_3 = - Humiling - Humingi na sumali sa mga paksyon na sa imbitasyon lamang +help.creating_title = Paggawa ng Paksyon +help.creating_desc = Pumunta sa tab na Gumawa upang magsimula ng iyong sariling paksyon. +help.creating_bullet_1 = - Mag-imbita at mamahala ng mga kasapi +help.creating_bullet_2 = - Mag-claim at protektahan ang teritoryo +help.commands_title = Mga Mabilisang Utos +help.cmd_f = /f - Buksan ang menu ng paksyon +help.cmd_f_list = /f list - Ilista ang lahat ng mga paksyon +help.cmd_f_join = /f join - Sumali sa isang bukas na paksyon +help.cmd_f_create = /f create - Gumawa ng bagong paksyon +help.cmd_f_help = /f help - Buong listahan ng mga utos +help.tip = Tip: Mag-browse ng mga paksyon upang makahanap ng grupong bagay sa iyo! diff --git a/src/main/resources/config.json b/src/main/resources/config.json deleted file mode 100644 index 7d86bcad..00000000 --- a/src/main/resources/config.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "faction": { - "maxMembers": 50, - "maxNameLength": 24, - "minNameLength": 3, - "allowColors": true - }, - "power": { - "maxPlayerPower": 20, - "startingPower": 10, - "powerPerClaim": 2, - "deathPenalty": 1, - "killRewardRequiresFaction": true, - "powerLossOnMobDeath": true, - "powerLossOnEnvironmentalDeath": true, - "regenPerMinute": 0.1, - "regenWhenOffline": false - }, - "claims": { - "maxClaims": 100, - "onlyAdjacent": false, - "decayEnabled": true, - "decayDaysInactive": 30, - "worldWhitelist": [], - "worldBlacklist": [] - }, - "combat": { - "tagDurationSeconds": 15, - "allyDamage": false, - "factionDamage": false, - "taggedLogoutPenalty": true, - "logoutPowerLoss": 1.0 - }, - "teleport": { - "warmupSeconds": 5, - "cooldownSeconds": 300, - "cancelOnMove": true, - "cancelOnDamage": true - }, - "updates": { - "enabled": true, - "url": "https://api.github.com/repos/HyperSystems-Development/HyperFactions/releases/latest", - "hyperProtect": { - "autoDownload": false, - "autoUpdate": true, - "url": "https://api.github.com/repos/HyperSystems-Development/HyperProtect-Mixin/releases/latest" - } - }, - "messages": { - "prefix": "\u00A7b[HyperFactions]\u00A7r ", - "primaryColor": "#00FFFF" - } -}