Skip to content

Commit fcf9861

Browse files
authored
Merge pull request #1 from Uweb95/dev
V1.1
2 parents b612713 + d92c620 commit fcf9861

File tree

6 files changed

+61
-4
lines changed

6 files changed

+61
-4
lines changed

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
## Inventory Database
22

3-
This plugin syncs players' inventory and armor using a database.
4-
Currently, the data is only saved when the user disconnects or gets kicked.
3+
This plugin syncs players' inventory and armor using a database.
4+
I wrote the plugin for paper, but it should work on Bukkit/Spigot too.
5+
6+
Tested minecraft version: 1.19.3
57

68
### Configuration
79

@@ -20,7 +22,9 @@ general:
2022
# Enable inventory sync
2123
syncInventory: true
2224
# Enable armor sync
23-
syncArmor: true
25+
syncArmor: true
26+
# Time between data saves in minutes. (0 to only sync when connecting/disconnecting)
27+
saveInterval: 2
2428
2529
debug:
2630
# Inventory sync debug messages.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>de.lunarsoftware</groupId>
88
<artifactId>inventorydatabase</artifactId>
9-
<version>1.0</version>
9+
<version>1.1</version>
1010
<packaging>jar</packaging>
1111

1212
<name>InventoryDatabase</name>

src/main/java/de/lunarsoftware/inventorydatabase/InventoryDatabase.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import de.lunarsoftware.inventorydatabase.events.PlayerJoin;
55
import de.lunarsoftware.inventorydatabase.events.PlayerLeave;
66
import de.lunarsoftware.inventorydatabase.sync.Sync;
7+
import org.bukkit.Bukkit;
8+
import org.bukkit.event.HandlerList;
79
import org.bukkit.plugin.PluginManager;
810
import org.bukkit.plugin.java.JavaPlugin;
911

@@ -29,6 +31,13 @@ public void onEnable() {
2931
pluginManager.registerEvents(new PlayerLeave(), this);
3032
}
3133

34+
public void onDisable() {
35+
sync.saveOnlinePlayers();
36+
Bukkit.getScheduler().cancelTasks(this);
37+
HandlerList.unregisterAll(this);
38+
database.disconnect();
39+
}
40+
3241
public static Logger logger() {
3342
return logger;
3443
}

src/main/java/de/lunarsoftware/inventorydatabase/sync/Sync.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import de.lunarsoftware.inventorydatabase.InventoryDatabase;
44
import de.lunarsoftware.inventorydatabase.database.PlayerInventory;
5+
import org.bukkit.Bukkit;
56
import org.bukkit.entity.Player;
67
import org.bukkit.inventory.ItemStack;
78
import org.bukkit.util.io.BukkitObjectInputStream;
@@ -11,7 +12,9 @@
1112
import java.io.ByteArrayInputStream;
1213
import java.io.ByteArrayOutputStream;
1314
import java.io.IOException;
15+
import java.util.ArrayList;
1416
import java.util.HashSet;
17+
import java.util.List;
1518
import java.util.Set;
1619

1720
public class Sync {
@@ -20,10 +23,14 @@ public class Sync {
2023
private final boolean inventorySync;
2124
private final boolean armorSync;
2225

26+
private final SyncTask syncTask;
27+
2328
public Sync() {
2429
enableDebug = InventoryDatabase.getInstance().getConfig().getBoolean("debug.syncMessages", false);
2530
inventorySync = InventoryDatabase.getInstance().getConfig().getBoolean("general.syncInventory", false);
2631
armorSync = InventoryDatabase.getInstance().getConfig().getBoolean("general.syncArmor", false);
32+
33+
syncTask = new SyncTask();
2734
}
2835

2936
public void loadPlayerInventory(Player player) {
@@ -77,6 +84,22 @@ public void saveData(final Player player, final ItemStack[] inventory, final Ite
7784
}
7885
}
7986

87+
public void saveOnlinePlayers() {
88+
if (enableDebug) InventoryDatabase.logger().info("Start saving task");
89+
List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers());
90+
91+
if (players.size() == 0) {
92+
if (enableDebug) InventoryDatabase.logger().info("No players online to save.");
93+
return;
94+
}
95+
96+
for (Player player : players) {
97+
if (player.isOnline()) InventoryDatabase.getInstance().getSync().savePlayerInventory(player);
98+
}
99+
100+
if (enableDebug) InventoryDatabase.logger().info("Inventory of " + players.size() + " players saved.");
101+
}
102+
80103
public void loadData(final Player player) {
81104
PlayerInventory playerInventory = PlayerInventory.getInventory(player);
82105
if (!inventorySync && !armorSync) return;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package de.lunarsoftware.inventorydatabase.sync;
2+
3+
import de.lunarsoftware.inventorydatabase.InventoryDatabase;
4+
import org.bukkit.Bukkit;
5+
6+
public class SyncTask {
7+
private final long saveInterval;
8+
9+
public SyncTask() {
10+
saveInterval = InventoryDatabase.getInstance().getConfig().getLong("general.saveInterval", 0) * 60 * 20;
11+
12+
// Only activate task when saveInterval is set higher than 0
13+
if (saveInterval > 0) runTask();
14+
}
15+
16+
private void runTask() {
17+
Bukkit.getScheduler().runTaskTimerAsynchronously(InventoryDatabase.getInstance(), () -> InventoryDatabase.getInstance().getSync().saveOnlinePlayers(), saveInterval, saveInterval);
18+
}
19+
}

src/main/resources/config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ database:
1111
general:
1212
syncInventory: true
1313
syncArmor: true
14+
# Time between data saves in minutes. (0 to only sync when connecting/disconnecting)
15+
saveInterval: 2
1416

1517
debug:
1618
# Inventory sync debug messages.

0 commit comments

Comments
 (0)