From fe7e56da8d4be0fe0d103b5e5e09279237af9da9 Mon Sep 17 00:00:00 2001 From: Felix Cravic Date: Sat, 16 May 2020 22:07:24 +0200 Subject: [PATCH] Added StorageFolder#getOrDefault and some cleanup --- .../server/storage/StorageFolder.java | 12 +++++++++- .../server/storage/StorageManager.java | 2 +- .../server/storage/StorageSystem.java | 23 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minestom/server/storage/StorageFolder.java b/src/main/java/net/minestom/server/storage/StorageFolder.java index 5e40fdb47..47f3d95a4 100644 --- a/src/main/java/net/minestom/server/storage/StorageFolder.java +++ b/src/main/java/net/minestom/server/storage/StorageFolder.java @@ -53,6 +53,7 @@ public class StorageFolder { DataType dataType = DATA_MANAGER.getDataType(type); if (dataType == null) throw new NullPointerException("You can only save registered DataType type!"); + PacketWriter packetWriter = new PacketWriter(); dataType.encode(packetWriter, object); // Encode byte[] encodedValue = packetWriter.toByteArray(); // Retrieve bytes @@ -65,12 +66,21 @@ public class StorageFolder { if (dataType == null) throw new NullPointerException("You can only save registered DataType type!"); - ByteBuf buffer = Unpooled.wrappedBuffer(get(key)); + byte[] data = get(key); + if (data == null) + return null; + + ByteBuf buffer = Unpooled.wrappedBuffer(data); PacketReader packetReader = new PacketReader(buffer); T value = dataType.decode(packetReader); return value; } + public T getOrDefault(String key, Class type, T defaultValue) { + T value; + return (value = get(key, type)) != null ? value : defaultValue; + } + public void getAndCloneData(String key, DataContainer dataContainer) { synchronized (cachedData) { diff --git a/src/main/java/net/minestom/server/storage/StorageManager.java b/src/main/java/net/minestom/server/storage/StorageManager.java index 299030a6c..60356b9b3 100644 --- a/src/main/java/net/minestom/server/storage/StorageManager.java +++ b/src/main/java/net/minestom/server/storage/StorageManager.java @@ -52,7 +52,7 @@ public class StorageManager { public void defineDefaultStorageSystem(Supplier storageSystemSupplier) { if (this.defaultStorageSystemSupplier != null) { - LOGGER.error("The default storage-system has been changed. This could lead to issues!"); + LOGGER.warn("The default storage-system has been changed. This could lead to issues!"); } this.defaultStorageSystemSupplier = storageSystemSupplier; } diff --git a/src/main/java/net/minestom/server/storage/StorageSystem.java b/src/main/java/net/minestom/server/storage/StorageSystem.java index 20f8403df..74a88d917 100644 --- a/src/main/java/net/minestom/server/storage/StorageSystem.java +++ b/src/main/java/net/minestom/server/storage/StorageSystem.java @@ -2,14 +2,37 @@ package net.minestom.server.storage; public interface StorageSystem { + /** + * Called when a foler is opened with this StorageSystem + * + * @param folderName the name of the folder + */ void open(String folderName); + /** + * @param key + * @return the retrieved data + */ byte[] get(String key); + /** + * Set the specified data to the defined key + * + * @param key + * @param data + */ void set(String key, byte[] data); + /** + * Delete the specified key from the database + * + * @param key + */ void delete(String key); + /** + * Called when the folder is closed, generally during server shutdown + */ void close(); }