Implement persistent data
This commit is contained in:
parent
80c77797bd
commit
c47b5c4376
62
src/dev/w1zzrd/invtweaks/DataStore.java
Normal file
62
src/dev/w1zzrd/invtweaks/DataStore.java
Normal file
@ -0,0 +1,62 @@
|
||||
package dev.w1zzrd.invtweaks;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.configuration.serialization.ConfigurationSerializable;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class DataStore {
|
||||
|
||||
private static final Logger logger = Bukkit.getLogger();
|
||||
|
||||
private final File storeFile;
|
||||
private final FileConfiguration config;
|
||||
|
||||
public DataStore(final String storeName, final Plugin plugin) {
|
||||
storeFile = new File(plugin.getDataFolder(), storeName + ".yml");
|
||||
config = YamlConfiguration.loadConfiguration(storeFile);
|
||||
|
||||
// Save config in case it doesn't exist
|
||||
saveData();
|
||||
}
|
||||
|
||||
public <T extends ConfigurationSerializable> T loadData(final String path, final DefaultGetter<T> defaultValue) {
|
||||
final T value = (T) config.get(path);
|
||||
return value == null ? defaultValue.get() : value;
|
||||
}
|
||||
|
||||
public <T extends ConfigurationSerializable> void storeData(final String path, final T value) {
|
||||
config.set(path, value);
|
||||
}
|
||||
|
||||
public void saveData() {
|
||||
try {
|
||||
config.save(storeFile);
|
||||
} catch (IOException e) {
|
||||
logger.log(Level.SEVERE, Logger.GLOBAL_LOGGER_NAME + " Could not save data due to an I/O error", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadData() {
|
||||
try {
|
||||
config.load(storeFile);
|
||||
} catch (IOException | InvalidConfigurationException e) {
|
||||
logger.log(Level.SEVERE, Logger.GLOBAL_LOGGER_NAME + " Could not load data due to an I/O error", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Functional interface for constructing default values
|
||||
* @param <T> Type to construct
|
||||
*/
|
||||
public interface DefaultGetter<T> {
|
||||
T get();
|
||||
}
|
||||
}
|
30
src/dev/w1zzrd/invtweaks/serialization/UUIDList.java
Normal file
30
src/dev/w1zzrd/invtweaks/serialization/UUIDList.java
Normal file
@ -0,0 +1,30 @@
|
||||
package dev.w1zzrd.invtweaks.serialization;
|
||||
|
||||
import org.bukkit.configuration.serialization.ConfigurationSerializable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class UUIDList implements ConfigurationSerializable {
|
||||
|
||||
public final List<UUID> uuids;
|
||||
|
||||
public UUIDList(final List<UUID> backingList) {
|
||||
uuids = backingList;
|
||||
}
|
||||
|
||||
public UUIDList() {
|
||||
this(new ArrayList<>());
|
||||
}
|
||||
|
||||
public UUIDList(final Map<String, Object> values) {
|
||||
this();
|
||||
if (values.containsKey("values"))
|
||||
uuids.addAll(((Collection<String>)values.get("values")).stream().map(UUID::fromString).collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> serialize() {
|
||||
return Collections.singletonMap("values", uuids.stream().map(UUID::toString).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user