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();
|
||||
|
||||
void setAllowTeleports(boolean allowTeleports);
|
||||
|
||||
@ApiStatus.Internal
|
||||
boolean saving();
|
||||
|
||||
@ApiStatus.Internal
|
||||
void saving(boolean saving);
|
||||
void allowTeleports(boolean allowTeleports);
|
||||
|
||||
Request request();
|
||||
|
||||
|
|
|
|||
|
|
@ -21,4 +21,6 @@ public interface UserManager {
|
|||
|
||||
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.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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user