diff --git a/src/dev/w1zzrd/invtweaks/DataStore.java b/src/dev/w1zzrd/invtweaks/DataStore.java new file mode 100644 index 0000000..2077c8f --- /dev/null +++ b/src/dev/w1zzrd/invtweaks/DataStore.java @@ -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 loadData(final String path, final DefaultGetter defaultValue) { + final T value = (T) config.get(path); + return value == null ? defaultValue.get() : value; + } + + public 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 Type to construct + */ + public interface DefaultGetter { + T get(); + } +} diff --git a/src/dev/w1zzrd/invtweaks/serialization/UUIDList.java b/src/dev/w1zzrd/invtweaks/serialization/UUIDList.java new file mode 100644 index 0000000..d549ceb --- /dev/null +++ b/src/dev/w1zzrd/invtweaks/serialization/UUIDList.java @@ -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 uuids; + + public UUIDList(final List backingList) { + uuids = backingList; + } + + public UUIDList() { + this(new ArrayList<>()); + } + + public UUIDList(final Map values) { + this(); + if (values.containsKey("values")) + uuids.addAll(((Collection)values.get("values")).stream().map(UUID::fromString).collect(Collectors.toSet())); + } + + @Override + public Map serialize() { + return Collections.singletonMap("values", uuids.stream().map(UUID::toString).collect(Collectors.toList())); + } +}