Do not expose saving tasks to the api and change the way saving data is handled.

This commit is contained in:
Len
2024-06-18 10:40:31 +02:00
parent d1872f6e95
commit f6dd31ba33
11 changed files with 62 additions and 46 deletions
@@ -7,9 +7,7 @@ import com.alttd.essentia.listeners.PlayerListener;
import com.alttd.essentia.storage.StorageManager;
import com.alttd.essentia.storage.StorageProvider;
import com.alttd.essentia.storage.StorageType;
import com.alttd.essentia.storage.mysql.SQLStorageProvider;
import com.alttd.essentia.user.EssentiaUserManager;
import com.alttd.essentia.user.User;
import com.alttd.essentia.user.UserManager;
import lombok.Getter;
import org.bukkit.plugin.PluginManager;
@@ -44,13 +42,7 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI {
@Override
public void onDisable() {
getServer().getScheduler().cancelTasks(this);
for (User user : userManager().getUsers().values()) {
try {
storageProvider.save(user);
} catch (Exception e) {
e.printStackTrace();
}
}
userManager().saveAllUsers();
storageProvider().disable();
}
@@ -86,7 +78,7 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI {
}
void loadManagers() {
userManager = new EssentiaUserManager();
userManager = new EssentiaUserManager(this);
}
void loadStorageProvider() {
@@ -17,7 +17,7 @@ public class TeleportToggleCommand extends PlayerSubCommand {
@Override
protected boolean execute(Player player, User user, String... args) {
user.setAllowTeleports(!user.allowTeleports());
user.allowTeleports(!user.allowTeleports());
TagResolver placeholders = TagResolver.resolver(
Placeholder.parsed("toggle", BooleanUtils.toStringOnOff(user.allowTeleports()))
);
@@ -2,6 +2,7 @@ package com.alttd.essentia.listeners;
import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.user.EssentiaUser;
import com.alttd.essentia.user.User;
import com.alttd.essentia.user.UserManager;
import org.bukkit.Location;
@@ -84,7 +85,8 @@ public class PlayerListener implements Listener {
User user = userManager.getUser(player);
try {
plugin.storageProvider().save(user);
if (user instanceof EssentiaUser essentiaUser)
plugin.storageProvider().save(essentiaUser);
userManager.removeUser(player.getUniqueId());
} catch (Exception ignored) {}
}
@@ -46,7 +46,17 @@ public abstract class StorageProvider {
protected abstract EssentiaUser load(UUID uuid);
public abstract void save(@NotNull User user) throws Exception;
public void startSaving(EssentiaUser user) throws Exception {
if (user.saving() || !user.needsSaving()) return;
user.saving(true);
save(user);
user.saving(false);
user.needsSaving(false);
}
public abstract void save(@NotNull EssentiaUser user) throws Exception;
public abstract void delete(UUID uuid) throws Exception;
@@ -54,17 +64,7 @@ public abstract class StorageProvider {
@Override
public void run() {
for (User user : plugin.userManager().getUsers().values()) {
try {
if (user.saving()) {
continue;
}
save(user);
} catch (Exception e) {
user.saving(false);
e.printStackTrace();
}
}
plugin.userManager().saveAllUsers();
}
}
@@ -4,7 +4,6 @@ import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.storage.StorageProvider;
import com.alttd.essentia.user.EssentiaUser;
import com.alttd.essentia.user.User;
import org.jetbrains.annotations.NotNull;
import java.sql.PreparedStatement;
@@ -140,7 +139,7 @@ public class SQLStorageProvider extends StorageProvider {
}
@Override
public void save(@NotNull User user) throws Exception {
public void save(@NotNull EssentiaUser user) throws Exception {
// might not be the best way if new fields are added...
// split into multiple tables - users, userdata, userhomes, ... ?
String sql = "INSERT INTO users" +
@@ -3,7 +3,6 @@ package com.alttd.essentia.storage.sqlite;
import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.storage.StorageProvider;
import com.alttd.essentia.user.EssentiaUser;
import com.alttd.essentia.user.User;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
@@ -20,7 +19,7 @@ public class SQLiteStorageProvider extends StorageProvider {
}
@Override
public void save(@NotNull User user) throws Exception {
public void save(@NotNull EssentiaUser user) throws Exception {
}
@@ -3,7 +3,6 @@ package com.alttd.essentia.storage.yaml;
import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.storage.StorageProvider;
import com.alttd.essentia.user.EssentiaUser;
import com.alttd.essentia.user.User;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@@ -42,10 +41,7 @@ public class YamlStorageProvider extends StorageProvider {
}
@Override
public void save(@NotNull User user) throws Exception {
if (user.saving()) return;
user.saving(true);
public void save(@NotNull EssentiaUser user) throws Exception {
File configFile = new File(dataDirectory, user.getUUID() + ".yml");
YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile);
@@ -57,7 +53,6 @@ public class YamlStorageProvider extends StorageProvider {
config.set("allow-teleports", user.allowTeleports());
config.save(configFile);
user.saving(false);
}
@Override
@@ -1,8 +1,6 @@
package com.alttd.essentia.user;
import com.alttd.essentia.request.Request;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.Location;
import java.util.*;
@@ -19,6 +17,7 @@ public class EssentiaUser implements User {
protected Request request;
private boolean saving;
private boolean needsSaving; // can we use a decorator for this to set it to true on every change?
private EssentiaUser(Builder builder) {
this.uuid = builder.uuid;
@@ -45,6 +44,7 @@ public class EssentiaUser implements User {
return;
}
backLocation = location;
needsSaving = true;
}
@Override
@@ -60,11 +60,13 @@ public class EssentiaUser implements User {
@Override
public void setHome(String name, Location location) {
homes.put(name, location);
needsSaving = true;
}
@Override
public void removeHome(String name) {
homes.remove(name);
needsSaving = true;
}
@Override
@@ -95,20 +97,27 @@ public class EssentiaUser implements User {
}
@Override
public void setAllowTeleports(boolean allowTeleports) {
public void allowTeleports(boolean allowTeleports) {
this.allowTeleports = allowTeleports;
needsSaving = true;
}
@Override
public boolean saving() {
return saving;
}
@Override
public void saving(boolean saving) {
this.saving = saving;
}
public boolean needsSaving() {
return needsSaving;
}
public void needsSaving(boolean needsSaving) {
this.needsSaving = needsSaving;
}
@Override
public Request request() {
return request;
@@ -1,5 +1,6 @@
package com.alttd.essentia.user;
import com.alttd.essentia.EssentiaPlugin;
import org.bukkit.entity.Player;
import java.util.Map;
@@ -8,8 +9,14 @@ import java.util.concurrent.ConcurrentHashMap;
public class EssentiaUserManager implements UserManager {
protected final EssentiaPlugin plugin;
private final Map<UUID, User> essentiaPlayers = new ConcurrentHashMap<>();
public EssentiaUserManager(EssentiaPlugin plugin) {
this.plugin = plugin;
}
@Override
public User getUser(Player player) {
return getUser(player.getUniqueId());
@@ -50,4 +57,21 @@ public class EssentiaUserManager implements UserManager {
return new EssentiaUser.Builder().uuid(uuid).build();
}
@Override
public void saveAllUsers() {
for (User user : getUsers().values()) {
if (user instanceof EssentiaUser essentiaUser) {
try {
if (essentiaUser.saving() || !essentiaUser.needsSaving()) {
continue;
}
plugin.storageProvider().startSaving(essentiaUser);
} catch(Exception e){
essentiaUser.saving(false);
e.printStackTrace();
}
}
}
}
}