Zilibobka (Зилибобка) Totem of Undying

– EN: **Zilibobka** is a popular Russian meme, which was also stimulated during post-ironic memes in 2017 on the social network VKontakte and Tiktok. Texture pack replaces Totem of Immortality with this meme

– RU: **Zilibobka (Зилибобка)** – популярный российский мем который также был зафоршен во времена постироничных мемов в 2017 году в соц сети ВКонтакте и Тиктоке. Текстурпак заменяет тотем бессмертия на этот мем

[ALL RESOURCEPACKS COLLECTION: MEMES + STREAMERS](https://modrinth.com/collection/sfDcDGAi)

zHomes

![zHomes Banner](https://cdn.modrinth.com/data/cached_images/390b76823fb5785189aa005591a5a7cbc4a0beb8.png)


Modrinth


Hangar


SpigotMC


bStats

Discord
Build Status
Latest Release

![About the Project](https://cdn.modrinth.com/data/cached_images/2939adae27590da621f6332a61d92a12bd474204.png)
zHomes is a modern, fast and fully-configurable homes plugin for Spigot/Paper/Purpur/PufferFish servers. It focuses on simplicity, speed and customization so server owners can give players a familiar — but powerful — teleportation experience.

Some features:
– Create, delete and list homes
– Admin tools for managing and converting homes
– PlaceholderAPI support for message placeholders
– MiniPlaceholders support for minimessage placeholders
– Vault support for economy/command-costs
– GriefPrevention and WorldGuard integration for region checks
– Teleport warmup and safe-teleport checks
– Configurable commands, messages and permissions
– 100% configurable menus
– Uses SQL (H2/SQLite/MariaDB/MySQL) for storage (no local data/ directory)

Maintained by [yL3oft](https://github.com/yL3oft). This project is free and open-source.


![Quick Setup](https://cdn.modrinth.com/data/cached_images/a77fd7e63c0e306eb91827be8bc8ba55d6cb147c.png)

Requirements
– Java 17+ (check release notes for exact JDK requirement)
– Paper, Spigot or a compatible fork

Installation
1. Download the latest JAR from Releases / Modrinth / Hangar / Spigot.
2. Place the JAR in your server’s `plugins/` folder.
3. Start the server once to generate config files (src/main/resources/config.yml defaults).
4. You’re done!

Quick test
– As a player: `/sethome home1` then `/home home1`
– As an admin: `/zhomes reload`


![Commands](https://cdn.modrinth.com/data/cached_images/cb455c702cf3974b3c5394e22cc3e709f7dd0761.png)

Admin
– `/zhomes info` — Shows plugin info and stats.
– `/zhomes reload` — Reloads plugin configuration and messages.
– `/zhomes version ` — Checks the plugin version and updates if `` is specified.
– `/zhomes nearhomes [radius] <-u -h >` — Check for homes near a location (your location by default). Admins can specify a user and home to check near that home.
– `/zhomes parse ` – Parse a string with Plugin Placeholders & PlaceholderAPI placeholders for a specific player.
– `/zhomes export` — Export all homes to a .json.gz file in the plugin folder.
– `/zhomes import ` — Import homes from a .json.gz file exported by `/zhomes export`.
– `/zhomes converter ` — Inline converter tool to import homes from other plugins (example: `/zhomes converter ultimatehomes`). See detailed converter docs: https://docs.yleoft.me/zhomes/commands-and-permissions/zhomes-converter-less-than-type-greater-than

Player / Home commands
– `/sethome [name]` — Create a home (default name if omitted).
– `/delhome [name]` — Delete a home. Admins can use `/delhome `.
– `/home [name]` — Teleport to a home. Admins can use `/home `.
– `/homes [player]` — List homes. Admins can use `/homes `.
– `/home rename [oldName] [newName]` — Rename a home

Notes
– Command costs and vault integration require Vault to be installed.
– Some commands have admin-only variants (see Permissions below).

Full command list and usage: https://docs.yleoft.me/zhomes/commands-and-permissions


![Permissions](https://cdn.modrinth.com/data/cached_images/40bf4619a4b6ccf117f9ddc579aa2697a6ea37ec.png)

Below are the permission nodes and their default intent as defined in the plugin configuration (zHomes/config.yml). Use your permissions plugin to grant or deny these.

Command permissions
– zhomes.command.main — Main command (True by default)
– zhomes.command.main.help — Help SubCommand (Only OP by default)
– zhomes.command.main.version — Version SubCommand (True by default)
– zhomes.command.main.info — Info SubCommand (Only OP by default)
– zhomes.command.main.reload — Reload SubCommand (Only OP by default)
– zhomes.command.main.nearhomes – Nearhomes SubCommand (Only OP by default)
– zhomes.command.main.parse — Parse SubCommand (Only OP by default)
– zhomes.command.main.converter — Converter SubCommand (Only OP by default)
– zhomes.command.main.importexport — Import & Export SubCommand (Only OP by default)
– zhomes.command.sethome — `/sethome` (True by default)
– zhomes.command.delhome — `/delhome` (True by default)
– zhomes.command.delhome.others — `/delhome ` (Only OP by default)
– zhomes.command.homes — `/homes` (True by default)
– zhomes.command.homes.others — `/homes ` (Only OP by default)
– zhomes.command.home — `/home` (True by default)
– zhomes.command.home.others — `/home ` (Only OP by default)
– zhomes.command.home.rename — `/home rename` (True by default)

Bypass / misc permissions (as defined in config.yml)
– zhomes.bypass.limit — Bypass home limits (Only OP by default)
– zhomes.bypass.dimensionalteleportation — Bypass dimension restriction (Only OP by default)
– zhomes.bypass.safeteleport — Bypass safe-teleport checking (False by default)
– zhomes.bypass.warmup — Bypass teleport warmup (Only OP by default)
– %command_permission%.bypass.command-cost — Bypass command-cost (Only OP by default). Command-specific bypass permission is generated from the command permission string (see config.yml)
– %command_permission%.bypass.command-cooldown — Bypass commands cooldown (Only OP by default). Command-specific bypass permission is generated from the command permission string (see config.yml)

If you want to see the authoritative defaults and change them, open src/main/resources/config.yml in the repo or check the live docs: https://docs.yleoft.me/zhomes/commands-and-permissions


![Migration](https://cdn.modrinth.com/data/cached_images/7afe5e3f8cd9ab1810a6995fd3642ff2a86f2e51.png)

zHomes contains an inline converter to import homes from well-known plugins. The converter runs in-chat (not a GUI). See full converter details here: https://docs.yleoft.me/zhomes/commands-and-permissions/zhomes-converter-less-than-type-greater-than


![Integrations](https://cdn.modrinth.com/data/cached_images/8364276160b1c02ff9531cda26955dce593eea92.png)

Supported integrations:
– PlaceholderAPI — Message placeholders supported & custom [placeholders provided by zHomes](https://docs.yleoft.me/zhomes/hooks/placeholderapi).
– MiniPlaceholders – MiniMessage placeholders supported for advanced message formatting & custom [placeholders provided by zHomes](https://docs.yleoft.me/zhomes/hooks/miniplaceholders).
– Vault — for economy-based command-costs.
– GriefPrevention — region checks integration.
– WorldGuard — region and flag checks.
– MiniMessage — advanced message formatting.
– bStats — anonymous metrics (configurable).

Enable or disable integrations from config and ensure the third-party plugins are installed on the server when you expect integration behavior.


![Support & Community](https://cdn.modrinth.com/data/cached_images/9998e313cf239213862c4c6dbf0fe3bfdb63564e.png)

If you find zHomes helpful or need assistance:
– Discord: https://discord.gg/yCdhVDgn4K
– Issues: https://github.com/yL3oft/zHomes/issues
– Docs: https://docs.yleoft.me/zhomes

Support the project by starring the repo and joining the Discord!

bStats Graph

zHead

[![MineStrator Code](https://cdn.modrinth.com/data/cached_images/715b4a8ffa9ed90dacb64c4847174bf651889809_0.webp)](https://minestrator.com/a/GROUPEZ)
zHead is a swift and intuitive plugin enabling you to access thousands of custom Minecraft skulls with distinctive designs. This user-friendly skulls plugin opens the door to creative design possibilities, significantly improving your builds’ quality and offering creative liberty to both you and your players.

Should you seek additional methods to make your builds stand out with ease, zHead is the perfect solution!

Credit: [https://minecraft-heads.com/](https://minecraft-heads.com/)

## Commands:
– **/zhead** (aliases: /head, /zhd) – `zhead.use` – Display commands
– **/zhead reload** – `zhead.reload` – Reload configuration files
– **/zhead info** – `zhead.info` – Get head information
– **/zhead give [] []** – `zhead.give` – Give a head
– **/zhead search ** – `zhead.search` – Search heads
– **/zhead random [] []** – `zhead.random` – Give a random head
– **/playerhead ** – `zhead.player.head` – Give a player’s head

## Inventory Permissions:
– `zhead.miscellaneous`
– `zhead.plants`
– `zhead.monsters`
– `zhead.humanoid`
– `zhead.humans`
– `zhead.food.drinks`
– `zhead.decoration`
– `zhead.blocks`
– `zhead.animals`
– `zhead.alphabet`
– `zhead.refresh`

## Placeholders:
– **%zhead_count%** – Displays the total number of heads
– **%zhead_count_format%** – Displays the total number of heads with a format
– **%zhead_category_count_%** – Displays the total number of heads for a category
– **%zhead_category_count_format_%** – Displays the total number of heads for a category with a format

**API**: [https://github.com/Maxlego08/zHead?tab=readme-ov-file#api](https://github.com/Maxlego08/zHead?tab=readme-ov-file#api)

[![bStats](https://bstats.org/signatures/bukkit/zHead.svg)](https://bstats.org/plugin/bukkit/zHead/21364)

## We would like to extend our heartfelt thanks to [Minecraft-Heads.com](https://minecraft-heads.com/) for providing their API, which has been an invaluable source of all the data used in our project.

ZeroTwo Totem

# ABOUT
**This texture pack replaces the totem with the character Zero Two from the anime Darling in the Franxx. The sound when using the totem has also been replaced with the phrase “Dar-ling.” If you liked the texture pack, add it to your favorites! Enjoy the game!**

# IMPORTANT
– ### **Is there a port on the Bedrock Edition?**
This texture pack is designed exclusively for Java Edition. We do not plan to release a version for Bedrock Edition.
– ### **Want to use it on Bedrock Edition?**
You can port the texture pack yourself, as long as you comply with all license terms.
– ### **Pack version warning ?**
There is a high chance that resource packs will work with different versions of Minecraft without the need to change the version of the pack, unless there is a major update that breaks resource packs.

AntiXRay

# 🛡️ zepAntiXRay — Hide Ores from X-Ray Cheaters

**Anti XRay** protects your server from players using X-Ray resource packs or hacked clients to locate ores. Ores are hidden **server-side** and only revealed when a player is close enough or has direct line of sight.

## ✨ Features

– **Hides ores server-side** — Diamond, Emerald, Gold, Iron, Redstone, Lapis, Ancient Debris and more
– **No client mod required** — works completely server-side
– **Lightweight** — minimal performance impact on your server
– **Simple & focused** — does exactly one thing, and does it well

## ⚙️ How it works

Ore blocks are **replaced with stone** in the chunk data before being sent to the client. They are only revealed when a player is **close enough**, preventing any X-Ray cheater from spotting them at a distance.

## 📋 Requirements

| | |
|—|—|
| **Minecraft** | 1.7.x-1.21.x |
| **Server Software** | Paper, Purpur, Folia, Bukkit, Spigot |
| **Java** | 21+ |
| **ProtocolLib** | Please use the Newst Version |

## ⚠️ Limitations

> This plugin is focused **solely on hiding ores**. It does not include any additional anti-cheat features beyond X-Ray protection.

zendi BedWars pack

Hi! You are here because you wanted a simple and cool BedWars resource pack? I have created the best resource pack for this mini-game! Please try it out. Tanks for downoload (if you downoload) Good luck in BedWars!![photo](https://cdn.modrinth.com/data/cached_images/e08f5b25bf64c279eeda7befab20fe4bcb60752b.png)

Zekren’s MusicPack

Experience Minecraft like never before with Zekren’s MusicPack! Designed to immerse you in a brand new auditory adventure, this pack replaces the entire main music soundtrack with 63 new tracks!

**_Features:_**

**Complete Overhaul:** Every piece of the main soundtrack has been replaced, including three music discs (5, 11, 13), ensuring a cohesive and fresh auditory experience.

**Ambient Vibes**: Inspired by the original OST, each track brings a blend of ambient and atmospheric electronic music, enhancing immersion and creating new memories.

**Modern Soundscape:** Perfect for those who have grown accustomed to or muted the decade-old music, this pack aims to reinvigorate your Minecraft sessions with contemporary sounds.

**Future-Proof:** Now compatible with Minecraft 1.7.2+! I went all the way back to the 2013 music update. **For 1.21+, please join my [Patreon](https://www.patreon.com/Zekren/)

Rediscover the joy of Minecraft with Zekren’s MusicPack and elevate your gameplay to a whole new level. Dive into your world with a refreshed sense of wonder and make every adventure unforgettable. Experience the Nether with a more hellish and spooky ambiance, feel the cosmic expanse of the End, and enjoy enhanced soundscapes that elevate every biome to new heights. Everything is designed to enhance your experience, not change it entirely, ensuring a familiar yet vastly improved Minecraft journey.

Zayko Shaders

⚠️Zayko has been put on pause while we work on different projects.⚠️
━━━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━━━

### **_7.0 IS OUT! AND ITS OUR BEST YET! ✨🌊_**
![7.0](https://cdn.modrinth.com/data/cached_images/de8ee6141f788fca76b244d16c54d0084c1ceea2.gif)
[![FUM](https://cdn.modrinth.com/data/cached_images/b1bc33fd0f9fc13aa4888a5a1e204b4df6afa97f_0.webp)](https://www.curseforge.com/minecraft/shaders/zayko-lite)

### Short About
**Zayko is a shader pack for Minecraft Java Edition, designed with an emphasis on detail, excellent quality and optimization. It offers PBR effects, emissive textures for mobs, blocks and items, as well as a wide range of settings: from Low to Ultra. provides a stable frame rate, while allowing you to adjust the settings to suit any requirements.**

![Zayko logos](https://cdn.modrinth.com/data/cached_images/ee0bb5c91871acb3cf781791b49c0d4aa4b65398.png)

━━━━━━━━━━☆━━━━━━━━━━☆━SPONSORS━☆━━━━━━━━━━☆━━━━━━━━━━
[![Code SNHD](https://cdn.modrinth.com/data/cached_images/af8ec773283513fdf7c952795f0d711ae8e5b6cf.jpeg)](https://www.voicemod.net/?refn=skynexushd&tracking_id=999d68a19a244ef5af11d60f1ef6384d&utm_campaign=6023bf347e9fb&utm_source=WHuVawz6)
━━━━━━━━━━☆━━━━━━━━━━☆━SPONSORS━☆━━━━━━━━━━☆━━━━━━━━━━

![about](https://cdn.modrinth.com/data/cached_images/836e47453289d4f4a74fc47dc843ae0e4c0ef123.png)

Zayko Shaders is a shader pack for Minecraft Java Edition with amazing attention to detail, great quality, and the best possible optimisation. Offering a range of amazing quality visuals and ajustable effects, instead of just giving you presets we also give you great ajustability with our shaders, including emmissive textures for mobs and blocks even certain items including PBR thanks to compatablity with [Optifine](https://optifine.net/home) and [Iris](https://www.irisshaders.dev/),and for those who just want a simple click and play without ajusting there are profiles ranging from Very Low to Ultra and it’s build for Keeping a stable framerate with amazing shaders.

### Want to know more?
Keep scrolling or go to Trusted wikis [FiveNova](https://fivenova.net) or [Minecraft France](https://www-minecraft–france-fr.translate.goog/zayko-shaders/?_x_tr_sl=fr&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=sc)

Untrusted wikis (Could be Harmful!)
[Note](https://note.com/quick_squid5246/n/na88bd2b8a706), [Minecraft Mods.Pro](https://minecraft–mods-pro.translate.goog/mods/zayko-shaders?_x_tr_sl=ru&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=sc), [Minecraft Imba](https://minecraft-imba.ru/308-zayko.html) or [MinecraftStorage](https://minecraftstorage.com/shaders/zayko), [9Minecraft.net](https://www.9minecraft.net/zayko-shaders)

Harmful wiki detections!!
Do Not download from [Mineload](https://mineload-ru.translate.goog/shaders/low-pc/low-pc-1-16-5/?_x_tr_sl=ru&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=sc), [mods-minecraft.ru](https://mods-minecraft.ru/shaders/7577-zayko.html), [Xenolith.ru](https://xenolith.ru/shaders/2758-zayko-12110-1206-1194-1182-1171-1165.html)
━━━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━━━

**Why Do we take wikis so seriously? simple because if you go to the wrong one and get a virus we could be blamed without our shaders having any malware. we also dont want people to get viruses and let the scammers succeed so please never download from Harmful sites. we only include them so you know they are harmful if you ever download a mod or shader from them.** (the way we check is we look through the sites and if it links to modrinth for the download it automaticlly goes to trusted if it downloads from their site thats auto untrusted because we cannot tell if they added something to the file and untrusted is if the file size is smaller then our offical shaders which mejority are or if they get a harmful detection from VirusTotal.)

![install](https://cdn.modrinth.com/data/cached_images/ae808eb8ff6233cb027c1d8af95f8818a77e9f55.png)

if your new or don’t know how to download shaders then were here to help!

### Modrith Launcher
Click Install **–>** Pick an Instence or Create one **–>** Wait for it to do its magic **–>** Launch and Enjoy the Shaders!

### Natrual Launcher
Download File **–>** Launch Game with [Optifine](https://optifine.net/home) or [Iris](https://www.irisshaders.dev/) **–>** Options **–>** shaders **–>** Open shaderpack folder **–>** drag and drop the file into the folder **–>** close folder and click on the shaders in game and enjoy!

# Showcase Videos
Even videos where they show off shaders takes time to create which can take away from their personal lives. Originally this only showed our offical showcase but we wanted to support the community. ([email protected] if you want a video added or removed.)
━━━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━━━

[**Gamomnia**](https://www.youtube.com/@gamomnia) – Shows Zayko at **4:02**

━━━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━━━

[**FiveNova**](https://www.youtube.com/@FiveNova) – Shows Zayko for **full video**

━━━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━☆━━━━━━━━━━☆━━━━━━━━━━

YuRTP

# YuRandomTeleport | Cross-Version · High Performance · Universal Compatibility

**Supported Versions: 1.8.x – 1.26.x**
**Compatible Server Types: Spigot / Paper / All Hybrid Forks (Mohist, Magma, Arclight, etc.)**

## 🎉 Promotional Text

### ✦ Escape the Crowd. Explore the Unknown. — YuRandomTeleport

Tired of overcrowded spawn points? Struggling to find untouched, pristine land?
**YuRandomTeleport** is an intelligent random teleportation plugin built for Minecraft servers, delivering a safe, smooth, and highly customizable teleport experience.

#### ✨ Why Choose YuRandomTeleport?

– **Ultimate Cross-Version Compatibility**
From 1.8 to the latest 1.26.x, it runs seamlessly on Spigot, Paper, and all hybrid server forks—one plugin for every version.

– **Smart & Safe Location Algorithm**
Automatically avoids lava, cacti, the void, fire, and other hazardous blocks. Players always land on solid ground with open sky above—safe upon arrival.

– **Granular Per‑World Configuration**
Each world can have independent radius, height limits, safety rules, and blocked material lists. Perfectly tailored for Overworld, Nether, and End dimensions.

– **Seamless Economy & Cooldown Integration**
Supports Vault economy deductions and customizable cooldowns. Granular permission nodes keep everything under control and prevent abuse.

– **Programmable Command Hooks**
Execute custom commands (including JSON titles and particle effects) before and after teleportation, taking your server’s interactivity to the next level.

– **Zero‑Fuss, Out‑of‑the‑Box**
Default configurations work immediately. No complex setup required—even novice server admins can deploy it effortlessly.

– **Active Maintenance & Community**
The plugin is under continuous development. Join our official community **1080918424** to report issues, request features, or just chat with fellow admins.

#### 🚀 Join Us
**Official Community Group: 1080918424**
Bug Reports · Update Announcements · Tech Support · Customization Inquiries

## 📖 User Manual

### 1. Installation Guide

1. Place `YuRandomTeleport-.jar` into your server’s `plugins` folder.
2. Restart the server or load the plugin using a plugin manager.
3. The plugin will automatically generate `config.yml` and `messages.yml` inside `plugins/YuRandomTeleport/`.
4. (Optional) Edit the configuration files as desired and apply changes with `/yurtp reload`.

### 2. Commands & Permissions

#### Player Commands

| Command | Description | Permission |
|———|————-|————|
| `/yurtp` or `/rtp` | Randomly teleports yourself within your current world. | `yurtp.use` |
| `/yurtp ` | Randomly teleports the specified player within their current world (requires permission). | `yurtp.teleport.others` |
| `/yurtp ` | Randomly teleports the specified player to the specified world (requires permission). | `yurtp.teleport.others` |
| `/yurtp help` | Displays the help menu. | None |

#### Admin Commands

| Command | Description | Permission |
|———|————-|————|
| `/yurtp reload` | Reloads the configuration files (`config.yml` and `messages.yml`). | `yurtp.reload` |

#### Permission Nodes

| Permission | Default | Description |
|————|———|————-|
| `yurtp.use` | Everyone | Allows use of random teleport. |
| `yurtp.teleport.others` | OP | Allows teleporting other players. |
| `yurtp.bypass.cooldown` | OP | Bypasses the cooldown timer. |
| `yurtp.bypass.cost` | OP | Bypasses economy charges. |
| `yurtp.reload` | OP | Allows reloading the plugin configuration. |

### 3. Configuration Quick Reference

#### Core Options in `config.yml`

“`yaml
# Economy settings (requires Vault)
economy:
enabled: false
cost: 0.0

# Cooldown in seconds
cooldown:
seconds: 3

# Worlds where teleportation is forbidden
world-blacklist:
– lobby

# Default parameters (inherited by all worlds unless overridden)
default:
radius:
min: 500
max: 2000
height:
min: -64 # Leave blank to auto-detect from world
max: 320
safety:
check: true
allow-void: false
allow-water: false
allow-lava: false
max-attempts: 32
min-air-above: 8
blocked-materials:
– “MAGMA*”
– “CACTUS”
– “SWEET_BERRY_BUSH”
– “COBWEB”
– “*FIRE*”

# Per‑world overrides
worlds:
world_nether:
radius:
min: 200
max: 800
safety:
allow-lava: true

# Custom commands to execute (supports placeholders: {player}, {x}, {z}, etc.)
commands:
on-teleport:
– “title {player} title {“text”:”Searching for a safe location…”,”color”:”yellow”}”
on-success:
– “title {player} title {“text”:”Teleport Successful!”,”color”:”green”}”
on-fail:
– “title {player} title {“text”:”Teleport Failed”,”color”:”red”}”
“`

#### Notes on `messages.yml`
All frontend messages support color codes (`&` in place of `§`) and can be fully translated or customized. After editing, run `/yurtp reload` to apply changes.

### 4. Frequently Asked Questions

**Q: Why can’t a player teleport?**
A: Verify that the world is not listed in `world-blacklist`, the player has the `yurtp.use` permission, and cooldown/balance requirements are met.

**Q: The teleport locations aren’t ideal. How can I improve them?**
A: Adjust the `radius` range, `height` limits, or relax the `blocked-materials` rules for the specific world. Enable `debug: true` in the config to view detailed location‑search logs in the console.

**Q: Does the plugin support sounds on 1.8?**
A: Yes. A built‑in cross‑version sound compatibility layer ensures sounds work across all supported versions without errors or silence.

**Q: Is Moonrise asynchronous server supported?**
A: Moonrise is not currently supported due to conflicts between its asynchronous architecture and some core plugin logic. We will evaluate potential compatibility in future updates.

### 5. Community & Support

– **QQ Group: 1080918424**
Bug reports · Feature suggestions · Update notifications · Technical discussions

– **Documentation & Updates**
The latest version and detailed documentation are always available within the community group.

**YuRandomTeleport — Every journey begins with anticipation.**

YuPay

# 🎮 YuPay —— Make Sponsorship Management a Pleasure

> **Minecraft server sponsorship has never been been this elegant.**
>
> Direct integration with WeChat Pay & Alipay, redeem code system, refund review, multi-language, full lifecycle event listening — everything you need, YuPay delivers it all at once. Free, no middlemen, no tricks. 100% of the revenue goes straight to your account. The only fees are those charged by Alipay and WeChat.

## 📦 What Is It

**YuPay** is a free, modern payment plugin tailored for Minecraft servers. It breaks down the hassle of “sponsorship management” into four steps: **Initiate → Pay → Receive → Record**. Every step is automated, every step traceable.

Server operators use it to collect sponsorships, players use it to scan and pay. Both sides enjoy a worry-free experience. Supports direct API integration with WeChat Pay and Alipay — no third-party relay, your funds stay secure in your own hands.

> ⚠️ This plugin is designed for scenarios where “players voluntarily sponsor server operations”. Please ensure usage complies with local laws and payment platform regulations.

## ✨ Highlights at a Glance

| Category | What You Get |
|———-|—————|
| 💳 **Payment** | WeChat + Alipay dual channels, Native QR scan payment, automatic fallback |
| 💰 **Economy** | Vault + PlayerPoints dual support, one-click switch |
| 🎁 **Rewards** | Base rewards, single milestone, total achievements, limited-time sprints — four trigger layers |
| 🔑 **Redeem Code** | Create/redeem/query/modify, supports paid codes, complete logs |
| 💵 **Refund** | Players can request refunds, admin approve/deny, forced refund, partial refund |
| 📊 **Data** | Leaderboards, order history, page browsing, one-click copy order ID |
| 🌐 **Multi-language** | Default Chinese + English, server owners can customize any language, different players see different languages |
| 🔌 **PAPI** | 40+ placeholders, use in scoreboards/titles/item lore |
| 🛡️ **Security** | Signature verification, IP whitelist, 24h event monitoring, anti-duplicate delivery |
| ⚡ **Performance** | Fully async, HikariCP connection pool, 600% startup speed boost |
| 🧩 **Extensibility** | Full lifecycle event API for deep integration by developers |

## 🔄 What a Complete Sponsorship Looks Like

1. Player executes a command, e.g. `/donate 50 wechat`
2. System creates order asynchronously, writes to database
3. Calls WeChat/Alipay API to generate payment QR code
4. Depending on your config, sends **clickable link**, **text-art QR** in chat, or **map QR** in inventory
5. Player scans and completes payment
6. Payment platform calls back to your server
7. Plugin verifies signature, confirms receipt, grants rewards (economy + commands)
8. Leaderboard and placeholders update in real time
9. All logs written, traceable anytime

Fully automated. You just configure the rewards, YuPay handles the rest.

## 🎁 Four Reward Layers, Mix and Match

YuPay’s reward system is like a Lego box — four trigger modes you can combine freely.

| Layer | Trigger | Example |
|——-|———|———|
| **Base Reward** | Every successful payment | `give {player} diamond 1` |
| **Single Milestone** | Single payment reaches threshold | 50 yuan → 5 gold blocks |
| **Total Achievement** | Lifetime total reaches new height | 500 yuan → SVIP permission group |
| **Limited Sprint** | Cumulative within specified time period | 200 yuan in 24h → enchanted golden apple |

Each layer’s commands are fully customizable, support variables like `{player}`, `{amount}`, `{points}`, and can integrate with permission/economy plugins like LuckPerms, CMI, etc.

> 💡 Adding `-n` (e.g. `/donate 10 -n`) makes it a **no-reward sponsorship** — pure server support, no rewards triggered.

## 🔑 Redeem Code System: More Than Just a Voucher

YuPay’s redeem code module goes far beyond typical “gift codes”:

– **Free codes**: Players enter to claim — great for event giveaways
– **Paid activation codes**: Players must scan and pay a specified amount before redeeming — suitable for selling item entitlements, redeeming codes from other platforms, etc.
– **Economy rewards**: Automatically grant Vault currency or PlayerPoints upon redemption
– **Custom commands**: Each code can bind a set of commands executed on redemption
– **Usage limits & expiry**: Independent control per code
– **Code PAPI**: Placeholders directly read any code’s status, amount, remaining uses

Create a paid activation code with a single command:
“`
/yp code create –code VIP2026 –amount 50 –economy vault –eco-amount 5000 –commands “lp user {player} parent set vip” –max-uses 100 –expire 30d
“`

## 💵 Refund System: Bad Debt Terminator

Refunds are no longer a nightmare. YuPay’s refund process is complete and reassuring:

– **Players request refund**: Submit application with reason
– **Admin reviews**: Approve/deny in an orderly manner
– **Forced refund**: Direct operation for urgent cases, no waiting for review
– **Partial refund**: Flexible handling, precise to the cent
– **Code refund**: Refund money and rollback usage count, status automatically restored
– **Refund callback**: Interfaces with WeChat/Alipay official refund API, money returns to original payment method
– **Complete logs**: Who refunded, how much, when, why — all clear

## 🌐 Thousand Players, Thousand Languages — No Language Fights

A lifesaver for international server operators.

– Comes with **Simplified Chinese** and **English** complete translations
– Server owners can add any language file in `language.mappings`
– Players switch preference with `/yp lang `, stored in database, persists across sessions
– New players automatically **detect client language** and match the best translation
– Different players on the same server see different language prompts — truly per-player localization

## 🔌 Complete PAPI Placeholder List

YuPay provides **40+ built-in PlaceholderAPI placeholders**, covering personal, server, leaderboard, and redeem code dimensions. All monetary values keep two decimal places. Full list below:

### 1. Personal Dimension (requires player context)

| Placeholder | Description | Example Return |
|————-|————-|—————-|
| `%yupay_is_banned%` | Whether the player is banned from sponsoring | `true` / `false` |
| `%yupay_total%` | Player’s lifetime total sponsorship (yuan) | `158.00` |
| `%yupay_total_orders%` | Player’s total orders (including failed) | `7` |
| `%yupay_success_orders%` | Player’s successful orders | `5` |
| `%yupay_rank%` | Player’s sponsorship rank (off-rank shows text from language file) | `3` or `Not ranked` |
| `%yupay_has_paid_in_

> 💡 **Dynamic parameters**: `

### 2. Server Dimension (no player needed)

| Placeholder | Description | Example Return |
|————-|————-|—————-|
| `%yupay_server_total%` | Server’s lifetime total sponsorship (yuan) | `12850.75` |
| `%yupay_server_total_orders%` | Server’s total orders (including failed) | `312` |
| `%yupay_server_success_orders%` | Server’s successful orders | `289` |
| `%yupay_server_orders_in_

### 3. Leaderboard Dimension (no player needed)

Two formats supported (first recommended):

| Placeholder | Description | Example Return |
|————-|————-|—————-|
| `%yupay_top__name%` | Player name at rank N | `Steve` |
| `%yupay_top__amount%` | Total sponsorship at rank N (yuan) | `2000.00` |
| `%yupay_top_name%` | (legacy format) Same as above | `Alex` |
| `%yupay_top_amount%` | (legacy format) Same as above | `1500.00` |

> `` ranges `1` ~ `10`. If rank doesn’t exist, name returns fallback text from language file (default “None”), amount returns `0.00`.

### 4. Redeem Code Dimension

Includes global statistics (no player needed) and specific code attributes (where `redeemed` and `can_redeem` require player context).

#### Global Statistics

| Placeholder | Description | Example Return |
|————-|————-|—————-|
| `%yupay_code_total%` | Total number of codes | `25` |
| `%yupay_code_active%` | Number of active codes (status ACTIVE) | `18` |

#### Specific Code Attributes — replace `` with actual code string (auto-uppercase)

| Placeholder | Description | Example (code = `VIP2026`) |
|-------------|-------------|----------------------------|
| `%yupay_code__status%` | Current status of the code | `ACTIVE` |
| `%yupay_code__amount%` | Required payment amount (yuan) | `50.00` |
| `%yupay_code__economy_type%` | Economy reward type | `vault` |
| `%yupay_code__economy_amount%` | Economy reward amount | `5000.00` |
| `%yupay_code__used%` | Number of times redeemed | `23` |
| `%yupay_code__max_uses%` | Max redeem count (-1 = unlimited) | `100` |
| `%yupay_code__expire%` | Expiry timestamp (ms), -1 = never | `1798675199999` |
| `%yupay_code__expire_formatted%` | Formatted expiry time | `2026-12-31 23:59` |
| `%yupay_code__remark%` | Code remark | `"VIP activation code"` |
| `%yupay_code__locked%` | Whether locked by a payment (someone is paying) | `true` / `false` |
| `%yupay_code__redeemed%` | Whether **current player** has redeemed this code | `true` / `false` |
| `%yupay_code__can_redeem%` | Whether **current player** can redeem now (comprehensive check) | `true` / `false` |

> 💡 `_can_redeem` checks: code status normal, not expired, uses left, not locked by others, and current player hasn't redeemed it.

---

### Usage Notes

- **All monetary placeholders** are in `yuan`, with two decimal places, e.g. `99.50`. Integer amounts also show `.00`.
- Dynamic time parameter `

---

## 🧩 Gift for Developers

If you can write plugins, these events will make your secondary development experience fly:

| Event | Trigger | Modifiable Parameters |
|-------|---------|----------------------|
| `PrePaymentEvent` | Before payment | amount, payment method, order ID, cancel flag |
| `PaymentOrderCreatedEvent` | Order created successfully | read-only (has QR URL) |
| `PaymentCompletedEvent` | Payment success + rewards granted | read-only (full data) |
| `PaymentFailedEvent` | Payment failed / canceled | read-only |
| `RefundCompletedEvent` | Refund completed | read-only |
| `RedeemCodeRedeemedEvent` | Code redeemed | read-only |
| `RedeemCodeLifetimeEvent` | Code status changed | read-only (old → new state) |
| `PlayerPointsChangedEvent` | Economy changed | read-only |

All events support sync. You can intercept before order creation, trigger联动 other systems after payment, sync data on refund — every detail of the sponsorship lifecycle is observable.

---

## 🛡️ Security Is Not Just Talk

- **Signature verification**: WeChat/Alipay callbacks are fully signature-verified against forgery
- **Anti-duplicate delivery**: Order status check + idempotent handling
- **IP whitelist**: Callback interface can restrict access to official payment platform IPs only
- **TLS/HTTPS**: Supports certificate-encrypted communication
- **Event monitoring**: `/yp audit` one-click audit, 24h monitoring of which plugins are listening to YuPay's fund events
- **Map virtual lock**: When a payment QR is placed in the inventory, the player is locked in place, cannot drop/switch items, payment unlocks

---

## ⚡ Blazing Fast Startup

The rewritten dependency loading system means YuPay no longer requires cumbersome JVM startup parameters. All dependencies are automatically managed, verification speed increased by 600%, out-of-the-box. Drop it into the `plugins` folder, start the server, it's ready.

---

## 📊 Data at Your Fingertips

`/yp history` is one of your most-used commands. Order history supports **page browsing**, click an order ID to **copy it with one click** — reconciliation efficiency doubled.

`/yp top` lets you know at any time who is contributing to the server — leaderboard data syncs with placeholders in real time.

`/yp total` for personal stats, `/yp total all` for server-wide stats — all available at your fingertips.

---

## 🚀 Two-Minute Quick Start Guide

1. Drop `YuPay.jar` into the `plugins/` folder
2. Start the server, wait for `config.yml` and `messages.yml` to generate
3. Open `config.yml`, fill in your WeChat/Alipay parameters
4. Ensure the callback port (default `8080`) is open in your server firewall and security group
5. In-game, type `/donate 0.01` to test a small payment
6. Confirm callback works and rewards arrive — start business 🎉

---

## 🏆 Why Server Owners Are Using YuPay

- ✅ **Stable**: Production-tested, compatible with Spigot/Paper 1.8 to latest versions
- ✅ **Reliable**: Direct official API connection, no middlemen, money goes to your account directly
- ✅ **Worry-free**: From payment to rewards fully automated, you just configure
- ✅ **Flexible**: Reward logic fully programmable, command aliases freely definable
- ✅ **Secure**: Signature verification + anti-duplicate + IP whitelist + event monitoring
- ✅ **Transparent**: Every order, every refund, every code redemption has logs
- ✅ **Evolving**: Actively maintained, continuously iterated, community-driven

---

> 💬 **Plugin Discussion Group: 1080918424**
>
> For issues, feature requests, or just to chat — welcome. Every improvement of YuPay comes from feedback from server owners.

> 💛 **Support the Author on AiFaDian**: https://ifdian.net/item/012b6c1c4a0911f18d1b52540025c377
>
> If YuPay has helped your server, consider buying the author a milk tea ~ Your support is the biggest motivation for the plugin's continued evolution.

**Stop struggling with sponsorship management. Leave the professional stuff to YuPay, and focus on running your server well.**

***

# 📖 YuPay Operation Manual

## 1. Environment Requirements

| Item | Requirement |
|------|-------------|
| Server | Spigot / Paper / compatible forks / compatible hybrid servers, 1.8 – 1.26+ |
| Java | JDK 8 or higher |
| Optional dependencies | Vault (economy), PlayerPoints (points), PlaceholderAPI (placeholders), ProtocolLib (map lock) |

> 🎉 **Good news**: You no longer need to manually add JVM startup parameters for Java 9+. YuPay's latest version has built-in smart dependency management — out-of-the-box.

## 2. Installation & Startup

1. Download `YuPay.jar`, place it in the server's `plugins/` directory
2. Start the server, the plugin will automatically generate `config.yml`, `messages.yml`, and SQLite database files
3. Edit `plugins/YuPay/config.yml`, fill in payment channel configuration parameters
4. Depending on your payment method, configure callback URLs in the payment platform backend:
- WeChat: `http(s)://your-domain-or-ip:port/pay/wechat/notify`
- Alipay: `http(s)://your-domain-or-ip:port/pay/alipay/notify`
5. Ensure the callback port (default `8080`) is open in firewall and security group
6. Execute `/yupay reload` or type `reload` in console to apply configuration
7. In-game, type `/donate 0.01` to test a small payment

## 3. Configuration Quick Reference

### 3.1 Core Payment Parameters

| Path | Description | Example |
|------|-------------|---------|
| `pay.default-method` | Default payment method | `wechat` / `alipay` |
| `pay.min-amount` | Minimum amount per order (yuan) | `0.01` |
| `pay.max-amount` | Maximum amount per order (-1 = unlimited) | `500` |
| `pay.max-daily-amount` | Daily cumulative limit (-1 = unlimited) | `1000` |
| `pay.order-subject` | Order subject template | `Sponsorship-{player}-{amount}yuan` |

### 3.2 WeChat Pay Parameters

| Path | Description |
|------|-------------|
| `wechat.enabled` | Enable (true/false) |
| `wechat.mchid` | Merchant ID |
| `wechat.appid` | Official account / Mini Program AppID |
| `wechat.serial-no` | API certificate serial number |
| `wechat.private-key-path` | Merchant private key (relative to `pems/` directory) |
| `wechat.public-key-path` | Platform public key (relative to `pems/` directory) |
| `wechat.public-key-id` | Platform public key ID |
| `wechat.api-v3-key` | API v3 key (32 characters) |
| `wechat.notify-url` | Complete callback notification URL |

### 3.3 Alipay Parameters

| Path | Description |
|------|-------------|
| `alipay.enabled` | Enable |
| `alipay.mode` | `public_key` or `cert` |
| `alipay.app-id` | App ID |
| `alipay.merchant-private-key` | Merchant private key (PKCS8, without headers/footers) |
| `alipay.alipay-public-key` | Alipay public key (required for public_key mode) |
| `alipay.app-cert-path` | App public key certificate (cert mode) |
| `alipay.alipay-cert-path` | Alipay public key certificate (cert mode) |
| `alipay.alipay-root-cert-path` | Alipay root certificate (cert mode) |
| `alipay.notify-url` | Async notification URL |
| `alipay.return-url` | Sync return URL |

### 3.4 Economy System

| Path | Description |
|------|-------------|
| `economy.enabled` | Enable economy rewards |
| `economy.type` | `vault` or `playerpoints` |
| `economy.rate` | 1 yuan = how many in-game currency/points |

### 3.5 QR Code Display

| Path | Description |
|------|-------------|
| `qrcode.default-output-mode` | `link` / `text` / `map` |
| `qrcode.text-qr-size` | Text mode QR side length (characters, default 12) |
| `qrcode.text-black-char` | Black pixel character (default `██`) |
| `qrcode.api-url` | Image generation API for link mode |

### 3.6 Callback Server

| Path | Description |
|------|-------------|
| `callback.port` | Listening port |
| `callback.host` | Bind address (`0.0.0.0` = all interfaces) |
| `callback.io-threads` | IO thread count |
| `callback.worker-threads` | Worker thread count |
| `callback.allowed-ips` | IP whitelist (CIDR format, empty = allow all) |
| `callback.access-log` | Enable access logging |

### 3.7 Database

| Path | Description |
|------|-------------|
| `database.type` | `sqlite` (standalone) or `mysql` (multi-server sync) |
| `database.mysql.*` | MySQL connection parameters |
| `database.connection-pool.*` | HikariCP connection pool parameters |
| `database.table-names.prefix` | Table prefix to avoid conflicts |
| `database.table-names.*` | Individual business table names (can be customized) |

## 4. Complete Reward Configuration Guide

### 4.1 Base Reward (on-success)

Executed on every successful payment — suitable for "base reward every sponsorship".

```yaml
commands:
on-success:
- "give {player} diamond 1"
- "effect give {player} minecraft:speed 30 1"
```

Available variables: `{player}` (player name), `{amount}` (amount), `{points}` (economy points earned)

### 4.2 Single Milestone (on-single-achieved)

Triggered when a single payment reaches a set amount. **Sort amounts from low to high**, multiple tiers allowed.

```yaml
commands:
on-single-achieved:
- amount: 50
commands:
- "say {player} reached 50 yuan in a single sponsorship!"
- "give {player} minecraft:gold_block 5"
- amount: 100
commands:
- "give {player} minecraft:diamond_block 3"
- "lp user {player} parent set vip"
```

### 4.3 Total Achievement (on-total-achieved)

Triggered when lifetime total reaches a new height. **Each tier triggers only once** — anti-duplicate mechanism built-in.

```yaml
commands:
on-total-achieved:
- total: 100
commands:
- "lp user {player} parent set vip"
- total: 1000
commands:
- "lp user {player} parent set ultimate"
- "give {player} minecraft:beacon 1"
```

### 4.4 Limited Sprint Reward (on-recent-achieved)

Triggered when cumulative amount within a specified time period (milliseconds) reaches the target. Great for holiday events, weekend leaderboard pushes, etc.

```yaml
commands:
on-recent-achieved:
- time: 86400000 # 24 hours
total: 200
commands:
- "give {player} minecraft:enchanted_golden_apple 5"
- time: 604800000 # 7 days
total: 500
commands:
- "give {player} minecraft:elytra 1"
```

### 4.5 Refund Trigger Commands (on-refund)

Executed after a successful refund — can be used to notify admins, log events.

```yaml
commands:
on-refund:
- "say {player}'s order {order} has been refunded {amount} yuan"
```

## 5. Command System

### 5.1 Player Commands

| Command | Function | Default Aliases |
|---------|----------|----------------|
| `/donate [payment] [output] [-n]` | Initiate sponsorship | `/pay`, `/zanzhu` |
| `/ytop` | Sponsorship leaderboard Top10 | `/paytop`, `/yt` |
| `/ytotal [player|all]` | Query total sponsorship | `/paytotal`, `/ytt` |
| `/yp history [page]` | My sponsorship history | `/yupay history` |
| `/yp lang [language]` | Switch personal language preference | |
| `/yp code redeem ` | Redeem a code | |
| `/yp cancel` | Cancel current map payment | |

> 💡 The `-n` flag means "no-reward sponsorship" — pure server support, no reward commands or economy items triggered.

### 5.2 Admin Commands

| Command | Function |
|---------|----------|
| `/yp reload` | Hot reload configuration |
| `/yp set

### 5.3 Key Permission Nodes

| Permission Node | Operations |
|----------------|------------|
| `yupay.command.pay` | Initiate sponsorship |
| `yupay.command.top` | View leaderboard |
| `yupay.command.total` | Query total sponsorship |
| `yupay.command.history` | View order history |
| `yupay.reload` | Reload config |
| `yupay.ban` | Manage blacklist |
| `yupay.convert` | Currency conversion |
| `yupay.audit` | Event listener audit |
| `yupay.admin` | Includes all above admin permissions |

## 6. Redeem Code System In-Depth

### 6.1 Code Creation Command Details

Code creation uses named parameters in `--param value` format, freely combinable:

```bash
# Free welfare code (unlimited uses, never expires)
/yp code create --code FREEGIFT --max-uses -1 --economy vault --eco-amount 100 --remark "New player gift"

# Paid activation code (pay 50 yuan to redeem, 100 uses, expires after 30 days)
/yp code create --code PREMIUM --amount 50 --economy vault --eco-amount 5000 --max-uses 100 --expire 30d --commands "lp user {player} parent set vip"

# Command-only code (no economy, no payment)
/yp code create --code WELCOME --commands "give {player} diamond 5; say {player} Welcome back!"
```

**Parameter quick reference:**

| Parameter | Description | Example |
|-----------|-------------|---------|
| `--code` | Code string (auto-uppercase) | `VIP2026` |
| `--amount` | Required payment amount (0 = free) | `50` |
| `--economy` | Economy type (vault / playerpoints / none) | `vault` |
| `--eco-amount` | Economy reward amount | `5000` |
| `--max-uses` | Max redeem count (-1 = unlimited) | `100` |
| `--expire` | Expiry time (`30d` / `24h` / `2026-12-31` / `never`) | `30d` |
| `--commands` | Commands to execute on redemption (semicolon-separated) | `"cmd1; cmd2"` |
| `--remark` | Remark description | `"VIP activation code"` |

### 6.2 Code Status Explanation

| Status | Meaning |
|--------|---------|
| `ACTIVE` | Usable |
| `DEPLETED` | Uses exhausted (automatic) |
| `EXPIRED` | Expired (automatic) |
| `DISABLED` | Manually disabled by admin |

### 6.3 Code PAPI Placeholders

Using code `VIP2026` as example:

| Placeholder | Example Return |
|-------------|----------------|
| `%yupay_code_total%` | Total number of codes |
| `%yupay_code_active%` | Number of active codes |
| `%yupay_code_VIP2026_status%` | `ACTIVE` |
| `%yupay_code_VIP2026_amount%` | `50.00` |
| `%yupay_code_VIP2026_used%` | `23` |
| `%yupay_code_VIP2026_max_uses%` | `100` |
| `%yupay_code_VIP2026_expire_formatted%` | `2026-12-31 23:59` |
| `%yupay_code_VIP2026_can_redeem%` | `true` / `false` |
| `%yupay_code_VIP2026_locked%` | `true` / `false` |
| `%yupay_code_VIP2026_redeemed%` | Whether current player has redeemed |

## 7. Refund System In-Depth

### 7.1 Refund Method Comparison

| Method | Command Example | Use Case |
|--------|-----------------|----------|
| Direct refund | `/yp refund ORDER001 50` | Confirmed refund needed, quick processing |
| Forced refund | `/yp refund ORDER001 50 -f` | Skip amount check, refund directly |
| Partial refund | `/yp refund ORDER001 30` | Refund part of the amount |
| Approval workflow | `/yp refund request ORDER001` → wait for approve | Scenarios requiring approval |
| Code refund | `/yp refund -r ` | Refund code payment + restore usage count |

### 7.2 Refund Approval Workflow

1. Player or admin submits refund request: `/yp refund request [amount]`
2. Admin views pending list: `/yp refund pending`
3. Approve or reject: `/yp refund approve ` / `reject`
4. Upon approval, actual refund automatically executes; upon rejection, requester is notified

### 7.3 What Happens After Refund

- Payment platform (WeChat/Alipay) receives refund request, money returns to original payment method
- Plugin updates order refund status (`FULL_REFUND` / `PARTIAL_REFUND`)
- If code refund: code usage count -1, status restored to `ACTIVE`
- Executes commands configured in `commands.on-refund`
- Triggers `RefundCompletedEvent` for other plugins to react
- Complete refund logs written to database

## 8. Multi-Language System

### 8.1 Adding a Language

Add under `language.mappings` node in `config.yml`:

```yaml
language:
mappings:
zh_cn:
file: "messages.yml"
aliases: [zh, cn, chinese]
client-locales: ["zh_cn", "zh_*"]
en:
file: "messages_en.yml"
aliases: [english, eng]
client-locales: ["en_*"]
ja:
file: "messages_ja.yml"
aliases: [japanese, jp]
client-locales: ["ja_*"]
```

Then create `plugins/YuPay/messages_ja.yml`, translating based on `messages.yml`. Plugin will automatically fill in missing keys.

### 8.2 Switching Language

- Players switch manually: `/yp lang en` (supports aliases, e.g. `english`)
- First join auto-detects client language and matches best translation
- Language preference stored in database, remembered across sessions

## 9. Database Selection Guide

| Server Scale | Recommended Type | Reason |
|--------------|------------------|--------|
| Single small server | SQLite | Zero configuration, out-of-the-box |
| Multi-server network | MySQL | Unified data, cross-server sync |
| Large network | MySQL + connection pool | High concurrency support, connection reuse |

## 10. Troubleshooting Common Issues

### Callback server fails to start
- Check if port is occupied
- Confirm firewall/security group has opened the port
- Check console error logs

### Payment successful but rewards not received
- Check order `status` in database — should be `SUCCESS`
- Confirm `economy.enabled` and `commands.enabled` are both `true`
- Check console for economy plugin load errors

### Map QR code not showing
- Confirm ProtocolLib matching server version is installed
- Check if `qrcode.default-output-mode` is set to `map`
- If ProtocolLib missing, mode auto-falls back to `link`

### WeChat Pay says public key file not found
- Check existence of `plugins/YuPay/pems/` directory
- Confirm `wechat.public-key-path` is correct
- Go to WeChat Merchant Platform → API Security → API Certificates → download platform certificate

### Configuration lost after plugin upgrade
- YuPay has built-in smart config upgrader — automatically backs up old file (`.bak` suffix) and merges new keys
- Manual backup before upgrade for extra peace of mind

## 11. Database Tables

| Table Name | Stored Content |
|------------|----------------|
| `yu_payments` | All payment orders, including refund status |
| `yu_total_levels` | Cumulative reward tier records |
| `yu_banned_players` | Sponsorship blacklist |
| `yu_player_lang` | Player language preferences |
| `yu_redeem_codes` | Redeem code master table |
| `yu_redeem_logs` | Redemption records |
| `yu_refund_logs` | Refund operation logs |
| `yu_refund_requests` | Refund review requests |

## 12. Uninstallation Steps

1. Execute `/yp reload` (ensure in-memory config is flushed)
2. Stop the server
3. Delete `plugins/YuPay.jar`
4. For complete removal, delete `plugins/YuPay` folder (including database)

---

> 💬 Plugin Discussion Group: **1080918424**
> Don't struggle alone — bring your logs and config screenshots to the group, the author and helpful server owners are there.

> 💛 **Support the Author on AiFaDian**: https://ifdian.net/item/012b6c1c4a0911f18d1b52540025c377
>
> If YuPay has helped your server, consider buying the author a milk tea ~ Your support is the biggest motivation for the plugin's continued evolution.
```