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