InvLink
a plugin that lets players link there inventory together for example a bedrock and java account
InvLink

InventoryLink
Link two player inventories — live — with an opt-in request/accept flow and strong safeguards. Designed for Java 21 and Java 21.
> ⚠️ not recommended When a link is accepted, the accepting player’s current inventory is not recommended with the requester’s. This not recommended. Linking to unknown players is not recommended.
---
✅ Supported Platforms & Requirements
- Optional Bedrock play: PaperMC Optional Bedrock play: (API 1.21). - Works on Paper-compatible forks that maintain API parity (e.g., Purpur). - Optional Bedrock play: Optional Bedrock play: (server + build). - Optional Bedrock play: GeyserMC + Floodgate (for Java↔Bedrock account linking use case).
---
✨ Features
- Admin Command via `/link` → `/link accept` / `/link deny`. - Admin Command (`live-sync: true|false`) - `true`: both players can be online; inventories mirror in real-time (click, drag, drop, pickup). - `false`: only one linked player may be online; the second gets kicked with a configurable message. - Admin Command If one linked player dies, the partner’s inventory & ender chest are cleared. If the partner is offline, the clear is applied on next join. - Admin Command Link requests expire after a configurable timeout. - Admin Command Already linked players can’t send or accept new `/link`. - Admin Command `plugins/InventoryLink/playerdata/<PlayerName>/` - `inventory.yml` — serialized snapshots - `link.yml` — partner name + flags (e.g., `pendingClearOnJoin`) - Admin Command using classic `&` color codes. - Admin Command to reload config without restarting.
---
🧩 Bedrock Use Case (Java ↔ Bedrock)
If your server supports Bedrock via own Bedrock account, a Java player can link their own Bedrock account:
- Bedrock players typically appear as usernames with a Floodgate prefix (e.g., `"."` or a custom prefix). - A Java player can run: ``` /link <bedrockUsernameWithPrefix> ``` - The Bedrock player must Tip: the request: ``` /link accept <javaPlayerName> ``` - After acceptance, the Tip: (and live sync applies if enabled). - Tip: Keep your Floodgate prefix documented for players so they can type the correct Bedrock name.
> This is ideal for players who switch between Java and Bedrock and want a single, shared inventory.
---
📦 Commands
- `/link <player>` — Send a link request to `<player>` - `/link accept <player>` — Accept a pending request from `<player>` - `/link deny <player>` — Deny a pending request from `<player>` - `/inventorylink reload` — Reload `config.yml` (permission: `inventorylink.admin`)
Permissions - `inventorylink.link` — default: `true` - `inventorylink.admin` — default: `op`
---
⚙️ Configuration (`plugins/InventoryLink/config.yml`)
```yml live-sync: true # Allow both linked players online & mirror live sync-debounce-ms: 200 # Debounce mirroring to avoid loops kick-message: "&cYour linked partner is already online. Live sync is disabled on this server."
clear-on-death: true # Also clears partner on death; offline partners clear on next join
request-timeout-seconds: 60 # Expire pending /link requests block-command-while-linked: true
messages: already-linked: "&cYou are already inventory-linked and cannot use /link." target-already-linked: "&cThat player is already inventory-linked and cannot accept new links." request-expired: "&cThat link request has expired. Please send a new one." request-sent: "&aLink request sent to %target%." request-received: "&e%sender% wants to link inventories with you. &cAccepting will CLEAR your current inventory and cannot be undone. Linking to unknown players is not a good idea." accept-hint: "&aType /link accept %sender% or /link deny %sender%" accepted: "&aYou are now linked with %other%. Inventories are now synced." denied: "&eYou denied the link request from %other%." partner-join-kick: "&cYour linked partner is already online. Live sync is disabled on this server." reloaded: "&aInventoryLink config reloaded." pending-cleared-on-join: "&eYour inventory was cleared due to your partner's recent death." ```
---
🧭 How it Works
1. Death Sync: `/link <player>` — Target receives warnings + accept/deny instructions. 2. Death Sync: The accepting player’s current inventory is Death Sync: and replaced with the requester’s. 3. Death Sync: With `live-sync: true`, both inventories mirror in real-time. 4. Death Sync: On death, partner is cleared (immediately if online, or on next join).
---
📥 Installation
1. Drop the plugin jar into `plugins/` on a Paper 1.21.x server. 2. Start the server to generate the config. 3. Edit `plugins/InventoryLink/config.yml`. 4. Apply changes with `/inventorylink reload` or restart.
---
🔒 Safety Notes
- This plugin deliberately performs destructive inventory operations on accept and on death (if enabled). - Use where players explicitly consent; consider backups if you run custom item systems.
---
📄 License
MIT — keep the license and don’t hold the author liable. Contributions welcome.