{"id":173451,"date":"2026-06-10T01:47:08","date_gmt":"2026-06-09T22:47:08","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/"},"modified":"2026-06-10T01:47:08","modified_gmt":"2026-06-09T22:47:08","slug":"yupay","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/","title":{"rendered":"YuPay"},"content":{"rendered":"<p># \ud83c\udfae YuPay \u2014\u2014 Make Sponsorship Management a Pleasure<\/p>\n<p>> **Minecraft server sponsorship has never been been this elegant.**<br \/>\n><br \/>\n> Direct integration with WeChat Pay &#038; Alipay, redeem code system, refund review, multi-language, full lifecycle event listening \u2014 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.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udce6 What Is It<\/p>\n<p>**YuPay** is a free, modern payment plugin tailored for Minecraft servers. It breaks down the hassle of &#8220;sponsorship management&#8221; into four steps: **Initiate \u2192 Pay \u2192 Receive \u2192 Record**. Every step is automated, every step traceable.<\/p>\n<p>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 \u2014 no third-party relay, your funds stay secure in your own hands.<\/p>\n<p>> \u26a0\ufe0f This plugin is designed for scenarios where &#8220;players voluntarily sponsor server operations&#8221;. Please ensure usage complies with local laws and payment platform regulations.<\/p>\n<p>&#8212;<\/p>\n<p>## \u2728 Highlights at a Glance<\/p>\n<p>| Category | What You Get |<br \/>\n|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;|<br \/>\n| \ud83d\udcb3 **Payment** | WeChat + Alipay dual channels, Native QR scan payment, automatic fallback |<br \/>\n| \ud83d\udcb0 **Economy** | Vault + PlayerPoints dual support, one-click switch |<br \/>\n| \ud83c\udf81 **Rewards** | Base rewards, single milestone, total achievements, limited-time sprints \u2014 four trigger layers |<br \/>\n| \ud83d\udd11 **Redeem Code** | Create\/redeem\/query\/modify, supports paid codes, complete logs |<br \/>\n| \ud83d\udcb5 **Refund** | Players can request refunds, admin approve\/deny, forced refund, partial refund |<br \/>\n| \ud83d\udcca **Data** | Leaderboards, order history, page browsing, one-click copy order ID |<br \/>\n| \ud83c\udf10 **Multi-language** | Default Chinese + English, server owners can customize any language, different players see different languages |<br \/>\n| \ud83d\udd0c **PAPI** | 40+ placeholders, use in scoreboards\/titles\/item lore |<br \/>\n| \ud83d\udee1\ufe0f **Security** | Signature verification, IP whitelist, 24h event monitoring, anti-duplicate delivery |<br \/>\n| \u26a1 **Performance** | Fully async, HikariCP connection pool, 600% startup speed boost |<br \/>\n| \ud83e\udde9 **Extensibility** | Full lifecycle event API for deep integration by developers |<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd04 What a Complete Sponsorship Looks Like<\/p>\n<p>1. Player executes a command, e.g. `\/donate 50 wechat`<br \/>\n2. System creates order asynchronously, writes to database<br \/>\n3. Calls WeChat\/Alipay API to generate payment QR code<br \/>\n4. Depending on your config, sends **clickable link**, **text-art QR** in chat, or **map QR** in inventory<br \/>\n5. Player scans and completes payment<br \/>\n6. Payment platform calls back to your server<br \/>\n7. Plugin verifies signature, confirms receipt, grants rewards (economy + commands)<br \/>\n8. Leaderboard and placeholders update in real time<br \/>\n9. All logs written, traceable anytime<\/p>\n<p>Fully automated. You just configure the rewards, YuPay handles the rest.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udf81 Four Reward Layers, Mix and Match<\/p>\n<p>YuPay&#8217;s reward system is like a Lego box \u2014 four trigger modes you can combine freely.<\/p>\n<p>| Layer | Trigger | Example |<br \/>\n|&#8212;&#8212;-|&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;|<br \/>\n| **Base Reward** | Every successful payment | `give {player} diamond 1` |<br \/>\n| **Single Milestone** | Single payment reaches threshold | 50 yuan \u2192 5 gold blocks |<br \/>\n| **Total Achievement** | Lifetime total reaches new height | 500 yuan \u2192 SVIP permission group |<br \/>\n| **Limited Sprint** | Cumulative within specified time period | 200 yuan in 24h \u2192 enchanted golden apple |<\/p>\n<p>Each layer&#8217;s commands are fully customizable, support variables like `{player}`, `{amount}`, `{points}`, and can integrate with permission\/economy plugins like LuckPerms, CMI, etc.<\/p>\n<p>> \ud83d\udca1 Adding `-n` (e.g. `\/donate 10 -n`) makes it a **no-reward sponsorship** \u2014 pure server support, no rewards triggered.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd11 Redeem Code System: More Than Just a Voucher<\/p>\n<p>YuPay&#8217;s redeem code module goes far beyond typical &#8220;gift codes&#8221;:<\/p>\n<p>&#8211; **Free codes**: Players enter to claim \u2014 great for event giveaways<br \/>\n&#8211; **Paid activation codes**: Players must scan and pay a specified amount before redeeming \u2014 suitable for selling item entitlements, redeeming codes from other platforms, etc.<br \/>\n&#8211; **Economy rewards**: Automatically grant Vault currency or PlayerPoints upon redemption<br \/>\n&#8211; **Custom commands**: Each code can bind a set of commands executed on redemption<br \/>\n&#8211; **Usage limits &#038; expiry**: Independent control per code<br \/>\n&#8211; **Code PAPI**: Placeholders directly read any code&#8217;s status, amount, remaining uses<\/p>\n<p>Create a paid activation code with a single command:<br \/>\n&#8220;`<br \/>\n\/yp code create &#8211;code VIP2026 &#8211;amount 50 &#8211;economy vault &#8211;eco-amount 5000 &#8211;commands &#8220;lp user {player} parent set vip&#8221; &#8211;max-uses 100 &#8211;expire 30d<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcb5 Refund System: Bad Debt Terminator<\/p>\n<p>Refunds are no longer a nightmare. YuPay&#8217;s refund process is complete and reassuring:<\/p>\n<p>&#8211; **Players request refund**: Submit application with reason<br \/>\n&#8211; **Admin reviews**: Approve\/deny in an orderly manner<br \/>\n&#8211; **Forced refund**: Direct operation for urgent cases, no waiting for review<br \/>\n&#8211; **Partial refund**: Flexible handling, precise to the cent<br \/>\n&#8211; **Code refund**: Refund money and rollback usage count, status automatically restored<br \/>\n&#8211; **Refund callback**: Interfaces with WeChat\/Alipay official refund API, money returns to original payment method<br \/>\n&#8211; **Complete logs**: Who refunded, how much, when, why \u2014 all clear<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udf10 Thousand Players, Thousand Languages \u2014 No Language Fights<\/p>\n<p>A lifesaver for international server operators.<\/p>\n<p>&#8211; Comes with **Simplified Chinese** and **English** complete translations<br \/>\n&#8211; Server owners can add any language file in `language.mappings`<br \/>\n&#8211; Players switch preference with `\/yp lang <language>`, stored in database, persists across sessions<br \/>\n&#8211; New players automatically **detect client language** and match the best translation<br \/>\n&#8211; Different players on the same server see different language prompts \u2014 truly per-player localization<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd0c Complete PAPI Placeholder List<\/p>\n<p>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:<\/p>\n<p>&#8212;<\/p>\n<p>### 1. Personal Dimension (requires player context)<\/p>\n<p>| Placeholder | Description | Example Return |<br \/>\n|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `%yupay_is_banned%` | Whether the player is banned from sponsoring | `true` \/ `false` |<br \/>\n| `%yupay_total%` | Player&#8217;s lifetime total sponsorship (yuan) | `158.00` |<br \/>\n| `%yupay_total_orders%` | Player&#8217;s total orders (including failed) | `7` |<br \/>\n| `%yupay_success_orders%` | Player&#8217;s successful orders | `5` |<br \/>\n| `%yupay_rank%` | Player&#8217;s sponsorship rank (off-rank shows text from language file) | `3` or `Not ranked` |<br \/>\n| `%yupay_has_paid_in_<time>%` | Whether the player has sponsored within the last `<time>` milliseconds | `true` \/ `false` |<br \/>\n| `%yupay_recent_amount_gt_<time>_<amount>%` | Whether sponsorship amount in last `<time>` ms exceeds `<amount>` yuan | `true` \/ `false` |<br \/>\n| `%yupay_orders_in_<time>%` | Number of orders in last `<time>` ms (including failed) | `2` |<br \/>\n| `%yupay_success_orders_in_<time>%` | Successful orders in last `<time>` ms | `2` |<br \/>\n| `%yupay_amount_in_<time>%` | Total sponsorship amount in last `<time>` ms (yuan) | `75.50` |<br \/>\n| `%yupay_is_limited%` | Whether today&#8217;s sponsorship has reached daily limit | `true` \/ `false` |<br \/>\n| `%yupay_daily_remaining%` | Remaining sponsorship amount for today (yuan) | `450.00` |<br \/>\n| `%yupay_lang%` | Player&#8217;s current language identifier | `zh_cn` |<br \/>\n| `%yupay_pay_methods_count%` | Number of currently available payment channels | `2` |<br \/>\n| `%yupay_pay_methods_list%` | List of available payment channel names (comma-separated) | `wechat, alipay` |<\/p>\n<p>> \ud83d\udca1 **Dynamic parameters**: `<time>` is in **milliseconds** (e.g. `86400000` = 24h), `<amount>` is monetary threshold (yuan). All monetary placeholders retain two decimals.<\/p>\n<p>&#8212;<\/p>\n<p>### 2. Server Dimension (no player needed)<\/p>\n<p>| Placeholder | Description | Example Return |<br \/>\n|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `%yupay_server_total%` | Server&#8217;s lifetime total sponsorship (yuan) | `12850.75` |<br \/>\n| `%yupay_server_total_orders%` | Server&#8217;s total orders (including failed) | `312` |<br \/>\n| `%yupay_server_success_orders%` | Server&#8217;s successful orders | `289` |<br \/>\n| `%yupay_server_orders_in_<time>%` | Server orders in last `<time>` ms | `45` |<br \/>\n| `%yupay_server_success_orders_in_<time>%` | Server successful orders in last `<time>` ms | `42` |<br \/>\n| `%yupay_server_amount_in_<time>%` | Server total sponsorship in last `<time>` ms (yuan) | `3200.00` |<\/p>\n<p>&#8212;<\/p>\n<p>### 3. Leaderboard Dimension (no player needed)<\/p>\n<p>Two formats supported (first recommended):<\/p>\n<p>| Placeholder | Description | Example Return |<br \/>\n|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `%yupay_top_<rank>_name%` | Player name at rank N | `Steve` |<br \/>\n| `%yupay_top_<rank>_amount%` | Total sponsorship at rank N (yuan) | `2000.00` |<br \/>\n| `%yupay_top<rank>_name%` | (legacy format) Same as above | `Alex` |<br \/>\n| `%yupay_top<rank>_amount%` | (legacy format) Same as above | `1500.00` |<\/p>\n<p>> `<rank>` ranges `1` ~ `10`. If rank doesn&#8217;t exist, name returns fallback text from language file (default &#8220;None&#8221;), amount returns `0.00`.<\/p>\n<p>&#8212;<\/p>\n<p>### 4. Redeem Code Dimension<\/p>\n<p>Includes global statistics (no player needed) and specific code attributes (where `redeemed` and `can_redeem` require player context).<\/p>\n<p>#### Global Statistics<\/p>\n<p>| Placeholder | Description | Example Return |<br \/>\n|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n| `%yupay_code_total%` | Total number of codes | `25` |<br \/>\n| `%yupay_code_active%` | Number of active codes (status ACTIVE) | `18` |<\/p>\n<p>#### Specific Code Attributes \u2014 replace `<code>` with actual code string (auto-uppercase)<\/p>\n<p>| Placeholder | Description | Example (code = `VIP2026`) |<br \/>\n|-------------|-------------|----------------------------|<br \/>\n| `%yupay_code_<code>_status%` | Current status of the code | `ACTIVE` |<br \/>\n| `%yupay_code_<code>_amount%` | Required payment amount (yuan) | `50.00` |<br \/>\n| `%yupay_code_<code>_economy_type%` | Economy reward type | `vault` |<br \/>\n| `%yupay_code_<code>_economy_amount%` | Economy reward amount | `5000.00` |<br \/>\n| `%yupay_code_<code>_used%` | Number of times redeemed | `23` |<br \/>\n| `%yupay_code_<code>_max_uses%` | Max redeem count (-1 = unlimited) | `100` |<br \/>\n| `%yupay_code_<code>_expire%` | Expiry timestamp (ms), -1 = never | `1798675199999` |<br \/>\n| `%yupay_code_<code>_expire_formatted%` | Formatted expiry time | `2026-12-31 23:59` |<br \/>\n| `%yupay_code_<code>_remark%` | Code remark | `\"VIP activation code\"` |<br \/>\n| `%yupay_code_<code>_locked%` | Whether locked by a payment (someone is paying) | `true` \/ `false` |<br \/>\n| `%yupay_code_<code>_redeemed%` | Whether **current player** has redeemed this code | `true` \/ `false` |<br \/>\n| `%yupay_code_<code>_can_redeem%` | Whether **current player** can redeem now (comprehensive check) | `true` \/ `false` |<\/p>\n<p>> \ud83d\udca1 `_can_redeem` checks: code status normal, not expired, uses left, not locked by others, and current player hasn't redeemed it.<\/p>\n<p>---<\/p>\n<p>### Usage Notes<\/p>\n<p>- **All monetary placeholders** are in `yuan`, with two decimal places, e.g. `99.50`. Integer amounts also show `.00`.<br \/>\n- Dynamic time parameter `<time>` always uses **milliseconds** \u2014 24h = `86400000`, 7d = `604800000`.<br \/>\n- Code strings in placeholders are auto-uppercased; lowercase input works too.<br \/>\n- Server and leaderboard placeholders **do not require a player context**; personal and some code placeholders **require a player** or return empty\/default.<br \/>\n- Placeholders work in any plugin that supports PlaceholderAPI (scoreboard, BossBar, DeluxeTags, chat prefix, item lore, etc.).<\/p>\n<p>---<\/p>\n<p>## \ud83e\udde9 Gift for Developers<\/p>\n<p>If you can write plugins, these events will make your secondary development experience fly:<\/p>\n<p>| Event | Trigger | Modifiable Parameters |<br \/>\n|-------|---------|----------------------|<br \/>\n| `PrePaymentEvent` | Before payment | amount, payment method, order ID, cancel flag |<br \/>\n| `PaymentOrderCreatedEvent` | Order created successfully | read-only (has QR URL) |<br \/>\n| `PaymentCompletedEvent` | Payment success + rewards granted | read-only (full data) |<br \/>\n| `PaymentFailedEvent` | Payment failed \/ canceled | read-only |<br \/>\n| `RefundCompletedEvent` | Refund completed | read-only |<br \/>\n| `RedeemCodeRedeemedEvent` | Code redeemed | read-only |<br \/>\n| `RedeemCodeLifetimeEvent` | Code status changed | read-only (old \u2192 new state) |<br \/>\n| `PlayerPointsChangedEvent` | Economy changed | read-only |<\/p>\n<p>All events support sync. You can intercept before order creation, trigger\u8054\u52a8 other systems after payment, sync data on refund \u2014 every detail of the sponsorship lifecycle is observable.<\/p>\n<p>---<\/p>\n<p>## \ud83d\udee1\ufe0f Security Is Not Just Talk<\/p>\n<p>- **Signature verification**: WeChat\/Alipay callbacks are fully signature-verified against forgery<br \/>\n- **Anti-duplicate delivery**: Order status check + idempotent handling<br \/>\n- **IP whitelist**: Callback interface can restrict access to official payment platform IPs only<br \/>\n- **TLS\/HTTPS**: Supports certificate-encrypted communication<br \/>\n- **Event monitoring**: `\/yp audit` one-click audit, 24h monitoring of which plugins are listening to YuPay's fund events<br \/>\n- **Map virtual lock**: When a payment QR is placed in the inventory, the player is locked in place, cannot drop\/switch items, payment unlocks<\/p>\n<p>---<\/p>\n<p>## \u26a1 Blazing Fast Startup<\/p>\n<p>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.<\/p>\n<p>---<\/p>\n<p>## \ud83d\udcca Data at Your Fingertips<\/p>\n<p>`\/yp history` is one of your most-used commands. Order history supports **page browsing**, click an order ID to **copy it with one click** \u2014 reconciliation efficiency doubled.<\/p>\n<p>`\/yp top` lets you know at any time who is contributing to the server \u2014 leaderboard data syncs with placeholders in real time.<\/p>\n<p>`\/yp total` for personal stats, `\/yp total all` for server-wide stats \u2014 all available at your fingertips.<\/p>\n<p>---<\/p>\n<p>## \ud83d\ude80 Two-Minute Quick Start Guide<\/p>\n<p>1. Drop `YuPay.jar` into the `plugins\/` folder<br \/>\n2. Start the server, wait for `config.yml` and `messages.yml` to generate<br \/>\n3. Open `config.yml`, fill in your WeChat\/Alipay parameters<br \/>\n4. Ensure the callback port (default `8080`) is open in your server firewall and security group<br \/>\n5. In-game, type `\/donate 0.01` to test a small payment<br \/>\n6. Confirm callback works and rewards arrive \u2014 start business \ud83c\udf89<\/p>\n<p>---<\/p>\n<p>## \ud83c\udfc6 Why Server Owners Are Using YuPay<\/p>\n<p>- \u2705 **Stable**: Production-tested, compatible with Spigot\/Paper 1.8 to latest versions<br \/>\n- \u2705 **Reliable**: Direct official API connection, no middlemen, money goes to your account directly<br \/>\n- \u2705 **Worry-free**: From payment to rewards fully automated, you just configure<br \/>\n- \u2705 **Flexible**: Reward logic fully programmable, command aliases freely definable<br \/>\n- \u2705 **Secure**: Signature verification + anti-duplicate + IP whitelist + event monitoring<br \/>\n- \u2705 **Transparent**: Every order, every refund, every code redemption has logs<br \/>\n- \u2705 **Evolving**: Actively maintained, continuously iterated, community-driven<\/p>\n<p>---<\/p>\n<p>> \ud83d\udcac **Plugin Discussion Group: 1080918424**<br \/>\n><br \/>\n> For issues, feature requests, or just to chat \u2014 welcome. Every improvement of YuPay comes from feedback from server owners.<\/p>\n<p>> \ud83d\udc9b **Support the Author on AiFaDian**: https:\/\/ifdian.net\/item\/012b6c1c4a0911f18d1b52540025c377<br \/>\n><br \/>\n> 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.<\/p>\n<p>**Stop struggling with sponsorship management. Leave the professional stuff to YuPay, and focus on running your server well.**<\/p>\n<p>***<\/p>\n<p># \ud83d\udcd6 YuPay Operation Manual<\/p>\n<p>## 1. Environment Requirements<\/p>\n<p>| Item | Requirement |<br \/>\n|------|-------------|<br \/>\n| Server | Spigot \/ Paper \/ compatible forks \/ compatible hybrid servers, 1.8 \u2013 1.26+ |<br \/>\n| Java | JDK 8 or higher |<br \/>\n| Optional dependencies | Vault (economy), PlayerPoints (points), PlaceholderAPI (placeholders), ProtocolLib (map lock) |<\/p>\n<p>> \ud83c\udf89 **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 \u2014 out-of-the-box.<\/p>\n<p>## 2. Installation & Startup<\/p>\n<p>1. Download `YuPay.jar`, place it in the server's `plugins\/` directory<br \/>\n2. Start the server, the plugin will automatically generate `config.yml`, `messages.yml`, and SQLite database files<br \/>\n3. Edit `plugins\/YuPay\/config.yml`, fill in payment channel configuration parameters<br \/>\n4. Depending on your payment method, configure callback URLs in the payment platform backend:<br \/>\n   - WeChat: `http(s):\/\/your-domain-or-ip:port\/pay\/wechat\/notify`<br \/>\n   - Alipay: `http(s):\/\/your-domain-or-ip:port\/pay\/alipay\/notify`<br \/>\n5. Ensure the callback port (default `8080`) is open in firewall and security group<br \/>\n6. Execute `\/yupay reload` or type `reload` in console to apply configuration<br \/>\n7. In-game, type `\/donate 0.01` to test a small payment<\/p>\n<p>## 3. Configuration Quick Reference<\/p>\n<p>### 3.1 Core Payment Parameters<\/p>\n<p>| Path | Description | Example |<br \/>\n|------|-------------|---------|<br \/>\n| `pay.default-method` | Default payment method | `wechat` \/ `alipay` |<br \/>\n| `pay.min-amount` | Minimum amount per order (yuan) | `0.01` |<br \/>\n| `pay.max-amount` | Maximum amount per order (-1 = unlimited) | `500` |<br \/>\n| `pay.max-daily-amount` | Daily cumulative limit (-1 = unlimited) | `1000` |<br \/>\n| `pay.order-subject` | Order subject template | `Sponsorship-{player}-{amount}yuan` |<\/p>\n<p>### 3.2 WeChat Pay Parameters<\/p>\n<p>| Path | Description |<br \/>\n|------|-------------|<br \/>\n| `wechat.enabled` | Enable (true\/false) |<br \/>\n| `wechat.mchid` | Merchant ID |<br \/>\n| `wechat.appid` | Official account \/ Mini Program AppID |<br \/>\n| `wechat.serial-no` | API certificate serial number |<br \/>\n| `wechat.private-key-path` | Merchant private key (relative to `pems\/` directory) |<br \/>\n| `wechat.public-key-path` | Platform public key (relative to `pems\/` directory) |<br \/>\n| `wechat.public-key-id` | Platform public key ID |<br \/>\n| `wechat.api-v3-key` | API v3 key (32 characters) |<br \/>\n| `wechat.notify-url` | Complete callback notification URL |<\/p>\n<p>### 3.3 Alipay Parameters<\/p>\n<p>| Path | Description |<br \/>\n|------|-------------|<br \/>\n| `alipay.enabled` | Enable |<br \/>\n| `alipay.mode` | `public_key` or `cert` |<br \/>\n| `alipay.app-id` | App ID |<br \/>\n| `alipay.merchant-private-key` | Merchant private key (PKCS8, without headers\/footers) |<br \/>\n| `alipay.alipay-public-key` | Alipay public key (required for public_key mode) |<br \/>\n| `alipay.app-cert-path` | App public key certificate (cert mode) |<br \/>\n| `alipay.alipay-cert-path` | Alipay public key certificate (cert mode) |<br \/>\n| `alipay.alipay-root-cert-path` | Alipay root certificate (cert mode) |<br \/>\n| `alipay.notify-url` | Async notification URL |<br \/>\n| `alipay.return-url` | Sync return URL |<\/p>\n<p>### 3.4 Economy System<\/p>\n<p>| Path | Description |<br \/>\n|------|-------------|<br \/>\n| `economy.enabled` | Enable economy rewards |<br \/>\n| `economy.type` | `vault` or `playerpoints` |<br \/>\n| `economy.rate` | 1 yuan = how many in-game currency\/points |<\/p>\n<p>### 3.5 QR Code Display<\/p>\n<p>| Path | Description |<br \/>\n|------|-------------|<br \/>\n| `qrcode.default-output-mode` | `link` \/ `text` \/ `map` |<br \/>\n| `qrcode.text-qr-size` | Text mode QR side length (characters, default 12) |<br \/>\n| `qrcode.text-black-char` | Black pixel character (default `\u2588\u2588`) |<br \/>\n| `qrcode.api-url` | Image generation API for link mode |<\/p>\n<p>### 3.6 Callback Server<\/p>\n<p>| Path | Description |<br \/>\n|------|-------------|<br \/>\n| `callback.port` | Listening port |<br \/>\n| `callback.host` | Bind address (`0.0.0.0` = all interfaces) |<br \/>\n| `callback.io-threads` | IO thread count |<br \/>\n| `callback.worker-threads` | Worker thread count |<br \/>\n| `callback.allowed-ips` | IP whitelist (CIDR format, empty = allow all) |<br \/>\n| `callback.access-log` | Enable access logging |<\/p>\n<p>### 3.7 Database<\/p>\n<p>| Path | Description |<br \/>\n|------|-------------|<br \/>\n| `database.type` | `sqlite` (standalone) or `mysql` (multi-server sync) |<br \/>\n| `database.mysql.*` | MySQL connection parameters |<br \/>\n| `database.connection-pool.*` | HikariCP connection pool parameters |<br \/>\n| `database.table-names.prefix` | Table prefix to avoid conflicts |<br \/>\n| `database.table-names.*` | Individual business table names (can be customized) |<\/p>\n<p>## 4. Complete Reward Configuration Guide<\/p>\n<p>### 4.1 Base Reward (on-success)<\/p>\n<p>Executed on every successful payment \u2014 suitable for \"base reward every sponsorship\".<\/p>\n<p>```yaml<br \/>\ncommands:<br \/>\n  on-success:<br \/>\n    - \"give {player} diamond 1\"<br \/>\n    - \"effect give {player} minecraft:speed 30 1\"<br \/>\n```<\/p>\n<p>Available variables: `{player}` (player name), `{amount}` (amount), `{points}` (economy points earned)<\/p>\n<p>### 4.2 Single Milestone (on-single-achieved)<\/p>\n<p>Triggered when a single payment reaches a set amount. **Sort amounts from low to high**, multiple tiers allowed.<\/p>\n<p>```yaml<br \/>\ncommands:<br \/>\n  on-single-achieved:<br \/>\n    - amount: 50<br \/>\n      commands:<br \/>\n        - \"say {player} reached 50 yuan in a single sponsorship!\"<br \/>\n        - \"give {player} minecraft:gold_block 5\"<br \/>\n    - amount: 100<br \/>\n      commands:<br \/>\n        - \"give {player} minecraft:diamond_block 3\"<br \/>\n        - \"lp user {player} parent set vip\"<br \/>\n```<\/p>\n<p>### 4.3 Total Achievement (on-total-achieved)<\/p>\n<p>Triggered when lifetime total reaches a new height. **Each tier triggers only once** \u2014 anti-duplicate mechanism built-in.<\/p>\n<p>```yaml<br \/>\ncommands:<br \/>\n  on-total-achieved:<br \/>\n    - total: 100<br \/>\n      commands:<br \/>\n        - \"lp user {player} parent set vip\"<br \/>\n    - total: 1000<br \/>\n      commands:<br \/>\n        - \"lp user {player} parent set ultimate\"<br \/>\n        - \"give {player} minecraft:beacon 1\"<br \/>\n```<\/p>\n<p>### 4.4 Limited Sprint Reward (on-recent-achieved)<\/p>\n<p>Triggered when cumulative amount within a specified time period (milliseconds) reaches the target. Great for holiday events, weekend leaderboard pushes, etc.<\/p>\n<p>```yaml<br \/>\ncommands:<br \/>\n  on-recent-achieved:<br \/>\n    - time: 86400000    # 24 hours<br \/>\n      total: 200<br \/>\n      commands:<br \/>\n        - \"give {player} minecraft:enchanted_golden_apple 5\"<br \/>\n    - time: 604800000   # 7 days<br \/>\n      total: 500<br \/>\n      commands:<br \/>\n        - \"give {player} minecraft:elytra 1\"<br \/>\n```<\/p>\n<p>### 4.5 Refund Trigger Commands (on-refund)<\/p>\n<p>Executed after a successful refund \u2014 can be used to notify admins, log events.<\/p>\n<p>```yaml<br \/>\ncommands:<br \/>\n  on-refund:<br \/>\n    - \"say {player}'s order {order} has been refunded {amount} yuan\"<br \/>\n```<\/p>\n<p>## 5. Command System<\/p>\n<p>### 5.1 Player Commands<\/p>\n<p>| Command | Function | Default Aliases |<br \/>\n|---------|----------|----------------|<br \/>\n| `\/donate <amount> [payment] [output] [-n]` | Initiate sponsorship | `\/pay`, `\/zanzhu` |<br \/>\n| `\/ytop` | Sponsorship leaderboard Top10 | `\/paytop`, `\/yt` |<br \/>\n| `\/ytotal [player|all]` | Query total sponsorship | `\/paytotal`, `\/ytt` |<br \/>\n| `\/yp history [page]` | My sponsorship history | `\/yupay history` |<br \/>\n| `\/yp lang [language]` | Switch personal language preference | |<br \/>\n| `\/yp code redeem <code>` | Redeem a code | |<br \/>\n| `\/yp cancel` | Cancel current map payment | |<\/p>\n<p>> \ud83d\udca1 The `-n` flag means \"no-reward sponsorship\" \u2014 pure server support, no reward commands or economy items triggered.<\/p>\n<p>### 5.2 Admin Commands<\/p>\n<p>| Command | Function |<br \/>\n|---------|----------|<br \/>\n| `\/yp reload` | Hot reload configuration |<br \/>\n| `\/yp set<option> <value>` | Change configuration online |<br \/>\n| `\/yp config` | View current core config |<br \/>\n| `\/yp ban <player|all> [reason]` | Ban from sponsoring (`all` = global ban) |<br \/>\n| `\/yp unban <player|all>` | Unban |<br \/>\n| `\/yp convert <player> <from> <to> <amount>` | Convert currency (vault\/points) |<br \/>\n| `\/yp audit` | Audit all plugins listening to YuPay events |<br \/>\n| `\/yp history <player> [page]` | View any player's order history |<br \/>\n| `\/yp code create ...` | Create a redeem code |<br \/>\n| `\/yp code list [page]` | List codes |<br \/>\n| `\/yp code info <code>` | View code details |<br \/>\n| `\/yp code modify <code> <field> <newvalue>` | Modify code parameters |<br \/>\n| `\/yp code delete <code>` | Disable code (soft delete) |<br \/>\n| `\/yp code logs [code] [page]` | View redemption logs |<br \/>\n| `\/yp refund <order-id> [amount]` | Direct refund |<br \/>\n| `\/yp refund list [page]` | Refund logs |<br \/>\n| `\/yp refund request <order-id> [amount]` | Submit refund review request |<br \/>\n| `\/yp refund pending [page]` | View pending refund requests |<br \/>\n| `\/yp refund approve <request-id>` | Approve request |<br \/>\n| `\/yp refund reject <request-id>` | Reject request |<\/p>\n<p>### 5.3 Key Permission Nodes<\/p>\n<p>| Permission Node | Operations |<br \/>\n|----------------|------------|<br \/>\n| `yupay.command.pay` | Initiate sponsorship |<br \/>\n| `yupay.command.top` | View leaderboard |<br \/>\n| `yupay.command.total` | Query total sponsorship |<br \/>\n| `yupay.command.history` | View order history |<br \/>\n| `yupay.reload` | Reload config |<br \/>\n| `yupay.ban` | Manage blacklist |<br \/>\n| `yupay.convert` | Currency conversion |<br \/>\n| `yupay.audit` | Event listener audit |<br \/>\n| `yupay.admin` | Includes all above admin permissions |<\/p>\n<p>## 6. Redeem Code System In-Depth<\/p>\n<p>### 6.1 Code Creation Command Details<\/p>\n<p>Code creation uses named parameters in `--param value` format, freely combinable:<\/p>\n<p>```bash<br \/>\n# Free welfare code (unlimited uses, never expires)<br \/>\n\/yp code create --code FREEGIFT --max-uses -1 --economy vault --eco-amount 100 --remark \"New player gift\"<\/p>\n<p># Paid activation code (pay 50 yuan to redeem, 100 uses, expires after 30 days)<br \/>\n\/yp code create --code PREMIUM --amount 50 --economy vault --eco-amount 5000 --max-uses 100 --expire 30d --commands \"lp user {player} parent set vip\"<\/p>\n<p># Command-only code (no economy, no payment)<br \/>\n\/yp code create --code WELCOME --commands \"give {player} diamond 5; say {player} Welcome back!\"<br \/>\n```<\/p>\n<p>**Parameter quick reference:**<\/p>\n<p>| Parameter | Description | Example |<br \/>\n|-----------|-------------|---------|<br \/>\n| `--code` | Code string (auto-uppercase) | `VIP2026` |<br \/>\n| `--amount` | Required payment amount (0 = free) | `50` |<br \/>\n| `--economy` | Economy type (vault \/ playerpoints \/ none) | `vault` |<br \/>\n| `--eco-amount` | Economy reward amount | `5000` |<br \/>\n| `--max-uses` | Max redeem count (-1 = unlimited) | `100` |<br \/>\n| `--expire` | Expiry time (`30d` \/ `24h` \/ `2026-12-31` \/ `never`) | `30d` |<br \/>\n| `--commands` | Commands to execute on redemption (semicolon-separated) | `\"cmd1; cmd2\"` |<br \/>\n| `--remark` | Remark description | `\"VIP activation code\"` |<\/p>\n<p>### 6.2 Code Status Explanation<\/p>\n<p>| Status | Meaning |<br \/>\n|--------|---------|<br \/>\n| `ACTIVE` | Usable |<br \/>\n| `DEPLETED` | Uses exhausted (automatic) |<br \/>\n| `EXPIRED` | Expired (automatic) |<br \/>\n| `DISABLED` | Manually disabled by admin |<\/p>\n<p>### 6.3 Code PAPI Placeholders<\/p>\n<p>Using code `VIP2026` as example:<\/p>\n<p>| Placeholder | Example Return |<br \/>\n|-------------|----------------|<br \/>\n| `%yupay_code_total%` | Total number of codes |<br \/>\n| `%yupay_code_active%` | Number of active codes |<br \/>\n| `%yupay_code_VIP2026_status%` | `ACTIVE` |<br \/>\n| `%yupay_code_VIP2026_amount%` | `50.00` |<br \/>\n| `%yupay_code_VIP2026_used%` | `23` |<br \/>\n| `%yupay_code_VIP2026_max_uses%` | `100` |<br \/>\n| `%yupay_code_VIP2026_expire_formatted%` | `2026-12-31 23:59` |<br \/>\n| `%yupay_code_VIP2026_can_redeem%` | `true` \/ `false` |<br \/>\n| `%yupay_code_VIP2026_locked%` | `true` \/ `false` |<br \/>\n| `%yupay_code_VIP2026_redeemed%` | Whether current player has redeemed |<\/p>\n<p>## 7. Refund System In-Depth<\/p>\n<p>### 7.1 Refund Method Comparison<\/p>\n<p>| Method | Command Example | Use Case |<br \/>\n|--------|-----------------|----------|<br \/>\n| Direct refund | `\/yp refund ORDER001 50` | Confirmed refund needed, quick processing |<br \/>\n| Forced refund | `\/yp refund ORDER001 50 -f` | Skip amount check, refund directly |<br \/>\n| Partial refund | `\/yp refund ORDER001 30` | Refund part of the amount |<br \/>\n| Approval workflow | `\/yp refund request ORDER001` \u2192 wait for approve | Scenarios requiring approval |<br \/>\n| Code refund | `\/yp refund -r <redemption-log-id>` | Refund code payment + restore usage count |<\/p>\n<p>### 7.2 Refund Approval Workflow<\/p>\n<p>1. Player or admin submits refund request: `\/yp refund request <order-id> [amount]`<br \/>\n2. Admin views pending list: `\/yp refund pending`<br \/>\n3. Approve or reject: `\/yp refund approve <request-id>` \/ `reject`<br \/>\n4. Upon approval, actual refund automatically executes; upon rejection, requester is notified<\/p>\n<p>### 7.3 What Happens After Refund<\/p>\n<p>- Payment platform (WeChat\/Alipay) receives refund request, money returns to original payment method<br \/>\n- Plugin updates order refund status (`FULL_REFUND` \/ `PARTIAL_REFUND`)<br \/>\n- If code refund: code usage count -1, status restored to `ACTIVE`<br \/>\n- Executes commands configured in `commands.on-refund`<br \/>\n- Triggers `RefundCompletedEvent` for other plugins to react<br \/>\n- Complete refund logs written to database<\/p>\n<p>## 8. Multi-Language System<\/p>\n<p>### 8.1 Adding a Language<\/p>\n<p>Add under `language.mappings` node in `config.yml`:<\/p>\n<p>```yaml<br \/>\nlanguage:<br \/>\n  mappings:<br \/>\n    zh_cn:<br \/>\n      file: \"messages.yml\"<br \/>\n      aliases: [zh, cn, chinese]<br \/>\n      client-locales: [\"zh_cn\", \"zh_*\"]<br \/>\n    en:<br \/>\n      file: \"messages_en.yml\"<br \/>\n      aliases: [english, eng]<br \/>\n      client-locales: [\"en_*\"]<br \/>\n    ja:<br \/>\n      file: \"messages_ja.yml\"<br \/>\n      aliases: [japanese, jp]<br \/>\n      client-locales: [\"ja_*\"]<br \/>\n```<\/p>\n<p>Then create `plugins\/YuPay\/messages_ja.yml`, translating based on `messages.yml`. Plugin will automatically fill in missing keys.<\/p>\n<p>### 8.2 Switching Language<\/p>\n<p>- Players switch manually: `\/yp lang en` (supports aliases, e.g. `english`)<br \/>\n- First join auto-detects client language and matches best translation<br \/>\n- Language preference stored in database, remembered across sessions<\/p>\n<p>## 9. Database Selection Guide<\/p>\n<p>| Server Scale | Recommended Type | Reason |<br \/>\n|--------------|------------------|--------|<br \/>\n| Single small server | SQLite | Zero configuration, out-of-the-box |<br \/>\n| Multi-server network | MySQL | Unified data, cross-server sync |<br \/>\n| Large network | MySQL + connection pool | High concurrency support, connection reuse |<\/p>\n<p>## 10. Troubleshooting Common Issues<\/p>\n<p>### Callback server fails to start<br \/>\n- Check if port is occupied<br \/>\n- Confirm firewall\/security group has opened the port<br \/>\n- Check console error logs<\/p>\n<p>### Payment successful but rewards not received<br \/>\n- Check order `status` in database \u2014 should be `SUCCESS`<br \/>\n- Confirm `economy.enabled` and `commands.enabled` are both `true`<br \/>\n- Check console for economy plugin load errors<\/p>\n<p>### Map QR code not showing<br \/>\n- Confirm ProtocolLib matching server version is installed<br \/>\n- Check if `qrcode.default-output-mode` is set to `map`<br \/>\n- If ProtocolLib missing, mode auto-falls back to `link`<\/p>\n<p>### WeChat Pay says public key file not found<br \/>\n- Check existence of `plugins\/YuPay\/pems\/` directory<br \/>\n- Confirm `wechat.public-key-path` is correct<br \/>\n- Go to WeChat Merchant Platform \u2192 API Security \u2192 API Certificates \u2192 download platform certificate<\/p>\n<p>### Configuration lost after plugin upgrade<br \/>\n- YuPay has built-in smart config upgrader \u2014 automatically backs up old file (`.bak` suffix) and merges new keys<br \/>\n- Manual backup before upgrade for extra peace of mind<\/p>\n<p>## 11. Database Tables<\/p>\n<p>| Table Name | Stored Content |<br \/>\n|------------|----------------|<br \/>\n| `yu_payments` | All payment orders, including refund status |<br \/>\n| `yu_total_levels` | Cumulative reward tier records |<br \/>\n| `yu_banned_players` | Sponsorship blacklist |<br \/>\n| `yu_player_lang` | Player language preferences |<br \/>\n| `yu_redeem_codes` | Redeem code master table |<br \/>\n| `yu_redeem_logs` | Redemption records |<br \/>\n| `yu_refund_logs` | Refund operation logs |<br \/>\n| `yu_refund_requests` | Refund review requests |<\/p>\n<p>## 12. Uninstallation Steps<\/p>\n<p>1. Execute `\/yp reload` (ensure in-memory config is flushed)<br \/>\n2. Stop the server<br \/>\n3. Delete `plugins\/YuPay.jar`<br \/>\n4. For complete removal, delete `plugins\/YuPay` folder (including database)<\/p>\n<p>---<\/p>\n<p>> \ud83d\udcac Plugin Discussion Group: **1080918424**<br \/>\n> Don't struggle alone \u2014 bring your logs and config screenshots to the group, the author and helpful server owners are there.<\/p>\n<p>> \ud83d\udc9b **Support the Author on AiFaDian**: https:\/\/ifdian.net\/item\/012b6c1c4a0911f18d1b52540025c377<br \/>\n><br \/>\n> 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.<br \/>\n```<\/p>\n","protected":false},"excerpt":{"rendered":"<p>YuPay is a modern, feature-rich payment and donation plugin designed for Minecraft servers (compatible with 1.8.x-1.26.x). It seamlessly integrates WeChat Pay and Alipay<\/p>\n","protected":false},"featured_media":173452,"template":"","meta":{"_minecraft_slug":"yupay","_minecraft_project_id":"ND76NcgJ","_minecraft_author":"vicuna","_minecraft_license":"LicenseRef-All-Rights-Reserved","_minecraft_downloads":108,"_minecraft_follows":0,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"yupay.zip","_minecraft_size_bytes":20116159,"_minecraft_version_count":13,"_minecraft_updated_at":"2026-05-15T19:48:56.344344Z","_minecraft_date_created":"2026-02-09T23:45:44.054981Z","_minecraft_date_modified":"2026-05-12T05:42:11.301707Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/yupay","_minecraft_icon_attachment_id":173452,"_minecraft_imported_at":"2026-06-09T22:47:08+00:00","_minecraft_import_hash":"16c99d5cfaeb5b282b45206dd10fe69b","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[124,844,125,126,127,128,129,92],"mod_loader":[130,131,132,133,134],"minecraft_version":[339,340,341,357,359,360,379,382,385,438,446,449,110,111,112,113,114,115,116,117,118,119,120,46,47,48,49,50,51,52,53,54,55,56,57,58,59,36,60,93,94,101,102,62,37,40,41,73,74,38,78,79,80,81,82,22,23,24,25,26,27,28,29,30,31,860,861,862,863,864,83,167,163],"class_list":["post-173451","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-bukkit","mod_category-economy","mod_category-folia","mod_category-management","mod_category-paper","mod_category-purpur","mod_category-spigot","mod_category-utility","mod_loader-bukkit","mod_loader-folia","mod_loader-paper","mod_loader-purpur","mod_loader-spigot","minecraft_version-1-10","minecraft_version-1-10-1","minecraft_version-1-10-2","minecraft_version-1-11","minecraft_version-1-11-1","minecraft_version-1-11-2","minecraft_version-1-12","minecraft_version-1-12-1","minecraft_version-1-12-2","minecraft_version-1-13","minecraft_version-1-13-1","minecraft_version-1-13-2","minecraft_version-1-14","minecraft_version-1-14-1","minecraft_version-1-14-2","minecraft_version-1-14-3","minecraft_version-1-14-4","minecraft_version-1-15","minecraft_version-1-15-1","minecraft_version-1-15-2","minecraft_version-1-16","minecraft_version-1-16-1","minecraft_version-1-16-2","minecraft_version-1-16-3","minecraft_version-1-16-4","minecraft_version-1-16-5","minecraft_version-1-17","minecraft_version-1-17-1","minecraft_version-1-18","minecraft_version-1-18-1","minecraft_version-1-18-2","minecraft_version-1-19","minecraft_version-1-19-1","minecraft_version-1-19-2","minecraft_version-1-19-3","minecraft_version-1-19-4","minecraft_version-1-20","minecraft_version-1-20-1","minecraft_version-1-20-2","minecraft_version-1-20-3","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-6","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9","minecraft_version-1-8","minecraft_version-1-8-1","minecraft_version-1-8-2","minecraft_version-1-8-3","minecraft_version-1-8-4","minecraft_version-1-8-5","minecraft_version-1-8-6","minecraft_version-1-8-7","minecraft_version-1-8-8","minecraft_version-1-8-9","minecraft_version-1-9","minecraft_version-1-9-1","minecraft_version-1-9-2","minecraft_version-1-9-3","minecraft_version-1-9-4","minecraft_version-26-1","minecraft_version-26-1-1","minecraft_version-26-1-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>YuPay - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"YuPay - Minecraft\" \/>\n<meta property=\"og:description\" content=\"YuPay is a modern, feature-rich payment and donation plugin designed for Minecraft servers (compatible with 1.8.x-1.26.x). It seamlessly integrates WeChat Pay and Alipay\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/\",\"name\":\"YuPay - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/yupay-icon-37c8c1164f11c5b3fc0dc087aa372960d02d4bb6_96.webp\",\"datePublished\":\"2026-06-09T22:47:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/yupay-icon-37c8c1164f11c5b3fc0dc087aa372960d02d4bb6_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/yupay-icon-37c8c1164f11c5b3fc0dc087aa372960d02d4bb6_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/yupay\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"YuPay\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"YuPay - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/","og_locale":"en_US","og_type":"article","og_title":"YuPay - Minecraft","og_description":"YuPay is a modern, feature-rich payment and donation plugin designed for Minecraft servers (compatible with 1.8.x-1.26.x). It seamlessly integrates WeChat Pay and Alipay","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/","name":"YuPay - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/yupay-icon-37c8c1164f11c5b3fc0dc087aa372960d02d4bb6_96.webp","datePublished":"2026-06-09T22:47:08+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/yupay\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/yupay-icon-37c8c1164f11c5b3fc0dc087aa372960d02d4bb6_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/yupay-icon-37c8c1164f11c5b3fc0dc087aa372960d02d4bb6_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/yupay\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"YuPay"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/173451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/173452"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=173451"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=173451"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=173451"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=173451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}