InvRestorePlus
Control, manage, and restore all your server inventories in the best way.
Control, manage, and restore all your server inventories in the best way.
Core Features
| Automatic Snapshots | Automatically saves player inventory on death, join, leave, world change, etc. |
| Multiple Storage Backends | Support for YAML, SQLite, and MySQL/MariaDB |
| GZIP Compression | Reduces storage space with optional compression |
| Full Restoration | Restore complete inventory, armor, XP, health, food, and potion effects |
| Partial Restoration | Choose specific parts to restore (inventory, armor, XP, etc.) |
| Preview System | Compare snapshot items with current inventory before restoring |
| Comparsion Tool | Compare two different snapshots side by side |
| Admin Panel | Central administration for managing snapshots and settings |
| Migration System | Migrate data between storage types without data loss |
| Multi-Language | Full support for English, Portuguese, Spanish, and Russian |
MAIN MENU AND ADMIN MENU & COMPARSING MENU
Snapshot Triggers
The plugin automatically creates snapshots on the following events:- Deaths: Fall, Lava, Drowning, Explosion, PvP, PvE, Void, Command, Other
- Player Actions: Join, Leave, Kick, World Change, Teleport
- Inventory Events: Ender Chest use, Crafting, Item Pickup, Item Drop
- Manual: Admin command or API call
- Scheduled: Automatic interval-based snapshots
Commands
- /invr menu
- /invr open
- /invr open <player>
- /invr players
- /invr restore <player> <id>
- /invr compare <id1> <id2>
- /invr snapshot <player>
- /invr purge <player|all>
- /invr migrate <yaml|sqlite|mysql>
- /invr reload
- /invr language <lang>
- /invr help
Permissions
Code:
invrestore.*
├── invrestore.open
│ └── invrestore.open.others
├── invrestore.restore
│ └── invrestore.restore.others
├── invrestore.compare
├── invrestore.export
├── invrestore.purge
├── invrestore.migrate
├── invrestore.reload
└── invrestore.admin (includes all)
Lang File EN - Example
YAML:
# ============================================
# InvRestore - English (US)
# Language file - en_US
# ============================================
# Plugin prefix
prefix: "&b[InvRestore] &7"
# ============================================
# GENERAL MESSAGES
# ============================================
general:
no-permission: "&cYou don't have permission to execute this command."
player-only: "&cOnly players can use this command."
player-not-found: "&cPlayer not found."
player-offline: "&cPlayer is not online."
invalid-args: "&cInvalid arguments. Use /invrestore help"
loading: "&7Loading..."
error: "&cAn error occurred. Check the console."
unknown-command: "&cUnknown command. Use /invrestore help"
# ============================================
# SNAPSHOTS
# ============================================
snapshot:
created: "&aSnapshot created: &f{id}"
not-found: "&cSnapshot not found."
creating: "&7Creating snapshot..."
loaded: "&aSnapshots loaded: &f{count}"
no-snapshots: "&cYou don't have any snapshots."
no-recent-deaths: "&cYou don't have recent death snapshots."
# ============================================
# RESTORATION
# ============================================
restore:
success: "&aInventory of &f{player} &arestored successfully!"
failed: "&cFailed to restore inventory."
restored-by: "&aYour inventory was restored by &f{player}&a."
confirm-title: "&e&lConfirm Restoration"
confirm-message: "&7You are about to restore &f{player}'s &7inventory."
warning: "&c⚠ This action will replace current items!"
# ============================================
# COMPARISON
# ============================================
compare:
loading: "&7Loading snapshots for comparison..."
not-found: "&cOne or more snapshots were not found."
# ============================================
# PURGE
# ============================================
purge:
starting: "&7Starting snapshot cleanup..."
complete: "&aCleanup complete! &f{count} &asnapshots removed."
player-complete: "&aSnapshots from &f{player} &aremoved: &f{count}"
# ============================================
# MIGRATION
# ============================================
migrate:
starting: "&7Starting migration to &f{storage}&7..."
progress: "&7Migrated: &f{current}&7/&f{total}"
complete: "&aMigration complete! &f{count} &asnapshots migrated."
same-storage: "&eYou are already using this storage type."
restart-required: "&e⚠ Restart the server and change config.yml"
# ============================================
# LANGUAGE
# ============================================
language:
changed: "&aLanguage changed to &f{language}&a."
current: "&7Current language: &f{language}"
invalid: "&cInvalid language. Available: &f{languages}"
reloaded: "&aLanguage reloaded."
# ============================================
# CONFIG
# ============================================
config:
reloaded: "&aConfiguration reloaded successfully!"
error: "&cError reloading configuration."
# ============================================
# GUI - COMMON TEXTS
# ============================================
gui:
common:
back: "&cBack"
back-to-menu: "&7Return to main menu"
back-to-admin: "&7Return to admin panel"
close: "&cClose"
confirm: "&a&lCONFIRM"
cancel: "&c&lCANCEL"
next-page: "&aNext Page"
prev-page: "&ePrevious Page"
page-info: "&7Page &f{current}&7/&f{total}"
click-execute: "&eClick to execute"
click-open: "&eClick to open"
shift-click: "&eShift+Click to execute"
warning: "&c⚠ Warning!"
enabled: "&aEnabled"
disabled: "&cDisabled"
days: "days"
coming-soon: "&7Coming soon..."
empty: "&7Empty"
slot: "Slot"
hotbar: "Hotbar"
inventory: "Inventory"
armor: "Armor"
offhand: "Off-hand"
# ============================================
# MAIN MENU
# ============================================
main-menu:
title: "InvRestore - Main Menu"
my-snapshots:
title: "&b&lMy Snapshots"
lore:
- ""
- "&7View all your"
- "&7inventory snapshots."
- ""
- "&7You can restore items"
- "&7lost by death or bugs."
- ""
- "&eClick to open"
player-list:
title: "&a&lView Players"
lore:
- ""
- "&7View snapshots of other"
- "&7server players."
- ""
- "&7Useful for restoring items"
- "&7lost by players."
- ""
- "&eClick to view players"
admin-panel:
title: "&c&lAdmin Panel"
lore:
- ""
- "&7Administrative options:"
- ""
- "&8• &7Clean old snapshots"
- "&8• &7Migrate storage"
- "&8• &7Reload configuration"
- "&8• &7View system statistics"
- ""
- "&eClick to open"
recent-deaths:
title: "&6&lRecent Deaths"
lore:
- ""
- "&7View your most recent"
- "&7death snapshots."
- ""
- "&7Quickly restore items"
- "&7lost in recent deaths."
- ""
- "&eClick to view"
statistics:
title: "&d&lStatistics"
storage: "&7Storage: &f"
compression: "&7Compression: &f"
click-refresh: "&eClick to refresh"
help:
title: "&e&lHelp"
header: "&e&l=== InvRestore Help ==="
locked:
title: "&c&l{name} &c(Locked)"
lore:
- ""
- "&cYou don't have permission"
- "&cto access this option."
# ============================================
# PLAYER LIST
# ============================================
player-list:
title: "Players with Snapshots"
player-info:
status: "&7Status: "
online: "&aOnline"
offline: "&cOffline"
snapshots: "&7Snapshots: "
last-snapshot: "&7Last snapshot:"
click-view: "&eClick to view snapshots"
info:
title: "&6&lInformation"
total-players: "&7Total players: &f"
page: "&7Page: &f"
click-hint: "&7Click a player to"
click-hint2: "&7view their snapshots."
search:
title: "&e&lSearch Player"
lore:
- ""
- "&7Use the command:"
- "&f/ir open <player>"
- ""
- "&7To search for a specific"
- "&7player."
online-filter:
title: "&a&lOnline Only"
lore:
- ""
- "&7Click to filter"
- "&7online players only"
- ""
- "&eClick to toggle"
back-menu:
title: "&c&lBack to Menu"
lore:
- ""
- "&7Return to main menu"
- ""
- "&eClick to go back"
# ============================================
# SNAPSHOT LIST
# ============================================
snapshot-list:
title: "&bSnapshots of &f{player}"
no-snapshots: "&7No snapshots found."
total-snapshots: "&7Total: &f{count} snapshots"
# ============================================
# SNAPSHOT DETAILS
# ============================================
snapshot-detail:
title: "&bSnapshot: &f{id}"
stats:
title: "&6Statistics"
level: "&7Level: &a"
xp-total: "&7Total XP: &a"
health: "&7Health: &c"
hunger: "&7Hunger: &6"
saturation: "&7Saturation: &e"
gamemode: "&7Game Mode: &f"
fire: "&7Fire: &f"
fire-no: "No"
fire-ticks: " ticks"
potion-effects:
title: "&dPotion Effects"
none: "&7No active effects"
location:
title: "&eLocation"
world: "&7World: &f"
coords-x: "&7X: &f"
coords-y: "&7Y: &f"
coords-z: "&7Z: &f"
date: "&7Date: &f"
killer: "&7Killer: &c"
source: "&7Source: &f"
restore-full:
title: "&aFull Restore"
lore:
- ""
- "&7Restores ALL data"
- "&7from snapshot to player."
- ""
- "&eClick to restore"
- "&c⚠ This replaces current inventory!"
restore-partial:
title: "&bPartial Restore"
lore:
- ""
- "&7Choose which parts"
- "&7you want to restore:"
- ""
- "&7• Inventory"
- "&7• Hotbar"
- "&7• Armor"
- "&7• Off-hand"
- "&7• Ender Chest"
- "&7• XP/Level"
- ""
- "&eClick to select"
preview:
title: "&6View Preview"
lore:
- ""
- "&7Compare snapshot items"
- "&7with player's current inventory."
- ""
- "&7View side by side:"
- "&8• &7Snapshot items (left)"
- "&8• &7Current items (right)"
- ""
- "&eClick to preview"
enderchest:
title: "&5Ender Chest"
items: "&7Items saved: &f"
click-view: "&eClick to view contents"
# ============================================
# PREVIEW
# ============================================
preview:
title: "Preview: {player} - {id}"
snapshot-header:
title: "&a&lSaved Snapshot"
id: "&7ID: &f"
type: "&7Type: &f"
date: "&7Date: &f"
items-left: "&a← Snapshot Items"
current-header:
title: "&c&lCurrent Inventory"
player: "&7Player: &f"
status: "&7Status: &aOnline"
items-right: "&c→ Current Items"
comparison:
title: "&6&lComparison"
snapshot-section: "&e&lSnapshot:"
current-section: "&e&lCurrent:"
difference-section: "&e&lDifference:"
level: "&7 Level: &a"
xp: "&7 XP: &a"
health: "&7 Health: &c"
hunger: "&7 Hunger: &6"
restore-full:
title: "&a&lFull Restore"
lore:
- ""
- "&7Restore &fall&7 data:"
- ""
- "&7 &f{count}&7 inventory items"
- "&7 &fLevel {level}"
- "&7 &fHealth, hunger, effects"
- ""
- "&c⚠ Replaces current inventory!"
- ""
- "&eClick to restore all"
restore-partial:
title: "&b&lPartial Restore"
lore:
- ""
- "&7Choose parts to restore:"
- ""
- "&8• &7Inventory"
- "&8• &7Hotbar"
- "&8• &7Armor"
- "&8• &7Off-hand"
- "&8• &7XP/Level"
- "&8• &7Potion effects"
- ""
- "&eClick to choose"
slot-snapshot: "&a[SNAPSHOT] &8"
slot-current: "&c[CURRENT] &8"
armor-boots: "Boots"
armor-leggings: "Leggings"
armor-chestplate: "Chestplate"
armor-helmet: "Helmet"
# ============================================
# ADMIN PANEL
# ============================================
admin:
title: "Admin Panel"
storage:
title: "&6Storage Information"
current: "&7Current:"
compression: "&7Compression:"
mysql-host: "&7MySQL Host:"
mysql-database: "&7Database:"
mysql-pool: "&7Pool Size:"
stats:
title: "&cSystem Statistics"
memory: "&7Memory:"
players-online: "&7Players Online:"
retention: "&7Retention:"
max-snapshots: "&7Max Snapshots/Player:"
auto-purge: "&7Auto-Purge:"
purge-old:
title: "&ePurge Old"
desc1: "&7Remove snapshots older"
desc2: "&7than retention time:"
purge-all:
title: "&4&lPurge ALL"
desc1: "&7Remove ALL snapshots"
desc2: "&7from ALL players."
warning: "&4This action is IRREVERSIBLE!"
migrate:
title: "&bMigrate Storage"
current: "&7Current storage:"
options: "&7Available options:"
reload:
title: "&aReload Config"
desc1: "&7Reloads all"
desc2: "&7plugin configurations."
manual-snapshot:
title: "&dManual Snapshot"
desc1: "&7Create a manual snapshot"
desc2: "&7of any player."
usage: "&7Usage:"
command: "&f/ir snapshot <player>"
backup:
title: "&9Backup"
desc1: "&7Export all data"
desc2: "&7to a file."
debug:
title: "&7Debug Mode"
status: "&7Status:"
desc1: "&7Enables detailed logs"
desc2: "&7in server console."
config-hint: "&7Change in config.yml"
view-players:
title: "&eView All Players"
desc1: "&7View list of all"
desc2: "&7players with snapshots."
info:
title: "&6Information"
version: "&7Version:"
author: "&7Author:"
support: "&7Support: github.com/invrestore"
# ============================================
# MIGRATION MENU
# ============================================
migrate:
title: "Select Storage"
current-storage: "&a✓ Current storage"
click-migrate: "&eClick to migrate"
yaml-desc: "&7YAML file storage"
sqlite-desc: "&7Local SQLite database"
mysql-desc: "&7Remote MySQL database"
# ============================================
# RESTORE CONFIRMATION
# ============================================
restore-confirm:
title: "&eConfirm Restoration"
warning-title: "&c&l⚠ WARNING"
warning-lore:
- ""
- "&7You are about to restore"
- "&7the inventory of &f{player}&7."
- ""
- "&cThis will REPLACE:"
- "&c• All current items"
- "&c• Equipped armor"
- "&c• Level and experience"
- ""
- "&7Snapshot: &f{id}"
- "&7Type: &f{type}"
confirm-lore:
- ""
- "&aConfirm restoration"
- ""
- "&7Click to restore"
cancel-lore:
- ""
- "&cCancel operation"
- ""
- "&7Click to go back"
# ============================================
# PARTIAL RESTORE
# ============================================
partial-restore:
title: "&bSelect Items"
select-all:
title: "&a&lSelect All"
lore:
- ""
- "&7Selects all options"
- "&7for restoration."
clear-all:
title: "&c&lClear Selection"
lore:
- ""
- "&7Deselects all options."
selected: "&a✓ Selected"
not-selected: "&7Click to select"
click-deselect: "&7Click to deselect"
no-selection: "&cNo item selected"
selected-items: "&eSelected:"
click-preview: "&7Click to see preview"
preview-title: "&6Preview"
select-at-least-one: "&cSelect at least one item!"
will-restore: "&7Restore:"
click-confirm: "&eClick to confirm"
empty-selection: "&cEmpty Selection"
info:
items-saved: "&7Items saved: &f"
hotbar-items: "&7Hotbar items: &f"
armor-pieces: "&7Armor pieces: &f"
status: "&7Status: &f"
occupied: "Occupied"
empty: "Empty"
level: "&7Level: &a"
xp-total: "&7Total XP: &a"
effects: "&7Effects: &f"
health: "&7Health: &c"
hunger: "&7Hunger: &6"
saturation: "&7Saturation: &e"
options:
inventory:
title: "&eInventory"
desc: "All main inventory items"
hotbar:
title: "&aHotbar"
desc: "Hotbar items (slots 0-8)"
armor:
title: "&6Armor"
desc: "Helmet, chestplate, leggings, boots"
offhand:
title: "&dOff-hand"
desc: "Secondary hand item"
enderchest:
title: "&5Ender Chest"
desc: "Ender chest contents"
experience:
title: "&aXP/Level"
desc: "Level and experience points"
potion-effects:
title: "&dEffects"
desc: "Active potion effects"
health:
title: "&cHealth"
desc: "Health points"
food:
title: "&6Hunger"
desc: "Hunger and saturation level"
# ============================================
# COMPARE
# ============================================
compare:
title: "&6Compare Snapshots"
snapshot1: "&aSnapshot 1"
snapshot2: "&bSnapshot 2"
label-snapshot1: "&a[Snapshot 1]"
label-snapshot2: "&b[Snapshot 2]"
different: "&c≠ Different"
same: "&a= Same"
added: "&a+ Added"
removed: "&c- Removed"
info:
id: "&7ID: &f"
type: "&7Type: &f"
date: "&7Date: &f"
level: "&7Level: &a"
health: "&7Health: &c"
hunger: "&7Hunger: &6"
diff:
title: "&6Differences"
items: "items"
difference: "&7Difference: &f"
level-label: "&eLevel:"
s1: "&a S1: &f"
s2: "&b S2: &f"
diff-label: "&7 Diff: &f"
xp-label: "&eTotal XP:"
export:
title: "&eExport Comparison"
lore:
- ""
- "&7Exports the comparison"
- "&7to a JSON file."
- ""
- "&eClick to export"
# ============================================
# SNAPSHOT TYPES
# ============================================
types:
death-fall: "Death by Fall"
death-lava: "Death by Lava"
death-drowning: "Death by Drowning"
death-explosion: "Death by Explosion"
death-pvp: "Death by PvP"
death-pve: "Death by Mob"
death-void: "Death by Void"
death-command: "Death by Command"
death-other: "Death"
join: "Server Join"
leave: "Server Leave"
kick: "Kick"
world-change: "World Change"
teleport: "Teleport"
enderchest: "Ender Chest Use"
craft: "Craft"
pickup: "Item Pickup"
drop: "Item Drop"
manual: "Manual Snapshot"
scheduled: "Scheduled"
interval: "Interval"
critical: "Critical Event"
# ============================================
# HELP COMMANDS
# ============================================
help:
header: "&e&l=== InvRestore Help ==="
commands:
menu: "&e/ir menu &8- &7Opens main menu"
open: "&e/ir open &8- &7Your snapshots"
open-player: "&e/ir open <player> &8- &7Another player's snapshots"
players: "&e/ir players &8- &7List all players"
restore: "&e/ir restore <id> [player] &8- &7Restore snapshot"
compare: "&e/ir compare <id1> <id2> &8- &7Compare snapshots"
language: "&e/ir language <code> &8- &7Change language"
reload: "&e/ir reload &8- &7Reload configuration"
aliases: "&7Aliases: &f/invrestore, /ir, /invr"
Config file
YAML:
# ============================================
# InvRestore - Configuration
# Inventory restoration plugin
# ============================================
# Debug mode - shows detailed logs
debug: false
# ============================================
# STORAGE
# ============================================
storage:
# Storage type: yaml, sqlite, mysql
type: yaml
# Enable GZIP compression (recommended)
compression: true
# MySQL/MariaDB settings
mysql:
host: localhost
port: 3306
database: invrestore
username: root
password: ''
table-prefix: invrestore_
pool-size: 10
# ============================================
# SNAPSHOTS
# ============================================
snapshots:
# Maximum snapshots per player
max-per-player: 50
# Days to keep snapshots (retention policy)
retention-days: 30
# Automatically clean old snapshots
auto-purge: true
# Auto purge interval (in hours)
auto-purge-interval: 24
# Automatic snapshots by interval
interval-enabled: false
# Automatic snapshot interval (in minutes)
interval-minutes: 30
# ============================================
# TRIGGERS
# ============================================
triggers:
# Death (all types)
death:
enabled: true
# Player join server
join: true
# Player leave server
leave: true
# Player kick
kick: true
# World change
world-change: true
# Teleport (long-distance only)
teleport: false
# Ender chest usage
enderchest: false
# Item crafting
craft: false
# Picking up items
pickup: false
# Dropping items
drop: false
# ============================================
# GRAPHICAL USER INTERFACE (GUI)
# ============================================
gui:
# Page size (items per page)
page-size: 45
language: en_US
# ============================================
# PERMISSIONS
# ============================================
# invrestore.use - Basic access
# invrestore.open - Open own snapshots
# invrestore.open.others - Open other players' snapshots
# invrestore.restore - Restore own inventory
# invrestore.restore.others - Restore other players
# invrestore.restore.partial - Partial restoration
# invrestore.compare - Compare snapshots
# invrestore.export - Export snapshots
# invrestore.admin - General administration
# invrestore.admin.purge - Purge snapshots
# invrestore.admin.migrate - Migrate storage
# invrestore.admin.reload - Reload config
# invrestore.* - All permissions
Storage Options
YAML (Default)
- Pros: No setup required, human-readable files
- Cons: Slower with large datasets
- Location: plugins/InvRestore/data/
SQLite
- Pros: Fast, single file database, no server needed
- Cons: Not suitable for multi-server setups
- Location: plugins/InvRestore/invrestore.db
MySQL/MariaDB
- Pros: Fast, supports multiple servers, scalable
- Cons: Requires external database server
- Tables Created:
- invrestore_snapshots - Main snapshot data
- invrestore_metadata - Plugin metadata
Migration
To migrate between storage types:- Use /ir migrate <target> command
- Wait for migration to complete
- Edit config.yml to change storage.type
- Restart the server
Snapshot List
Shows all snapshots for a player with pagination.- Click: View snapshot details
- Shift+Click: Quick restore
Snapshot Details
Shows complete snapshot information:- Inventory contents (reorganized view)
- Armor slots
- Off-hand
- Statistics (level, XP, health, food)
- Potion effects
- Location and timestamp
- Actions: Restore Full, Restore Partial, Preview
Preview Menu
Side-by-side comparison:- Left side: Snapshot items
- Right side: Current inventory
- Stats comparison with differences
- Direct restore buttons
Admin Panel
Administrative functions:- Storage information
- System statistics
- Purge old snapshots
- Migration tool
- Config reload
- Debug mode status
Partial Restore
Select specific parts to restore:- Inventory
- Hotbar
- Armor
- Off-hand
- Ender Chest
- XP/Level
- Potion Effects
- Health
- Food
FAQ
Q: How much storage space does this plugin use?
A: With compression enabled, each snapshot uses approximately 1-5KB depending on inventory size. Without compression, 5-20KB per snapshot.Q: Can I use this on a BungeeCord/Velocity network?
A: Yes! Use MySQL storage and configure all servers to use the same database.Q: How do I restore a player who is offline?
A: Currently, the player must be online to receive the restored items. The snapshot data is preserved until they log in.Q: Can players restore their own items?
A: Yes, with the invrestore.open and invrestore.restore permissions.Q: How do I backup all snapshots?
A:- YAML: Copy the plugins/InvRestore/data/ folder
- SQLite: Copy plugins/InvRestore/invrestore.db
- MySQL: Use standard MySQL backup tools
Q: The plugin is causing lag!
A:- Enable compression in config
- Reduce max-per-player limit
- Reduce retention-days
- Disable unnecessary triggers
- Switch to SQLite or MySQL for better performance
Q: How do I completely reset the plugin?
A:- Stop the server
- Delete plugins/InvRestore/ folder
- Start the server (fresh config will be created)
